<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-27638168</id><updated>2012-01-27T15:56:06.885-06:00</updated><category term='calendar'/><category term='cryptography'/><category term='erlang'/><category term='free'/><category term='event planner'/><category term='gnu'/><category term='richard.stallman'/><category term='ecal'/><category term='freedom'/><category term='fsf'/><category term='sensationalism'/><category term='bum'/><category term='encryption'/><category term='picture'/><category term='string theory'/><category term='rms'/><category term='chicago'/><category term='nintendo'/><category term='chat'/><category term='glug'/><category term='irc'/><category term='review'/><category term='linux'/><category term='gnewsense'/><category term='aes'/><category term='idea'/><category term='ballmer'/><category term='conservation'/><category term='freesoftware'/><category term='richard'/><category term='wii'/><category term='hate'/><category term='diffie-hellman'/><category term='echat'/><category term='microsof'/><category term='t extortion'/><category term='stallman'/><category term='lug'/><category term='energy'/><category term='dh'/><category term='gnulinux'/><category term='software'/><category term='serializing'/><category term='speech'/><category term='ssl'/><category term='gnuisance'/><category term='steve'/><category term='network'/><category term='mergesort'/><category term='ubuntu'/><title type='text'>speak, it ain't illegal yet</title><subtitle type='html'>A place for hopefully something useful, but I really don't know.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-27638168.post-7507922563143680828</id><published>2006-11-28T04:30:00.000-06:00</published><updated>2006-11-28T04:35:41.945-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wii'/><category scheme='http://www.blogger.com/atom/ns#' term='nintendo'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>A Wiik in Review</title><content type='html'>&lt;span style="font-family:courier new;"&gt;I have now had the &lt;a href="http://www.wii.com"&gt;Wii&lt;/a&gt; for a whole week. You may want to read my &lt;a href="http://diginux.blogspot.com/2006/11/wii-first-impressions.html"&gt;initial review&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;In the past week I have come to see just how big of an impact the Wii  is going to have on gaming. For Thanksgiving, I had my parents and grandma over. My family including my grandma, were able to play Wii Golf and had a great time doing it. The Wii really does appeal to all ages it seems. I don't think I have ever seen that much excitement and fist pumping from my family ever when playing video games.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Now for a few more reviews of games. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Madden&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;The Wii is absolutely a perfect match for Madden. It is so much easier when in order to juke or stiff arm, all you have to do is wave the nunchuck or wiimote, instead of trying to press button on the control. It really improves your timing when doing moves and makes juking and stiff arming actually useful. The same can be said for playing defense. Jumping to intercept the ball by raising both the nunchuck and wiimote in the air or swatting the ball just by waving the wiimote is very much intuitive. The only regret that I have is it not having internet play. I hope the next version does.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Monster Truck 4x4&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;This game is very easy to play. The steering handles exceptionally well. The only problem with the game is that you can beat it in 90 minutes in single player mode. Aside from that though, it is still a very fun multiplayer game for racing your friends, or even playing soccer by pushing the ball with your truck!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Rayman&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;All I can say is, this game rocks! From throwing cows to hitting bunnies, this game has it all. It is very comical and addicting. The only reason I was stopped from playing was when my kitty hit the power button on the surge protector. Be careful! I already know one other person who is insanely addicted to this game.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-7507922563143680828?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/7507922563143680828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=7507922563143680828' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/7507922563143680828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/7507922563143680828'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/11/wiik-in-review.html' title='A Wiik in Review'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-5667896547977114970</id><published>2006-11-22T06:02:00.000-06:00</published><updated>2006-11-23T06:30:43.784-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='microsof'/><category scheme='http://www.blogger.com/atom/ns#' term='gnu'/><category scheme='http://www.blogger.com/atom/ns#' term='ballmer'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='free'/><category scheme='http://www.blogger.com/atom/ns#' term='freesoftware'/><category scheme='http://www.blogger.com/atom/ns#' term='t extortion'/><category scheme='http://www.blogger.com/atom/ns#' term='steve'/><category scheme='http://www.blogger.com/atom/ns#' term='gnulinux'/><category scheme='http://www.blogger.com/atom/ns#' term='freedom'/><title type='text'>You heard him, let's pay the man for Linux.</title><content type='html'>&lt;a style="font-family: courier new;" href="http://tristan.diginux.net/"&gt;&lt;span style="text-decoration: underline;"&gt;Tristan Sloughter&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:courier new;"&gt; has &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://defunside.blogspot.com/2006/11/microsofts-claim-to-linux.html"&gt;posted&lt;/a&gt;&lt;span style="font-family:courier new;"&gt; a blog post about how Steve Ballmer and Microsoft want to extort us Linux folk for the rights to use free software. In response, Tristan suggests we start a campaign of mailing monopoloy money to Steven Ballmer. I am definitely all for it! Only problem is, I am not just going to handover my hard earned Monopoly Money! Good Hasbro has PDF's on their site to print some out! I recommend printing the 500's. Just to make sure you pay enough to get Microsoft off your back.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Money: &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;http://www.hasbro.com/monopoly/pl/page.treasurechest/dn/default.cfm&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Address:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Microsoft Corporation&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;c/o Steven Ballmer&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;One Microsoft Way&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Redmond, WA 98052-7329&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://digg.com/linux_unix/Send_Steve_Balmer_Monopoly_Money_to_Pay_for_Linux"&gt;&lt;span style="font-family:courier new;"&gt;Spread the word!&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://reddit.com/info/s0lc/comments"&gt;Also on reddit.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-5667896547977114970?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/5667896547977114970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=5667896547977114970' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/5667896547977114970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/5667896547977114970'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/11/you-heard-him-lets-pay-man-for-linux.html' title='You heard him, let&apos;s pay the man for Linux.'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-805333029488023089</id><published>2006-11-22T05:03:00.001-06:00</published><updated>2006-11-22T08:55:21.608-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wii'/><category scheme='http://www.blogger.com/atom/ns#' term='nintendo'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>Wii: First Impressions</title><content type='html'>&lt;span style="font-family:courier new;"&gt;I received my Nintedo Wii yesterday. I was lucky enough to have ordered one from Circuit City during the few minutes that they took preorders on Friday. They shipped it out Monday, and it was here Tuesday(yesterday). Anyways, here are my first impressions of some different aspects about the Wii.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;The Wii Itself&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;I must say the thing is even smaller than I could have imagined. It is slightly slimmer than a Mac Mini, a little longer, and just a tad wider. The thing feels absolutely solid. The controllers(Wiimote and Nunchuck) are also very solid. The Wiimote even comes with a wrist strap, so you don't have to worry about flinging the thing out of your hand. When I first heard it would have a strap, I figured I wouldn't use it, since it would probably be annoying. That is nowhere near the case. You can barely even notice it is on, yet it gives you that extra security that you don't have to worry about dropping your brand new 30 dollar Wiimote on the floor.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Setup&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Setup was an absolute breeze. Just plug in the power, A/V cables, and the Wii sensor bar, and you are on your way. The initial screen just asks you to specify a name for your box and the date. From there setting up the wireless is just as easy by going to the options. There is a system information section that tells you what your MAC address is if you do MAC filtering. Also, the wireless gives you all the major choices for WEP and WPA encryption if you have those enabled on your router. After that, it goes through an update. The update took me about 5 minutes, I am guessing because the server is probably a little bogged down at the moment, but nothing too bad.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Game Play - Wii Sports&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;I of course started by playing Wii Sports Baseball! Both my girlfriend and I had an absolute blast. The pitching and batting is very intuitive and fun. You even kind of get a workout if you don't cheat and really go through all the motions. It actually feels like you are playing baseball(at least way more so than any other baseball game I have played). In case you are wondering how you run the bases, don't worry about it, you can't! When you hit the ball, the computer basically estimates if you would have been out, or if not, how many bases you would have got.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;From there we went to Tennis. Again, and absolutely fun experience. You hold the remote just as if you would the handle of a tennis racket and swing away! The remote even seems to account for what your racket angle would be an applies the appropiate spin and aim on the ball.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;After that we played boxing. This was probably my least favorite of the Wii Sports games. It was fun, but it seemed kind of clunky feeling, and not all of your punches would always be registered. It could just be that I need to get more used to it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Next was Golf. Again very inuitive, and very fun. Just like tennis, except you are swinging at the ground, the game registers the angle and spin off your club, as well as the velocity of your club to determine the speed of the ball of the club. Putting was a little challenging at first, but then again, it is challenging for me in real life too.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Finally there was bowling. This was also tons of fun. I imagine this game will be the game to play when you have friends over, as you don't need 4 remotes to have 4 people play, just hand the remote over. The game is addicting and really does require that you aim your shot, and bowl the ball with the right power and angle.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Game Play - Red Steel&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;I haven't gotten too far into Red Steel, but so far it has been fun. It is a little tricking getting used to using the Wiimote to turn yourself around and look up and down while using the Nunchuck to actually move. Also, sometimes it seems like the Wiimote gets a little confused and has you staring at the sky for a couple of seconds before it figures out what you want. Other than that, the game is alot of fun, and I think shooting people in the game with the Wiimote is easier then even using a mouse on a computer. You also get to do sword fighting with the Wiimote which actually follows your moves fairly well and seems pretty accurate.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Overall&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Overall I would say that the Wii is the best system I have ever played. You can really tell it is made for anyone, even non-gamers. Nintendo seems to have this down to a science. Whenever you start thinking to yourself, "Well, how do I do that!" it seems at that moment Nintendo always has a little message bar telling you what you need to know. Along with these well placed helpful hints, the gameplay is simple and intuitive enough that the playing field for everyone is even. My GF beat me in Bowling and Baseball, and I beat her in Tennis and Golf. It really does not depend on how much of a gamer you are, but rather just doing it and trying to have some fun!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-805333029488023089?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/805333029488023089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=805333029488023089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/805333029488023089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/805333029488023089'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/11/wii-first-impressions.html' title='Wii: First Impressions'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-2666741279377960414</id><published>2006-11-15T05:01:00.000-06:00</published><updated>2006-11-14T10:24:09.159-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cryptography'/><category scheme='http://www.blogger.com/atom/ns#' term='irc'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='echat'/><category scheme='http://www.blogger.com/atom/ns#' term='dh'/><category scheme='http://www.blogger.com/atom/ns#' term='encryption'/><category scheme='http://www.blogger.com/atom/ns#' term='chat'/><category scheme='http://www.blogger.com/atom/ns#' term='diffie-hellman'/><category scheme='http://www.blogger.com/atom/ns#' term='aes'/><title type='text'>Adding AES Encryption To Erlang Chat</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;span style="font-family:courier new;"&gt;I have been working on adding encryption to an &lt;a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat"&gt;IRC&lt;/a&gt; clone that I am working on with &lt;a href="https://tristan.diginux.net/wiki/index.php/Main_Page"&gt;Tristan Sloughter&lt;/a&gt; called &lt;a href="https://bohr.diginux.net/wiki/index.php/EChat"&gt;EChat&lt;/a&gt;. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Just like IRC, in normal operation EChat sends all communications to the server, then the server figures out who needs to get what. So, for my initial stab at adding encryption to EChat, I decided to encrypt the transmissions between clients and the server, instead of end to end. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-weight: bold;"&gt;Client1 &lt;--Key1--&gt;  Server &lt;--Key2--&gt; Client2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;So basically, the server does all the key management. Since &lt;a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard"&gt;AES&lt;/a&gt; requires a symmetric 128-bit key, we need a method of having each client the server generate a key. That is where &lt;a href="http://en.wikipedia.org/wiki/Diffie-Hellman"&gt;Diffie-Hellman&lt;/a&gt;(DH) comes in!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;DH is a quick and easy way to create symmetric keys between two people without ever  having to reveal what the key actually is in plain text.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;DH can be explained alot better &lt;a href="http://en.wikipedia.org/wiki/Diffie-Hellman"&gt;here&lt;/a&gt;, than I can do, so I won't spend the time going over it. However I will talk about a few specifics of my implementation in &lt;a href="http://www.erlang.org/"&gt;Erlang&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;In the algorithm, a and b both need to be a certain size in order to guarantee there are 128 bits in the final key. Therefore, to create them I simply did the following:&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: courier new; font-weight: bold;"&gt;gen_DHa() -&gt; gen_DHb().&lt;br /&gt;gen_DHb() -&gt; crypto:rand_uniform(170141183460469231731687303715884105729,&lt;br /&gt;                     340282366920938463463374607431768211455).&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;For the curious, 2^127+1 = 170141183460469231731687303715884105729,&lt;br /&gt;and 2^128-1 = 340282366920938463463374607431768211455. Generating a number in this range assures us we get a number that is at least 128 bits.&lt;br /&gt;&lt;br /&gt;Also, to generate g and h, I just did the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;gen_DHp() -&gt; gen_DHg().&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;gen_DHg() -&gt; make_prime(50).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On the client side, we calculate A as follows:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DHg = ecrypt:gen_DHg(),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DHp = ecrypt:gen_DHp(),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DHa = ecrypt:gen_DHa(),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A = crypto:mod_exp(DHg, DHa, DHp).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On the server side we calculate B as follows:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DHb = ecrypt:gen_DHb(),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;B = crypto:mod_exp(DHg, DHb, DHp).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now the client and server exchange A and B, and each can calculate the key&lt;br /&gt;appropriately:&lt;br /&gt;&lt;br /&gt;Client: &lt;span style="font-weight: bold;"&gt;Key = crypto:mod_exp(B, DHa, DHp).&lt;/span&gt;&lt;br /&gt;Server: &lt;span style="font-weight: bold;"&gt;Key = crypto:mod_exp(A, DHb, DHp).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now we have a key that is at least 128 bits. We want to make sure it is exactly 128 bits though, so I wrote the following function that ensures this. All it does is generate exactly 16 bytes from the stream of bits:&lt;br /&gt;&lt;pre style="font-family: courier new; font-weight: bold;"&gt;integerlist_to_key([], Key, _) -&gt; lists:concat(lists:sublist(Key, 16));&lt;br /&gt;integerlist_to_key([Head | Tail], Key, Tmp) -&gt;&lt;br /&gt;Test = list_to_integer(lists:reverse([Head | Tmp])),&lt;br /&gt;  if&lt;br /&gt;      Test &gt; 255 -&gt; integerlist_to_key(Tail, [list_to_atom([list_to_integer(Tmp)])| Key], [Head]);&lt;br /&gt;      true -&gt; integerlist_to_key(Tail, Key, lists:reverse([Head | Tmp]))&lt;br /&gt;  end.&lt;/pre&gt;&lt;br /&gt;Now that we have a 128-bit symmetric key for both the client and server, we can start using AES encryption!&lt;br /&gt;&lt;br /&gt;To find out about AES, read &lt;a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard"&gt;here&lt;/a&gt;. Basically AES requires an initialization vector(IV) for each message, as well as a symmetric key, and whatever text you want to encode.&lt;br /&gt;&lt;br /&gt;To create the Encrypt and Decrypt functions, I decided just to append the IV to the front of each message sent. The IV does not need to be kept secret, and is only used to deter statistical attacks on the encrypted message. Thus, the following code shows how I did the encrypt and decrypt:&lt;br /&gt;&lt;pre style="font-family: courier new; font-weight: bold;"&gt;encrypt(Message, Key) -&gt;&lt;br /&gt;IV = crypto:rand_bytes(16),&lt;br /&gt;list_to_binary([IV] ++ [crypto:aes_cfb_128_encrypt(Key, IV, Message)]).&lt;br /&gt;&lt;br /&gt;decrypt(Message, Key) -&gt;&lt;br /&gt;{IV, Crypt} = lists:split(16, binary_to_list(Message)),&lt;br /&gt;binary_to_list(crypto:aes_cfb_128_decrypt(Key, list_to_binary(IV),&lt;br /&gt;              list_to_binary(Crypt))).&lt;/pre&gt;&lt;br /&gt;That's all there is to it! Now you can add AES encryption to your application, whether it is for messaging or file storage. If you would like to find out more about the Erlang AES implementation, go &lt;a href="http://erlang.org/doc/doc-5.5.2/doc/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-2666741279377960414?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/2666741279377960414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=2666741279377960414' title='28 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/2666741279377960414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/2666741279377960414'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/10/adding-aes-encryption-to-erlang-chat.html' title='Adding AES Encryption To Erlang Chat'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>28</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-2117174870026375029</id><published>2006-11-14T06:57:00.000-06:00</published><updated>2006-11-14T07:10:15.967-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gnu'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='fsf'/><category scheme='http://www.blogger.com/atom/ns#' term='free'/><category scheme='http://www.blogger.com/atom/ns#' term='freesoftware'/><category scheme='http://www.blogger.com/atom/ns#' term='sensationalism'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='gnulinux'/><category scheme='http://www.blogger.com/atom/ns#' term='freedom'/><title type='text'>Sensationalism in the GNU/Linux world</title><content type='html'>&lt;span style="font-family: courier new;"&gt;Today I came across the following blog post entitled  &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://www.jejik.com/articles/2006/11/is_ubuntu_set_to_become_non-free"&gt;Is Ubuntu Set to become Non-free?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Basically they complain how Ubuntu is going to want you to use proprietary drivers for using the default composite manager. The thing that bugs me is that Ubuntu is already non-free. Their own &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://www.ubuntu.com/ubuntu/philosophy"&gt;philosophy&lt;/a&gt;&lt;span style="font-family: courier new;"&gt;(which the author even states) specifically says they allow for specific cases of having non-free software. To me, you can't be slightly free or non-free, you are either free, or you are not, it is just that simple.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Try telling that to digg readers though. It is funny to go through their &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://digg.com/linux_unix/Is_Ubuntu_set_to_become_non_free"&gt;comments&lt;/a&gt;&lt;span style="font-family: courier new;"&gt; on this article, and read many of them say "No", Ubuntu is not going to become non-free.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;I think Ubuntu and Debian are both partially to blame here. They pretend they are "free" when really they are not, so now a mass of people believe that is what having a free distribution means. More importantly though, sensationalist posters who are just merely looking to grab attention of the digg crowd are to blame. Why someone would goto the trouble to distort facts and ramble about misleadings just to get a reaction from the digg crowd is beyond me. I guess some people really are just that narcissistic. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-2117174870026375029?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/2117174870026375029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=2117174870026375029' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/2117174870026375029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/2117174870026375029'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/11/sensationalism-in-gnulinux-world.html' title='Sensationalism in the GNU/Linux world'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-1166127780398115966</id><published>2006-11-13T07:17:00.001-06:00</published><updated>2006-11-13T07:19:19.670-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='chicago'/><category scheme='http://www.blogger.com/atom/ns#' term='free'/><category scheme='http://www.blogger.com/atom/ns#' term='rms'/><category scheme='http://www.blogger.com/atom/ns#' term='speech'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='glug'/><category scheme='http://www.blogger.com/atom/ns#' term='gnulinux'/><category scheme='http://www.blogger.com/atom/ns#' term='lug'/><category scheme='http://www.blogger.com/atom/ns#' term='richard'/><category scheme='http://www.blogger.com/atom/ns#' term='gnu'/><category scheme='http://www.blogger.com/atom/ns#' term='fsf'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='stallman'/><category scheme='http://www.blogger.com/atom/ns#' term='freesoftware'/><category scheme='http://www.blogger.com/atom/ns#' term='richard.stallman'/><title type='text'>Richard Stallman Talk</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt; &lt;a href="http://www.flickr.com/photos/diginux/294165524/" title="photo sharing"&gt;&lt;img src="http://static.flickr.com/100/294165524_f747f00980_m.jpg" alt="" style="border: 2px solid rgb(0, 0, 0);" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="margin-top: 0px;font-size:0;" &gt;  &lt;a href="http://www.flickr.com/photos/diginux/294165524/"&gt;RichardStallmanTalk061104_7388.JPG&lt;/a&gt; &lt;br /&gt; Originally uploaded by &lt;a href="http://www.flickr.com/people/diginux/"&gt;diginux0&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: courier new;"&gt;The pictures for Richard Stallman's talk is now up on my flickr page. You can view all of them here: http://flickr.com/photos/diginux/sets/72157594369802498/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Also, if you would like to hear the audio of the speech, go here: http://www.chicagolug.org/uploads/4/49/RMS.ogg&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-1166127780398115966?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/1166127780398115966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=1166127780398115966' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/1166127780398115966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/1166127780398115966'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/11/richardstallmantalk0611047388jpg.html' title='Richard Stallman Talk'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-6346615380729020251</id><published>2006-11-12T09:59:00.001-06:00</published><updated>2006-11-12T10:15:24.958-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gnu'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='gnuisance'/><category scheme='http://www.blogger.com/atom/ns#' term='gnewsense'/><category scheme='http://www.blogger.com/atom/ns#' term='glug'/><category scheme='http://www.blogger.com/atom/ns#' term='gnulinux'/><category scheme='http://www.blogger.com/atom/ns#' term='lug'/><title type='text'>gNuisance (aka gNewSense)</title><content type='html'>&lt;span style="font-family:courier new;"&gt;Very recently the &lt;a href="http://www.fsf.org/"&gt;FSF&lt;/a&gt; announced a new Free GNU/Linux distro &lt;a href="http://www.gnewsense.org/"&gt;gNuisance&lt;/a&gt;. I fully support any and all free software and wish them the best of luck, but I feel their choice of basing gNuisance off of Ubuntu is a poor choice. Right now if you want to use a free GNU/Linux distro, your options are limited, and most of them aren't very fulfilling. That is why I think, instead of branching off of a distro that was branched off of another distro is a bad idea. Other people have already tried this, and it seems that the problems of the original distro(s) holds the new free distro back from its full potential.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;It is time all of us free software lovers got together and really start a free "Nu" GNU/Linux distro from scratch. This will allow us to make choices based on what is best for freedom. It also allows us to make the best possible distro out there, so people won't use it just because it is free, but because it is good and they just plain want to use it!  &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-6346615380729020251?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/6346615380729020251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=6346615380729020251' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/6346615380729020251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/6346615380729020251'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/11/gnuisance-aka-gnewsense_12.html' title='gNuisance (aka gNewSense)'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-7903790381151117873</id><published>2006-11-03T11:00:00.000-06:00</published><updated>2006-11-03T11:00:51.894-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conservation'/><category scheme='http://www.blogger.com/atom/ns#' term='idea'/><category scheme='http://www.blogger.com/atom/ns#' term='energy'/><title type='text'>Idea for System to Conserve Energy</title><content type='html'>&lt;span style="font-family:courier new;"&gt;I have an idea in order to make consumers more energy-aware and to conserve more. We should adopt a pay-as-you-go methodology for energy.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;For example. When you goto a buffet, you don't eat all the food you want, then have the restaurant decide how much food you have consumed then charge accordingly. Almost no system operate this way except for the energy system. So each month you use so much electricity, then get charged one sum at the end of the month.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;I propose instead, that you pay as you go. For example, if you wake up in the morning and want to boil some water for tea,  you should have to consciously pay 50 cents(just guessing) to do so. If you want to watch TV, you should have to pay the amount it costs for the electricity to run it for one hour. If we did this, people would more likely make smarter choices, since they are confronted with the consequence of their actions right away. Consumers tend to be more conservative in buying when they are forced to pay upfront, instead of in payments over time.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;While I am not sure how easy it would be to implement this idea, I don't think it would be that difficult and it could lead to a future where we are more aware of just how much energy we use/waste.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-7903790381151117873?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/7903790381151117873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=7903790381151117873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/7903790381151117873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/7903790381151117873'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/11/idea-for-system-to-conserve-energy.html' title='Idea for System to Conserve Energy'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-767768235334427889</id><published>2006-10-31T07:44:00.000-06:00</published><updated>2006-11-01T10:29:39.471-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serializing'/><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='ssl'/><title type='text'>Serializing Erlang Tuples For Network Transmission</title><content type='html'>I have been playing around a bit with setting up an SSL client/server connection between nodes using Erlang. As you have guessed, the SSL module in Erlang expects you to send and receive binary data. You may also know, that the typical way of sending data between nodes in Erlang is by using the '!' operator. For example:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Pid ! {data, SomeList}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now since the SSL uses sockets to send data, we need to convert from the tuple to a binary form. Luckily, Erlang provides a facility to do this!&lt;br /&gt;&lt;br /&gt;On the encoding side all you need to do is use the Erlang term_to_binary Built In Function(BIF):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Data = term_to_binary({data, SomeList})&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then we send it away.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ssl:send(CSock, Data)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now we receive the data:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{ok, DataRecv} = ssl:recv(SSock, 0)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then we do the decoding. ssl:send automaticlly converts the binary stream to a list when sending, so we need to convert it back, then go from binary_to_term to reverse our initial encoding.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{ok,OrigData}=binary_to_term(list_to_binary(DataList))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That's all there is to it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-767768235334427889?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/767768235334427889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=767768235334427889' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/767768235334427889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/767768235334427889'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/10/serializing-erlang-tuples-for-network.html' title='Serializing Erlang Tuples For Network Transmission'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-208468922018510531</id><published>2006-10-30T11:18:00.000-06:00</published><updated>2006-10-30T11:22:21.667-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='event planner'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='calendar'/><category scheme='http://www.blogger.com/atom/ns#' term='ecal'/><title type='text'>ECal First Beta Release!</title><content type='html'>&lt;span style="font-family: courier new;"&gt;I have made my first release of &lt;/span&gt;&lt;a style="font-family: courier new;" href="https://bohr.diginux.net/wiki/index.php/ECal_app"&gt;ECal&lt;/a&gt;&lt;span style="font-family: courier new;"&gt;! It is a personal calendar and event organizer written in Erlang. Right now it is just meant for the command line, but later on I will probably make a nice little GUI for it with &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://wxerlang.sourceforge.net/"&gt;wxErlang&lt;/a&gt;&lt;span style="font-family: courier new;"&gt;. The program really is nice and handy for those of us who live and breathe on the command line and want a simple way to stay organized and remember meetings.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-208468922018510531?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/208468922018510531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=208468922018510531' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/208468922018510531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/208468922018510531'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/10/ecal-first-beta-release.html' title='ECal First Beta Release!'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-3253579291416386792</id><published>2006-10-30T10:53:00.000-06:00</published><updated>2006-10-30T11:08:31.290-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bum'/><category scheme='http://www.blogger.com/atom/ns#' term='chicago'/><category scheme='http://www.blogger.com/atom/ns#' term='picture'/><title type='text'>Weird sites of Chicago</title><content type='html'>&lt;span style="font-family:courier new;"&gt;Madeline and I were shooting pictures behind the &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://en.wikipedia.org/wiki/Oriental_Theatre_%28Chicago%29"&gt;Oriental Theater&lt;/a&gt;&lt;span style="font-family:courier new;"&gt;, where a &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://www.chipublib.org/004chicago/disasters/iroquois_fire.html"&gt;famous fire&lt;/a&gt;&lt;span style="font-family:courier new;"&gt; in 1903 killed over 600 people back when it was known as the Iroquois Theater. They used the alley as a temporary morgue to pile all the bodies.&lt;br /&gt;&lt;br /&gt;Anyways, as we were shooting, out of nowhere a "lady bum" walks into the alley, pulls down her pants, and does her business.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://flickr.com/photos/diginux/276256647/"&gt;Click here&lt;/a&gt; to see the picture.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-3253579291416386792?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/3253579291416386792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=3253579291416386792' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/3253579291416386792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/3253579291416386792'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/10/weird-sites-of-chicago.html' title='Weird sites of Chicago'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-1781005904452705422</id><published>2006-10-27T07:31:00.002-05:00</published><updated>2006-10-27T10:24:16.770-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='mergesort'/><title type='text'>Visualizing problems in Erlang</title><content type='html'>&lt;tt&gt;&lt;br /&gt;Ever since I started learning Erlang almost 10 months ago, I have always just had this deep down unexplainable gut feeling that Erlang is neat. Erlang just feels so right. The flow from idea to implementation in Erlang is so smooth, sometimes I second guess myself, "can it really be this easy?!"&lt;br /&gt;&lt;br /&gt;Last night I couldn't sleep, so naturally I stayed in bed thinking about Erlang, and I think I might have figured out why Erlang is so nice: visualization.&lt;br /&gt;&lt;br /&gt;Let's just take an example. Let's say I tell you to write Quick Sort in C.&lt;br /&gt;&lt;br /&gt;The first thing you would probably do is look up the algorithm which is:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function quicksort(q)&lt;br /&gt;     var list less, pivotList, greater&lt;br /&gt;     if length(q) = 1  &lt;br /&gt;         return q  &lt;br /&gt;     select a pivot value pivot from q&lt;br /&gt;     for each x in q except the pivot element&lt;br /&gt;         if x &lt; pivot then add x to less&lt;br /&gt;         if x = pivot then add x to greater&lt;br /&gt;     add pivot to pivotList&lt;br /&gt;     return concatenate(quicksort(less), pivotList, quicksort(greater))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;To code the algorithm, you need to start thinking about the implementation details, such as how you will manage the pivot list, what type of values will your quick sort support, etc. It is very difficult to go from the algorithm directly to C, there are too many C things to worry about first.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;void quickSort(int numbers[], int array_size)&lt;br /&gt;{&lt;br /&gt;  q_sort(numbers, 0, array_size - 1);&lt;br /&gt;}&lt;br /&gt;void q_sort(int numbers[], int left, int right)&lt;br /&gt;{&lt;br /&gt;  int pivot, l_hold, r_hold;&lt;br /&gt;  l_hold = left;&lt;br /&gt;  r_hold = right;&lt;br /&gt;  pivot = numbers[left];&lt;br /&gt;  while (left &lt; right)&lt;br /&gt;  {&lt;br /&gt;    while ((numbers[right] &gt;= pivot) &amp;&amp; (left &lt; right))&lt;br /&gt;      right--;&lt;br /&gt;    if (left != right)&lt;br /&gt;    {&lt;br /&gt;      numbers[left] = numbers[right];&lt;br /&gt;      left++;&lt;br /&gt;    }&lt;br /&gt;    while ((numbers[left] &lt;= pivot) &amp;&amp; (left &lt; right))&lt;br /&gt;      left++;&lt;br /&gt;    if (left != right)&lt;br /&gt;    {&lt;br /&gt;      numbers[right] = numbers[left];&lt;br /&gt;      right--;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  numbers[left] = pivot;&lt;br /&gt;  pivot = left;&lt;br /&gt;  left = l_hold;&lt;br /&gt;  right = r_hold;&lt;br /&gt;  if (left &lt; pivot)&lt;br /&gt;    q_sort(numbers, left, pivot-1);&lt;br /&gt;  if (right &gt; pivot)&lt;br /&gt;    q_sort(numbers, pivot+1, right);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now let's say I tell you to think about writing a Merge Sort in Erlang. You instantly realize this problem is dead easy using a list a few recursion calls and Erlang's powerful list operators. There are no memory issues to think about, no type checking to worry about, no extra temporary values to handle, no having to "translate" your programs calls to fit the algorithm. With Erlang you can actually imagine in your head, having a long list of things, doing a few list operations, then using recursion and being done.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sort([Pivot|T]) -&gt;&lt;br /&gt;    sort([ X || X &lt;- T, X &lt; Pivot]) ++&lt;br /&gt;    [Pivot] ++&lt;br /&gt;    sort([ X || X &lt;- T, X &gt;= Pivot]);&lt;br /&gt;sort([]) -&gt; [].&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;While I admit it takes a functional mindset to get used to seeing things this way, once you do have it, it is an almost instantaneous process of going from algorithm to code. Being able to visualize both the algorithm and the Erlang code together at the same time without much difficulty and implementing them immediately makes programming a lot more enjoyable and fulfilling. Gone are the days of tedious details and mindless translations.&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;1.http://en.wikipedia.org/wiki/Quicksort&lt;br /&gt;2.http://www.erlang.org/doc/doc-5.4.12/doc/programming_examples/list_comprehensions.html&lt;br /&gt;&lt;/tt&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-1781005904452705422?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/1781005904452705422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=1781005904452705422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/1781005904452705422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/1781005904452705422'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/10/visualizing-problems-in-erlang_4243.html' title='Visualizing problems in Erlang'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-116161443731110557</id><published>2006-10-23T09:31:00.000-05:00</published><updated>2006-10-27T07:01:54.257-05:00</updated><title type='text'>Goodbye Gentoo</title><content type='html'>&lt;span style="font-family: courier new;"&gt;I never thought I would say this, but so long &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://www.gentoo.org"&gt;Gentoo&lt;/a&gt;&lt;span style="font-family: courier new;"&gt;. I always thought I would be able to stick with Gentoo for most of my life, as it was an easy system to maintain, with a wealth of packages.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Unfortunately Gentoo has been going in a downward spiral for a while now, and finally the &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://farragut.flameeyes.is-a-geek.org/articles/2006/10/23/my-personal-birthday-present"&gt;final straw&lt;/a&gt;&lt;span style="font-family: courier new;"&gt; has broken the camel's back.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;These crazy kids just hard mask anything for fun it seems these days. XMMS, whether "buggy" or not, still works just fine for me, alot better than any of the other current music players out there. I see no reason to hard mask it. Who cares if it doesn't have a maintainer? It still works on x86 computers just fine. I know this gentoo person claims XMMS to be broken, but it works just fine for me. Maybe these days "broken" means they don't release a new version every two weeks.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Anyways, all this rambling is for nothing now, I am officially switching to Ututo.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-116161443731110557?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/116161443731110557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=116161443731110557' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/116161443731110557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/116161443731110557'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/10/goodbye-gentoo.html' title='Goodbye Gentoo'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-116143689002186283</id><published>2006-10-21T07:34:00.000-05:00</published><updated>2006-10-27T07:01:54.203-05:00</updated><title type='text'>How to compile wxErlang on Linux</title><content type='html'>&lt;a style="font-family: courier new;" href="http://wxerlang.sf.net"&gt;wxErlang&lt;/a&gt;&lt;span style="font-family: courier new;"&gt; is an interface for &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://www.erlang.org"&gt;Erlang&lt;/a&gt;&lt;span style="font-family: courier new;"&gt; to the popular &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://www.wxwidgets.org"&gt;wxWidgets&lt;/a&gt;&lt;span style="font-family: courier new;"&gt; GUI library. Combining Erlang and wxWidgets creates an unbeatable combination for GUI writing. First of all we inherit the power of having a true concurrent functional programming with Erlang and add to that the fact that we can write a program once but have it use the native GUI for Linux, MacOSX, Windows, etc. This means if you execute the program in Linux, you will get a nice Gnome look, if you execute in MacOSX, you will net the nice Mac look, all with one single program.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;wxErlang is still in an early version, but alot of documentation is provided how to use it, the only trouble one might face is actually compiling the thing.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Before you compile, make sure to have the following programs installed on your computer:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;1. &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://www.erlang.org/download.html"&gt;Erlang&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;2. &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://wxwidgets.org/downloads/"&gt;wxGTK&lt;/a&gt;&lt;span style="text-decoration: underline; font-family: courier new;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;3. &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://www.stack.nl/%7Edimitri/doxygen/download.html#latestsrc"&gt;Doxygen&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Now &lt;/span&gt;&lt;a style="font-family: courier new;" href="https://sourceforge.net/project/showfiles.php?group_id=151173"&gt;download wxErlang&lt;/a&gt;&lt;span style="font-family: courier new;"&gt; and let's start.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;1. tar zxvf wxe-*.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;2. cd wxe&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;3. Edit config.mk and change the following values:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  a. PLATFORM=MACOSX&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  b. ERLI_VSN=`echo /usr/lib/erlang/lib/erl_interface-* | awk 'BEGIN{ FS="erl_interface-" } { print $2 }'`&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  c. WXCONFIG=`which wx-config`&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;4. cd gen&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;5. make xml&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;6. cd ..&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;7. make&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Now if that worked, you should be able to try the example program:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;1. cd etop&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;2. make&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;3. erl -pa ../ebin -run erltop start&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;If that worked, congratulations! You are now well on your way to &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://wxerlang.sourceforge.net/Report.pdf"&gt;learning more&lt;/a&gt;&lt;span style="font-family: courier new;"&gt; and writing some real applications.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-116143689002186283?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/116143689002186283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=116143689002186283' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/116143689002186283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/116143689002186283'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/10/how-to-compile-wxerlang-on-linux.html' title='How to compile wxErlang on Linux'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-116057062084987215</id><published>2006-10-11T07:25:00.000-05:00</published><updated>2006-10-30T11:13:49.079-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='string theory'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='hate'/><title type='text'>Why you should hate everything</title><content type='html'>&lt;span style="font-family:courier new;"&gt;So, why should you hate everything?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Because you will always be right.. eventually!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;We live in a world that has two major foundations(among others). The first being it is always easier to disprove something than to prove something. Second, it is better to be the person who was wrong at first, then eventually proven correct, then the person who was correct initially, then proven wrong later.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;So, if you want to always be "right", you must hate everything.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Some examples.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;1. Java. When Java first came out, it was all hyped up to be the next great thing, everyone was excited, etc. I myself, found it be very cumbersome, extremely boring, and of little use to me, therefore I hated it. I paid the price at first, I was ridiculed and scolded about all the benefits of Java and so on, but now finally, the tables have turned, and people see what Java really is: an excuse to kill yourself.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2. Iraq War. When the war first started, Bush had the highest approval ratings and public support was almost a complete majority. Friends and family of mine even supported the cause. I again, was against it. I just couldn't synthesize how a struggling impoverished nation would be able to do much harm to anyone else besides itself. Well, again the tides have turn and the support for war is disappearing daily and people finally see what the war really is: an excuse to kill yourself.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;3. Science. Every day new discoveries are made that prove old discoveries to be untrue or not useful, from the orbit of planets to atomic bombs, we have been wrong several times in the past to get to where we are today. People now realize what scientific exploration and research really is: an excuse to kill yourself.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;I could go on and on with many other examples, but the point sticks, almost everything you know will be hated one way or another, it is just natural progression. There is a 99.9% chance that if you hate something now in the face of the majority adverse opinion, you will eventually be the one who is proven correct, and all of them incorrect, how great is that!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Some things you should immediately start hating.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;1. String theory&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2. Linux&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;3. People&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-116057062084987215?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/116057062084987215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=116057062084987215' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/116057062084987215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/116057062084987215'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/10/why-you-should-hate-everything.html' title='Why you should hate everything'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-115987193002987485</id><published>2006-10-03T05:29:00.000-05:00</published><updated>2006-10-27T07:01:54.092-05:00</updated><title type='text'>Oct 3rd: Day Against DRM!</title><content type='html'>&lt;span style="font-family: courier new;"&gt;Today is the official "Day Against DRM"!&lt;br /&gt;&lt;br /&gt;If you are in Chicago today, we could sure use your help! For information, please goto: &lt;a href="http://www.chicagolug.org/Drm"&gt;http://www.chicagolug.org/Drm&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Some things that we could really use help with are:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;1. People to wear the Biohazard suits&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;2. People to hand out materials and educate&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;3. People to take pictures, blog, create editorial materials, etc.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;It is important that we not only get the word out, but that we document this event. If you take any pictures, please upload them to flickr, with the following tags: defectivebydesign, drm, apple, chicago, ipod, itunes, nodrm, antidrm. Also, feel free to add them to the &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://www.chicagolug.org/Drm"&gt;DefectiveByDesign&lt;/a&gt; group.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;If you can't make it, you can always print out the following materials:&lt;/span&gt;&lt;br /&gt;&lt;a style="font-family: courier new;" href="http://defectivebydesign.org/sites/nodrm.civicactions.net/files/eliminate_8.5x11.pdf"&gt;Anti-DRM Sign&lt;/a&gt;&lt;br /&gt;&lt;a style="font-family: courier new;" href="http://defectivebydesign.org/sites/nodrm.civicactions.net/files/TellmeWhatIsDRM.pdf"&gt;Anti-DRM Literature&lt;/a&gt;&lt;span class="" style="display: block; font-family: courier new;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;span class="down" style="display: block; font-family: courier new;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;and hand them out to everyone you know!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Most of all, have a great day, and just try to educate people. Once people know what DRM is, they most surely won't like it.&lt;/span&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt; &lt;a href="http://www.chicagolug.org/Drm"&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-115987193002987485?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/115987193002987485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=115987193002987485' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/115987193002987485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/115987193002987485'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/10/oct-3rd-day-against-drm.html' title='Oct 3rd: Day Against DRM!'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-115077132007668640</id><published>2006-06-19T21:20:00.000-05:00</published><updated>2006-10-27T07:01:54.031-05:00</updated><title type='text'>Language of the week: Haskell</title><content type='html'>&lt;a style="font-family: courier new;" href="http://defunside.blogspot.com/"&gt;Tristan Sloughter&lt;/a&gt;&lt;span style="font-family:courier new;"&gt; and I decided that this summer we would try learning a language each week in order to expand our knowledge of different programming languages. Our intent is to learn the lanuage well enough in order to do a simple to moderate program in the language. While I won't be able to go into detail about each language in this blog, I would like to highlight some key points of the language.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;For the first language, we chose Haskell. I had used Haskell before, but it had been a long time. I had also just learned &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://caml.inria.fr/"&gt;Ocaml&lt;/a&gt;&lt;span style="font-family:courier new;"&gt; from CS440, which shares some similarities to Haskell. For our project we decided to write the LZW algorithm, which is a simple text compression algorithm.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Haskell is well suited for this task, as the algorithm is a straight sequential process on the text, and since Haskell is a &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://www.amazon.com/gp/product/0201342758/sr=8-1/qid=1150771521/ref=pd_bbs_1/102-8338016-3152103?%5Fencoding=UTF8"&gt;functional language&lt;/a&gt;&lt;span style="font-family:courier new;"&gt;, it allows for an easy implementation. The code is as follows.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;The first thing we need to do is create table. Basically this is just defining what  table is.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;    type LZWItem = (Int, String)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;    type LZWTable = [LZWItem]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;After that we just need to create a table instance&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;    lzwTable :: LZWTable&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;    lzwTable = []&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;For the main implementation I broke the code up into 4 parts.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;1. encString: main function that processes the string and takes care of the table&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;    encString :: String -&gt; LZWTable -&gt; String -&gt; [Int]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;    encString [] [] = []&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;    encString (k:ks) (w:ws)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;      | inTable lzwTable ((w:ws)++(k:[])) = encString ks lzwTable  ((w:ws)++(k:[]))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;      | otherwise = addCode lzwTable ((w:k:[])++ks) : encString ks lzwTable (k:[])&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Here we simply take a string as input, and process it character by character according to the LZW algorithm. If it is in the table, we continue by getting one more character, otherwise we add the string to the table.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2. inTable: this is just a little helper functiong for encString to check if the string is in the table&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;    inTable :: LZWTable -&gt; String -&gt; Bool&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;    inTable table str  = [ tCode | (tCode,tStr)&lt;-table, tStr==str] /= []&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;3. addCode: adds code to the table for a new substring   &gt;    addCode :: LZWTable -&gt; String -&gt; Int&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;       addCode table (x:xs)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;      | table ++ [(length(table)+1,x:xs)] /= [] = getCode table (take (length (x:xs)-1) (x:xs))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;We add the new code, while getting the code for the previous string per the LZW algorithm.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;4. getCode: gets the code from the table for a previous string in the table&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;    getCode :: LZWTable -&gt; String -&gt; Int&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;     getCode table str = head [ tCode | (tCode,tStr)&lt;-table, tStr==str]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;This simply just looks up the code from the table.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;As you can see the implementation is very straightforward, relatively easy to understand, and compact. Doing this in any other(non-functional) language like C would definitely take a lot more code.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;I am very happy with Haskell, as everything seems very intuitive and logical. When programming with it, you have alot of "Duh, that is so easy and simple" moments that you don't get with other languages.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;When comparing Haskell with the other functional language I knew before this, Ocaml, I would have to say Haskell is better. To me, Haskell just has a better feel to it and seems to flow a little better than Ocaml.  Either language is great though compared to C/C++, Java, Perl, etc.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;One other cool trick I would like to quickly add about Haskell is infinite lists. For example, here is how you generate a list of every integer:  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt; numsFrom n = n : numsFrom (n+1)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;If you are looking for a good place to start, I recommend the book, "Haskell: The Craft of Functional Programming". It is great at going through the key concepts of Haskell and showing you great examples of usage that can help you solve almost any problem.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;For the curious, our next language is going to be &lt;/span&gt;&lt;a style="font-family: courier new;" href="http://www.erlang.org"&gt;Erlang&lt;/a&gt;&lt;span style="font-family:courier new;"&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-115077132007668640?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/115077132007668640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=115077132007668640' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/115077132007668640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/115077132007668640'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/06/language-of-week-haskell.html' title='Language of the week: Haskell'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-114765721895216060</id><published>2006-05-14T20:31:00.000-05:00</published><updated>2006-10-27T07:01:53.976-05:00</updated><title type='text'>Why I choose Windowmaker</title><content type='html'>&lt;span style="font-family: courier new;"&gt;For a very long time, I used Linux, just because it wasn't Windows. There were two things that made me actually enjoy Linux, so much so, that I feel deprived when I can't use a Linux machine(such as at work).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;What were those two things? The first was Gentoo. I won't go into a rant about which distro is best, but Gentoo has worked for me very well.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;The second reason, was Windowmaker. I had tried many other desktops, never thinking about Windowmaker, since it looks so ugly and useless. Finally, after getting tired of using Gnome and KDE and using g-this and k-that type of apps, I gave Windowmaker a try.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;I was completely astonished. My productivity increased almost instantly. The speed in which you can switch desktops and maneuver to different apps all with just the middle button is a reason to use Windowmaker in of itself. I also enjoy the right click menu. Instead of having this fancy start menu and everything else that clogs most desktops, I have the full desktop to myself, and apps are only a right-click away.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;I know I might not have the fanciest, latest gizmos like transparency, but is your amnesia really so bad that you forget what your background looks like behind your terminal?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Give Windowmaker a try, you may just like it.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-114765721895216060?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/114765721895216060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=114765721895216060' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/114765721895216060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/114765721895216060'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/05/why-i-choose-windowmaker.html' title='Why I choose Windowmaker'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-114693823647672515</id><published>2006-05-06T12:51:00.000-05:00</published><updated>2006-10-27T07:01:53.917-05:00</updated><title type='text'>Quantum Questions</title><content type='html'>&lt;span style="font-family: courier new;"&gt;As I read through books and articles about quantum physics, I have come up with a few questions over time that I still don't have a clear answer to. Maybe some other people do.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Here they are:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;1. If the universe is made of symmetric particles, is it made of symmetric properties in all respects?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;2. If there is a quantum universe(maybe ours),  is it constant? Is it deterministic?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;3. In general terms, could we ourselves be considered quantum particles to objects relatively as large as we are to quantum matter?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;4. Do quantum particles always need a reason to reveal/express themselves(such as when they are measured)?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;5. Strictly speaking, can information travel by other means besides waves or entanglement?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;6. How does quantum matter store information, and is the type of information it can store limited?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Let me know your thoughts.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-114693823647672515?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/114693823647672515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=114693823647672515' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/114693823647672515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/114693823647672515'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/05/quantum-questions.html' title='Quantum Questions'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27638168.post-114692171308664878</id><published>2006-05-06T08:16:00.000-05:00</published><updated>2006-10-27T07:01:53.854-05:00</updated><title type='text'>Drastic Actions</title><content type='html'>&lt;span style="font-family:courier new;"&gt;This is my first post. &lt;/span&gt;  &lt;span style="font-family:courier new;"&gt;I have always sworn off blogs for many reasons.  If you are one of those people who have yet to understand blogs, I sympathize with you. So why am I doing this? I basically want to see what the hype is about, and to see just for sure whether or not it is worth it or not. This blog will be a mixture of Linux, political things, and ideas I have for projects and research. &lt;/span&gt;  &lt;span style="font-family:courier new;"&gt;I apologize in advance for what a bore this blog may be.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27638168-114692171308664878?l=diginux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diginux.blogspot.com/feeds/114692171308664878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27638168&amp;postID=114692171308664878' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/114692171308664878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27638168/posts/default/114692171308664878'/><link rel='alternate' type='text/html' href='http://diginux.blogspot.com/2006/05/drastic-actions.html' title='Drastic Actions'/><author><name>Jordan Wilberding</name><uri>http://www.blogger.com/profile/02516423792602510640</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://omega.cs.iit.edu/~diginux/jwhackergotchiwhite.png'/></author><thr:total>2</thr:total></entry></feed>
