<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.ajs.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0YDRX0-cCp7ImA9Wx5QFEw.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851</id><updated>2010-09-02T03:06:14.358-04:00</updated><title>Aaron's Essays</title><subtitle type="html">Thoughts from Aaron Sherman, owner and maintainer of AJS.COM and 3d6.net</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://essays.ajs.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://essays.ajs.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>154</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.ajs.com/AaronsEssays" /><feedburner:info uri="aaronsessays" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;C0YDRX09fCp7ImA9Wx5QFEw.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-6347690821218052907</id><published>2010-09-01T19:00:00.004-04:00</published><updated>2010-09-02T03:06:14.364-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-02T03:06:14.364-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><category scheme="http://www.blogger.com/atom/ns#" term="free software" /><title>Ubuntu 10.04: Pulseaudio, nfs, automounter and my dismay</title><content type="html">I upgraded to Ubuntu 10.04 last night. Ouch.&lt;br /&gt;
&lt;br /&gt;
My first problem was that, suddenly, the automounter was going totally berserk. It would randomly mount/unmount all of my NFS filesystems. I couldn't do anything.&lt;br /&gt;
&lt;br /&gt;
This morning, I found the solution to that problem, but that only served to further confuse me: pulseaudio was freaking out over not being able to create a file under ~/.pulse. I deleted that directory and suddenly my automounter worked again... OK, that's spooky. I'm assuming that pulseaudio was loading audio drivers on startup and the fact that it kept re-starting meant that the module interface was constantly being banged around, resulting in poor service for any calls to loaded drivers. Surprising my system was stable at all, if that's the case.&lt;br /&gt;
&lt;br /&gt;
Anyway now I'm finding lots of horrible little problems:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Rythmbox used to hide itself when you clicked on its notification icon... no longer&lt;/li&gt;
&lt;li&gt;Pidgin seems to have been put into tabbed window mode by default which is painful&lt;/li&gt;
&lt;li&gt;Evolution seems to squirrel your password away and use it for the password to your keychain... this means that when your password changes, you have to remember the old one in order to access your saved passwords. It seems like this should at least come with a big red button labeled ("just start over") so I can stop having the password dialog box pop up.&lt;/li&gt;
&lt;li&gt;System services are no longer managed by the standard init.d script interface. Joy, a non-standard init. Just what I needed.&lt;/li&gt;
&lt;li&gt;Process names are getting more and more absurd. The fact that something is running on my system called rtkit is deeply wrong. I nearly had a heart attack before I googled for it (of course, it's not alone: liboobs was one I saw scroll by as I was installing)&lt;/li&gt;
&lt;/ul&gt;Overall, 10.04 does not impress me. It seems to have been put together as a way to prepare for future updates rather than as a stable starting point for long term support.&lt;br /&gt;
&lt;br /&gt;
PS: Another issue just cropped up: outbound mail from evolution seems to have been silently failing all day. I finally realized that people weren't getting my mail and went to check the settings. Sigh.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-6347690821218052907?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eufZc1TGR3gBH9wtytuGWux8bxI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eufZc1TGR3gBH9wtytuGWux8bxI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eufZc1TGR3gBH9wtytuGWux8bxI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eufZc1TGR3gBH9wtytuGWux8bxI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/z5D1vvpliLc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/6347690821218052907/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/09/ubuntu-1004-pulseaudo-nfs-automounter.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/6347690821218052907?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/6347690821218052907?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/z5D1vvpliLc/ubuntu-1004-pulseaudo-nfs-automounter.html" title="Ubuntu 10.04: Pulseaudio, nfs, automounter and my dismay" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>1</thr:total><feedburner:origLink>http://essays.ajs.com/2010/09/ubuntu-1004-pulseaudo-nfs-automounter.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08ERHw4fip7ImA9Wx5QE0k.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-2492626926349945928</id><published>2010-08-31T19:00:00.010-04:00</published><updated>2010-09-01T10:03:25.236-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-01T10:03:25.236-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="law" /><category scheme="http://www.blogger.com/atom/ns#" term="movies" /><category scheme="http://www.blogger.com/atom/ns#" term="business" /><title>The public domain and why it's important</title><content type="html">I've been thinking a lot about the &lt;a href="http://en.wikipedia.org/wiki/Public_domain"&gt;public domain&lt;/a&gt; ever since I wrote &lt;a href="http://essays.ajs.com/2009/08/plan-for-copyright-reform.html"&gt;my proposal for a reform of copyright law in the United States&lt;/a&gt;. In that proposal I discussed the value of allowing works to expire (I set a time frame of 30 years, but that number is arbitrary; the important element is the expiration), but I continue to hear corporations who own copyrights "explain" how their business will be in ruin, should their works expire, fueling the continued extension of copyright terms each time they are about to expire. But, this fails to explain why the public domain was considered valuable enough to enrich with expired works in the first place. What is it that we, the public &lt;i&gt;and&lt;/i&gt; the creators of new works derive from copyright expiration and the public domain?&lt;br /&gt;
&lt;br /&gt;
When we discuss the public domain today, it can be difficult to understand its true value because so few works expire today. However, the works which have already expired have had a deep impact on our modern culture. One need look no further than &lt;a href="http://writ.news.findlaw.com/commentary/20020305_sprigman.html"&gt;Walt Disney Corporation's success in adapting public domain works&lt;/a&gt; such as &lt;span class="smalltext"&gt;&lt;i&gt;Snow White and the Seven Dwarfs&lt;/i&gt;, &lt;i&gt;Cinderella&lt;/i&gt;, &lt;i&gt;Pinocchio&lt;/i&gt;, &lt;i&gt;The Hunchback of Notre Dame&lt;/i&gt;, &lt;i&gt;Alice in Wonderland&lt;/i&gt;, and &lt;i&gt;The Jungle Book&lt;/i&gt;. How is it, then, that we continue to argue that copyright terms must be extended in order to protect our cultural heritage? Is it possible that such examples are just outliers and the public domain doesn't actually benefit the public and our culture? Hardly. In order to illustrate that point, let me provide a few examples:&lt;/span&gt; &lt;br /&gt;
&lt;br /&gt;
It's likely impossible to fully account for the impact of &lt;a href="http://en.wikipedia.org/wiki/Shakespeare"&gt;William Shakespeare&lt;/a&gt; in&amp;nbsp; modern culture. &lt;a href="http://www.imdb.com/find?s=all&amp;amp;q=Hamlet"&gt;Hamlet, alone, has spawned dozens of adaptations&lt;/a&gt; for film and television, not to mention its continued performances and adaptations on stage. Film alone accounts for &lt;a href="http://en.wikipedia.org/wiki/Hamlet_on_screen"&gt;over fifty adaptations&lt;/a&gt; of the play! Overall, there are over &lt;a href="http://en.wikipedia.org/wiki/List_of_William_Shakespeare_film_adaptations"&gt;400 adaptations of Shakespeare's plays, just in film&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Since the copyright expired in 1956 there have been over 40 &lt;a href="http://en.wikipedia.org/wiki/Adaptations_of_The_Wizard_of_Oz"&gt;adaptations of The Wonderful Wizard of Oz&lt;/a&gt; and related books and characters in film, television and stage.&lt;br /&gt;
&lt;br /&gt;
The script for &lt;i&gt;&lt;a href="http://www.imdb.com/title/tt0112573/"&gt;Braveheart&lt;/a&gt; &lt;/i&gt;was based mainly on &lt;a href="http://en.wikipedia.org/wiki/Blind_Harry"&gt;Blind Harry&lt;/a&gt;'s 15th century epic poem, &lt;i&gt;The Actes and Deidis of the Illustre and Vallyeant Campioun Schir William Wallace&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
The 1985 film, &lt;a href="http://www.imdb.com/title/tt0089881/"&gt;Ran&lt;/a&gt;, by &lt;a href="http://en.wikipedia.org/wiki/Akira_Kurosawa" title="Akira Kurosawa"&gt;Akira Kurosawa&lt;/a&gt; is based on legends of the daimyo &lt;a href="http://en.wikipedia.org/wiki/M%C5%8Dri_Motonari" title="Mōri Motonari"&gt;Mōri Motonari&lt;/a&gt;, as well as on the Shakespearean tragedy &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/King_Lear" title="King Lear"&gt;King Lear&lt;/a&gt;&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
The 1959 film, &lt;a href="http://www.imdb.com/title/tt0052618/"&gt;&lt;i&gt;Ben-Hur&lt;/i&gt;&lt;/a&gt;, was the third film version of &lt;a href="http://en.wikipedia.org/wiki/Lew_Wallace" title="Lew Wallace"&gt;Lew Wallace&lt;/a&gt;'s 1880 novel &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Ben-Hur:_A_Tale_of_the_Christ" title="Ben-Hur: A Tale of the Christ"&gt;Ben-Hur: A Tale of the Christ&lt;/a&gt;&lt;/i&gt;, though I have not been able to determine if, in fact, the novel's copyright had expired by 1959, it does seem likely that it had.&lt;br /&gt;
&lt;br /&gt;
The Wizard of Oz, Braveheart, Ran and Ben-Hur are all listed in &lt;a href="http://www.imdb.com/chart/top"&gt;the Internet Movie Database top 250 films&lt;/a&gt; of all time. How could it be that our popular culture could be so influenced from the public domain and yet we continue to argue that enriching the public domain by allowing works to expire is harmful?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The simple fact is that corporations fear losing any source of income, regardless of how much they might ultimately benefit from a copyright system that enriches the pool of works upon which they might draw. This is understandable, but should not be the basis on which we form our laws.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-2492626926349945928?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/A5NJp5LUAzuyZRsywwYJz93-8tA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A5NJp5LUAzuyZRsywwYJz93-8tA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/A5NJp5LUAzuyZRsywwYJz93-8tA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A5NJp5LUAzuyZRsywwYJz93-8tA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/MnhHhNPvy4E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/2492626926349945928/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/08/public-domain-and-why-its-important.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/2492626926349945928?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/2492626926349945928?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/MnhHhNPvy4E/public-domain-and-why-its-important.html" title="The public domain and why it's important" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/08/public-domain-and-why-its-important.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUEQXg_cCp7ImA9Wx5RF0o.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-7868433780087637723</id><published>2010-08-25T19:00:00.003-04:00</published><updated>2010-08-25T19:00:00.648-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-25T19:00:00.648-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="furniture" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><title>TV credenza</title><content type="html">&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=ac06-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B001KW0B74&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;I've been looking at TV stands and credenzas for some time now, but I didn't see anything that met my needs and was well designed. In the end, I was going to give up and build something... then I found the Prepac TV Console. At first I thought it was kind of nice looking. Height was a big thing for me. I bought a conservatively small TV, and most stands are fine for 50" behemoths, but they're too short for what I have. At 26.75" this stand was a perfect height, and the shelves looked well placed.&lt;br /&gt;
&lt;br /&gt;
I had already decided to buy it when I clicked on the image to see a close-up. That's when my mind was blown. The swing-out DVD/CD racks are beautiful and the holes for cables in the back aren't holes... they're notches cut into opposing, sliding panels that let you get equipment in and out easily from the back (also affording you trivial cabling access).&lt;br /&gt;
&lt;br /&gt;
I've seen a ton of TV stands over the past few months and this has to be the best one I've laid eyes on, hands-down. What's more, for the price, it's a steal!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-7868433780087637723?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Z-Czs6z_JyzjOc4sUOFmMgRGfyg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z-Czs6z_JyzjOc4sUOFmMgRGfyg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Z-Czs6z_JyzjOc4sUOFmMgRGfyg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z-Czs6z_JyzjOc4sUOFmMgRGfyg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/Dn48Jz0emMM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/7868433780087637723/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/08/tv-credenza.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/7868433780087637723?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/7868433780087637723?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/Dn48Jz0emMM/tv-credenza.html" title="TV credenza" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/08/tv-credenza.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cEQHc6cSp7ImA9Wx5RFEU.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-7996039984243638327</id><published>2010-08-22T10:56:00.000-04:00</published><updated>2010-08-22T10:56:41.919-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-22T10:56:41.919-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="movies" /><title>Scott Pilgrim: What comic book movies should be</title><content type="html">&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=ac06-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1934964581&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;I saw Scott Pilgrim vs. The World with friends last night. I had not realized, when I saw it, that it was based on a graphic novel, but it makes perfect sense. The film is as visually creative as Tim Burton's recent&amp;nbsp;&lt;a href="http://www.amazon.com/Alice-Wonderland-Johnny-Depp/dp/B001HN694K?ie=UTF8&amp;amp;tag=ac06-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Alice in Wonderland&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=ac06-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=B001HN694K" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&amp;nbsp;but with a&amp;nbsp;&lt;a href="http://www.amazon.com/Waynes-World-Mike-Myers/dp/B00005JH9J?ie=UTF8&amp;amp;tag=ac06-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Wayne's World&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=ac06-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=B00005JH9J" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&amp;nbsp;sensibility. The first image you see is an 8-bit video game-style rendering of the Universal Pictures logo. This is accompanied by an appropriately retro version of the usual signature theme. From this point on, the movie firmly establishes itself as a movie / video game hybrid, and I expect that audiences will fall into two camps: those who are aware of video game (specifically &lt;i&gt;console and hand-held&lt;/i&gt;&amp;nbsp;video game)&amp;nbsp;culture who will enjoy the humor and visuals and those who are not and won't.&lt;br /&gt;
&lt;br /&gt;
I can't say enough about the work they've put in to layering a video game world over the movie. I'll likely have to watch the movie again just to pick up on some of the touches I missed, but keep an eye on out-of-focus backgrounds. These are often fully rendered and the subtle touches are just as much a part of the story as the costuming and makeup.&lt;br /&gt;
&lt;br /&gt;
The love story is essentially ignorable. Boy meets girl, girl has sketchy past, boy sees through all that, love springs eternal. It's nothing you haven't seen before. On the other hand, the secondary relationships are absolutely priceless. Scott's chaste relationship with an underage girl, his gay roommate with whom he shares a bed, and his cartoon-thin band mates are the real fulcrums of this story of a young man who hasn't yet given up being a boy.&lt;br /&gt;
&lt;br /&gt;
Is it all good? No. What's entertaining about the film is its constant string of humorous twists on the culture of the generation that was born in the late 1980s to early 1990s. Some of the references are spot-on. Some of them miss the mark or just don't play well to the audience (I'm not in the target demographic, however, so there might be a very different mix of humor that works for people who are). The film walks a fine line between goofy spoof and cutting satire and sometimes comes up short on both sides. Still, the vast majority of movie works well and it's a rare movie that attempts as much as Scott Pilgrim.&lt;br /&gt;
&lt;br /&gt;
I refer the frequent reader of my blog back to &lt;i&gt;&lt;a href="http://essays.ajs.com/2010/07/best-days-of-cinema-were-2008.html"&gt;The best days of cinema were... 2009?&lt;/a&gt;&lt;/i&gt;&amp;nbsp;where I described why I believe that creativity and quality story telling are alive and well in modern movie making. I'll happily add Scott Pilgrim vs. The World to the list of films that make my point.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-7996039984243638327?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OZVDxMt8iqaY21U-LR-nA1bf-Vk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OZVDxMt8iqaY21U-LR-nA1bf-Vk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OZVDxMt8iqaY21U-LR-nA1bf-Vk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OZVDxMt8iqaY21U-LR-nA1bf-Vk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/kle-mnGyQuw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/7996039984243638327/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/08/scott-pilgrim-what-comic-book-movies.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/7996039984243638327?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/7996039984243638327?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/kle-mnGyQuw/scott-pilgrim-what-comic-book-movies.html" title="Scott Pilgrim: What comic book movies should be" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/08/scott-pilgrim-what-comic-book-movies.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUCSHo_fip7ImA9Wx5REEg.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-4963570514553617370</id><published>2010-08-16T19:00:00.001-04:00</published><updated>2010-08-17T09:37:49.446-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-17T09:37:49.446-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming languages" /><title>Parrot and PIR: The best tool you don't use</title><content type="html">For over 10 years now, many eyes have been on Perl 6, watching and waiting for it to be stable enough to use. Its promise is vast. Powerful "rules" will transform complicates parsing tasks into trivial libraries; A multi-method OO system like Common Lisp, but without the syntactic hurdles of learning to live with Lisp, a typed dynamic language that doesn't tie you down to type management. All of these features seem like the white whale of Melville's story, and yet they all exist today in a usable and stable form. Why doesn't anyone know about this? Well, I'm here to change that.&lt;br /&gt;
&lt;br /&gt;
Parrot, the virtual machine first intended for Perl 6 and developed in parallel with that project, has the underlying mechanisms for everything Perl 6 wants to accomplish. It even has a pseudo-Perl 6 language called NQP (Not Quite Perl) for writing rules and other Perl 6-like functionality. But one thing slowing people down, to date, has been the lack of a coherent tutorial on using Parrot as a general purpose programming tool. Enter &lt;a href="http://coolnamehere.com/geekery/parrot/learn/index.html"&gt;Parrot Babysteps&lt;/a&gt;. This Web tutorial (which is also &lt;a href="http://github.com/brianwisti/parrot-babysteps"&gt;a Github project&lt;/a&gt;) aims to teach people to program with Parrot. Its examples range from the &lt;a href="http://coolnamehere.com/geekery/parrot/learn/01-getting-started.html#building_the_program"&gt;typical and trivial, "Hello world"&lt;/a&gt; to a &lt;a href="http://coolnamehere.com/geekery/parrot/learn/0a-stellar-project.html"&gt;star catalog manager&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Parrot code is anything but beautiful. The language is modeled on assembly and is designed to be easily transformed into machine code via a JIT compiler, so don't expect it to be full of syntactic sugar like Perl. On the other hand, the combination of JIT compilation and high level constructs gives you the kind of power and performance that even Java is hesitant to offer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-4963570514553617370?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/n2be4D2brMAMHN823S0bVPI2j0E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n2be4D2brMAMHN823S0bVPI2j0E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/n2be4D2brMAMHN823S0bVPI2j0E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n2be4D2brMAMHN823S0bVPI2j0E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/8r36qpCdCYc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/4963570514553617370/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/08/parrot-and-pir-best-tool-you-dont-use.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/4963570514553617370?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/4963570514553617370?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/8r36qpCdCYc/parrot-and-pir-best-tool-you-dont-use.html" title="Parrot and PIR: The best tool you don't use" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>2</thr:total><feedburner:origLink>http://essays.ajs.com/2010/08/parrot-and-pir-best-tool-you-dont-use.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEDQHw8fCp7ImA9Wx5RF0k.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-7269255453614935663</id><published>2010-08-06T13:05:00.001-04:00</published><updated>2010-08-25T10:31:11.274-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-25T10:31:11.274-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="gadgets" /><title>Zen Alarm Clock</title><content type="html">&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=ac06-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B002OSBIXO&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;Zen Alarm Clock... it sounds like some kind of scam, doesn't it? Some New Age, crystal-based frob that's supposed to make you wake up.&lt;br /&gt;
&lt;br /&gt;
But I bought my first Zen Alarm Clock back in ... oh it had to be '96 or so. I was having a hard time waking up, and no alarm clock worked. I can sleep through a jack hammer, and have, literally. Someone recommended this clock and I tried it out, even though it cost $100, which seemed like a ton for an alarm clock. The difference was staggering. Instead of doing something loud and obnoxious enough to force you to wake up immediately, it uses a long series of increasingly frequent chimes, none of which on their own would wake you.&lt;br /&gt;
&lt;br /&gt;
By the time you become aware that it's going off, you've been gradually waking up for a good 10 minutes or so, which means that you don't feel like you're still asleep, being propelled only by the adrenaline release triggered by a loud noise. Instead you're just "up". If you put the clock on the other side of the room, that final act of getting out of bed and walking over to turn it off is usually sufficient, even if you're sleep deprived, to wake you up thoroughly. &lt;br /&gt;
&lt;br /&gt;
My old clock is now breaking down after about 15 years, and it's time to upgrade to the digital version. I just purchased it today, and hope to get it in the mail in a few days. Can't wait.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-7269255453614935663?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/x-kVueEmgm6HNv9BjeOyBr5MWJ8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x-kVueEmgm6HNv9BjeOyBr5MWJ8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/x-kVueEmgm6HNv9BjeOyBr5MWJ8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x-kVueEmgm6HNv9BjeOyBr5MWJ8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/rNr09z8KDos" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/7269255453614935663/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/08/zen-alarm-clock.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/7269255453614935663?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/7269255453614935663?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/rNr09z8KDos/zen-alarm-clock.html" title="Zen Alarm Clock" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/08/zen-alarm-clock.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YHQH45fyp7ImA9Wx5TGEg.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-1403136169143090735</id><published>2010-08-02T19:00:00.011-04:00</published><updated>2010-08-03T13:05:31.027-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-03T13:05:31.027-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="contest" /><category scheme="http://www.blogger.com/atom/ns#" term="math" /><title>Contest: Primes with an unusual number of a digit</title><content type="html">I'd like to propose a quick contest. Here are the rules:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;You must submit your entry by &lt;b&gt;September 2, 2010, 23:59&lt;/b&gt; (sorry, I can't wait until 2011, the next prime year) &lt;/li&gt;
&lt;li&gt;Your submission must be a sequence of &lt;b&gt;decimal digits&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;The number that these represent must be &lt;b&gt;prime&lt;/b&gt; (which make up (in order) a prime number. You may use a test like Rabin-Miller, which will be the method used to validate the submission. Note that it is therefore possible for the submission to fail such a test, even if it passed for the sumitter.&lt;/li&gt;
&lt;li&gt;The number must be composed of at least either &lt;b&gt;155 decimal digits or 512 bits&lt;/b&gt; (either will do).&lt;/li&gt;
&lt;li&gt;The winner will be the number which has the &lt;b&gt;highest ratio of any one digit&lt;/b&gt;. For example, "23" has a 50% ratio of the digit "2" while 1011 has a 75% ratio of "1"&lt;/li&gt;
&lt;li&gt;You must send your entries to &lt;b&gt;essay-contest@ajs.com&lt;/b&gt; &lt;/li&gt;
&lt;/ol&gt;As an example, here is a number:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;1074934746&amp;nbsp; 0579280428&amp;nbsp; 5352135601&amp;nbsp; 3625508347&amp;nbsp; 1908730962&amp;nbsp; 4560090445&amp;nbsp; 3404800574&amp;nbsp; 5211453514&amp;nbsp; 0988380000&amp;nbsp; 3920392507&amp;nbsp; 2147060801&amp;nbsp; 0391490408&amp;nbsp; 0059833120&amp;nbsp; 1609426475&amp;nbsp; 4887127734&amp;nbsp; 07857&lt;/div&gt;&lt;br /&gt;
which has 31 zeros for a ratio of 20%. Obviously, your submission should seek to beat at least this relatively low number.&lt;br /&gt;
&lt;br /&gt;
You can submit as many times as you like, but in order to avoid making me unhappy with you, I suggest waiting until the last minute (or whenever you decide to stop searching) and submit the best result you have by then.&lt;br /&gt;
&lt;br /&gt;
The winner will get a lifetime subscription to this blog and their name prominently featured in the article in which the number is published.&lt;br /&gt;
&lt;br /&gt;
For fun, I'll be writing my own solver in Rakudo Star Perl 6. It won't be very efficient, so I expect it to get seriously trounced, but I'll do it for the fun. Even if I find the best number, I'll publish the best submission from someone else.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-1403136169143090735?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/A8zYxjnwcRA8FPA4nbuhWBIbvEc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A8zYxjnwcRA8FPA4nbuhWBIbvEc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/A8zYxjnwcRA8FPA4nbuhWBIbvEc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A8zYxjnwcRA8FPA4nbuhWBIbvEc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/cYpVsiFRWCs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/1403136169143090735/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/08/contest-primes-with-unusual-number-of.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/1403136169143090735?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/1403136169143090735?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/cYpVsiFRWCs/contest-primes-with-unusual-number-of.html" title="Contest: Primes with an unusual number of a digit" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>2</thr:total><feedburner:origLink>http://essays.ajs.com/2010/08/contest-primes-with-unusual-number-of.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8EQH8yfyp7ImA9WxFaFks.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-7316526056911079865</id><published>2010-07-20T19:00:00.001-04:00</published><updated>2010-07-20T19:00:01.197-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-20T19:00:01.197-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="movies" /><category scheme="http://www.blogger.com/atom/ns#" term="history" /><title>The best days of cinema were ... 2008?</title><content type="html">We've all heard it. The claim goes that, back in the day, they made movies like&amp;nbsp; North by Northwest, Some Like It Hot and Ben-Hur, and that was just &lt;i&gt;one year&lt;/i&gt;! Now we get sequels to movies that sucked, which themselves suck and an endless stream of romcoms that don't even rise to the level of sucking.&lt;br /&gt;
&lt;br /&gt;
But this isn't quite true. Sure, you have stand-out years like 1959, but if you look at &lt;a href="http://www.imdb.com/chart/top"&gt;IMDB's top 250 movies&lt;/a&gt;, you'll notice something interesting. The top-voted movies of all time are fairly evenly spread across the decades with a big bump toward the end. Why? Well, in part a move you've seen recently tends to be more impressive in your memory, so movies that pre-date IMDB aren't always very highly rated.&lt;br /&gt;
&lt;br /&gt;
But that doesn't entirely explain the phenomenon. 2008 for example, has:&lt;br /&gt;
&lt;br /&gt;
The Dark Knight, WALL·E, Gran Torino, Slumdog Millionaire, The Wrestler, In Bruges, Let the Right One In, Changeling and The Curious Case of Benjamin Button&lt;br /&gt;
&lt;br /&gt;
Now, I'll be the first to say that some of those represent short-term fascination or novelty. Still, I think Gran Torino, Slumdog Millionair, The Wrestler and Let the Right One In certainly do compare well to their historical analogs. Going back a year, you have films like No Country for Old Men and There Will Be Blood. Meanwhile, in 1945, 1956, 1970 and 1971 there is only one movie that made the list each of those years. Why? Because movie-making has been inconsistent throughout history and that's both good and bad.&lt;br /&gt;
&lt;br /&gt;
Certainly, if movie making followed any one formula, no matter how well crafted that formula, it would have precluded some of these films. Instead, it's a hectic and chaotic process that yields one or two great movies every year and a handful of very good films.&lt;br /&gt;
&lt;br /&gt;
2008 had 9 movies last year in the top 250, beating out the next-best year by two movies (1957, 1995, 1999, 2003, 2004 and 2007 all tied at 7 films). While this makes me wish I'd been alive in 1957 to sample the amazing creative output of that generation, it also makes me glad that I'm around now. So far 2010 has 4 movies on the list, and I think we'll see at least one of those (Inception, which immediately jumped to the #3 spot on opening weekend, not an easy feat) stay on the list for many, many years to come.&lt;br /&gt;
&lt;br /&gt;
By year, here's the number of top-250 movies:&lt;br /&gt;
&lt;br /&gt;
1921: 1&lt;br /&gt;
1925: 1&lt;br /&gt;
1926: 1&lt;br /&gt;
1927: 2&lt;br /&gt;
1930: 1&lt;br /&gt;
1931: 2&lt;br /&gt;
1933: 2&lt;br /&gt;
1934: 1&lt;br /&gt;
1936: 1&lt;br /&gt;
1938: 1&lt;br /&gt;
1939: 3&lt;br /&gt;
1940: 4&lt;br /&gt;
1941: 2&lt;br /&gt;
1942: 1&lt;br /&gt;
1943: 1&lt;br /&gt;
1944: 1&lt;br /&gt;
1945: 1&lt;br /&gt;
1946: 4&lt;br /&gt;
1948: 3&lt;br /&gt;
1949: 2&lt;br /&gt;
1950: 4&lt;br /&gt;
1951: 3&lt;br /&gt;
1952: 3&lt;br /&gt;
1953: 3&lt;br /&gt;
1954: 5&lt;br /&gt;
1955: 2&lt;br /&gt;
1956: 1&lt;br /&gt;
1957: 7&lt;br /&gt;
1958: 2&lt;br /&gt;
1959: 5&lt;br /&gt;
1960: 3&lt;br /&gt;
1961: 3&lt;br /&gt;
1962: 3&lt;br /&gt;
1963: 2&lt;br /&gt;
1964: 1&lt;br /&gt;
1965: 1&lt;br /&gt;
1966: 3&lt;br /&gt;
1967: 3&lt;br /&gt;
1968: 4&lt;br /&gt;
1969: 2&lt;br /&gt;
1970: 1&lt;br /&gt;
1971: 1&lt;br /&gt;
1972: 2&lt;br /&gt;
1973: 2&lt;br /&gt;
1974: 3&lt;br /&gt;
1975: 5&lt;br /&gt;
1976: 3&lt;br /&gt;
1977: 2&lt;br /&gt;
1978: 1&lt;br /&gt;
1979: 4&lt;br /&gt;
1980: 4&lt;br /&gt;
1981: 2&lt;br /&gt;
1982: 3&lt;br /&gt;
1983: 2&lt;br /&gt;
1984: 3&lt;br /&gt;
1985: 2&lt;br /&gt;
1986: 3&lt;br /&gt;
1987: 2&lt;br /&gt;
1988: 5&lt;br /&gt;
1989: 1&lt;br /&gt;
1990: 1&lt;br /&gt;
1991: 2&lt;br /&gt;
1992: 2&lt;br /&gt;
1993: 3&lt;br /&gt;
1994: 6&lt;br /&gt;
1995: 7&lt;br /&gt;
1996: 2&lt;br /&gt;
1997: 4&lt;br /&gt;
1998: 5&lt;br /&gt;
1999: 7&lt;br /&gt;
2000: 6&lt;br /&gt;
2001: 6&lt;br /&gt;
2002: 3&lt;br /&gt;
2003: 7&lt;br /&gt;
2004: 7&lt;br /&gt;
2005: 3&lt;br /&gt;
2006: 7&lt;br /&gt;
2007: 6&lt;br /&gt;
2008: 9&lt;br /&gt;
2009: 6&lt;br /&gt;
2010: 4&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-7316526056911079865?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/A6k__OOzswUBonfXqXXY24MZrWM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A6k__OOzswUBonfXqXXY24MZrWM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/A6k__OOzswUBonfXqXXY24MZrWM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A6k__OOzswUBonfXqXXY24MZrWM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/VfAxN_93krM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/7316526056911079865/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/07/best-days-of-cinema-were-2008.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/7316526056911079865?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/7316526056911079865?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/VfAxN_93krM/best-days-of-cinema-were-2008.html" title="The best days of cinema were ... 2008?" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/07/best-days-of-cinema-were-2008.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkICRHg7eyp7ImA9WxFbEU4.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-486576351884662102</id><published>2010-07-02T19:00:00.003-04:00</published><updated>2010-07-03T00:16:05.603-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-03T00:16:05.603-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="The Laundry" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><category scheme="http://www.blogger.com/atom/ns#" term="science fiction" /><title>The Laundry series by Charles Stross</title><content type="html">&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=ac06-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0441016685&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;The Laundry series is an ongoing series of books by Charles Stross. It's a genre mashup which includes &lt;a href="http://en.wikipedia.org/wiki/Lovecraftian_horror"&gt;Lovecraftian horror&lt;/a&gt;, science fiction, comedy, spy thriller and computer industry elements. Put simply, it's the story of a computer geek turned Bondesque British spy, set against a backdrop of horrible, multi-dimensional creatures that would like nothing more than to eat his brains (or at least&amp;nbsp;cohabit&amp;nbsp;with them).&lt;br /&gt;
&lt;br /&gt;
The setup is rather brilliant on its own, and it's no surprise that it was quickly turned into &lt;a href="http://shop.cubicle7store.com/epages/es113347.sf?ObjectPath=/Shops/es113347_shop/Products/CB71200"&gt;its own roleplaying game&lt;/a&gt;. Our hero was a budding computer scientist who discovered just a bit too much about the nature of his field. In fact, it turns out that under the surface of the well-ordered mathematics of computer science lies magic. "Spells" are just complex mathematical problems like those introduced by &lt;a href="http://en.wikipedia.org/wiki/Alan_Turing"&gt;Alan Turing&lt;/a&gt; during World War II, and those who accidentally solve them are quickly scooped up by The Laundry, the magical equivalent of MI6, as a possible risk to national security.&lt;br /&gt;
&lt;br /&gt;
The Laundry is therefore populated with very smart people whose only option is to work for a giant government&amp;nbsp;bureaucracy for the rest of their lives. The only way to move on to anything remotely rewarding appears to be the path to field agent status and that's where we pick up in the first book, &lt;i&gt;The Atrocity Archives&lt;/i&gt;, with our hero Bob Howard as he embarks on his very first field mission.&lt;br /&gt;
&lt;br /&gt;
The combination of computer science, general geekdom, horror and spy elements gives the books a hilariously perverse tone. There are times that I've had to stop reading, just to catch my breath, and that doesn't happen very often for me.&lt;br /&gt;
&lt;br /&gt;
The second book in the series has been out for about a year and is titled &lt;i&gt;The Jennifer Morgue&lt;/i&gt;. It traces Bob's exploits in a subsequent adventure that is more directly styled on the works of &lt;a href="http://en.wikipedia.org/wiki/Ian_Fleming"&gt;Ian Fleming&lt;/a&gt;, most especially the Bond novels.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=ac06-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=044101867X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;The next book in the series is about to be released, and is called &lt;i&gt;The Fuller Memorandum&lt;/i&gt;. It should be out by July 6, according to Amazon.com. I highly recommend picking up the first book and working your way up to &lt;i&gt;The Fuller Memorandum&lt;/i&gt;, but much like the Bond books or movies, I don't think you absolutely have to read them in order. Certainly &lt;i&gt;The Jennifer Morgue&lt;/i&gt; is a good enough book to stand on its own, should you prefer to start there, and I have high hopes for this next book for similar reasons.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-486576351884662102?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LOeAqKZjfJh-K0Svondh7k9ljdU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LOeAqKZjfJh-K0Svondh7k9ljdU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LOeAqKZjfJh-K0Svondh7k9ljdU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LOeAqKZjfJh-K0Svondh7k9ljdU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/UzwxvEbl8Js" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/486576351884662102/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/07/laundry-series-by-charles-stross.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/486576351884662102?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/486576351884662102?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/UzwxvEbl8Js/laundry-series-by-charles-stross.html" title="The Laundry series by Charles Stross" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/07/laundry-series-by-charles-stross.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMEQ306fyp7ImA9WxFUFE8.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-6109895811377030634</id><published>2010-06-24T19:00:00.061-04:00</published><updated>2010-06-24T19:00:02.317-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-24T19:00:02.317-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="math" /><title>Collatz graphs and Perl 6</title><content type="html">I wanted to play around a bit with numbers in Perl 6, so the &lt;a href="http://en.wikipedia.org/wiki/Collatz_conjecture"&gt;Collatz Conjecture&lt;/a&gt; seemed like a good place to start.&lt;br /&gt;
&lt;br /&gt;
The Collatz Conjecture is a simple statement which has some massive implications:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;f(&lt;/span&gt;&lt;i style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;n&lt;/i&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;)&lt;/span&gt; = if &lt;i style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;n&lt;/i&gt; is even &lt;i style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;n&lt;/i&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/2&lt;/span&gt;, otherwise &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(&lt;/span&gt;&lt;i style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;n&lt;/i&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; x 3)+1&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;Given that &lt;i style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;n&lt;/i&gt; is a positive integer, repeated applications will eventually yield 1.&lt;/blockquote&gt;So, for example, n=10. On the first step, we get 5 because 10 is even, so we divide by two. On the second step, we get 16 because 5 is odd, so we multiply by 3 and add 1. Because 16 is a power of 2, we know that continuing to divide it by 2 will eventually give us 1, and all results until we reach 1 will be even so we're done. In fact, so far every number tested works this way but no one can, as yet, mathematically prove that there isn't an exception.&lt;br /&gt;
&lt;br /&gt;
My code is fairly simple. It works backwards from 1. You can only get to 1 from 2 because there's no odd, positive integer (0 doesn't count, here) that when multiplied by 3 and incremented by 1, is 1. So then we work on 2, which can only be arrived at from 4. 4 can be arrived at from 1, but 1 is the end of the process, so we ignore that. It can also be arrived at from 8. 8 Can be arrived at from 16, but as we know from above 16 can be arrived at from 5 as well as 32, so that's our first branch in the tree. This process can be repeated for as long as you have enough computer memory to store all of the current branch-points.&lt;br /&gt;
&lt;br /&gt;
That's exactly what I do, and I configured it so that you simply input a depth of tree you want to output and it outputs every value in a tree of that depth.&lt;br /&gt;
&lt;br /&gt;
If you would like to see the code, &lt;a href="http://github.com/ajs/rakudo/blob/master/ajslib/cc.p6"&gt;check it out on github&lt;/a&gt;. The output svg file is also &lt;a href="http://github.com/ajs/rakudo/tree/master/ajslib"&gt;in the same directory&lt;/a&gt; for the tree-like output and the radial output from the twopi filter, along with the Graphviz source. I generated the following graph with the help of my good friends Graphviz and rsvg. The whole depth-20 graph looks like this:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_uVc2BH7QVHw/TCN2E0RP7gI/AAAAAAAADiw/yv0zBLmFFdY/s1600/cc-600.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="92" src="http://4.bp.blogspot.com/_uVc2BH7QVHw/TCN2E0RP7gI/AAAAAAAADiw/yv0zBLmFFdY/s400/cc-600.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;But, of course, it's hard to make anything out there, so here's a close-up:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_uVc2BH7QVHw/TCN2WEIkjKI/AAAAAAAADi4/8Bzt9P_kpso/s1600/cc-crop.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_uVc2BH7QVHw/TCN2WEIkjKI/AAAAAAAADi4/8Bzt9P_kpso/s400/cc-crop.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;There are some interesting things that jump out at me in this. Because you can only ever get to a multiple of 3 from its double (since n-1 is never divisible by 3 if n is), once you hit any number that's divisible by 3, you embark on a straight line, like the one you see above at 213. The other thing that becomes obvious is that even fairly low numbers (like 19) don't appear until very late in the process. That there's no duplication in this graph is really fascinating.&lt;br /&gt;
&lt;br /&gt;
The most interesting part of the Collatz Conjecture, I think, is that it can be expressed so easily that anyone with a rudimentary amount of math skills can understand it. This makes it accessible to a wider audience than any other unsolved problem in math that I can think of, and yet it's never been solved. Interesting stuff. &lt;br /&gt;
&lt;br /&gt;
Anyway, enjoy your own explorations of the Collatz Conjecture and don't get too engrossed, or you might find that you're a bit too much like this XKCD comic: &lt;a href="http://xkcd.com/710/"&gt;http://xkcd.com/710/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-6109895811377030634?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hLQ_my8jBSDVq7gviKiCM3KPOnQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hLQ_my8jBSDVq7gviKiCM3KPOnQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hLQ_my8jBSDVq7gviKiCM3KPOnQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hLQ_my8jBSDVq7gviKiCM3KPOnQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/YYlZzFjQC2A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/6109895811377030634/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/06/collatz-graphs-and-perl-6.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/6109895811377030634?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/6109895811377030634?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/YYlZzFjQC2A/collatz-graphs-and-perl-6.html" title="Collatz graphs and Perl 6" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_uVc2BH7QVHw/TCN2E0RP7gI/AAAAAAAADiw/yv0zBLmFFdY/s72-c/cc-600.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/06/collatz-graphs-and-perl-6.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcMRX48fSp7ImA9WxFVEUU.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-2562723724880226314</id><published>2010-06-10T09:00:00.018-04:00</published><updated>2010-06-10T12:41:24.075-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-10T12:41:24.075-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><category scheme="http://www.blogger.com/atom/ns#" term="computer science" /><title>Are your passwords safe in MD5 or SHA-1 formats?</title><content type="html">I've read, over and over again, various questions and seemingly authoritative statements about the security of various hashing algorithms. I've gotten kind of tired of reading misinformation, so here's some detail that you can trust.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;US-CERT of the U. S. &lt;a class="mw-redirect" href="http://en.wikipedia.org/wiki/Department_of_Homeland_Security" title="Department of Homeland Security"&gt;Department of Homeland Security&lt;/a&gt; said MD5 "should be considered cryptographically broken and unsuitable for further use."&lt;/li&gt;
&lt;li&gt;The document that this was stated in is titled, "Vulnerability Note VU#836068: MD5 vulnerable to collision attacks"&lt;/li&gt;
&lt;li&gt;A collision attack is where an attacker, given access to a hashed password (or other plain text), crafts a password that yields the same result when hashed. Thus to a password authentication system, the crafted "collision" seems to be the correct password.&lt;/li&gt;
&lt;li&gt;If your password hashing scheme does not use a salt, none of this is interesting to you, as you have little or no security to speak of given an attacker (internal or external) who has access to your hashed passwords.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
OK, so what does any of this mean to you? &lt;a href="http://en.wikipedia.org/wiki/MD5#Security"&gt;Is MD5 secure?&lt;/a&gt; Well, not really. It is possible, with moderate hardware investment and access to the hashed password to generate a "skeleton key." No one can "crack" the original password in a reasonable amount of time that I know of or that I've read about, but access to an equivalent password solves many problems for an attacker, even if they can't then take that password and use it against other services (since those services would not be using the same "salt" which prevents the same password hashing the same way on two different sites or services). &lt;br /&gt;
&lt;br /&gt;
The question you have to ask yourself is this: why are you hashing passwords? Is it to protect them, should someone gain access to your systems from the outside? Is it to protect them from those who have access to the data store? In these cases, md5 is at best a weak protection, but it is significantly better than some of the alternatives (DES, etc.) which are breakable in practically no time.&lt;br /&gt;
&lt;br /&gt;
But MD5 is used in many places besides password hashing. Should we stop using it there? Probably not.&lt;br /&gt;
&lt;br /&gt;
For example many backup and data validation tools use MD5 to make sure that data has not been modified (either to initiate a backup/copy or to safeguard against accidental local change). These purposes are still served just as well now as they were when MD5 was introduced, and the fact that MD5 has been proven to have possible collision attacks does not really impact the data integrity aspect of the algorithm. Of course, there are cases where MD5 will identify a block as unchanged when it has, in fact, changed. This is true for all hashing algorithms, but the reason that MD5 was initially considered acceptable for this purpose was that the chance of that happening without malicious intent is astronomically small (that malicious intent was not believed to be as much of a factor then is not interesting to us, now). It would be a bit like dropping a penny down into one of those boxes with water where the goal is to land it on a small platform, and just as you dropped it, an earthquake struck, causing the penny to bounce off the platform, jump back up through the slot and blind you. Just as I don't recommend avoiding such games because of the risk of blindness, I don't think you need to stay away from hashing algorithms (including MD5) in order to avoid missing a data update. If you think someone might be waiting for you to drop the penny so they can set off some dynamite, then you have a different kind of problem, and MD5 might not be the best choice (e.g. if you're performing MD5 checksums in order to verify that a system's software has not been compromised).&lt;br /&gt;
&lt;br /&gt;
Now, that changes as your risk profile changes. There are times, I believe, where it makes sense to take extra precautions. For example, if you're making constant backups of large amounts of rapidly changing data whose integrity in original and backup form has a high risk associated (e.g. medical data), then I might use two hashing algorithms to perform the verification. MD5 might be a fine choice for one of them, but I'd use SHA-1 or something similar on top of it. It's still astoundingly unlikely to be an issue, but there's a time an place for being stupidly extra-certain and if you can afford the extra CPU cycles, why not compute two hashes while you're looking at the data?&lt;br /&gt;
&lt;br /&gt;
What about SHA-1? Hasn't that been broken too? No, &lt;a href="http://en.wikipedia.org/wiki/SHA-1#Cryptanalysis"&gt;SHA-1 has known weaknesses&lt;/a&gt; which will likely yield security-impacting attacks in the future, but as of now, these weaknesses have yet to be translated into actual attack vectors. It's certainly worth staying on top of, and keeping a flexible hashing scheme (ala &lt;a href="http://tools.ietf.org/html/rfc3112"&gt;the OpenBSD/LDAP schema&lt;/a&gt;) in your application in order to upgrade to SHA-3 when it becomes available and has been thoroughly tested, but for now SHA-1 is an excellent choice for anything short of military/state-secret sorts of crypto-hashing needs.&lt;br /&gt;
&lt;br /&gt;
Bruce Schneier, who is recognized around the world as an authority on cryptographic security, &lt;a href="http://www.schneier.com/blog/archives/2005/02/cryptanalysis_o.html"&gt;had this to say about the news regarding SHA-1&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote&gt;They can find collisions in SHA-1 in 2&lt;sup&gt;69&lt;/sup&gt; calculations, about 2,000 times faster than brute force. Right now, that is just on the far edge of feasibility with current technology.&lt;br /&gt;
Jon Callas, PGP's CTO, put it best: "It's time to walk, but not run, to the fire exits. You don't see smoke, but the fire alarms have gone off." That's basically what I said last August.&lt;br /&gt;
&lt;blockquote&gt;It's time for us all to migrate away from SHA-1.&lt;br /&gt;
Most of the hash functions we have, and all the ones in widespread use, are based on the general principles of MD4. Clearly we've learned a lot about hash functions in the past decade, and I think we can start applying that knowledge to create something even more secure.&lt;/blockquote&gt;Hash functions are the least-well-understood cryptographic primitive, and hashing techniques are much less developed than encryption techniques. Regularly there are surprising cryptographic results in hashing &lt;i&gt;...&lt;/i&gt; we still have a lot to learn about hashing.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-2562723724880226314?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MTchv6JnC3h5z0-Bu224X0yM0C4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MTchv6JnC3h5z0-Bu224X0yM0C4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MTchv6JnC3h5z0-Bu224X0yM0C4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MTchv6JnC3h5z0-Bu224X0yM0C4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/f6UhwiopIbM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/2562723724880226314/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/06/are-you-passwords-safe-in-md5-or-sha-1.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/2562723724880226314?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/2562723724880226314?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/f6UhwiopIbM/are-you-passwords-safe-in-md5-or-sha-1.html" title="Are your passwords safe in MD5 or SHA-1 formats?" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>1</thr:total><feedburner:origLink>http://essays.ajs.com/2010/06/are-you-passwords-safe-in-md5-or-sha-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMEQHo4eyp7ImA9WxFVEU8.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-4294008465476134726</id><published>2010-06-09T19:00:00.015-04:00</published><updated>2010-06-09T19:00:01.433-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-09T19:00:01.433-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="programming languages" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Perl 6, Python, hyperoperators and list comprehensions</title><content type="html">I use Python every day at work, and I do like the language. There are things about it that annoy me, but I don't think that's ever &lt;i&gt;not&lt;/i&gt;&amp;nbsp;been true of any language I've used. One of Python's best features is its list comprehensions. These short snippets of code can embody so much work that it often feels like Python is writing your code for you.&lt;br /&gt;
&lt;br /&gt;
At night, I go home and work on Perl 6, the upcoming update to the decades-old programming language which adds features from nearly every programming language you've ever heard of (and some you haven't). The direct equivalent of the list comprehension in Perl 6 is the same as it was in Perl 5: map. Here's how you use map in Perl 6:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;map {$_ + 10}, (1,2,3,4)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This yields the same list as the Python:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;[ x + 10 for x in 1,2,3,4 ]&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Ah, but the astute among you are noticing that the Perl uses a variable name that's always the same, thus making nested map statements painful due to the need to create temporary variable names manually. In Perl 5, this was true, but we can name those temporaries quite easily now:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;map { $^x + 10 }, (1,2,3,4)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Perl sees these temporaries from left to right and considers them positional parameters in the order that they appear to the current block (which is also a closure).&lt;br /&gt;
&lt;br /&gt;
But Perl 6 gives us something more than map. In fact, map will be used much less frequently in Perl 6 because of hyperoperators. A hyperoperator is an operator that takes another operator as a parameter and augments its behavior. In Perl 6, hyperoperators can do this:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;(1,2,3,4) &amp;lt;&amp;lt;+&amp;gt;&amp;gt; 10&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;or the Unicode equivalent:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;(1,2,3,4)&amp;nbsp;«+» 10&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This takes the + operator and makes it work on the list given on the right side, adding the value on the left to each item and returning the newly created list of results. So, we never need to create a closure in order to ask Perl to do some particular binary operation on all elements of a list. Instead, we just pass the list, the operator and the right hand side to a hyperoperator and it does all the heavy lifting. We don't even need to see the temporary variable that's being used.&lt;br /&gt;
&lt;br /&gt;
List comprehensions like Python's [ ... for ... ] and Perl's map are extremely valuable things for doing complex operations, but when what you really want is just to perform a simple operation on the elements of a list, hyperoperators give you what you need without the trappings you don't care about.&lt;br /&gt;
&lt;br /&gt;
Note: There are actually multiple forms of hyperoperator depending on how "DWIMy" (Do What I Mean) you want it to be and on which of its arguments. See &lt;a href="http://perlcabal.org/syn/S03.html#Hyper_operators"&gt;Synopsis 3's section on Hyperoperators&lt;/a&gt; for more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-4294008465476134726?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/z8p6-zqA6RdJo_izJTJrhgatYTI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/z8p6-zqA6RdJo_izJTJrhgatYTI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/z8p6-zqA6RdJo_izJTJrhgatYTI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/z8p6-zqA6RdJo_izJTJrhgatYTI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/hUinaFM2C3Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/4294008465476134726/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/06/perl-6-python-hyperoperators-and-list.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/4294008465476134726?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/4294008465476134726?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/hUinaFM2C3Y/perl-6-python-hyperoperators-and-list.html" title="Perl 6, Python, hyperoperators and list comprehensions" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/06/perl-6-python-hyperoperators-and-list.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYCSH88eyp7ImA9Wx5RF0k.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-3318880302912244914</id><published>2010-06-03T10:34:00.002-04:00</published><updated>2010-08-25T10:39:29.173-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-25T10:39:29.173-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="programming languages" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>5 things you can do with Lists in Perl 6, Python and Ruby</title><content type="html">I think practical examples of doing the same sorts of tasks in different programming languages can be wonderful tools. Recently, an IT student in Poland named &lt;a href="http://konryd.blogspot.com/2010/06/5-things-you-can-do-with-python-list-in.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+KonradBlog+(konrad+blog)"&gt;Konrad posted a followup on his blog&lt;/a&gt; to the 2007 Ruby blog, "&lt;a href="http://drewolson.wordpress.com/2007/03/23/5-things-you-can-do-with-a-ruby-array-in-one-line-plus-a-free-bonus/"&gt;5 things you can do with a Ruby array in one line (PLUS A FREE BONUS!!)&lt;/a&gt;" by drewolson. He updated this for Python. Of course, having worked with Perl 6 quite a&amp;nbsp;lot recently (see my &lt;a href="https://mail.google.com/mail/?shva=1#buzz/search/author%3A%22Aaron+Sherman%22+perl+6"&gt;Google Buzz posts titled "Your daily dose of Perl 6"&lt;/a&gt;), I was compelled to do the same for that language. See below for the results. Notice that Konrad chose temporary variable names that were much shorter than drewolson's, so the visual comparison between Ruby and Pyhthon in terms of code size is somewhat unfair, but I'll go with the original names where I need temporaries, just to be fair to Ruby.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Summing elements&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;Here, the original Ruby example printed the result, but I've trimmed that out for consistency with the rest of the examples.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
Ruby: &lt;br /&gt;
&lt;pre&gt;&lt;code class="ruby" style="display: block;"&gt;  my_array.inject(0){|sum,item| sum + item}&lt;/code&gt;&lt;/pre&gt;Python: &lt;br /&gt;
&lt;pre&gt;&lt;code class="python" style="display: block;"&gt;  sum(my_list)&lt;/code&gt;&lt;/pre&gt;Perl 6: &lt;br /&gt;
&lt;pre&gt;&lt;code block;"="" class="perl"&gt;  [+] @my_array&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Double every item&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Ruby: &lt;br /&gt;
&lt;pre&gt;&lt;code class="ruby" style="display: block;"&gt;  my_array.map{|item| item*2 }&lt;/code&gt;&lt;/pre&gt;Python: &lt;br /&gt;
&lt;pre&gt;&lt;code class="python" style="display: block;"&gt;  [2 * x for x in my_list]&lt;/code&gt;&lt;/pre&gt;Perl 6: &lt;br /&gt;
&lt;pre&gt;&lt;code block;"="" class="perl"&gt;  @my_array &amp;lt;&amp;lt;*&amp;gt;&amp;gt; 2&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Finding all items that meet your criteria (such as being&amp;nbsp;divisible&amp;nbsp;by 3)&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Ruby: &lt;br /&gt;
&lt;pre&gt;&lt;code class="ruby" style="display: block;"&gt;  my_array.find_all{|item| item % 3 == 0 }&lt;/code&gt;&lt;/pre&gt;Python: &lt;br /&gt;
&lt;pre&gt;&lt;code class="python" style="display: block;"&gt;  [x for x in my_list if x % 3 == 0]&lt;/code&gt;&lt;/pre&gt;Perl 6: &lt;br /&gt;
&lt;pre&gt;&lt;code block;"="" class="perl"&gt;  grep {$^item %% 3}, @my_array&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code block;"="" class="perl"&gt;  # or...&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code block;"="" class="perl"&gt;  grep * %% 3, @my_array&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Combine techniques&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Ruby: &lt;br /&gt;
&lt;pre&gt;&lt;code class="ruby" style="display: block;"&gt;  my_array.find_all{|item| item % 3 == 0 }.inject(0){|sum,item| sum + item }&lt;/code&gt;&lt;/pre&gt;Python: &lt;br /&gt;
&lt;pre&gt;&lt;code class="python" style="display: block;"&gt;  sum(x for x in my_list if x % 3 == 0)&lt;/code&gt;&lt;/pre&gt;Perl 6: &lt;br /&gt;
&lt;pre&gt;&lt;code block;"="" class="perl"&gt;  [+] grep * %% 3, @my_array&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Sorting&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;For more information on how Perl 6 sorting works and what the *-autoclosure syntax that I've used above does, see &lt;a href="http://perl6advent.wordpress.com/2009/12/23/day-23-lazy-fruits-from-the-gather-of-eden/"&gt;carl's excellent Perl 6 Advent Calendar post&lt;/a&gt;.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
Ruby: &lt;br /&gt;
&lt;pre&gt;&lt;code class="ruby" style="display: block;"&gt;  my_array.sort
  my_array.sort_by{|item| item*-1}&lt;/code&gt;&lt;/pre&gt;Python: &lt;br /&gt;
&lt;pre&gt;&lt;code class="python" style="display: block;"&gt;  sorted(my_list)
  sorted(my_list, reverse=True)&lt;/code&gt;&lt;/pre&gt;Perl 6: &lt;br /&gt;
&lt;pre&gt;&lt;code block;"="" class="perl"&gt;  @my_array.sort;
  @my_array.sort: -*;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
And there you have it. Enjoy the many choices you have in programming languages!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-3318880302912244914?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Rs2gQnLQPpknWQFPN5YgPfhFwV0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Rs2gQnLQPpknWQFPN5YgPfhFwV0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Rs2gQnLQPpknWQFPN5YgPfhFwV0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Rs2gQnLQPpknWQFPN5YgPfhFwV0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/DW-M8oURFiQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/3318880302912244914/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/06/5-things-you-can-do-with-lists-in-perl.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/3318880302912244914?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/3318880302912244914?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/DW-M8oURFiQ/5-things-you-can-do-with-lists-in-perl.html" title="5 things you can do with Lists in Perl 6, Python and Ruby" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/06/5-things-you-can-do-with-lists-in-perl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcER306fCp7ImA9WxFXGE4.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-2498376983452891145</id><published>2010-05-25T20:00:00.013-04:00</published><updated>2010-05-25T20:00:06.314-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-25T20:00:06.314-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Lost" /><category scheme="http://www.blogger.com/atom/ns#" term="TV" /><category scheme="http://www.blogger.com/atom/ns#" term="science fiction" /><title>Lost: What the !@#&amp; was going on?!</title><content type="html">Lost's pilot episode pulled me in. It was one of the best television shows I'd ever seen. The writing was brilliant, the actors were not only excellent, but all clearly gave everything they had (with one or two exceptions, but I'm able to ignore than in an ensemble cast). By the second season, the show had ground to a halt, and I became bored. I'd also been burned by Alias, Abrams' previous creation, and was not eager to be strung along for season after season again. I stopped watching late in the second season, and didn't come back until the fifth. The fourth and fifth seasons definitely picked up the pace of the show, but I was left wondering how much of what was going on would be revealed. The show was clearly set on a very cosmic trajectory, and to play that out would risk alienating a large percentage of the viewship (no matter how you play out a cosmic ending, it always alienates someone who feels that your story conflicts with their beliefs).&lt;br /&gt;
&lt;br /&gt;
So, it was with trepidation that I approached the sixth season, and in fact in the final two and a half hour movie, they never did play out the larger back-story. This post is aimed at exploring what was actually going on and whether, speculation aside, we had enough information to understand what it was that was going on. This will involve &lt;i&gt;&lt;b&gt;spoilers for the entire series&lt;/b&gt;&lt;/i&gt;. If you haven't watched the final seasons, I suggest you do, but go in expecting a non-reveal. I liked the last episode, but I felt the way I felt at the end of Donnie Darko: clearly someone knew where they wanted to go with this, but decided they didn't have the time, creative freedom or desire to follow through. In the case of DD, the story played out in supplemental materials on the Web. In the case of Lost, I think the creators simply don't want to explain what they feel they've sufficiently hinted at, for fear of losing the sense of mystery.&lt;br /&gt;
&lt;br /&gt;
OK, so let's see if we can extract reason from this show. There is really only one unanswered question of merit: what is the island? The other questions ("what are the numbers," "why do pregnant women die, etc." are secondary to this central theme and may not have answers outside of fan speculation).&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;Jacob gives us a metaphorical answer to this question. He explains that the island is like a wine bottle, holding in some sort of evil using a cork. I think it's safe to say that Jacob has more information about this than most, but in order to explain what he meant, we need to look at the evidence that we've been shown:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Whenever someone opens up a hole in the island to expose the "magnetic anomalies" something very bad happens involving a flash of light, the release of a large amount of destructive energy and some strange shifts in reality/time (including the removal of Desmond's clothes, the shifting of the 1970s group to the "present" and so on).&lt;/li&gt;
&lt;li&gt;It looks as if one such opening was created a very long time ago, and "stopped up" by a large stone "cork" in the cave where the light is seen.&lt;/li&gt;
&lt;li&gt;The smoke monster came out of the cave with the light when the Man in Black (MiB) was thrown in, but the MiB's body was later found, suggesting that he died.&lt;/li&gt;
&lt;li&gt;The smoke monster can assume the form of many of the people who have died on the island or have strong attachments to those who are there (e.g. Jack's father).&lt;/li&gt;
&lt;li&gt;When the stone cork is removed, the light is dulled to a reddish and darker hue and the island starts to crumble.&lt;/li&gt;
&lt;li&gt;When Jack goes down to get Desmond, at least one, possibly two skeletons are seen. Since we know the MiB's skeleton was in the cave where the Losties found refuge, this skeleton must belong to someone else.&lt;/li&gt;
&lt;li&gt;In the very old temple that appears to pre-date Jacob and the MiB, there is an icon showing the smoke monster. This means that the smoke monster has appeared before, prior to the MiB's death.&lt;/li&gt;
&lt;/ul&gt;Now, let those facts settle in for a bit, while we explore some themes. At the start of the show, the initial concern is survival against the forces of nature, but soon we are introduced to a more personified adversary: The Others. From the beginning Locke's analogy of there being a light and a dark in contention seems to be the theme of the show. The light, we assume, are the survivors and the dark are The Others. Certainly Henry Gale appears to be one seriously evil bastard bent on performing medical experiments on the newcomers and killing them off one by one.&amp;nbsp; The Losties are just trying to survive and rally around basic concepts of goodness such as motherhood and friendship.&lt;br /&gt;
&lt;br /&gt;
But there are cracks in this veneer. There's a killer, a drug abuser, a torturer and many other forms of unsavory characters among our band of "heroes," and they are all drawn back in to their personal unpleasantness. As the series progresses we find out more about The Others, and they're not quite the pure evil that we thought they were, either. Eventually, the two groups merge, but there's always a fragmentation and re-formation of the lines between sides. The island appears to bring out this fragmentation, and no matter how many interested parties are present, a duality emerges. "Us vs. them" appears to be the law of the island, but with each person responding on a personal level to the struggle and developing their own internal fight between darkness and light.&lt;br /&gt;
&lt;br /&gt;
Finally, we meet Jacob and MiB. Now we have some clarity. Clearly Jacob is good personified and MiB is evil. Well... not quite. In fact, though MiB seems to have always tipped toward the darker side and Jacob toward the lighter, they're not that cut and dry. MiB is initially not vindictive and only attacks those who attack him first. In fact, it's Jacob who repeatedly beats MiB and eventually kills him, becoming a Cain-like figure. Their "mother" in turn, also struggled between her mission to defend the island and her ruthless and homicidal impulses. Again, we see this very personal struggle between darkness and light on the part of everyone on the island.&lt;br /&gt;
&lt;br /&gt;
At every step, a layer of assumptions is removed and the dark stone/light stone analogy becomes more clouded. Is there a dark stone and a light stone, or are they purely internalized forces, vying for dominance within everyone?&lt;br /&gt;
&lt;br /&gt;
Going back to our evidence, I believe that we can support this conclusion, which fits well with the character drama I've described, above:&lt;br /&gt;
&lt;br /&gt;
The Island is a prison or containment vessel or battleground. We may never know which term best applies, but it is clear that there is a Light and a Darkness at play. Are they the same entity struggling internally as the island's inhabitants do or are there two entities in conflict? Again, we can't say, nor can we pinpoint the nature of the entities. They could be "gods" or "aliens" or some more general Gaimanesque manifestations of existential concepts. However, we know what it looks like when they interact with the world outside. When the "cork" of the island becomes weak it appears to manifest as a magnetic anomaly. When fully breached, time and other forces are bent in ways that Danial Faraday seems to have managed to understand to some extent, and which may even be directly responsible for the influence of the numbers (again, we could only speculate there, as we're never given enough information).&lt;br /&gt;
&lt;br /&gt;
When Light seeps out through these small cracks it is able to influence the world by creating a protector (e.g. Jacob's "mother," Jacob, Jack and Hurley). When Darkness seeps out through the same cracks, it is able to manifest physically, but we see its limitations quite clearly. It seems to only be able to manifest by appropriating the souls of those who have died, and even then some proximity to one of the cracks appears to be required at first. This would explain why MiB became the smoke monster. It was his death near the cave of light that exposed him to Darkness's control and manifestation. It also explains the prior appearance of the smoke monster (as shown on the temple wall) and the resulting skeleton in the cave of light. This also implies that the whole cycle has played out before, culminating in the death of the smoke monster's vessel.&lt;br /&gt;
&lt;br /&gt;
These breaches, however, are quite small. When they are pried open for short periods (e.g. by the wheel) the forces released can move the island and send people into different time periods, but actually opening a crack and leaving it that way would effect the escape of Darkness into the world (the smoke monster being just a sliver of its power, reliant on the soul which it infests like a parasite). Interestingly, though, it would also release Light which appears to be equally trapped, though how voluntary this is, or if they're the same entity is still unknown. The result could be Armageddon or some equivalent conflagration between the two.&lt;br /&gt;
&lt;br /&gt;
So, the Island is a prison, capable of holding two beings (or one) whose attenuated power is capable of downing airplanes, shifting time and bringing dozens of people into interpersonal and internal conflict. Just imagine how truly awful it would be should that cork ever give way entirely. One day, I imagine someone like Faraday will have to come up with a way to re-build these soft-spots and shore up these weak spots in the island's containment. Until then, it will continue to fall on the shoulders of the protector to keep the damage to a minimum.&lt;br /&gt;
&lt;br /&gt;
One interesting bit of hint at the singular or dual nature of Light and Darkness is the way in which the island responds to the death of their servants. When Jacob dies, it appears to lock MiB into Locke's form. This might suggest a more substantial connection between the two, and again we might be seeing an internal struggle playing out rather than the jailer / prisoner relationship.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-2498376983452891145?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oFNux5dNsd3-HZwzSqwn82MrecI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oFNux5dNsd3-HZwzSqwn82MrecI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oFNux5dNsd3-HZwzSqwn82MrecI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oFNux5dNsd3-HZwzSqwn82MrecI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/4dJ598NNtMQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/2498376983452891145/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/05/lost-what-was-going-on.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/2498376983452891145?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/2498376983452891145?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/4dJ598NNtMQ/lost-what-was-going-on.html" title="Lost: What the !@#&amp; was going on?!" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/05/lost-what-was-going-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UHQno9eSp7ImA9WxFXFUQ.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-3949814839120279203</id><published>2010-05-23T02:13:00.000-04:00</published><updated>2010-05-23T02:13:53.461-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-23T02:13:53.461-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="programming languages" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Writing a Perl 6 URI module</title><content type="html">I wanted to write a parser of some sort using Perl 6's spiffy parser language otherwise known as "rules". This is the super-extended regular expression syntax that Perl 6's own parser is written in, and it's not just powerful, it's easy to use. In fact, it's so easy to use that almost all of my time writing a URI parser module was spent on other aspects of the code than the parser itself.&lt;br /&gt;
&lt;br /&gt;
First off, some background. Perl 6 has a URI module already. However, it relies on a number of Perl built-in character classes to match things like digits and alphanumerics. In reality, the RFCs that define URIs are very precise, and there are different specifications depending on what you need. So, I decided to re-write the module with a pluggable parser so that you could give a regular, modern URI and have it parse correctly, but you could also ask for special "IRI" parsing on an internationalized URI and the right thing would happen there. I even went so far as to bring in an older version of the specification as a legacy mode.&lt;br /&gt;
&lt;br /&gt;
The current state of the Perl 6 parser and runtime called &lt;a href="http://rakudo.org/"&gt;Rakudo&lt;/a&gt; is actually fairly solid for a pre-release implementation of such a complex language spec. There are some gaping holes, but they were all relatively easy to work around. Some of these included overly aggressive list-flattening, some operators that were broken at the time I wrote this code and the big one: named rules only work as a stand-alone grammer with a specific entry-point called TOP.&lt;br /&gt;
&lt;br /&gt;
I worked around all of these issues and have, so far, been able to parse basic URIs according to RFC 3986. Here's a sample of what a Perl grammar for URIs looks like:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; token URI {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;scheme&gt; ':' &lt;hier_part&gt; [ '?' &lt;query&gt; ]? [ '#' &lt;fragment&gt; ]?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/fragment&gt;&lt;/query&gt;&lt;/hier_part&gt;&lt;/scheme&gt;&lt;/div&gt;&lt;br /&gt;
Here you can see most of the basics: "token" introduces a single expression within the grammar. It calls out to other tokens by enclosing their names in angle-brackets. Literal sequences are enclosed in single-quotes and sub-expressions can be enclosed in square-brackets with regular expression-like repetition counts such as ? for 0 or 1 matches.&lt;br /&gt;
&lt;br /&gt;
In order to have a pluggable interface, I needed a class capable of providing me with two things for each grammar: the grammar itself and a set of routines which would tell me how to find the resulting URI elements in the match data. For this I defined an interface using Perl 6's roles:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; role URI::Specification {&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; method parser() { ... }&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; method scheme_path() { ... }&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # ... other _path methods here...&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; }&lt;/div&gt;&lt;br /&gt;
Those ellipses are literal. They cause the methods to be required for any class composed with this role, but do not define any functionality themselves.&lt;br /&gt;
&lt;br /&gt;
Each parser is then defined as:&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; class URI::rfc3896 does URI::Specification {&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grammar URI::rfc3896::spec {&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; token TOP { &lt;uri&gt; }&lt;/uri&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # RFC definition of URI goes here.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; method parser() { return ::URI::rfc3896::spec }&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; method scheme_path() {&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gather do { take &lt;uri scheme=""&gt; }&lt;/uri&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # And so on ...&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; }&lt;/div&gt;&lt;br /&gt;
That's it. The only really funky bit here is the gather/take code in the scheme_path. That's the way Perl 6 defines a coroutine-like interface. The paths define how we traverse the match object to find match results. So, for example, the "scheme" (the "http" in "http:/www.example.com/") can only be matched in the URI rule's scheme sub-rule. Some URI elements, however, such as authority (the host name and port - possibly username as well) can be matched multiple ways, so these routines might return multiple lists of subrule names to traverse. I would have simply returned a list of lists, but Perl 6's parameter passing is very complex and currently some of the specification is not yet implemented. Right now, this manifests as overly aggressive list flattening when returning them from a subroutine or method.&lt;br /&gt;
&lt;br /&gt;
This is why I used coroutines to return each of the sub-lists, one call at a time.&lt;br /&gt;
&lt;br /&gt;
I'll continue to post new updates as my URI module nears readiness. For now, it's just awaiting some love on the other parsers, and I think it'll be ready to go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-3949814839120279203?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wSDNaMM7q4P0R2b9KzPnsejWzgk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wSDNaMM7q4P0R2b9KzPnsejWzgk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wSDNaMM7q4P0R2b9KzPnsejWzgk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wSDNaMM7q4P0R2b9KzPnsejWzgk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/2n6VmVn8zpY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/3949814839120279203/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/05/writing-perl-6-uri-module.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/3949814839120279203?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/3949814839120279203?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/2n6VmVn8zpY/writing-perl-6-uri-module.html" title="Writing a Perl 6 URI module" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>1</thr:total><feedburner:origLink>http://essays.ajs.com/2010/05/writing-perl-6-uri-module.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EASX48eyp7ImA9WxFXE0o.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-6067015938582759104</id><published>2010-05-20T09:00:00.002-04:00</published><updated>2010-05-20T14:20:48.073-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-20T14:20:48.073-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="World Wide Web" /><title>Icons from Wikimedia Commons</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_uVc2BH7QVHw/S_VDkIAKp-I/AAAAAAAADec/m2skImI8M9I/s1600/48px-Application-x-bittorrent.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="The file icon for Bittorrent, incorporating a basic paper file icon and the Bittorrent logo" border="0" src="http://2.bp.blogspot.com/_uVc2BH7QVHw/S_VDkIAKp-I/AAAAAAAADec/m2skImI8M9I/s320/48px-Application-x-bittorrent.png" /&gt;&lt;/a&gt;&lt;/div&gt;I'm often lacking for exactly the right Icon for Web work, and then I remember &lt;a href="http://commons.wikimedia.org/wiki/Main_Page"&gt;Wikimedia Commons&lt;/a&gt;. For a number of open-licensed UIs I've used the Wikimedia images to help create a look that implies I spent an awful lot of time and energy. These icons vary in quality because they were uploaded from different sources, but you can get some of the best icons available from this site (along with, of course, the best &lt;a href="http://commons.wikimedia.org/wiki/Commons:Picture_of_the_day"&gt;freely licensed photographs&lt;/a&gt; and &lt;a href="http://commons.wikimedia.org/wiki/Commons:Media_of_the_day"&gt;other media&lt;/a&gt;). Commons is a gem, and if you don't use it, you're probably missing out.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_uVc2BH7QVHw/S_U684Q_A7I/AAAAAAAADeQ/sEtaa9oVEYY/s1600/120px-Crystal_Clear_action_exit.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/_uVc2BH7QVHw/S_U684Q_A7I/AAAAAAAADeQ/sEtaa9oVEYY/s1600/120px-Crystal_Clear_action_exit.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="A power-down/exit icon from the Crystal Clear set from KDE" border="0" height="128" src="http://2.bp.blogspot.com/_uVc2BH7QVHw/S_U684Q_A7I/AAAAAAAADeQ/sEtaa9oVEYY/s200/120px-Crystal_Clear_action_exit.png" width="128" /&gt;&lt;/a&gt;&lt;/div&gt;The &lt;a href="http://www.blogger.com/"&gt;Crystal Icons from KDE&lt;/a&gt; were uploaded as PNG, but the original SVG icons can be acquired from their original site. These are very clean and plastic-feeling icons for everything from the power button you see on the left to various arrows to hands to gears. Because they were uploaded in fairly high resolution, using the PNG versions isn't all bad, but you'll still get a better final result if you work from the SVG.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_uVc2BH7QVHw/S_VEUYTf7oI/AAAAAAAADek/Gb8QH318cQI/s1600/120px-Gaim_icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="The Gaim (now Pidgin) icon with a stylized image of a man, loosely based on AOL's logo for AOL Instant Messenger" border="0" src="http://4.bp.blogspot.com/_uVc2BH7QVHw/S_VEUYTf7oI/AAAAAAAADek/Gb8QH318cQI/s320/120px-Gaim_icon.png" /&gt;&lt;/a&gt;&lt;/div&gt;There are also many icons for specific applications. You can use these when writing reviews or otherwise mentioning the applications in quesiton. Many of the application icons come from the Crystal set as above, but some are directly lifted from open source projects, such as the Gaim (now pidgin) icon you see to the left.&lt;br /&gt;
&lt;br /&gt;
Other icons include &lt;a href="http://commons.wikimedia.org/wiki/Category:Arrow_icons"&gt;arrows&lt;/a&gt;, &lt;a href="http://commons.wikimedia.org/wiki/Category:Globe_icons"&gt;globes&lt;/a&gt;, &lt;a href="http://commons.wikimedia.org/wiki/Category:Hand_icons"&gt;hands &lt;/a&gt;and many other cateogries. You can browse all of the categories from &lt;a href="http://www.blogger.com/"&gt;Wikimedia's "icons by subject" page&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
To use these icons, I recommend always selecting SVG format images and then using &lt;a href="http://www.blogger.com/"&gt;Inkscape &lt;/a&gt;. Load an SVG icon up in Inkscape and select File, Export Bitmap... to save it as a PNG file, setting the height and width to exactly what you want. For now, PNG is the way Web browsers deal with icons the best, though in the future, SVG will be taking over that role as older browsers fade away.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-6067015938582759104?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MB_X9xK6JB9lrvoNpkqUU7L1kJU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MB_X9xK6JB9lrvoNpkqUU7L1kJU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MB_X9xK6JB9lrvoNpkqUU7L1kJU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MB_X9xK6JB9lrvoNpkqUU7L1kJU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/VXyNrA4LSCE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/6067015938582759104/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/05/icons-from-wikimedia-commons.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/6067015938582759104?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/6067015938582759104?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/VXyNrA4LSCE/icons-from-wikimedia-commons.html" title="Icons from Wikimedia Commons" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_uVc2BH7QVHw/S_VDkIAKp-I/AAAAAAAADec/m2skImI8M9I/s72-c/48px-Application-x-bittorrent.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/05/icons-from-wikimedia-commons.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcERno7fyp7ImA9WxFQF00.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-3295486489412942135</id><published>2010-05-12T18:40:00.000-04:00</published><updated>2010-05-12T18:40:07.407-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-12T18:40:07.407-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><title>Fire alarms: Among the worst UIs in history</title><content type="html">So a fire alarm just went off in my office building. Here's what you hear:&lt;br /&gt;
&lt;br /&gt;
"&lt;i&gt;*beep* Your attention please. There has been a report of an emergency in this building. If your floor evacuation tone sounds after this message, please leave the building. *beep* Your Attention please. ...&lt;/i&gt;"&lt;br /&gt;
&lt;i&gt; &lt;/i&gt;&lt;br /&gt;
OK, am I the only person who sees the problem with that announcement? Is the second *beep* just a repeat of the message or am I supposed to read that as "my floor's evacuation tone?" What does my floor's signal tone sound like? Is it different from other floors? Does our floor's signal tone rule relative to the suckage of other floors' signal tones?&lt;br /&gt;
&lt;br /&gt;
So here's an idea: Instead of a useless recorded message, have the damned thing announce the floor that the problem exists on (or floors). I'd really love to hear, "&lt;i&gt;Floors 8 through 10 should consider jumping out the windows because a fire is quickly sucking the oxygen out of the stair wells!&lt;/i&gt;" Now that would be a warning I could do something with.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-3295486489412942135?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xFewBcepw6oMM3SqSDXlAyTk3IA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xFewBcepw6oMM3SqSDXlAyTk3IA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xFewBcepw6oMM3SqSDXlAyTk3IA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xFewBcepw6oMM3SqSDXlAyTk3IA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/NYaork6Z0Ck" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/3295486489412942135/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/05/fire-alarms-among-worst-uis-in-history.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/3295486489412942135?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/3295486489412942135?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/NYaork6Z0Ck/fire-alarms-among-worst-uis-in-history.html" title="Fire alarms: Among the worst UIs in history" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/05/fire-alarms-among-worst-uis-in-history.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAFQHc8fyp7ImA9WxFRGU0.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-248515097279442743</id><published>2010-05-03T13:21:00.005-04:00</published><updated>2010-05-03T13:28:31.977-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-03T13:28:31.977-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="social networking" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><title>Test Wave Post</title><content type="html">I'm testing out Google Wave integration. Please, let me know what you think in the Wave, below.&lt;br /&gt;
&lt;br /&gt;
&lt;div id="waveframe" style="width: 300px; height: 500px"&gt;&lt;/div&gt;&lt;script type="text/javascript" 
  src="http://www.google.com/jsapi"&gt;&lt;/script&gt;&lt;br /&gt;
&lt;script type="text/javascript"&gt;
google.load("wave", "1");
google.setOnLoadCallback(initialize);
function initialize() {
  var waveframe = document.getElementById("waveframe");
  var embedOptions = {
    target: waveframe,
    header: false,
    toolbar: false,
    footer: false
  };
  var wavePanel = new google.wave.WavePanel(embedOptions);
  wavePanel.loadWave("googlewave.com!w+7OrP2QqmE");
}
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-248515097279442743?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qpgknCO_lShKqPSRYvsoBWSV9Sg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qpgknCO_lShKqPSRYvsoBWSV9Sg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qpgknCO_lShKqPSRYvsoBWSV9Sg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qpgknCO_lShKqPSRYvsoBWSV9Sg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/iOCDp5im3kc" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/248515097279442743?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/248515097279442743?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/iOCDp5im3kc/test-wave-post.html" title="Test Wave Post" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><feedburner:origLink>http://essays.ajs.com/2010/05/test-wave-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMMQHgyeCp7ImA9Wx5RF0k.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-1090870985515963153</id><published>2010-04-06T19:00:00.001-04:00</published><updated>2010-08-25T10:44:41.690-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-25T10:44:41.690-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="World Wide Web" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><title>Enforced bad passwords</title><content type="html">Long ago, I got sick of sites that restrict me to bad passwords, but today I came across another and it has pushed me to yet again explain why it is that you should never restrict passwords without deeply compelling cause.&lt;br /&gt;
&lt;br /&gt;
Today's offender was Boston Coach, the luxury livery service in that was founded by Boston's Fidelity Investments (the legend states that one day, Fidelity's owner, Ned Johnson wanted a cab and couldn't get one; the next day he had his own fleet of black sedans with smartly dressed drivers, trained to treat their passengers like royalty). Anyway, so I wanted to hire a Coach to take my mother and I to a concert for her birthday (I won't say what birthday; you're welcome, Mom). I had to sign up for an account on their Web site. They committed a few sins in the process:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Unless you really need a pseudonym, don't ask the user to create one. Instead, use the email address for logins.&lt;/li&gt;
&lt;li&gt;Never restrict passwords unless you are technologically constrained to do so, and if you are, file a security bug with whatever braindead software it was that forced you to (or consider just dumping it).&lt;/li&gt;
&lt;li&gt;Test your UI with and without JavaScript support. This sounds silly, but there are plenty of environments where people aren't allowed to enable unsafe browser features.&lt;/li&gt;
&lt;li&gt;Never give the user an error without explaining what it is that they did to get it. Two examples came up, here: the password security policy and the number of occupants per car.&lt;/li&gt;
&lt;/ol&gt;To get back to the heart of my concern: the password. I use &lt;a href="http://www.schneier.com/passsafe.html"&gt;PasswordSafe&lt;/a&gt;, a program originally written by renowned security expert, Bruce Schneier. It can happily generate a very random, long password. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;K1/}"jUCF/byp6( : $1$0ZV5xOu3$iTgccli1bBSykSJxcOrfi.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Notice that this password would be nearly impossible to memorize, but because PasswordSafe stores it in an encrypted file, I just have to remember one, easier to remember password to access all of them. I tried to enter this very password for my account, but don't bother trying to use it... it was rejected. The confusing bit was that the UI informed me that I had not met "minimum password requirements." Wow, if that password doesn't measure up to Boston Coach's minimum requirements, they must spend all day, every day servicing lost password requests!&lt;br /&gt;
&lt;br /&gt;
In reality, what they'd done is refused to accept any password with punctuation (resulting in 31 possible characters being removed from all possible passwords on a typical US keyboard). This is a tragic thing to do to your password security, and a company founded by Fidelity Investments &lt;i&gt;should&lt;/i&gt; know better.&lt;br /&gt;
&lt;br /&gt;
Anyway, they should fix their broken software and anyone else that uses such terrible requirements for passwords should get on it ASAP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-1090870985515963153?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qEUiMwPibljE2uOGL1O-R6JnPpk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qEUiMwPibljE2uOGL1O-R6JnPpk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qEUiMwPibljE2uOGL1O-R6JnPpk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qEUiMwPibljE2uOGL1O-R6JnPpk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/YMg41RvDkyQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/1090870985515963153/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/04/enforced-bad-passwords.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/1090870985515963153?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/1090870985515963153?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/YMg41RvDkyQ/enforced-bad-passwords.html" title="Enforced bad passwords" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/04/enforced-bad-passwords.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ACR38_eSp7ImA9WxFTFU0.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-4779331507240662483</id><published>2010-04-05T19:22:00.000-04:00</published><updated>2010-04-05T19:22:46.141-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-05T19:22:46.141-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="social networking" /><category scheme="http://www.blogger.com/atom/ns#" term="photography" /><category scheme="http://www.blogger.com/atom/ns#" term="culture" /><category scheme="http://www.blogger.com/atom/ns#" term="news" /><category scheme="http://www.blogger.com/atom/ns#" term="World Wide Web" /><title>Twitter / Buzz: the new news?</title><content type="html">&lt;div style="float: right; margin-left: 1em;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/Q4RZWKaKWpYJ_tOxVus9sQ?authkey=Gv1sRgCOKJ8vyJ5PDCOw&amp;amp;feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_uVc2BH7QVHw/S7poFduBQ7I/AAAAAAAADTM/Zv2XiubRwcM/s288/Huge%20Boston%20fire.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Today's &lt;a href="http://xkcd.com/723/"&gt;XKCD discusses the math behind a tweet out-distancing an earthquake&lt;/a&gt;&amp;nbsp;(oddly, I read the comic before I heard about the quake). Later in the day, I found myself using Google's Buzz to post &lt;a href="http://www.google.com/buzz/AaronJSherman/b1RHqAwRPg9/Huge-Boston-fire"&gt;pictures of a fire in Boston&lt;/a&gt;. It's now getting to the point that I look to the Buzz map on my Droid before I consult &lt;a href="http://boston.com/"&gt;Boston.com&lt;/a&gt; for local news. It's not that it's more rational or more considered. It's just a matter wanting to know what's going on &lt;i&gt;now&lt;/i&gt;&amp;nbsp;rather than a half hour ago. Sure, I can visit a regular news site and find more detail later on, but there's just nothing like having a few thousand potential "reporters" on the scene.&lt;br /&gt;
&lt;br /&gt;
I suppose the future &lt;a href="http://en.wikipedia.org/wiki/Transmetropolitan"&gt;written by some science fiction authors&lt;/a&gt; is coming: we'll all be the on-the-scene "reporters" with actual journalists being the people who surf Twitter, Buzz, YouTube and so forth, the way they used to listen to police-band radio for a story. Once a journalist can tap into your head-mounted cam for a live feed hire you on the spot as a freelance photographer, there will be no story too fast to be fed into the hungry maw of the Internet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-4779331507240662483?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eU6JlJCV_mbVv9_ycInmpUbbc5s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eU6JlJCV_mbVv9_ycInmpUbbc5s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eU6JlJCV_mbVv9_ycInmpUbbc5s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eU6JlJCV_mbVv9_ycInmpUbbc5s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/eyys8T5vob4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/4779331507240662483/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/04/twitter-buzz-new-news.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/4779331507240662483?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/4779331507240662483?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/eyys8T5vob4/twitter-buzz-new-news.html" title="Twitter / Buzz: the new news?" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_uVc2BH7QVHw/S7poFduBQ7I/AAAAAAAADTM/Zv2XiubRwcM/s72-c/Huge%20Boston%20fire.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/04/twitter-buzz-new-news.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEEQ3szfyp7ImA9WxBaGU0.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-5131821790643060650</id><published>2010-03-29T19:00:00.000-04:00</published><updated>2010-03-29T19:00:02.587-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-29T19:00:02.587-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Python class attribute annoyance</title><content type="html">Python class attributes are fairly handy things, if somewhat visually misleading. Coming from other languages, you might expect this:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; class Foo(object):&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = 10&lt;/div&gt;&lt;br /&gt;
To define a class whose instances will have one attribute called &lt;i&gt;a&lt;/i&gt;. Not quite. &lt;i&gt;a&lt;/i&gt; is actually what most languages call a "static attribute" or "static member" of the class itself, not the instances. Python calls these "class attributes." Once you know this, class attributes are a tool you'll reach for in a number of circumstances, but they have subtle behaviors that can feel like bugs.&lt;br /&gt;
&lt;br /&gt;
For example, today I was trying to do something like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; class Foo(object):&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = 10&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = a + 5&lt;/div&gt;&lt;br /&gt;
which works just fine and does what you might expect (a is 10 and b is 15). But, this will yield an error:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; class Foo(object):&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = 10&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = [ a+i for i in range(1,11) ]&lt;/div&gt;&lt;br /&gt;
You might expect &lt;i&gt;b&lt;/i&gt; to contain &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[ 11, 12, ..., 20 ]&lt;/span&gt; but instead, you get an error telling you that &lt;i&gt;a&lt;/i&gt; isn't defined. [&lt;i&gt;Note: tested in Python 2.6 and 3.1&lt;/i&gt;]&lt;i&gt; &lt;/i&gt;This subtle flaw exists because that &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;a+i&lt;/span&gt; is actually being executed in a nested lexical scope, but because it was created inside of a class body, it fails to inherit what appears to be the parent scope and thus has no access to its lexically scoped variables. There are many ways to accomplish what you might have intended, here, but none of them are very clean. For example:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; class Foo(object):&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = 10&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = [ z+i for z in (a,) for i in range(1,11) ]&lt;/div&gt;&lt;br /&gt;
Now you are passing &lt;i&gt;a&lt;/i&gt; as a parameter to that nested scope, so it works perfectly. It's certainly a stilted way to do this, but it works just fine.&lt;br /&gt;
Coming, as I do, from Perl, this feels very odd. Perl's OO model is, at best, a framework upon which to build your own. Even still, this kind of scoping problem just never happens. Any lexical scope introduced anywhere in Perl will have a parent scope which is visually quite obvious. Running into such subtle shifts in Python's behavior seems counter to its stated goal of simplicity and elegance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-5131821790643060650?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6_ap_g_djDX02iz1r4iFUEHi3Lg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6_ap_g_djDX02iz1r4iFUEHi3Lg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6_ap_g_djDX02iz1r4iFUEHi3Lg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6_ap_g_djDX02iz1r4iFUEHi3Lg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/bXHzvFqEeFo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/5131821790643060650/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/03/python-class-attribute-annoyance.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/5131821790643060650?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/5131821790643060650?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/bXHzvFqEeFo/python-class-attribute-annoyance.html" title="Python class attribute annoyance" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/03/python-class-attribute-annoyance.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMEQ3Yyeyp7ImA9WxBaFkk.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-6205592380754237896</id><published>2010-03-26T19:00:00.000-04:00</published><updated>2010-03-26T19:00:02.893-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-26T19:00:02.893-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><category scheme="http://www.blogger.com/atom/ns#" term="Apple" /><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><title>Safe browsing and virus removal</title><content type="html">Sometimes you have to use Windows. There might be a game you like that only runs there or you might need a Windows-only program for work. Whatever it is that draws you to Windows, you know going in that you run the risk of your system becoming compromised (becoming a "zombie," getting a key-logger or any number of other harmful scenarios). OS/X is starting to feel the heat of increased market share as well, in case Mac fans thought they were somehow immune. &lt;a href="http://blogs.zdnet.com/security/?p=2917"&gt;In 2009 &lt;/a&gt;and now &lt;a href="http://www.pcworld.com/businesscenter/article/192419/security_lessons_learned_from_pwn2own_contest.html"&gt;in 2010, Mac/OS + Safari did quite poorly &lt;/a&gt;in a challenge to compromise browsers. My brother just recently got some sort of malware that caused him to spam the family with bogus links, and I put together this overview of what to do in response. In case it's useful to others, here you go:&lt;br /&gt;
&lt;br /&gt;
Preventative:&lt;br /&gt;
&lt;br /&gt;
1) Always use Firefox to browse the web (Safari and Chrome are getting there, but currently don't have the suite of helpful and stable plugins that Firefox does) &lt;a href="http://www.mozilla.com/en-US/firefox/personal.html" target="_blank"&gt;http://www.mozilla.com/en-US/&lt;wbr&gt;&lt;/wbr&gt;firefox/personal.html&lt;/a&gt;&lt;br /&gt;
2) Always use the noscript plugin for Firefox &lt;a href="http://noscript.net/" target="_blank"&gt;http://noscript.net/&lt;/a&gt; and add exceptions with care&lt;br /&gt;
3) If you're going to visit a site that might be questionable, use the "Tools -&amp;gt; Start Private Browsing" feature&lt;br /&gt;
&lt;br /&gt;
Doing anything less is roughly equivalent to going on a sex tour of the third world without condoms. That's not a pretty metaphor, but neither is having your system infected with every bot this side of Robbie from Forbidden Planet.&lt;br /&gt;
&lt;br /&gt;
As for cleaning your existing system... it's hard. The best and safest way is to back up your data and then use the re-install/recovery disks that came with the computer. If you want a less drastic approach (that isn't as guaranteed to work), then I suggest one of these resources:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.avira.com/en/support/antivir_removal_tool.html" target="_blank"&gt;AntiVir removal tool&lt;/a&gt; -- Avira, makers of my favorite free antivirus tool&lt;br /&gt;
&lt;a href="http://home.mcafee.com/VirusInfo/VirusRemovalTools.aspx" target="_blank"&gt;McAfee Virus Removal Tools&lt;/a&gt; -- McAfee (about $90)&lt;br /&gt;
&lt;a href="http://www.symantec.com/business/security_response/removaltools.jsp" target="_blank"&gt;Symantec Removal Tools&lt;/a&gt; -- Symantec removal tools (free?)&lt;br /&gt;
&lt;br /&gt;
I suggest figuring out what you have first. AntiVir, McAfee or Symantec can be used to do a full scan, and should turn this up. If not, try a malware removal tool like Spybot Search and Destroy &lt;a href="http://www.safer-networking.org/en/spybotsd/index.html" target="_blank"&gt;SpyBot Search and Destroy&lt;/a&gt; (but be careful if you do a Web search for it... don't click on ads, and make sure you spelled it correctly).&lt;br /&gt;
&lt;br /&gt;
To keep yourself safe in the future, make sure you have an up-to-date virus scanning tool (&lt;a href="http://www.free-av.com/"&gt;AntiVir&lt;/a&gt; has a free version that pops up a single ad for their product only, per day, asking you to buy the full version and there are paid programs from Symantec and McAfee). Also, make sure that you run the latest version of your browser (Firefox will auto-update with security fixes, but you should upgrade to the latest major version at least once every 6 months). Don't use IE. but if you really must, make sure it's updated to the very latest version. Microsoft's track record for keeping old browsers secure isn't very good.&lt;br /&gt;
&lt;br /&gt;
Beyond that, consider doing everything that isn't Windows-specific in a virtual machine. You can get an easy-to-use virtual machine manager at &lt;a href="http://www.virtualbox.org/wiki/Downloads"&gt;http://www.virtualbox.org/wiki/Downloads&lt;/a&gt; and then &lt;a href="http://www.ubuntu.com/GetUbuntu/download"&gt;download the install image for Ubuntu Linux&lt;/a&gt; and load it up in the virtual machine. This allows you to do things that would otherwise be unsafe in Windows within a safer environment. It's cumbersome, but the security return on your investment is well worth it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-6205592380754237896?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/STgTXQtH2ISLFbj6GoQVNOY3rPw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/STgTXQtH2ISLFbj6GoQVNOY3rPw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/STgTXQtH2ISLFbj6GoQVNOY3rPw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/STgTXQtH2ISLFbj6GoQVNOY3rPw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/dmXal4lece8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/6205592380754237896/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/03/safe-browsing-and-virus-removal.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/6205592380754237896?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/6205592380754237896?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/dmXal4lece8/safe-browsing-and-virus-removal.html" title="Safe browsing and virus removal" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/03/safe-browsing-and-virus-removal.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IHSX0yfyp7ImA9WxBaEkQ.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-8254158051451610520</id><published>2010-03-22T19:12:00.000-04:00</published><updated>2010-03-22T19:12:18.397-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-22T19:12:18.397-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="law" /><category scheme="http://www.blogger.com/atom/ns#" term="civil rights" /><category scheme="http://www.blogger.com/atom/ns#" term="science fiction" /><title>Peter Watts: An author to check out</title><content type="html">&lt;div style="float: right"&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=ac06-20&amp;o=1&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=10FE9736YVPPT7A0FBG2&amp;asins=0765315963" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;/div&gt;Peter Watts was an interesting author before he became national news. But in light of his &lt;a href="http://www.cbc.ca/canada/toronto/story/2010/03/19/watts-convicted.html"&gt;treatment at the hands of U.S. Border Police and subsequent conviction&lt;/a&gt; on a charge which is as absurdly broad as it is injust, I'd suggest that looking into his work now is probably the easiest way to say, "asking a police officer why you're being detained and searched should not be a felony."&lt;br /&gt;
&lt;br /&gt;
You see, Watts was crossing back into Canada when he was pulled over for what has recently become a routine, random exit search. He made a mistake... a big one. He got out of his car and asked why he was being searched. What he didn't know was that getting out of your car is interpreted as a dangerous and hostile act by police. It's an unfortunate consequence of the adversarial relationship we have with our police force (and they with us) in the U.S. What happened then was a series of increasingly wrong decisions on everyone's part. Watts was ordered back in his car, which he did comply with. An officer got into his car and and punched Watts in the face. Watts was then ordered back out of his car. He asked again what was going on and why he was being treated this way. He was ordered to get down on the ground which is when he again asked why (I'm reminded of &lt;i&gt;&lt;a href="http://www.amazon.com/gp/product/B001AIRUOU?ie=UTF8&amp;tag=ac06-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001AIRUOU"&gt;The Nightmare Before Christmas&lt;/a&gt;&lt;/i&gt; and the line, "you aren't comprehending the trouble that you're in.") This is when the police maced him with pepper spray.&lt;br /&gt;
&lt;br /&gt;
In the end, Watts was charged with assault and failure to comply. The officers claimed that he struck first, but this was later refuted in court and different officers' stories were shown to diverge. Anyway, the bottom line is that he wasn't convicted of assault, but under current statutes, that failure to get down on the ground after being hit carries exactly the same penalties. That's right, he committed the same crime by inaction as by attacking a police officer.&lt;br /&gt;
&lt;br /&gt;
So, on the one hand, I'd request that people please support this author. He acted in a way that certainly didn't help, but no one deserves to be hit, bullied and pepper sprayed just for (literally) getting out of line. That's not the kind of country we're supposed to be living in.&lt;br /&gt;
&lt;br /&gt;
On the other hand, we clearly need to change this law. Police should be the first in line demanding that it be so. After all, under the current law, you have nothing to lose once you fail to comply with an officer. Getting physically abusive won't escalate the nature of your crime (at least in terms of the assault charge, there might be additional charges that would apply at that point)! That's just wrong, and police and average citizen alike should demand that failure to comply be separated out with a reduced penalty so that real criminals and people who are just slow to recover from being punched in the face aren't treated the same.&lt;br /&gt;
&lt;br /&gt;
To those who are unsympathetic toward someone who is attacked in this way, keep in mind that purely for selfish reasons, the United States really can't afford to make every non-U.S. Citizen afraid to visit the U.S. Tourism and the sorts of business exchanges that require face-to-face meetings are essential to our continued economic growth. Incidents like this reduce the number of people coming to the U.S. which directly reduces the number of jobs in the U.S.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-8254158051451610520?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VB57yCixdAvKuP0zfs44bjQQjEM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VB57yCixdAvKuP0zfs44bjQQjEM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VB57yCixdAvKuP0zfs44bjQQjEM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VB57yCixdAvKuP0zfs44bjQQjEM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/Fu0s17KpE00" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/8254158051451610520/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/03/peter-watts-author-to-check-out.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/8254158051451610520?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/8254158051451610520?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/Fu0s17KpE00/peter-watts-author-to-check-out.html" title="Peter Watts: An author to check out" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/03/peter-watts-author-to-check-out.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ABQXo_fCp7ImA9WxBaE0s.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-6333162920089596188</id><published>2010-03-19T20:48:00.001-04:00</published><updated>2010-03-23T12:29:10.444-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-23T12:29:10.444-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="health care" /><category scheme="http://www.blogger.com/atom/ns#" term="politics" /><title>Following the Health Care Bill</title><content type="html">I've been trying to catch up on the state of the health care bill... it's not easy. There are some good sources, though. &lt;a href="http://www.pbs.org/newshour/interactive/static/stories/healthcare-comparison.html"&gt;PBS has a really excellent comparison on the House, Senate and reconciliation versions of the bill&lt;/a&gt; and &lt;a href="http://www.washingtonpost.com/wp-dyn/content/article/2010/03/22/AR2010032201834.html"&gt;the Washington Post has a very informative timeline of the changes that the bill will bring&lt;/a&gt;. There are some details there that I hadn't realized previously:&lt;br /&gt;
&lt;br /&gt;
All employers over 50 employees would be required to provide insurance for their employees or pay a substantial fine per employee (though you don't pay for the first 30, even if you're over 50). Most people will be required to get insurance if they don't get it from their company, &lt;i&gt;but&lt;/i&gt; there will be exceptions (those now covered by Medicaid, those who file a waiver for religious reasons, etc.)&lt;br /&gt;
&lt;br /&gt;
The religious reasons exemption kind of bothers me. I understand that there are those who don't want to seek medical care because they feel that their deity of choice doesn't approve. That's fine, but I don't get to opt out of paying for highways because I don't have a license... and I'm fine with that. It's just one of those infrastructure costs. If the fees for not getting insurance were about the same as the cost of insurance, then I wouldn't see any problem with removing the religious exemption.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another great source is the &lt;a href="http://www.csmonitor.com/USA/Politics"&gt;Christian Science Monitor&lt;/a&gt; (no relation to my above statements). They've always been a great news source, and that continues to be the case. Their coverage of health care reform includes some interesting insight, including the point that requiring people who don't get coverage through work to buy insurance is partially a way to increase coverage, but also helps the insurance companies as many new customers will be young people who are less at risk for expensive conditions. This means that the insurance companies will be able to immediately recover some of their lost margins due to being forced to insure those with pre-existing conditions. Of course, they'll still try to raise rates in response, but I'm seeing some major resistance to that... my company just announced that they're switching providers, probably due to increased rates, though I don't know for sure. Point being that competition will probably prevent these rates from getting too far out of control, though not as much as if there'd been a public option.&lt;br /&gt;
&lt;br /&gt;
The New York Times has &lt;a href="http://opinionator.blogs.nytimes.com/2010/03/19/checking-the-math-on-health-care/"&gt;a nice opinion piece that covers some of the bickering&lt;/a&gt; that's going back and forth right now. It does a reasonable job of tearing apart some of the talking points on both sides (I like the insight about gaming the C.B.O.)&lt;br /&gt;
&lt;br /&gt;
Of course, you can always &lt;a href="http://www.google.com/search?q=health+care&amp;amp;hl=en"&gt;browse the top stories from lots of sources via Google news&lt;/a&gt;, which I like to do every couple of days to keep up on the twists and turns.&lt;br /&gt;
&lt;br /&gt;
There's an &lt;a href="http://online.wsj.com/article/BT-CO-20100319-713298.html?mod=WSJ_latestheadlines"&gt;interesting bit on the Wall Street Journal site&lt;/a&gt; about how the bill's proposed system "does not adequately pay doctors and hospitals in some areas for treating Medicare patients," but that appears to be an existing Medicare problem that this will would expand by increasing enrollment. Pelosi says they're working that one out, now.&lt;br /&gt;
&lt;br /&gt;
No matter what it will be an interesting ride. You can follow the &lt;a href="http://www.intrade.com/"&gt;current odds of passage over at Intrade&lt;/a&gt;, which I've always been fascinated by as a predictive tool. They're edging up toward 85% right now, but have recently been below 50%, I assume as a result of various announcements coming out about who's voting which way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-6333162920089596188?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IRTC9MCfLK5cPIc3vfjMM9Gyg-E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IRTC9MCfLK5cPIc3vfjMM9Gyg-E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IRTC9MCfLK5cPIc3vfjMM9Gyg-E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IRTC9MCfLK5cPIc3vfjMM9Gyg-E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/Au_1mVvMGxw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/6333162920089596188/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/03/following-health-care-bill.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/6333162920089596188?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/6333162920089596188?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/Au_1mVvMGxw/following-health-care-bill.html" title="Following the Health Care Bill" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/03/following-health-care-bill.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcCQH84cSp7ImA9WxBbFEs.&quot;"><id>tag:blogger.com,1999:blog-4075524748616031851.post-213877966455109650</id><published>2010-03-12T00:29:00.001-05:00</published><updated>2010-03-13T01:01:01.139-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-13T01:01:01.139-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="free" /><category scheme="http://www.blogger.com/atom/ns#" term="music" /><category scheme="http://www.blogger.com/atom/ns#" term="business" /><title>iTunes vs. Amazon</title><content type="html">Have you ever compared iTunes and Amazon for music download services? I have, and while both services have something unique to offer, I can quickly point you to the two largest differences between the two. Here's a link to a page on Amazon:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fs%3Fie%3DUTF8%26node%3D318774011%26sort%3Dsalesrank%26ref_%3Ds9%5Ftops%5Fbw%5Fclnk%26rh%3Di%253Adigital-music-ss%252Cn%253A%2521195211011%252Cn%253A%2521251258011%252Cn%253A318768011%252Cn%253A318774011%252Cp%5Fn%5Ffeature%5Fbrowse-bin%253A625150011&amp;amp;tag=ac06-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957"&gt;Free Albums on Amazon&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
And here's a link to a similar service through iTunes.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewRoom?fcId=328879919"&gt;Free on iTunes&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
You will notice these differences:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;The iTunes link doesn't go to a Web page that has the items on it. Instead it goes to a nearly blank page that, if you have the right browser features, will allow you to launch iTunes to go to the iTunes store.&lt;/li&gt;
&lt;li&gt;The Amazon mp3 store has 120 free albums for download. The iTunes store has two songs and a music video. No, I'm not kidding, check it out.&lt;/li&gt;
&lt;/ol&gt;Enough said? Of course, free music isn't all there is, but I figure it's worth going through those 120 albums from Amazon first and then maybe browsing their &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fs%3Fie%3DUTF8%26node%3D334897011%26sort%3Dsalesrank%26ref_%3Ds9%5Ftops%5Fbw%5Fclnk&amp;amp;tag=ac06-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957"&gt;over 1,500 individual free songs&lt;/a&gt; and then think about which music service you want to patronize for your non-free music purchases.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4075524748616031851-213877966455109650?l=essays.ajs.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cubHfu3DP1qSVo7j8FMAZgjDCVY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cubHfu3DP1qSVo7j8FMAZgjDCVY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cubHfu3DP1qSVo7j8FMAZgjDCVY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cubHfu3DP1qSVo7j8FMAZgjDCVY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AaronsEssays/~4/ECbbe3pD1io" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://essays.ajs.com/feeds/213877966455109650/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://essays.ajs.com/2010/03/itunes-vs-amazon.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/213877966455109650?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4075524748616031851/posts/default/213877966455109650?v=2" /><link rel="alternate" type="text/html" href="http://feeds.ajs.com/~r/AaronsEssays/~3/ECbbe3pD1io/itunes-vs-amazon.html" title="iTunes vs. Amazon" /><author><name>Aaron</name><uri>http://www.blogger.com/profile/18334773771068768209</uri><email>ajs@ajs.com</email><gd:extendedProperty name="OpenSocialUserId" value="10997764576645704102" /></author><thr:total>0</thr:total><feedburner:origLink>http://essays.ajs.com/2010/03/itunes-vs-amazon.html</feedburner:origLink></entry></feed>
