<?xml version="1.0"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">

  <channel>
    <title>More Paul</title>
    <link>http://www.morepaul.com/</link>
    <atom:link href="http://www.morepaul.com/rss.xml" rel="self" type="application/rss+xml" />
    <description>Evidence that Paul Meier is a GASBAG.</description>
    <language>en-us</language>
    <pubDate>Thu, 19 Jan 2012 15:51:39 PST</pubDate>
    <lastBuildDate>Thu, 19 Jan 2012 15:51:39 PST</lastBuildDate>

    
    <item>
      <title>Smoke Weed Every Day</title>
      <link>http://www.morepaul.com/2012/01/smoke-weed-every-day.html</link>
      <pubDate>Wed, 18 Jan 2012 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;In the tradition of educating the masses on memes and Internet trends, I&amp;#8217;ve recently been in love with appropriation of Snoop Dogg. This post isn&amp;#8217;t personally an endorsement of marijuana, nor is this disclaimer a recommendation against it.&lt;/p&gt;

&lt;p&gt;Mario can&amp;#8217;t escape the Dogg:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/iAGBa9MZu0o' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/iAGBa9MZu0o' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;My favorite one to listen to:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/MRXk_zK-Ccw' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/MRXk_zK-Ccw' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;CARELESS WEED:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/krlC_2TgO-0' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/krlC_2TgO-0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Everything goes with &lt;a href='http://knowyourmeme.com/memes/guiles-theme-goes-with-everything'&gt;Guile&amp;#8217;s Theme&lt;/a&gt;:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/DziD_adtSV0' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/DziD_adtSV0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;On my wall, from a friend:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/w275r0FzEdY' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/w275r0FzEdY' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Testing, and the lost art of the manual</title>
      <link>http://www.morepaul.com/2012/01/lost-manual.html</link>
      <pubDate>Tue, 17 Jan 2012 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I hate to be GrandPaul, the old curmudgeon who hates things that just ain&amp;#8217;t the way they used to be. But I&amp;#8217;ve decided to touch webdev for &lt;a href='https://github.com/paul-meier/ScrabbleCheat/'&gt;ScrabbleCheat&lt;/a&gt; and by jove, I feel those RoR kids have jumped the shark. Forget &lt;a href='http://en.wikipedia.org/wiki/Test-driven_development'&gt;TDD&lt;/a&gt;; that shit is so &lt;em&gt;passe&lt;/em&gt;. These kids practice &lt;em&gt;&lt;a href='http://en.wikipedia.org/wiki/Behavior_Driven_Development'&gt;BDD&lt;/a&gt;&lt;/em&gt;, with &lt;a href='http://cukes.info/'&gt;Cucumber&lt;/a&gt; and &lt;a href='http://rspec.info/'&gt;RSpec&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let&amp;#8217;s make a few thing clear here: Unit Testing isn&amp;#8217;t the end-all, be-all of automated software verification. BDD seems to be a perfectly noble attempt to address many of its shortcomings, or if I may go so far, addressing the &amp;#8220;failed promises&amp;#8221; of TDD. Some of those promises (and how BDD helps solve them include):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Unit testing, on its own, helps you &lt;em&gt;validate&lt;/em&gt; your code, but does little to help you &lt;em&gt;understand&lt;/em&gt; its purpose.&lt;/strong&gt; Anybody who wastes enough time on Hacker News or Proggit has read the mandatory article claiming that Unit Tests &lt;em&gt;are&lt;/em&gt; your documentation, but it doesn&amp;#8217;t take long for this to break down. What about the 92% of TDD practitioners who, at some point, broke down and wrote code before tests just that once (and again and again)? What about all that semantically useless boilerplate (all the Mock libraries, all the fixtures, what have you)? At the very best you have verbose, very technical and implementation-obsessed documentation only your coders can read.&lt;/p&gt;

&lt;p&gt;Sure, by being executable and by having very wide coverage, Unit tests can help the technically-savvy person see, after some scrutiny, just how the application works. But this doesn&amp;#8217;t describe what &lt;em&gt;it does&lt;/em&gt;. BDD rectifies this by separating the specification of the behavior (what behavior you are testing) with the implementation of how you test it, and achieves this further (in the RoR world, anyways) with a butt-ton of fancy DSLs to make your tests read like English.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;TDD is a boon to the developer, but the benefits aren&amp;#8217;t directly known to the client.&lt;/strong&gt; RoR folks, moreso in my anecdotal observation than most other types of devs, love to talk about what tools they&amp;#8217;re using, usually much more than the projects they&amp;#8217;re working on. So while they can circlejerk to &lt;em&gt;each other&lt;/em&gt; about how great their methodology is and what gems they&amp;#8217;re using, how much better would it be if they could include the person footing the bill, and give them that extra-personal experience?&lt;/p&gt;

&lt;p&gt;I only mention this because everytime Cucumber lists its advantages, it&amp;#8217;s always mentioned that you can show your &lt;em&gt;cukes&lt;/em&gt; (Feature Definition files) to the clients and they will be able to read and understand it, even as nontechnical people. So that&amp;#8217;s a weakness of unit testing, I guess &amp;#8211; you can&amp;#8217;t show &lt;em&gt;that&lt;/em&gt; typing to the clients and it be anything meaningful.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I bring all this up because, well, I&amp;#8217;m trying to get on this train and I&amp;#8217;m finding it a bit of a pain in the ass. There are two major reasons for it, one the current Ruby ecosystem in particular, and the other simply being skeptical of the whole approach in the first place.&lt;/p&gt;

&lt;h3 id='bdd_in_ruby_today'&gt;BDD in Ruby, today&lt;/h3&gt;

&lt;p&gt;Despite my seething cynicism, I&amp;#8217;m working through it and giving it a try. Hell, the only reason I joined Twitter was because, four years ago, I was getting angry at its very existence, feeling that &amp;#8220;Web 2.0&amp;#8221; had brought us to such a shallow, useless service. Then I realized I was sounding like my (awesome, wonderful) Luddite father, so I signed up immediately. 2500 tweets later, I love it. So maybe (and I still believe this) I&amp;#8217;ll come around and preach this the way the Ruby kids do these days.&lt;/p&gt;

&lt;p&gt;But where to start learning? I looked at RoR years ago, back when we were all still using &lt;a href='http://ruby-doc.org/stdlib-1.9.3/libdoc/test/unit/rdoc/Test/Unit.html'&gt;Test::Unit&lt;/a&gt;, I understand MVC, but wanted to do things &lt;em&gt;right&lt;/em&gt; this time. So I read about RSpec and Cucumber, go to their respective websites, and try to write my first cukes and specs. The first thing you notice is that they both use DSLs. I know me plenty of Ruby, but when all your examples look like&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Feature: An online spittoon which allows users to spit at the monitor for fun and profit

Scenario: Spittoon graphics
Given that my website is operational
And that the user is full of saliva
Then that user may spit upon the screen
But not upon the keyboard
And a bucket will appear to receive the spit

Scenario: Proper spittoon sounds
Given that the user has spit upon the screen
When the user spits on it
Then it should make a great &amp;quot;ding!&amp;quot; sound&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It&amp;#8217;s not obvious where the code comes in. Or what the rules are for writing these files. Similarly, RSpec shows you tons of files like&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;describe Spittoon do

    subject { :spittoon }        

    it &amp;quot;should take spit in the monitor&amp;quot; do
       visit(&amp;quot;./&amp;quot;)
       subject.should receive_spit 
    end
end&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;All of this is well and cute, so you ask yourself, &amp;#8220;where is the DSL reference so I can write my own?&amp;#8221;&lt;/p&gt;

&lt;p&gt;No really, where is it? Because I still haven&amp;#8217;t found it. I&amp;#8217;m looking all through the interwebz, but neither Cucumber nor RSpec have a definitive listing of their DSLs. There are a few half-baked tutorials, some Wikis on the Github pages, and while they all describe these technologies on a very shallow level, they barely answer my questions. When you run &lt;code&gt;rspec&lt;/code&gt; from the command-line, where is it looking? Same with &lt;code&gt;cucumber&lt;/code&gt;? How should all the components fit into the Rails app? Where is a &lt;em&gt;full&lt;/em&gt; specification of the DSL? What capabilities of the browser does &lt;a href='https://github.com/jnicklas/capybara'&gt;Capybara&lt;/a&gt; emulate? And where&amp;#8217;s &lt;em&gt;its&lt;/em&gt; DSL reference?&lt;/p&gt;

&lt;p&gt;To contrast, there&amp;#8217;s &lt;em&gt;no shortage&lt;/em&gt; of press pages and splash pages telling me how this will add business value, how easy they are to use, how they all play well together, how they&amp;#8217;ll turn you into a rockstar ninja coder that makes makes clients happy. I&amp;#8217;d believe them, but if I want to read &lt;em&gt;how&lt;/em&gt; you&amp;#8217;ll redirect me to a dozen scattered wiki links and shallow blog posts with toy examples.&lt;/p&gt;

&lt;p&gt;Funnily enough, the best source of information is to dive into source: the kind of thing these tools are supposed to prevent.&lt;/p&gt;

&lt;p&gt;Well, that&amp;#8217;s not quite true. Because for $25 you can buy &lt;a href='http://pragprog.com/book/achbd/the-rspec-book'&gt;The RSpec Book&lt;/a&gt;. Or &lt;a href='http://pragprog.com/book/hwcuc/the-cucumber-book'&gt;the Cucumber book&lt;/a&gt;, for another $25. Note that many a Rails book carries a list price of &lt;a href='http://www.amazon.com/dp/1934356549/ref=asc_df_19343565491864467?smid=ATVPDKIKX0DER&amp;amp;tag=hyprod-20&amp;amp;linkCode=asn&amp;amp;creative=395093&amp;amp;creativeASIN=1934356549'&gt;$40&lt;/a&gt;-&lt;a href='http://www.manning.com/katz/'&gt;$50&lt;/a&gt;. Yes friends, you can have a decent serial, instructive reading experience that doesn&amp;#8217;t involve navigating disjointed wiki tabs if you pay up. All the refrains about how Java was as good for the publishing industry as it was for the software industry come back. PragProg is a house built on their Ruby + Rails books. Never mind that the reviews for the books state that they are mostly out of date (all the examples use Webrat, not Capybara) or also only contain only trivial, toy examples. You can&amp;#8217;t really blame them, it&amp;#8217;s part of the limitation of the dead tree business. But you know what can solve this? A good, freely available manual.&lt;/p&gt;

&lt;p&gt;I can learn a mainstream language from 1995 (Ruby), I can leverage existing programming experience from several other languages and projects, but when Rails apps use a component list reminiscent of &lt;a href='http://youtu.be/LMmdl4VltD4'&gt;The Startup Guys&lt;/a&gt; (&amp;#8220;So I&amp;#8217;m using Cucumber and RSpec with Rails with a dash of Factory Girl to practice BDD, with Launchy and Capybara since I think TDD and Webrat are dead.&amp;#8221;) there a real need to ensure that, if you rely on DSLs, the barriers to entry are low and the ability to learn is high.&lt;/p&gt;

&lt;p&gt;To compare to another learning experience I&amp;#8217;m having, I&amp;#8217;ve picked up emacs. I&amp;#8217;ve been a Vim user for the past 3 years, but felt like I wanted to taste the forbidden fruit and so have started doing all my text editing in Emacs (this post was written in Emacs). I was off the ground, blown away by some of the capabilities in less than a day. I was using &lt;a href='http://common-lisp.net/project/slime/'&gt;SLIME&lt;/a&gt; to run excercises in &lt;a href='http://norvig.com/paip.html'&gt;PAIP&lt;/a&gt; in less than a day, filled a few TODO lists in &lt;a href='http://orgmode.org/'&gt;org-mode&lt;/a&gt;, and found a redundant &lt;code&gt;import&lt;/code&gt; using &lt;a href='http://www.erlang.org/doc/apps/tools/erlang_mode_chapter.htm'&gt;Erlang-mode&lt;/a&gt;. And d&amp;#8217;you wanna know how I did it?&lt;/p&gt;

&lt;p&gt;I downloaded SLIME&amp;#8230; and the manual. I downloaded org-mode&amp;#8230; and the manual. I downloaded Emacs&amp;#8230; and the manual. When I need to know something, it&amp;#8217;s in there. But now, I&amp;#8217;m feeling less friction learning one of the most bloated and feature-packed pieces of software in history than I am trying to get a basic site up in Rails, using the community&amp;#8217;s idioms and best practices.&lt;/p&gt;

&lt;p&gt;At RailsConf 2009, Robert Martin gave a great talk titled &lt;a href='http://blip.tv/railsconf/railsconf-09-robert-martin-what-killed-smalltalk-could-kill-ruby-too-2099970'&gt;&amp;#8220;What killed Smalltalk could kill Ruby, too&amp;#8221;&lt;/a&gt;, and he highlights properties of the Smalltalk culture before it died: a bunch of very talented, smug programmers who were sure they would inherit the world because their tools were so much better than the competition. You can ask the Lisp guys how that worked for them, too. But at the end of the day, Rubyists: try not to make too much of a mess, since for every person like me who comes along to join the party, 10 won&amp;#8217;t stick around past this frustration as I have. Do the dirty work and write a damn manual, preferably downloadable as a PDF.&lt;/p&gt;

&lt;h3 id='on_bdd_generally'&gt;On BDD, generally&lt;/h3&gt;

&lt;p&gt;All that being said, I can&amp;#8217;t help but be skeptical about the advantages of BDD in the first place. A lot of it is well said in &lt;a href='http://www.jackkinsella.ie/2011/09/26/why-bother-with-cucumber-testing.html'&gt;this blog post&lt;/a&gt;, but I feel like BDD doesn&amp;#8217;t offer a whole lot of advantages over TDD, and the criticisms of TDD seek a more powerful answer.&lt;/p&gt;

&lt;p&gt;I listed two criticisms at the top of the post. Tackling them in reverse order:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;As my smarmy description made clear, nontechnical clients shouldn&amp;#8217;t touch (or have a need to see) the executable bits of your testing unless they really want to. If I want to hand my clients a list of requirements to confirm that I understand them, I&amp;#8217;ll write them a proper document thank you very much, not send them a bunch of braindead-sounding cukes, since I don&amp;#8217;t think it&amp;#8217;ll be of any consolation to them that I&amp;#8217;m &amp;#8220;running&amp;#8221; that document. &lt;strong&gt;Write cukes for yourself it if helps you, but don&amp;#8217;t put them in the client&amp;#8217;s face since, frankly, I doubt they care. If they seem to care, they probably want something better suited for their needs.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;The second, more compelling point, on specification vs. implementation. Here there is fertile ground to improve upon unit tests, but I think it would be by abandoning the developer writing an implementation in the first place. Many languages now have tools like Haskell&amp;#8217;s &lt;a href='http://www.haskell.org/haskellwiki/Introduction_to_QuickCheck'&gt;QuickCheck&lt;/a&gt; or Erlang&amp;#8217;s &lt;a href='https://github.com/manopapad/proper'&gt;PropEr&lt;/a&gt; where you declare the properties of the function you test, and the language can generate hundreds of random test inputs, usually finding a lot more corner cases than you expected. We automate building our software, we use fuzzers to find corner cases we didn&amp;#8217;t expect in security, why not automate the drudgery of coming up with unit tests?&lt;/p&gt;

&lt;p&gt;Bryan O&amp;#8217;Sullivan (of &lt;a href='http://book.realworldhaskell.org/'&gt;Real World Haskell&lt;/a&gt; fame) had a zinger of a comment in &lt;a href='http://www.randomhacks.net/articles/2009/04/30/rspec-cucumber-book-recommendation'&gt;an article describing BDD&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Oh wow. I never knew that Rubyists had a Cobol fetish. I think I liked my brain better when it didn&amp;#8217;t contain that knowledge.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It just feels like so much typing for not much power. &amp;#8220;Natural&amp;#8221;-sounding executable text doesn&amp;#8217;t strike me as a critical gain on the weaknesses of TDD.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Despite all my grousing, I&amp;#8217;ll stick through it. Watch me write a blog post in a few months swearing by it, like my Twitter conversion. Just wanted to get this off my chest.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Pretentious Titles and Pedantry, Part Paul</title>
      <link>http://www.morepaul.com/2011/11/pretentious-titles-part-paul.html</link>
      <pubDate>Mon, 14 Nov 2011 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Here&amp;#8217;s a long overdue post: what the hell is up with the title to your earlier post, mainly the term &lt;a href='http://morepaul.com/2011/03/an-anecdote.html'&gt;&lt;em&gt;observational indistinguishability?&lt;/em&gt;&lt;/a&gt; I admit to mentally fapping a bit; I&amp;#8217;ll try my best to explain the term here since it right well blew my mind when I learned it.&lt;/p&gt;

&lt;p&gt;Observational Indistinguishability, as it sounds, is the principle of two or more entities being indistinguishable from each other (you can&amp;#8217;t tell which one is which) by any amount of observation. It&amp;#8217;s really just a more formal way of saying a group things are equal in any way that matters. The magic of this is that the extra formality (that &lt;em&gt;OI&lt;/em&gt; it is not the same thing as equality) is absolutely critical. I&amp;#8217;ll show why, using two examples in CS.&lt;/p&gt;

&lt;p&gt;The first is &lt;strong&gt;pseudorandomness&lt;/strong&gt;. This is a word everybody says colloquially, probably unaware that it means something very precise, and solves a major theoretical hurdle of cryptography.&lt;/p&gt;

&lt;p&gt;That hurdle is this: most crypto constructs need random data in many places, but how do you reliably, consistently get a truly random stream of data? The short answer is that you can&amp;#8217;t: every method of gathering the random data will contain patterns that &amp;#8216;leak&amp;#8217; from whatever method you used. An example of this is pulling numbers out of your head: you may &lt;em&gt;think&lt;/em&gt; they&amp;#8217;re random, but if you do it for long enough, you&amp;#8217;ll start falling into human behavioral patterns that a smart-enough person can predict your next number with better odds than they would if it were actually random. Even if they couldn&amp;#8217;t immediately, there&amp;#8217;s no proof that they would never be able to if they&amp;#8217;re given a long enough time. And saying its &amp;#8216;mostly random&amp;#8217; without qualification isn&amp;#8217;t good enough: In the Game of Cryptography, you win or you die!&lt;/p&gt;

&lt;p&gt;So cryptographers got smart: they just lowered the bar to something that&amp;#8217;s just as good, in practical terms. Rather than demand &lt;em&gt;actual random data&lt;/em&gt;, they created &lt;em&gt;pseudorandom functions&lt;/em&gt; which, while provably not actually random, can also be proved to show that any polynomial-time function (computer-speak for &amp;#8220;any computer program on all the world&amp;#8217;s computers for several lifetimes&amp;#8221;) could never tell the difference*.&lt;/p&gt;

&lt;p&gt;And with that, a bunch of slacking cryptographers eagerly lost their excuse to sit on their asses, and went on to build secure cryptosystems and hash functions on top of a mathematically precise &amp;#8220;random enough data.&amp;#8221; Remember: even though we &lt;em&gt;know&lt;/em&gt; it&amp;#8217;s not random, it really doesn&amp;#8217;t matter because we couldn&amp;#8217;t tell the difference even if we tried.&lt;/p&gt;

&lt;p&gt;The second example is more meaningful though, because it&amp;#8217;s a bit more general: it comes from my Programming Languages seminar, where we frequently reasoned about the semantic meaning of programs using &lt;a href='http://en.wikipedia.org/wiki/Operational_semantics'&gt;operational semantics&lt;/a&gt;. You&amp;#8217;d frequently get a program written one of a few ways and ask yourself questions like &amp;#8220;what does it do,&amp;#8221; or &amp;#8220;how can we add X feature to the language and preserve all the previous properties?&amp;#8221;&lt;/p&gt;

&lt;p&gt;To do this, you&amp;#8217;d have to understand what a program is doing in relation to another program written with the same rules. Here&amp;#8217;s an example: are two functions equal, in terms of their semantic content? Do they do the exact same thing, from an inputs/outputs point of view? This isn&amp;#8217;t a trick question, answer the best you can and you&amp;#8217;re probably right:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;function example_one() {
    var x = 4;
    return x + 1;
}

function example_two() {
     return 4 + 1;
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The answer is yes, they are equal in terms of meaning, but here&amp;#8217;s the real problem: what does &amp;#8216;equal&amp;#8217; mean? Any attempt we had a class reverted to intuition (&amp;#8220;come now, we all know what it means&amp;#8221;) or synonyms (&amp;#8220;when they are the same. And they are the same when they are&amp;#8230; equal&amp;#8230;&amp;#8221;).&lt;/p&gt;

&lt;p&gt;Observational Indistinguishability lets us come up with a suitable definition without having to resort to defining equality. In this case &lt;em&gt;they are observationally indistinguishable when for all programming contexts in the language, they will both evaluate successfully or they will both fail to evaluate&lt;/em&gt;. In other words, for a set of evaluation rules &lt;em&gt;M&lt;/em&gt;, two programs are &amp;#8216;unequal&amp;#8217; if you could write a program using &lt;em&gt;M&lt;/em&gt; such that one of your functions will run to completion, but the other will &amp;#8220;crash&amp;#8221; and fail to evaluate. If you can&amp;#8217;t produce such a program, they are &amp;#8220;equal.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Lets try now with two unequal functions:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;function example_one() {
    return 4;
}

function example_two() {
     return 3;
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now these are clearly not equal, but let&amp;#8217;s show this without the notion of equality. We&amp;#8217;ll construct a program works when under one function, but not the other. Simple enough**:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;function test() {
    return 1 / (4 - example());
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you&amp;#8217;re using &lt;code&gt;example_one()&lt;/code&gt;, the program crashes (evaluation is impossible), while &lt;code&gt;example_two()&lt;/code&gt; hums along smoothly. Since were created a context where one example evaluated and one didn&amp;#8217;t, we know that these provide semantically different behavior. A few things to note about this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It makes no constraints on syntax, or even the specifics of evaluation rules: so long as a set of rules exists, this definition works for any program written with those rules.&lt;/li&gt;

&lt;li&gt;It puts the focus of equality on the meat and bones of the language: the evaluation rules and its primitive operations. &lt;code&gt;example_one()&lt;/code&gt; and &lt;code&gt;example_two()&lt;/code&gt; would actually appear equal if the language, for example, didn&amp;#8217;t support division, and instead only supported addition and subtraction between numbers. To you, as a language engineer, this makes you wonder what the point of including numbers or addition in your language is at all when the difference between 3 and 4 can&amp;#8217;t crash any program you can construct in it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So to come back full circle, I just thought &lt;a href='http://morepaul.com/2011/03/an-anecdote.html'&gt;original story&lt;/a&gt; was cute because a very studied, full-of-ideas dramaturge got played so hard by a process that was the result not of equality of scripts, but observational indistinguishability, which makes me wonder how important dramaturges are to the process to begin with.&lt;/p&gt;

&lt;p&gt;* = A little disclaimer: they didn&amp;#8217;t prove that no polynomial time function could &lt;em&gt;ever&lt;/em&gt; stop it, just that if anybody could come up with a way to do it, they&amp;#8217;d first have to solve a Famous Unsolved Problem We&amp;#8217;re Pretty Sure Doesn&amp;#8217;t Have An Answer, like &lt;a href='http://en.wikipedia.org/wiki/Discrete_logarithm#Cryptography'&gt;discrete logarithm&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My friend made a joke on cryptography proofs: &amp;#8220;We haven&amp;#8217;t proved they can&amp;#8217;t be broken, just that nobody has done it yet. By this logic, &lt;em&gt;I&amp;#8217;m immortal!&lt;/em&gt;&amp;#8221;&lt;/p&gt;

&lt;p&gt;**= IIRC, Javascript implementations represent all their numbers as floats, meaning &lt;code&gt;4 - example_one()&lt;/code&gt; might actually not be 0, but some very very small number, and the program won&amp;#8217;t crash. Ignore, please.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On Failure (Personal)</title>
      <link>http://www.morepaul.com/2011/05/on-failure-personal.html</link>
      <pubDate>Tue, 31 May 2011 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;To contrast to the &lt;a href='http://morepaul.com/2011/05/on-failure-computing.html'&gt;other part&lt;/a&gt; of this double-post, let&amp;#8217;s talk about something a little more familiar to the folk at home: &lt;strong&gt;failing at life.&lt;/strong&gt; This is prescient to me because of this:&lt;/p&gt;

&lt;p&gt;&lt;img src='http://www.morepaul.com/uploads/2011/05/degree.jpg' alt='Degree from Brown University' /&gt;&lt;/p&gt;

&lt;p&gt;That is my degree from Brown University, a combined BS in Computer Science/BA in Music. But didn&amp;#8217;t I graduate last year?&lt;/p&gt;

&lt;p&gt;Well, technically no. Despite passing &lt;a href='https://wiki.brown.edu/confluence/display/Spring07BN0102S01/NEUR1020+Principles+of+Neurobiology'&gt;higher-level neuroscience&lt;/a&gt; and &lt;a href='http://cs.brown.edu/courses/cs273/2009/'&gt;graduate-level programming languages&lt;/a&gt;, I failed &lt;a href='http://www.math.brown.edu/~banchoff/CalcPlacement.htm#CalcCourseDescriptions'&gt;high school calculus&lt;/a&gt;, which was a &lt;em&gt;prerequisite&lt;/em&gt; to studying computer science at Brown. Not a requirement, mind you: a prerequisite. Meaning that in theory, I needed to complete it before being &lt;em&gt;allowed&lt;/em&gt; to study computer science.&lt;/p&gt;

&lt;p&gt;(the resolution, if you don&amp;#8217;t know, is that I took the course over the summer, and passed. Because of this, I didn&amp;#8217;t graduate in the class of 2010, but technically in the class of 2011 as a &amp;#8220;non-enrolled student.&amp;#8221;)&lt;/p&gt;

&lt;p&gt;What surprised me most, and (what I think) is &lt;strong&gt;the most valuable lesson I got from Brown, is that failing &lt;em&gt;hard&lt;/em&gt; is one of the best things that can happen to you.&lt;/strong&gt; Only when you&amp;#8217;re kicked in the teeth and actually pushed to your limit do you know what it means to &lt;em&gt;truly&lt;/em&gt; confront your demons, your weaknesses, and test your &lt;em&gt;actual&lt;/em&gt; mettle.&lt;/p&gt;

&lt;p&gt;Put another way: are you proud of the fact that you took a shower this morning? Do you look back fondly on the last time you tied your shoes? No, because those presented no challenge; completing those tasks presented no new knowledge of the world, and no new knowledge of yourself. If you think back to anything you&amp;#8217;re proud of, it&amp;#8217;s almost always been a challenge.&lt;/p&gt;

&lt;p&gt;The fact that hard things are what make you proud isn&amp;#8217;t really anything new (nor was it before I failed). The key realization for me was understanding that &lt;em&gt;failing presents a much more heightened sense of accomplishment.&lt;/em&gt; To wit, I was incredibly proud of my high school production of &lt;em&gt;Arcadia&lt;/em&gt;; but no matter how hard or challenging that was, I&amp;#8217;ll always be more proud of the fact that I&amp;#8217;m programming professionally, if only because I was already good at acting/directing, and had never been bad at it. &lt;strong&gt;Leaving your comfort zone and being &lt;em&gt;truly&lt;/em&gt; uncomfortable is a growth experience too many bright people won&amp;#8217;t experience.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They have a saying in software testing: a successful test case is one that finds a bug in the program. This means that when you test software, you remove all formalities of being a kind or understanding person and put on a different hat, thinking to yourself &amp;#8220;what&amp;#8217;s the meanest, cruelest thing I can do to this software? How can I BREAK THE SHIT OUT OF THIS.&amp;#8221;&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s a good thing to do this in life as well. Don&amp;#8217;t be stupid, but for the good of you, take a risk every once in a while. You&amp;#8217;ll never be more proud.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On Failure (Computing)</title>
      <link>http://www.morepaul.com/2011/05/on-failure-computing.html</link>
      <pubDate>Tue, 31 May 2011 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;While I&amp;#8217;d also like to speak of &lt;a href='http://morepaul.com/2011/05/on-failure-personal.html'&gt;personal failures&lt;/a&gt; today, I&amp;#8217;ve been thinking a lot more about system failure.&lt;/p&gt;

&lt;p&gt;Alan Perlis famously wrote that you shouldn&amp;#8217;t bother to learn a programming language unless it changes the way you think about programming, and Erlang delivers in spades. Almost a year in* to &lt;a href='http://github.com/paul-meier/ScrabbleCheat'&gt;ScrabbleCheat&lt;/a&gt;, only now do I feel like I&amp;#8217;m understanding the value (and love) of Erlang. Namely, what it means to write &lt;em&gt;dependable software&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Another blog post said it best: &lt;em&gt;&lt;a href='http://www.javalimit.com/2011/05/erlang-is-not-a-concurrent-functional-programming-language.html'&gt;&amp;#8220;Erlang is about building reliable systems.&amp;#8221;&lt;/a&gt;&lt;/em&gt; Singling it out to concurrency, or distributed systems, or hot-code loading, or simply for it&amp;#8217;s functional nature is &lt;em&gt;missing the point.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s not immediately obvious: the most used and referred-to book for newcomers trying Erlang is Joe Armstrong&amp;#8217;s &lt;a href='http://pragprog.com/book/jaerlang/programming-erlang'&gt;Programming Erlang&lt;/a&gt;. This was my first book learning Erlang, and while it has a great tone and expresses many of the introductory concepts clearly, it sadly seems a bit out of date, and has it&amp;#8217;s priorities in the wrong order. If you only read the first 200-300 pages, you come out not knowing exactly how big a deal the OTP is.&lt;/p&gt;

&lt;p&gt;As an example, an entire chapter on using Makefiles to build your code is probably unnecessary: any developer worth their salt knows enough about Makefiles to compose shell commands, and that&amp;#8217;s essentially all he demonstrates.&lt;/p&gt;

&lt;p&gt;I don&amp;#8217;t mean to be too hard on it, but here are some tips/resources for those interested in exploring Erlang:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href='http://learnyousomeerlang.com/'&gt;Learn You Some Erlang&lt;/a&gt; is an excellent, excellent introduction. It starts slowly with the language, but always gives you context of how Erlang fits with other programming models, simple but direct writing, common pitfalls, and even &amp;#8220;Don&amp;#8217;t drink the Kool-Aid&amp;#8221; sections where he brings Erlang away from the hype and back down to Earth. And while the language sections are fine enough, the OTP chapters near the end have you understanding exactly why gen_server and gen_event are the way they are.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://www.manning.com/logan/'&gt;Erlang and the OTP in Action&lt;/a&gt; is another good choice, though un-free. They walk you through generating an Erlang release by hand with the default tools, which is good to do at least once or twice. They also have an excellent focus on the OTP, though with more emphasis on it&amp;#8217;s practical use in production applications rather than the important ideas behind it. If you feel like you want to buy and work through something to understand Erlang, I would recommend this.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;a href='http://alancastro.org/2010/05/01/erlang-application-management-with-rebar.html'&gt;Rebar&lt;/a&gt; as a build tool. It&amp;#8217;s lean, it usually does just what you want it to, and the source code is embarassingly clear and easy to read if it doesn&amp;#8217;t. The mailing list is friendly, and it&amp;#8217;s easily extensible. &lt;em&gt;Much&lt;/em&gt; better than raw Makefiles.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Get to learn the tools: &lt;a href='http://www.erlang.org/doc/apps/appmon/appmon_chapter.html'&gt;Appmon&lt;/a&gt;, &lt;a href='http://www.erlang.org/doc/man/dialyzer.html'&gt;Dialyzer&lt;/a&gt;, &lt;a href='http://www.erlang.org/doc/apps/common_test/basics_chapter.html'&gt;Common Test&lt;/a&gt;, and others. It&amp;#8217;ll boost your productivity, and give you a sense of confidence you won&amp;#8217;t get often.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You&amp;#8217;ll never really love the language until you design a proper application with OTP. While &lt;em&gt;every&lt;/em&gt; book/tutorial wants you to write a chat server, I rather enjoy optimization problems, like ScrabbleCheat.&lt;/p&gt;

&lt;p&gt;Back to failure: after programming in Erlang, I feel naked in other languages without supervisors and trap_exits. Lack of proper Actors means distribution (and therefore fault-tolerance) is a chore, never mind the concurrency benefit. Erlang has been a dream to play with, and I would recommend you do a hobby project or two in it ^_^&lt;/p&gt;

&lt;p&gt;*= Madly Brilliant and I joke about the fact that I&amp;#8217;ve been working on this for so long. Really, it&amp;#8217;s been about a year since the initial commit, where I implemented trie using &lt;a href='http://alancastro.org/2010/05/01/erlang-application-management-with-rebar.html'&gt;gb_trees&lt;/a&gt;, way before I had even heard of a &lt;a href='http://en.wikipedia.org/wiki/GADDAG'&gt;GADDAG&lt;/a&gt;. While I like to say &amp;#8220;a year in&amp;#8221; to make it sound like a major commitment, I&amp;#8217;ve sadly only gotten to work on this very rarely. Were I someone who hadn&amp;#8217;t just moved into a city and started my first job while maintaining an overseas-then-cohabitating relationship, I would call this 2-3 months of real work.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Homebrew comfort music</title>
      <link>http://www.morepaul.com/2011/04/homebrew.html</link>
      <pubDate>Fri, 01 Apr 2011 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Often when coding and confronted by a problem you don&amp;#8217;t know how to solve, it&amp;#8217;s nice to have music that&amp;#8217;s fun/good/comfortable enough to tune the world out, but not one that will overtake you. Here&amp;#8217;s a bunch of YouTube links that I bounce between.&lt;/p&gt;

&lt;p&gt;My awesome cousin Maddy pointed me to this video:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/AVbPnDf3TIw' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/AVbPnDf3TIw' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;I&amp;#8217;m not familiar with stop-motion used in music, but the tune is excellent (especially after playing hundreds of hours of Smash in the Zelda Palace level). This guy makes excellent videos:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/j51CIOcdFY0' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/j51CIOcdFY0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/DcZ7OSE6z7s' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/DcZ7OSE6z7s' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/nW6_QyOMOvQ' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/nW6_QyOMOvQ' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;My favorite Zelda song on Guatemala&amp;#8217;s national instrument!&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/FWhOZM5WyPA' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/FWhOZM5WyPA' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href='http://morepaul.com/2010/11/i-have-music-degree-too.html'&gt;Previously&lt;/a&gt;, &lt;a href='http://morepaul.com/2010/06/terrible-wonderful-music-videos.html'&gt;previously&lt;/a&gt;, &lt;a href='http://morepaul.com/2010/04/baal-bless-internet.html'&gt;previously&lt;/a&gt;, &lt;a href='http://morepaul.com/2010/10/moar-remixes.html'&gt;previously&lt;/a&gt;, &lt;a href='http://morepaul.com/2010/08/strong-words-bed-intruder.html'&gt;previously&lt;/a&gt;, &lt;a href='http://morepaul.com/2010/08/in-light-of-essays-that-were-last-two.html'&gt;previously&lt;/a&gt;, &lt;a href='http://morepaul.com/2010/05/funny-images.html'&gt;previously&lt;/a&gt;, &lt;a href='http://morepaul.com/2010/09/because-i-backtraced-it.html'&gt;previously&lt;/a&gt;, &lt;a href='http://morepaul.com/2010/04/another-remix.html'&gt;previously&lt;/a&gt;, &lt;a href='http://morepaul.com/2010/09/vimcakes-backin-up-song.html'&gt;previously&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m just old enough to a remember a time before having Internet. What a dark time &lt;em&gt;that&lt;/em&gt; was.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Kill Null</title>
      <link>http://www.morepaul.com/2011/03/kill-null.html</link>
      <pubDate>Thu, 24 Mar 2011 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;The other day, I &lt;a href='http://twitter.com/#!/SrPablo/status/50353105128259584'&gt;tweeted&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;null is the &lt;a href='http://lambda-the-ultimate.org/node/3186'&gt;billion-dollar&lt;/a&gt; design mistake. null breaks abstractions, composability. null eats live babies. null hammered my toe. null sucks.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And it had a lot to do with my frustrations in working with other people&amp;#8217;s code. This blog sometimes tries to explain technical concepts to non-technical people, so let me take a moment to explain to you what the hell &lt;code&gt;null&lt;/code&gt; is if you&amp;#8217;re not into programming, and why it&amp;#8217;s such a buzzkill.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;ll start with a metaphor: writing programs is very much like writing recipes, and the computer is your team of chefs. Recipes and code have a similar structure with two major parts: you have a section for the stuff you&amp;#8217;re going to use (in a program we call them &lt;strong&gt;declarations&lt;/strong&gt;, in recipes it&amp;#8217;s the &lt;em&gt;list of ingredients&lt;/em&gt;), and you have a set of instructions telling you what to do with said stuff (in both cooking and programming, these are your &lt;em&gt;&lt;strong&gt;instructions&lt;/strong&gt;&lt;/em&gt;). The basic gist is that ingredients + instructions = delicious, delicious, product.&lt;/p&gt;

&lt;p&gt;This isn&amp;#8217;t a perfect metaphor, but it serves. Now, like recipes, oftentimes for complicated products, you&amp;#8217;ll rely on other recipes; e.g. you&amp;#8217;ll need to make guacamole for your burrito, or a complicated cake batter to eventually make a wedding cake. As long as you follow ingredients + instructions, you will get delicious products, and you can build recipes on top of recipes to make grander, more delicious recipes without a problem. &lt;em&gt;This allows your recipes to be composable: you can build them up from smaller ones.&lt;/em&gt; This is critical in making anything of scale.&lt;/p&gt;
&lt;a href='http://jreuling-360yoga.blogspot.com/2010/02/facing-doggie-down.html'&gt;&lt;img src='http://www.morepaul.com/uploads/2011/03/fresh-guacamole.jpg' alt='Delicious, fresh guacamole' style='margin: 15px auto; width: 538px;' /&gt;&lt;/a&gt;
&lt;p&gt;There&amp;#8217;s a hidden step between ingredients and recipe, one that rarely gets written down, because it&amp;#8217;s the one that sucks the most: &lt;em&gt;preparing the ingredients&lt;/em&gt;. When your cooking time is advertised as 40 minutes but you have to mince garlic, have potatoes cooked and peeled and in cubes, that alone will add about an hour. Cooking shows look effortless, but when you try the same things at home you find it&amp;#8217;s not so easy when the ingredients don&amp;#8217;t come expertly prepared in beautiful glass bowls.&lt;/p&gt;

&lt;p&gt;So suppose you write a brilliant recipe, and you hand if off to the cooks to make. They see &amp;#8220;4 cups shallots in a blue bowl&amp;#8221; in the ingredients. Later, they have a bunch of whole shallots, and they see the instruction &amp;#8220;place the shallots from the &lt;em&gt;bule bowl&lt;/em&gt; into the pot&amp;#8230;&amp;#8221; What do they do?&lt;/p&gt;

&lt;p&gt;In programming, we often &amp;#8220;return null&amp;#8221; when something doesn&amp;#8217;t go as expected, &lt;strong&gt;which is the equivalent of the chef reading the directions deciding to put dogshit into the pot.&lt;/strong&gt;&lt;/p&gt;
&lt;img src='http://www.morepaul.com/uploads/2011/03/dogshit.jpg' alt='Dogshit' style='margin: 15px auto; width: 400px;' /&gt;
&lt;p&gt;Here&amp;#8217;s the rationale: if you bite into dogshit, you &lt;strong&gt;know&lt;/strong&gt; the recipe went wrong and will immediately stop eating. Another reason: you can&amp;#8217;t cover &lt;em&gt;every&lt;/em&gt; case, so if we put in some dogshit, we can still keep cooking! Why shut down the entire kitchen because one stupid chef was careless with one of their directions?&lt;/p&gt;

&lt;p&gt;Do you see the problem though? &lt;em&gt;&lt;strong&gt;There&amp;#8217;s dogshit in the goddamned food.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Just like the weird shallot example, we have it (very, very frequently) in programming: you can &lt;em&gt;declare&lt;/em&gt; that you&amp;#8217;ll use some data, and you can &lt;em&gt;write instructions&lt;/em&gt; using that data, but you might miss the step of saying what that data is, or by the time the data gets to that instruction it&amp;#8217;s no longer what the coder thought it would be, and the current instruction is impossible.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;null&lt;/code&gt; is the &lt;a href='http://knowyourmeme.com/memes/scumbag-steve'&gt;Scumbag Steve&lt;/a&gt; of programming.&lt;/p&gt;
&lt;img src='http://www.morepaul.com/uploads/2011/03/SCUMBAG-STEVE.jpg' alt='Scumbag Steve' style='margin: 15px auto; width: 600px;' /&gt;
&lt;p&gt;Like many of Computer Science&amp;#8217;s worst blights (e.g. goto), this was originally a feature! You can imagine the inventors thinking &amp;#8220;we&amp;#8217;ll let programmers be responsible people, no need to baby them!&amp;#8221;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BAD. THIS IS BAD THINKING.&lt;/strong&gt; While you shouldn&amp;#8217;t tie the hands of programmers, you also shouldn&amp;#8217;t give them something that never, ever provides a useful value, &lt;em&gt;like keeping dog shit in the kitchen.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&amp;#8220;But Paul!&amp;#8221;&lt;/em&gt; says the imperative programmer, &lt;em&gt;&amp;#8220;I frequently use null checks when I want to say that something went wrong, such as &lt;code&gt;fopen&lt;/code&gt; not getting a valid file handle!&lt;/em&gt; To which Paul says, &amp;#8220;couldn&amp;#8217;t you use an error code? Proper exceptions? This is 2011, kids!&amp;#8221;&lt;/p&gt;

&lt;p&gt;Sorry. Back to cooking.&lt;/p&gt;

&lt;p&gt;Given that most chefs of the 90&amp;#8217;s were making food in kitchens with dogshit flowing to and from them, what did we end up doing? We ended up writing recipes that looked like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Make guacamole.
*Check if it&amp;#39;s dogshit*
If it isn&amp;#39;t, make refried beans.
*Check if it&amp;#39;s dogshit*
After that, make some rice.
*Check if their dogshit.*&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The punchline is, if you didn&amp;#8217;t check, you&amp;#8217;d only know you had dogshit when you took a bite of food. And if you &lt;em&gt;did&lt;/em&gt; find dogshit, what would you do? Normally, &lt;em&gt;return more dogshit for someone else to cook with or figure out.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And the frequent checks for dogshit make for uninteresting and sad recipe writing.&lt;/p&gt;

&lt;p&gt;All that is minor annoyance, the real issue is this: &lt;strong&gt;you can&amp;#8217;t compose your recipes or programs if there is random dogshit flowing from all sides.&lt;/strong&gt; You need a certain level of trust in other code that it will either work as promised, or if it fails, you can prepare adequately without your first warning having to be biting into dogshit.&lt;/p&gt;

&lt;p&gt;The functional languages (unsurprisingly) are on top of this: by eschewing state and favoring evaluation of expressions rather than execution of statements, you rarely end up with uninialized data. In the rare cases you want to, even a solution as simple as the &lt;a href='http://www.haskell.org/ghc/docs/7.0.2/html/libraries/base-4.3.1.0/Data-Maybe.html'&gt;Maybe monad&lt;/a&gt; provide you null-like device that&amp;#8217;s statically typed, and any function that calls it knows that it needs to handle the &lt;code&gt;Nothing&lt;/code&gt; case.&lt;/p&gt;

&lt;p&gt;Blah. Rant over. Just code responsibly, comrades, as people break down and cry because of code. I mean, I haven&amp;#8217;t. But people have, I&amp;#8217;m sure.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>First, try to be something, anything, else.</title>
      <link>http://www.morepaul.com/2011/03/getting-good.html</link>
      <pubDate>Mon, 14 Mar 2011 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Here&amp;#8217;s an old, but &lt;a href='http://thoughtcatalog.com/2011/how-to-be-a-writer/?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+ThoughtCatalog+(Thought+Catalog)'&gt;good article, ostensibly about writing&lt;/a&gt;. The author is pretty funny, and I think most of what he writes applies just as well to any endeavor you choose to pursue with any interest.&lt;/p&gt;

&lt;p&gt;Having tried to find my theatre identity in college, only to become a computer scientist, the question of &amp;#8220;How do I get good at &amp;#8230;&amp;#8221; is something I thought about (and continue to think about) all the time. Most of what I think is already present in the article in one form or another, but with my words:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;It starts with the Lorrie Moore quote at the top: &lt;strong&gt;don&amp;#8217;t even do it unless you feel like you &lt;em&gt;have&lt;/em&gt; to. Otherwise, you won&amp;#8217;t want to when you will have to.&lt;/strong&gt; The Lorrie Moore quote he opens his article with is almost verbatim to the most prescient acting advice I&amp;#8217;ve ever received from a professional actor, when I asked if he had any advice for me going into the Real World: &amp;#8220;If you can be talked out of it, do so.&amp;#8221;&lt;/p&gt;

&lt;p&gt;The idea was crazy at the time, but it turns out I found a way to do it. And while it&amp;#8217;s hard to imagine for anybody who&amp;#8217;s only met me in the last 2-3 years, &lt;em&gt;leaving theatre was the hardest thing to do in my life&lt;/em&gt;. Science intimidated the hell out of me. It was something I didn&amp;#8217;t do, it was for &lt;em&gt;those people&lt;/em&gt;, and I&amp;#8217;d felt my whole life that I should only do what I was good at, and that was Art.&lt;/p&gt;

&lt;p&gt;So first things first: if you don&amp;#8217;t yearn to be amazing in your field, or do amazing things in it, I suggest taking a good look at what you&amp;#8217;re doing, and asking if you actually &lt;em&gt;want&lt;/em&gt; to.*&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Stop talking/thinking about it, &lt;em&gt;do&lt;/em&gt; it&lt;/strong&gt;. It&amp;#8217;s really easy to have big dreams and ideas, and we often talk about them with friends. The hardest part is doing it.&lt;/p&gt;

&lt;p&gt;I follow &lt;a href='http://seoblackhat.com/2007/01/29/do-it-fucking-now/'&gt;this advice&lt;/a&gt;, in that any time I&amp;#8217;m thinking of doing something but don&amp;#8217;t want to, I just say &amp;#8220;Just Fucking Do It Now.&amp;#8221; Works best of anything else I&amp;#8217;ve tried, which is to say, I still leave many tasks unfinished :-p.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;In almost the same vein: &lt;strong&gt;have a healthy mix of study with that practice. But you probably need the practice more.&lt;/strong&gt; Which is to say, don&amp;#8217;t just play 4000 games of Chess or Starcraft or hours at piano without some reflection and critical analysis of how those you look up to do it. You can practice blind, or practice with a guide.&lt;/p&gt;

&lt;p&gt;My only reluctance in this guideline is that I tend to put too many hours on the analysis/thinking/observing part, and not enough on the practice part. I&amp;#8217;ll watch a lot more Starcraft than I play, read more chess books than I play, read about programming languages more than I use them, etc. But I imagine many have the opposite problem.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Well, bloviation complete.&lt;/p&gt;

&lt;p&gt;*= Two little notes: a) not everybody wants to be the best/do amazing things at X/Y/Z, they just want to do it, happily, at their own pace. That&amp;#8217;s totally fine, in which case, carry on ^_^. And b) the bullet point makes it seem like you will know immediately when you love/care about something. It may take some time: I didn&amp;#8217;t know I was into computer science until I took the theory classes, about a year in.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>No Time Like the Present</title>
      <link>http://www.morepaul.com/2011/03/no-time-like-the-present.html</link>
      <pubDate>Mon, 07 Mar 2011 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;After playing &lt;a href='http://en.wikipedia.org/wiki/Skies_of_Arcadia'&gt;Skies of Arcadia&lt;/a&gt; (probably my favorite JRPG of all time, with the &lt;a href='http://skiesofarcadia.wikia.com/index.php?title=Vyse&amp;amp;image=Vyse-jpg'&gt;only main character I can ever cosplay as&lt;/a&gt;), I took a liking to the Age of Exploration: a time where new lands could be explored with a good ship and a lot of gumption.&lt;/p&gt;

&lt;p&gt;I started asking friends: &amp;#8220;If you could go back to another time in history, what would it be?&amp;#8221; The girl I liked said the 20&amp;#8217;s, she&amp;#8217;d like to be a flapper girl, wear hats, that kind of thing. My favorite response:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Yeah&amp;#8230; when you&amp;#8217;re black, going &lt;em&gt;back&lt;/em&gt; in time isn&amp;#8217;t something you fantasize about often.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While I pass for white, being in technology and listening to music assisted by technology&amp;#8230; I&amp;#8217;m going to have to agree. I love 2011, and I love that I&amp;#8217;ll love 2031 even more.&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/3bCQkZZNiIk' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/3bCQkZZNiIk' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>BLOG -- Y U NO PRETTIER?!?!?!?!?</title>
      <link>http://www.morepaul.com/2011/03/y-u-no.html</link>
      <pubDate>Sun, 06 Mar 2011 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;My favorite meme these days is the &lt;a href='http://knowyourmeme.com/memes/y-u-no-guy'&gt;Y U NO&lt;/a&gt; guy.&lt;/p&gt;

&lt;p&gt;Best explained by example:&lt;/p&gt;

&lt;p&gt;&lt;img src='http://www.morepaul.com/uploads/2011/03/Y_U_NO_beer.jpg' alt='Y U NO' /&gt;&lt;/p&gt;

&lt;p&gt;Basically, it&amp;#8217;s that man&amp;#8217;s epic face with a question why someone/something isn&amp;#8217;t someone else/something else.&lt;/p&gt;

&lt;p&gt;One I made up:&lt;/p&gt;

&lt;p&gt;&lt;img src='http://www.morepaul.com/uploads/2011/03/Y_U_NO_alanis.png' alt='Y U NO ALANIS' /&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>An Anecdote on Observational Indistinguishibility</title>
      <link>http://www.morepaul.com/2011/03/an-anecdote.html</link>
      <pubDate>Thu, 03 Mar 2011 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I once saw Tony Kushner speak (playwright, author of &lt;a href='http://en.wikipedia.org/wiki/Angels_in_America'&gt;Angels in America&lt;/a&gt; and &lt;a href='http://en.wikipedia.org/wiki/Caroline,_or_Change'&gt;Caroline, or Change&lt;/a&gt;, among other things). During his talk he mentioned a cute litle anecdote to illustrate how he felt about &lt;a href='http://en.wikipedia.org/wiki/Dramaturge'&gt;Dramaturges&lt;/a&gt; in the playwriting process.&lt;/p&gt;

&lt;p&gt;The story went something like this: a friend of his was given a playwriting grant, but a condition of the grant was to work with a professional dramaturge on each draft of the work. Said friend hated collaboration, and especially didn&amp;#8217;t like the dramaturge assigned to him. So before the first draft was due, he wrote his first draft. He also wrote his second draft. For his first deadline with the dramaturge, he handed him the first draft.&lt;/p&gt;

&lt;p&gt;And every subsequent due date, the dramaturge would be one draft behind the author. The dramaturge would send his notes for draft &lt;em&gt;n&lt;/em&gt;, the author would throw them away, work on draft &lt;em&gt;n + 2&lt;/em&gt;, and send the dramaturge the already-existing draft &lt;em&gt;n + 1&lt;/em&gt; at the next due date.&lt;/p&gt;

&lt;p&gt;As far as we know, the dramaturge never caught on.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Welcome to the new blog!</title>
      <link>http://www.morepaul.com/2011/01/welcome-to-new-blog.html</link>
      <pubDate>Sun, 30 Jan 2011 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Welcome to the new morepaul.com! After tons of reading, I decided to move my blog over to &lt;a href='Jekyll'&gt;Jekyll&lt;/a&gt;, for a variety of reasons:&lt;/p&gt;

&lt;p&gt;First, I like having all my content, readily available, in plain text on any of my local machines. This has tons of upsides, the most prominent being absolute control of all the elements of my blog. Notice the text justification is actually using the &lt;a href='Knuth'&gt;Knuth line-breaking algorithm&lt;/a&gt;, &lt;a href='Link'&gt;implemented&lt;/a&gt; in Javascript!&lt;/p&gt;

&lt;p&gt;This system also allows me to author pages using Vim, in &lt;a href='Markdown'&gt;Markdown&lt;/a&gt;; it allows me to post code snippets without going off-site to Gist; it allows me to structure my blog as a Git repository, which I find intuitive.&lt;/p&gt;

&lt;p&gt;Altogether, this should make for a better experience. Should I choose to make a &lt;code&gt;starcraft.morepaul.com&lt;/code&gt; or a &lt;code&gt;scrabblecheat.morepaul.com&lt;/code&gt;, this would let me do it.&lt;/p&gt;

&lt;p&gt;In the meantime, a few caveats: YouTube links of times prior didn&amp;#8217;t survive the transition. I&amp;#8217;m working on getting them back, but it&amp;#8217;ll be some time. The blog is also a bit ugly at the moment, though I&amp;#8217;ll be making little updates here and there to improve it. Note that if you&amp;#8217;d like to visit the previous iteration of this blog, it&amp;#8217;s still up at &lt;a href='http://littleschemer.blogspot.com'&gt;http://littleschemer.blogspot.com&lt;/a&gt;, and I have no intention of taking it down. New posts will show up here, naturally.&lt;/p&gt;

&lt;p&gt;In the meantime, let me know what you think ^_^&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>I'll be blogging again soon...</title>
      <link>http://www.morepaul.com/2011/01/ill-be-blogging-again-soon.html</link>
      <pubDate>Thu, 06 Jan 2011 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I just got back to work after a lovely, lovely break, and will get back to blogging Real Things soon. In the meantime, recording a milestone:&lt;/p&gt;

&lt;p&gt;I had what I like to think of my &amp;#8220;first&amp;#8221; &amp;#8220;release&amp;#8221; of &lt;a href='http://github.com/paul-meier/ScrabbleCheat'&gt;ScrabbleCheat&lt;/a&gt;. In a match of Scrabble without it, Madly Brilliant beat me by 97 points. I used it successfully for the first time (with her knowledge and permission) and beat her the following game by about 83 points. There&amp;#8217;s still tons of work to be done, but its core is there, certainly.&lt;/p&gt;

&lt;p&gt;I learned a ton from writing it, and hope to create a few animations/blog posts about it in the near future. This flowchart to writing &lt;a href='http://xkcd.com/844/'&gt;Good Code&lt;/a&gt;, by xkcd, is relevant, mostly in relation to the quality differential between the hacktacular client code and less hackey server code.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>How to tell someone their code sucks</title>
      <link>http://www.morepaul.com/2010/12/how-to-tell-someone-their-code-sucks.html</link>
      <pubDate>Mon, 13 Dec 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Some days I just wish I were &lt;a href='http://www.cygwin.com/ml/cygwin/2005-08/msg00520.html'&gt;David Korn&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;No, it&amp;#8217;s completely wrong-headed, insane and unreasonable. Your code is 100% bogus and should be taken out the back, lined up against a wall, and machine-gunned.&lt;/p&gt;

&lt;p&gt;Then the bleeding corpse should be hung, drawn and quartered.&lt;/p&gt;

&lt;p&gt;Then burnt.&lt;/p&gt;

&lt;p&gt;Then the smouldering rubble should be jumped up and down on.&lt;/p&gt;

&lt;p&gt;By a hippo.&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    
    <item>
      <title>Something nice about every language I've used</title>
      <link>http://www.morepaul.com/2010/12/something-nice-about-every-language-ive.html</link>
      <pubDate>Fri, 10 Dec 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Inspired by &lt;a href='http://blog.darevay.com/2010/12/say-something-nice-about-every-language-youve-used/'&gt;this post&lt;/a&gt; (and more great answers on the &lt;a href='http://www.reddit.com/r/programming/comments/eirzj/say_something_nice_about_every_language_youve_used/'&gt;reddit comment thread&lt;/a&gt;), here&amp;#8217;s one nice thing about each of the languages I can remember using in any meaningful capacity:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Java:&lt;/strong&gt; I learned to program in this. It led to the creation of the JVM, and while Java isn&amp;#8217;t my favorite language, the JVM is a pretty sexy piece of technology that enabled a number of other languages (Scala and Clojure most notable) to flourish.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C:&lt;/strong&gt; The closest thing imperative programming has to &amp;#8220;sparse beauty,&amp;#8221; a la Scheme. Shows you really don&amp;#8217;t need many bells and whistles to do a job, and do it well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C++:&lt;/strong&gt; Back when everyone was using C, it&amp;#8217;s kind of a technical miracle that Bjarne could create a proper superset on top of C with the features it has. Further, it&amp;#8217;s still blazing fast; without it we wouldn&amp;#8217;t have all the video games we love today ^_^.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PHP:&lt;/strong&gt; Incredibly easy to learn, and no-hassle to set up on a server. One of the matches that lit the web on fire.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Racket (and Scheme applies here too):&lt;/strong&gt; The language that never lets up. The most delicious learning curve I&amp;#8217;ve ever tasted. Like Wagner&amp;#8217;s music is jokingly said to be &amp;#8220;better than it sounds,&amp;#8221; Racket is more fun and fulfilling than it deserves to be.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Erlang:&lt;/strong&gt; Industry-proven functional programming with more concurrency love than 1000 suns. Also the top language for gaining hipster-programmer cred. When you drop this name, suddenly everyone looks at you like &amp;#8220;that guy&amp;#8221; (you can decide if this is what you want or not).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Haskell:&lt;/strong&gt; A wolf in sheeps&amp;#8217;s clothing, the most modern, practical, and supported language with features I think we&amp;#8217;ll see as necessary in the future. Another candidate for learning curve that keeps on giving.*&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SML:&lt;/strong&gt; A really sick module system for programming in the large. While not my favorite for &amp;#8220;programming in the small,&amp;#8221; an understanding of SML&amp;#8217;s module system makes you pity that it never really took off.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby:&lt;/strong&gt; One of the most beautifully designed, fully-realized languages I know. Shows you can make a language that is simple, with practical value for &lt;a href='http://knowyourmeme.com/memes/derp'&gt;Herp Derp&lt;/a&gt; programmers without sacrificing power and flexibility for the craftsmen as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Objective-C:&lt;/strong&gt; The &lt;em&gt;real&lt;/em&gt; &amp;#8220;C with objects.&amp;#8221; Message passing with named parameters (and the much more sensible #import rather than #include), this is one time where I&amp;#8217;m highly in favor of Mr. Jobs&amp;#8217; stubbornness.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prolog:&lt;/strong&gt; &lt;a href='http://www.youtube.com/watch?v=HY-03vYYAjA'&gt;10-second youtube video.&lt;/a&gt; I mean this in a good way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Max/MSP:&lt;/strong&gt; Probably the most fully-realized and pleasing graphical programming environment I know, as well as an example of a damn fine DSL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Javascript:&lt;/strong&gt; I don&amp;#8217;t have to worry about compiler errors! No seriously, &lt;a href='http://en.wikipedia.org/wiki/Prototype-based_programming'&gt;prototypical objects&lt;/a&gt; for the masses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flapjax:&lt;/strong&gt; Functional reactive programming! An excellent example of functional languages and concepts attacking problems from the language level. Very innovative workaround for the horrors of client-side programming of the time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actionscript:&lt;/strong&gt; Adobe makes it! Like Java, but better (Flash Platform &amp;gt; Swing/most Java GUI&amp;#8217;s).&lt;/p&gt;

&lt;p&gt;*= Small qualification on the learning curve lines: virtually any language takes years of work over dozens of programs to &amp;#8220;master.&amp;#8221; But many times mastering a language means compensating for its weaknesses, not discovering new strengths. That&amp;#8217;s what Haskell and Racket have given me more than most other languages.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>STOP IT WITH YOUR STATE</title>
      <link>http://www.morepaul.com/2010/12/stop-it-with-your-state.html</link>
      <pubDate>Tue, 07 Dec 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Alright forks, time for some smugness. I know, on this blog?!? But bear with me. I&amp;#8217;m just completely &lt;a href='http://en.wikipedia.org/wiki/Frak_(expletive)'&gt;frakking&lt;/a&gt; pissed at a number of bugs I&amp;#8217;ve been chasing down, at work and at home, and after looking for the more general problem, it&amp;#8217;s all about state. ALL OF IT.&lt;/p&gt;

&lt;p&gt;Okay, not all of it. Most of it has to do with poor abstractions at the programming language level. But the &lt;em&gt;primary&lt;/em&gt; one is state, and mostly, I think it&amp;#8217;s about time just done gone outgrown that shit.&lt;/p&gt;

&lt;p&gt;Java was such a rousing success in part because it was so completely idiot- proof. When you remove memory management and pointers from C++, and sandpaper a few of its edges (no header files or need to declare methods, for example), virtually everyone can program in it and not make &lt;em&gt;too&lt;/em&gt; big a mess. While I think Java is a completely neutered language (not to mention a &lt;a href='http://news.cnet.com/8301-30684_3-20013546-265.html'&gt;liability issue&lt;/a&gt;), I think it really didn&amp;#8217;t go far enough. No, forks, &lt;strong&gt;let&amp;#8217;s learn from our friends in the 1970&amp;#8217;s and 80&amp;#8217;s and just flat out remove mutable state already, since most programs don&amp;#8217;t need it and most programmers can&amp;#8217;t handle the responsibility of it. The same goes for pointers, but you already knew that.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Despite it being un-rantey, let&amp;#8217;s qualify this for a second: I&amp;#8217;m not saying &lt;em&gt;all&lt;/em&gt; programs should be written statelessly, or that &lt;em&gt;nobody&lt;/em&gt; should be using pointers. And Lord knows all programmers would ideally know more than just the basics on these topics. We&amp;#8217;ll always have a need for embedded systems, operating systems, very fast media processing, and scripts we&amp;#8217;ll use only once and not want to think too hard about.&lt;/p&gt;

&lt;p&gt;The problem comes with all the rest of the programs, that don&amp;#8217;t &lt;em&gt;need&lt;/em&gt; instruction-level efficiency; many are still written with mutable state as the default rather than a last resort. This is like solving your problems with beatings before you try reason. Most programmers use it willy nilly, thinking they&amp;#8217;re holding firecrackers when they&amp;#8217;re really holding grenades.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s ultimately the reason: &lt;strong&gt;in today&amp;#8217;s day and age, knowing what we know and writing the programs we want to write on the hardware we have, state is an abstraction that is too easily broken for the power it gives you, and it&amp;#8217;s about time we outgrew it.&lt;/strong&gt; Let&amp;#8217;s look at the popular programming paradigms from the abstractions they rested on, and you notice a trend:&lt;/p&gt;

&lt;p&gt;&lt;a href='http://3.bp.blogspot.com/_3ys1dwfzc2w/TP8zNIIdO0I/AAAAAAAAAHw/YV1Z7kIMiDw/s1600/DefectiveC%252B%252B.png'&gt;&lt;img src='http://3.bp.blogspot.com/_3ys1dwfzc2w/TP8zNIIdO0I/AAAAAAAAAHw/YV1Z7kIMiDw/s400/DefectiveC%252B%252B.png' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured programming:&lt;/strong&gt; this was at first met with resistance: why would you eliminate &lt;a href='http://xkcd.com/292/'&gt;goto&lt;/a&gt;s? The answer was the best noun-made-command I know: &lt;a href='http://www.satyamnayak.com/?p=117'&gt;goto hell&lt;/a&gt;. As programs got larger and larger, there came a point where there was just too much complexity associated with being able to arbitrarily jump to any lexical location in your code. Since this was often in languages with file inclusion, this meant &lt;em&gt;you could jump anywhere in any file you were including from anywhere else!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;What was the solution? Was it &lt;a href='http://www.urbandictionary.com/define.php?term=moar'&gt;moar&lt;/a&gt; gotos? IDE&amp;#8217;s to help with goto-related programming? No forks, &lt;strong&gt;they just cut that shit out&lt;/strong&gt; and started &lt;a href='http://en.wikipedia.org/wiki/Structured_programming'&gt;structured programming&lt;/a&gt;. This led to a great bloom in software, where we got all our delicious *nix dinosaurs we know and love even today.&lt;/p&gt;

&lt;p&gt;But what about GIANT programs, like Word? What made that possible? Because again, &lt;strong&gt;at a certain scale, this paradigm got unmanageable.&lt;/strong&gt; Namely, keeping track of all the data associated with a function got to be way too complex. Structs of structs of structs would lead to &lt;a href='http://www.c2.com/cgi/wiki?ThreeStarProgrammer'&gt;3-star programmers&lt;/a&gt; that made code a vile mess to work with and debug. It was only when we decided to encapsulate data with its related function in objects that we got to &lt;strong&gt;Object- Oriented programming.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And that led to its &lt;em&gt;own&lt;/em&gt; bloom of awesomeness. But really forks, have we solved software? Is it too unreasonable to think that maybe &lt;strong&gt;objects* rely too much on state to be as scalable as the programs we want to write these days?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;(Never mind the other, non-state objections to OOP, such as &lt;a href='http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html'&gt;modeling programs that &lt;em&gt;do&lt;/em&gt; things entirely with &lt;em&gt;nouns&lt;/em&gt;&lt;/a&gt;, or the &lt;a href='http://norvig.com/design-patterns/'&gt;avoidable lame hoop- jumping&lt;/a&gt; called Design Patterns that objects make us use).&lt;/p&gt;

&lt;p&gt;It sounds extreme, but you don&amp;#8217;t know the shackles you&amp;#8217;re programming with until you break free of them. &lt;strong&gt;Once the outputs of a function depend entirely on its inputs, it &lt;em&gt;actually&lt;/em&gt; becomes reusable.&lt;/strong&gt; You only have to test the outputs for every set of inputs, not the outputs for every set of inputs at every possible state the whole rest of your program can be in!&lt;/p&gt;

&lt;p&gt;Further, once you eliminate the null value or null pointer, a function call &lt;em&gt;must&lt;/em&gt; return &amp;#8220;Whatever I promised,&amp;#8221; not &amp;#8220;Whatever I promised or NULL lol go debug that.&amp;#8221;&lt;/p&gt;

&lt;p&gt;And the sooner we do this, the sooner we don&amp;#8217;t have to sit at our debuggers stepping through reentrant code looking at register values for the exact moment the memory&amp;#8217;s &lt;a href='http://www.homestarrunner.com/sbemail94.html'&gt;head a splode&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Most of all, I&amp;#8217;d have to find another way to be inflammatory, rantey, and use too much formatting markup.&lt;/p&gt;

&lt;p&gt;* = Note that my beef isn&amp;#8217;t entirely with objects, per se. there are object- oriented languages that don&amp;#8217;t rely on state. &lt;a href='http://www.scala-lang.org/'&gt;Scala&lt;/a&gt; is the most popular that encourages functional programming, and &lt;a href='http://reia-lang.org/'&gt;Reia&lt;/a&gt; has immutable objects.&lt;/p&gt;

&lt;p&gt;(for those curious, I&amp;#8217;m mostly up to proverbial here with my last bug on a major &lt;a href='http://github.com/paul-meier/ScrabbleCheat/'&gt;ScrabbleCheat&lt;/a&gt; feature. I veered away from Erlang to write the UI in Ruby with an &lt;a href='http://www.youtube.com/watch?v=2FH4-Ik27lU'&gt;ncurses&lt;/a&gt; &lt;a href='https://github.com/eclubb/ncurses-ruby'&gt;wrapper&lt;/a&gt;, and now that I&amp;#8217;ve dabbled in a stateful solution I&amp;#8217;m fighting memory corruption in a language without explicit memory management. Bleh.&lt;/p&gt;

&lt;p&gt;Meanwhile, I&amp;#8217;m hating on C++ because a) I use it at work, b) in the playtimes I&amp;#8217;ve used it, I&amp;#8217;ve only ever regretted it, and c) it&amp;#8217;s C++, what kind of language snob would I be if I treated it fairly?)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Another lazy video post</title>
      <link>http://www.morepaul.com/2010/11/another-lazy-video-post.html</link>
      <pubDate>Sun, 21 Nov 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;The weekends are when I get lazy. I got promoted to Diamond League in Starcraft. I&amp;#8217;m still plugging away on &lt;a href='http://www.github.com/paul-meier/ScrabbleCheat'&gt;ScrabbleCheat&lt;/a&gt; (see the branch &amp;#8216;feature-curses-ui&amp;#8217;). Did me some laundry.&lt;/p&gt;

&lt;p&gt;While folding/placing laundry and cleaning up my room, it&amp;#8217;s good to have some videos or music playing. If you have an hour to burn, there&amp;#8217;s a great 1 hour interview in 4 15-minute segments with Christopher Hitchens:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/S0dldtkxzVU' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/S0dldtkxzVU' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;If you only have 7 minutes, in honor of our departing Governer:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/5aLR-8c11ms' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/5aLR-8c11ms' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Every morning of my undergrad</title>
      <link>http://www.morepaul.com/2010/11/every-morning-of-my-undergrad.html</link>
      <pubDate>Thu, 18 Nov 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I had a Serious post all lined up, made of words and things, but found an old video I forgot the name of, and decided to post it instead.&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/x6rsp6phb5U' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/x6rsp6phb5U' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;It&amp;#8217;s been a long, exciting week at work, kids. I&amp;#8217;ll post with words and write some long delayed emails when I have a wee bit more energy ^_^&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>The Road to Lisp Survey</title>
      <link>http://www.morepaul.com/2010/11/road-to-lisp-survey.html</link>
      <pubDate>Sat, 13 Nov 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I, Paul Meier, do solemnly offer these responses to &lt;a href='http://www.cliki.net/The'&gt;the Road to Lisp Survey&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When did you first try Lisp (meaning here and throughout the survey &amp;#8220;any member of the Lisp family&amp;#8221;) seriously, and which Lisp family member was it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I took Lisp seriously after my first exposure to it, in &lt;a href='http://cs.brown.edu/people/sk/'&gt;Shriram Krishnamurthi&lt;/a&gt;&amp;#8217;s &lt;a href='http://cs.brown.edu/courses/cs173/'&gt;programming languages course&lt;/a&gt;, based on his &lt;a href='http://cs.brown.edu/people/sk/Publications/Books/ProgLangs/2007-04-26/'&gt;excellent book, PLAI&lt;/a&gt; (download it! it&amp;#8217;s free!). We mostly used Scheme for the course (the implementation now called &lt;a href='http://racket-lang.org/'&gt;Racket&lt;/a&gt;), and while I could call the programming from that class my first exposure, I really only explored it during self-study after the course.&lt;/p&gt;

&lt;p&gt;In the Preface to his book, Shriram mentioned &lt;em&gt;&lt;a href='http://www.ccs.neu.edu/home/matthias/BTLS/'&gt;The Little Schemer&lt;/a&gt;&lt;/em&gt; as a good introduction to thinking in Scheme. In the Acknowledgments, he said &amp;#8220;Please read those magnificent books even if you never read this one&amp;#8221; of two books, one of them being &lt;em&gt;&lt;a href='http://mitpress.mit.edu/sicp/'&gt;Structure and Interpretation of Computer Programs.&lt;/a&gt;&lt;/em&gt; I picked them both up that Winter, and I was hooked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What led you to try Lisp?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The answer is really in the next question, but I&amp;#8217;ll also mention that this was not just my first exposure to Lisp, but functional programming as a whole. While I enjoyed programming to a point, what really interested me in Computer Science was the strong theoretical results we&amp;#8217;d achieved: the fact that we could prove undecidability kept me awake for weeks.&lt;/p&gt;

&lt;p&gt;So part of my migration to Lisp wasn&amp;#8217;t just to homoiconic syntax and dynamic type systems: it was also the wonders of functional programming I would find prominently in Scheme.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you were trying Lisp out of unhappiness with another language, what was that other language and what did you not like about it, or what were you hoping to find different in Lisp?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I took the languages course at the same time I took &lt;a href='http://cs.brown.edu/courses/cs123'&gt;our excellent graphics course,&lt;/a&gt; where we used C++. I found I spent much, much longer debugging the C++ programs, for a much less interesting class of bugs. You&amp;#8217;d pull your hair out, looking at memory addresses and pointer values only to find you did your pointer arithmetic wrong (we were investigating a two-dimensional matrix stored as a linear array), or that a state change occurring in an edge case was leaving your program in an inconsistent state. It was frustrating, to say the least.&lt;/p&gt;

&lt;p&gt;In Scheme, I was only fixing logical bugs. I spent more time &lt;a href='http://blogs.law.harvard.edu/philg/2005/03/07/how-long-is-the-average-internet-discussion-forum-posting/'&gt;thinking than typing&lt;/a&gt;. My programs were shorter and elegant. It&amp;#8217;s as if, by framing the problem differently, hundreds of edge cases and corner cases &lt;em&gt;simply ceased to exist&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;And there&amp;#8217;s something to that. Removing state means putting a lot more effort up front, but ultimately makes your programs worlds easier to write and maintain after you&amp;#8217;ve invested. Not to mention spending your brain cycles &lt;em&gt;modeling&lt;/em&gt; is worlds more fun spending them &lt;em&gt;debugging&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Of course, I didn&amp;#8217;t know that back then; I moved because I just had the feeling they were doing something right, and I could learn something valuable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How far have you gotten in your study of Lisp? (I know, that is hard to measure)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is very hard to say. In many ways, I&amp;#8217;m still a novice, since most of my Lisping doesn&amp;#8217;t take full advantage of macros, Lisp&amp;#8217;s crown jewel. I&amp;#8217;m still much more comfortable in Scheme than CL, Clojure, or Arc; I&amp;#8217;d call myself a competent Lisp programmer having written a few small programs and baby scripts, with a toe in advanced and a longing to go expert.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you think of Lisp so far?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I think it&amp;#8217;s still a very advanced, progressive way to approach programming, at least with smaller engineering teams. I&amp;#8217;m completely unsurprised it&amp;#8217;s not used in industry as much; it&amp;#8217;s a large investment, and languages rely heavily on community. Incidentally, I feel the only real rival to Lisp in caliber would be Haskell, who&amp;#8217;s unofficial motto is &amp;#8220;avoid success at all costs.&amp;#8221; ^_^&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Also, any of you see &lt;a href='http://atomo-lang.org/'&gt;atomo&lt;/a&gt;? It looks pretty hip, if ambitious&amp;#8230;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>I have a music degree, too</title>
      <link>http://www.morepaul.com/2010/11/i-have-music-degree-too.html</link>
      <pubDate>Sat, 13 Nov 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Little known fact, but true. While I took traditional music theory and piano, I kind of endured that; the degree had a focus on Electronic Music and digital media production. It was affiliated with the &lt;a href='http://brown.edu/Departments/Music/sites/meme/'&gt;Multimedia and Electronic Music Experiments (MEME)&lt;/a&gt; program at Brown.&lt;/p&gt;

&lt;p&gt;And sometimes I miss creating things with the skills I gathered in it. This kind of things is pretty awesome:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/NQBjNnfWMPI' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/NQBjNnfWMPI' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;And while I linked it a long time ago already, it&amp;#8217;s always nice to have a refresher:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='allowfullscreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id=9625370&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' /&gt;&lt;embed src='http://vimeo.com/moogaloop.swf?clip_id=9625370&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Another:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='allowfullscreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id=2099027&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' /&gt;&lt;embed src='http://vimeo.com/moogaloop.swf?clip_id=2099027&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;And some vintage Norman McLaren for you:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/E3-vsKwQ0Cg' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/E3-vsKwQ0Cg' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>THE LAND OF LISP</title>
      <link>http://www.morepaul.com/2010/11/land-of-lisp.html</link>
      <pubDate>Sun, 07 Nov 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;It&amp;#8217;s been a while since I&amp;#8217;ve been able to run through a code book, with life throwing me so many welcome curveballs since the summer. But I&amp;#8217;m finally taking the time to work through a book like old times; this go-round is with Conrad Barski&amp;#8217;s &lt;a href='http://landoflisp.com/'&gt;&lt;em&gt;Land of Lisp&lt;/em&gt;&lt;/a&gt;. I probably wouldn&amp;#8217;t have gone for it, but the music video he made was just too cute:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/HM1Zb3xmvMc' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/HM1Zb3xmvMc' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;The book is peppered with cute cartoons and a whimsy feel that is endearing, not overbearing. I highly recommend it, if only for the comics (though working through the examples is fun, the games you make really highlight Lisp&amp;#8217;s strengths).&lt;/p&gt;

&lt;p&gt;Some may recall that &lt;a href='http://www.morepaul.com/2010/04/common-lisp.html'&gt;I&amp;#8217;ve dabbled in CL before&lt;/a&gt;; sadly that affair was over before it started (curveballs!), but my next project after ScrabbleCheat will likely be in either Haskell or Common Lisp ^_^&lt;/p&gt;

&lt;p&gt;And how goes &lt;a href='http://www.github.com/paul-meier/ScrabbleCheat'&gt;ScrabbleCheat&lt;/a&gt;? Quite well, actually! The technologically adventurous can download and play with it now. What I&amp;#8217;m working on now is a simple UI in &lt;a href='http://en.wikipedia.org/wiki/Ncurses'&gt;ncurses&lt;/a&gt;, which will probably take another week or two. But as soon as that&amp;#8217;s up, the program should not only be functional (which it mostly is now), but usable!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>CS Pranks:  Push it!</title>
      <link>http://www.morepaul.com/2010/10/cs-pranks-push-it.html</link>
      <pubDate>Wed, 27 Oct 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;While working as a &lt;a href='http://www.cs.brown.edu/ugrad/jobs/consult/'&gt;Sunlab consultant&lt;/a&gt; at Brown, my buddy and I would frequently find ways to &amp;#8216;spice up&amp;#8217; the workspace. If we ever found the other person&amp;#8217;s workstation empty without being properly xlocked, we&amp;#8217;d usually pull pranks on each other: &amp;#8216;alias ls=&amp;#8217;eject; ls&amp;#8217; being a popular harmless one, or writing zwrite &lt;code&gt;&amp;amp;lt;&lt;/code&gt;username&lt;code&gt;&amp;amp;gt;&lt;/code&gt; -m &amp;#8220;PAUL LOGGED OUT&amp;#8221; on my .logout file, executed anytime I logged out.&lt;/p&gt;

&lt;p&gt;The sad thing about these pranks was that occasionally someone else would do a more malicious one, and we&amp;#8217;d get blamed :( But there&amp;#8217;s still so much fun to be had from finding ways to shake things up.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://twitter.com/codinghorror/status/21559239552'&gt;This tweet&lt;/a&gt; by &lt;a href='http://www.codinghorror.com'&gt;Coding Horror&amp;#8217;s&lt;/a&gt; Jeff Atwood gave me the idea for the next one:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;by law, every fifth push to DVCS must be followed by this video link http://www.youtube.com/watch?v=vCadcBR95oU&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Naturally, the youtube link plays this:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/vCadcBR95oU' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/vCadcBR95oU' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Gotta&lt;/em&gt; love the 80&amp;#8217;s.&lt;/p&gt;

&lt;p&gt;Were I still there, I would love to institute this. But for now, I&amp;#8217;m setting it up on my machine, to keep things from getting too boring. To do this yourself you&amp;#8217;ll need the following:&lt;/p&gt;

&lt;p&gt;* &lt;a href='http://www.mpg123.de/'&gt;mpg123&lt;/a&gt;, a simple command-line mp3 player. Easily installable.&lt;/p&gt;

&lt;p&gt;* An mp3 of Salt-n-Pepa&amp;#8217;s &lt;em&gt;Push It&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Given all this, the rest is easy as pie. There are surely more elegant solutions than what I did:&lt;/p&gt;

&lt;p&gt;* Store the number of pushes in an external file echo &amp;#8220;1&amp;#8221; &amp;gt; how_many_pushes.txt&lt;/p&gt;

&lt;p&gt;* Write a script to keep track of and increment that number as time goes on. Here&amp;#8217;s my Ruby script:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='rb'&gt;    &lt;span class='c1'&gt;#!/usr/bin/ruby&lt;/span&gt;

    &lt;span class='no'&gt;FILENAME&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;this_many_pushes.txt&amp;quot;&lt;/span&gt;
    &lt;span class='no'&gt;PUSH_IT_DIR&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;/Users/pmeier/Desktop/projects/push_it&amp;quot;&lt;/span&gt;

    &lt;span class='n'&gt;command&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;git push &amp;quot;&lt;/span&gt;
    &lt;span class='no'&gt;ARGV&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;each&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt; &lt;span class='o'&gt;|&lt;/span&gt;&lt;span class='n'&gt;x&lt;/span&gt;&lt;span class='o'&gt;|&lt;/span&gt; &lt;span class='n'&gt;command&lt;/span&gt; &lt;span class='o'&gt;+=&lt;/span&gt; &lt;span class='n'&gt;x&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot; &amp;quot;&lt;/span&gt; &lt;span class='p'&gt;}&lt;/span&gt;
    &lt;span class='nb'&gt;puts&lt;/span&gt; &lt;span class='n'&gt;command&lt;/span&gt;
    &lt;span class='n'&gt;success&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nb'&gt;system&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;command&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;

    &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='ow'&gt;not&lt;/span&gt; &lt;span class='n'&gt;success&lt;/span&gt; &lt;span class='k'&gt;then&lt;/span&gt; &lt;span class='nb'&gt;puts&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;Push failed!&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt; &lt;span class='no'&gt;Process&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;exit&lt;/span&gt; &lt;span class='k'&gt;end&lt;/span&gt;

    &lt;span class='n'&gt;num_pushes&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='no'&gt;File&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;read&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='no'&gt;FILENAME&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;strip&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;to_i&lt;/span&gt;

    &lt;span class='nb'&gt;puts&lt;/span&gt; &lt;span class='n'&gt;num_pushes&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;to_s&lt;/span&gt;

    &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='n'&gt;num_pushes&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt;
    &lt;span class='nb'&gt;puts&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;Push it!&amp;quot;&lt;/span&gt;
    &lt;span class='nb'&gt;system&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;mpg123 &lt;/span&gt;&lt;span class='si'&gt;#{&lt;/span&gt;&lt;span class='no'&gt;PUSH_IT_DIR&lt;/span&gt;&lt;span class='si'&gt;}&lt;/span&gt;&lt;span class='s2'&gt;/push_it.mp3 &amp;amp;&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
    &lt;span class='nb'&gt;system&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;echo &amp;#39;5&amp;#39; &amp;gt; &lt;/span&gt;&lt;span class='si'&gt;#{&lt;/span&gt;&lt;span class='no'&gt;FILENAME&lt;/span&gt;&lt;span class='si'&gt;}&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
    &lt;span class='k'&gt;else&lt;/span&gt;
    &lt;span class='nb'&gt;system&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;echo &amp;#39;&lt;/span&gt;&lt;span class='si'&gt;#{&lt;/span&gt;&lt;span class='n'&gt;num_pushes&lt;/span&gt; &lt;span class='o'&gt;-&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='si'&gt;}&lt;/span&gt;&lt;span class='s2'&gt;&amp;#39; &amp;gt; &lt;/span&gt;&lt;span class='si'&gt;#{&lt;/span&gt;&lt;span class='no'&gt;FILENAME&lt;/span&gt;&lt;span class='si'&gt;}&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
    &lt;span class='k'&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;* Execute git config &amp;#8211;global alias.psh !push_wrapper.rb.&lt;/p&gt;

&lt;p&gt;Now just use git psh instead of git push, and have a surprise every now and then ^_^&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Fear and Loathing</title>
      <link>http://www.morepaul.com/2010/10/fear-and-loathing.html</link>
      <pubDate>Sun, 24 Oct 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;&lt;a href='http://www.salon.com/news/opinion/glenn_greenwald/index.html'&gt;Glenn Greenwald&lt;/a&gt; has &lt;a href='http://www.salon.com/news/opinion/glenn_greenwald/2010/10/22/muslims/index.html'&gt;another winner&lt;/a&gt;, this time over &lt;a href='http://www.npr.org/templates/story/story.php?storyId=130712737'&gt;the firing of Juan Williams&lt;/a&gt; after his &amp;#8221;I&amp;#8217;s afraid of Muslins!&amp;#8221; kerfuffle. His article is great by describing the general trend of fear and loathing in America:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To start with, as a general proposition, it&amp;#8217;s vital that the American citizenry always be frightened of some external (and relatedly internal) threat. Nothing is easier, or more common, or more valuable, than inducing people to believe that one discrete minority group is filled with unique Evil, poses some serious menace to their Safety, and must be stopped at all costs. The more foreign-seeming that group is, the easier it is to sustain the propaganda campaign of fear. [&amp;#8230;]&lt;/p&gt;

&lt;p&gt;&amp;#8220;The Muslims&amp;#8221; are currently the premier, featured threat which serves that purpose, following in the footsteps of the American-Japanese, the Communists, the Welfare-Stealing Racial Minorities, the Gays, and the Illegal Immigrants. Many of those same groups still serve this purpose, but their scariness loses its luster after decades of exploitation and periodically must be replaced by new ones.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The terrorists have won, guys. They flew a few planes, destroyed some buildings, killed a couple thousand people. It was our idiotic &lt;em&gt;scared&lt;/em&gt; reactions which drove us to record deficits, torture, fewer civil liberties, a surveillance state, and participation in the two longest foreign wars in US history, which killed more of our people than the planes did (not to mention Iraqis/Afghans). And we&amp;#8217;re still scared.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s simple advice, sadly still relevant: &lt;a href='http://www.schneier.com/essay-124.html'&gt;Refuse to be terrorized.&lt;/a&gt; Stop playing into their hands and for Baal&amp;#8217;s sake, grow up.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;On the theme of cultural Paul-is-grouchy, Dan Savage has &lt;a href='http://slog.thestranger.com/slog/archives/2010/10/01/sl-letter-of-the-day-sorry-nothing-fun'&gt;an exchange&lt;/a&gt;, followed by &lt;a href='http://slog.thestranger.com/slog/archives/2010/10/13/the-silence-of-the-lambs'&gt;another&lt;/a&gt;, from Good Christians who wish he&amp;#8217;d just stop being so mean! He (rightly) tells them to shut up and wake up:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I&amp;#8217;m sorry your feelings were hurt by my comments.&lt;/p&gt;

&lt;p&gt;No, wait. I&amp;#8217;m not. Gay kids are dying. So let&amp;#8217;s try to keep things in perspective: fuck your feelings.&lt;/p&gt;

&lt;p&gt;A question: do you support atheist marriage? Interfaith marriage? Divorce and remarriage? All legal, of course, and there&amp;#8217;s no Christian movement to deny marriage rights to atheists or people marrying outside their respective faiths or to people divorcing and remarrying. Why the hell not? [&amp;#8230;]&lt;/p&gt;

&lt;p&gt;The children of people who see gay people as sinful or damaged or disordered and unworthy of full civil equality—even if those people strive to express their bigotry in the politest possible way (at least when they happen to be addressing a gay person)—learn to see gay people as sinful, damaged, disordered, and unworthy. And while there may not be any gay adults or couples where you live, or at your church, or at your workplace, I promise you that there are gay and lesbian children in your schools. You may only attack gays and lesbians at the ballot box, nice and impersonally, but your children have the option of attacking actual real gays and lesbians, in person, in real time.&lt;/p&gt;

&lt;p&gt;Real gay and lesbian children. Not political abstractions, not &amp;#8220;sinners.&amp;#8221; Real gay and lesbian children.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It&amp;#8217;s required reading. As someone who also &lt;a href='http://www.morepaul.com/2010/04/i-read-news.html'&gt;doesn&amp;#8217;t keep silent&lt;/a&gt; on &lt;a href='http://www.newvision.co.ug/D/8/12/663061'&gt;the horrors of irrational thinking&lt;/a&gt; (usually religious or religiously motivated), I too tire of the &amp;#8220;stop being so mean, Paul!&amp;#8221; line. Really guys, all I do is report the news. If you aren&amp;#8217;t completely outraged, you aren&amp;#8217;t paying attention. And any offended religious folk should probably be pointing their ire elsewhere, since I&amp;#8217;m normally reacting to egregious events. The &amp;#8220;don&amp;#8217;t be offended at &lt;em&gt;me&lt;/em&gt;&amp;#8221; angle was the genius of this song:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/fHRDfut2Vx0' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/fHRDfut2Vx0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;While not religious, also relevant:&lt;/p&gt;

&lt;p&gt;&lt;a href='http://xkcd.com/808/'&gt;&lt;img src='http://3.bp.blogspot.com/_3ys1dwfzc2w/TMUHeAc7-dI/AAAAAAAAAHo/U7p4Y_bIJiA/s400/the_economic_argument.png' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I know we all want to be friends and not have anybody&amp;#8217;s feelings hurt, but kids, &lt;strong&gt;some shit is just stupid.&lt;/strong&gt; And I&amp;#8217;ll call it that.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Back from Istanbul!</title>
      <link>http://www.morepaul.com/2010/10/back-from-istanbul.html</link>
      <pubDate>Sun, 24 Oct 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I&amp;#8217;m a week back from my marvelous trip, photos over at &lt;a href='http://istanbabble.blogspot.com'&gt;Madly Brilliant&amp;#8217;s blog&lt;/a&gt; and &lt;a href='http://www.facebook.com/#!/album.php?aid=2062768&amp;amp;id=1135710488'&gt;a Facebook album&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I can only say it was a magnificent, magnificent week. I might even say &lt;a href='http://www.youtube.com/watch?v=X1granQNSqg#t=00m52s'&gt;transplendent&lt;/a&gt;! Istanbul is one of the most beautiful cities I&amp;#8217;ve ever been to, and Turkish people were (as many people are) kind, warm, and happy people.&lt;/p&gt;

&lt;p&gt;Sometimes I imagine/fantasize doing what my mother did, which is to go to another country where you don&amp;#8217;t speak the language and really make a life for yourself there. If I had to do it anywhere, Istanbul would be a great candidate. While you have the beautiful old city, you also have a thriving, modern hub rich with activity and the city life that I love so much.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://3.bp.blogspot.com/_3ys1dwfzc2w/TMT-JFCAlxI/AAAAAAAAAHY/Jsj-AmclrYg/s1600/69854_1452166540912_1135710488_31205117_5430153_n.jpg'&gt;&lt;img src='http://3.bp.blogspot.com/_3ys1dwfzc2w/TMT-JFCAlxI/AAAAAAAAAHY/Jsj-AmclrYg/s400/69854_1452166540912_1135710488_31205117_5430153_n.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So why aren&amp;#8217;t I thinking of ways to make my life there now? There are a few sore points with my Turkish experience:&lt;/p&gt;

&lt;p&gt;* It&amp;#8217;s &lt;a href='http://en.wikipedia.org/wiki/Mustafa_Kemal_Atatürk#Turkey'&gt;illegal to criticize Ataturk&lt;/a&gt; in Turkey. Not that I know enough about him to criticize him at all (hell, it&amp;#8217;s because of him Turkey is the success story that it is, in terms of secularism) but I still find this law egregious. We all know I&amp;#8217;m &lt;a href='http://www.morepaul.com/2010/07/on-freedom-of-speech.html'&gt;pretty&lt;/a&gt; &lt;a href='http://www.morepaul.com/2010/09/updates-to-previous-posts.html'&gt;anal&lt;/a&gt; about freedom of speech though.&lt;/p&gt;

&lt;p&gt;* &lt;a href='http://thelede.blogs.nytimes.com/2007/03/07/youtube-banned-in-turkey-after-insults-to-ataturk/'&gt;Youtube is banned throughout the country&lt;/a&gt; after trolls made fun of Ataturk. Really? Yeah, that&amp;#8217;ll show&amp;#8217;em! The funny thing is there are crappy proxy sites people use, and the prime minister himself said something along the lines of &amp;#8220;the supreme court made a dick decision, so use the sites. I know it&amp;#8217;s illegal, but you should use them anyways.&amp;#8221;&lt;/p&gt;

&lt;p&gt;* &lt;a href='http://www.businessandleadership.com/technology/item/25269-turkey-russia-most/'&gt;Turkey is the most dangerous place to surf the internet.&lt;/a&gt; It hardly affects me because I&amp;#8217;m usually on Linux/Mac, and am a security buff. But still, hardly a mark you want. Madly Brilliant found 2 viruses on her USB drive after lending it to a Turkish Roommate. That&amp;#8217;s what happens when you stick your stick in the wrong slot!&lt;/p&gt;

&lt;p&gt;* Finally, its turn back to religion. While Istanbul and Izmir remain pretty secular, populated almost exclusively by MINOs (Muslims in Name Only), this is true of almost any country: the big cities are pretty secular. What also matters is the leadership, and the general populace, both of which are crossing into more religious territory. I avoid that when I can.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://2.bp.blogspot.com/_3ys1dwfzc2w/TMT-JR3-RII/AAAAAAAAAHg/G8PW8ELOOYY/s1600/73308_1452165700891_1135710488_31205109_6181048_n.jpg'&gt;&lt;img src='http://2.bp.blogspot.com/_3ys1dwfzc2w/TMT-JR3-RII/AAAAAAAAAHg/G8PW8ELOOYY/s400/73308_1452165700891_1135710488_31205109_6181048_n.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Despite these little thorns (and most countries, ours included, have more and more severe ones), I&amp;#8217;m pretty much in love with that country ^_^&lt;/p&gt;

&lt;p&gt;The whole experience also made me think of my new adulthood. I&amp;#8217;m working, and loving it, but occasionally thinking to myself &amp;#8220;So when&amp;#8217;s Winter Break?&amp;#8221; Oh yeah, &lt;em&gt;there isn&amp;#8217;t one. You get three weeks a year.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If my three weeks get to be like that one was, it&amp;#8217;s a bargain for twice the price ^_^&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Off to Istanbul!</title>
      <link>http://www.morepaul.com/2010/10/off-to-istanbul.html</link>
      <pubDate>Fri, 08 Oct 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I&amp;#8217;m off next week to visit Madly Brilliant in her current home of Istanbul, Turkey.&lt;br /&gt;She&amp;#8217;s abroad for the first time, spending 5-ish months as a lab tech, so my visit bisects hers. Mad props to Adobe for letting me do this ^_^&lt;/p&gt;

&lt;p&gt;(by the way, we just &lt;a href='http://blogs.adobe.com/air/2010/10/adobe-air-apps-available-on-android-market.html'&gt;released the AIR Runtime for Android&lt;/a&gt;! Download it onto your phone now, and enjoy mobile AIR apps ^_^)&lt;/p&gt;

&lt;p&gt;Of course, I&amp;#8217;m visiting during &lt;a href='http://www.jpost.com/International/Article.aspx?id=190033'&gt;a terror warning.&lt;/a&gt; Surprisingly, I&amp;#8217;ll describe my reaction with &lt;a href='http://knowyourmeme.com/memes/and-not-a-single-f-ck-was-given-that-day'&gt;a meme&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href='http://4.bp.blogspot.com/_3ys1dwfzc2w/TK-Od1YX4gI/AAAAAAAAAHQ/cPt8kasmuFw/s1600/not_a_signle_fuck.png'&gt;&lt;img src='http://4.bp.blogspot.com/_3ys1dwfzc2w/TK-Od1YX4gI/AAAAAAAAAHQ/cPt8kasmuFw/s320/not_a_signle_fuck.png' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.schneier.com/essay-055.html'&gt;Bruce Schneier&lt;/a&gt; (from 2004!) and &lt;a href='http://www.slate.com/id/2269845'&gt;Slate&lt;/a&gt; highlight why this is so.&lt;/p&gt;

&lt;p&gt;Also, the &lt;a href='http://pw.brown.edu/wiki/shows/red'&gt;last show I sound designed&lt;/a&gt; at pw used Fly Me To The Moon as a recurring musical motif. So when I heard this, at first I was like &amp;#8220;Hmm&amp;#8230;&amp;#8221; but then started grooving contentedly:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/oQ2QgcRrWlc' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/oQ2QgcRrWlc' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;I have a very colorful, mixed relationship to the theatre that produced the show (I was on the board). Still, they have a wonderful little wiki where &lt;a href='http://pw.brown.edu/wiki/people/paul_meier_09'&gt;I made and defaced a profile page.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Away I go!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>moar remixes</title>
      <link>http://www.morepaul.com/2010/10/moar-remixes.html</link>
      <pubDate>Mon, 04 Oct 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I&amp;#8217;m a tired, grumpy Geodude, but I have to post these remixes, because they&amp;#8217;re quite lovely. 16 pop tunes:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/i9qW6HEBo_c' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/i9qW6HEBo_c' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Glenn Beck/Donald Duck. It only really picks up after 3:00 or so.&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/HfuwNU0jsk0' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/HfuwNU0jsk0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Not a remix, but this short was used as an illustration of how one can be an atheist and still at peace with the world. I don&amp;#8217;t know if I agree with that assessment, but it is a wonderful piece:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='allowfullscreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id=11238405&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' /&gt;&lt;embed src='http://vimeo.com/moogaloop.swf?clip_id=11238405&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Some Professor Layton Prolog!</title>
      <link>http://www.morepaul.com/2010/09/some-professor-layton-prolog.html</link>
      <pubDate>Thu, 30 Sep 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Time to combine two of my favorite things: &lt;a href='http://www.morepaul.com/2010/09/repost-professor-layton-and-hell-yes.html'&gt;Professor Layton&lt;/a&gt; and obscure languages! There was one puzzle (of the hardest diffficulty) that I could have spent 40 minutes working out, but instead spent an hour and half solving in Prolog (for those unfamiliar with Prolog, check out &lt;a href='http://www.morepaul.com/2009/12/prologgin.html'&gt;this post&lt;/a&gt; for a description of what this magic language is!).&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll post the puzzle and solution here; hopefully someone finds it fun!&lt;/p&gt;

&lt;p&gt;&lt;a href='http://2.bp.blogspot.com/_3ys1dwfzc2w/TKV8eSSBEJI/AAAAAAAAAHI/tHj6Z8VErXE/s1600/PL2151B.png'&gt;&lt;img src='http://2.bp.blogspot.com/_3ys1dwfzc2w/TKV8eSSBEJI/AAAAAAAAAHI/tHj6Z8VErXE/s320/PL2151B.png' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id='no_151_from_professor_layton_and_the_diabolical_box_colins_score'&gt;No 151 from Professor Layton and the Diabolical Box: Colin&amp;#8217;s Score&lt;/h3&gt;

&lt;p&gt;Four students took a test where every question had two possible answers, A or B. Each question was worth 10 points, for a total of 100 points.&lt;/p&gt;

&lt;p&gt;The students&amp;#8217; test results were posted as seen below, but the teacher forgot to tally Colin&amp;#8217;s score. Colin was heading to the teacher&amp;#8217;s office when Mary called him back, saying they could figure out his score using the results from the other tests. Can you figure out Colin&amp;#8217;s score?&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Below is the program I wrote to solve it. Verbose by contemporary language standards, but almost no thinking required, and the answer in an instant! Note the original version didn&amp;#8217;t have so many comments; these are to guide the curious reader.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='prolog'&gt;&lt;span class='c1'&gt;%% A question is a [[question number,answer], correctness].&lt;/span&gt;
&lt;span class='c1'&gt;%% Example:&lt;/span&gt;
&lt;span class='c1'&gt;%% [[1,a], correct]&lt;/span&gt;
&lt;span class='c1'&gt;%% A test is a list of questions.&lt;/span&gt;


&lt;span class='c1'&gt;%% We create a rule that every correct answer is 10 points.&lt;/span&gt;
&lt;span class='nf'&gt;points&lt;/span&gt;&lt;span class='p'&gt;([&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;correct&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='m'&gt;10&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt; &lt;span class='nf'&gt;points&lt;/span&gt;&lt;span class='p'&gt;([&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;incorrect&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='m'&gt;0&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='c1'&gt;%% Create rules flip solutions and whether or not they are incorrect.&lt;/span&gt;
&lt;span class='nf'&gt;flip&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt; &lt;span class='nf'&gt;flip&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;correct&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;incorrect&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;flip&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt; &lt;span class='nf'&gt;flip&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;incorrect&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;correct&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='c1'&gt;%% Given a test, calculates the score based on the correctness.&lt;/span&gt;
&lt;span class='nf'&gt;test_score&lt;/span&gt;&lt;span class='p'&gt;([],&lt;/span&gt; &lt;span class='m'&gt;0&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;test_score&lt;/span&gt;&lt;span class='p'&gt;([&lt;/span&gt;&lt;span class='nv'&gt;H&lt;/span&gt;&lt;span class='p'&gt;|&lt;/span&gt;&lt;span class='nv'&gt;T&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='nv'&gt;Score&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nf'&gt;points&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;These_Points&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;test_score&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;T&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Rest_of_Points&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nv'&gt;Score&lt;/span&gt; &lt;span class='o'&gt;is&lt;/span&gt; &lt;span class='nv'&gt;These_Points&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='nv'&gt;Rest_of_Points&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;

&lt;span class='c1'&gt;%% This is the critical rule: it ensures that all tests are scored&lt;/span&gt;
&lt;span class='c1'&gt;%% by the same answer key. This way, Prolog won&amp;#39;t find a binding that&lt;/span&gt;
&lt;span class='c1'&gt;%% works for each individual test, but for all tests that get bound.&lt;/span&gt;
&lt;span class='c1'&gt;%% Two empty tests naturally follow the same grading criteria:&lt;/span&gt;
&lt;span class='nf'&gt;sensible_scores&lt;/span&gt;&lt;span class='p'&gt;([],&lt;/span&gt; &lt;span class='p'&gt;[]).&lt;/span&gt;

&lt;span class='c1'&gt;%% We investigate tests recursively: if both tests have identical heads&lt;/span&gt;
&lt;span class='c1'&gt;%% (e.g. they agree on an answer and its correctness) then the test is&lt;/span&gt;
&lt;span class='c1'&gt;%% &amp;#39;sensible&amp;#39; (follows a common rubric) as long as the rest of the test does.&lt;/span&gt;
&lt;span class='nf'&gt;sensible_scores&lt;/span&gt;&lt;span class='p'&gt;([&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;|&lt;/span&gt;&lt;span class='nv'&gt;T1&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;|&lt;/span&gt;&lt;span class='nv'&gt;T2&lt;/span&gt;&lt;span class='p'&gt;])&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nf'&gt;sensible_scores&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;T1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;T2&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='c1'&gt;%% If they have the same number but differ in answer, they must also differ&lt;/span&gt;
&lt;span class='c1'&gt;%% in correctness.&lt;/span&gt;
&lt;span class='nf'&gt;sensible_scores&lt;/span&gt;&lt;span class='p'&gt;([[[&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;&lt;span class='nv'&gt;Aye&lt;/span&gt;&lt;span class='p'&gt;]|&lt;/span&gt;&lt;span class='nv'&gt;T1&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='p'&gt;[[[&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;C&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;&lt;span class='nv'&gt;Nay&lt;/span&gt;&lt;span class='p'&gt;]|&lt;/span&gt;&lt;span class='nv'&gt;T2&lt;/span&gt;&lt;span class='p'&gt;])&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nf'&gt;flip&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;C&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;flip&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Aye&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Nay&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;sensible_scores&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;T1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;T2&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;


&lt;span class='c1'&gt;%% A cheap rule that binds X to Mary&amp;#39;s score sheet. Correctness&lt;/span&gt;
&lt;span class='c1'&gt;%% is automagically bound by Prolog!&lt;/span&gt;
&lt;span class='nf'&gt;mary_test&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nv'&gt;X&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt; &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;4&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;6&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;7&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;8&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;9&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;10&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;]].&lt;/span&gt;

&lt;span class='c1'&gt;%% Dan&amp;#39;s score sheet.&lt;/span&gt;
&lt;span class='nf'&gt;dan_test&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nv'&gt;X&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt; &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;4&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;6&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;7&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;8&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;9&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;10&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;]].&lt;/span&gt;

&lt;span class='c1'&gt;%% Lisa&amp;#39;s score sheet.&lt;/span&gt;
&lt;span class='nf'&gt;lisa_test&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nv'&gt;X&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt; &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;4&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;6&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;7&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;8&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;9&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;10&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;]].&lt;/span&gt;


&lt;span class='c1'&gt;%% And Colin&amp;#39;s, whose score we don&amp;#39;t know.&lt;/span&gt;
&lt;span class='nf'&gt;colin_test&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nv'&gt;X&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt; &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;4&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;6&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;7&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;b&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;8&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;9&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
        &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='m'&gt;10&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;a&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;]].&lt;/span&gt;

&lt;span class='c1'&gt;%% Finally, the meat! We bind Lisa, Dan, and Mary to their score sheets.&lt;/span&gt;
&lt;span class='c1'&gt;%% We then use sensible_scores to ensure that their sheets follow the same&lt;/span&gt;
&lt;span class='c1'&gt;%% grading rubric. Finally, we ensure that this rubric adheres to the scores&lt;/span&gt;
&lt;span class='c1'&gt;%% that Mary, Dan, and Lisa obtained.&lt;/span&gt;
&lt;span class='nf'&gt;test_integrity&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nf'&gt;lisa_test&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Lisa&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;dan_test&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Dan&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;mary_test&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Mary&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;sensible_scores&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Lisa&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Dan&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;sensible_scores&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Dan&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Mary&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;sensible_scores&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Mary&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;test_score&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Mary&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='m'&gt;70&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;test_score&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Dan&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='m'&gt;50&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;test_score&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Lisa&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='m'&gt;30&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
 
&lt;span class='c1'&gt;%% Finally, we bind Score to what Colin&amp;#39;s score is by setting&lt;/span&gt;
&lt;span class='c1'&gt;%% it to his test results, ensuring that his score has the same&lt;/span&gt;
&lt;span class='c1'&gt;%% answer key as his peers, then calculating the score with that&lt;/span&gt;
&lt;span class='c1'&gt;%% answer key.&lt;/span&gt;
&lt;span class='nf'&gt;colin_score&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Score&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nf'&gt;colin_test&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;test_integrity&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;test_score&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Score&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Repost:  Professor Layton and the Hell Yes</title>
      <link>http://www.morepaul.com/2010/09/repost-professor-layton-and-hell-yes.html</link>
      <pubDate>Sun, 26 Sep 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;My last blog before this got digitally bulldozed: I was hosting on a pay-per-webserver and when I got a new credit card forgetting to update the account, they sent one spam-collected warning before they deleted my site. Luckily I was able to salvage most of the posts via Google Cache, with the hope that I could write a script to de-WordPress-HTMLize them, and upload again so they could see another day. I haven&amp;#8217;t done it yet, but might still. The main reason I haven&amp;#8217;t is because a) those posts had lots of images I hosted on the server as well, which makes them uglier, and b) &lt;strong&gt;those posts are like these, but much more boring.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But I might re-post one or two every here and there. Here&amp;#8217;s a re-post from September 4, 2009, when I was playing Professor Layton and the Diabolical Box. I just got the sequel, Professor Layton and the Unwound Future (&lt;a href='http://professorlaytonds.com/'&gt;official site&lt;/a&gt;, &lt;a href='http://www.youtube.com/watch?v=Ks__4i9qPZM'&gt;trailer&lt;/a&gt;), and most of my sentiments are still the same:&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;a href='http://1.bp.blogspot.com/_3ys1dwfzc2w/TKAcn9qj6OI/AAAAAAAAAHA/bwqCD4AabpY/s1600/professor-layton-diabolical-box.png'&gt;&lt;img src='http://1.bp.blogspot.com/_3ys1dwfzc2w/TKAcn9qj6OI/AAAAAAAAAHA/bwqCD4AabpY/s320/professor-layton-diabolical-box.png' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Anybody following my tweets for the past 4-5 days knows I&amp;#8217;ve only really tweeted about one thing: &lt;a href='http://www.gamespot.com/ds/rpg/laytonkyoujutoakumanohako/index.html/'&gt;Professor Layton and the Diabolical Box.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a breath of fresh air. Not even: I&amp;#8217;ve written before about growing up during the Hollywoodization of the games industry, and in that context games like this are a fresh salad in a strip mall full of Krispy Kreme&amp;#8217;s. This game is a bargain for twice the price.&lt;/p&gt;

&lt;p&gt;It would take a much-better planned post to cogently and coherently explain this game&amp;#8217;s genius, but to take a line from the movie &lt;em&gt;Spy Game&lt;/em&gt;, I&amp;#8217;ll try to achieve &amp;#8220;twice the sex with half the foreplay&amp;#8221;:&lt;/p&gt;

&lt;p&gt;* The game&amp;#8217;s puzzle mechanic is &lt;em&gt;innovative and damn fun&lt;/em&gt;. While scores upon scores of mini-games and puzzles in the larger game isn&amp;#8217;t new (Nintendo owned and made a fortune off this mechanic previously with Brain Age, Mario Party, etc.) Layton&amp;#8217;s puzzles operate in a radically different context. Most games have puzzles that are competitive and/or timed, with their primary mechanic some physical or reactionary task and how rapidly you can achieve it (mash buttons! Simon says!).&lt;/p&gt;

&lt;p&gt;The context of these puzzles change everything. The puzzles are non- competitive. You have unlimited time. They are cognitively fun, stimulating puzzles.&lt;/p&gt;

&lt;p&gt;I feel that Parappa the Rapper sort of emerged in this way, in that timed button presses weren&amp;#8217;t themselves new (&lt;a href='http://tasvideos.org/'&gt;TASVideos&lt;/a&gt; demonstrates that completing most games could be thought of as a sequence of timed button presses, but Excitebike is a better example of a game with it as a central mechanic), but the context and presentation made it feel new.&lt;/p&gt;

&lt;p&gt;* This game is &lt;em&gt;beautiful&lt;/em&gt;. Also like Parappa, the game launders its play style though gorgeous original artwork and design. Who can&amp;#8217;t love Professor Layton, with his quaint accent, speech, and manners? Who can&amp;#8217;t love Don Paolo, the &lt;em&gt;eeeeevil&lt;/em&gt; scientist who is such a cartoon villain? Who can&amp;#8217;t love the soundtrack, the villagers?&lt;/p&gt;

&lt;p&gt;* It&amp;#8217;s always great to have &lt;em&gt;a touch interface that doesn&amp;#8217;t suck&lt;/em&gt;. Have you ever tried designing a touch-screen interface? Or used one? Most of its proponents swear touch interfaces are more &amp;#8220;natural,&amp;#8221; but most touch software sucks. This game feels great, however, so much so that my brother&amp;#8217;s girlfriend could feel inclined to pick it up and log 15 hours of game time in 4-5 days.&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/eHWttaixDEc' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/eHWttaixDEc' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;If you have a DS, get these games. If you don&amp;#8217;t, ask to borrow mine ^_^&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Vimcakes, Backin' Up Song</title>
      <link>http://www.morepaul.com/2010/09/vimcakes-backin-up-song.html</link>
      <pubDate>Thu, 23 Sep 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I found &lt;a href='http://stevelosh.com/blog/2010/09/coming-home-to-vim/'&gt;an awesome little post on Vim&lt;/a&gt;, which itself links to other excellent Vim posts. &lt;a href='http://en.wikipedia.org/wiki/Breadth-first_search'&gt;BFS&lt;/a&gt; these links, kids, and &lt;a href='http://www.morepaul.com/2010/02/hiatus-and-voyage-of-vim.html'&gt;learn you a console editor&lt;/a&gt; if you haven&amp;#8217;t already!&lt;/p&gt;

&lt;p&gt;Also, I meant to squeeze this video in here somewhere, by the guys who did the Bed Intruder song:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/qIoG4PlEPtY' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/qIoG4PlEPtY' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Source material &lt;a href='http://www.youtube.com/watch?v=vcpx8O82KLM&amp;amp;feature=iv&amp;amp;annotation_id=annotation_48076'&gt;here&lt;/a&gt;. But do you see this? We have a hilarious remix coming from &lt;a href='http://www.morepaul.com/2010/08/strong-words-bed-intruder.html'&gt;an attempted rape&lt;/a&gt;, this one from an attempted robbery ending in gunshots, and the last post was about &lt;a href='http://www.morepaul.com/2010/09/because-i-backtraced-it.html'&gt;the internet taking down an 11 year- old&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Remixes man, &lt;a href='http://www.morepaul.com/2010/07/magnets-how-do-they-work.html'&gt;how do they work&lt;/a&gt;?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Because I backtraced it!</title>
      <link>http://www.morepaul.com/2010/09/because-i-backtraced-it.html</link>
      <pubDate>Tue, 21 Sep 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Here&amp;#8217;s another story of Internet lore, documented pretty well here at &lt;a href='http://knowyourmeme.com/memes/jessi-slaughter'&gt;Know Your Meme&lt;/a&gt;. I&amp;#8217;ve &lt;a href='http://www.morepaul.com/2010/04/baal-bless-internet.html'&gt;posted&lt;/a&gt; &lt;a href='http://www.morepaul.com/2010/04/baal-bless-internet.html'&gt;before&lt;/a&gt; about remixes), and &lt;a href='http://www.morepaul.com/2010/08/strong-words-bed-intruder.html'&gt;the internet making a story huge&lt;/a&gt;, and this one kind of combines the two.&lt;/p&gt;

&lt;p&gt;First we have an incredibly foul-mouthed, unusually sexually knowledgeable 11 year-old girl:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/hQKro8WEZ3I' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/hQKro8WEZ3I' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Before we continue, lets learn a few things here:&lt;/p&gt;

&lt;p&gt;* This girl did wholly dumb, irresponsible things (there&amp;#8217;s a lot more than this video). She&amp;#8217;s 11 so you can only blame her so much, but parents: please be involved in your children&amp;#8217;s lives.&lt;/p&gt;

&lt;p&gt;* While I don&amp;#8217;t think what follows is at all appropriate, she isn&amp;#8217;t faultless. Frequently in conflicts &lt;em&gt;both&lt;/em&gt; sides are guilty; just that one side might be guilty on the scale of three counts of murder and the other &amp;#8220;only&amp;#8221; involuntary manslaughter.&lt;/p&gt;

&lt;p&gt;So the greater trolls at 4Chan see this, and pounce. They &lt;a href='http://en.wikipedia.org/wiki/Google_bomb'&gt;google bombed&lt;/a&gt; her, file fake police reports, &lt;a href='http://www.youtube.com/watch?v=C2cf6JFc1Xg'&gt;call her mom pretending to be the police&lt;/a&gt;, spam her inbox, &amp;amp;etc. &amp;amp;etc. &amp;amp;etc. She&amp;#8217;s left to a smoldering pile of ashes, when her dad makes her sadness unintentionally hilarious:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/NEfY3kMnG4E' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/NEfY3kMnG4E' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Another thing, parents: don&amp;#8217;t make threats you can&amp;#8217;t back up. Saying &amp;#8221;I&amp;#8217;m her &lt;em&gt;father!&lt;/em&gt;&amp;#8221; doesn&amp;#8217;t incite fear in kids the way it used to, and don&amp;#8217;t invoke &amp;#8220;calling the Cyber Police!&amp;#8221; unless you&amp;#8217;ve actually spoken to them.&lt;/p&gt;

&lt;p&gt;Look at the girl in the first video, and ask if &lt;em&gt;that&lt;/em&gt; kid would have been threatened by the father in the second video.&lt;/p&gt;

&lt;p&gt;I only mention this story because it led to one of my favorite remixes:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/dYrlj9VE2fg' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/dYrlj9VE2fg' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;It&amp;#8217;s not as entertaining, of course, when you know the whole story. &lt;a href='http://gawker.com/5589103/how-the-internet-beat-up-an-11+year+old-girl'&gt;Gawker&lt;/a&gt; has another write-up.&lt;/p&gt;

&lt;p&gt;A few other reactions to this story:&lt;/p&gt;

&lt;p&gt;* Another reason why computer science is great to study! It&amp;#8217;s a hell of an investment, since technical knowledge follows you everywhere (don&amp;#8217;t forget that it&amp;#8217;s just &lt;a href='http://www.morepaul.com/2010/04/metaphors-i-use-to-describe-software.html'&gt;amazing as hell&lt;/a&gt;, too).&lt;/p&gt;

&lt;p&gt;* I look forward to when everyone&amp;#8217;s lives are more public. In the midst of the Christine O&amp;#8217;Donnell brou-haha is that she &lt;a href='http://thinkprogress.org/2010/09/18/christine-odonnell-witchcraft/'&gt;admitted to once dabbling in Witchcraft&lt;/a&gt;. Ignoring the fact that if Obama or Pelosi had &amp;#8216;dabbled in voodoo&amp;#8217; or warlockery, her supporters would be having a conniption, to me the greater point is that people can start to forgive poor choices or experiments people have participated in because &lt;em&gt;we all do&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I really hate that employers look on Facebook for incriminating photos to &amp;#8220;gotcha&amp;#8221; with, even if the photos aren&amp;#8217;t incriminating. Don&amp;#8217;t confuse me: if your employer finds you snorting a line of coke on your Facebook, I think they&amp;#8217;re totally right to deny you the interview, since that&amp;#8217;s completely stupid. I&amp;#8217;m talking about the case where they find a picture of you holding a Corona, then go &lt;em&gt;&amp;#8220;oh shit he&amp;#8217;s out of the race because he should&lt;/em&gt;know_ that I&amp;#8217;ll look on here, and he has a picture with a beer_!&amp;#8221;&lt;/p&gt;

&lt;p&gt;Lame employers, I&amp;#8217;ll save you the trouble: &lt;a href='http://www.facebook.com/photo.php?pid=2733504&amp;amp;fbid=106745099551&amp;amp;op=10&amp;amp;o=global&amp;amp;view=global&amp;amp;subj=1010423&amp;amp;id=691574551'&gt;beer&lt;/a&gt;,&lt;a href='http://www.facebook.com/photo.php?pid=2733504&amp;amp;fbid=106745099551&amp;amp;op=10&amp;amp;o=global&amp;amp;view=global&amp;amp;subj=1010423&amp;amp;id=691574551'&gt;beer&lt;/a&gt;, &lt;a href='http://www.facebook.com/photo.php?pid=32572619&amp;amp;fbid=533065679951&amp;amp;op=21&amp;amp;o=global&amp;amp;view=global&amp;amp;subj=1010423&amp;amp;id=1005106'&gt;beer&lt;/a&gt;, &lt;a href='http://www.facebook.com/photo.php?pid=30160914&amp;amp;fbid=522139955191&amp;amp;op=34&amp;amp;o=global&amp;amp;view=global&amp;amp;subj=1010423&amp;amp;id=1009904'&gt;party&lt;/a&gt;, &lt;a href='http://www.facebook.com/photo.php?pid=30038373&amp;amp;fbid=522091916461&amp;amp;op=36&amp;amp;o=global&amp;amp;view=global&amp;amp;subj=1010423&amp;amp;id=1009840'&gt;party&lt;/a&gt;. Now a better question, did &lt;em&gt;you&lt;/em&gt; go to a party? Is it surprising that in 5 years of undergrad, I did? Denying me an interview from 5 photos over 5 years of the ~600 photos of me on Facebook tells me I&amp;#8217;m better off without you, because you don&amp;#8217;t want to talk to or hire people, but some imaginary, outdated standard of a person.&lt;/p&gt;

&lt;p&gt;Tying it all together: as more 11 year-olds rant stupidly into a camera, or &lt;a href='http://youropenbook.org/?q=definately&amp;amp;gender=any'&gt;misspell on their status updates&lt;/a&gt;, or have dumb photos up, we&amp;#8217;ll be better prepared to be reasonable as well.&lt;/p&gt;

&lt;p&gt;Need cheering up? &lt;a href='http://games.adultswim.com/robot-unicorn-attack-twitchy-online-game.html'&gt;Robot Unicorn Attack&lt;/a&gt;! Or my favorite this week, the &lt;a href='http://byorgey.wordpress.com/2010/09/18/the-haskell-alphabet/'&gt;Haskell alphabet!&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Living Openly</title>
      <link>http://www.morepaul.com/2010/09/living-on-open.html</link>
      <pubDate>Thu, 16 Sep 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I just wrote a long blog post talking about why it sucks playing Zerg in Starcraft 2. But friends, there has been too much whining on this blog of late! It&amp;#8217;s time to bring back two things we&amp;#8217;ve missed for some time: computers and whimsy!&lt;/p&gt;

&lt;p&gt;&lt;img src='http://30.media.tumblr.com/tumblr_kyby7pa0J81qzxzwwo1_500.gif' alt='Haters Gonna Hate' /&gt;&lt;/p&gt;

&lt;p&gt;So a few things: I&amp;#8217;m living the dream, and finally installed Linux on a personal box. It&amp;#8217;s a small step (this is my laptop, not my main) but Perfect is the Enemy of the Good, and after using Mac, Windows, and Linux at work, it&amp;#8217;s incredibly obvious which direction I&amp;#8217;d like to move in for the future.&lt;/p&gt;

&lt;p&gt;Currently I&amp;#8217;m running &lt;a href='http://www.ubuntu.com'&gt;Ubuntu&lt;/a&gt;. I wanted to run Debian like we did at Brown CS, but I&amp;#8217;m too much of a weenie at the moment. Besides, Ubuntu&amp;#8217;s easy as a dream to set up, and I&amp;#8217;ve done it for work twice already. Naturally, I&amp;#8217;ll be using &lt;a href='http://xmonad.org/'&gt;XMonad&lt;/a&gt; as my window manager ^_^&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve written twice that I&amp;#8217;ve &amp;#8220;picked up&amp;#8221; &lt;a href='http://www.github.com/paul-meier/ScrabbleCheat'&gt;ScrabbleCheat&lt;/a&gt; again, but they were lies. &lt;em&gt;This&lt;/em&gt; time I&amp;#8217;ve actually picked it up again (see the commit history!) and it&amp;#8217;s finally going in the right direction. I had a substantial amount in the first tagged release, but that approach (the anagram solver) was ultimately doomed because it didn&amp;#8217;t take the board into account when generating words for moves. If I ever get productive again, I&amp;#8217;ll write about this process, this has been the most fun I&amp;#8217;ve had coding in a while.&lt;/p&gt;

&lt;p&gt;Part of the fun has been because of Erlang, which has &lt;a href='http://www.erlang.org/download/otp_src_R14B.readme'&gt;just had another release&lt;/a&gt;. There are so many reasons to use Erlang, and this application contains almost none of them (not super parallelizable, no need for hot- swapping patches, binary syntax, or fault-tolerance). That being said, I really miss my functional programming, and refactoring calls to a series of folds and maps just feels &lt;em&gt;nice&lt;/em&gt;. I can&amp;#8217;t imagine how powerful I&amp;#8217;d feel if I&amp;#8217;d properly learned macros, or had use of Haskell&amp;#8217;s type system. Those are for the next ones ^_^&lt;/p&gt;

&lt;p&gt;Finally, &lt;a href='http://techcrunch.com/2010/09/15/diaspora-revealed/'&gt;Diaspora open sourced today&lt;/a&gt;. It&amp;#8217;s too early to really tell anything about its future, but I&amp;#8217;m thinking of looking at it and seeing what they did. If we&amp;#8217;re lucky, the community will take well to this I can finally stop being &lt;a href='http://gawker.com/5636765/facebook-ceo-admits-to-calling-users-dumb-fucks'&gt;a dumb fuck&lt;/a&gt; who trusts Zuckerberg.&lt;/p&gt;

&lt;p&gt;(Note that while I don&amp;#8217;t love all aspects of the product, my family will always be eternally grateful to Facebook for helping us communicate to so many, so easily during the roughest parts of &lt;a href='http://www.facebook.com/#!/group.php?gid=25800962459&amp;amp;ref=ts'&gt;Annalisa&amp;#8217;s recovery&lt;/a&gt;. I also think their approach to engineering, like many of the coders I know there, is brilliant).&lt;/p&gt;

&lt;p&gt;Finally, I&amp;#8217;m turning in my iPhone in late October and getting me an Android (probably an Evo), since I&amp;#8217;ll be paying that bill pretty soon and will use the opportunity to go to a more open land, containing the closed platform I work on ^_^.&lt;/p&gt;

&lt;p&gt;So that&amp;#8217;s it, kids! Open source OS, programming an open-source hippie language, slowly migrating out of Facebook while decking it out with a new, more open phone. All that will be left will be a bed that&amp;#8217;s also a &lt;a href='http://reprap.org/wiki/Main_Page'&gt;Reprap&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://blingee.com/blingee/view/116669782-Since-Day-1' title='Since Day 1'&gt;&lt;img src='http://image.blingee.com/images18/content/output/000/000/000/6f4/674214569_1402332.gif' alt='Since Day 1' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll try to post more; I still sleep next to too much cardboard and styrofoam, and will probably be comfortably moved in and adjusted after Christmas ^_-.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Updates to previous posts</title>
      <link>http://www.morepaul.com/2010/09/updates-to-previous-posts.html</link>
      <pubDate>Tue, 14 Sep 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;On my &lt;a href='http://www.morepaul.com/2010/08/life-isnt-fair-and-eat-pray-love.html'&gt;Eat, Pray, Love&lt;/a&gt; post, Lindy West over at The Stranger &lt;a href='http://slog.thestranger.com/slog/archives/2010/09/14/pay-sit-barf'&gt;wrote a review of the movie adaptation&lt;/a&gt; that more or less echoes my sentiments (like I imagine for Ms. West, the sentiments get vicious primarily for entertainment value). If you haven&amp;#8217;t seen her &lt;a href='http://www.thestranger.com/seattle/burkas-and-birkins/Content?oid=4132715'&gt;Sex and the City 2 review&lt;/a&gt;, its similar in style, tone, entertainment, and parallels with how I feel.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;On my &lt;a href='http://www.morepaul.com/2010/08/making-living-being-artist.html'&gt;Jason Robert Brown/living as an artist post&lt;/a&gt;, I hadn&amp;#8217;t read his post recently enough to see his updates, which are marvelous, and demonstrate that I&amp;#8217;ve been a little unfair to him. I think my points still stand, but I&amp;#8217;ll just quickly comment on one point in the updates: he links &lt;a href='http://www.digitalsociety.org/2010/07/jason-robert-brown-debates-rationalization-of-theft/'&gt;a great rundown of why most arguments for downloading are bunk&lt;/a&gt;, and mentions something similar to mine. He states the &amp;#8220;it&amp;#8217;s a broken business model anyways&amp;#8221; fails because some artists (like JRB) &lt;em&gt;do&lt;/em&gt; succeed in it, and the presence of a counterexample is enough to refudiate that.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m afraid I&amp;#8217;m not buying. It &amp;#8220;works&amp;#8221; for so unbelievably few artists its essentially broken. Lynn Nottage, &lt;a href='http://www.thestranger.com/slog/archives/2010/01/12/what-audiences-want-to-watch&amp;amp;view=comments'&gt;a playwright produced more in the last decade than Shaw, Brecht, and Wilde&lt;/a&gt;, &lt;em&gt;still&lt;/em&gt; &lt;a href='http://slog.thestranger.com/slog/archives/2010/06/23/arena-stage-in-washington-dc-puts-playwrights-on-the-payroll'&gt;doesn&amp;#8217;t feel comfortable giving up her day job.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In any system there&amp;#8217;s going to be someone who wins. During my sister&amp;#8217;s medical crisis, she received excellent care; this doesn&amp;#8217;t change the fact that we have the worst healthcare system in the modern world. I&amp;#8217;m glad it works for JRB, the most famous living musical theatre composer. But for virtually everyone else, even if you &lt;em&gt;do&lt;/em&gt; make it to the recordings/royalties stage, agents and middlemen (and ha! illegal downloaders) will kill your earnings.&lt;/p&gt;

&lt;p&gt;Remember, I&amp;#8217;m not saying it&amp;#8217;s okay to download illegally, just stating that people absolutely will, and to hope they don&amp;#8217;t is like lying on the beach hoping the tide doesn&amp;#8217;t rise.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Finally, probably the most significant, on &lt;a href='http://www.morepaul.com/2010/09/life-updatebook-burning.html'&gt;the post about that redneck who wanted to burn Korans.&lt;/a&gt; I&amp;#8217;ve changed my mind a little to broaden my disdain; the original post was mostly angry at him and Americans. Now I&amp;#8217;m just mad at pretty much everyone.&lt;/p&gt;

&lt;p&gt;Again, let there be no confusions: we&amp;#8217;re being a bunch of idiots here. We have guys &lt;a href='http://www.youtube.com/watch?v=VoCAbieZj1w'&gt;screaming &amp;#8220;Kill All Muslims&amp;#8221;&lt;/a&gt;, and Fox once again shows they would rather stir up dangerous hate for obscene profit rather than make slightly minimized obscene profit through safer methods. I hate to be that kid who links the Daily Show, &lt;a href='http://www.thedailyshow.com/watch/mon-september-13-2010/islamophobiapalooza'&gt;but they really nailed it&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;(also&amp;#8230; that Imam is &lt;strong&gt;awesome&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;But we go back full circle to the reason for Everyone Draw: &lt;a href='http://www.businessweek.com/news/2010-09-13/iran-ayatollahs-issue-fatwas-against-koran-burners.html'&gt;Ayatollahs issued fatwas on the book burners&lt;/a&gt;. So we&amp;#8217;re back to muslim terrorism over free speech. So I&amp;#8217;m back to hating on idiot Muslims (and urging moderate Muslims to to fight &lt;em&gt;them&lt;/em&gt; before they throw stones (err, bad choice of words) anywhere else).&lt;/p&gt;

&lt;p&gt;Finally, I&amp;#8217;m angry at the world. President Obama? The Pope? Really? I&amp;#8217;m with Yglesias, &lt;a href='http://yglesias.thinkprogress.org/2010/09/on-koran-burning/'&gt;&amp;#8220;guy burns books&amp;#8221;&lt;/a&gt; can&amp;#8217;t be a global event anymore.&lt;/p&gt;

&lt;p&gt;Okay. Time go get Glad, there&amp;#8217;s been lots of bile on this blog recently. I&amp;#8217;ll close with my favorite headline, stolen from reddit:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&amp;#8220;Is anyone else OUTRAGED that atheists plan on building ABSOLUTELY NOTHING at Ground Zero!?!?!?&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>It's not that hard</title>
      <link>http://www.morepaul.com/2010/09/its-not-that-hard.html</link>
      <pubDate>Sun, 12 Sep 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Concerning Teh Gays:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/2bCu2eGCjz4' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/2bCu2eGCjz4' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Concerning Scripture as Truth:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/RB3g6mXLEKk' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/RB3g6mXLEKk' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Life Update/Book Burning</title>
      <link>http://www.morepaul.com/2010/09/life-updatebook-burning.html</link>
      <pubDate>Wed, 08 Sep 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Time for a small life update, as the posts have slowed down for a while and some narration is due:&lt;/p&gt;

&lt;p&gt;I just moved to San Francisco after graduating from Brown in Providence, RI. For a myriad of reasons I didn&amp;#8217;t spend much time at home over the summer, and have been living in and out of boxes since May. Just last week I moved in to my new apartment, and will slowly, surely become a normal well-adjusted human being again.&lt;/p&gt;

&lt;p&gt;Despite the change in locale, the main reason I&amp;#8217;ve not updated (or been so fast to move, or had much time to play) is that &lt;strong&gt;I&amp;#8217;m happily and proudly an engineer at Adobe Systems,&lt;/strong&gt; working on their &lt;a href='http://www.adobe.com/products/air/'&gt;AIR product.&lt;/a&gt; It&amp;#8217;s really a fantastic product, I suggest you all give it a look.&lt;/p&gt;

&lt;p&gt;Products built on AIR that I particularly like are &lt;a href='http://timesreader.nytimes.com/timesreader/'&gt;Times Reader&lt;/a&gt;, &lt;a href='http://www.tweetdeck.com/'&gt;TweetDeck&lt;/a&gt;, and (in a silly and simple way) &lt;a href='http://www.adobe.com/cfusion/marketplace/index.cfm?event=marketplace.offering&amp;amp;offeringid=10223&amp;amp;marketplaceid=1'&gt;Webcam To Gif&lt;/a&gt;. It&amp;#8217;s the first time I&amp;#8217;m programming professionally, and I can&amp;#8217;t be happier.&lt;/p&gt;

&lt;p&gt;&lt;img src='http://pw.brown.edu/~paul/Mouthey.gif' alt='Mouth Opening' /&gt; &lt;img src='http://pw.brown.edu/~paul/Eyes.gif' alt='Nervous Eyes' /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src='http://pw.brown.edu/~paul/NoNo.gif' alt='DENIED' /&gt; &lt;img src='http://pw.brown.edu/~paul/YeahYeah.gif' alt='Oh yeah' /&gt;&lt;/p&gt;

&lt;p&gt;Of course, it also doesn&amp;#8217;t help that Starcraft 2 was released on my second day of work. I rarely get to play, but when I do, look out for &lt;a href='http://us.battle.net/sc2/en/profile/697265/1/sicp/'&gt;sicp&lt;/a&gt;, the Platinum Zerg Menace on the US server.&lt;/p&gt;

&lt;p&gt;Occasionally, I can still program for fun. I picked up &lt;a href='http://github.com/paul-meier/ScrabbleCheat'&gt;ScrabbleCheat&lt;/a&gt; again and virtually re-wrote the little I had: the previous approach was quickly demoable, but hits a wall as soon as you try to generate moves from an existing game board. Besides, the sooner I finish that, the sooner I can work on my AIR app, SlashR ^_-&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Now, forgive the language, but there&amp;#8217;s no better way to describe it: there&amp;#8217;s some &lt;em&gt;stupid-ass shit&lt;/em&gt; happening right now regarding Muslims in this country. First there&amp;#8217;s the manufactured Cordoba House controversy (I think Greenwald sums it up best: if you think past a fourth-grade level about the opponent&amp;#8217;s arguments, what they really want but obviously can&amp;#8217;t say is a &lt;a href='http://www.nytimes.com/roomfordebate/2010/8/17/is-the-mosque-issue-a-risk-for-obama/who-has-moral-courage'&gt;Muslim- free&lt;/a&gt; &lt;a href='http://www.salon.com/news/opinion/glenn_greenwald/2010/08/17/courage'&gt;zone&lt;/a&gt; of unspecified distance. &lt;a href='http://daryllang.com/blog/4421'&gt;This set of photographs&lt;/a&gt; is telling.).&lt;/p&gt;

&lt;p&gt;Then we get &lt;a href='http://www.insurancejournal.com/news/southeast/2010/09/07/113034.htm'&gt;arson of a mosque in Tennessee&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The most personally insulting is &lt;a href='http://articles.cnn.com/2010-07-29/us/florida.burn.quran.day_1_american-muslims-religion-cair-spokesman-ibrahim-hooper?_s=PM:US'&gt;&amp;#8220;Burn a Koran Day,&amp;#8221;&lt;/a&gt; since it&amp;#8217;s clearly an unoriginal, hateful knockoff of Everyone Draw Mohammed Day (I describe the event and my participation &lt;a href='http://www.morepaul.com/2010/07/on-freedom-of-speech.html'&gt;here&lt;/a&gt;). Clearly, they misunderstood Everyone Draw since &lt;a href='http://www.youtube.com/watch?v=08xQLGWTSag'&gt;they&amp;#8217;re doing it all wrong.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Never mind the fact that these are Christians, apparently:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/vdtFk_V6A4M' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/vdtFk_V6A4M' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;In Everyone Draw, there were direct threats and acts of violence being perpetrated in response to a specific, concrete expression of freedom of speech, the result of which unambiguously &lt;em&gt;terrorized&lt;/em&gt; people from exercising their Constitutional rights. If we were threatened and attacked by McDonalds, we&amp;#8217;d be agitating McDonalds.&lt;/p&gt;

&lt;p&gt;The people behind Burn a Koran Day aren&amp;#8217;t in any direct danger and don&amp;#8217;t have their rights directly threatened. They&amp;#8217;re doing this simply because they hate and wish to hurt &lt;em&gt;all Muslims&lt;/em&gt; simply by virtue of being Muslim. If they try to give an explanation, it&amp;#8217;s normally some vague babble of being a response to 9/11. &lt;em&gt;Please&lt;/em&gt;. Yes, some (crazy few) Muslims want to kill you and I. I&amp;#8217;ll bet that so do some (crazy few) Jews, some (crazy few) handicapped people, and some (crazy few) vegans. This doesn&amp;#8217;t mean I should eat a lobster-bacon cheeseburger while caning an invalid just to prove a point.&lt;/p&gt;

&lt;p&gt;Is their religion stupid? Definitely. So is yours. You all have the right to peacefully practice your silly superstitions, and you have every right to insult them as badly as you want. Neither of you have the right to escape criticism, and those of you planning this are the most stupid, hypocritical, and pathetic people of this news cycle (and there is some stiff competition).&lt;/p&gt;

&lt;p&gt;Really kids, what would Jesus do?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Strong words, Bed Intruder</title>
      <link>http://www.morepaul.com/2010/08/strong-words-bed-intruder.html</link>
      <pubDate>Wed, 25 Aug 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;A few things. One, &lt;strong&gt;cursing, and strong words!&lt;/strong&gt;&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/s_osQvkeNRM' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/s_osQvkeNRM' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;I happen to agree. I swear very little, and do so very carefully (which is to say I treat swear words like any other word). But still, someone who thinks they have &lt;em&gt;no place&lt;/em&gt; has never seen them put to great use (my favorite example is still the &lt;a href='http://www.morepaul.com/2010/04/i-read-news.html'&gt;Pope Song&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.thedailyshow.com/watch/tue-august-24-2010/the-hurt-talker'&gt;Strong Words!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slurs, on the other hand, are pretty awful. I handle how I feel about these case by case. I happen to think, like swearing, we put too much weight on these as a society, but that&amp;#8217;s easy when you&amp;#8217;re tall, skinny, straight, and pass for white like I do. Normally I&amp;#8217;m happy to leave well enough alone. But this Daily Show clip wins.&lt;/p&gt;

&lt;p&gt;Finally, I love 2010. First you get this story on the news:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/EzNhaLUT520' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/EzNhaLUT520' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Which, naturally gets remixed:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/hMtZfW2z9dw' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/hMtZfW2z9dw' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;But here&amp;#8217;s the best part: a school picked it up and playing it for marching band!&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/Q3UsvLyu3N0' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/Q3UsvLyu3N0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Are we lucky to be alive now, or what?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Making a living being an artist</title>
      <link>http://www.morepaul.com/2010/08/making-living-being-artist.html</link>
      <pubDate>Sat, 14 Aug 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;This blog seems to have veered from &lt;a href='http://www.morepaul.com/2010/06/type-systems-from-1000-feet-high.html'&gt;code&lt;/a&gt; and &lt;a href='http://www.morepaul.com/2010/06/terrible-wonderful-music-videos.html'&gt;cute whimsy&lt;/a&gt; to &lt;a href='http://www.morepaul.com/2010/07/on-freedom-of-speech.html'&gt;Paul Screed&lt;/a&gt; and &lt;a href='http://www.morepaul.com/2010/08/life-isnt-fair-and-eat-pray-love.html'&gt;Bloviation&lt;/a&gt;. Lets add one more post to that list, in part spurred by &lt;a href='http://www.jasonrobertbrown.com/weblog/2010/06/fighting_with_teenagers_a_copy.php'&gt;a post by Jason Robert Brown&lt;/a&gt; (writer/composer of Parade and The Last 5 Years, among others) that was making the rounds for a while. You should skim it, but he&amp;#8217;s basically making his case for how it&amp;#8217;s wrong that artists get cheated out of their royalties by technology by debating the issue with someone who is actively giving away and receiving his music.&lt;/p&gt;

&lt;p&gt;First, a note on the post: it&amp;#8217;s pretty awful. He picks an inarticulate opponent to represent the other side, to the point that it&amp;#8217;s literally Master Writer vs. Opinionated Teenager. He doesn&amp;#8217;t contest the more grounded, better- expressed arguments refuting his own position, or even really acknowledge their existence. It&amp;#8217;s as if the only arguments there are are the ones this girl mentions, and he predictably takes her to town.&lt;/p&gt;

&lt;p&gt;Let&amp;#8217;s make another distinction: this post isn&amp;#8217;t to say &lt;em&gt;stealing music is okay&lt;/em&gt;, it&amp;#8217;s more to say &lt;em&gt;royalties are doomed, think of something else.&lt;/em&gt; With this I mean I won&amp;#8217;t go into the ethics of downloading music illegally because, like most discussion on ethics and law, it&amp;#8217;s just way too hairy. It sounds like it should be a no-brainer that the proposition &amp;#8220;stealing music is wrong&amp;#8221; is true, but a) everyone may have very different definitions of stealing, particularly when b) music isn&amp;#8217;t a good or service that easily fits most tractable economic models for production &lt;em&gt;or&lt;/em&gt; consumption, and c) assumes both speakers agree on a moral or ethical standard, notions of right and wrong, and fair behavior. So the only problems with &amp;#8220;Stealing music is wrong&amp;#8221; is &amp;#8220;stealing,&amp;#8221; &amp;#8220;music,&amp;#8221; and &amp;#8220;wrong.&amp;#8221;&lt;/p&gt;

&lt;p&gt;But I &lt;em&gt;do&lt;/em&gt; believe &lt;strong&gt;Jason Robert Brown, like most artists who are successful or wish to be in the traditional sense, are clinging to a model that has failed and will continue to do so.&lt;/strong&gt; That it&amp;#8217;s not a good idea to cling to an income that is primarily sustained by royalties. Like newspapers, that model only made money when people &lt;em&gt;couldn&amp;#8217;t opt-out&lt;/em&gt; of a bad system. You&amp;#8217;re hedging your livelihood hoping that people will &lt;em&gt;choose to opt-in&lt;/em&gt; to the same bad system, against a better alternative.&lt;/p&gt;

&lt;p&gt;I can&amp;#8217;t find a link, but I remember a quote from the early days of the internet, when a 12-year old kid who loved Dave Barry articles would transcribe them from the newspaper onto his Geocities site: &amp;#8220;When someone destroys your business model not because they hate you, but because they love you, you know you&amp;#8217;re in trouble.&amp;#8221;&lt;/p&gt;

&lt;p&gt;And people won&amp;#8217;t opt-in. The Times of London online &lt;a href='http://www.guardian.co.uk/media/2010/jul/20/times-paywall-readership'&gt;had a 90% drop in readership&lt;/a&gt; after instituting a paywall. The most compelling point the girl in the post made, which JRB never addressed, was that she literally &lt;em&gt;couldn&amp;#8217;t&lt;/em&gt; access the music legally since you&amp;#8217;d need a credit card to buy it online, and her parents didn&amp;#8217;t support her passion for theatre.&lt;/p&gt;

&lt;p&gt;The act of buying legally itself is also marred with complications. See &lt;a href='http://s-ec-sm.buzzfeed.com/static/imagebuzz/web03/2010/2/18/15/legal-dvd-vs-pirated-copy-25361-1266526187-121.jpg'&gt;this graphic of watching a pirated DVD vs. a legitimate DVD&lt;/a&gt;, or read about &lt;a href='http://www.reddit.com/r/gaming/comments/cw0ax/i_downloaded_and_cracked_scii_and_played_a_couple/'&gt;this guy who pirated Starcraft&lt;/a&gt;, and had to wait two days to play it when he decided to buy it. While I believe the main reason people pirate is because they&amp;#8217;re cheapskates (most people pirating could afford at least some of the music they pirate, and could cut consumption like in any other market to make up the difference), it doesn&amp;#8217;t help that the experience is often &lt;em&gt;better&lt;/em&gt; when you pirate.&lt;/p&gt;

&lt;p&gt;Finally, and this goes back to arguing over whether it&amp;#8217;s &amp;#8220;right&amp;#8221; or &amp;#8220;wrong:&amp;#8221; most people are incredibly confused by this. When CD burning just started, I offered to make copies of &lt;em&gt;commercial CD&amp;#8217;s&lt;/em&gt; my family bought legally to take with us to Guatemala, for &lt;em&gt;us and only us&lt;/em&gt; to listen to. My mom relented (and looked at me like a criminal), thinking the act of burning the CD&amp;#8217;s was the illegal part (rather than the distribution&amp;#8230; and I&amp;#8217;m sure some RIAA lawyer would or can make the case that it is).&lt;/p&gt;

&lt;p&gt;So regardless of whether or not what you perceive as stealing feels wrong to you (phew), even if you were 100% right and you die and go to Heaven and God himself says &amp;#8220;Yes, Jason, you were robbed wrongfully by your brothers on Earth,&amp;#8221; it doesn&amp;#8217;t change the fact that while you were on Earth, your model was dissolving and you were being made irrelevant. I&amp;#8217;m not arguing right or wrong, I&amp;#8217;m arguing working and non-working.&lt;/p&gt;

&lt;p&gt;So what should you do instead? Um&amp;#8230; well, I don&amp;#8217;t know. But I&amp;#8217;m pretty sure the solution isn&amp;#8217;t to stay on a sinking ship.&lt;/p&gt;

&lt;p&gt;I can make a few suggestions though, as this generalizes nicely into the hard problem of how to make a career as an artist. The first step is to accept that &lt;strong&gt;you &lt;em&gt;will&lt;/em&gt; take a pay cut.&lt;/strong&gt; You can&amp;#8217;t keep the salaries and lifestyle you kept in the bad old days doing the bad old things. This might mean getting a second (or different) job.&lt;/p&gt;

&lt;p&gt;The second thing to remember is branding. You&amp;#8217;re recordings may not be worth much anymore because we can now distribute them losslessly to whoever we want. But there is still only one of &lt;em&gt;you&lt;/em&gt;, and that scarcity should factor into your model.&lt;/p&gt;

&lt;p&gt;So try using the technology to brand yourself. Form connections. Don&amp;#8217;t stop producing and respond to your audience. If you&amp;#8217;re lucky, you can get as famous as Radiohead and &lt;a href='http://www.time.com/time/arts/article/0,8599,1666973,00.html'&gt;give your music away for whatever anyone wants to pay for it&lt;/a&gt;. If you&amp;#8217;re a little less lucky, you could probably still get well-known enough to enough people to score a regular job or commissioned work. Ze Frank did a great &lt;a href='http://www.zefrank.com/theshow/'&gt;daily show&lt;/a&gt; and seems to get regular work, even getting to be &lt;a href='http://www.ted.com/speakers/ze_frank.html'&gt;a speaker at TED&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A fringe benefit of this is that you no longer have to deal with middlemen taking big cuts, and stealing. Hollywood accounting means that you could still, technically, &lt;a href='http://blastr.com/2010/07/11-biggest-sci-fi-blockbu.php'&gt;lose money on the Lord of the Rings Trilogy&lt;/a&gt; (Peter Jackson and the estate of JRR Tolkien had to sue to get any royalties from the movies). It&amp;#8217;s how TLC could sell 10 million CD&amp;#8217;s and &lt;a href='http://tinpan.fortunecity.com/funkadelic/408/articles/ppl-bankrupt.html'&gt;still go bankrupt.&lt;/a&gt; The bad old days were bad for artists too. So leverage the technology, and work for yourself.&lt;/p&gt;

&lt;p&gt;Many of the same artist survival tactics still apply. Persevere, and understand the hardest part of the game is not giving up too soon. Picking up a skill will help you greatly. Like John Goodman said in &lt;em&gt;Inside the Actor&amp;#8217;s Studio&lt;/em&gt;, the most useful advice he got for his career as an actor was to learn to type, allowing him a stable day job to live off while he worked. That skill may even supersede your love for your art, as happened to me. At the very least you will get more perspective of how most normal, non-artists people think and work.&lt;/p&gt;

&lt;p&gt;On an institutional level, I can&amp;#8217;t recommend enough Brendan Kiley&amp;#8217;s article &lt;em&gt;&lt;a href='http://www.thestranger.com/seattle/ten-things-theaters-need-to-do-right-now-to-save-themselves/Content?oid=691862'&gt;10 Things Theatre&amp;#8217;s Need To Do Right Now To Save Themselves&lt;/a&gt;.&lt;/em&gt; It caused a major splash and proposed a lot of uncomfortable truths. Many artists hated it, which is precisely the type of reaction an appropriate solution would generate in such a broken system. Incidentally, and I know this makes me a Bad Actor, but I&amp;#8217;m tired of seeing Shakespeare.&lt;/p&gt;

&lt;p&gt;Obviously, easier said than done. But those are my two cents.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>In light of the Essays that were the last two posts...</title>
      <link>http://www.morepaul.com/2010/08/in-light-of-essays-that-were-last-two.html</link>
      <pubDate>Sat, 14 Aug 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;&amp;#8230; enjoy some lulz. Some Nirvana meets Jackson 5:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/JNUTYHJrutw' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/JNUTYHJrutw' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;And &amp;#8221;I&amp;#8217;m retarded, I guess&amp;#8221;:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/S7RlSTtXuNk' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/S7RlSTtXuNk' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Why do I enjoy this? A former music TA of mine summarized it best.&lt;br /&gt;&amp;#8220;This should not be.&amp;#8221;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Life isn't fair and Eat, Pray, Love</title>
      <link>http://www.morepaul.com/2010/08/life-isnt-fair-and-eat-pray-love.html</link>
      <pubDate>Thu, 12 Aug 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;One of the smartest people I know recently wrote a blog post on &lt;em&gt;Eat, Pray, Love&lt;/em&gt; and the backlash against it; the post was something of a defense against that backlash.&lt;/p&gt;

&lt;p&gt;She was speaking of a different type of backlash (namely women &lt;a href='http://jezebel.com/5610528/yogas-real-backlash'&gt;who&amp;#8217;ve taken up Yoga and Spirituality and suffered dearly&lt;/a&gt;), whereas I belong to another group that&amp;#8217;s pretty well known: guys who hate &lt;em&gt;Eat, Pray, Love&lt;/em&gt;. Hate is probably too strong a word, allow me to elaborate.&lt;/p&gt;

&lt;p&gt;First things first: no, I haven&amp;#8217;t read it. I probably won&amp;#8217;t, either, so feel free to add that to a long list of reasons to discredit or grain-of-salt this post, because there are a many. But my criticism isn&amp;#8217;t so much based on the book itself, which I&amp;#8217;m sure is fine, but on its cultural impact based on how I&amp;#8217;ve observed other people react to it.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll start by citing a tweet: when &lt;a href='http://scienceblogs.com/pharyngula/'&gt;PZ Myers&lt;/a&gt; was being criticized for being too mean to his opponents (calling them idiots, frauds, etc.), he more or less brushed it off. But then someone mentioned that many of his targets don&amp;#8217;t deserve it, as they&amp;#8217;re normally acting out of ignorance. &lt;a href='http://twitter.com/pzmyers/status/18273167053'&gt;His response&lt;/a&gt; floored me with how he could, in 140 characters, point it out so clearly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Deserve&amp;#8221; is a red herring. Life isn&amp;#8217;t fair, you don&amp;#8217;t get what you deserve&amp;#8230;just have to hope you get what you need.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My major problem with Eat, Pray, Love is that &lt;strong&gt;it is a product of - while bolstering - a vague, responsibility-absolving entitlement to &amp;#8220;happiness,&amp;#8221; comfort, &amp;#8220;enlightenment,&amp;#8221; and self-satisfaction. And that this is inevitable (you are a strong, wonderful person! You deserve it) and can be lots of fun!&lt;/strong&gt; Note that while this book is overwhelmingly more popular with women, my observation is that the previous point affects both men and women pretty hard. Tons of guys I know get distraught over the fact that they don&amp;#8217;t feel &lt;em&gt;good warm things&lt;/em&gt; all the time. I&amp;#8217;ll address the gender differential in the specific case of the book later.&lt;/p&gt;

&lt;p&gt;Maybe it&amp;#8217;s just from attending private school followed by Brown, but I&amp;#8217;m always observing people who are pretty lucky in their lives, are well- educated, but just don&amp;#8217;t &lt;em&gt;feel happy&lt;/em&gt;, and feel deep anguish that they don&amp;#8217;t know what the meaning of their lives are.&lt;/p&gt;

&lt;p&gt;I hate to burst your bubble, but you shouldn&amp;#8217;t. &amp;#8220;Happiness,&amp;#8221; &amp;#8220;inner peace,&amp;#8221; &amp;#8220;enlightenment&amp;#8221;&amp;#8230; these aren&amp;#8217;t finish lines. You won&amp;#8217;t reach a point in your life when you&amp;#8217;re like &lt;strong&gt;&lt;em&gt;BAM&lt;/em&gt;&lt;/strong&gt;! I&amp;#8217;m happy! Things are good! And I will never be insecure about my talents or role in the world again!&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s kind of like getting your first sexual urges in Middle School: sorry, but you will &lt;em&gt;always&lt;/em&gt; feel this way. You never reached a point in your life where you suddenly stopped getting horny. You just acknowledged the urges, and learned to deal with them, incorporating those feelings in your life in a more healthy, day-to-day way.&lt;/p&gt;

&lt;p&gt;Note that until you did, you struggled with the insecurities, exacerbated loneliness, and questions about sex and sexuality in society that came (lol) with those new sexual urges. It takes years (and some people never get there) to get over the social cattiness and mess that arises from those insecurities. There&amp;#8217;s a teething phase.&lt;/p&gt;

&lt;p&gt;Similarly, there are big points in your life when you feel miserable, and mostly, &lt;em&gt;untapped&lt;/em&gt;. You feel your life is shallow, you haven&amp;#8217;t made a dent in the world, your talents are unappreciated; you especially feel guilty that this bothers you because you are better off than many others.&lt;/p&gt;

&lt;p&gt;To which I say it&amp;#8217;s true: you are shallow, you&amp;#8217;re not impacting the world that hard, and there are people who are much worse off. &lt;strong&gt;But that&amp;#8217;s just life, and it&amp;#8217;s no weakness or inadequacy on your part. There isn&amp;#8217;t anything you&amp;#8217;re missing (or that you reasonably could do with any significant probability) to change any of it.&lt;/strong&gt; So learn to live with it, because, as we say in software, there is no silver bullet. Yoga might help, but probably won&amp;#8217;t. Same with eating in the long term.&lt;/p&gt;

&lt;p&gt;Though, here&amp;#8217;s the hardest one: you have no guarantee (or even an unofficial right to the prospect) of a magical person you find lovely, wonderful, and attractive will walk into your life and love you. &lt;em&gt;This might have nothing to do with how wonderful you are as a person; you can be the kindest, smartest person on Earth, and while this bumps up your odds a little, there&amp;#8217;s never a guarantee.&lt;/em&gt; You don&amp;#8217;t get what you deserve, just hope you get what you need.&lt;/p&gt;

&lt;p&gt;As to how &lt;em&gt;EPL&lt;/em&gt; fits in to all this, and why it bothers me: &lt;em&gt;EPL&lt;/em&gt; shows the story of someone we (privileged, educated unsatisfied people) can all relate to and shows her either crossing the finish line, or making giant, giant steps toward it. It (without meaning to) &lt;em&gt;exploited&lt;/em&gt; our misunderstandings and fetishism of Eastern Mysticism and Hot Ethnic Love Abroad and pushed desperate people wildly in that direction.&lt;/p&gt;

&lt;p&gt;I feel about Elizabeth Gilbert and her talks, writing (i.e. the magazine articles I&amp;#8217;ve read) the way I feel about most priests: you clearly believe what you preach and live pretty happily by doing so. You have every right to do it and I won&amp;#8217;t stop you. But overall, I happen to think your messages are snake oil/placebo, and ultimately takes us down further down a path I think we&amp;#8217;re already too far into.&lt;/p&gt;

&lt;p&gt;People then start looking at Yoga, travel, and Eastern Mysticism and get conned they way they do at &lt;a href='http://darryl-cunningham.blogspot.com/2010/06/homeopathy.html'&gt;homeopathy&lt;/a&gt;, or &lt;a href='http://gimpyblog.wordpress.com/2008/08/17/the-libellous-simon-singh-article-on-chiropractors/'&gt;chiropractors&lt;/a&gt; (note that I don&amp;#8217;t find the exercise component of Yoga nearly as toxic as those two. But lots of those &amp;#8220;gurus&amp;#8221;? Most definitely). I just wish people would stop looking for silver bullets, and I feel that &lt;em&gt;EPL&lt;/em&gt; puts a toy carrot in front of everyone.&lt;/p&gt;

&lt;p&gt;Regarding the gender difference: I think the book and its reception really highlights the impossible situation women are put into. See the &lt;a href='http://www.amptoons.com/blog/the-male-privilege-checklist/'&gt;Male Privilege Checklist&lt;/a&gt;: women are expected to be superbeings with contradictory measures of success, and we are taught that they &lt;em&gt;fail&lt;/em&gt; if they don&amp;#8217;t.&lt;/p&gt;

&lt;p&gt;So if you&amp;#8217;re a woman, you get told by society as a whole, implicitly and explicitly, that you&amp;#8217;re a failure or &amp;#8216;failing to perform&amp;#8217; much more often than guys. &lt;a href='http://alistairpott.com/2010/02/17/okcupid-statistics-on-older-women/'&gt;Guys like you a lot less, unreasonably soon.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Given all this, I find it not at all surprising that when you read a book that appeals to your wants and wishes, that &lt;em&gt;you too&lt;/em&gt; could go to &lt;em&gt;eat and pray and love&lt;/em&gt; and feel &lt;em&gt;warm and fuzzy and find what you&amp;#8217;ve lost and oh my god it&amp;#8217;s you!&lt;/em&gt;, that they love it. Again, guys fall for this mindframe too, but this book in particularly highlights the troubling situation women are in.&lt;/p&gt;

&lt;p&gt;Personally, I&amp;#8217;d rather put energy and resources in addressing the sexism in society, trying to prevent insecurity and doubt becoming a problem in the first place, rather than setting people up to fail by filling their heads with fantasies of ashrams and vague, impossible notions of fulfillment.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll end with a favorite quote. It comes from &lt;em&gt;_why the lucky stiff&lt;/em&gt;, &lt;a href='http://www.smashingmagazine.com/2010/05/15/why-a-tale-of-a-post-modern-genius/'&gt;a minor genius of our time&lt;/a&gt;, more or less prescribing what I think is the best way out of these loops of self-futility and doubt: create. Write plays, or short stories, or code, or fan fiction, or sand castles, or design model trains. Do something you care about and can share with people. Give back. As he says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When you don’t create things, you become defined by your tastes rather than ability. Your tastes only narrow and exclude people. so create.&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    
    <item>
      <title>Fooled</title>
      <link>http://www.morepaul.com/2010/07/fooled.html</link>
      <pubDate>Mon, 26 Jul 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Taken from &lt;a href='http://wanderingstan.com/2010-07-22/facebook-acquaintances-the-new-tv-stars'&gt;this post&lt;/a&gt;, this passage hit a bit close to home:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Since TV was invented, critics have pointed out the dangers of watching the perfect people who seem to inhabit the screen. They are almost universally beautiful, live in interesting places, do interesting work (if they work at all), are unfailingly witty, and never have to do any cleaning. They never even need to use the toilet. It cannot be psychologically healthy to compare yourself to these phantasms.&lt;/p&gt;

&lt;p&gt;So it’s interesting that social networks have inadvertently created the same effect, but using an even more powerful source. Instead of actors in Hollywood, the characters are people that you know to be real and have actually met. The editing is done not by film school graduates, but by the people themselves.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I confess: much of my Facebook/blogging/tweeting are the &amp;#8216;highlights,&amp;#8217; versions of myself that I&amp;#8217;m most proud of (or least ashamed of). I don&amp;#8217;t write about them often, but my life is plenty full of struggles, questions, insecurities and obstacles. I used to blog about those things (though, as if to foreshadow, I wrote very, very cryptically) over at &lt;a href='http://ilcapitano.livejournal.com'&gt;my old blog&lt;/a&gt;, which I kept between freshman and sophomore year of college.&lt;/p&gt;

&lt;p&gt;I don&amp;#8217;t think there&amp;#8217;s any shame, however, in just broadcasting your highlights. People comb their hair and check their teeth before they go out; they wear &lt;a href='http://www.buybootypop.com/scripts/cgiip.exe/WService=bootypop/story.html'&gt;Booty Pop&lt;/a&gt; panties and overblow their resumes. We&amp;#8217;ve always advertised what we think is our best believable narrative, and when we get hard pressed, we&amp;#8217;ll believe it, too.&lt;/p&gt;

&lt;p&gt;In only slightly related news, see &lt;a href='http://uglyoverload.blogspot.com/'&gt;a blog devoted to ugly animals&lt;/a&gt;. Also, &lt;a href='http://www.funnyordie.com/videos/4a87d48fdd/undercover-karaoke-with-jewel'&gt;check out Jewel singing her own songs at a karaoke bar to unsuspecting crowds.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kind of reminds me of Charlie Chaplin &lt;a href='http://www.snopes.com/movies/actors/chaplin2.asp'&gt;losing a Charlie Chaplin lookalike contest.&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>One of the more convincing arguments for atheism...</title>
      <link>http://www.morepaul.com/2010/07/one-of-more-convincing-arguments-for.html</link>
      <pubDate>Fri, 23 Jul 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;&amp;#8230; for me, anyways, was the size and scope of everything that has nothing to do with us. Statements like &lt;em&gt;&amp;#8220;If the whole history of the universe were as your arm span, you can eliminate the entire history of humanity with the scrape of a fingernail.&amp;#8221;&lt;/em&gt; (I can&amp;#8217;t find the official reference, but it&amp;#8217;s used in the irrelevant introduction to &lt;a href='http://railsconf.blip.tv/file/2089545/'&gt;this Ruby talk&lt;/a&gt;, until I can find the real one).&lt;/p&gt;

&lt;p&gt;If God existed, and cared at all about us, why would he also create &lt;em&gt;so much&lt;/em&gt; universe, and have it exist for &lt;em&gt;so much time&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;Even as someone who already feels this way, this graphic surprised me:&lt;/p&gt;

&lt;p&gt;&lt;a href='http://1.bp.blogspot.com/_3ys1dwfzc2w/TEo2AzYte4I/AAAAAAAAAGo/n0e1P_fj23s/s1600/stars_little.jpg'&gt;&lt;img src='http://1.bp.blogspot.com/_3ys1dwfzc2w/TEo2AzYte4I/AAAAAAAAAGo/n0e1P_fj23s/s320/stars_little.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can&amp;#8217;t see it, but to the left is our Sun. You really need to see &lt;a href='http://farm5.static.flickr.com/4138/4820647230_faba1c9f3b_o.jpg'&gt;the original image&lt;/a&gt;, and note that the Sun is represented by 1 pixel (the image itself is 10,173 pixels by 2500).&lt;/p&gt;

&lt;p&gt;Also remember that the Sun contains &lt;em&gt;99.99% of the matter in our galaxy.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In a related note, &lt;a href='http://www.scienceblogs.com/pharyngula'&gt;Pharyngula&lt;/a&gt; points us to some video added to Carl Sagan (kind of) on the matter.&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/p_naQhynOg0' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/p_naQhynOg0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>GADDAG and Capitalism</title>
      <link>http://www.morepaul.com/2010/07/gaddag-and-capitalism.html</link>
      <pubDate>Fri, 23 Jul 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I decided to revisit &lt;a href='http://github.com/paul-meier/ScrabbleCheat'&gt;ScrabbleCheat&lt;/a&gt; (took a break for administrivia), and wrote &lt;a href='http://en.wikipedia.org/wiki/GADDAG'&gt;my first Wikipedia article,&lt;/a&gt; on the data structure I&amp;#8217;m refitting it with, to celebrate. It&amp;#8217;s rare that you can write something on Wikipedia that isn&amp;#8217;t there, so I had to pounce.&lt;/p&gt;

&lt;p&gt;Hope I can keep editing it with diagrams and the like, as it&amp;#8217;s a little lame at the moment. Against my better other judgment, I&amp;#8217;m still writing it in Erlang ^_^&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Also, while I do believe in capitalism and it&amp;#8217;s ability to generate wealth, here are a few lame things from the last few days:&lt;/p&gt;

&lt;p&gt;* This infographic, &lt;a href='http://www.visualeconomics.com/what-bp-could-have-bought-with-all-the-money-they-lost/'&gt;What BP could have bought with all the money they lost&lt;/a&gt;, is striking. I&amp;#8217;m not so shocked that they lost all that money, but that they had it in the first place. &lt;em&gt;One&lt;/em&gt; company was worth all that cumulative wealth, what are the others who haven&amp;#8217;t had cataclysmic disasters worth? And what are they doing with it?&lt;/p&gt;

&lt;p&gt;* Then there&amp;#8217;s this: &lt;a href='http://www.thenation.com/article/37889/no-oligarchy'&gt;&amp;#8220;The 400 richest families in America, who saw their wealth increase by some $400 billion during the Bush years, have now accumulated $1.27 trillion in wealth.&amp;#8221;&lt;/a&gt; Their tax rate is also the lowest on record. But hey! They generated wealth, didn&amp;#8217;t they? Look at the economy now!&lt;/p&gt;

&lt;p&gt;* &lt;a href='http://www.perrspectives.com/blog/archives/001908.htm'&gt;Some&lt;/a&gt; &lt;a href='http://modeledbehavior.com/2010/07/22/income-inequality-a-deeper-look/'&gt;graphs&lt;/a&gt; visualizing the awful. Guys, something isn&amp;#8217;t working.&lt;/p&gt;

&lt;p&gt;Forgive the poor sound quality, but this Louis CK bit comes to mind:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/J0rSXjVuJVg' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/J0rSXjVuJVg' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>"Everything is Amazing Right Now and Nobody Is Happy."</title>
      <link>http://www.morepaul.com/2010/07/everything-is-amazing-and-nobody-cares.html</link>
      <pubDate>Thu, 22 Jul 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;This video (at least the middle segment on banks, flying) got a lot of coverage on some programmer blogs about a year ago, I&amp;#8217;m glad I finally found it again and can share it with you all:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/8r1CZTLk-Gk' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/8r1CZTLk-Gk' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;When he talks about the &amp;#8220;miracle of flying,&amp;#8221; I tend to feel that way about computers. Computers/Internet are a complete miracle, and the beautiful thing about studying Computer Science is that &lt;em&gt;I know how it&amp;#8217;s working and can contribute to it&lt;/em&gt;. Education is the best drug, because the euphoria never leaves. It&amp;#8217;s also a great reason to study science (not necessarily at the expense of Arts/Humanities).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Ben Stein is an idiot.</title>
      <link>http://www.morepaul.com/2010/07/ben-stein-is-idiot.html</link>
      <pubDate>Wed, 21 Jul 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;It&amp;#8217;s my blog, so I&amp;#8217;m free to feel smug and righteous as I like. Today, I&amp;#8217;ll target Ben Stein, mostly because a few days ago &lt;a href='http://spectator.org/archives/2010/07/19/the-end-of-wishful-thinking'&gt;he said&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The people who have been laid off and cannot find work are generally people with poor work habits and poor personalities. I say “generally” because there are exceptions. But in general, as I survey the ranks of those who are unemployed, I see people who have overbearing and unpleasant personalities and/or who do not know how to do a day’s work. They are people who create either little utility or negative utility on the job. Again, there are powerful exceptions and I know some, but when employers are looking to lay off, they lay off the least productive or the most negative. To assure that a worker is not one of them, he should learn how to work and how to get along &amp;#8211; not always easy.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Something was amiss though, and that&amp;#8217;s this: &lt;a href='http://www.nytimes.com/2009/01/25/business/25every.html'&gt;a little business editorial he wrote in 2009&lt;/a&gt; for the NYT that said, among other things:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NOT long ago, a woman in California called me for advice. She is divorced, with two children, and has a series of interlocking financial problems.&lt;/p&gt;

&lt;p&gt;She lives in a lovely home in a stylish inland enclave. It has an interest- only mortgage of about $2.2 million that requires a payment of $12,000 a month, very roughly. It was last appraised at $2.7 million, but who knows if it’s now worth anything remotely close to that price.&lt;/p&gt;

&lt;p&gt;The woman, whom I’ve known since she was a teenager, has no job or other remunerative employment. She has a former husband, an entrepreneur whose business has suffered recently. He pays her $20,000 a month, of which roughly half is alimony and half child support. The alimony is scheduled to stop this summer.&lt;/p&gt;

&lt;p&gt;She has a wealthy beau who pays her credit card bills and other incidentals, but she is thinking of telling him she is through with him. She has no savings and has refinanced her home repeatedly, always adding to indebtedness and then putting the money into a shop she owns that has never come close to earning a dime. Now she is up all night worrying about money. “Terrified,” as she put it. She wanted me to tell her what to do.&lt;/p&gt;

&lt;p&gt;What could I say? I did the best I could, but I had to tell her that she was on very thin ice.&lt;/p&gt;

&lt;p&gt;Ever since, I’ve been thinking of the troubles of this sweet woman, consumed with worry about money.&lt;/p&gt;

&lt;p&gt;[&amp;#8230;]&lt;/p&gt;

&lt;p&gt;And all of this is compounded again because my handsome son, age 21, a student, has just married a lovely young woman, 20. You may have seen on television the pudgy, aging face of their sole means of support.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yes kids, Ben Stein thinks unemployed people in the worst recession in US history since the Depression are, on the whole, lazy grumpy people who deserve no benefits (we just extended them, thankfully).&lt;/p&gt;

&lt;p&gt;But last year, he knew a sweet woman who doesn&amp;#8217;t work, living off her ex- husband in a 2 million dollar home receiving $20,000 a month. She has a current &amp;#8220;beau&amp;#8221; who&amp;#8217;d been paying her credit card debt and incidentals. And there&amp;#8217;s his son, recently married and with no other support but his father. These are &lt;em&gt;sad tales of desperate Americans.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Of course, all this is a product of a recession caused by subprimes &lt;a href='http://en.wikipedia.org/wiki/Ben_Stein#Financial_advice_prior_to_2008_stock_market_crash'&gt;he said&lt;/a&gt; would &amp;#8220;blow over and the people who buy now, in due time, will be glad they did.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Let&amp;#8217;s also not forget that he &amp;#8220;starred&amp;#8221; and &amp;#8220;wrote&amp;#8221; &lt;a href='http://en.wikipedia.org/wiki/Expelled:_No_Intelligence_Allowed'&gt;the Creationism documentary&lt;/a&gt; that failed by almost every observable metric.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://glenngreenwald.blogspot.com/2007/01/bill-kristol-pundit-superstar.html'&gt;Like Bill Kristol&lt;/a&gt;, this guy has a staggering habit of being wrong and unhelpful, on everything. The fact that he still gets &lt;em&gt;paid&lt;/em&gt; for his opinion or presence is staggering.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>MAGNETS, HOW DO THEY WORK?</title>
      <link>http://www.morepaul.com/2010/07/magnets-how-do-they-work.html</link>
      <pubDate>Sun, 18 Jul 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Let this be a myriad post with some of the trends that currently come up in this blog:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Music.&lt;/strong&gt; This was shown to me by a former roommate, and while acapella isn&amp;#8217;t normally my thing, I found this pretty hip:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/4om1rQKPijI' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/4om1rQKPijI' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Internet lulz.&lt;/strong&gt; I never really cared much for Insane Clown Posse (see &lt;a href='http://www.youtube.com/watch?v=9KxTUZ33gdM'&gt;this lame interview&lt;/a&gt;, where they manage to make &lt;em&gt;Bill O&amp;#8217;Reilly&lt;/em&gt; look like the slightly saner party). I had never been exposed to this, a 2009 release that compares to Brokencyde in claw-your-facedness:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/_-agl0pOQfs' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/_-agl0pOQfs' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;What makes this more notable is the &lt;a href='http://knowyourmeme.com/memes/f-cking-magnets-how-do-they-work'&gt;meme arising from&lt;/a&gt; the line &lt;em&gt;&amp;#8220;Fucking magnets, how do they work? And I don’t wanna talk to a scientist; Y’all motherfuckers lying, and getting me pissed.&amp;#8221;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Murrrrrrrrr.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;(&lt;strong&gt;edit:&lt;/strong&gt; Madly Brilliant throws me the link to an &lt;a href='http://www.hulu.com/watch/143249/saturday-night-live-outrageous-clown-squad-kickspit-dirt-festival'&gt;SNL parody&lt;/a&gt; of the video, which I found sufficiently lulzy).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Programming languages.&lt;/strong&gt; I like the tone and content of Mozilla&amp;#8217;s &lt;a href='https://developer.mozilla.org/en/a_re-introduction_to_javascript'&gt;&amp;#8220;A re- introduction to Javascript.&amp;#8221;&lt;/a&gt; While I don&amp;#8217;t love everything Douglas Crockford writes, but I agree with him in that there&amp;#8217;s a beautiful language trapped deep inside Javascript trying to get out. This helps us get there.&lt;/p&gt;

&lt;p&gt;Also, reddit has started &lt;a href='http://www.reddit.com/r/UniversityofReddit/comments/clu38/class_languages_and_lambdas_the_mathemagic_of/'&gt;a mini-course on programming language math and formal specification/semantics&lt;/a&gt;. While it&amp;#8217;s too early to tell how successful it will be, I&amp;#8217;m rooting for it!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;I have lots more to write about in the coming days: soon I move to San Francisco, and I just took a trip to the Midwest. Now though, I have to pack!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On Freedom of Speech</title>
      <link>http://www.morepaul.com/2010/07/on-freedom-of-speech.html</link>
      <pubDate>Thu, 08 Jul 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Back in DC, my family is hosting an international student for a few days as part of a summer program, and she had a wonderful conversation with us regarding her faith and country. She&amp;#8217;s a Muslim, and her progressiveness, eloquence, and intelligence really gives a jaded, disillusioned person like myself hope for the future.&lt;/p&gt;

&lt;p&gt;That being said, she brought up &lt;a href='http://en.wikipedia.org/wiki/Everybody_Draw_Mohammed_Day'&gt;Everyone Draw Mohammed Day&lt;/a&gt;, clearly unhappy with it, and attributing it to Muslim hatred, as this came up in the context of post-9/11 hatred in the United States.&lt;/p&gt;

&lt;p&gt;I attribute her reaction mostly to the press in her country, which was inaccurate and unfavorable (her description of it had factual errors, and she didn&amp;#8217;t really address the cause). It wasn&amp;#8217;t the time or place for me to defend it in person. But as &lt;a href='http://www.morepaul.com/2010/05/everyone-draw-mohammed.html'&gt;a participant&lt;/a&gt;, allow me to go into detail.&lt;/p&gt;

&lt;p&gt;First, watch this 1:25 video of Phillip Pullman, author of &lt;em&gt;His Dark Materials&lt;/em&gt;, discussing the offense caused by the title of his new book &lt;em&gt;The Good Man Jesus and the Scoundrel Christ&lt;/em&gt;:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/HQ3VcbAfd4w' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/HQ3VcbAfd4w' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Yes, it was a shocking thing to say, and I knew it was a shocking thing to say. But no one has the right to live without being shocked. No one has the right to spend their life without being offended. Nobody &lt;em&gt;has&lt;/em&gt; to read this book. Nobody has to pick it up. Nobody has to open it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And if they open it and read it, they don&amp;#8217;t have to like it. And if you read it and dislike it you don&amp;#8217;t have to remain silent about it; you can write to me, you can complain about it, you can write to the publisher, you can write to the papers, you can write your own book.&lt;/p&gt;

&lt;p&gt;You can do all those things, but there your rights stop. No one has the right to stop me writing this book, no one has the right to stop it being published, or sold, or bought, or read. And that&amp;#8217;s all I have to say on that subject.&lt;/p&gt;

&lt;p&gt;I participated to condemn acts of violence upon those who were exercising their rights to free speech. Again, if you don&amp;#8217;t like what I produce, you can &lt;em&gt;choose&lt;/em&gt; not to consume it, and you can choose to argue with me about it, you can post rebuttals, and we can have a free exchange of ideas.&lt;/p&gt;

&lt;p&gt;Victims of violence get no such choice. &lt;a href='http://www.newmancollege.ac.in/faculty.htm'&gt;This professor of Mayalayam&lt;/a&gt;, a language of India, did not &lt;em&gt;choose&lt;/em&gt; &lt;a href='http://timesofindia.indiatimes.com/india/Alleging-blasphemy-fanatics-hack-lecturers-hand/articleshow/6129146.cms'&gt;to have his hand cut off&lt;/a&gt; when in a simple language exam (&amp;#8220;find the grammar errors in this passage&amp;#8221;) &lt;a href='http://www.asianews.it/news-en/Kerala,-hand-severed-of-Christian-Professor-accused-of-blasphemy-18843.html'&gt;he used the name Mohammed for a character&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://en.wikipedia.org/wiki/Theo_van_Gogh_(film_director)'&gt;Theo van Gogh&lt;/a&gt; did not choose to get killed. &lt;a href='http://www.aolnews.com/world/article/muhammad-cartoonist-lars-vilks-attacked-during-college-lecture/19473427'&gt;Lars Vilks&lt;/a&gt; didn&amp;#8217;t choose to get attacked.&lt;/p&gt;

&lt;p&gt;To any who say or believe these victims &amp;#8220;chose their fates by their actions&amp;#8221;: you are agreeing with murderers and barbarians on the tactics used, and wish to stifle free speech. It is comparable to blaming rape victims for their rapes. That is not an opinion, it is a fact. &lt;strong&gt;In what twisted world is the appropriate punishment for saying something, drawing something, or singing something &lt;em&gt;death and/or mutilation&lt;/em&gt;?&lt;/strong&gt; No, these victims didn&amp;#8217;t choose this in the way someone &lt;em&gt;offended&lt;/em&gt; by the content of a blog can just choose not to look at it. If the appropriate response to a question or an idea is aggression, than your ideas are weak, you have the mind of an 8-year old, and you live in the 12th century.&lt;/p&gt;

&lt;p&gt;On a larger point, &lt;strong&gt;no topic of discussion should be off the table because some arbitrary group of people doesn&amp;#8217;t want it discussed.&lt;/strong&gt; By this (lack of) logic, suppose I have billions of followers and I &lt;em&gt;demand&lt;/em&gt; and &lt;em&gt;order the killing of&lt;/em&gt; anybody who uses the letter &amp;#8220;v&amp;#8221;. Suppose you used &amp;#8220;v&amp;#8221;. Better, suppose I just thought you used &amp;#8220;v,&amp;#8221; when you feel like you didn&amp;#8217;t. Would you &lt;em&gt;actually&lt;/em&gt; deserve death?&lt;/p&gt;

&lt;p&gt;While the arbitrary selection of a letter in the alphabet is ridiculous to almost everyone, to a large number of people in the world like myself it&amp;#8217;s just as ridiculous as depictions of a man who lived over a thousand years ago.&lt;/p&gt;

&lt;p&gt;To be clear, our student &lt;em&gt;does not agree&lt;/em&gt; with any of the violence propagated by murderers, barbarians, and extremists, and is as quick to condemn them as I am. But she (like many progressive, modern Muslims) was still angered by Everyone Draw Mohammed Day.&lt;/p&gt;

&lt;p&gt;To her, and the rest: &lt;strong&gt;take back your religion.&lt;/strong&gt; It&amp;#8217;s easy to pass the buck by calling the perpetrators &amp;#8220;not real Muslims,&amp;#8221; and mentioning that Islam is primarily about Peace and Tolerance, etc., but it is cold comfort to those of us who feel threatened (not &lt;em&gt;offended&lt;/em&gt;, mind you, which we can deal with) by people justifying their actions by citing &lt;a href='http://en.wikipedia.org/wiki/Hadith'&gt;hadith&lt;/a&gt; and the Koran. As long as a bunch of idiots are going to threaten me and my peers in the name of your religion, I and others will do what we can to point out the absurdity. Please, &lt;strong&gt;fight &lt;em&gt;them&lt;/em&gt;, don&amp;#8217;t fight &lt;em&gt;me&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My choice to participate was not because &amp;#8220;I hate Muslims,&amp;#8221; it was because &amp;#8220;I hate those people calling themselves Muslims who are threatening me for exercising free speech.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Also, remember I&amp;#8217;m an equal-opportunity blasphemer. See &lt;a href='http://www.morepaul.com/2010/04/i-read-news.html'&gt;this post&lt;/a&gt; on Christianity in the news, with this favorite video of mine (language NSFW):&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/fHRDfut2Vx0' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/fHRDfut2Vx0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;I&amp;#8217;ll close with a buddy, Bill Maher, who states it simply: &lt;strong&gt;Freedom of Speech is non-negotiable.&lt;/strong&gt; This isn&amp;#8217;t uniquely Muslim hatred; if it were Buddhists we&amp;#8217;d be pissing off Buddhists, if it was McDonalds we&amp;#8217;d be protesting McDonalds.&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/HmpM-b-IsYY' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/HmpM-b-IsYY' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;(Also, for those who missed it, &lt;a href='http://en.wikipedia.org/wiki/Boobquake'&gt;Boobquake!&lt;/a&gt;).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Languages to describe Languages</title>
      <link>http://www.morepaul.com/2010/07/languages-to-describe-languages.html</link>
      <pubDate>Tue, 06 Jul 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;We&amp;#8217;re in a beautiful, exciting, and unsustainable time in programming languages.&lt;br /&gt;For any combination of features you could want, someone&amp;#8217;s made or making an interpreter/VM for you. Want dynamic message passing and objects (but Objective-C doesn&amp;#8217;t give you enough functional features)? Try &lt;a href='http://bracha.org/Site/Newspeak.html'&gt;Newspeak&lt;/a&gt;. Want Ruby syntaxed immutable objects with Erlang&amp;#8217;s concurrency model? Try &lt;a href='http://wiki.reia-lang.org/wiki/Reia_Programming_Language'&gt;Reia&lt;/a&gt;. Hell, did you Perl programmers feel left out of the JVM after the success of &lt;a href='http://www.jython.org/'&gt;Jython&lt;/a&gt; and &lt;a href='http://jruby.org/'&gt;JRuby&lt;/a&gt;? Someone made a &lt;a href='http://sleep.dashnine.org/'&gt;JVM-styled Perl called Sleep.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I remember wondering what my contribution could be and thinking &lt;em&gt;I love Ruby programming, with true object-orientation, but miss ML/Haskell type systems and inference. What if I could make a concise, type-inferred Object-Oriented language?&lt;/em&gt; Then I found &lt;a href='http://www.scala-lang.org/'&gt;Scala&lt;/a&gt; had already been made.&lt;/p&gt;

&lt;p&gt;Reading so many new language pages, I notice that lots of older languages getting referenced to describe the current one. Carlos Fuentes pointed out that Guatemala used to be called &amp;#8220;The Paris of the Americas&amp;#8221; (he also pointed out that France did not return the favor and call Paris &amp;#8220;The Guatemala of Europe&amp;#8221;), and there are a few specific languages that get to be Paris most often.&lt;/p&gt;

&lt;p&gt;The ones I see most are&amp;#8230;&lt;/p&gt;

&lt;p&gt;* &lt;strong&gt;Smalltalk&lt;/strong&gt;. When you see this it normally means the referencing language has dynamic message passing, or &lt;em&gt;actual&lt;/em&gt; object-oriented programming where everything is an object (Recall C++/Java/Objective-C have primitives).&lt;/p&gt;

&lt;p&gt;What they &lt;em&gt;don&amp;#8217;t&lt;/em&gt; mean, which is a major part of Smalltalk culture, is programming in &amp;#8216;an image.&amp;#8217; Newspeak, mentioned above, runs on &lt;a href='http://www.squeak.org/'&gt;Squeak&lt;/a&gt;, the open-source image-based Smalltalk development environment. I&amp;#8217;ve never developed in an image so I can&amp;#8217;t really speak for it, but for those more comfortable with files, there&amp;#8217;s &lt;a href='http://smalltalk.gnu.org/'&gt;GNU Smalltalk,&lt;/a&gt; which I finally got running.&lt;/p&gt;

&lt;p&gt;* &lt;strong&gt;Self&lt;/strong&gt;. It&amp;#8217;s kind of funny seeing this get so much love, after Javascript got so much hate. But apparently prototypical objects are all the rage, with projects like &lt;a href='http://iolanguage.com/'&gt;Io&lt;/a&gt;, &lt;a href='http://nekovm.org/'&gt;Neko&lt;/a&gt;, and &lt;a href='http://slatelanguage.org/'&gt;Slate&lt;/a&gt;. This usually means supporting &lt;a href='http://en.wikipedia.org/wiki/Prototype-based_programming'&gt;Prototype-based objects&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;* &lt;strong&gt;Lua&lt;/strong&gt;. This seems to mean &amp;#8220;will be well-executed, lightweight, and hopes to get used in industry!&amp;#8221; Feels like name-dropping when I see it.&lt;/p&gt;

&lt;p&gt;* &lt;strong&gt;Lisp&lt;/strong&gt;. I think this just means &amp;#8220;feels flexible,&amp;#8221; since the defining feature of the myriad of Lisp languages is homoiconic syntax, allowing for rich macro programming. Using &amp;#8220;Lisp&amp;#8221; as a signpost is a little lame since, if you had it homoiconic syntax, it would make your language a Lisp. Using &amp;#8220;Lisp&amp;#8221; in place of better terms reminds me of terms like &lt;a href='http://www.morepaul.com/2010/06/type-systems-from-1000-feet-high.html'&gt;&amp;#8220;strong typing.&amp;#8221;&lt;/a&gt; &lt;em&gt;Murrrrrr&amp;#8230;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;To go with the flexible vibe, they probably also mean dynamic types + garbage collection, which Lisps did pioneer way back when. But those features are everywhere now.&lt;/p&gt;

&lt;p&gt;What languages do you &lt;em&gt;never&lt;/em&gt; see anymore? &lt;a href='http://en.wikipedia.org/wiki/Prolog'&gt;Prolog&lt;/a&gt;, &lt;a href='http://www.forth.org/'&gt;Forth&lt;/a&gt; (except the very nice-looking &lt;a href='http://factorcode.org/'&gt;Factor&lt;/a&gt;), or &lt;a href='http://stackoverflow.com/questions/43713/what-do-you-think-about-the-eiffel-programming-language'&gt;Eiffel&lt;/a&gt;. That&amp;#8217;s too bad, these had some fun ideas.&lt;/p&gt;

&lt;p&gt;What language feature/system do I feel needs to make a resurgence? Proper module systems, like &lt;a href='http://en.wikipedia.org/wiki/Standard_ML#Module_system'&gt;SML.&lt;/a&gt; I find most module systems a royal pain, and SML is no exception. But once you figure it out, you really can (provably!) &amp;#8216;program in the large.&amp;#8217;&lt;/p&gt;

&lt;p&gt;Finally, what hope is there for us polyglots to do development in these languages? Aside from &lt;a href='http://llvm.org/'&gt;LLVM&lt;/a&gt;, maybe there&amp;#8217;s a good graduate research project-in-waiting trying to bridge the gap between these guys.&lt;/p&gt;

&lt;p&gt;That&amp;#8217;s enough bloviation for now. Now let&amp;#8217;s write some code.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>I WANT AN IPHONE 4!!!!</title>
      <link>http://www.morepaul.com/2010/07/i-want-iphone-4.html</link>
      <pubDate>Mon, 05 Jul 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;This was done by a Best Buy employee, who almost certainly got fired afterwards. I lolled.&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/FL7yD-0pqZg' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/FL7yD-0pqZg' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;It&amp;#8217;s not &lt;em&gt;just&lt;/em&gt; the sentiments about the iPhone in particular, but the &amp;#8220;Facts vs. Stupid&amp;#8221; frustration that makes this a winner.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Link Aggregation - Paul Edition</title>
      <link>http://www.morepaul.com/2010/07/link-aggregation-paul-edition.html</link>
      <pubDate>Thu, 01 Jul 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I don&amp;#8217;t get much feedback on the blog, but the little I get is usually something along the lines of &lt;em&gt;I would read it more, but you don&amp;#8217;t write about don&amp;#8217;t write about anything &lt;strong&gt;interesting&lt;/strong&gt;&amp;#8230;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;What is usually meant by this is that the blog isn&amp;#8217;t very personal: I don&amp;#8217;t write much about my feelings, my ups-and-downs, my relationships or my struggles. Most of my writing is either esoteric (code, old video games, etc) or at arms length from my actual life.&lt;/p&gt;

&lt;p&gt;I try to make up for this by &lt;a href='http://www.morepaul.com/2010/06/terrible-wonderful-music-videos.html'&gt;introducing&lt;/a&gt; &lt;a href='http://www.morepaul.com/2010/05/funny-images.html'&gt;snippets of&lt;/a&gt; &lt;a href='http://www.morepaul.com/2010/04/baal-bless-internet.html'&gt;internet culture&lt;/a&gt; here, since only a few people I&amp;#8217;ve ever met trawl the internet as much and as eagerly as I do. On a typical day I view dozens of images and read a bunch of articles, here&amp;#8217;s a small sampling of the fun and/or interesting things I&amp;#8217;ve seen today:&lt;/p&gt;

&lt;p&gt;&lt;a href='http://3.bp.blogspot.com/_3ys1dwfzc2w/TC1RIM-riMI/AAAAAAAAAGQ/NWP0MS5s1v4/s1600/tumblr_l4tthpOdKB1qbauyyo1_500.jpg'&gt;&lt;img src='http://3.bp.blogspot.com/_3ys1dwfzc2w/TC1RIM-riMI/AAAAAAAAAGQ/NWP0MS5s1v4/s320/tumblr_l4tthpOdKB1qbauyyo1_500.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href='http://teapartyjesus.tumblr.com'&gt;Tea Party Jesus:&lt;/a&gt;&lt;/strong&gt;The words of proselytizing, proud Christians coming from Jesus himself. Nothing I&amp;#8217;ve seen so humorously and clearly demonstrates the disconnect between most Christians and the teachings of Jesus. Do you know who said the one above? (answer at the bottom, click to enlarge)&lt;/p&gt;

&lt;p&gt;&lt;a href='http://1.bp.blogspot.com/_3ys1dwfzc2w/TC1R4Gk55II/AAAAAAAAAGY/KjgIxfj3zIQ/s1600/tumblr_l4mwveibsB1qbp9v2.jpg'&gt;&lt;img src='http://1.bp.blogspot.com/_3ys1dwfzc2w/TC1R4Gk55II/AAAAAAAAAGY/KjgIxfj3zIQ/s320/tumblr_l4mwveibsB1qbp9v2.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href='http://catalogliving.tumblr.com/'&gt;Catalog Living&lt;/a&gt;&lt;/strong&gt; Wherein funny captions are giving to home catalog pictures as if someone were living in them. The one above is &amp;#8220;Elaine wasn’t about to let some hot flashes get in the way of balancing the checkbook with the abacus.&amp;#8221;.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://2.bp.blogspot.com/_3ys1dwfzc2w/TC1SUuDckCI/AAAAAAAAAGg/h73He4HYUYE/s1600/capt80920d010ff54ab284c.jpg'&gt;&lt;img src='http://2.bp.blogspot.com/_3ys1dwfzc2w/TC1SUuDckCI/AAAAAAAAAGg/h73He4HYUYE/s320/capt80920d010ff54ab284c.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href='http://www.turtleseatingthings.com/'&gt;Turtles Eating Things.&lt;/a&gt;&lt;/strong&gt; Awesome.&lt;/p&gt;

&lt;p&gt;I know very little about Twilight, but &lt;a href='http://io9.com/5576956/why-team-jacob-always-has-to-lose-in-twilight?skyline=true&amp;amp;s=i'&gt;this article on why Jacob has to lose&lt;/a&gt; was more interesting than it deserved to be (and highlights some of Twilight&amp;#8217;s out-of-control traditionalist undertones).&lt;/p&gt;

&lt;p&gt;&lt;a href='reddit.com'&gt;Reddit&lt;/a&gt; is the source of so much fun and humor, images especially. &lt;a href='http://i.imgur.com/9G5KS.jpg'&gt;How to troll your baby.&lt;/a&gt; Apple awesomeness in &lt;a href='http://i.imgur.com/1JMIU.jpg'&gt;what I do in my lunch hour&lt;/a&gt;. An epic &lt;a href='http://www.reddit.com/r/funny/comments/ckwh4/'&gt;clean joke thread&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Meanwhile, a NFSW paragraph: an equally epic &lt;a href='http://www.reddit.com/r/funny/comments/ckyxi/reddit_i_think_its_about_time_we_had_another/'&gt;dirty joke thread.&lt;/a&gt; A NSFW &lt;a href='http://i.imgur.com/9Bv62.jpg'&gt;&amp;#8220;I wish I were Mario&amp;#8221; image&lt;/a&gt; that I really, really enjoyed. This YouTube video, also on &lt;a href='http://andrewsullivan.theatlantic.com'&gt;Sullivan:&lt;/a&gt;&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/PSEYXWmEse8' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/PSEYXWmEse8' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;There&amp;#8217;s more, but those were some of the cream from today. This doesn&amp;#8217;t include coding articles, etc. Hopefully these posts containing lots of internets keep this more entertaining ^_^&lt;/p&gt;

&lt;p&gt;Jesus answer: Who else? Glenn Beck.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Coding socially</title>
      <link>http://www.morepaul.com/2010/06/coding-socially.html</link>
      <pubDate>Mon, 28 Jun 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I decided to finally get a &lt;a href='https://github.com/'&gt;GitHub&lt;/a&gt; account, since I&amp;#8217;ve downloaded countless great software from it, and think it&amp;#8217;s about time I joined/gave back. So check out &lt;a href='http://github.com/paul-meier'&gt;my profile,&lt;/a&gt; feel free to be my friend (or follow my project[s], whatever it is&amp;#8230;), and check out my first &amp;#8220;release&amp;#8221; of a side project, a program to &lt;a href='http://github.com/paul-meier/ScrabbleCheat'&gt;help you cheat in Scrabble!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.thescrabbler.com/'&gt;Many&lt;/a&gt; &lt;a href='http://spod.cx/cheat-o-matic.shtml'&gt;other&lt;/a&gt; Scrabble cheaters have been written, but &lt;em&gt;mine&lt;/em&gt; is in a silly functional language! Also, I have plans to make it more than just an anagram/word generator, even though that&amp;#8217;s all this release contains. You&amp;#8217;ll need &lt;a href='http://www.erlang.org/download.html'&gt;an Erlang VM&lt;/a&gt; to run it.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll also mention I have &lt;a href='https://bitbucket.org/paul.meier'&gt;a BitBucket account,&lt;/a&gt; but no public repositories. &lt;a href='http://brownandroidattack.blogspot.com/'&gt;My video games group&lt;/a&gt; used Mercurial, so now that two of us have graduated we moved our project to BitBucket. I put &lt;a href='http://www.morepaul.com/2010/05/my-first-game-is-on-android-market.html'&gt;Rat Race&lt;/a&gt; and &lt;a href='http://www.morepaul.com/2010/03/games.html'&gt;FlipTile&lt;/a&gt; on there as private repos. If you&amp;#8217;d like to friend, follow, or want access to those codebases, let me know ^_^&lt;/p&gt;

&lt;p&gt;Finally, though this is on the sidebar, &lt;a href='http://stackoverflow.com/users/196469/paul-meier'&gt;I&amp;#8217;m also on Stack Overflow.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(the pic is my &lt;a href='http://en.gravatar.com/'&gt;Gravatar&lt;/a&gt;, used in all these sites; a picture taken when I was in Guatemala last year, with much longer hair and a budding beard. I think it&amp;#8217;s one of the few pictures that&amp;#8217;s not unflattering with that style. I look a bit different now.)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Video Games, and the failure of the word "Art" Redux</title>
      <link>http://www.morepaul.com/2010/06/video-games-and-failure-of-word-art.html</link>
      <pubDate>Sun, 27 Jun 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;&lt;strong&gt;UPDATE (7/20/10):&lt;/strong&gt; A little old, but &lt;a href='http://blogs.suntimes.com/ebert/2010/07/okay_kids_play_on_my_lawn.html'&gt;Ebert closes the book&lt;/a&gt; by saying that, while he still thinks he&amp;#8217;s right, he shouldn&amp;#8217;t have brought it up in the first place. He essentially says &amp;#8221;I&amp;#8217;m not wrong, but I can&amp;#8217;t explain why I feel that I&amp;#8217;m right.&amp;#8221; It&amp;#8217;s actually a pretty nice piece.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;I &lt;a href='http://www.morepaul.com/2010/04/video-games-and-failure-of-word-art.html'&gt;wrote about&lt;/a&gt; Ebert et. al. being naive and/or lame when they don&amp;#8217;t allow games to be art. This great little reddit thread &lt;a href='http://www.reddit.com/r/gaming/comments/cjjht/saddest_moment_in_a_game/'&gt;&amp;#8220;Saddest moment in a game?&amp;#8221;&lt;/a&gt; shows that, like &lt;a href='http://www.nytimes.com/2010/06/20/books/review/Suellentrop-t.html'&gt;the NYT summarizes rather well&lt;/a&gt;, it&amp;#8217;s more a generational misunderstanding of what &amp;#8216;art&amp;#8217; should mean rather than one rooted in any actual thinking. See how many you&amp;#8217;ve encountered yourself!&lt;/p&gt;

&lt;p&gt;At the very least, I see how deficient I am for not having played any Metal Gear Solid beyond the first (which was &lt;em&gt;excellent&lt;/em&gt;). Also glad Majora&amp;#8217;s Mask is &lt;a href='http://www.reddit.com/r/gaming/comments/cjjht/saddest_moment_in_a_game/c0t13eh'&gt;getting a fair bit of love&lt;/a&gt; in that thread; it&amp;#8217;s the masterpiece nobody&amp;#8217;s played, like Skies of Arcadia.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Terrible, Wonderful Music Videos</title>
      <link>http://www.morepaul.com/2010/06/terrible-wonderful-music-videos.html</link>
      <pubDate>Fri, 25 Jun 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Here&amp;#8217;s a bunch. The first is probably the most cringe-worthy. This is why the terrorists hate us.&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/ubfWnIid5J8' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/ubfWnIid5J8' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Here&amp;#8217;s another:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/N8F5YSA1Oz0' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/N8F5YSA1Oz0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Now for some non-crappy ones.&lt;/p&gt;

&lt;p&gt;Embedding disabled by request, so you&amp;#8217;ll have to &lt;a href='http://www.youtube.com/watch?v=WsQhuxPsSjE'&gt;follow the link&lt;/a&gt; for the first one. It&amp;#8217;s a group called Skindred my former housemate showed me, a group that combines reggae and metal, of all things. I think it works pretty well here.&lt;/p&gt;

&lt;p&gt;This one is &lt;em&gt;awful&lt;/em&gt;, but I &lt;em&gt;love&lt;/em&gt; it:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/x47NYUbtYb0' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/x47NYUbtYb0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;&amp;#8220;El Sonidito&amp;#8221; means &amp;#8220;the little sound.&amp;#8221; To quote my brother, who showed it to me: &amp;#8220;You need to play this at your next party. I&amp;#8217;ve never seen a cooler bunch of moderately looking guys. Also, I&amp;#8217;ve never seen anyone look so cool playing one note on the cheap keyboard.&amp;#8221;&lt;/p&gt;

&lt;p&gt;The funny/sad thing is, this took off and got way popular. They made a &lt;a href='http://www.youtube.com/watch?v=-l92QRJPaqk&amp;amp;feature=channel'&gt;&amp;#8220;real&amp;#8221; music video&lt;/a&gt; with actors, a plot, unexplainable Hot Dancing Women&amp;#8230; and it sucks. I like the other one so much better.&lt;/p&gt;

&lt;p&gt;On this blog&amp;#8217;s &lt;a href='http://www.morepaul.com/2010/04/baal-bless-internet.html'&gt;theme of&lt;/a&gt; &lt;a href='http://www.morepaul.com/2010/04/another-remix.html'&gt;remixes&lt;/a&gt;, we&amp;#8217;ve got a great, Bootsie-sounding one of Mr. Plow:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/5-qYVSw2dw0' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/5-qYVSw2dw0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;When I first heard this, I was underwhelmed. They &lt;a href='http://www.colbertnation.com/the-colbert-report-videos/239946/july-27-2009/movits-'&gt;were on the Colbert Report&lt;/a&gt; (as their record is released by Comedy Central, and what better way to promo them?). Still, after a bunch of listens, it&amp;#8217;s pretty hip:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/LnaeImQ0TSg' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/LnaeImQ0TSg' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Finally, we&amp;#8217;ll round out this tour with a little Pitbull, lest we get too classy:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/G7Lyka8Znes' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/G7Lyka8Znes' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;It&amp;#8217;s more there as a contrast; I sometimes forget what machismo pop culture is like. Also, it&amp;#8217;s damn catchy.&lt;/p&gt;

&lt;p&gt;(I wanted to make a PL parody of this. &amp;#8221;&lt;a href='http://miranda.org.uk/'&gt;Miranda&lt;/a&gt; she gets LAZY, &lt;a href='http://haskell.org/'&gt;Haskell&lt;/a&gt; it is LAZY, the &lt;a href='http://en.wikipedia.org/wiki/Bash_(Unix_shell)'&gt;Bash Shell&lt;/a&gt; it is LAZY, &lt;a href='http://clean.cs.ru.nl/'&gt;Clean language&lt;/a&gt; it is LAZY,&amp;#8230;, Now &lt;a href='http://en.wikipedia.org/wiki/Thunk#Functional_programming'&gt;thunk it&lt;/a&gt; let&amp;#8217;s get LAZY, thunk it let&amp;#8217;s get LAZY&amp;#8230;&amp;#8221;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE (6/26/2010):&lt;/strong&gt; This one, in the &amp;#8216;awful&amp;#8217; category, comes from Saurya, though I find it much less an offender than the first two:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/ckMvj1piK58' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/ckMvj1piK58' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;I would also place this in less-than-wildly-lame, only moderately-lame-but- lovably-comical! It&amp;#8217;s dubiously dubbed Crabcore since they stand like crabs to look hardcore. Gotta love the sweet Techno Dance Hall interlude near the end.&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/KDzt6yI3Dw8' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/KDzt6yI3Dw8' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Playing Video Games Again</title>
      <link>http://www.morepaul.com/2010/06/playing-video-games-again.html</link>
      <pubDate>Wed, 23 Jun 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;A brief summary of my video gaming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When I was 3, I started on NES games. From there on in, I played almost exclusively console games until I was about 14.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;* A friend of mine from high school introduced me to &lt;a href='http://us.blizzard.com/en-us/games/war3/index.html?rhtml=y'&gt;Warcraft III&lt;/a&gt;, so I played that a bit. I was terrible. I more or less stopped playing games, except for Warcraft III, and &lt;a href='http://en.wikipedia.org/wiki/Super_Smash_Bros._Melee'&gt;Super Smash Bros. Melee&lt;/a&gt;. I flirted with the DC area of &lt;a href='http://www.smashboards.com/'&gt;the high-level Melee scene, and got murdered&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;* In college, I played Warcraft my first year. Found the competitive gaming scene, and a great site for &lt;a href='http://www.wcreplays.com'&gt;competitive Warcraft.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;* I didn&amp;#8217;t play for the four years following.&lt;/p&gt;

&lt;p&gt;I mostly mention this because starting a few weeks ago, I started playing again. This has partially to do with my &lt;a href='http://www.morepaul.com/2010/05/my-last-study-break.html'&gt;madly brilliant neuroscience friend&lt;/a&gt; (now, girlfriend ^_^), and let me say, I&amp;#8217;m glad to be back.&lt;/p&gt;

&lt;p&gt;You see, &lt;strong&gt;video games are the closest thing I have to sports&lt;/strong&gt;, at least the role sports are usually cast in, in both participation and viewing. I&amp;#8217;ll contrast with my dad: he can go to bars and talk about why X trade was good for the Nationals, or to discuss Jordan&amp;#8217;s very brief career with the Wizards.&lt;/p&gt;

&lt;p&gt;I don&amp;#8217;t know enough about my teams to do this, but I can talk about why I prefer watching &lt;a href='http://www.gosugamers.net/warcraft/rankings/755'&gt;ReMinD&lt;/a&gt; over &lt;a href='http://www.gosugamers.net/warcraft/rankings/615'&gt;Moon&lt;/a&gt;, or why I still play &lt;a href='http://classic.battle.net/war3/nightelf/units/demonhunter.shtml'&gt;solo DH&lt;/a&gt; against most races. And while my dad likes to DVR games and watch them before bed, I love loading up a good replay to end the day.&lt;/p&gt;

&lt;p&gt;But also as a player, video games give me something to work on and master. This video is a bit long, and is good apart from this specific point, but describes what I&amp;#8217;m trying to very well:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/u6XAPnuFjJc' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/u6XAPnuFjJc' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Namely, that we enjoy doing things and getting good at them, for giggles. Like practicing your foul shots, there&amp;#8217;s a great feeling that comes from getting better at games.&lt;/p&gt;

&lt;p&gt;Luckily for me, I feel these things about programming too. But video games have a softer learning curve (there&amp;#8217;s SO MUCH to computer science and programming) and aren&amp;#8217;t going to be my job.&lt;/p&gt;

&lt;p&gt;With all that said, for those who don&amp;#8217;t know and love the pro scene already, here are a few videos that may illuminate. The first two are favorites: (context: in Korea, Starcraft games are televised, with many professional players. Luckily for us, the announcers learned from Latin American Soccer Announcers rather than the dry English-speaking ones. Here&amp;#8217;s an epic casting of Plague, a Zerg spell):&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/Vpuv7VPb2rA' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/Vpuv7VPb2rA' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;A similar description of the death of a Reaver (count how often they say it):&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/msSvZPZXwJU' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/msSvZPZXwJU' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Some Pro Smash (Melee), for those who&amp;#8217;ve never seen it:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/quwGWPUGyHM' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/quwGWPUGyHM' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Finally, a great epic game between my favorite Terran and Zerg players in the Starcraft 2 beta &lt;em&gt;that has been shoutcasted&lt;/em&gt;. Skip around if you don&amp;#8217;t watch the whole thing (which you won&amp;#8217;t ^_^. The game starts at 3:05):&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/93fn2VsUyDo' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/93fn2VsUyDo' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Type Systems, From 1000 feet high</title>
      <link>http://www.morepaul.com/2010/06/feet-high.html</link>
      <pubDate>Wed, 23 Jun 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I posted a link to one of my favorite articles ever on Facebook that is now gone.&lt;br /&gt;Here&amp;#8217;s the &lt;a href='1'&gt;reddit link&lt;/a&gt;; the article was about what you should know before you debate type systems, since most people have fuzzy notions of what type systems are, what they do, and their properties. He said it best, but now that it&amp;#8217;s gone, I&amp;#8217;ll go over a few points that I remember the author addressed.&lt;/p&gt;

&lt;p&gt;(&lt;strong&gt;edit:&lt;/strong&gt; &lt;a href='http://www.reddit.com/r/programming/comments/cqfam/sadly_the_original_site_is_gone_but_heres_the/'&gt;Reddit provides&lt;/a&gt; a Wayback Machine link, so you can &lt;a href='http://web.archive.org/web/20080822101209/http://www.pphsg.org/cdsmith/types.html'&gt;read the original!&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;First off, &lt;strong&gt;what is a type system, really?&lt;/strong&gt; This is a bit hard to answer, but the a simple way to describe it is as &lt;em&gt;a mechanism to prevent your code from executing nonsense by investigating what operations you are performing to what data&lt;/em&gt;. An example of this would be if you had &amp;#8220;2 + potatoes&amp;#8221; in your code: a type system would see that you cannot add a number and the symbol &amp;#8220;potatoes&amp;#8221; (nonsense!) and prevent you from doing so.&lt;/p&gt;

&lt;p&gt;Note that we&amp;#8217;ve already encountered a subtle distinction that is the source of confusion: when does this happen? There are two major forms of type systems: &lt;em&gt;static&lt;/em&gt; types and &lt;em&gt;dynamic&lt;/em&gt; types. A static type system will investigate your code &lt;em&gt;before&lt;/em&gt; you run it, reporting any errors it sees, whereas a dynamic type system will tell you of errors during runtime.&lt;/p&gt;

&lt;p&gt;When most people talk about a type system, they almost always mean static types. &lt;em&gt;This does not mean that dynamically typed languages don&amp;#8217;t have type systems.&lt;/em&gt; Far from it. Compare this &amp;#8216;untyped&amp;#8217; Ruby code:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;    &lt;span class='n'&gt;my_array&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='mi'&gt;2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='mi'&gt;3&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;
    &lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;upto&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;100&lt;/span&gt;&lt;span class='p'&gt;){&lt;/span&gt; &lt;span class='o'&gt;|&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='o'&gt;|&lt;/span&gt; &lt;span class='nb'&gt;puts&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;my_array&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;to_s&lt;/span&gt; &lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;with the &amp;#8216;typed&amp;#8217; C code:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='c'&gt;    &lt;span class='kt'&gt;unsigned&lt;/span&gt; &lt;span class='n'&gt;array&lt;/span&gt;&lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='mi'&gt;3&lt;/span&gt;&lt;span class='p'&gt;];&lt;/span&gt;
    &lt;span class='n'&gt;array&lt;/span&gt;&lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='p'&gt;]&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
    &lt;span class='n'&gt;array&lt;/span&gt;&lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;]&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;2&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
    &lt;span class='n'&gt;array&lt;/span&gt;&lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='mi'&gt;2&lt;/span&gt;&lt;span class='p'&gt;]&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;3&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
    &lt;span class='kt'&gt;unsigned&lt;/span&gt; &lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
    &lt;span class='k'&gt;for&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt; &lt;span class='n'&gt;i&lt;/span&gt; &lt;span class='o'&gt;&amp;lt;&lt;/span&gt; &lt;span class='mi'&gt;100&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt; &lt;span class='o'&gt;++&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
        &lt;span class='n'&gt;printf&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;%d&lt;/span&gt;&lt;span class='se'&gt;\n&lt;/span&gt;&lt;span class='s'&gt;&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;array&lt;/span&gt;&lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='p'&gt;]&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;Stack Pointer!&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
    &lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The output of the Ruby:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;2
3
4
types.rb:2:in `block in &amp;#39;: undefined method `+&amp;#39; for nil:NilClass
(NoMethodError)
    from types.rb:2:in `upto&amp;#39;
    from types.rb:2:in `&amp;#39;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And the C:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;3915
3916
3917
3917
1606417842
... (continues for 100 lines) ...&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We see that Ruby stops and C will plow right through! (To be fair, the C compiler will warn you of the type mismatch). Ruby&amp;#8217;s type error shows that, while dynamic, Ruby &lt;em&gt;does&lt;/em&gt; have a type system, and shouldn&amp;#8217;t be called untyped. And while C has something people call a type system, it doesn&amp;#8217;t really function as one might expect.&lt;/p&gt;

&lt;p&gt;Which brings up the next point: &lt;strong&gt;What should a type system do?&lt;/strong&gt;. There are two major properties that a type system should strive to provide (incidentally, C/C++/Java don&amp;#8217;t provide these):&lt;/p&gt;

&lt;p&gt;* &lt;strong&gt;Progress:&lt;/strong&gt; A well-typed expression can be evaluated further, unless the computation is finished. In short, if the expression is well typed, the rules of evaluation and type system guarantee &amp;#8220;there&amp;#8217;s something we can do with it&amp;#8221; (this excludes exceptions: &amp;#8220;1/0&amp;#8221; is well-typed, but we can&amp;#8217;t detect this beforehand without solving the Halting Problem).&lt;/p&gt;

&lt;p&gt;* &lt;strong&gt;Preservation:&lt;/strong&gt; Evaluation of a well-typed expression leads to another well-typed expression.&lt;/p&gt;

&lt;p&gt;Type systems that provide these properties mean that if your program passes the type checker, &lt;em&gt;it can&amp;#8217;t &amp;#8220;go wrong.&amp;#8221;&lt;/em&gt;, by that we mean, &amp;#8220;the computer will always know what do to (progress), and never lead you into a false corner (preservation).&amp;#8221; This doesn&amp;#8217;t mean your program will be bug-free, just that any bugs are logical bugs, or unhandled exceptions (basically, your own fault).&lt;/p&gt;

&lt;p&gt;Languages with great type systems (SML, OCaml, Haskell) have &lt;em&gt;proven&lt;/em&gt; these properties about their type systems, and it makes programming in those languages a joy.&lt;/p&gt;

&lt;p&gt;My favorite part of the article, however, was the Fallacies section. Things people believe which just aren&amp;#8217;t true. I covered the one of the biggest ones already with the example (&amp;#8220;dynamic typing means untyped!&amp;#8221;), but here are two others that really get my goat:&lt;/p&gt;

&lt;p&gt;* &lt;strong&gt;Typed code is longer, more verbose.&lt;/strong&gt; This, again, is untrue. Most people saying this are referring more to &lt;em&gt;type annotations&lt;/em&gt;, which is text you write in your program to tell the compiler what the type of everything is. You&amp;#8217;ll find these in C, C++, Java, and C#; I once had a &lt;em&gt;really&lt;/em&gt; ugly line of Java that looked something like:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='java'&gt;    &lt;span class='n'&gt;HashMap&lt;/span&gt;&lt;span class='o'&gt;&amp;lt;&lt;/span&gt;&lt;span class='n'&gt;String&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;ArrayList&lt;/span&gt;&lt;span class='o'&gt;&amp;lt;&lt;/span&gt;&lt;span class='n'&gt;Integer&lt;/span&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;scoreMap&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='n'&gt;HashMap&lt;/span&gt;&lt;span class='o'&gt;&amp;lt;&lt;/span&gt;&lt;span class='n'&gt;String&lt;/span&gt;&lt;span class='o'&gt;,&lt;/span&gt; &lt;span class='n'&gt;ArrayList&lt;/span&gt;&lt;span class='o'&gt;&amp;lt;&lt;/span&gt;&lt;span class='n'&gt;Integer&lt;/span&gt;&lt;span class='o'&gt;&amp;gt;&amp;gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;(I&amp;#8217;ve &lt;a href='http://www.morepaul.com/2010/05/paul-is-bothered.html'&gt;ranted about&lt;/a&gt; Java&amp;#8217;s verbosity before). You won&amp;#8217;t find lines like that (or at least they&amp;#8217;re not mandatory) in SML, Haskell, or Scala. Using technology from 70&amp;#8217;s, we can &lt;a href='http://en.wikipedia.org/wiki/Type_inference'&gt;infer types&lt;/a&gt; from the context of the code. So those ranting about statically typed code being verbose should really rant against type annotations, which are distinct.&lt;/p&gt;

&lt;p&gt;* &lt;strong&gt;Strong typing vs. Weak typing.&lt;/strong&gt; THESE TERMS MEAN NOTHING. At least, nobody&amp;#8217;s agreed upon what they should mean. &lt;a href='http://en.wikipedia.org/wiki/Strongly-typed_programming_language'&gt;Even Wikipedia agrees with me.&lt;/a&gt; So stop saying it, and say what you mean; it&amp;#8217;s like saying a food is &amp;#8216;flavorful.&amp;#8217;&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s a pity the original link is gone, he said a lot more than I did, and a lot more clearly. Still, type systems are fun, and go a &lt;strong&gt;lot&lt;/strong&gt; deeper than this. If you&amp;#8217;re looking for a good introduction to programming with types, &lt;a href='http://www.ccs.neu.edu/home/matthias/BTML/'&gt;The Little MLer&lt;/a&gt; is hard to beat. For the theory, people seem to love &lt;a href='http://www.cis.upenn.edu/~bcpierce/tapl/'&gt;Pierce&lt;/a&gt;. I&amp;#8217;m not too far into it, but it looks promising.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Quickie on Atheism</title>
      <link>http://www.morepaul.com/2010/06/quickie-on-atheism.html</link>
      <pubDate>Sun, 13 Jun 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I love &lt;a href='http://andrewsullivan.theatlantic.com'&gt;Andrew Sullivan&amp;#8217;s blog&lt;/a&gt;. It offers excellent analysis containing many sides of the news; what separates it from other blog is the conversations he mediates with the readers.&lt;/p&gt;

&lt;p&gt;One topic of great discussion is divinity: Sullivan himself is a Catholic (an exemplary one, I would say, of the compassion and humility the faith claims to provide) and he frequently discusses religion and the many conversations around it.&lt;/p&gt;

&lt;p&gt;He recently posted &lt;a href='http://andrewsullivan.theatlantic.com/the_daily_dish/2010/06/a-louder-athiesm.html'&gt;a letter from an atheist reader&lt;/a&gt; that echoes how I feel about (what is being branded as) the New Atheists: yes they are loud, and their tone does little to persuade believers in an honest debate.&lt;/p&gt;

&lt;p&gt;But their contributions to the atheist community isn&amp;#8217;t persuasion of believers, it&amp;#8217;s more a declaration of the right to exist, and a place in the discussion. Like the earliest gay pride parades, they are there to say &lt;em&gt;&amp;#8220;We&amp;#8217;re here, our lack of belief is legitimate, and we won&amp;#8217;t be bullied out. We won&amp;#8217;t settle for less respect. Get used to us.&amp;#8221;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It was their voices, their arguments, and their courage that allowed me to come out to the world as an atheist.&lt;/p&gt;

&lt;p&gt;An excellent, excellent debate between Andrew Sullivan and Sam Harris, a prolific atheist, is &lt;a href='http://www.beliefnet.com/Faiths/Secular-Philosophies/Is-Religion-Built-Upon-Lies.aspx'&gt;over at Belief Net.&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Assorted interestings</title>
      <link>http://www.morepaul.com/2010/06/google-win.html</link>
      <pubDate>Wed, 09 Jun 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I&amp;#8217;ve always loved the Google &amp;#8220;Did you mean?&amp;#8221; (favorite is &lt;a href='http://www.google.com/search?client=safari&amp;amp;rls=en&amp;amp;q=recursion&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8'&gt;recursion&lt;/a&gt;), but this one came up recently while helping my sister with some definitions:&lt;/p&gt;

&lt;p&gt;&lt;a href='http://1.bp.blogspot.com/_3ys1dwfzc2w/TA-hPbpqeeI/AAAAAAAAAGI/F1EpENY-JoM/s1600/Picture+1.png'&gt;&lt;img src='http://1.bp.blogspot.com/_3ys1dwfzc2w/TA-hPbpqeeI/AAAAAAAAAGI/F1EpENY-JoM/s320/Picture+1.png' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;There are some words that people invoke to give false credence to ideas. The most obvious case is God; if you mention him/her, you can convince people of pretty much anything.&lt;/p&gt;

&lt;p&gt;In non-God cases, it&amp;#8217;s normally an abstract term we use as shorthand but don&amp;#8217;t have a solid, working definition for. I&amp;#8217;ve &lt;a href='http://www.morepaul.com/2010/04/video-games-and-failure-of-word-art.html'&gt;written about&lt;/a&gt; Art being a stupid word, and today I read an &lt;a href='http://www.mindhacks.com/blog/2010/06/neuroplasticity_is_a.html'&gt;interesting blog post&lt;/a&gt; adds &amp;#8216;neuroplasticity&amp;#8217; to the list.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Keep Up that Racket!</title>
      <link>http://www.morepaul.com/2010/06/keep-up-that-racket.html</link>
      <pubDate>Tue, 08 Jun 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;PLT Scheme, formerly my favorite Scheme implementation and &lt;a href='http://www.morepaul.com/2010/04/common-lisp.html'&gt;mentioned&lt;/a&gt; &lt;a href='http://reprog.wordpress.com/2010/03/11/the-difference-between-imperative-and-functional-programming/#comment-860'&gt;before&lt;/a&gt; in my writings, &lt;a href='http://racket-lang.org/new-name.html'&gt;has been re-branded&lt;/a&gt; as &lt;a href='http://racket-lang.org'&gt;Racket&lt;/a&gt;. I&amp;#8217;m very excited about this: Racket is a language of unbelievable potential, and hopefully it&amp;#8217;s re-branding will make people aware of this.&lt;/p&gt;

&lt;p&gt;(while it is just a name change and new website, I doubt Clojure would have gotten it&amp;#8217;s momentum if it were just called &amp;#8220;JVM Lisp&amp;#8221;).&lt;/p&gt;

&lt;p&gt;One of the wonderful things about Racket is its mailing list, and a cute discussion there generated a major treasure. Namely, someone brought up that computer programming isn&amp;#8217;t really that related to computer science, to which someone else mentioned that you could very much be a successful programmer even if you haven&amp;#8217;t studied the science.&lt;/p&gt;

&lt;p&gt;This is sadly true (many people making their livings &lt;a href='http://thedailywtf.com/Articles/Poke-a-Dot.aspx'&gt;don&amp;#8217;t know&lt;/a&gt; &lt;a href='http://thedailywtf.com/Articles/The-Certified-DBA.aspx'&gt;what they&amp;#8217;re doing&lt;/a&gt;, many examples at &lt;a href='http://thedailywtf.com/'&gt;The Daily WTF&lt;/a&gt;), but then a user named Joe Marshall simply wins:&lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;It&amp;#8217;s quite possible to be a productive and successful programmer without having a solid understanding of computer science.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That&amp;#8217;s the problem. Maybe it shouldn&amp;#8217;t be the case. Variations on this statement are alarming:&lt;/p&gt;

&lt;p&gt;&amp;#8220;It&amp;#8217;s quite possible to be a productive and successful physician without having a solid understanding of medicine.&amp;#8221;&lt;/p&gt;

&lt;p&gt;&amp;#8220;It&amp;#8217;s quite possible to be a productive and successful airplane engineer without having a solid understanding of aerodynamics.&amp;#8221;&lt;/p&gt;

&lt;p&gt;&amp;#8216;Rocket Scientist&amp;#8217; : &amp;#8216;Newtonian physics&amp;#8217;&lt;/p&gt;

&lt;p&gt;&amp;#8216;Brain Surgeon&amp;#8217; : &amp;#8216;neurology&amp;#8217;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I attribute this more to the fact that &lt;a href='http://www.morepaul.com/2010/04/software-and-evolution.html'&gt;we&amp;#8217;re living in the cave-writing stages of software&lt;/a&gt;: we&amp;#8217;ve had computers for fewer than 70 years, personal computers for maybe 30, and connectivity for less. I&amp;#8217;m sure after the invention of the steam engine, all sorts of idiots were designing inefficient, dangerous factories, and we&amp;#8217;ve now got the software equivalent.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m lucky in that I got to study the science, and am genuinely interested in it to keep learning. But what a wonderful day when people who develop software who know at least what I do will come standard.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Really, Apple?</title>
      <link>http://www.morepaul.com/2010/06/really-apple.html</link>
      <pubDate>Tue, 01 Jun 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Apple just showed themselves to be a bit lame about security, at least on Mac OS X two years ago. Here&amp;#8217;s the story:&lt;/p&gt;

&lt;p&gt;My sister had a MacBook to use for college when she was supposed to enroll in 2008. A few weeks later &lt;a href='http://www.facebook.com/paul.meier#!/group.php?gid=25800962459'&gt;she got sick with her encephalitis&lt;/a&gt;, and had her remarkable recovery story.&lt;/p&gt;

&lt;p&gt;Unfortunately, she didn&amp;#8217;t remember the root password she used for her laptop, and it wasn&amp;#8217;t any of her &amp;#8216;standards&amp;#8217; (we&amp;#8217;d tried them all). So while she could still use the computer via the auto-login function, she couldn&amp;#8217;t install or update software (since this requires an authorized user to enter their password). Regarding use of passwords, this was a stranger&amp;#8217;s computer.&lt;/p&gt;

&lt;p&gt;This presented mild problems over the last few years, but this came to a fore last night: with a very outdated iTunes, she couldn&amp;#8217;t sync her iPhone on her laptop while a summer student at Columbia&amp;#8217;s School for Continuing Education. This is on top of using and outdated and insecure OS, being unable to install new software&amp;#8230;&lt;/p&gt;

&lt;p&gt;So I googled &amp;#8220;recover lost root password Mac OS X,&amp;#8221; and lo and behold, &lt;a href='http://www.macosxhints.com/article.php?story=20001217230925152'&gt;the instructions I found worked!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This should not happen. I shouldn&amp;#8217;t be able to set or reset root passwords with physical access to a stranger&amp;#8217;s computer.&lt;/strong&gt; Below is the fix, in both technical terms and non-technical metaphor terms, for the curious:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Technical:&lt;/em&gt; Holding Command-S on startup allows you to run in single-user mode, &lt;em&gt;as root&lt;/em&gt;. So a simple mount -uw / followed by passwd root allowed me to set the password of user &amp;#8216;root&amp;#8217; to letmein. Then I reboot, and log into Mac OS X normally with admin privileges as user root.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Non-technical Metaphor:&lt;/em&gt; Suppose you&amp;#8217;re building is guarded by a lazy doorman. He has a list with all the tenants in the building, but when you walk up to him, you notice he just looks at the placards on the mailboxes. I effectively scribbled &amp;#8216;root&amp;#8217; on a postcard, taped it to a mailbox, and walked up to the guard the next day and said &amp;#8220;My name is root!&amp;#8221; Seeing it written on a mailbox, he let me in and I changed the locks on a stranger&amp;#8217;s apartment.&lt;/p&gt;

&lt;p&gt;While I haven&amp;#8217;t felt that elated in years (and saved my sister&amp;#8217;s computer from having its reset to disk factory settings, our best alternative), this is a major lame sauce from Apple.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Everyone Draw Mohammed</title>
      <link>http://www.morepaul.com/2010/05/everyone-draw-mohammed.html</link>
      <pubDate>Thu, 20 May 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Today is Everyone Draw Mohammed Day (&lt;a href='http://www.mynorthwest.com/?nid=11&amp;amp;sid=313170'&gt;news story&lt;/a&gt;, &lt;a href='http://en.wikipedia.org/wiki/Everybody_Draw_Mohammed_Day'&gt;wikipedia&lt;/a&gt;). A small day where you can stand up for free speech in the face of bullying and the threat of terrorism. Sadly, I&amp;#8217;ve loaned out my tablet (and am burned out from studying), so I can&amp;#8217;t do anything really epic. I still want to participate, so here&amp;#8217;s a quickie:&lt;/p&gt;

&lt;p&gt;&lt;a href='http://1.bp.blogspot.com/_3ys1dwfzc2w/S_XoYXnA5KI/AAAAAAAAAF4/oMPFmrWF1wo/s1600/mohammed.jpg'&gt;&lt;img src='http://1.bp.blogspot.com/_3ys1dwfzc2w/S_XoYXnA5KI/AAAAAAAAAF4/oMPFmrWF1wo/s320/mohammed.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That&amp;#8217;s him, guys. That drawing, in the eyes of way too many, is worth killing me for. See &lt;a href='http://everyonedrawmohammed.blogspot.com/'&gt;a whole blog of them&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Can we &lt;em&gt;please&lt;/em&gt; grow up, humanity?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>My last study break</title>
      <link>http://www.morepaul.com/2010/05/my-last-study-break.html</link>
      <pubDate>Wed, 19 May 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;My final Final Exam is tomorrow; after that, my graduation is at the mercy of my graders.&lt;br /&gt;I&amp;#8217;m studying for Principles of Neurobiology]&lt;a href='https://wiki.brown.edu/confluence/display/Spring07BN0102S01/Syllabus'&gt;1&lt;/a&gt;, which has been a most excellent way to finish college. While Biology was always my &lt;em&gt;least&lt;/em&gt; favorite science (chemistry!), the brain and how we study it is out-of-this world cool. Neuroscience is tied with dancing in the Big Regrets That I Didn&amp;#8217;t Pursue This Further At Brown (it&amp;#8217;s no exaggeration that, had I taken these classes earlier, I may have become a Neuroscience major).&lt;/p&gt;

&lt;p&gt;My curiosity is naturally piqued after my family&amp;#8217;s recent medical trauma, &lt;a href='http://www.facebook.com/home.php?#!/group.php?gid=25800962459'&gt;my sister&amp;#8217;s neurological illness.&lt;/a&gt; There&amp;#8217;s &lt;em&gt;lots&lt;/em&gt; to say about that and how it&amp;#8217;s affected me, but in reviewing my notes I came upon this slide (click to enlarge):&lt;/p&gt;

&lt;p&gt;&lt;a href='http://2.bp.blogspot.com/_3ys1dwfzc2w/S_S4W1zoxsI/AAAAAAAAAFw/DQ7PDYDymLM/s1600/ltp-nmda.png'&gt;&lt;img src='http://2.bp.blogspot.com/_3ys1dwfzc2w/S_S4W1zoxsI/AAAAAAAAAFw/DQ7PDYDymLM/s320/ltp-nmda.png' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And felt a flurry of emotions. Context:&lt;/p&gt;

&lt;p&gt;* In reviewing my sister&amp;#8217;s condition and her trouble retaining memories, the doctor&amp;#8217;s hypothesized that the NMDA receptors of her neurons weren&amp;#8217;t functioning properly.&lt;/p&gt;

&lt;p&gt;* I tell this to my new, madly brilliant neuroscientist friend, who in helping me study told me that NMDA receptors are partially responsible for coincidence detection, which contributes to LTP.&lt;/p&gt;

&lt;p&gt;This class and my friend help me connect a few dots to the bullet point above:&lt;/p&gt;

&lt;p&gt;* LTP stands for &lt;em&gt;long-term potentiation&lt;/em&gt;, which is basically a mechanism of retaining information in the brain via the strength of synapses between neurons. This mechanism is what is most believed to be related to how individual neurons grow to Something Greater like a functioning brain, with memory.&lt;/p&gt;

&lt;p&gt;* LTP occurs when related events occur repeatedly. When neurons notice this, it&amp;#8217;s called &lt;em&gt;coincidence detection&lt;/em&gt;. For example, suppose you repeatedly smell a rose when you see a rose. Certain neurons will activate the next time you see or smell a roses. If you do both, the pairing will strengthen, if you do one or the other, the pairing will fire but not as strongly. They won&amp;#8217;t activate at all when you smell an onion (presumably some other neurons will).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coming full circle, what is it that enables coincidence detection? &lt;em&gt;NMDA- receptors&lt;/em&gt;, through the process that was introduced in that slide.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Being able to piece all this together, albeit as an amateur (I&amp;#8217;m no biologist) has been a hell of a ride. Not gonna lie, I&amp;#8217;m a bit worried about the exam tomorrow. I&amp;#8217;ve passed my practice tests, but not by the most comfortable margin available&lt;/p&gt;

&lt;p&gt;(also, let this be a case for Brown University offering &lt;a href='http://www.brown.edu/Administration/Dean_of_the_College/courses/grade_options.php'&gt;the S/NC grading option&lt;/a&gt;. I would never have taken an intellectually risky class like this if I was preoccupied with GPA maximization).&lt;/p&gt;

&lt;p&gt;If you want to see what I&amp;#8217;m up against, take a look at the midterms covering the material of the final (&lt;a href='https://wiki.brown.edu/confluence/download/attachments/13981/BN102+Exam+1+2010.pdf?version=1'&gt;first&lt;/a&gt;, &lt;a href='https://wiki.brown.edu/confluence/download/attachments/13981/BN102+Exam+2+2010.pdf?version=1'&gt;second&lt;/a&gt;, &lt;a href='https://wiki.brown.edu/confluence/download/attachments/13981/BN102+Exam+3+2010.pdf?version=1'&gt;third&lt;/a&gt;) and the &lt;a href='https://wiki.brown.edu/confluence/download/attachments/16757/Stellwagen+and+Malenka+2006.pdf?version=1'&gt;research paper&lt;/a&gt; we need to be familiar with.&lt;/p&gt;

&lt;p&gt;Wish me luck ^_^&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Today's study break</title>
      <link>http://www.morepaul.com/2010/05/todays-study-break.html</link>
      <pubDate>Tue, 18 May 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Still studying like a madman for Neuroscience, but took a few minutes to catch up on some news. First, a co-creator of Flash &lt;a href='http://coldhardflash.com/2010/05/flash-co-creator-jonathan-gay-responds-to-steve-jobs.html'&gt;makes the best defense of Flash&lt;/a&gt; as a platform &lt;a href='http://www.apple.com/hotnews/thoughts-on-flash/'&gt;contra Steve Jobs&lt;/a&gt; I&amp;#8217;ve seen, many echo my sentiments exactly. Some money quotes (emphasis mine):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I think Steve Jobs is willfully missing a key point with his arguments against Flash. &lt;strong&gt;The important reason to put Flash on the iPhone is that millions of developers have invested millions of hours building Flash content in Flash. The Flash content out there in the world is an asset of our society and the people who created it.&lt;/strong&gt; People built it in Flash because there was no other decent technology from companies like Apple, Microsoft or Real Networks that enabled this kind of content to be created and delivered. To say that all this content should be discarded because Steve Jobs is afraid that people will build Flash content that runs on mobile devices running any operating system instead of building content that will only work on Apple mobile devices is doing a disservice to the efforts of all those individuals.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;Personally, I think that Flash content will probably outlive iPhone and iPad apps because Flash is designed to deliver media content while the iPhone/iPad development tools are designed to build applications for a specific hardware platform that will be obsolete in 5 or 10 years.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;On Apple&amp;#8217;s devices as a whole:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The iPhone/iPad model certainly has some of the appealing traits of the personal computer market but it also borrows heavily from the business models used by the cell phone, and cable industries. With my computer, I feel like I own it and can do what I want with it. With my iPhone and with an iPad, it’s more like you are leasing a device for a few years until the battery wears out and it’s time to buy the new one.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Apple aside: yes, I&amp;#8217;ve read &lt;a href='http://www.zeldman.com/dwws/'&gt;Designing with Web Standards&lt;/a&gt;, and absolutely believe in the future of a better Internet, one that is standards-based, with fewer applications relying on closed, commercial plugins.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;But&lt;/em&gt;, if it&amp;#8217;s a challenge for &lt;em&gt;me&lt;/em&gt;, a Computer Science concentrator at a top university, to use a programmatic technology that&amp;#8217;s only been available for a few years (HTML5) to make even a simple graphic react to the most basic inputs that will only work for some browsers&amp;#8230; well, it&amp;#8217;s no surprise that a company filled in the void for rich content, and that designers flocked to it in droves.&lt;/p&gt;

&lt;p&gt;Throw all this in with Apple, who have their own crummy record of openness, supporting developers, and economic interests and well&amp;#8230; I&amp;#8217;m not buying most of Jobs&amp;#8217; arguments.&lt;/p&gt;

&lt;p&gt;(Adobe isn&amp;#8217;t excused from this either, mind you: they are also driven primarily by profit motives, and Flash as a technology certainly has its flaws. Yes, they are guilty of not being perfect, but I think Apple is currently more guilty of willful, opaque obstruction, and do more harm to developers and ultimately end users).&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;The other major story was that &lt;a href='http://www.facebook.com/press/releases.php?p=162172'&gt;Facebook and Zynga have entered a formal agreement.&lt;/a&gt; Facebook is a company I&amp;#8217;ve been thinking a lot about these days. As a game developer, game player, and privacy/civil liberties enthusiast, Facebook and Zynga&amp;#8217;s &lt;a href='http://cdixon.org/2010/05/08/facebook-zynga-and-buyer-supplier-hold-up'&gt;recent&lt;/a&gt; &lt;a href='http://blog.bluefroggaming.com/?p=27'&gt;turmoils&lt;/a&gt; have been a hot, hot topic for me.&lt;/p&gt;

&lt;p&gt;(another great post is &lt;a href='http://37signals.com/svn/posts/2330-diasporas-curse'&gt;Diaspora&amp;#8217;s curse&lt;/a&gt;, on why the author believes (and I agree) that Diaspora is doomed to fail, unfortunately).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>I'm still neck-deep in exam studies...</title>
      <link>http://www.morepaul.com/2010/05/im-still-neck-deep-in-exam-studies.html</link>
      <pubDate>Mon, 17 May 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;&amp;#8230; but there&amp;#8217;s a really, really great post on &lt;a href='http://catonmat.net/blog/on-functors'&gt;the various meanings of the word &amp;#8216;functor&amp;#8217;&lt;/a&gt; in 4 different languages. It&amp;#8217;s the clearest example I&amp;#8217;ve seen for SML, especially. Also note the &amp;#8216;This space reserved for JELLY STAINS&amp;#8217; at the top ^_^&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Another game on Android Market!</title>
      <link>http://www.morepaul.com/2010/05/another-game-on-android-market.html</link>
      <pubDate>Sat, 15 May 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;&lt;a href='http://brownandroidattack.blogspot.com'&gt;My games group&lt;/a&gt; is happy and proud to release Momenta (development title &lt;a href='http://brownandroidattack.blogspot.com/2010/04/game-updates.html'&gt;Platformer&lt;/a&gt;) to the Market today!&lt;/p&gt;

&lt;p&gt;As with &lt;a href='http://www.morepaul.com/2010/05/my-first-game-is-on-android-market.html'&gt;my first Market release&lt;/a&gt;, you can &lt;a href='http://market.android.com/details?id=androidattack.platformer'&gt;click here&lt;/a&gt; if you&amp;#8217;re browsing from an Android phone, or search &amp;#8220;Momenta&amp;#8221; in the Android Market.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://1.bp.blogspot.com/_3ys1dwfzc2w/S-9wdUGqzAI/AAAAAAAAAFo/b7lT_HISTxc/s1600/screen2.png'&gt;&lt;img src='http://1.bp.blogspot.com/_3ys1dwfzc2w/S-9wdUGqzAI/AAAAAAAAAFo/b7lT_HISTxc/s320/screen2.png' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What would you pay for this &lt;a href='http://en.wikipedia.org/wiki/Eyjafjallajökull'&gt;Eyjafjallajokull&lt;/a&gt; eruption of fun? You might say $10,000, but wait, it&amp;#8217;s free! Download it, PLAY IT, enjoy it, and please provide feedback!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>My first game is on the Android Market</title>
      <link>http://www.morepaul.com/2010/05/my-first-game-is-on-android-market.html</link>
      <pubDate>Thu, 13 May 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Pick it up! I don&amp;#8217;t know of a way to link to the market itself (unless you&amp;#8217;re on an android phone, in which case, &lt;a href='http://market.android.com/details?id=cs134.adventure.minigames.ratrace'&gt;click here!&lt;/a&gt;). If you search &amp;#8216;Rat Race&amp;#8217; from your phone, it&amp;#8217;s the only app that comes up.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s free! Download it, upvote it, downvote it, PLAY IT, whatever you like ^_^&lt;/p&gt;

&lt;p&gt;(short update, finals are the death of me&amp;#8230; hopefully for the last time!).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Funny images</title>
      <link>http://www.morepaul.com/2010/05/funny-images.html</link>
      <pubDate>Mon, 10 May 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I&amp;#8217;ve posted a &lt;a href='http://www.morepaul.com/2010/04/baal-bless-internet.html'&gt;bunch of&lt;/a&gt; &lt;a href='http://www.morepaul.com/2010/04/another-remix.html'&gt;remixes&lt;/a&gt; and &lt;a href='http://www.morepaul.com/2010/04/being-lucky-being-strange-being-lucky.html'&gt;3&lt;/a&gt;notable videos]&lt;a href='http://www.morepaul.com/2010/03/books-books-musical-fruit.html'&gt;4&lt;/a&gt; earlier, even a more serious &lt;a href='http://www.morepaul.com/2010/03/books-books-musical-fruit.html'&gt;post on books&lt;/a&gt;. There are about a dozen more golden ones I&amp;#8217;ve left out, but that&amp;#8217;s for another time. This is the post for themed image sites.&lt;/p&gt;

&lt;p&gt;The winner for Most Currently Lost Potential is &lt;a href='http://thebigcaption.com/'&gt;The Big Caption&lt;/a&gt;, which takes photos from &lt;a href='http://www.boston.com/bigpicture/'&gt;The Big Picture&lt;/a&gt; and captions them with funny phrases and appropriate typography. Two favorites:&lt;/p&gt;

&lt;p&gt;&lt;a href='http://4.bp.blogspot.com/_3ys1dwfzc2w/S-izjzg61DI/AAAAAAAAAEw/S02yoCtnm3Q/s1600/epicbaptismi.jpg'&gt;&lt;img src='http://4.bp.blogspot.com/_3ys1dwfzc2w/S-izjzg61DI/AAAAAAAAAEw/S02yoCtnm3Q/s320/epicbaptismi.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href='http://4.bp.blogspot.com/_3ys1dwfzc2w/S-izjYXEmBI/AAAAAAAAAEo/V8wyNcwYYvI/s1600/hatersgonnahate.png'&gt;&lt;img src='http://4.bp.blogspot.com/_3ys1dwfzc2w/S-izjYXEmBI/AAAAAAAAAEo/V8wyNcwYYvI/s320/hatersgonnahate.png' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why Most Lost Potential? &lt;strong&gt;Not enough updates&lt;/strong&gt;. Unlike most themed funny image sites (the Tumblrs below, for example) the gimmick gets old fast. But The Big Picture has a long backlog, and will continue to be fresh, so we should have more than once or twice a month. But I won&amp;#8217;t rush quantity over quality ^_^&lt;/p&gt;

&lt;p&gt;My other complaint is the lack of hi-res images. I really want &amp;#8220;Haters Gonna Hate&amp;#8221; for a Desktop background.&lt;/p&gt;

&lt;p&gt;Tumblr + Blogger are full of gimmick sites that are hilarious for about 10 minutes each. Behold, &lt;a href='http://niccageaseveryone.blogspot.com/'&gt;Nic Cage as Everyone&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href='http://3.bp.blogspot.com/_3ys1dwfzc2w/S-i0YsjyHnI/AAAAAAAAAE4/u-RxJoP5gXA/s1600/CATcatwoman_pfeiffer.jpg'&gt;&lt;img src='http://3.bp.blogspot.com/_3ys1dwfzc2w/S-i0YsjyHnI/AAAAAAAAAE4/u-RxJoP5gXA/s320/CATcatwoman_pfeiffer.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href='http://babieswithlasereyes.com/'&gt;Babies with Laser Eyes&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href='http://2.bp.blogspot.com/_3ys1dwfzc2w/S-i0ymeBjwI/AAAAAAAAAFY/Y-mIIvDM0Mk/s1600/babbywithlasereyes.jpg'&gt;&lt;img src='http://2.bp.blogspot.com/_3ys1dwfzc2w/S-i0ymeBjwI/AAAAAAAAAFY/Y-mIIvDM0Mk/s320/babbywithlasereyes.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href='http://selleckwaterfallsandwich.tumblr.com/'&gt;Selleck, Waterfall, Sandwich&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href='http://4.bp.blogspot.com/_3ys1dwfzc2w/S-i0ZME1AzI/AAAAAAAAAFI/Cxscxfrgt0I/s1600/selleckwaterfallsandwich.jpg'&gt;&lt;img src='http://4.bp.blogspot.com/_3ys1dwfzc2w/S-i0ZME1AzI/AAAAAAAAAFI/Cxscxfrgt0I/s320/selleckwaterfallsandwich.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href='http://manbabies.com/'&gt;Man Babies&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href='http://1.bp.blogspot.com/_3ys1dwfzc2w/S-i0YycnE9I/AAAAAAAAAFA/M8Oyp5xtjyE/s1600/manbabies.jpg'&gt;&lt;img src='http://1.bp.blogspot.com/_3ys1dwfzc2w/S-i0YycnE9I/AAAAAAAAAFA/M8Oyp5xtjyE/s320/manbabies.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fun during the holidays: &lt;a href='http://www.sketchysantas.com/'&gt;Sketchy Santas&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href='http://1.bp.blogspot.com/_3ys1dwfzc2w/S-i0Zb2t61I/AAAAAAAAAFQ/AAJwYI2kbi0/s1600/sketchysanta.jpg'&gt;&lt;img src='http://1.bp.blogspot.com/_3ys1dwfzc2w/S-i0Zb2t61I/AAAAAAAAAFQ/AAJwYI2kbi0/s320/sketchysanta.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And my dad thinks he&amp;#8217;s not missing anything by staying off the Internet. Pah!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>PAUL IS BOTHERED</title>
      <link>http://www.morepaul.com/2010/05/paul-is-bothered.html</link>
      <pubDate>Sun, 09 May 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;You can talk all you want about &amp;#8216;practicality,&amp;#8217; but one way in which I see functional languages will ALWAYS beat imperative is the built-in love of lists. I simply can&amp;#8217;t express my distaste for always writing:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='java'&gt;    &lt;span class='kn'&gt;import&lt;/span&gt; &lt;span class='nn'&gt;java.util.Collection&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
    &lt;span class='kn'&gt;import&lt;/span&gt; &lt;span class='nn'&gt;java.util.Iterator&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
    
    &lt;span class='c1'&gt;// crap elided&lt;/span&gt;
    
    &lt;span class='n'&gt;Iterator&lt;/span&gt;&lt;span class='o'&gt;&amp;lt;&lt;/span&gt;&lt;span class='n'&gt;String&lt;/span&gt;&lt;span class='o'&gt;&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;iterator&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;myCollection&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;iterator&lt;/span&gt;&lt;span class='o'&gt;();&lt;/span&gt;
    
    &lt;span class='k'&gt;while&lt;/span&gt; &lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;iterator&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;hasNext&lt;/span&gt;&lt;span class='o'&gt;())&lt;/span&gt; &lt;span class='o'&gt;{&lt;/span&gt;
        &lt;span class='n'&gt;doSomethingWithString&lt;/span&gt;&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;iterator&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='na'&gt;next&lt;/span&gt;&lt;span class='o'&gt;());&lt;/span&gt;
    &lt;span class='o'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;over, say:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='scheme'&gt;    &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nb'&gt;map &lt;/span&gt;&lt;span class='nv'&gt;do-something-with-string&lt;/span&gt; &lt;span class='nv'&gt;my-collection&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;But Paul!&lt;/em&gt; says you, &lt;em&gt;Java gives you static typing! The Scheme example above doesn&amp;#8217;t, so it can get away with that kind of dynamic-language brevity!&lt;/em&gt; Well, so does Haskell:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='haskell'&gt;    &lt;span class='n'&gt;map&lt;/span&gt; &lt;span class='n'&gt;doSomethingWithString&lt;/span&gt; &lt;span class='n'&gt;myCollection&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;and SML:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;map(doSomethingWithString)(myCollection)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;For fun, lets just see it in a smattering of other languages I&amp;#8217;ve used. Ruby:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;    &lt;span class='n'&gt;my_collection&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;each&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt; &lt;span class='o'&gt;|&lt;/span&gt;&lt;span class='n'&gt;x&lt;/span&gt;&lt;span class='o'&gt;|&lt;/span&gt; &lt;span class='n'&gt;do_something_with_string&lt;/span&gt; &lt;span class='n'&gt;x&lt;/span&gt; &lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Erlang:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='erlang'&gt;    &lt;span class='nn'&gt;lists&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt;&lt;span class='n'&gt;foreach&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;fun&lt;/span&gt; &lt;span class='n'&gt;do_something_with_string&lt;/span&gt;&lt;span class='o'&gt;/&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;MyCollection&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Common Lisp:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='cl'&gt;    &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nb'&gt;mapcar&lt;/span&gt; &lt;span class='nf'&gt;#&amp;#39;&lt;/span&gt;&lt;span class='nv'&gt;do-something-with-string&lt;/span&gt; &lt;span class='nv'&gt;my-collection&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Naturally, this isn&amp;#8217;t even the whole picture. The example assumes you&amp;#8217;re iterating for side effects; if you needed the list with its elements transformed, that would be another 5-7 lines of Java. And the list can only exist because it was constructed to begin with, which if you did it in another class, requires 3-6 more import declarations there.&lt;/p&gt;

&lt;p&gt;I know its trendy to hate on Java, and I&amp;#8217;ve mentioned before that &lt;a href='http://www.morepaul.com/2010/03/on-how-knowledge-turns-to-snobbery.html'&gt;PL hating like this is unproductive&lt;/a&gt;. Still, &lt;em&gt;we use and work with variable-sized lists all the time&lt;/em&gt;, and what functional designers figured out (long, long ago) is that it&amp;#8217;s quite nice to have them built-in.&lt;/p&gt;

&lt;p&gt;Bleh, sorry. Android programming is fun, &lt;em&gt;despite&lt;/em&gt; the Java.&lt;/p&gt;

&lt;p&gt;I did say &amp;#8220;imperative&amp;#8221; above, not just Java. Kind of a misnomer, as CL and Ruby, above, provide one-line map and are arguably imperative. In that case, I let my biases shine through and used &amp;#8220;imperative&amp;#8221; interchangeably with &amp;#8220;luddite.&amp;#8221; But let&amp;#8217;s never forget our buddy C++:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='cpp'&gt;&lt;span class='cp'&gt;    #include &amp;lt;list&amp;gt;&lt;/span&gt;
    &lt;span class='k'&gt;using&lt;/span&gt; &lt;span class='k'&gt;namespace&lt;/span&gt; &lt;span class='n'&gt;std&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
    
    &lt;span class='n'&gt;list&lt;/span&gt;&lt;span class='o'&gt;&amp;lt;&lt;/span&gt;&lt;span class='n'&gt;string&lt;/span&gt;&lt;span class='o'&gt;&amp;gt;::&lt;/span&gt;&lt;span class='n'&gt;iterator&lt;/span&gt; &lt;span class='n'&gt;iter&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
    
    &lt;span class='k'&gt;for&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;iter&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;my_collection&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='n'&gt;begin&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt; &lt;span class='n'&gt;iter&lt;/span&gt; &lt;span class='o'&gt;!=&lt;/span&gt; &lt;span class='n'&gt;my_collection&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='n'&gt;end&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt; &lt;span class='o'&gt;++&lt;/span&gt;&lt;span class='n'&gt;iter&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
        &lt;span class='n'&gt;do_something_with_string&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='o'&gt;*&lt;/span&gt;&lt;span class='n'&gt;iter&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
    &lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;PUKE&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Social Golfer problem</title>
      <link>http://www.morepaul.com/2010/05/social-golfer-problem.html</link>
      <pubDate>Thu, 06 May 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;One summer I spent working with a professor, the father of a friend heard my plans and remarked (to my friend, not to me)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I can&amp;#8217;t think of anything less intellectually stimulating than writing computer code for 7 hours a day.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After some thinking, my guess was they were probably confusing &lt;em&gt;programming&lt;/em&gt; with &lt;em&gt;data entry&lt;/em&gt;. Moments like these make me realize how much I take computer literacy for granted, especially among older folk. The Supreme Court &lt;a href='http://blogs.wsj.com/law/2010/04/19/our-tech-savvy-supreme-court/'&gt;makes similar mistakes&lt;/a&gt;, to much lulz.&lt;/p&gt;

&lt;p&gt;I frequently find it helpful then to describe a problem that we work on, since lots of them can be easily described without mathematical notation. One of these has been a real hair-puller these last few days, called the &lt;strong&gt;Social Golfer Problem&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id='problem_statement'&gt;Problem Statement&lt;/h3&gt;

&lt;p&gt;The premise is this: you&amp;#8217;re organizing a golf tournament with 9 people in it. They play every week in groups of 3, and want to play for three weeks.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s the catch: they are &lt;em&gt;social&lt;/em&gt; golfers, meaning if possible, they never want to play with the same people twice. Your job is to organize the tournament; you have to arrange who plays with whom every week.&lt;/p&gt;

&lt;p&gt;So rather than use names, we&amp;#8217;ll just use numbers. The first week could look something like this:&lt;/p&gt;

&lt;p&gt;So here&amp;#8217;s the question: could you organize a tournament like this with 100 people, in groups of 10, for 10 weeks?&lt;/p&gt;

&lt;p&gt;Because if you could, you could get published in a Computer Science paper. Whether or not its even &lt;em&gt;possible&lt;/em&gt; to schedule such a tournament is an open problem.&lt;/p&gt;

&lt;p&gt;For &lt;a href='http://cs.brown.edu/courses/cs258/'&gt;Solving Hard Problems&lt;/a&gt;, we have to write a program that takes three numbers&lt;/p&gt;

&lt;p&gt;* &lt;em&gt;g&lt;/em&gt; - the number of groups in a week.&lt;/p&gt;

&lt;p&gt;* &lt;em&gt;s&lt;/em&gt; - the size of each group.&lt;/p&gt;

&lt;p&gt;* &lt;em&gt;w&lt;/em&gt; - the number of weeks.&lt;/p&gt;

&lt;p&gt;and either prints a schedule for a social golfing tournament, or tells you its impossible.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s a really cute problem. Hopefully in a few days, when it&amp;#8217;s done and gone, I can write about how I wrote the program. In the meantime, how would you go about it?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>The Gods must be crazy!</title>
      <link>http://www.morepaul.com/2010/05/gods-must-be-crazy.html</link>
      <pubDate>Sun, 02 May 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Over 60% of the video online containing Paul was only uploaded in the last month.&lt;br /&gt;Here&amp;#8217;s another! I&amp;#8217;m acting in &lt;a href='http://www.mt-olympus.org/'&gt;Mt. Olympus&lt;/a&gt;, a new &lt;a href='http://browntv.org/blog/'&gt;Brown TV&lt;/a&gt; show with some really wonderful people involved.&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='allowfullscreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id=11378339&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' /&gt;&lt;embed src='http://vimeo.com/moogaloop.swf?clip_id=11378339&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;The premise is that the Greek Gods come down every once in a while from Mt. Olympus to let off some steam. During one visit, Hestia, who guards the hearth (and source of their Godly powers) leaves it unattended to take a break, and their powers vanish! What will they do in as students in a college that looks suspiciously like Brown?&lt;/p&gt;

&lt;p&gt;&lt;a href='http://3.bp.blogspot.com/_3ys1dwfzc2w/S95wJafVruI/AAAAAAAAAEY/V1IyZqWE9L4/s1600/26128_619685518101_1010423_35296230_5044379_n.jpg'&gt;&lt;img src='http://3.bp.blogspot.com/_3ys1dwfzc2w/S95wJafVruI/AAAAAAAAAEY/V1IyZqWE9L4/s320/26128_619685518101_1010423_35296230_5044379_n.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I play Hermes, the messenger of the Gods. He&amp;#8217;s a trickster, and mostly serves as comic relief. The gods go through a number of identity issues when they lose their powers and learn to become mortal, but Hermes is really just there to have the best time he can.&lt;/p&gt;

&lt;p&gt;There&amp;#8217;s about 2:40 introduction with the classroom scene. I&amp;#8217;m mostly in the opening sequence after that, until about 5:00. The rest of the episode is quite fabulous, and I&amp;#8217;ve made lots of great friends working on this. Keep watching until after the credits for More Paul™! It was that clip that left my family speechless when I got the rough cut of it over Spring Break.&lt;/p&gt;

&lt;p&gt;Also, some of the music (namely the party music that comes in when I enter the dark room at 3:20) was done by a very talented friend I met at Brown, Mr. &lt;a href='http://andrewunderberg.com/home.cfm'&gt;Andrew Underberg&lt;/a&gt;. I remember asking him for a recording of his midterm project in &lt;a href='http://brown.mochacourses.com/mocha/search.action?semesters=13&amp;amp;q=MU120&amp;amp;professor=&amp;amp;title=&amp;amp;Hours='&gt;an Electronic Music class we took&lt;/a&gt; 4 years ago, because it really stood out as excellent (sadly, I can&amp;#8217;t find it on his site and lost it in a hard drive death&amp;#8230;).&lt;/p&gt;

&lt;p&gt;(also, I&amp;#8217;ve updated &lt;a href='http://www.morepaul.com/2010/04/i-read-news.html'&gt;the post on the Pope and Catholicism&lt;/a&gt;, providing reasons why I am so angry, with lots of links substantiating my original sentiment).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>I read the news</title>
      <link>http://www.morepaul.com/2010/04/i-read-news.html</link>
      <pubDate>Fri, 30 Apr 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;If you aren&amp;#8217;t head-explodingly outraged with the Catholic church, you aren&amp;#8217;t paying enough attention (or, alternatively, you&amp;#8217;re incapable of independent thought).&lt;/p&gt;

&lt;p&gt;With that in mind, this video tickled me (language NSFW).&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/fHRDfut2Vx0' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/fHRDfut2Vx0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Unsurprisingly, I agree with the Hitchens/Dawkins &lt;a href='http://www.newsweek.com/id/236934'&gt;initiative to have the Pope brought to court&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; I realize this was an inflammatory post, especially since I don&amp;#8217;t provide any links to what&amp;#8217;s going on, or the conversation in place. Here are a few articles that guided my understanding:&lt;/p&gt;

&lt;p&gt;* Andrew Sullivan in invaluable in this discussion, as a compassionate Catholic who isn&amp;#8217;t afraid of following the truth where it lies. He&amp;#8217;s written &lt;a href='http://www.timesonline.co.uk/tol/comment/columnists/andrew_sullivan/article7086620.ece'&gt;a great article for&lt;/a&gt; The Times that lays it all out pretty well.&lt;/p&gt;

&lt;p&gt;* Sullivan &lt;a href='http://andrewsullivan.theatlantic.com/the_daily_dish/2010/04/the-third-strike.html'&gt;continues&lt;/a&gt; with more damning (literally, I hope) &lt;em&gt;facts&lt;/em&gt;. The Vatican&amp;#8217;s response so far has been along the lines of calling this &amp;#8217;&lt;a href='http://www.guardian.co.uk/world/2010/mar/28/pope-benedict-sexual-abuse-scandal'&gt;petty gossip&lt;/a&gt;,&amp;#8217; seemingly unaware that the documented rape of hundreds children (and documented ignoring of calls for help) does not constitute gossip. It is fact, and there is a difference.&lt;/p&gt;

&lt;p&gt;* How have Church representatives responded? By &lt;a href='http://www.timesonline.co.uk/tol/comment/faith/article7095471.ece'&gt;blaming the Jews&lt;/a&gt;, &lt;a href='http://www.christiantelegraph.com/issue9444.html'&gt;blaming the gays&lt;/a&gt;, and when that didn&amp;#8217;t work, blaming &lt;a href='http://joemygod.blogspot.com/2010/04/quote-of-day-bernando-alvarez.html'&gt;those slutty children&lt;/a&gt; who were &lt;em&gt;totally&lt;/em&gt; asking for it.&lt;/p&gt;

&lt;p&gt;* This has raised the question, can the Pope be fired? As in, suppose tomorrow we find out he also burned orphanages, uses performance-enhancing drugs, was in Arizona illegally, and was actually not even Catholic. Could the Vatican defrock him? Turns out, &lt;a href='http://www.slate.com/id/2247262/'&gt;they can&amp;#8217;t.&lt;/a&gt; Surprisingly, the Catholic hierarchy has no real systems for accountability.&lt;/p&gt;

&lt;p&gt;* Some bishops &lt;a href='http://www.nytimes.com/2010/04/24/world/europe/24vatican.html?hpw'&gt;do step down&lt;/a&gt;, however. The timing suggests they&amp;#8217;re not so sorry that they did it as they are that they got caught.&lt;/p&gt;

&lt;p&gt;* Christopher Hitchins was on Bill Maher&amp;#8217;s show, and while both are polarizing atheists who don&amp;#8217;t generally resonate well with believers (they&amp;#8217;re pretty inflammatory), this video lays it out pretty simply: would you accept a child molester (or someone who aided one) in your company? In your country? Then why is this any different?&lt;/p&gt;

&lt;p&gt;* The Onion, a satirical publication, wins with the best headline though: &lt;a href='http://www.theonion.com/articles/pope-vows-to-get-church-pedophilia-down-to-accepta,17201/'&gt;Pope Vows to get Church Pedophilia Down to Acceptable Levels&lt;/a&gt;. The funny thing is, &lt;em&gt;he hasn&amp;#8217;t even done this&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;* In a major breakthrough, however, &lt;a href='http://www.msnbc.msn.com/id/36823196/ns/world_news-europe/'&gt;the Vatican &lt;em&gt;may&lt;/em&gt; apologize&lt;/a&gt; in some way shape or form in June. Again, I have a feeling this is only happening because we&amp;#8217;re making such a big stink about it, since the abuse has happened over the last century (at least) and nobody from their end has said a peep about it, other than blaming.&lt;/p&gt;

&lt;p&gt;The Vatican, like Phil Donahue and most other shills, have demonstrated themselves to be incapable of owning up to this, and have only shown their incompetence by blaming others. The best defense of the Catholic Church &lt;a href='http://www.nytimes.com/2010/05/02/opinion/02kristof.html?ref=opinion'&gt;came just this morning&lt;/a&gt;, by Nick Kristof of the New York Times.&lt;/p&gt;

&lt;p&gt;He basically says &amp;#8220;don&amp;#8217;t mock so hard or cruelly, because these idiots in the Vatican aren&amp;#8217;t the entire Catholic church; many priests and nuns on the ground give their lives selflessly in the true spirit of the organization, and the mockery/criticism belittles their unmatched generosity.&amp;#8221;&lt;/p&gt;

&lt;p&gt;&lt;a href='http://slog.thestranger.com/slog/archives/2010/05/02/mockery-has-its-role-to-play-nick'&gt;Dan Savage addresses this&lt;/a&gt;, and I more or less agree. Standard accountability models are necessary, but mockery (especially honest and well- produced mockery, as in the video at the top of the post) will accelerate the response from the Church while they continue to earn it. Until that response comes, the good, &amp;#8220;real&amp;#8221; representatives of the Catholic faith will not be represented by the organization they deserve to be, and the churchgoers will suffer as they always have.&lt;/p&gt;

&lt;p&gt;Until then, regarding Ratzinger, &lt;em&gt;fuck the motherfucker&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edit 2 (5/3/2010):&lt;/strong&gt; &lt;a href='http://andrewsullivan.theatlantic.com/the_daily_dish/2010/05/it-isnt-prudent.html'&gt;More from Andrew Sullivan&lt;/a&gt;, reflecting on the &lt;a href='http://www.nytimes.com/2010/05/03/world/europe/03maciel.html?hp=&amp;amp;pagewanted=all'&gt;NYT summary&lt;/a&gt; published yesterday. I also left out the reporting on Marcial Maciel, the &lt;a href='http://en.wikipedia.org/wiki/Legion_of_Christ'&gt;Legion of Christ&lt;/a&gt;, and other establishment blights that further illustrate how horrible the whole situation is (&lt;a href='http://andrewsullivan.theatlantic.com/the_daily_dish/2010/04/the-vaticans-watergate-follow-the-money.html'&gt;Sullivan&lt;/a&gt;, &lt;a href='http://ncronline.org/news/accountability/money-paved-way-maciels-influence-vatican'&gt;National Catholic Reporter&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edit 3 (5/11/2010):&lt;/strong&gt; Ratzinger &lt;a href='http://www.huffingtonpost.com/2010/05/11/pope-sex-abuse-scandal-bo_n_571314.html'&gt;finally says something more substantive.&lt;/a&gt; This doesn&amp;#8217;t put him off the hook for the scandals he&amp;#8217;s been a part of, and I&amp;#8217;m still waiting for him to &lt;em&gt;do&lt;/em&gt; something. Took long enough, but it&amp;#8217;s better than blaming outsiders or the victims.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Videos with me!</title>
      <link>http://www.morepaul.com/2010/04/videos-with-me.html</link>
      <pubDate>Thu, 29 Apr 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;ME ME ME! &lt;code&gt;&amp;amp;lt;&lt;/code&gt;STOP&lt;code&gt;&amp;amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='allowfullscreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id=11344057&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' /&gt;&lt;embed src='http://vimeo.com/moogaloop.swf?clip_id=11344057&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;MY GAME IS BETTER &lt;code&gt;&amp;amp;lt;&lt;/code&gt;STOP&lt;code&gt;&amp;amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='allowfullscreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id=11344878&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' /&gt;&lt;embed src='http://vimeo.com/moogaloop.swf?clip_id=11344878&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;THE GAME I MADE WITH MY TEAM &lt;code&gt;&amp;amp;lt;&lt;/code&gt;STOP&lt;code&gt;&amp;amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='allowfullscreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id=11344568&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' /&gt;&lt;embed src='http://vimeo.com/moogaloop.swf?clip_id=11344568&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;I WILL TRY TO WRITE MORE, FEWER VIDEO-ONLY POSTS &lt;code&gt;&amp;amp;lt;&lt;/code&gt;STOP&lt;code&gt;&amp;amp;gt;&lt;/code&gt; UNLESS OF COURSE YOU LIKE VIDEOS &lt;code&gt;&amp;amp;lt;&lt;/code&gt;STOP&lt;code&gt;&amp;amp;gt;&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Patriotas!</title>
      <link>http://www.morepaul.com/2010/04/patriotas.html</link>
      <pubDate>Sun, 25 Apr 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I can write about Spring Weekend a bit later (this was the first and last time I&amp;#8217;ll do Spring Weekend as a student). In the meantime, I&amp;#8217;ll procrastinate by posting another favorite video. Sadly for you &lt;em&gt;gringos&lt;/em&gt;, you have to speak Spanish to glean much meaning from it:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/QZ__hR7pkbQ' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/QZ__hR7pkbQ' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;I used this as the basis for &lt;a href='https://wiki.brown.edu/confluence/display/wdm/milkwater'&gt;my first major project&lt;/a&gt; in an Electronic Writing course I took last year. Other works I did for the course are on &lt;a href='https://wiki.brown.edu/confluence/display/wdm/eWriting2+-+Fall+08'&gt;the course wiki&lt;/a&gt;, my work including a &lt;a href='https://wiki.brown.edu/confluence/pages/viewpage.action?pageId=28115725'&gt;programmatic riff&lt;/a&gt; on &lt;a href='http://www.coldbacon.com/writing/borges-quixote.html'&gt;&lt;em&gt;Pierre Menard&lt;/em&gt;&lt;/a&gt;, (this also used a &lt;a href='https://wiki.brown.edu/confluence/display/wdm/PLGP'&gt;text generator for grammar files&lt;/a&gt; I coded up), and &lt;a href='https://wiki.brown.edu/confluence/display/wdm/Cast'&gt;my final project&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Video Games, and the failure of the word "Art"</title>
      <link>http://www.morepaul.com/2010/04/video-games-and-failure-of-word-art.html</link>
      <pubDate>Fri, 23 Apr 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Roger Ebert decided to revisit a topic that got him a lot of attention a few years ago, where &lt;a href='http://rogerebert.suntimes.com/apps/pbcs.dll/article?AID=/20070721/COMMENTARY/70721001'&gt;he claimed that video games weren&amp;#8217;t art&lt;/a&gt;. Now he&amp;#8217;s strengthened his claim, stating that &lt;a href='http://blogs.suntimes.com/ebert/2010/04/video_games_can_never_be_art.html'&gt;video games can never be art&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My reaction to this was mostly along the lines of Penny Arcade: &lt;a href='http://www.penny-arcade.com/2010/4/21/'&gt;there&amp;#8217;s nothing to see here&lt;/a&gt;. An older person who&amp;#8217;s never really played video games decides to classify them ungenerously. Whoop whoop.&lt;/p&gt;

&lt;p&gt;And normally I would let it rest, but then &lt;a href='http://scienceblogs.com/pharyngula/2010/04/roger_ebert_ticks_off_video_ga.php'&gt;PZ Myers decided to weigh in&lt;/a&gt; (he agrees with Ebert). Now PZ is all about thinking rationally, letting evidence trump prejudices, etc. So it surprised me greatly that he made such a claim with such little knowledge, and such poor understanding. It&amp;#8217;s very un- PZ.&lt;/p&gt;

&lt;p&gt;Here are a few pennies for the conversation. This is really about two separate issues: not knowing about the medium you&amp;#8217;re criticizing, and more broadly, having a stupid question to begin with.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Regarding video games, there are a few major blunders in PZ&amp;#8217;s argument. PZ believes (emphasis mine):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Art is a kind of distillation and representation of human experience, filtered through the minds of its creators. A great painting or poem is something that represents an idea or emotion, communicated through the skill of an artist, to make you see through his or her eyes for a moment. Computer games just don&amp;#8217;t do that. &lt;em&gt;No team sits down to script out a video game with the intent of creating a tone poem in interactive visual displays that will make the player appreciate the play of sunlight on a lake, for instance.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But they &lt;em&gt;do&lt;/em&gt;, at least as much as producers of any other &amp;#8216;artistic&amp;#8217; medium do. Compare Hideo Kojima&amp;#8217;s process with any filmmaker&amp;#8217;s. Look at the &lt;a href='http://www.telegraph.co.uk/technology/video-games/4611024/Flower-video-game-review.html'&gt;Flower&lt;/a&gt; example given in &lt;a href='http://www.youtube.com/watch?v=K9y6MYDSAww'&gt;the TED talk&lt;/a&gt; that inspired the whole discussion. Stating that &amp;#8220;this simply isn&amp;#8217;t something game makers do&amp;#8221; is like an old Pythagorean stating that irrational numbers don&amp;#8217;t exist: it&amp;#8217;s simply not true, by very observable counterexample.&lt;/p&gt;

&lt;p&gt;Even if you don&amp;#8217;t accept my examples (Ebert&amp;#8217;s discussions in particular are full of monkey-patches and amendments to definitions to ensure that no example is &lt;em&gt;quite&lt;/em&gt; right), making a sweeping generalization about an entire expressive medium because someone hasn&amp;#8217;t done a specific project you prescribe (or template for a project) is simply bad logic. There&amp;#8217;s nothing stopping me from doing it myself, today, and poof! I&amp;#8217;ve beaten your argument in its own, irrational territory.&lt;/p&gt;

&lt;p&gt;PZ continues:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Video games will become art when replaying the performance becomes something we find interesting, when the execution of those tools generates something splendid and lasting. It just doesn&amp;#8217;t now, though. If you want to see something really boring, watch someone else playing a video game. Then imagine recording that game, and wanting to go back and watch the replay again sometime. That&amp;#8217;s where games fail as art, which is not to say they can&amp;#8217;t succeed as something comparable to a sport — we may want to explore the rules of a game at length, and repeatedly, and we may enjoy getting better at it. But no matter how well or how long you play a game, it&amp;#8217;s never going to be something you can display in your home as a representation of an experience.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To quote an old TA of mine, &amp;#8220;isolated but incorrect assertion&amp;#8221; on the &amp;#8220;watching others play video games is boring.&amp;#8221; The only times I fire up video games is to &lt;a href='http://www.wcreplays.com/'&gt;watch strangers play Warcraft III&lt;/a&gt;, and Starcraft is on TV in Korea. YouTube is &lt;a href='http://www.youtube.com/watch?v=TB8iu8V99HY'&gt;loaded with&lt;/a&gt; &lt;a href='http://www.youtube.com/watch?v=Bx0Yfg6EasQ'&gt;video game clips&lt;/a&gt;, and we know this is &lt;em&gt;only&lt;/em&gt; for sporty demonstrations, not because the games have had a transformative effect on someone!&lt;/p&gt;

&lt;p&gt;A less &amp;#8220;sporty,&amp;#8221; more personal example: while growing up my siblings would often come into my room to watch me play Final Fantasy VII or Skies of Arcadia. They didn&amp;#8217;t have an interest in playing, but were very invested in my playing it for them. &amp;#8220;It&amp;#8217;s like watching a movie, but better,&amp;#8221; they would say.&lt;/p&gt;

&lt;p&gt;Finally, you also can&amp;#8217;t take this argument seriously when, if you follow it through, you see it enters a heads-I-win-tails-you-lose loop. You see, there &lt;em&gt;are&lt;/em&gt; games where playing them and watching the outcome is very much an artistic experience: think &lt;a href='http://en.wikipedia.org/wiki/Mario_Paint'&gt;Mario&lt;/a&gt; &lt;a href='http://www.youtube.com/watch?v=5uZr3JWYdy8'&gt;Paint&lt;/a&gt;, &lt;a href='http://en.wikipedia.org/wiki/UmJammer_Lammy'&gt;UmJammer&lt;/a&gt; &lt;a href='http://www.youtube.com/watch?v=EtCL5pgevEM'&gt;Lammy&lt;/a&gt;, or the &lt;a href='http://www.mancingdolecules.com/everyday-looper/'&gt;Everyday&lt;/a&gt; &lt;a href='http://www.youtube.com/watch?v=CzQLRPwZjIo'&gt;Looper&lt;/a&gt;. Then they would argue that the games themselves aren&amp;#8217;t art, that they are more akin to canvas, paint, etc. since they take the role of tools, and you only produce art when you play them, get the distinction? But here, PZ wants to classify them as art only if playing them is such an experience that you could hang on the wall. So the definitions he prescribes has it both ways so that he doesn&amp;#8217;t have to accept a new medium as being viable to the others.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Which brings us to the second major point: &lt;strong&gt;the whole argument is stupid because it concerns the biggest failure in the English language: the word &amp;#8220;Art.&amp;#8221;&lt;/strong&gt; The word is completely meaningless; its use almost always means someone trying to dodge a more difficult discussion involving more precise terms.&lt;/p&gt;

&lt;p&gt;What is art anyways? Does it need to have an audience? Can &lt;em&gt;anything&lt;/em&gt; be art in the right context? These questions are never answered because the word means whatever its listener wants it to mean at the moment they say it. &lt;strong&gt;Asking if X or Y is Art or High Art is like asking how many angels can stand on the head of a pin at one time&lt;/strong&gt;: we can combine all we think we know about angels, pins, and the nature of standing, but it doesn&amp;#8217;t make the collection anything less than a clusterfuck of misunderstanding to no fruitful answer.&lt;/p&gt;

&lt;p&gt;If I defecate into my hands and spread it on people around me, I&amp;#8217;m a candidate to be institutionalized. But if I do the same in a theatre, and say I&amp;#8217;m doing it for Art, I&amp;#8217;m to be taken seriously and you should be more open-minded. The word Art, like God, is frequently invoked to tell people to stop thinking and allow idiocy to pass for proper, constructive thought.&lt;/p&gt;

&lt;p&gt;So when I made arguments in the first section responding to PZ&amp;#8217;s quotes, I was a Copernican using what I knew to be weak Ptolemaic arguments to convince a stubborn Ptomaine who could hear nothing else. Just like the most reasonable answer to most &amp;#8220;holy questions&amp;#8221; is that there may simply be no God, the most reasonable answer to &amp;#8220;can video games be art?&amp;#8221; is usually &amp;#8220;ask a better question, or clarify your terms.&amp;#8221;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Metaphors I use to describe software development.</title>
      <link>http://www.morepaul.com/2010/04/metaphors-i-use-to-describe-software.html</link>
      <pubDate>Tue, 20 Apr 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;h4 id='programming_is_magic'&gt;Programming is Magic&lt;/h4&gt;

&lt;p&gt;&lt;a href='http://2.bp.blogspot.com/_3ys1dwfzc2w/S86EGolPZCI/AAAAAAAAAD4/W-LrrKN7viQ/s1600/SICP_wizard.jpg'&gt;&lt;img src='http://2.bp.blogspot.com/_3ys1dwfzc2w/S86EGolPZCI/AAAAAAAAAD4/W-LrrKN7viQ/s320/SICP_wizard.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You don&amp;#8217;t have to be much of a fantasy fan to have a conception of magic and wizards: with curiosity, hard study, and diligence, you can perform taxing and exacting actions to do something marvelous. After studying until you&amp;#8217;re old enough to have a white beard, you perform some sequence of actions that will turn a man into a toad.&lt;/p&gt;

&lt;p&gt;We have magic, and it&amp;#8217;s programming. After much study, you can perform a very intricate mental task (the code a programmer produces is just an artifact of a much richer process) which yields impossible fruit.&lt;/p&gt;

&lt;p&gt;And like magic, you have to do it just right. Compilers will annoyingly tell you it&amp;#8217;s &lt;em&gt;Wingardium Leviosa&lt;/em&gt;, not &lt;em&gt;Wingardium Leviosaaaa&lt;/em&gt;! The worst are spells that pass, but work incorrectly. You may end up spitting slugs.&lt;/p&gt;

&lt;h4 id='programming_is_the_new_literacy'&gt;Programming is the new literacy&lt;/h4&gt;

&lt;p&gt;&lt;a href='http://3.bp.blogspot.com/_3ys1dwfzc2w/S86EHL0yzbI/AAAAAAAAAEA/8GL35J0282U/s1600/hieroglyphics01.jpg'&gt;&lt;img src='http://3.bp.blogspot.com/_3ys1dwfzc2w/S86EHL0yzbI/AAAAAAAAAEA/8GL35J0282U/s320/hieroglyphics01.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s very recent that reading and writing are expected skills, which we believe everyone has a right to learn. For hundreds of years, it was only scribes who could do it. The writing systems were themselves complex, it required privilege, education, and training before you could put anything to a tablet (and you lived very comfortably for it).&lt;/p&gt;

&lt;p&gt;Somewhere in the last few thousand years, it&amp;#8217;s a basic skill everyone is expected to have. Knowing how to read and write isn&amp;#8217;t enough for a competitive, skilled job. You need to know how to write &lt;em&gt;to even apply for one.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Programming is very new, and we&amp;#8217;re in the cave-painting phases of it. Long after I&amp;#8217;m dead, programmers will look at today&amp;#8217;s languages and wonder how we bothered to endure it.&lt;/p&gt;

&lt;p&gt;And like reading, once you learn it, worlds and worlds of intellectual exercise and stimulation open up as a result.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m with the authors of &lt;a href='http://htdp.org/'&gt;How To Design Programs&lt;/a&gt; in that I believe &lt;a href='http://htdp.org/2003-09-26/Book/curriculum-Z-H-2.html'&gt;everybody should learn to design programs&lt;/a&gt;, just as we expect them to learn to read and do math.&lt;/p&gt;

&lt;h4 id='on_imperative_vs_functional'&gt;On imperative vs. functional&lt;/h4&gt;

&lt;p&gt;Most programmers are imperative programmers, which I like to think of as boxers. They punch very hard, and very well. They have giant upper bodies, mean biceps, and when an obstacle presents itself, great programmers can take it down with a sustained set of punches.&lt;/p&gt;

&lt;p&gt;Sadly, most boxers are a little brutish: there is an established and valuable boxing theory which consists of more than just punching hard. But few boxers take the time and discipline to learn it. Most will just punch as hard as possible, as close to center as they know. Boxers &lt;a href='http://cc2e.com/'&gt;who study on the theory&lt;/a&gt; tend to be marvelous in combat.&lt;/p&gt;

&lt;p&gt;In this world however, are people who &lt;a href='http://www.ccs.neu.edu/home/matthias/BTLS/'&gt;do things a little differently&lt;/a&gt;. Functional programmers are mixed martial artists. At some point they got tired of punching, and learned to grapple. Learned to kick. They can still punch, but its not their favored solution, and for many their arms aren&amp;#8217;t quite so beastly for lack of practice.&lt;/p&gt;

&lt;p&gt;Boxers judge the mixed martial artists using tests made for boxers, and deem it unworthy. When allowed to use pressure points or grapples, the mixed martial artist will generally win, but most spars are set to boxing rules.&lt;/p&gt;

&lt;p&gt;But in the world of big biceps, a few boxers get curious, and wonder what the other side can teach.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Mooooovies!</title>
      <link>http://www.morepaul.com/2010/04/mooooovies.html</link>
      <pubDate>Mon, 19 Apr 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I posted these on the last blog, months before I was digitally evicted.&lt;br /&gt;Last summer I participated with some friends in the &lt;a href='http://www.48.tv'&gt;48-hour Film Festival&lt;/a&gt;, making two movies.&lt;/p&gt;

&lt;p&gt;The game works as follows: at the start of the 48 hours, you&amp;#8217;re given a character, prop, and line of dialogue that must be present in your movie. You&amp;#8217;re also given a genre, with one chance to re-draw if desired.&lt;/p&gt;

&lt;p&gt;The first, called &lt;em&gt;Hair Today, Gone Tomorrow!&lt;/em&gt;, was a dry run of sorts, where we would identify bottlenecks for Game Time. The plan was to do this in 12 hours, we really did it in about 14.&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/Euks_k3rx14' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/Euks_k3rx14' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;We drew Science Fiction, a salesperson, a wooden spoon, and the line &amp;#8220;I wouldn&amp;#8217;t go down there if I were you.&amp;#8221; Understanding the radio address in the beginning is pretty key: it introduces the Sci-Fi element on which the plot is based (namely, a drug has been invented that lets someone re-live another person&amp;#8217;s experiences with a sample of their hair).&lt;/p&gt;

&lt;p&gt;I acted, with a touch of sound design. See if you can spot the errors! I count two.&lt;/p&gt;

&lt;p&gt;For the &amp;#8216;real&amp;#8217; movie we made for the festival (_Not All Who Wander_), we drew Horror, a pot of coffee, an addict named Sonia, and the line &amp;#8221;I&amp;#8217;m pretty sure that&amp;#8217;s not right.&amp;#8221;&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/pImhkZ0shts' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/pImhkZ0shts' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;I didn&amp;#8217;t act in this, I was one of three involved in sound. Being at the end of the pipeline (sound was done last), it was a hellish few hours, especially considering all the on-site audio collected during shooting was garbage. I am proud of the sound work I did on this, but mostly if I remember what the conditions were.&lt;/p&gt;

&lt;p&gt;This one has three major, hard-to-spot production errors. Brownie points if you can find them, one of them in particular is hilarious.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Another Remix</title>
      <link>http://www.morepaul.com/2010/04/another-remix.html</link>
      <pubDate>Mon, 19 Apr 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I went over &lt;a href='http://www.morepaul.com/2010/04/baal-bless-internet.html'&gt;some favorite remixes&lt;/a&gt; a few days ago, but here&amp;#8217;s another I forgot (I might do this from time to time): Wilford Brimley raps about his experience with Diabetes. It really picks up after a minute and a half, and like the Trolls &amp;amp; Love, is underscored by Ratatat.&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/3R7tSSN2fHc' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/3R7tSSN2fHc' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>On Programming Interviews</title>
      <link>http://www.morepaul.com/2010/04/on-programming-interviews.html</link>
      <pubDate>Sat, 17 Apr 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Lots of great things have been written on the subject of programming interviews, but since I&amp;#8217;ll be entering the workforce very soon, I&amp;#8217;ve taken away a few notes on how I would like to conduct them in the future, having just run the job search gauntlet.&lt;/p&gt;

&lt;p&gt;Regarding phone screens, I learned a lot from &lt;a href='http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions'&gt;Steve Yegge&amp;#8217;s post&lt;/a&gt; on his process. To summarize, he believes the candidate should demonstrate some basic proficiency and understanding in five areas to get the on-site: coding, OO design, scripting/regexes, data structures, and binary. It&amp;#8217;s alright if the candidate struggles a little, but if their answer to &amp;#8216;describe a function to sort an array of integers&amp;#8217; is &amp;#8216;Collections.sort(array),&amp;#8217; you might want to think twice about bringing them in.&lt;/p&gt;

&lt;p&gt;Another advantage of living in 2010 is that we can actually see some code during a phone screen: one interviewer had me use &lt;a href='http://etherpad.com/'&gt;EtherPad&lt;/a&gt; while on the phone with them, and I would probably do something similar.&lt;/p&gt;

&lt;p&gt;More generally, diversity in the phone screen process will help you eliminate candidates who can talk big in one or a few fields, but don&amp;#8217;t have (or can&amp;#8217;t form) a more complete picture of what&amp;#8217;s going on.&lt;/p&gt;

&lt;p&gt;If the candidate makes it to on-site, I would extend the diversity principle, but probably ask a few questions not listed above (if they demonstrated that they can write a regular expression in the phone screen, they don&amp;#8217;t need to show me one on-site). Here you could look at another round of fun brain- warpers that &lt;a href='http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html'&gt;Joel Spolsky points out:&lt;/a&gt; pointers and recursion. I would love to write out a few problems &lt;a href='http://www.joelonsoftware.com/articles/TestYourself.html'&gt;as he has&lt;/a&gt; that just show they can read/write programs that use these techniques.&lt;/p&gt;

&lt;p&gt;Brain teasers are a contested form in the interviews, but I love them too. Well, good ones anyways. I would like a candidate who smiles when they know a puzzle is headed their way. They would be very hintable, so I&amp;#8217;m not anticipating an &amp;#8216;aha!&amp;#8217; moment. An example of one of these that I think would rock, &lt;a href='http://www.skorks.com/2010/03/an-interview-question-that-prints-out-its-own-source-code-in-ruby/'&gt;comes from Skorks&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Write a &lt;a href='http://en.wikipedia.org/wiki/Quine_(computing)'&gt;quine&lt;/a&gt;, in whatever language you like (for those who don&amp;#8217;t know, a quine is a program that prints its own source code without reading itself).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now I&amp;#8217;ve written about it, I probably wouldn&amp;#8217;t use it. A risk you run with any type of programming question that is meant to challenge is that they&amp;#8217;ve run into it before, or researched the standard questions before arriving. While there&amp;#8217;s nothing wrong with researching beforehand, you probably want to see the candidate think, not just what they can remember. For this reason:&lt;/p&gt;

&lt;p&gt;* &lt;strong&gt;Pick nonstandard problems.&lt;/strong&gt; For coding samples, probably avoid direct library functions, or anything &lt;a href='http://maxnoy.com/interviews.html'&gt;from here&lt;/a&gt;. They should be simple, so maybe library functions with a twist. A favorite of mine was &amp;#8220;write a function that takes a string, and returns whether the braces, brackets and parenthesis are matched.&amp;#8221; Challenging, but appropriate, and more applicable to any job than reversing a string.&lt;/p&gt;

&lt;p&gt;* &lt;strong&gt;Have backups.&lt;/strong&gt; One interviewer asked me what a good data structure would be for the search function of an address book. Given that I&amp;#8217;d just finished the &lt;a href='http://www.facebook.com/careers/puzzles.php#!/careers/puzzles.php?puzzle_id=17'&gt;Facebook Breathalyzer puzzle&lt;/a&gt;, we were finished with what might have been twenty minutes of material in five.&lt;/p&gt;

&lt;p&gt;A few more notes:&lt;/p&gt;

&lt;p&gt;* &lt;strong&gt;I personally don&amp;#8217;t like whiteboard coding.&lt;/strong&gt; I get nervous, can&amp;#8217;t edit/iterate the function rapidly, and can&amp;#8217;t go at an appropriate speed. So when my time comes, I might minimize that. Regardless, you can&amp;#8217;t be an actor unless you audition, so it&amp;#8217;ll stay.&lt;/p&gt;

&lt;p&gt;* &lt;strong&gt;A short quiz, on paper, would probably be included.&lt;/strong&gt; This wouldn&amp;#8217;t be multiple-choice or anything silly, just a block of code, and ask the candidate to comment on all of its qualities.&lt;/p&gt;

&lt;p&gt;The only flaw in my plan is, with all the material I&amp;#8217;ve mentioned, I&amp;#8217;d probably need more than 45 minutes to get a feel for a candidate, and I doubt I&amp;#8217;d be given more than that at a time. I&amp;#8217;ll have to find a way to resolve this ^_^&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Baal Bless the Internet</title>
      <link>http://www.morepaul.com/2010/04/baal-bless-internet.html</link>
      <pubDate>Sat, 17 Apr 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I love remixes, and hope sometime (probably after I graduate) I can get my lazy bum off the computer chair so I can make a few myself. Here are a few that I really love (I also link to the original sources, you should check them out if you get the chance):&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/YTihsJQHt48' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/YTihsJQHt48' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Bale Out&lt;/strong&gt; (warning, NOT SAFE FOR WORK) is a remix of &lt;a href='http://www.youtube.com/watch?v=qrvMTv_r8sA'&gt;Christian Bale&amp;#8217;s massive explosion&lt;/a&gt; on the set of Terminator: Extinction. Aside from being absolutely hilarious, it&amp;#8217;s a pretty hip dance piece.&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/rvYZRskNV3w' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/rvYZRskNV3w' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;This is Sparta!&lt;/strong&gt; is the classic. Thanks, Gerard Butler, for making that role so damn good (&lt;a href='http://www.youtube.com/watch?v=QkWS9PiXekE'&gt;original&lt;/a&gt;) so we could get so much mileage out of it (more at &lt;a href='http://knowyourmeme.com/memes/this-is-sparta-300'&gt;Know Your Meme&lt;/a&gt;).&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/6bMLrA_0O5I' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/6bMLrA_0O5I' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Love and Trolls - Boxxy&lt;/strong&gt; takes the theatricality of Boxxy and makes it into a hell of an expressive piece in its own right. &lt;a href='http://knowyourmeme.com/memes/boxxy'&gt;Know Your Meme covers Boxxy&lt;/a&gt; pretty well. As an aside, my roommate and I see lots of things on the Internet that gross out or shock many people, and we don&amp;#8217;t bat an eyelash. But when I watch the &lt;a href='http://www.youtube.com/watch?v=jsFebKreNE0'&gt;original&lt;/a&gt; &lt;a href='http://www.youtube.com/watch?v=PRq6OSkLkKs'&gt;Boxxy videos&lt;/a&gt;&amp;#8230; man. It&amp;#8217;s hard to get through it all.&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/Q16KpquGsIc' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/Q16KpquGsIc' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Ronald McDonald Insanity&lt;/strong&gt;, both the first (above) and &lt;a href='http://www.youtube.com/watch?v=yRgzLAmbuws'&gt;the second&lt;/a&gt;, are surreal. Not for everyone, but as a fan of electronic music and noise music, the kinds of dissonances and textures created (as well as the video cacophony) are right up my alley. For the curious, they&amp;#8217;re primarily voice audio overlaid from established music (like Love and Trolls, which used Ratatat), in this case from a series of shooter games in Japan. The Ronald McDonald Insanity songs are &lt;a href='http://www.youtube.com/watch?v=VIop055eJhU&amp;amp;feature=related'&gt;here&lt;/a&gt; (first) and &lt;a href='http://www.youtube.com/watch?v=P7dLp2Eb7cg'&gt;here&lt;/a&gt; (second).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Software and Evolution</title>
      <link>http://www.morepaul.com/2010/04/software-and-evolution.html</link>
      <pubDate>Thu, 08 Apr 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I think the software is growing, and will continue to grow, the way lifeforms have grown and evolved on Earth. By tthis I mean we started with a single ancestor, likely of a few proteins or perhaps a single cell, only to become a planet housing humans, echidnas, sponges, fungi, insects, trees, and more.&lt;/p&gt;

&lt;p&gt;This mostly comes to mind when I look at essays like &lt;a href='http://www.pragprog.com/magazines/2010-04/tangled-up-in-tools'&gt;this&lt;/a&gt; &lt;a href='http://reprog.wordpress.com/2010/03/03/whatever-happened-to-programming/'&gt;series&lt;/a&gt;, by Mike Taylor, on how so much of coding these days is just playing plumber between various libraries, fixing leaks and disasters that occur when the piping isn&amp;#8217;t perfect. The argument is stated well by jdietrich commenting on the story (where else?) on &lt;a href='http://news.ycombinator.com'&gt;Hacker News&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;My biggest gripe with modern programming is the sheer volume of arbitrary stuff I need to know. My current project has so far required me to know about Python, Django, Google App Engine and it’s datastore, XHTML, CSS, JQuery, Javascript, JSON, and a clutch of XML schema, APIs and the like.Don’t get me wrong, I’m grateful for all of it, but it just doesn’t seem like what I was promised when I followed SICP for the first time. It just feels like I spend most of my time scouring through documentation and trying to remember umpteen different sets of syntax and class names rather than actually thinking in code.&lt;/p&gt;

&lt;p&gt;Back in ye olden days, most programming tasks I performed felt quite natural and painless, just a quiet little chat between me and the compiler. Sometimes longwinded, sometimes repetitive, but I just sat and though and typed and software happened. The work I do these days feels more like being a dogsbody at the tower of babel. I just don’t seem to feel fluent in anything much any more.&lt;/p&gt;

&lt;p&gt;We talk about ‘flow’ quite a lot in software and I just have to wonder what’s happening to us all in that respect. Just like a conversation becomes stilted if the speakers keep having to refer to their phrasebooks and dictionaries, I wonder how much longer it will be possible to retain any sort of flowful state when writing software. Might the idea of mastery disappear forever under a constant torrent of new tools and technologies?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I happen to agree with most of the posts, but their symptomatic of something that&amp;#8217;s been on my mind: &lt;em&gt;our code is really inefficient.&lt;/em&gt; But more importantly: &lt;em&gt;that&amp;#8217;s okay&lt;/em&gt;, and further, &lt;em&gt;we will have to live with it in order to reach software at the level that humans are at biologically&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Allow me to clear up the mapping. When we started with computers, we wrote in raw, unadulterated binary. Every machine instruction was treasured, coddled, and several &lt;a href='http://www.hackersdelight.org/'&gt;amazingly clever&lt;/a&gt; &lt;a href='http://www.cs.utah.edu/~elb/folklore/mel.html'&gt;hacks&lt;/a&gt; were developed so operations could use minimal resources.&lt;/p&gt;

&lt;p&gt;This was a necessity! We had to! But then we moved up to assembly, then the Capital Languages (FORTRAN, COBOL), and so on, until computers got powerful enough that we could afford ourselves some abstractions. What level of abstractions? Imagine how Mel the Real Programmer and other hackers of the binary era must feel when we&amp;#8217;re using languages with immutable strings, and someone writes code like:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='java'&gt;    &lt;span class='n'&gt;String&lt;/span&gt; &lt;span class='n'&gt;container&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
    &lt;span class='k'&gt;for&lt;/span&gt; &lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='n'&gt;String&lt;/span&gt; &lt;span class='n'&gt;suffix&lt;/span&gt; &lt;span class='o'&gt;:&lt;/span&gt; &lt;span class='n'&gt;suffixes&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt;
        &lt;span class='n'&gt;container&lt;/span&gt; &lt;span class='o'&gt;+=&lt;/span&gt; &lt;span class='n'&gt;suffix&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
    &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;container&lt;/span&gt;&lt;span class='o'&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;In which &lt;em&gt;every iteration of the loop allocates a new string!&lt;/em&gt; And the code doesn&amp;#8217;t render the program unusable!&lt;/p&gt;

&lt;p&gt;How does Mel feel? Probably how a bacteria (or other single-celled organism) would feel when I scratch an itch, and kill or damage hundreds of skin cells ostensibly for nothing.&lt;/p&gt;

&lt;p&gt;Single cell organisms are still with us, and will almost certainly outlast us. We still have them in programming as well. To this day, if you want to really bust out the performance, you still gain lots by living close to the metal: I know a student in the introductory graphics class who implemented his linear algebra package by including x86 in his C. And almost all projects for my combinatorial optimization class are done in C only because, true or not, we believe &amp;#8220;it&amp;#8217;s the fastest.&amp;#8221; (it is really fast).&lt;/p&gt;

&lt;p&gt;The truth is, while people are still busting out assembly and squeezing whatever hardware gains they can, most of us can now get away with being pretty wasteful. And its the only way we can build the truly large, monolithic systems people pay big money for.&lt;/p&gt;

&lt;p&gt;What am I trying to communicate with this metaphor?&lt;/p&gt;

&lt;p&gt;First, &lt;strong&gt;stop arguing that speed be the limiting factor of a language or technology&amp;#8217;s eventual success.&lt;/strong&gt; Every abstraction we use today (structured programming, object-orientation) was painfully slow during its introduction, but it will be one of these abstractions that will be the key to the next step in software evolution.&lt;/p&gt;

&lt;p&gt;I recognize there are many good arguments against the use of functional programming, logic programming, and other alternate paradigms. Having speed comparable to other non-C languages today and calling it slow is not one of them.&lt;/p&gt;

&lt;p&gt;Second, the diversity of software will propagate. Bacteria, fungi, plants, and eagles all live in radically different ways. Learn this and love it. Saying &amp;#8216;my form of programming is the &lt;strong&gt;real&lt;/strong&gt; way&amp;#8217; is like saying fungi are a &lt;strong&gt;real&lt;/strong&gt; life form, but plant life isn&amp;#8217;t. Embedded systems have different needs than white-collar users of &amp;#8216;enterprise&amp;#8217; software, different than logicians.&lt;/p&gt;

&lt;p&gt;Finally, as it relates to Mike Taylor&amp;#8217;s article, what we are seeing now with library hell is the bad mutations of software evolution, the ones that will die out until we figure out how to do it right. If software at this point is at a jellyfish level, us sorting out library or framework programming are all the failed experiments to grow bones, gills, feet, and wings. One of them will work eventually, but lots and lots of our software will die until it does.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Being lucky, being strange.  Being lucky to be strange.</title>
      <link>http://www.morepaul.com/2010/04/being-lucky-being-strange-being-lucky.html</link>
      <pubDate>Wed, 07 Apr 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;The Olympics brought more opportunities for people to be hatin&amp;#8217; on Johnny Weir and his style of performance. I love what he said: &amp;#8220;Every little boy should be so lucky to turn into me.&amp;#8221;&lt;/p&gt;

&lt;p&gt;And, you know, it&amp;#8217;s sort of true. How wonderful if we were all so lucky that we could freely be who we want to*, without judgement?&lt;/p&gt;

&lt;p&gt;I bring this all up because I saw this video yesterday (the action starts at about 1:08).&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/-3-p_4z6FiM' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/-3-p_4z6FiM' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;If we could only all be so lucky as Johnny Weir and this guy, the world would be a much more fun, interesting place to be.&lt;/p&gt;

&lt;p&gt;* = Provided of course, nobody gets hurt. Sorry, murderers, pedos, etc&amp;#8230;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Common Lisp</title>
      <link>http://www.morepaul.com/2010/04/common-lisp.html</link>
      <pubDate>Tue, 06 Apr 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I&amp;#8217;ve been playing around with Common Lisp recently, using &lt;a href='http://www.gigamonkeys.com/book/'&gt;Practical Common Lisp&lt;/a&gt; and &lt;a href='http://letoverlambda.com/'&gt;Let Over t Over Lambda&lt;/a&gt; as guides (not gonna lie, having LOL on the spine of your book is wonderful). Last year when I went through my Scheme phase (the original URL of this blog was littleschemer.blogspot.com), I never thought I&amp;#8217;d see the day that I&amp;#8217;d switch sides.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://3.bp.blogspot.com/_3ys1dwfzc2w/S7vrA7aCkzI/AAAAAAAAADw/amZUCZS4jcg/s1600/iPhoneBackgroundSqueeze.jpg'&gt;&lt;img src='http://3.bp.blogspot.com/_3ys1dwfzc2w/S7vrA7aCkzI/AAAAAAAAADw/amZUCZS4jcg/s400/iPhoneBackgroundSqueeze.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;FWIW, this is my iPhone background image.&lt;/p&gt;

&lt;p&gt;I do feel like a traitor though, since even though I&amp;#8217;m a theory-head and advocate of FP, &lt;strong&gt;I&amp;#8217;m loving Common Lisp.&lt;/strong&gt; There are a few reasons for this:&lt;/p&gt;

&lt;p&gt;* Simpler macros. I&amp;#8217;ll bet some hardcore Schemers will disagree with me on this, but I feel that defmacro is much, much simpler to learn than syntax- case, and syntax-rules always leaves me wanting more. Maybe I&amp;#8217;m deficient, but I took to defmacro immediately, whereas when I want to do anything non-trivial in Scheme, I feel myself always going back &lt;a href='http://www.scheme.com/tspl3/syntax.html#./syntax:h3'&gt;to Dybvig&amp;#8217;s explanations&lt;/a&gt;, taking far longer than I&amp;#8217;d like.&lt;/p&gt;

&lt;p&gt;While in principle I&amp;#8217;m for hygiene as the default, it&amp;#8217;s not too big an issue in practice. Hoyte gives a great little macro (one of the first in his book) that ensures you fresh variables whenever you want them, without even having to declare them!&lt;/p&gt;

&lt;p&gt;* Language libraries. CL comes with every function you could ever want. It comes back to what Peter Norvig said in &lt;a href='http://norvig.com/paip.html'&gt;Paradigms in Artificial Intelligence Programming&lt;/a&gt; (paraphrasing): Scheme is one of the smallest languages to define (&amp;lt; 50 pages), whereas CL is one of the largest (&amp;gt; 1200 pages).&lt;/p&gt;

&lt;p&gt;While some Schemes provide these, since they aren&amp;#8217;t part of the standard you aren&amp;#8217;t guaranteed anything across implementations. In fact, my favorite Scheme in terms of libraries (good ole&amp;#8217; &lt;a href='http://www.plt-scheme.org/'&gt;PLT&lt;/a&gt;) even broke across versions when they enforced module declarations at the top of every file.&lt;/p&gt;

&lt;p&gt;Besides, once a Scheme gets these, &lt;a href='http://www.plt-racket.org/new-name.html'&gt;they stop wanting to be called Scheme&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This isn&amp;#8217;t to say its all peaches and cream: I still prefer Scheme&amp;#8217;s single namespace over Common Lisp&amp;#8217;s, I prefer Scheme&amp;#8217;s naming conventions (map vs. mapcar, or worse, loop for elem in list collecting). And issues with lambdas, namely sharp-quoting and not being able to place functions in the function position (especially after learning &lt;a href='http://redex.plt-scheme.org/'&gt;the beauty of Scheme&amp;#8217;s semantics&lt;/a&gt; so well last semester) still throw me for a loop.&lt;/p&gt;

&lt;p&gt;But after a year of mounting tension with the residents of &lt;a href='http://en.wikipedia.org/wiki/Shelbyville_(The_Simpsons)'&gt;Shelbyville&lt;/a&gt;, I realize they&amp;#8217;ve got quite a bit right ^_^.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Paul the lil' misogynist</title>
      <link>http://www.morepaul.com/2010/03/paul-lil-misogynist.html</link>
      <pubDate>Wed, 31 Mar 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;The longer I&amp;#8217;m away from home, the more I forget about where I come from. I&amp;#8217;m on Spring Break now, and usually when I&amp;#8217;m home I spend some time digging around the house for archiving material. During my last Spring Break I put &lt;a href='http://www.facebook.com/#!/album.php?aid=2138295&amp;amp;id=1010423'&gt;some kiddie pictures on Facebook&lt;/a&gt; that was met with much enthusiasm from my family. This time, I have a video.&lt;/p&gt;

&lt;p&gt;My school had a tradition of putting 4th graders in little skits, and I was in one called &lt;em&gt;Sammy Carducci&amp;#8217;s Guide to Women.&lt;/em&gt; (based, as I just found out, on a terrible-looking &lt;a href='http://www.amazon.com/Sammy-Carduccis-Guide-Women-Ronald/dp/0140364811'&gt;novel for middle schoolers&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The director of these shows recorded them, and gave to me a DVD he&amp;#8217;d made as a graduation gift.&lt;/p&gt;

&lt;p&gt;The second half of the scene is below (the first half is out of focus, you need to wait a few seconds on what I&amp;#8217;ve embedded below). Lord, what a strange thing to look back on.&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/WG1LuhUpw8s' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/WG1LuhUpw8s' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Highlights are at 2:13 (I make some really amazing, kind of demonic throat sound), and the freak out at 3:10.&lt;/p&gt;

&lt;p&gt;Transcript of the scene after the jump&amp;#8230;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Unrelated, but cool links I found this morning: &lt;a href='http://www.ericsink.com/entries/dual_class_computing.html'&gt;a concise prediction&lt;/a&gt; I agree with on where computers are headed (differentiating between &amp;#8216;people&amp;#8217; computers and &amp;#8216;geek&amp;#8217; computers).&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.lifebeyondcode.com/2010/03/29/9-reasons-why-many-smart-people-go-nowhere/'&gt;Bullet points&lt;/a&gt; on why smart people fail to be successful. While the choice of words is muddy, I found a lot of his points resonated with me. Arguably the best thing I learned at Brown was the hard experience of occasionally failing, which was absolutely necessary to (stealing his jargon) &amp;#8216;leave the sandbox.&amp;#8217;&lt;/p&gt;

&lt;p&gt;Finally, having front-end web dev skills went from being able to navigate &lt;a href='http://www.w3schools.com/'&gt;awful w3schools tutorials&lt;/a&gt; into a proper science of its own. Even if you know CSS and basic Javascript, there&amp;#8217;s pitfall after pitfall in the trenches of the real world. I found &lt;a href='http://blog.nodnod.net/post/486290506/knowledge-for-front-end-developers'&gt;this list of requirements for new hires&lt;/a&gt; to be a good primer on what are contemporary considerations.&lt;/p&gt;

&lt;p&gt;For the record, I tried adding these to the video, but YouTube captioning is a mess or horrors. Vimeo doesn&amp;#8217;t even support it, lame sauces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; Here, I&amp;#8217;m gonna give you some background information on women. You might want to take notes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; Uh, notes? Oh, did I show you my new pen? It writes in four different colors! What color do you think I should use? Maybe red, because it&amp;#8217;s like blood! But my brother likes green. Some people like blue, but black is easier to read!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; Oh, Gus, are you finished?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; Red, definitely red!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; Try to concentrate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; Hey, this thing is jammed!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; Okay, first off, women tend to cry a lot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; (writing) Cry. A. Lot. Is this okay?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; Yeah, fine. Most of the time all they do is think about mushy romantic stuff. They do things like write letters to Mel Gibson, and memorize the lyrics to their favorite love song. Women are always going on diets, but they have this uncontrollable urge to bake chocolate chip cookies. It&amp;#8217;s one of the mysteries of modern science. Women are always in groups, so they have someone to listen to while they &lt;strong&gt;inaudible&lt;/strong&gt;, which is all the time. And when they&amp;#8217;re not together, they&amp;#8217;re usually on the phone. Basically, they&amp;#8217;re weak, and they&amp;#8217;re looking for someone strong. That&amp;#8217;s where the two of us come in. Okay, you got that so far?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; Yeah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; WHAT IS THIS?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; Oh, its a rocket ship taking off into outer space, see!? The rocket ship is black, the earth is green, the sky is blue, and the rocket&amp;#8217;s flames are red.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; GUS!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; This pen is great for rocket ships!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; Let&amp;#8217;s try a new topic, huh?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; Can I still take notes?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; Yeah, but you might want to start a new page.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re gonna call this &amp;#8220;Tips for Impressing Women.&amp;#8221; Okay, number 1, NEVER ever carry an umbrella. It&amp;#8217;s a sign of weakness.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; Hey, I never knew that!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; Number 2, always use an after shave, even if you don&amp;#8217;t shave. Number 3, never say &amp;#8220;I don&amp;#8217;t know.&amp;#8221;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; But what if you don&amp;#8217;t know?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; Pretend you do. Number 4, talk in a low, soft voice. This is called the Voice of Love. Women go nuts for it!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; What does it sound like?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; Umm&amp;#8230; I&amp;#8217;ll do it for you later. I don&amp;#8217;t want anyone to bother me right now. And number 5, and this is the very most important one of all. &amp;#8220;Dare to be different.&amp;#8221;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; You mean look preppy like you do?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; No! That wouldn&amp;#8217;t be different, that would be the same!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; So how do you know what to do?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; It&amp;#8217;s up to you. That&amp;#8217;s the whole point. Come on, let&amp;#8217;s get on with the survey.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; &lt;em&gt;inaudible&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; Just take notes! We&amp;#8217;re going to be checkout out the women in the cafeteria and looking for things that might be important. I tell you, and you write it down. For instance, stuff that would drive you crazy.Like Marsha Brennan would be fine, but has that habit of picking her ear with a paper clip. Debbie Watterstein&amp;#8217;s great, until she laughs, and sounds like a pig. And that one over there, she&amp;#8217;s way too skinny, and the person she&amp;#8217;s with, she&amp;#8217;s&amp;#8230;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; Sammy?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; She&amp;#8217;s beautiful! GUS! GUS GUS! SHe&amp;#8217;s looking at us.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; What are you doing?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; Just nod and smile! Pretend we&amp;#8217;re like student architects checking out the building.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; Hey! Quit chewing on my pen! You might have germs!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; &amp;#8220;Yes! Of course! I see!&amp;#8221;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; You see what?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; She looked away, we&amp;#8217;re clear. C&amp;#8217;mon, let&amp;#8217;s go get candy bars.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gus&lt;/strong&gt; But what about the survey?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sammy&lt;/strong&gt; It&amp;#8217;s FINISHED!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Code-related lulz</title>
      <link>http://www.morepaul.com/2010/03/code-related-lulz.html</link>
      <pubDate>Wed, 31 Mar 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;The first is the &lt;a href='http://farm4.static.flickr.com/3031/2784420693_913239d70a_o.gif'&gt;only conceivable improvement&lt;/a&gt; I could think of for &lt;a href='http://www.morepaul.com/2010/02/hiatus-and-voyage-of-vim.html'&gt;my baby, vim&lt;/a&gt;.&lt;br /&gt;The second is &lt;a href='http://www.gnu.org/fun/jokes/ed'&gt;the source code for ed&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Both from &lt;a href='http://www.reddit.com/r/programming/comments/bktbz/your_problem_with_vim_is_that_you_dont_grok_vi/'&gt;this reddit thread&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Books, Books, the Musical Fruit</title>
      <link>http://www.morepaul.com/2010/03/books-books-musical-fruit.html</link>
      <pubDate>Tue, 23 Mar 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;A lot of big-time, &lt;a href='http://trueslant.com/conorfriedersdorf/2010/03/20/writing-that-influenced-me/'&gt;real&lt;/a&gt; &lt;a href='http://www.theatlantic.com/culture/archive/2010/03/all-the-other-blogs-are-doing-it/37805/'&gt;bloggers&lt;/a&gt; &lt;a href='http://yglesias.thinkprogress.org/archives/2010/03/influential-books.php'&gt;are&lt;/a&gt; &lt;a href='http://www.marginalrevolution.com/marginalrevolution/2010/03/books-which-have-influenced-me-most.html'&gt;writing&lt;/a&gt; &lt;a href='http://trueslant.com/matthewsteinglass/2010/03/19/4-of-the-10-books-that-influenced-me-most/'&gt;about&lt;/a&gt; their 10 most influential books. I&amp;#8217;ll present mine ne here, stealing some &lt;br /&gt;terminology: this is my &amp;#8216;gut list,&amp;#8217; not my &amp;#8216;I&amp;#8217;ve thought about this for a long time&amp;#8217; list:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don Quijote&lt;/strong&gt; (_Cervantes_)&lt;/p&gt;

&lt;p&gt;&lt;a href='http://2.bp.blogspot.com/_3ys1dwfzc2w/S6le9tX4ISI/AAAAAAAAADQ/ke5jBjb6aRE/s1600-h/quijote.png'&gt;&lt;img src='http://2.bp.blogspot.com/_3ys1dwfzc2w/S6le9tX4ISI/AAAAAAAAADQ/ke5jBjb6aRE/s200/quijote.png' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#8216;Misfit&amp;#8217; entertainment is on the rise: &lt;em&gt;Napoleon Dynamite&lt;/em&gt;, &lt;em&gt;Eagle vs. Shark&lt;/em&gt;, and pretty much everything starring Michael Cera are examples of movies where we celebrate and flesh out the weirdos, oddballs, and losers of society into something a little higher. This &amp;#8216;not-like-the-others&amp;#8217; quality is all over my list.&lt;/p&gt;

&lt;p&gt;None of them hold a candle to Don Quijote, however. He embodies that cute Akira Kurosawa line: &amp;#8220;In a mad world, only the mad are sane.&amp;#8221; While you the reader know he&amp;#8217;s off his rocker, and that you&amp;#8217;re &amp;#8220;better off,&amp;#8221; you sort of envy him. He&amp;#8217;s happy as a clam! He&amp;#8217;s living the adventure! You can almost always open up to a random point in either of the two volumes to see Quijote having a good time, and Sancho being completely lovable.&lt;/p&gt;

&lt;p&gt;I feel like my connection with this book is like a lot of religious people&amp;#8217;s with their Holy Text: I haven&amp;#8217;t read every word of it, and its been so long since I read it that I&amp;#8217;m probably just taking what I want to remember out of it. I&amp;#8217;m sure my many memories are easily amended and disproven by someone who&amp;#8217;s really studied it. But it left enough of a mark on me to bring my dog- eared, notes-in-the-margin copy everywhere I go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Short Stories&lt;/strong&gt; (_Jorge Luis Borges_)&lt;/p&gt;

&lt;p&gt;&lt;a href='http://1.bp.blogspot.com/_3ys1dwfzc2w/S6leA4uqu0I/AAAAAAAAACw/1jGVb3uF_rc/s1600-h/borges.jpg'&gt;&lt;img src='http://1.bp.blogspot.com/_3ys1dwfzc2w/S6leA4uqu0I/AAAAAAAAACw/1jGVb3uF_rc/s200/borges.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My former Spanish teacher quipped that Borges probably wasn&amp;#8217;t the most read Spanish author, but the most reread. You can see why: his short fiction is jam-packed with beautiful imagery, contradiction, love and meaning. They&amp;#8217;re &lt;a href='http://en.wikipedia.org/wiki/Everlasting_Gobstopper'&gt;Everlasting Gobstoppers&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The White Tiger&lt;/strong&gt; (_Aravind Adiga_)&lt;/p&gt;

&lt;p&gt;&lt;a href='http://1.bp.blogspot.com/_3ys1dwfzc2w/S6le-tf_w_I/AAAAAAAAADo/0rkjTmGEuMY/s1600-h/whitetiger.jpg'&gt;&lt;img src='http://1.bp.blogspot.com/_3ys1dwfzc2w/S6le-tf_w_I/AAAAAAAAADo/0rkjTmGEuMY/s200/whitetiger.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A recent addition, I just finished this about a month ago and absolutely loved it. Murder is one of the most interesting themes in fiction, especially how we can make someone else killable. The character&amp;#8217;s progression/descent into murder in a modern capitalist society is entertaining and evocative.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Banvard&amp;#8217;s Folly&lt;/strong&gt; (_Paul Collins_)&lt;/p&gt;

&lt;p&gt;&lt;a href='http://4.bp.blogspot.com/_3ys1dwfzc2w/S6leAg4eiWI/AAAAAAAAACo/p9o_Gh1JsWc/s1600-h/banvards.jpg'&gt;&lt;img src='http://4.bp.blogspot.com/_3ys1dwfzc2w/S6leAg4eiWI/AAAAAAAAACo/p9o_Gh1JsWc/s200/banvards.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The non-fiction of Paul Collins is some of my favorite reading. This book concerns 13 people who really thought they were going to change the world, only to be wrong, subverted, or laughed into irrelevance. Each one is a treasure chest containing all the right reasons and motivations between predictably flawed humans.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m typical of a lot of Brown students in that failure is something I&amp;#8217;m not used to, and can&amp;#8217;t confront. I believe one of the most instructive parts of my education here is to have failed spectacularly on a few instances. You haven&amp;#8217;t learned much if you haven&amp;#8217;t been kicked square in the teeth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Brief and Wondrous Life of Oscar Wao&lt;/strong&gt; (_Junot Diaz_)&lt;/p&gt;

&lt;p&gt;&lt;a href='http://2.bp.blogspot.com/_3ys1dwfzc2w/S6leCYzNjyI/AAAAAAAAADI/yePpuQyjFBM/s1600-h/junot.jpg'&gt;&lt;img src='http://2.bp.blogspot.com/_3ys1dwfzc2w/S6leCYzNjyI/AAAAAAAAADI/yePpuQyjFBM/s200/junot.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another great &lt;a href='http://www.alistapart.com/articles/writeliving'&gt;A List Apart essay&lt;/a&gt; has a favorite passage of mine:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Write for a reason, and know why you write. Whether your daily updates concern your work life, your hobbies, or your innermost feelings, write passionately about things that matter.&lt;/p&gt;

&lt;p&gt;To an artist, the smallest grace note and the tiniest flourish may be matters of great importance. Show us the details, teach us why they matter. People are fascinated by detail and enthralled by passion; explain to us why it matters to you, and no detail is too small, no technical question too arcane.&lt;/p&gt;

&lt;p&gt;Bad personal sites bore us by telling us about trivial events and casual encounters about which we have no reason to care. Don’t tell us what happened: tell us why it matters. Don’t tell us your opinion: tell us why the question is important.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I find this book to be exemplary of this. I didn&amp;#8217;t think others would like it as much as me, since not everyone is a latino nerd like I am (and Mr. Diaz appears to be). But the book succeeds as wonderful fiction even to those who don&amp;#8217;t follow the references. I don&amp;#8217;t know if I&amp;#8217;ll ever reach others the way this book has through &lt;em&gt;my&lt;/em&gt; diverse and precise passions, but I&amp;#8217;m more inspired to try.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CivilWarLand in Bad Decline&lt;/strong&gt; (_George Saunders_)&lt;/p&gt;

&lt;p&gt;&lt;a href='http://4.bp.blogspot.com/_3ys1dwfzc2w/S6leBW2PEZI/AAAAAAAAAC4/tVkvwY-zVWg/s1600-h/civilwarland.jpg'&gt;&lt;img src='http://4.bp.blogspot.com/_3ys1dwfzc2w/S6leBW2PEZI/AAAAAAAAAC4/tVkvwY-zVWg/s200/civilwarland.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most people I recommend George Saunders to (my dad, an ex in particular) really hate his fiction. But I&amp;#8217;ve always loved it. These are earlier stories of his, and like &lt;em&gt;Banvard&amp;#8217;s Folly&lt;/em&gt;, they tend to be very funny and amazingly tragic at the same time.&lt;/p&gt;

&lt;p&gt;A lot of times you look around and realize how nutty, depressing, and maddening the world can be: it takes a master satirist to acknowledge this truth, and get you to laugh about it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Sailor Who Fell From Grace with the Sea&lt;/strong&gt; (_Yukio Mishima_)&lt;/p&gt;

&lt;p&gt;&lt;a href='http://3.bp.blogspot.com/_3ys1dwfzc2w/S6le93vY8WI/AAAAAAAAADY/-5mEH18Xf_4/s1600-h/sailor.jpg'&gt;&lt;img src='http://3.bp.blogspot.com/_3ys1dwfzc2w/S6le93vY8WI/AAAAAAAAADY/-5mEH18Xf_4/s200/sailor.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This book gave me chills for months after I was finished with it. It was like the nectar of &lt;em&gt;Crime and Punishment&lt;/em&gt; wrapped in bacon. Mishima (whose life is also a wonder to investigate) really puts you in the minds of these reasonable, ambitious people and confronts troubling issues of psyche.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The God Delusion&lt;/strong&gt; (_Richard Dawkins_)&lt;/p&gt;

&lt;p&gt;&lt;a href='http://3.bp.blogspot.com/_3ys1dwfzc2w/S6leB84sXZI/AAAAAAAAADA/QFSS_9nU36Q/s1600-h/goddelusion.jpg'&gt;&lt;img src='http://3.bp.blogspot.com/_3ys1dwfzc2w/S6leB84sXZI/AAAAAAAAADA/QFSS_9nU36Q/s200/goddelusion.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will get some eye rolls, no doubt. I was something of a skeptic before I read this, in the closet and afraid about my lack of faith. This book helped me realize its nothing to be afraid of.&lt;/p&gt;

&lt;p&gt;Dawkins frequently gets described as someone who&amp;#8217;s polarizing, employing bitter rhetoric, and gets piled in with Christopher Hitchins as a Mean Atheist. Having actually &lt;em&gt;read&lt;/em&gt; his essays and seen him speak, this is really just a smear. His tone is civil, and he never says anything that can&amp;#8217;t be verified. If people think I&amp;#8217;m wrong on this, I encourage them to let me know, and we can talk ^_^ But I would be lying if I said I didn&amp;#8217;t thoroughly enjoy this book, and if I didn&amp;#8217;t mention I wouldn&amp;#8217;t be as comfortable with who I am if I hadn&amp;#8217;t read it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; I spoke too soon. While &lt;em&gt;The God Delusion&lt;/em&gt; is approachable and civil, &lt;a href='http://richarddawkins.net/articles/5341'&gt;Dawkins can be pretty inflammatory.&lt;/a&gt; As apology, listen to Neil DeGrasse Tyson take way too long to &lt;a href='http://www.youtube.com/watch?v=-_2xGIwQfik'&gt;tell Dawkins to tone it down&lt;/a&gt;, and &lt;a href='http://www.rathergood.com/science'&gt;a wonderful remix&lt;/a&gt; of the end of the exchange.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction to the Theory of Computation&lt;/strong&gt; (_Michael Sipser_)&lt;/p&gt;

&lt;p&gt;&lt;a href='http://2.bp.blogspot.com/_3ys1dwfzc2w/S6le-eKRykI/AAAAAAAAADg/T6zN7wL8YrU/s1600-h/sipser.jpg'&gt;&lt;img src='http://2.bp.blogspot.com/_3ys1dwfzc2w/S6le-eKRykI/AAAAAAAAADg/T6zN7wL8YrU/s200/sipser.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The computer book to end all computer books. Sipser writes masterfully about computational theory, intent on &lt;em&gt;teaching&lt;/em&gt; it to you without just &lt;em&gt;stating&lt;/em&gt; it at you. I would recommend this to anybody, CS or not, who has an interest in keeping their brain occupied.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href='http://www.ccs.neu.edu/home/matthias/BTLS/'&gt;The Little Schemer&lt;/a&gt;&lt;/strong&gt; (_Daniel Friedman and Matthias Felleison_)&lt;/p&gt;

&lt;p&gt;&lt;a href='http://2.bp.blogspot.com/_3ys1dwfzc2w/S9jE8V-qpMI/AAAAAAAAAEQ/Fe6siKDlJhM/s1600/schemer.jpg'&gt;&lt;img src='http://2.bp.blogspot.com/_3ys1dwfzc2w/S9jE8V-qpMI/AAAAAAAAAEQ/Fe6siKDlJhM/s320/schemer.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How could I have forgotten this blog&amp;#8217;s former namesake! Teaches programming, recursion, all the way up to the most elegant and concise demonstrations of the &lt;a href='http://en.wikipedia.org/wiki/Halting_problem'&gt;Halting Problem&lt;/a&gt; and the &lt;a href='http://en.wikipedia.org/wiki/Fixed_point_combinator#Y_combinator'&gt;Y Combinator&lt;/a&gt; that I&amp;#8217;ve ever read, all in a charming voice. More so than Sipser, worth picking up and playing with even if you&amp;#8217;re not a programmer, and the most instructive book (with other, more general Scheme-powered books like &lt;a href='http://mitpress.mit.edu/sicp/full-text/book/book.html'&gt;SICP&lt;/a&gt; and &lt;a href='http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-04-26/'&gt;PLAI&lt;/a&gt;) on how I approach programming.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Of course, more influential than most of these are theatre performances I&amp;#8217;ve attended. That&amp;#8217;ll be another post.&lt;/p&gt;

&lt;p&gt;Also, do you see a problem with this list? THEY&amp;#8217;RE ALL MEN. I hate that I haven&amp;#8217;t read more women.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Games</title>
      <link>http://www.morepaul.com/2010/03/games.html</link>
      <pubDate>Mon, 22 Mar 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Made two demo videos, for my &lt;a href='http://brownandroidattack.blogspot.com'&gt;Independent Study making games.&lt;/a&gt; The first was our collaborative effort, a Hungry Hungry Hippos-type game called &lt;em&gt;Penguins&lt;/em&gt;:&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='allowfullscreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id=10342389&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' /&gt;&lt;embed src='http://vimeo.com/moogaloop.swf?clip_id=10342389&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;The second was a Tetris Attack knockoff I call FlipTile, which I did on my own just for kicks one weekend. I hope to take it far, but time! TIME!!!&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='allowfullscreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id=10357311&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' /&gt;&lt;embed src='http://vimeo.com/moogaloop.swf?clip_id=10357311&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;I rather enjoy Android dev, and game dev in particular. Maybe I can pursue this?&lt;/p&gt;

&lt;p&gt;After working on these videos, I&amp;#8217;m tired of hearing my own voice. I need to make another one of these tonight, chances are I&amp;#8217;ll use an accent.&lt;/p&gt;

&lt;p&gt;Finally, I might dedicate a future post to the Fail that is iMovie. Apple recovered the computer market in the early 2000&amp;#8217;s with OS X, and one of the major plugs was the package that was later packaged as iLife. iMovie used to be a major perk of migrating, but since they branched the two to iMovie (free) and iMovie HD (which they now sell!), the free one is full of bugs and anti- features.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On Jazz, popularity</title>
      <link>http://www.morepaul.com/2010/03/on-jazz-popularity.html</link>
      <pubDate>Sun, 21 Mar 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Another not-very-hackery article on Hacker News caught my attention. &lt;a href='http://dyske.com/paper/778'&gt;Dyske Suematsu&lt;/a&gt; (in 2003) gives a few reasons to why we don&amp;#8217;t hear jazz on Top-40 radio stations, making claims like &amp;#8220;our ears are getting lazier.&amp;#8221;&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m taking a computer science class called &lt;a href='http://cs.brown.edu/courses/cs258/'&gt;Solving Hard Problems&lt;/a&gt;, but reading the article and the &lt;a href='http://news.ycombinator.com/item?id=1204505'&gt;epic comment thread that ensued&lt;/a&gt; reminds me that our Hard Problems are really bollocks: our problems are at least solvable. Even if they aren&amp;#8217;t, they&amp;#8217;re well defined enough to know when we&amp;#8217;ve solved them.&lt;/p&gt;

&lt;p&gt;Try answering &amp;#8220;Why isn&amp;#8217;t Jazz popular?&amp;#8221; and all you can do is approximate. Social scientists have much more courage than I do.&lt;/p&gt;

&lt;p&gt;To paraphrase Valentine Coverly from &lt;em&gt;Arcadia&lt;/em&gt;, &amp;#8220;We know better what&amp;#8217;s happening between two electrons or in the inside of a star than whether or not it&amp;#8217;ll rain on our picnic next Sunday.&amp;#8221; Valentine spoke of knowing about the really big and really small, but that chaos theory prevents us from knowing anything in between (things that, you know, &lt;em&gt;matter&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;(to break visual tedium, enjoy the pictures from my high school production of &lt;em&gt;Arcadia&lt;/em&gt;, which I directed as a senior for our annual student-directed show. Do they still do them?)&lt;/p&gt;

&lt;p&gt;I told you that to tell you this: I&amp;#8217;ll give some reasons why I believe we don&amp;#8217;t hear more jazz all around us, but I understand the limitations of my arguments, and that they&amp;#8217;re specific to me.&lt;/p&gt;

&lt;p&gt;&lt;img src='http://photos-h.ak.fbcdn.net/photos-ak-sf2p/v16/129/68/1010423/n1010423_30093105_9639.jpg' alt='Chloe, Valentine, Hannah, Bernard, and Augustus' /&gt;&lt;/p&gt;

&lt;p&gt;Chloe, Valentine, Hannah, Bernard, and Gus&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;I&amp;#8217;m invested in this because &lt;em&gt;I love jazz.&lt;/em&gt; The &lt;a href='http://www.amazon.com/Ken-Burns-JAZZ-Collection-Thelonious/dp/B000050HVW'&gt;Ken Burns Thelonious Monk CD&lt;/a&gt; was instrumental in my personal and musical maturation. I&amp;#8217;ve since found other tunes with this connective property, but hearing Thelonious&amp;#8217; dissonances and expressive solos when I was 16 made me realize the gap between acting and music was vanishingly small (recently I&amp;#8217;m finding this in &lt;a href='http://www.youtube.com/watch?v=4Aewq0ruLWI'&gt;Tito&lt;/a&gt; &lt;a href='http://www.youtube.com/watch?v=f1lRlWxJZ7Y'&gt;Puente&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;My brother is a jazz musician. Since I was about 12 he&amp;#8217;s practiced daily on his bass for 3-4 hours a day, demonstrating a devotion I&amp;#8217;ve never been able to match. So I listen closely to music (but jazz in particular), to try to find those elements that inspire him to keep playing.&lt;/p&gt;

&lt;p&gt;Especially now that he&amp;#8217;s a professional jazz musician in the Bay Area, I would love nothing more than for it to be popular. I&amp;#8217;d love for other people feel what I&amp;#8217;ve felt in listening to it.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;So lets move on to the article: he is, in most of his points, blaming perceived ignorant masses for their ignorance. I don&amp;#8217;t love his phrasing: many of the arguments take the form &amp;#8220;The problem is that most Americans aren&amp;#8217;t X&amp;#8221; (implied: &amp;#8220;aren&amp;#8217;t X &lt;em&gt;like I am.&lt;/em&gt;&amp;#8221;). But this is nitpicking, I think he&amp;#8217;s on to a few points; I just don&amp;#8217;t think they&amp;#8217;re uniquely American.&lt;/p&gt;

&lt;p&gt;One of those points is dealing with abstraction, and the point he doesn&amp;#8217;t spell out, nuance. He mentions that you don&amp;#8217;t learn to love good wine by mindlessly drinking it, you have to actively work to taste. You have to form bridges between this wine and every other wine you&amp;#8217;ve had, and know what your taste buds are telling you beyond &amp;#8220;Like!&amp;#8221; or &amp;#8220;Don&amp;#8217;t Like!&amp;#8221;.&lt;/p&gt;

&lt;p&gt;He argues that an appreciation of jazz requires a similar purposeful listening, and I more or less agree with him. I&amp;#8217;ll add that it also requires patience, as you won&amp;#8217;t start loving jazz after only one song. Like trying anything for the first time, you also have to hide your private prejudices while you listen: listen for what you note is interesting about the music, not how it fulfills you&amp;#8217;re already-low expectations.&lt;/p&gt;

&lt;p&gt;In a related point, I also agree that for many people, lyrics are a good way to get around this abstraction barrier. He says it best, so I won&amp;#8217;t paraphrase:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Aesthetically, the paintings of Mark Rothko and those of Monet are quite similar, but the former is utterly unacceptable for many people even though they consider the latter to be a master. The difference is that in Monet’s paintings, you can still see things represented in them: rivers, trees, mountains, houses, and so forth. The audience interprets these objects, and projects their own beautiful memories onto the paintings, which makes the whole process much easier. In Mark Rothko’s paintings, there is nothing they can mentally grab on to. What you see is what you get; there is nothing to interpret. So, the audience is left without a pen to hold on to.&lt;/p&gt;

&lt;p&gt;The same happens to instrumental music. If there are no lyrics, that is, if there is nothing for the minds to interpret, projecting of any emotional values becomes rather difficult. As soon as the lyrics speak of love, sex, racism, evil corporations, loneliness, cops, etc., all sorts of emotions swell up. Jazz to most people is like a color on a wall; unless you hung something on it, they don’t even notice it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src='http://photos-a.ak.fbcdn.net/photos-ak-sf2p/v16/129/68/1010423/n1010423_30093128_4033.jpg' alt='Septimus, Thomasina' /&gt;&lt;/p&gt;

&lt;p&gt;Septimus, Thomasina&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll agree with him on this too. So these are causes, but what causes the causes? Here we get into where I disagree with him:&lt;/p&gt;

&lt;p&gt;* &amp;#8220;American ears are getting lazier and lazier.&amp;#8221;&lt;/p&gt;

&lt;p&gt;* &amp;#8220;This rather unfortunate trend in the American culture seems to be irreversible.&amp;#8221;&lt;/p&gt;

&lt;p&gt;* &amp;#8220;The popularity of Rap music seems to be a clear sign of this trend.&amp;#8221;&lt;/p&gt;

&lt;p&gt;These are all hitting a strawman I don&amp;#8217;t think he knows he&amp;#8217;s setting up. I don&amp;#8217;t believe our ears were ever such great workhorses, so this trend isn&amp;#8217;t &amp;#8216;irreversible,&amp;#8217; since we were never there to begin with. And Rap is a symptom, yes, but not of what you&amp;#8217;re describing.&lt;/p&gt;

&lt;p&gt;Like when Old People* make a statement beginning with &amp;#8220;Kids these days&amp;#8230;&amp;#8221; or &amp;#8220;We used to believe&amp;#8230; but now we&amp;#8217;ve lost our way&amp;#8221;, he&amp;#8217;s forgetting that &lt;strong&gt;in culture, things are the way they are because &lt;em&gt;that&amp;#8217;s how we want them to be&lt;/em&gt; given what we know and what&amp;#8217;s available.&lt;/strong&gt; Old People who complain kids play too many videogames neglect the possibility that they would have done the same thing if the world looked the way it does now, and if they had them when they were kids.&lt;/p&gt;

&lt;p&gt;Rap music is popular for a number of reasons, but probably most because &lt;em&gt;it&amp;#8217;s never had a chance to come out before&lt;/em&gt;. Recording technology wasn&amp;#8217;t accessible enough, scouts didn&amp;#8217;t look there, the world wasn&amp;#8217;t what it needed to be to enable it. I&amp;#8217;m not well-versed in the origins of rap, but the perfect storm of inner-city life in the recessions of the 70&amp;#8217;s and 80&amp;#8217;s, about a generation after a civil rights movement to disillusioned youth with few options (and with lewdness/violence slowly being more acceptable in recorded media), are you surprised rap emerged?&lt;/p&gt;

&lt;p&gt;The funny thing about him hating on rap is that it&amp;#8217;s followed a very similar progression to Jazz: first it was a dirty, lower-class music for Mean Minorities that Scary Drug Dealers and Felons produced, then it was associated with Cool, then increasingly played in clubs and social spots. And the sinful way kids danced to it! Then white people got into it. Now hip-hop (and prominent sampling of pop tunes) are spreading everywhere, kind of like the Benny Goodman swing era, where it&amp;#8217;s on the radio! It&amp;#8217;s acceptable!&lt;/p&gt;

&lt;p&gt;Rap is a 20th-century mindful, technologically-enabled Jazz Jr.&lt;/p&gt;

&lt;p&gt;All these lamentations that We&amp;#8217;ve Lost the Sophistication To Listen to Jazz are misguided. People felt about Jazz the way he does about Rap (how long do you think before you can get your degree from a music school in Rap Studies, I wonder?).&lt;/p&gt;

&lt;p&gt;So how do you get people to care about Jazz today? The same way you get them to care about live theatre (dying), opera (dying), classical music (dying), modern dance (dying): you really can&amp;#8217;t. Few people I&amp;#8217;ve ever met wonder what to do on a Friday night and think &amp;#8220;Oh, I know! Let&amp;#8217;s go see Opera!&amp;#8221;&lt;/p&gt;

&lt;p&gt;For another number of reasons, &lt;em&gt;even if&lt;/em&gt; people do know that these events are going on, &lt;em&gt;and&lt;/em&gt; they&amp;#8217;re even the least bit curious, it&amp;#8217;s still a major ordeal to get them to go. That&amp;#8217;s the topic of a whole other post (this one ballooned in size and into topics I didn&amp;#8217;t expect), but most of my suggestions echo those of &lt;a href='http://www.thestranger.com/seattle/ten-things-theaters-need-to-do-right-now-to-save-themselves/Content?oid=691862'&gt;Brendan Kiley for theatre&lt;/a&gt;. Above all, make art &lt;em&gt;fun&lt;/em&gt; again, for &lt;em&gt;people&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src='http://photos-a.ak.fbcdn.net/photos-ak-sf2p/v16/129/68/1010423/n1010423_30093114_1494.jpg' alt='Septimus, Jellaby' /&gt;&lt;/p&gt;

&lt;p&gt;Septimus, Jellaby&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;A bit of a sidenote, but the question itself is also flawed. &lt;em&gt;What is Jazz&lt;/em&gt;, anyways? In my History of Jazz class, my professor opened it up by mentioning the first line in a definition of Jazz in a Music encyclopedia: &lt;em&gt;&amp;#8220;All attempts to accurately and thoroughly define jazz have failed.&amp;#8221;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Are we talking Louis Armstrong&amp;#8217;s Hot 5, Hot 7 of the 1920&amp;#8217;s? Ellington&amp;#8217;s Big Band and &amp;#8220;Jungle Music&amp;#8221;? Benny Goodman swing of the &amp;#8217;30s? Bebop, Hard Bop? Fusion Jazz of the 70&amp;#8217;s? Fats Waller&amp;#8217;s Vaudevillian Swing?&lt;/p&gt;

&lt;p&gt;Where do Bossa Nova and Afro-Cuban jazz fit into it? Medeski, Martin, and Wood? How can you argue as to why people love don&amp;#8217;t love it if &amp;#8216;it&amp;#8217; is such a moving target? I would argue Benny Goodman (bleh) or even Fats Waller (yay) doesn&amp;#8217;t require much &amp;#8216;purposeful listening&amp;#8217; as the Jazz I expect we&amp;#8217;re talking about, namely 20-minute Coltrane pieces.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; When I say Old People, I use it in the same way &lt;a href='http://www.youtube.com/watch?v=W58K-5ArFzo#t=0m42s'&gt;George Carlin does&lt;/a&gt;: not the number of years you&amp;#8217;ve been alive, but your mentality towards the present and future. I&amp;#8217;m at Brown and know Old People who are 20 years old.&lt;/p&gt;

&lt;p&gt;&lt;img src='http://photos-d.ak.fbcdn.net/photos-ak-sf2p/v16/129/68/1010423/n1010423_30093124_3347.jpg' alt='Me, 10 pounds thinner during Tech Week' /&gt;&lt;/p&gt;

&lt;p&gt;Me, 10 pounds thinner during Tech Week.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On how knowledge turns to Snobbery</title>
      <link>http://www.morepaul.com/2010/03/on-how-knowledge-turns-to-snobbery.html</link>
      <pubDate>Wed, 17 Mar 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I used to read &lt;a href='http://www.alistapart.com'&gt;A List Apart&lt;/a&gt; religiously, back when I was a lamer-than-lame &amp;#8220;web developer.*&amp;#8221; I&amp;#8217;ve slacked off on reading it because I haven&amp;#8217;t touched much web dev recently, but it&amp;#8217;s still an amazing online magazine, an example of well-published content on the web.&lt;/p&gt;

&lt;p&gt;One of their articles is on the &lt;a href='http://www.alistapart.com/articles/flashstandards/'&gt;&amp;#8220;Cold War&amp;#8221; between Flash and HTML5 proponents&lt;/a&gt;, reignited by the iPad lacking Flash support. He describes the pointlessness of the fighting effectively, and it generalizes to programming language fanboy-ism:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The problem with rallying behind a technology is that it traps us within the confines of its constraints. We easily shift &amp;#8220;don’t know&amp;#8221; and &amp;#8220;not sure&amp;#8221; into &amp;#8220;can’t&amp;#8221; and &amp;#8220;won’t.&amp;#8221; Creativity is dictated by programming languages. How sad.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Technologies aren’t inherently bad or good. They’re only appropriate or inappropriate for certain circumstances. They’re a means to an end, not solutions within themselves. Each one is powerful in its own right to accomplish a certain goal. The responsibility to use an appropriate technology lies with the one who made the choice. Unfortunately, we’ve misinterpreted irresponsible development as inadequate technology.&lt;/p&gt;

&lt;p&gt;I usually avoid using Java, but this doesn&amp;#8217;t mean that I hate it, and I&amp;#8217;ll never state that it is simply &lt;em&gt;bad&lt;/em&gt;. I simply usually note that it&amp;#8217;s not the best tool for me to use on whatever job I happen to be avoiding it for (and I don&amp;#8217;t always avoid it; rarely but sometimes it&amp;#8217;s the best tool for job).&lt;/p&gt;

&lt;p&gt;I referred to this in the &lt;a href='http://www.morepaul.com/2010/02/hiatus-and-voyage-of-vim.html'&gt;post on my vim use&lt;/a&gt;: &lt;strong&gt;flame wars on personal choices of technology are pointless.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My favorite part of the above passage is the line &lt;em&gt;We easily shift &amp;#8220;don’t know&amp;#8221; and &amp;#8220;not sure&amp;#8221; into &amp;#8220;can’t&amp;#8221; and &amp;#8220;won’t.&amp;#8221;&lt;/em&gt; Usually, that&amp;#8217;s what&amp;#8217;s happening in a flame war; the opponent of language X doesn&amp;#8217;t know X or even familiar with the paradigm, but trashes it because they&amp;#8217;re perfectly fine without it. (The logic being: I know programming. I don&amp;#8217;t know X. X is not &lt;em&gt;real&lt;/em&gt; programming). I get this a lot from people not versed in functional or declarative languages should I start talking about one.&lt;/p&gt;

&lt;p&gt;Similarly, even if you know about and just &lt;em&gt;know better&lt;/em&gt; than to use X (many functional kids like me on C++, Java), flaming is unconstructive, and these &amp;#8220;smarter people&amp;#8221; somehow forget a basic fact: great software is written in these languages. Many people are plenty effective in these languages. So let them have it.&lt;/p&gt;

&lt;p&gt;Last semester I was a real language snob. I still have strong opinions, and treat language choice like the director of a play treats casting (_its the most important part_). But hating on a language &amp;#8220;just because&amp;#8221; is like looking at an actor and saying there is &lt;em&gt;no role&lt;/em&gt; he/she is fit to play, which only shows you&amp;#8217;re limited knowledge of plays and lack of imagination for new ones.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;* = When I say web developer, I mean it in the lamest sense possible. About 3 years ago, when I first started programming on my own, the motivation was to make &lt;em&gt;sweet websites&lt;/em&gt;. Unfortunately, I wasn&amp;#8217;t much of a programmer. I&amp;#8217;ll take the snippet on &amp;#8220;web programmer&amp;#8221; from &lt;a href='http://gist.github.com/289467'&gt;evolution of a Python Programmer&lt;/a&gt; to demonstrate the kind of code I wrote for an old theatre board website (since destroyed):&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='python'&gt;    &lt;span class='c'&gt;#Web designer&lt;/span&gt;

    &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nf'&gt;factorial&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;x&lt;/span&gt;&lt;span class='p'&gt;):&lt;/span&gt;
        &lt;span class='c'&gt;#-------------------------------------------------&lt;/span&gt;
        &lt;span class='c'&gt;#--- Code snippet from The Math Vault ---&lt;/span&gt;
        &lt;span class='c'&gt;#--- Calculate factorial (C) Arthur Smith 1999 ---&lt;/span&gt;
        &lt;span class='c'&gt;#-------------------------------------------------&lt;/span&gt;
        &lt;span class='n'&gt;result&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nb'&gt;str&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
        &lt;span class='n'&gt;i&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt; &lt;span class='c'&gt;#Thanks Adam&lt;/span&gt;
        &lt;span class='k'&gt;while&lt;/span&gt; &lt;span class='n'&gt;i&lt;/span&gt; &lt;span class='o'&gt;&amp;lt;=&lt;/span&gt; &lt;span class='n'&gt;x&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt;
            &lt;span class='c'&gt;#result = result * i #It&amp;#39;s faster to use *=&lt;/span&gt;
            &lt;span class='c'&gt;#result = str(result * result + i)&lt;/span&gt;
                &lt;span class='c'&gt;#result = int(result *= i) #??????&lt;/span&gt;
            &lt;span class='n'&gt;result&lt;/span&gt; &lt;span class='nb'&gt;str&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nb'&gt;int&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;result&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='o'&gt;*&lt;/span&gt; &lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
            &lt;span class='c'&gt;#result = int(str(result) * i)&lt;/span&gt;
            &lt;span class='n'&gt;i&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;i&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;
        &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;result&lt;/span&gt;
    &lt;span class='k'&gt;print&lt;/span&gt; &lt;span class='n'&gt;factorial&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;6&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;(shudder&amp;#8230;)&lt;/em&gt; So glad those days are behind me. Also see &lt;a href='http://www.willamette.edu/~fruehr/haskell/evolution.html'&gt;evolution of a Haskell programmer&lt;/a&gt; ^_^.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>A fun twist on Queues from Stacks</title>
      <link>http://www.morepaul.com/2010/03/fun-twist-on-queues-from-stacks.html</link>
      <pubDate>Tue, 16 Mar 2010 00:00:00 PDT</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;There&amp;#8217;s too, too much to write about, but I&amp;#8217;m going to make a little diversion known, because it blew my mind. I have to give credit where it&amp;#8217;s due: this comes to us from the peerless Matt Wilde (&lt;a href='http://www.cs.brown.edu/people/mwilde/'&gt;cs dept.&lt;/a&gt;,&lt;a href='http://www.facebook.com/#!/mcwilde?ref=ts'&gt;facebook&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The problem is this: our friend Josh was given some screening questions to qualify for a programming interview (to make sure he wasn&amp;#8217;t one of those &lt;a href='http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html'&gt;programmers who couldn&amp;#8217;t program&lt;/a&gt;), and one of the questions was &amp;#8220;Recall that the Stack ADT contains push(E), pop(), &amp;#8230; Implement a Queue using a Stack.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Now, this interview question is very common, if you disallow what was almost certainly an error in the problem phrasing; usually it&amp;#8217;s &amp;#8220;Implement a Queue given Stacks&amp;#8221; or &amp;#8220;If you had a library that produced Stacks, how would you implement a Queue?&amp;#8221; (answer at the end, for those who don&amp;#8217;t know and/or don&amp;#8217;t want to figure it out.)&lt;/p&gt;

&lt;p&gt;But the problem was unclear: using &lt;em&gt;a&lt;/em&gt; Stack? Only a single instance? Is it even possible? The common solution to the common problem uses two stacks. Mr. Wilde came up with the following solution, which does in fact use only one instance of a stack: &lt;em&gt;use the program&amp;#8217;s call stack, along with recursion, to keep track of intermediate values.&lt;/em&gt; Shown algorithmically (in Ruby, since it looks the most like pseudocode):&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;    &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nf'&gt;enqueue&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;element&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
        &lt;span class='vi'&gt;@stack&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;push&lt;/span&gt; &lt;span class='n'&gt;element&lt;/span&gt;
    &lt;span class='k'&gt;end&lt;/span&gt;
   
    &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nf'&gt;dequeue&lt;/span&gt;
        &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='vi'&gt;@stack&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;size&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;
            &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='vi'&gt;@stack&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;pop&lt;/span&gt;
        &lt;span class='k'&gt;elsif&lt;/span&gt; &lt;span class='vi'&gt;@stack&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;size&lt;/span&gt; &lt;span class='o'&gt;&amp;gt;&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;
            &lt;span class='n'&gt;tmp&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='vi'&gt;@stack&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;pop&lt;/span&gt;
            &lt;span class='n'&gt;value&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nb'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;dequeue&lt;/span&gt;
            &lt;span class='vi'&gt;@stack&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;push&lt;/span&gt; &lt;span class='n'&gt;tmp&lt;/span&gt;
            &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;value&lt;/span&gt;
        &lt;span class='k'&gt;else&lt;/span&gt;
            &lt;span class='k'&gt;raise&lt;/span&gt; &lt;span class='no'&gt;EmptyStackException&lt;/span&gt;
        &lt;span class='k'&gt;end&lt;/span&gt;
    &lt;span class='k'&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Amazing!&lt;/em&gt; Here&amp;#8217;s the standard solution with two stacks:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;    &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nf'&gt;enqueue&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;element&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
        &lt;span class='vi'&gt;@first&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;push&lt;/span&gt; &lt;span class='n'&gt;element&lt;/span&gt;
    &lt;span class='k'&gt;end&lt;/span&gt;
   
    &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nf'&gt;dequeue&lt;/span&gt;
        &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='ow'&gt;not&lt;/span&gt; &lt;span class='vi'&gt;@second&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;empty&lt;/span&gt;
            &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='vi'&gt;@second&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;pop&lt;/span&gt;
        &lt;span class='k'&gt;elsif&lt;/span&gt; &lt;span class='vi'&gt;@first&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;empty&lt;/span&gt;
            &lt;span class='k'&gt;raise&lt;/span&gt; &lt;span class='no'&gt;EmptyStackException&lt;/span&gt;
        &lt;span class='k'&gt;else&lt;/span&gt;
            &lt;span class='k'&gt;while&lt;/span&gt; &lt;span class='ow'&gt;not&lt;/span&gt; &lt;span class='vi'&gt;@first&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;empty&lt;/span&gt;
                &lt;span class='vi'&gt;@second&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;push&lt;/span&gt; &lt;span class='vi'&gt;@first&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;pop&lt;/span&gt;
            &lt;span class='k'&gt;end&lt;/span&gt;
            &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='vi'&gt;@second&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;pop&lt;/span&gt;
        &lt;span class='k'&gt;end&lt;/span&gt;
    &lt;span class='k'&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The intuition in this case is that you use one stack for enqueueing and another for dequeueing. When the dequeue stack becomes empty, you remove all elements from the enqueue stack into the dequeue stack. This puts the enqueued elements in the dequeue stack in reverse order, meaning you can pop them in the order they were inserted in.&lt;/p&gt;

&lt;p&gt;This gives you constant-time performance on most enqueues and dequeues, with an occasional &lt;em&gt;O(n)&lt;/em&gt; for when the dequeue stack runs out.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Good Music</title>
      <link>http://www.morepaul.com/2010/03/good-music.html</link>
      <pubDate>Thu, 11 Mar 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I&amp;#8217;ve been hitting some hard times this last year, namely aftershocks of &lt;a href='http://www.facebook.com/#!/group.php?gid=25800962459&amp;amp;ref=ts'&gt;my sister&amp;#8217;s illness&lt;/a&gt;, as well as personal/relationship troubles which may or may not be related. It isn&amp;#8217;t the purpose of this blog to delve into them, I&amp;#8217;d rather share the better parts of my life, and part of that is the music that helps lift one out of the blues.&lt;/p&gt;

&lt;p&gt;Two pieces I discovered in the interim time period that are simply phenomenal recordings:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Christian McBride&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Night Train&lt;/em&gt; - from the album &lt;em&gt;Gettin&amp;#8217; To It&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A solo bass performance (Jazz).&lt;/p&gt;

&lt;p&gt;&lt;a href='http://itunes.apple.com/us/album/night-train/id376710?i=376706&amp;amp;uo=6'&gt;&lt;img src='http://ax.phobos.apple.com.edgesuite.net/images/badgeitunes61x15dark.gif' alt='Christian McBride - Gettin to It - Night Train' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Michael Cleveland and Flamekeeper&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Jerusalem Ridge&lt;/em&gt; - from the album &lt;em&gt;Leavin&amp;#8217; Town&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A fiddle and mandolin duet (Bluegrass).&lt;/p&gt;

&lt;p&gt;&lt;a href='http://itunes.apple.com/us/album/jerusalem-ridge/id283720192?i=283720345&amp;amp;uo=6'&gt;&lt;img src='http://ax.phobos.apple.com.edgesuite.net/images/badgeitunes61x15dark.gif' alt='Michael Cleveland and Flamekeeper - Leavin Town - Jerusalem Ridge' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A few notes:&lt;/p&gt;

&lt;p&gt;* I&amp;#8217;m providing links to the iTunes store. Obviously I can&amp;#8217;t stop you from downloading them illegally, but I recommend you purchase them. At 99 cents, it&amp;#8217;s not much, and these are both living musicians trying to make a living &lt;em&gt;today&lt;/em&gt; in genres that aren&amp;#8217;t very popular. &lt;strong&gt;These guys are clearly doing it for love of music.&lt;/strong&gt; Also, the YouTube versions of these songs are generally terrible, if applicable.&lt;/p&gt;

&lt;p&gt;If you must &amp;#8216;try before you buy,&amp;#8217; iTunes gives you a 30 second preview. Alternatively, if you buy them and hate them, (and you&amp;#8217;re a friend of mine) I can give you two bucks back.&lt;/p&gt;

&lt;p&gt;* Listen to them &lt;em&gt;loud&lt;/em&gt;. They&amp;#8217;re both string pieces, and ideally you&amp;#8217;ll listen to the loud enough to hear after-pluck resonances (in one of them, you can even hear the artist breathing). You won&amp;#8217;t regret it ^_^&lt;/p&gt;

&lt;p&gt;* As with most (strangely, not all) music, you&amp;#8217;ll get more out of it if you listen purposefully. Clear your mind, hit play, and let it sink to you&lt;/p&gt;

&lt;p&gt;Naturally, I also love the music of my brother &lt;a href='http://www.facebook.com/#!/profile.php?v=info&amp;amp;ref=ts&amp;amp;id=2403058'&gt;Robert Meier&lt;/a&gt;. He&amp;#8217;s the bassist on &lt;a href='http://www.oa2records.com/oa2/recordings/recording.php?TitleID=22057'&gt;two&lt;/a&gt; &lt;a href='http://www.cdbaby.com/cd/moshierlebrun'&gt;albums&lt;/a&gt; by very talented composers he went to school with, give it a look ^_^.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Comix, miscellanous</title>
      <link>http://www.morepaul.com/2010/03/comix-miscellanous.html</link>
      <pubDate>Mon, 08 Mar 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;This weekend I treated myself and bought the first Deluxe Set of &lt;a href='http://en.wikipedia.org/wiki/Y:_The_Last_Man'&gt;Y: The Last Man&lt;/a&gt; (issues 1-10, I had thhe second set before by a happy accident). It&amp;#8217;s really a marvelous comic, and suggest people take a look at it.&lt;/p&gt;

&lt;p&gt;My friend Lyn has &lt;a href='http://semblare.com/Fortune_Memories/index.php'&gt;a comic of her own&lt;/a&gt;, which I also greatly enjoy. I keep petitioning for the inclusion of another character, and maybe one day my calls will be met.&lt;/p&gt;

&lt;p&gt;Last summer I tried to get a comic going. I considered posting the 1.5 pages I completed. It was going to be based in the world of the &lt;a href='http://en.wikipedia.org/wiki/Castlevania:_Symphony_of_the_Night'&gt;Catlevania: SOTN&lt;/a&gt; tribute I thought about writing. I may get back to it, in the meantime, here&amp;#8217;s the basic &amp;#8216;standing sprite&amp;#8217; I drew, both the complete (enlarged, sorry for the blur) version, and the to-scale evolution using &lt;a href='http://www.derekyu.com/?page_id=218'&gt;Derek Yu&amp;#8217;s Pixel Art guide&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href='http://3.bp.blogspot.com/_3ys1dwfzc2w/S5YAqTzF7ZI/AAAAAAAAACg/GKFelWiINQE/s1600-h/EstragonLarge.png'&gt;&lt;img src='http://3.bp.blogspot.com/_3ys1dwfzc2w/S5YAqTzF7ZI/AAAAAAAAACg/GKFelWiINQE/s320/EstragonLarge.png' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src='http://pw.brown.edu/~paul/EstragonEvolve.gif' alt='An animated gif showing my sprite evolving!' /&gt;&lt;/p&gt;

&lt;p&gt;Finally, I can&amp;#8217;t stop watching this (make sure you full-screen it):&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='allowfullscreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id=9625370&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' /&gt;&lt;embed src='http://vimeo.com/moogaloop.swf?clip_id=9625370&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;The song is great, if only because it channels chip music. But the animation! Made with &lt;em&gt;real wood blocks&lt;/em&gt; using &lt;em&gt;old-school stop motion?&lt;/em&gt; It inspires me to create.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>TeX, Culture.</title>
      <link>http://www.morepaul.com/2010/03/tex-culture.html</link>
      <pubDate>Sun, 07 Mar 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;On the old (lost) blog I had a long post as to why I used LaTeX instead of Word, even for non- mathematical documents. I&amp;#8217;ll surely re-post it sometime (I have the source somewhere&amp;#8230;), but in the meantime, &lt;a href='http://nitens.org/taraborelli/latex'&gt;this little comparison&lt;/a&gt; beautifully demonstrates the aesthetic advantages. It also links to &lt;a href='http://ricardo.ecn.wfu.edu/%7Ecottrell/wp.html'&gt;this essay&lt;/a&gt;, which very articulately describes many of the other advantages.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;On &lt;a href='http://news.ycombinator.com'&gt;Hacker News&lt;/a&gt; someone linked to a very non-hacker article, namely, an author of the gaming site Kotaku &lt;a href='http://kotaku.com/5484581/japan-its-not-funny-anymore?skyline=true&amp;amp;s=i'&gt;is very displeased&lt;/a&gt; with many things Japan. It&amp;#8217;s a moderately epic rant, I only made it until about halfway down before I had to be somewhere else.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s interesting in the way I find very crying babies interesting*.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://2.bp.blogspot.com/_3ys1dwfzc2w/S5RpMMlLTJI/AAAAAAAAACQ/_Zk_Dz3TxhI/s1600-h/crying-baby.jpg'&gt;&lt;img src='http://2.bp.blogspot.com/_3ys1dwfzc2w/S5RpMMlLTJI/AAAAAAAAACQ/_Zk_Dz3TxhI/s320/crying-baby.jpg' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;* = Crying babies, to me, are hilarious and very interesting. It&amp;#8217;s a display of emotion we &amp;#8216;grow out of&amp;#8217; (read: learn to hide) and almost never see again. Do you see how &lt;em&gt;hard&lt;/em&gt; babies cry? Heave in their chests, deliberately take in as much air as they can for the express purpose of &lt;em&gt;yelling louder?&lt;/em&gt; And then they do it again! You never see grown-ups do anything like it.&lt;/p&gt;

&lt;p&gt;I think the poor guy needs a) to come home for a few months (depressurize), and b) stay there for at least a few years, since he seems so far gone in his bitterness to give it a fair shake again. Many of his gripes arise from social issues regarding his differences (vegetarianism, his unfortunate allergy to alcohol), particularly in a professional social setting.&lt;/p&gt;

&lt;p&gt;Bad news though: that&amp;#8217;s true most everywhere. In many corporate dinners in &lt;em&gt;this&lt;/em&gt; country, being a vegetarian gets you all sorts of weird looks (going to a steakhouse and ordering a &lt;em&gt;salad&lt;/em&gt;?). While his distinguishing features are obviously more acceptable here (tautological, since he&amp;#8217;s writing from a US perspective), I hesitate to believe our businesspeople are paragons of tolerance (just think of all the ways to blow a professional interview. Most have nothing to do with substance).&lt;/p&gt;

&lt;p&gt;This isn&amp;#8217;t to say his article is completely baseless; I would likely agree with the part on smoking. At the very least, parts of it are entertaining, the segment on &amp;#8216;mistress bars&amp;#8217; had me laughing out loud and got me wanting to get into theatre again (this kind of human-interaction &amp;#8216;market failure&amp;#8217; is what makes life worth living).&lt;/p&gt;

&lt;p&gt;But many of his points, namely the cultural artifacts (music, comedy) are so bad they merit further discussion. First off, when is it &lt;em&gt;ever&lt;/em&gt; a good idea to criticize how &amp;#8216;smart&amp;#8217; popular media is, and derive cultural judgment on it? Especially when you&amp;#8217;re from &lt;em&gt;here&lt;/em&gt;?&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/3taEuL4EHAg' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/3taEuL4EHAg' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Complaining about comedy being all about &amp;#8216;catch phrases&amp;#8217; ignores too many lame catchphrases that got too trendy here. I&amp;#8217;ve heard &amp;#8221;I&amp;#8217;m Rick James, bitch!&amp;#8221; way too many times to ever find it funny.&lt;/p&gt;

&lt;p&gt;Speaking more broadly, &lt;em&gt;other cultures find other things funny&lt;/em&gt; (this is the basis of the &lt;a href='http://simpsons.wikia.com/wiki/Bumblebee_Man'&gt;Bumblebee Man&lt;/a&gt; character on &lt;em&gt;The Simpsons&lt;/em&gt;). This shouldn&amp;#8217;t be surprising, since (by definition) other cultures live differently than you do. So complaining that a stand-up comic doesn&amp;#8217;t want to joke about masturbation (like they do here) tells us more about you (expecting to find things funny to &lt;em&gt;you, somewhere else&lt;/em&gt;) than it does strengthen your argument.&lt;/p&gt;

&lt;p&gt;Add this to the contradictions (&amp;#8220;the stereotyping&amp;#8221; is a gripe of his, after saying he hates people fitting an &amp;#8220;everybody&amp;#8217;s uncle&amp;#8221; stereotype, among others) and punitive tone (he digs a lot on an ex-girlfriend he had there) make this another &lt;a href='http://www.youtube.com/watch?v=bEZB4taSEoA'&gt;Rick Santelli rant&lt;/a&gt;: entertaining, angry, and wrong. Like the Santelli rant, you only hope (but know otherwise) that people are smart enough to not believe it.&lt;/p&gt;

&lt;p&gt;(usual disclaimer: I&amp;#8217;m not arguing for moral relativism, or universal acceptance of all cultures. There are many legitimate issues that can and should be soberly addressed. The Kotaku author makes very few of them, and makes them poorly.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; The comments refer to the last five paragraphs (&amp;#8220;Can Videogames Make Us Better People?&amp;#8221;) as the &amp;#8220;real&amp;#8221; article. I would recommend reading it. My commentary is the same: the rules he complains about exist here too, you just don&amp;#8217;t see them as starkly since you&amp;#8217;re from here.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>My brother and I</title>
      <link>http://www.morepaul.com/2010/03/my-brother-and-i.html</link>
      <pubDate>Tue, 02 Mar 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I just finished two major works of code and a midterm, but why not share some graphics love?&lt;/p&gt;

&lt;p&gt;This is an image I drew to replace my Facebook photo (the &lt;a href='http://photos-g.ak.fbcdn.net/hphotos-ak-snc3/hs165.snc3/19254_612467388291_1010423_35084194_2234089_n.jpg'&gt;old one&lt;/a&gt; celebrated &lt;a href='http://www.guardian.co.uk/media/pda/2010/feb/03/digital-media-facebook-doppelganger-week'&gt;Celebrity Doppelganger Week&lt;/a&gt;):&lt;/p&gt;

&lt;p&gt;&lt;a href='http://2.bp.blogspot.com/_3ys1dwfzc2w/S43_nt1YZXI/AAAAAAAAACA/huPhXD1aiBk/s1600-h/CartoonPaul.png'&gt;&lt;img src='http://2.bp.blogspot.com/_3ys1dwfzc2w/S43_nt1YZXI/AAAAAAAAACA/huPhXD1aiBk/s400/CartoonPaul.png' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And this one continues in &lt;a href='http://knowyourmeme.com/memes/at-first-i-was-like'&gt;the tradition of memes&lt;/a&gt; (starring my brother Robert in Guatemala):&lt;/p&gt;

&lt;p&gt;&lt;a href='http://2.bp.blogspot.com/_3ys1dwfzc2w/S43_3rEY3DI/AAAAAAAAACI/FU2C4mdGfsI/s1600-h/robertFirstThen.png'&gt;&lt;img src='http://2.bp.blogspot.com/_3ys1dwfzc2w/S43_3rEY3DI/AAAAAAAAACI/FU2C4mdGfsI/s400/robertFirstThen.png' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>YEEEAAAAAAH</title>
      <link>http://www.morepaul.com/2010/03/yeeeaaaaaah.html</link>
      <pubDate>Mon, 01 Mar 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I love memes, but haven&amp;#8217;t produced any of my own. In light of this awful, awful late night coding, as well as the newest episode of Burn Notice, here&amp;#8217;s a quickie:&lt;/p&gt;

&lt;p&gt;&lt;a href='http://1.bp.blogspot.com/_3ys1dwfzc2w/S4zEKtkU2BI/AAAAAAAAAB4/TjjqnpkXvD8/s1600-h/clojure-caruso.png'&gt;&lt;img src='http://1.bp.blogspot.com/_3ys1dwfzc2w/S4zEKtkU2BI/AAAAAAAAAB4/TjjqnpkXvD8/s400/clojure-caruso.png' alt='' /&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>GC, Continuations, Ruby Internals</title>
      <link>http://www.morepaul.com/2010/02/gc-continuations-ruby-internals.html</link>
      <pubDate>Wed, 24 Feb 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;When I was about 6, I told my mom I wanted to be a garbageman when I grew up.&lt;br /&gt;I mostly just liked the truck, and hanging from the side of it while it drove from house to house.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Garbage collection still fascinates me.&lt;/strong&gt; I found &lt;a href='http://timetobleed.com/garbage-collection-slides-from-la-ruby-conference/'&gt;this talk on Ruby&amp;#8217;s garbage collector&lt;/a&gt; of great interest. While we program with abstractions to make application development easier, the sad fact is that it still helps you avoid shooting yourself in the foot to know how your languages features are being implemented. Even if it didn&amp;#8217;t, wouldn&amp;#8217;t you be curious?&lt;/p&gt;

&lt;p&gt;This is also a great example of a poor (or simply inflexible) design choice having major consequences down the road. In the talk they explain how Ruby&amp;#8217;s &lt;em&gt;conservative, stop-the-world mark and sweep&lt;/em&gt; collector can&amp;#8217;t really be replaced by other, more efficient collectors due to the representation of objects. Personally, I&amp;#8217;m partial to generational stop-and-copy&amp;#8217;s; but it only showed up in the talk as an impossibility. The best they could do was curb their lame mark-and-sweep (also Python uses reference counting lol).&lt;/p&gt;

&lt;p&gt;I dropped a lot of jargon there; for any curious folk, I can explain what they mean in a later post ^_^ I&amp;#8217;ll spend the remainder of this one talking about another Ruby feature whose underlying implementation destroyed my algorithm.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Ruby is one of the few languages to support &lt;a href='http://en.wikipedia.org/wiki/Continuation'&gt;continuations&lt;/a&gt; out-of-the-box (in Ruby 1.8 anyways, in 1.9 you have to &amp;#8216;require continuation&amp;#8217;). The presence of continuations are a sign of flair: when a designer has worked to put it in the language (Matz called it the &lt;a href='http://www.infoq.com/interviews/yukihiro-matz-language-design'&gt;hardest language feature of Ruby to implement&lt;/a&gt;) they are pretty much telling you they are committed to writing a flexible, powerful language that lets the programmer do whatever they want. Naturally, when I see a use for them, I use them.&lt;/p&gt;

&lt;p&gt;Kent Dybvig shows us that &lt;a href='http://lambda-the-ultimate.org/node/3527'&gt;continuations can be implemented to be very efficient.&lt;/a&gt; Unfortunately in Ruby, they aren&amp;#8217;t: like the GC, &lt;strong&gt;continuations are implemented in about the most bare-bones way possible.&lt;/strong&gt; In Ruby, they implement a continuation by copying the entire program stack in its current state and storing it elsewhere. When you call the continuation, they copy back the old stack over the current one.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s the problem: I wrote a program to push the current continuation onto a stack before every call to the recursion. The idea was to use the continuations to keep track of backtracking over several parameters, and the stack meant you would only call as many as you needed.&lt;/p&gt;

&lt;p&gt;The problem was, &lt;em&gt;every recursive call increased the size of the stack, since Ruby doesn&amp;#8217;t support tail-call optimization.&lt;/em&gt; So at every recursive call, you would copy over the entire stack somewhere in memory, augment it, and recur. DEATH!&lt;/p&gt;

&lt;p&gt;Needless to say, I found another solution. But this was another example of how the implementation of a feature can make the feature usable or not. Had I implemented the same algorithm in Dybvig&amp;#8217;s Chez Scheme, with both tail-calls and efficient continuations, this algo would have sailed.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Coming back full circle, there was a time when I considered peeking into the Ruby source and forking it to support Dybvig&amp;#8217;s stack frame model (gutting the whole language primarily to support&amp;#8230; &lt;em&gt;continuations?&lt;/em&gt;). Looking at the object representation from the GC talk though, it&amp;#8217;s probably much harder than I imagined ^_^.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>m4d H4X</title>
      <link>http://www.morepaul.com/2010/02/m4d-h4x.html</link>
      <pubDate>Mon, 22 Feb 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;For two years I was a UTA for our department&amp;#8217;s &lt;a href='http://cs.brown.edu/courses/cs166/'&gt;Introduction to Security&lt;/a&gt; course, and my current roommate is the current Head TA. So when a friend was looking for someone to perform a security audit on his web application, he called my roommate, who called me in as his surgeon&amp;#8217;s assistant. Here&amp;#8217;s what we found:&lt;/p&gt;

&lt;h3 id='dictionary_attack'&gt;Dictionary Attack&lt;/h3&gt;

&lt;p&gt;Anytime you have a problem in computing, there&amp;#8217;s always a &amp;#8216;dumb way to do it,&amp;#8217; which normally involves checking every possibility. Remember being a kid and asking someone to guess your birthday? The first thing they ask is &amp;#8216;What month is it in?&amp;#8217; Suppose you say &amp;#8216;August.&amp;#8217;&lt;/p&gt;

&lt;p&gt;A dictionary attack is the kid who closes his eyes and says &amp;#8220;August 1st August 2nd August 3rd August 4th August 5th&amp;#8230;&amp;#8221; (and ruins the game).&lt;/p&gt;

&lt;p&gt;The idea is this: if you want to guess someone&amp;#8217;s password, try every value it could be. You do this by trying to log in as them with every password, and you stop when one of them works.&lt;/p&gt;

&lt;p&gt;Sounds dumb? It is, but &lt;strong&gt;never underestimate a fast, dumb computer&lt;/strong&gt;. After all, it &lt;a href='http://www.wired.com/threatlevel/2009/01/professed-twitt/'&gt;worked against Twitter.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The attack is called a Dictionary attack because the idea is that you try someone&amp;#8217;s e-mail address with every word in the dictionary. A simple dictionary (one I used for this) consists of &lt;a href='http://boingboing.net/2009/01/02/top-500-worst-passwo.html'&gt;the 500 most common passwords&lt;/a&gt;, &lt;a href='http://babynames.com/Names/Popular/'&gt;a couple hundred first names&lt;/a&gt;, and &lt;a href='http://www.facebook.com/careers/puzzles.php#!/careers/puzzles.php?puzzle_id=17'&gt;an actual dictionary&lt;/a&gt; (the puzzle links to a text file). Since most people use real words as their passwords, there&amp;#8217;s a good chance you&amp;#8217;ll stumble upon the correct one.&lt;/p&gt;

&lt;p&gt;To stop this, you have a few options:&lt;/p&gt;

&lt;p&gt;* &lt;strong&gt;Create a delay after some failed attempts, and report the behavior to an admin.&lt;/strong&gt; So if someone messes up their password 3 times, make them wait 15 minutes. Another 3, make them wait an hour, etc. This slows down your opponent, and makes you aware of suspicious activity.&lt;/p&gt;

&lt;p&gt;* &lt;strong&gt;Demand strong passwords.&lt;/strong&gt; We all get annoyed having to mix numbers and letters (one of the most common passwords is &amp;#8216;password1&amp;#8217;, the most common is &amp;#8216;123456&amp;#8217;), but it helps your security, since you won&amp;#8217;t find &amp;#8216;h4ll0MRP3ANut&amp;#8217; in a dictionary.&lt;/p&gt;

&lt;p&gt;* &lt;strong&gt;Keep track of your requests, and stop trolls.&lt;/strong&gt; This is a similar tactic to a &lt;a href='http://en.wikipedia.org/wiki/Denial-of-service_attack'&gt;DoS&lt;/a&gt;, but keep track of where people are logging in from. If you have 100 failed logins in 1 minute from IP Address 113.154.2.110, stop letting them try to connect (again, at least for a day or two).&lt;/p&gt;

&lt;h3 id='file_upload'&gt;File Upload&lt;/h3&gt;

&lt;p&gt;Most web applications let you upload files to share, or view online. There was once an artist who bound his book with sandpaper so that shelving and re- shelving it would destroy the books next to it. That bookshelf is your application, and that book is the other exploit we found.&lt;/p&gt;

&lt;p&gt;The site in question had a file upload feature, so we uploaded an executable file that would run whatever command we fed it on the computer where it resided (in this case, the company server). As soon as we &amp;#8216;viewed&amp;#8217; the document, it would execute. So a command like&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='bash'&gt;    find ../../ -name &lt;span class='s2'&gt;&amp;quot;config.rb&amp;quot;&lt;/span&gt; -exec grep password &lt;span class='s1'&gt;&amp;#39;{}&amp;#39;&lt;/span&gt; &lt;span class='se'&gt;\;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Will find a configuration file, and find all the passwords in it (most web frameworks have contain a file).&lt;/p&gt;

&lt;p&gt;The fix to this one is simple: don&amp;#8217;t let users upload any type of file your server might execute (unless, of course, you&amp;#8217;re a code hosting site, in which case you don&amp;#8217;t need to be told about this).&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Security isn&amp;#8217;t the way movies make it out to be: most hacks aren&amp;#8217;t mathematical or cryptographic breaks, and they&amp;#8217;re never as dramatic. &lt;a href='http://www.schneier.com/blog/archives/2008/07/world_war_ii_de.html'&gt;The brilliance in the best ones is that they&amp;#8217;re so simple&lt;/a&gt;. Most security holes are little leaks in the way software gets written, or more usually (like weak passwords) flaws in predictable human behavior.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Fruits</title>
      <link>http://www.morepaul.com/2010/02/fruits.html</link>
      <pubDate>Fri, 19 Feb 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;I made a video game! Czech it out ^_^&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='allowfullscreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id=9592857&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' /&gt;&lt;embed src='http://vimeo.com/moogaloop.swf?clip_id=9592857&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Follow my progress, as well as the rest of of my games group, at &lt;a href='http://brownandroidattack.blogspot.com'&gt;our blog!&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>A short history of my belief</title>
      <link>http://www.morepaul.com/2010/02/short-history-of-my-belief.html</link>
      <pubDate>Thu, 18 Feb 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;One of the (few) things I used to blog about was my atheism. Since I&amp;#8217;m starting fresh in this new blog, an introduction is in order, since my relationship to belief has varied widely over the years, and religious belief is something I care passionately about.&lt;/p&gt;

&lt;p&gt;I &amp;#8216;came out&amp;#8217; as atheist almost as soon as I embraced the label, about 2 years ago, in my junior year at Brown. I&amp;#8217;d been fighting doubts in my mind for a few years prior, but only really challenged and criticized my faith with any vigor or curiosity around when I came out.&lt;/p&gt;

&lt;p&gt;I was raised culturally Catholic: technically my mother &lt;em&gt;was&lt;/em&gt; a Catholic and my father a Protestant. I say &lt;em&gt;was&lt;/em&gt; because my mother isn&amp;#8217;t technically allowed to practice anymore: she is my father&amp;#8217;s second wife. Since the Catholics don&amp;#8217;t believe in divorce, my mother could no longer &amp;#8216;officially&amp;#8217; practice. When they got married, there wasn&amp;#8217;t a Catholic priest in town who would officiate the ceremony. They now attend a Methodist church.&lt;/p&gt;

&lt;p&gt;We didn&amp;#8217;t grow up going to church, but I was still raised with a significant religious bent, in spirit more than ceremony. My parents always emphasized Doing the Right Thing that Christ Would Want as more important than saying any number of Hail Marys. In Middle School especially I would pray every night before going to bed. I would wear a cross, and if I took it off before showering, would apologize to God.&lt;/p&gt;

&lt;p&gt;As I got older, questions started forming. First, the simple facts-on-the-ground ones (&amp;#8220;why does the church hate gay people?&amp;#8221;) to the higher level ones (&amp;#8220;If God knows what I&amp;#8217;m going to do, and even controls it, why does s/he care?&amp;#8221;). They mounted over time, and after a while I just couldn&amp;#8217;t think about it anymore.&lt;/p&gt;

&lt;p&gt;When Junior year rolls around, I read a few books, and realize the answer to all those questions is a very simple one: &lt;strong&gt;S/He doesn&amp;#8217;t exist. Suddenly, almost all the issues go away.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No more fighting my brain; no more defending stupidity manifesting itself in religious institutions. No more tainting my observations with false expectations of a Watcher or Creator. What happens on Earth is our own doing. &lt;strong&gt;It remains the most liberating moment of my life.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It can be depressing, however.&lt;/strong&gt; Dawkins had an cute essay called &lt;a href='http://richarddawkins.net/articles/122'&gt;Gerin Oil&lt;/a&gt;, where he compares religion to drug use (paraphrasing: &amp;#8220;in light doses, it&amp;#8217;s rather harmless and often used as a social lubricant. In heavier doses&amp;#8230;&amp;#8221;).&lt;/p&gt;

&lt;p&gt;I think this is apt. Just like consuming substances can &amp;#8216;turn off&amp;#8217; a part of your brain and allow you certain associated comforts, going atheist is like being the sober guy at a party. While other people are comfortable embracing blatant contradictions and living by hollow aphorisms, you get a far less sugar-coated view. Preventable injustices happen (no, God didn&amp;#8217;t want it). You aren&amp;#8217;t that special. When you die, it&amp;#8217;s over.&lt;/p&gt;

&lt;p&gt;All things considered, however, I&amp;#8217;ll take it, because a) if you look at it from another angle, it&amp;#8217;s not really bad at all, and b) it has the advantage of being possibly true, or at least doesn&amp;#8217;t crumble hopelessly after some nontrivial thought.&lt;/p&gt;

&lt;p&gt;So I might post about religion from time to time. If you agree, great! If you don&amp;#8217;t, better! Let&amp;#8217;s have a conversation.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>This made me laugh today.</title>
      <link>http://www.morepaul.com/2010/02/this-made-me-laugh-today.html</link>
      <pubDate>Wed, 17 Feb 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Yes he was a traitor, but I don&amp;#8217;t mind taking orders from Lando Calrissian when he &lt;strong&gt;plays it so &lt;em&gt;cool.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div style='width: 500px; margin: 15px auto;'&gt;&lt;object height='305' width='500'&gt;&lt;param name='movie' value='https://www.youtube.com/v/0pK5HmuCMBM' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='https://www.youtube.com/v/0pK5HmuCMBM' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='305' width='500' /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Gotta love the cooool lovemakin&amp;#8217; music they score it with.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Hiatus - And a voyage of vim</title>
      <link>http://www.morepaul.com/2010/02/hiatus-and-voyage-of-vim.html</link>
      <pubDate>Mon, 15 Feb 2010 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Sorry for the lack of updates. I hate when blogs say that, but publishing less than once a month defeats the purpose of a blog. I blame what I always have: my insistence that what I publish be Significant (the last two posts were more than epic enough), even when it goes against the interests of a) myself, and b) my readers (are there any there)?&lt;/p&gt;

&lt;p&gt;But let&amp;#8217;s continue. What am I up to? Oh, yes! These are things I&amp;#8217;m working on in school, and am likely to write about (if I ever do, in fact, write):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href='http://www.cs.brown.edu/courses/cs258/'&gt;Solving Hard Problems with Combinatorial Optimization&lt;/a&gt;&lt;/strong&gt; is one of the 5-6 legendary courses everyone at Brown CS is told to take, something like a rite of passage. I missed the chance to take one of those classes (&lt;a href='http://www.cs.brown.edu/courses/cs167/'&gt;Operating Systems&lt;/a&gt;) in lieu of another (&lt;a href='http://www.cs.brown.edu/courses/cs273/'&gt;Programming Languages Seminar&lt;/a&gt;), and while I loved loved loved PL, I won&amp;#8217;t allow myself to graduate without taking this course.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m also taking an &lt;strong&gt;independent study on Android Game Development&lt;/strong&gt;, with some pretty awesome partners. It&amp;#8217;s something very different than I&amp;#8217;m used to: whereas I&amp;#8217;m used to writing programs that run on your terminal, performing computation or purely manipulating data, Android is framework programming with GUI&amp;#8217;s and graphics. The data in this case is usually mundane plumbing, and the &lt;em&gt;easy&lt;/em&gt; part of your application.&lt;/p&gt;

&lt;p&gt;Altogether, good fun. Hopefully I&amp;#8217;ll still have time (and this is dubious) to continue pursuing my lovely &lt;a href='http://projecteuler.net/'&gt;programming&lt;/a&gt; &lt;a href='http://www.facebook.com/careers/puzzles.php'&gt;puzzles&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the meantime, I&amp;#8217;ll bloviate some. Today I&amp;#8217;ll talk a bit about my tools with a focus on text editing.&lt;/p&gt;

&lt;p&gt;I feel like refining and expanding upon your coding environment is something like building your own lightsaber: you can use someone else&amp;#8217;s, but you really only work productively (and more importantly, happily) when you find the tools to fit your needs yourself, and through much experimentation. For me, that environment is usually all-out &lt;strong&gt;vim + Makefiles&lt;/strong&gt; (or in Java, vim + ant), and as much from the Terminal as possible.&lt;/p&gt;

&lt;p&gt;A lot of junior hackers feel this way, but most &amp;#8216;enterprise developers&amp;#8217; (those who know everything there is to know about the JVM and its classloading process but have no notion of first-class functions, or final vs. const in C#) love to stick it to me on their IDE&amp;#8217;s. Similarly, when I witnessed an emacs vs. vim brawl (one of our professors left their terminal exposed, revealing which side they were on), the emacs user felt under attack before I said my first words.&lt;/p&gt;

&lt;p&gt;Here is why I use vim instead of emacs: &lt;strong&gt;because I learned it first.&lt;/strong&gt; Alternatively, you can use any of the equally compelling reasons in the list below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Because I prefer to map Caps Lock to Esc instead of Ctrl.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Because my brilliant &lt;a href='http://www.cs.brown.edu/people/andrew/'&gt;hacker&lt;/a&gt; &lt;a href='http://www.csail.mit.edu/user/2032'&gt;friends&lt;/a&gt; next to me use vim exceptionally well and inspired me (they could have just as easily been emacs users).&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Because a friend put up a photo of Richard Stallman in the lab and joked about the fact that he used Ctrl^H for Help.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these are real reasons, folks. They&amp;#8217;re all true, and honest-to-Baal the only things that pushed me to vim. Since I have a soft spot for Lisp, I hope one day to pick up emacs, and remain open to the possibility that it may suit me better.&lt;/p&gt;

&lt;p&gt;What I learned in the aforementioned editor brawl (and I hope we as an industry have outgrown the lame fighting*): if you see someone warring over their editor, don&amp;#8217;t feed the animals. It&amp;#8217;s clear that very smart and productive people use one or the other; that you don&amp;#8217;t like it is not reason for indignation. Further, who cares what someone else uses?&lt;/p&gt;

&lt;p&gt;I would extend this to Tabs vs. Spaces as well, or where to put your open braces in if/else blocks. There are &lt;a href='http://stackoverflow.com/questions/338767/tool-to-convert-python-indentation-from-spaces-to-tabs'&gt;tools&lt;/a&gt; to &lt;a href='http://www.peterfriese.de/formatting-your-code-using-the-eclipse-code-formatter/'&gt;convert&lt;/a&gt; to your preferred style. Change it, work on it, change it back.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;For now, I use vim because I know it, and only started using it last year. Before that? &lt;a href='http://kate-editor.org/'&gt;Kate&lt;/a&gt; on the department filesystems, &lt;a href='http://www.subethaedit.net/'&gt;SubEthaEdit&lt;/a&gt; on my home computer, and &lt;a href='http://www.nano-editor.org/'&gt;nano&lt;/a&gt; when I ssh-ed from the terminal. I edited Java in Eclipse.&lt;/p&gt;

&lt;p&gt;Do I recommend switching as I did? Yes. Keeping it general, &lt;strong&gt;if you are a coder who uses a primarily graphical environment, I highly recommend you become proficient with a serious, terminal-based text editor.&lt;/strong&gt; You don&amp;#8217;t have to love it, you don&amp;#8217;t have to keep it, but try it, and give it a fair shot. Why?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Learning a Terminal-based editor lets you know you have a comfortable editor with you anytime, anywhere. When I used SubEthaEdit, it was not only Mac-specific, but &lt;em&gt;commercial&lt;/em&gt;. If I wasn&amp;#8217;t editing on my laptop, I wasn&amp;#8217;t editing in my preferred environment.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Both major players encourage keyboard use. You will never know the shackles of inconvenience that frequent mouse usage is until you&amp;#8217;ve been set free. Doing everything on the keyboard makes using the computer for 6-7+ hour stretches much more tolerable.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;If you are in a resource-scarce environment (say, ssh on a shady connection), you can bet that software written in the early 90&amp;#8217;s or 70&amp;#8217;s will load quickly, and leave a small footprint on your resources.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;They are scriptable. Many editors are programmable, but there&amp;#8217;s a difference to writing a tool in ELisp or Vimscript, and writing an Eclipse plugin.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Most of all, &lt;strong&gt;you look like a badass.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course, you lose some conveniences as well (especially in the case of Eclipse), but so far they haven&amp;#8217;t outweighed the benefits.&lt;/p&gt;

&lt;p&gt;Of course, if you are an IDE user, there&amp;#8217;s a very (very) good chance you&amp;#8217;re a more premium coder than I am. I&amp;#8217;m not making a value judgement on you; I simply suggest you try loving your Mother Terminal, who paved the way for the sexier IDE&amp;#8217;s.&lt;/p&gt;

&lt;p&gt;* = Open question: What is our generation&amp;#8217;s equivalent? Ruby vs. Python? More generally, the static typers vs. dynamic typers? Chip in, as a former actor in training, the only things I love more than Computer Science is Drama ^_^&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>On-Demand Prime Generation</title>
      <link>http://www.morepaul.com/2009/12/on-demand-prime-generation.html</link>
      <pubDate>Mon, 28 Dec 2009 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Many &lt;a href='http://www.projecteuler.net'&gt;Project Euler&lt;/a&gt; problems are made easier if you have a good facility for generating and detecting prime numbers. Usually when I see such a problem, I would immediately switch to Haskell, but the other day a problem took about a minute to solve (way too long), so I ported the functionality to C.&lt;/p&gt;

&lt;p&gt;In both, I&amp;#8217;m doing a simple trial division algorithm: a number is prime if no other number divides it. A simple glance at Wikipedia shows you only have to test up to and including the square root of the number you&amp;#8217;re testing, and the nature of primes means you really only need to test factorization by other primes.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;In Haskell, I used &lt;a href='http://www.cs.brown.edu/courses/csci1730/2008/Assignments/04-laziness-prog.html'&gt;a former exercise from my CS173 class&lt;/a&gt; that highlighted laziness as a language feature to achieve this. First, we declare our list of primes:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='hs'&gt;    &lt;span class='n'&gt;primes&lt;/span&gt; &lt;span class='ow'&gt;::&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='kt'&gt;Int&lt;/span&gt;&lt;span class='p'&gt;]&lt;/span&gt;
    &lt;span class='n'&gt;primes&lt;/span&gt; &lt;span class='ow'&gt;=&lt;/span&gt; &lt;span class='n'&gt;filter&lt;/span&gt; &lt;span class='n'&gt;isPrime&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='o'&gt;..&lt;/span&gt;&lt;span class='p'&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;And then we define the predicate to determine if a number is prime or not, on which our list depends:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='hs'&gt;    &lt;span class='n'&gt;isPrime&lt;/span&gt; &lt;span class='ow'&gt;::&lt;/span&gt; &lt;span class='kt'&gt;Int&lt;/span&gt; &lt;span class='ow'&gt;-&amp;gt;&lt;/span&gt; &lt;span class='kt'&gt;Bool&lt;/span&gt;
    &lt;span class='n'&gt;isPrime&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt; &lt;span class='ow'&gt;=&lt;/span&gt; &lt;span class='kt'&gt;False&lt;/span&gt;
    &lt;span class='n'&gt;isPrime&lt;/span&gt; &lt;span class='mi'&gt;2&lt;/span&gt; &lt;span class='ow'&gt;=&lt;/span&gt; &lt;span class='kt'&gt;True&lt;/span&gt;

    &lt;span class='n'&gt;isPrime&lt;/span&gt; &lt;span class='n'&gt;n&lt;/span&gt; &lt;span class='ow'&gt;=&lt;/span&gt; &lt;span class='n'&gt;checkFactors&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;takeWhile&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nf'&gt;\&lt;/span&gt; &lt;span class='n'&gt;x&lt;/span&gt; &lt;span class='ow'&gt;-&amp;gt;&lt;/span&gt; &lt;span class='n'&gt;x&lt;/span&gt; &lt;span class='o'&gt;&amp;lt;=&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;floor&lt;/span&gt; &lt;span class='o'&gt;$&lt;/span&gt; &lt;span class='n'&gt;sqrt&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;fromIntegral&lt;/span&gt; &lt;span class='n'&gt;x&lt;/span&gt;&lt;span class='p'&gt;)))&lt;/span&gt; &lt;span class='n'&gt;primes&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='n'&gt;n&lt;/span&gt;

    &lt;span class='n'&gt;checkFactors&lt;/span&gt; &lt;span class='ow'&gt;::&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='kt'&gt;Int&lt;/span&gt;&lt;span class='p'&gt;]&lt;/span&gt; &lt;span class='ow'&gt;-&amp;gt;&lt;/span&gt; &lt;span class='kt'&gt;Int&lt;/span&gt; &lt;span class='ow'&gt;-&amp;gt;&lt;/span&gt; &lt;span class='kt'&gt;Bool&lt;/span&gt;
    &lt;span class='n'&gt;checkFactors&lt;/span&gt; &lt;span class='kt'&gt;[]&lt;/span&gt; &lt;span class='kr'&gt;_&lt;/span&gt; &lt;span class='ow'&gt;=&lt;/span&gt; &lt;span class='kt'&gt;True&lt;/span&gt;
    &lt;span class='n'&gt;checkFactors&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;x&lt;/span&gt;&lt;span class='kt'&gt;:&lt;/span&gt;&lt;span class='n'&gt;xs&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='n'&gt;num&lt;/span&gt; &lt;span class='ow'&gt;=&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;num&lt;/span&gt; &lt;span class='p'&gt;`&lt;/span&gt;&lt;span class='n'&gt;mod&lt;/span&gt;&lt;span class='p'&gt;`&lt;/span&gt; &lt;span class='n'&gt;x&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='o'&gt;/=&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt; &lt;span class='o'&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class='n'&gt;checkFactors&lt;/span&gt; &lt;span class='n'&gt;xs&lt;/span&gt; &lt;span class='n'&gt;num&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;For those who aren&amp;#8217;t Haskellites (even those who are, since my Haskell probably isn&amp;#8217;t very pretty or idiomatic), the code is doing this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The list primes is the list of all integers beginning at 1, with all the non-primes filtered out, where non-primes are determined by the function isPrime.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;The function isPrime tests a number &lt;em&gt;x&lt;/em&gt; for primality by testing divisibility for all prime numbers below the square root of &lt;em&gt;x&lt;/em&gt;, where the prime numbers come from the list primes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Huh? You might have read over that a few times trying to piece it together and couldn&amp;#8217;t, as primes depends on isPrime and isPrime depends on primes. But not to worry, this is laziness at work :)&lt;/p&gt;

&lt;p&gt;Laziness means that Haskell will only perform the computations it needs &lt;em&gt;as it needs them&lt;/em&gt;, so as long as isPrime only needs as many numbers as primes has already computed, this works. Alternatively, so long as primes only needs to generate numbers isPrime can check, we&amp;#8217;re golden.&lt;/p&gt;

&lt;p&gt;Imagine a snake that is three feet long eating a foot of itself from its tail, but growing a foot and a half longer as a result. It can do this continuously and grow to indefinite size!&lt;/p&gt;

&lt;p&gt;More concretely, suppose I want to check if 9 is prime. A call to isPrime 9 causes the following to happen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The takeWhile in isPrime will take all numbers from primes that are less than or equal to 3.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;The language will compute values for primes by running each integer through &lt;code&gt;isPrime&lt;/code&gt;, and will do this while those values are less than or equal to 3.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;code&gt;isPrime 1&lt;/code&gt; will fail, &lt;code&gt;isPrime 2&lt;/code&gt; will pass, and &lt;code&gt;isPrime 3&lt;/code&gt;&amp;#8230;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&amp;#8230; we&amp;#8217;re not sure, so we repeat the steps above for all numbers in primes less than the square root of three. This gives us the empty list, which by definition of isPrime tells us 3 is prime.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;We return this result, and stop taking values from primes since this is less than or equal to 3. We divide 9 by 3. This fails the predicate, so 9 is not prime.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next to shell languages, Haskell is the only language I can think of in wide use (if you consider Haskell in wide use&amp;#8230;) that employs laziness by default, and it allows you a powerful abstraction like this. The laziness allows us to define the list of all primes to be used freely in the code as any other list, the program will only calculate as many primes as it needs, and it can calculate arbitrarily many primes. Furthermore, the primes are comparatively fast to compute, since there are no &amp;#8216;wasted&amp;#8217; divisibility tests.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;And so I solved a number of Project Euler problems in Haskell just so I can use this facility. That being said, the speed of the language itself left me wanting, so I ported a somewhat similar abstraction to C. We&amp;#8217;ll do this in the opposite order, first defining an isPrime:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='c'&gt;    &lt;span class='n'&gt;BOOL&lt;/span&gt;
    &lt;span class='nf'&gt;isPrime&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;num&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
    &lt;span class='p'&gt;{&lt;/span&gt;
      &lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;curr_prime&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;index&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
      &lt;span class='kt'&gt;double&lt;/span&gt; &lt;span class='n'&gt;limit&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;sqrt&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;num&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
      &lt;span class='k'&gt;while&lt;/span&gt; &lt;span class='p'&gt;((&lt;/span&gt;&lt;span class='n'&gt;curr_prime&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;takePrime&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='o'&gt;&amp;amp;&lt;/span&gt;&lt;span class='n'&gt;index&lt;/span&gt;&lt;span class='p'&gt;))&lt;/span&gt; &lt;span class='o'&gt;&amp;lt;=&lt;/span&gt; &lt;span class='n'&gt;limit&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
        &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;num&lt;/span&gt; &lt;span class='o'&gt;%&lt;/span&gt; &lt;span class='n'&gt;curr_prime&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;FALSE&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
      &lt;span class='p'&gt;}&lt;/span&gt;
      &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;TRUE&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
    &lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This relies on a takePrime function, which can be called continuously to fetch the next prime from an index value. It looks like:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='c'&gt;    &lt;span class='kt'&gt;unsigned&lt;/span&gt; &lt;span class='kt'&gt;int&lt;/span&gt;
    &lt;span class='nf'&gt;takePrime&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='kt'&gt;int&lt;/span&gt;&lt;span class='o'&gt;*&lt;/span&gt; &lt;span class='n'&gt;indx&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
    &lt;span class='p'&gt;{&lt;/span&gt;
      &lt;span class='kt'&gt;unsigned&lt;/span&gt; &lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;val&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;prime_ptr&lt;/span&gt;&lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='o'&gt;*&lt;/span&gt;&lt;span class='n'&gt;indx&lt;/span&gt;&lt;span class='p'&gt;];&lt;/span&gt;
      &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;val&lt;/span&gt; &lt;span class='o'&gt;!=&lt;/span&gt; &lt;span class='n'&gt;UNCOMPUTED&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
        &lt;span class='o'&gt;++&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='o'&gt;*&lt;/span&gt;&lt;span class='n'&gt;indx&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
        &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;val&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
      &lt;span class='p'&gt;}&lt;/span&gt;
      &lt;span class='k'&gt;else&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
        &lt;span class='kt'&gt;unsigned&lt;/span&gt; &lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;last_prime&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;prime_ptr&lt;/span&gt;&lt;span class='p'&gt;[(&lt;/span&gt;&lt;span class='o'&gt;*&lt;/span&gt;&lt;span class='n'&gt;indx&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;&lt;span class='o'&gt;-&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;];&lt;/span&gt;
        &lt;span class='kt'&gt;unsigned&lt;/span&gt; &lt;span class='kt'&gt;int&lt;/span&gt; &lt;span class='n'&gt;next_prime&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
        &lt;span class='k'&gt;for&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;next_prime&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;last_prime&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt; &lt;span class='o'&gt;++&lt;/span&gt;&lt;span class='n'&gt;next_prime&lt;/span&gt;&lt;span class='p'&gt;){&lt;/span&gt;
          &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;isPrime&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;next_prime&lt;/span&gt;&lt;span class='p'&gt;))&lt;/span&gt; &lt;span class='k'&gt;break&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
        &lt;span class='p'&gt;}&lt;/span&gt;
        &lt;span class='n'&gt;prime_ptr&lt;/span&gt;&lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='o'&gt;*&lt;/span&gt;&lt;span class='n'&gt;indx&lt;/span&gt;&lt;span class='p'&gt;]&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;next_prime&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
        &lt;span class='o'&gt;++&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='o'&gt;*&lt;/span&gt;&lt;span class='n'&gt;indx&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
        &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;next_prime&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
      &lt;span class='p'&gt;}&lt;/span&gt;
    &lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Where prime_ptr is an array of integers, memset to some value UNCOMPUTED (I&amp;#8217;ve left out most of the header information, as well as the init() and finished() calls that make this all work).&lt;/p&gt;

&lt;p&gt;This takePrime preserves previously computed values (this is the purpose of the first condition), so if you ever need to check the &lt;em&gt;i&lt;/em&gt;-th index of a value you&amp;#8217;ve already computed, you simply return it. Otherwise, you take the last value you&amp;#8217;ve computed previously, and increment all integers above it until you find your next prime. When you do, store it in the array and return it.&lt;/p&gt;

&lt;p&gt;The C abstraction has a number of shortcomings over the Haskell version; namely, you can&amp;#8217;t pass in an arbitrary index and receive a prime number (last_prime only checks the prime immediately behind the one you are trying to compute. If you&amp;#8217;ve only computed 6 primes and you ask for the 9th, you Segfault). You also lose the list abstraction (prime_ptr is static and this set of functions is #included, so I choose not to &amp;#8216;export&amp;#8217; it), and you can&amp;#8217;t calculate arbitrarily many primes (the array has a fixed size).&lt;/p&gt;

&lt;p&gt;All that being said, changes to correct those are pretty easy to implement; I&amp;#8217;ve never needed them. But this allowed me to brute-force a few problems that might have had more elegant solutions. While I hate on C pretty frequently, gcc/g++ produce some pretty slick executables.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Prologgin'</title>
      <link>http://www.morepaul.com/2009/12/prologgin.html</link>
      <pubDate>Mon, 14 Dec 2009 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Exam season is a royal pain, but I find ways to entertain myself. My most recent delight has been &lt;a href='http://www.projecteuler.net/'&gt;Project Euler&lt;/a&gt;: I discovered it late last semester, and took a break until about November to tackle some &lt;a href='http://www.facebook.com/careers/puzzles.php'&gt;Facebook puzzles&lt;/a&gt;. But with the gaps between commitments getting smaller and smaller, and with a desire to use some more unorthodox languages (Facebook doesn&amp;#8217;t accept Scheme or SML submissions, for example), tackling 15 or so of the easier Project Euler problems proved fitting.&lt;/p&gt;

&lt;p&gt;I recently solved &lt;a href='http://projecteuler.net/index.php?section=problems&amp;amp;id=54'&gt;Problem 54&lt;/a&gt;, an unusually straightforward implementation problem (most problems require some mathematical insight, this was a straight- up write-it-out problem). In Problem 54, they provide a file with 1000 games of poker, and you must determine how many games the first player wins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So here I saw an opportunity: Prolog!&lt;/strong&gt; Wouldn&amp;#8217;t it be more fun to just &lt;em&gt;declare&lt;/em&gt; the rules of Poker and say &amp;#8220;go,&amp;#8221; rather than hard-code every individual evaluation possibility?&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;For those who don&amp;#8217;t know what Prolog is, here&amp;#8217;s a quick (very, very brief) primer: &lt;strong&gt;Prolog is a language that attempts to satisfy truth clauses given a set of relations, and rules that govern them.&lt;/strong&gt; So if I were to define the following relation &lt;strong&gt;R&lt;/strong&gt;:&lt;/p&gt;
&lt;div style='text-align: center'&gt;
(_a_ **R** _b_) is true if and only if _a_ is the reverse of _b_.
&lt;/div&gt;
&lt;p&gt;Then we know that (&amp;#8220;paul&amp;#8221; &lt;strong&gt;R&lt;/strong&gt; &amp;#8220;luap&amp;#8221;) is a true statement, but (&amp;#8220;paul&amp;#8221; &lt;strong&gt;R&lt;/strong&gt; &amp;#8220;robert&amp;#8221;) is false.&lt;/p&gt;

&lt;p&gt;In Prolog, you supply the language with any relations you like (such as &lt;strong&gt;R&lt;/strong&gt;, above), and when you provide data to those relations it can tell you if they are true or not.&lt;/p&gt;

&lt;p&gt;Yawn. Here&amp;#8217;s the kicker: &lt;strong&gt;In Prolog, you can supply variables to the relations, and the language will bind those variables to values that satisfy its truth, without having to specify exactly how to find such a value.&lt;/strong&gt; Using the example above, if I fed Prolog&lt;/p&gt;
&lt;div style='text-align: center'&gt;
_x_ **R** &quot;cantankerous&quot;
&lt;/div&gt;
&lt;p&gt;Prolog returns&lt;/p&gt;
&lt;div style='text-align: center'&gt;
_x_ = &quot;suoreknatnac&quot;
&lt;/div&gt;
&lt;p&gt;The key to this is that I never told Prolog &lt;em&gt;how&lt;/em&gt; to reverse a word, I simply &lt;em&gt;declared&lt;/em&gt; that &lt;strong&gt;R&lt;/strong&gt; is true when one side is the reverse of the other. This becomes more clear as I go through the poker example: when you program in Prolog, you aren&amp;#8217;t thinking &amp;#8220;what instructions can I give a machine primarily using destructive memory updates such that I can compute my goal?&amp;#8221; (generally what happens in imperative programs), or &amp;#8220;what functional abstractions can I define such that one&amp;#8217;s output evaluates to my goal?&amp;#8221; (functional programs), but rather &amp;#8220;what is my goal?&amp;#8221; (logical programs, of which Prolog is the most popular language).&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;I&amp;#8217;ll throw a little syntax in before we dive into the example. In Prolog, square brackets define a list, so [] is an empty list, &lt;code&gt;[paul, robert,
annalisa]&lt;/code&gt; is a list with my siblings and I, and &lt;code&gt;[[galosh, wader],[souvlaki,
moussaka, gyro],gawker]&lt;/code&gt; is a list of two lists and &amp;#8220;gawker.&amp;#8221;&lt;/p&gt;

&lt;p&gt;In my poker program, each card is a list of the cards value and its suit (e.g. &lt;code&gt;[ace,spades]&lt;/code&gt; or &lt;code&gt;[8,diamonds]&lt;/code&gt;). A list of five cards is a hand, and a list of two hands is a game between two players.&lt;/p&gt;

&lt;p&gt;Throwing it all together, here&amp;#8217;s are some of the rules I wrote that determine a player&amp;#8217;s hand in poker:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='prolog'&gt;    &lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;([[&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='s-Atom'&gt;flush&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;In English, this says: the relation &lt;em&gt;determine&lt;/em&gt;hand_ is true if two conditions are met. The first value is a hand of cards, for which the second value on every pair (the suit) is the same value X. Second, the second value of &lt;em&gt;determine&lt;/em&gt;hand_ is the value &amp;#8220;flush.&amp;#8221; The underscore in the place of the values of the cards tells Prolog &amp;#8220;we don&amp;#8217;t care what goes there,&amp;#8221; since getting a flush is only dependent on the suits of the cards. Here is another:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='prolog'&gt;    &lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;([[&lt;/span&gt;&lt;span class='m'&gt;10&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='s-Atom'&gt;jack&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='s-Atom'&gt;queen&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='s-Atom'&gt;king&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='s-Atom'&gt;ace&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='s-Atom'&gt;royal_flush&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This clause says: the relation &lt;em&gt;determine&lt;/em&gt;hand_ is true if two things occur: the first, its left side is a 5-tuple of pairs. The values of the represented cards must be 10, jack, queen, king, and ace; the second value (the suit) for each card must all be the same value X. Secondly, the right side of &lt;em&gt;determine&lt;/em&gt;hand_ must be the value &amp;#8220;royal_flush.&amp;#8221;&lt;/p&gt;

&lt;p&gt;So if I then prompted Prolog with:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='prolog'&gt;    &lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;([[&lt;/span&gt;&lt;span class='m'&gt;10&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s-Atom'&gt;clubs&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='m'&gt;3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s-Atom'&gt;clubs&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='m'&gt;8&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s-Atom'&gt;clubs&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='s-Atom'&gt;queen&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s-Atom'&gt;clubs&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='m'&gt;6&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s-Atom'&gt;clubs&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='nv'&gt;HandType&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Prolog would search the possible values for HandType (variables begin with capital letters) until it found some value to make it true given the rules I&amp;#8217;ve provided above. We see that all suit values are the same (&amp;#8220;clubs&amp;#8221;), so Prolog replies:*&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;HandType = flush.&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;Like any evaluator of conditional statements, the relation rules can be chained together with standard boolean operators. The following mean:&lt;/p&gt;

&lt;p&gt;* &lt;em&gt;left&lt;/em&gt;&lt;code&gt;:-&lt;/code&gt;&lt;em&gt;right&lt;/em&gt; means &lt;em&gt;left&lt;/em&gt; is true if &lt;em&gt;right&lt;/em&gt; is true.&lt;/p&gt;

&lt;p&gt;* Commas mean logical AND.&lt;/p&gt;

&lt;p&gt;* Semicolons mean logical OR.&lt;/p&gt;

&lt;p&gt;* And, of course, you can group with parenthesis (AND gets higher precedence than OR).&lt;/p&gt;

&lt;p&gt;This should be enough (coming at you very fast!) to give you a flavor for how the program worked. Here is the top-level relation:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='prolog'&gt;    &lt;span class='nf'&gt;winner&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
       &lt;span class='nf'&gt;sort_hand&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Sorted_Hand1&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
       &lt;span class='nf'&gt;sort_hand&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Sorted_Hand2&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
       &lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Sorted_Hand1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;X1&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
       &lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Sorted_Hand2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;X2&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
       &lt;span class='nf'&gt;beats&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;X2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Verdict&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
       &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Verdict&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;X1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
        &lt;span class='nv'&gt;Verdict&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;X2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
        &lt;span class='nv'&gt;Verdict&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s-Atom'&gt;tie&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;
        &lt;span class='nf'&gt;tiebreak&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Sorted_Hand1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Sorted_Hand2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;SortedWinner&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
         &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;SortedWinner&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s-Atom'&gt;left&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;H1&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt;
          &lt;span class='nv'&gt;SortedWinner&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s-Atom'&gt;right&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;)).&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;It goes something like this in English: The &lt;em&gt;winner&lt;/em&gt; relation is true if the following are true, for two poker hands H1 and H2, and some value Winner:&lt;/p&gt;

&lt;p&gt;1. Sorted_Hand1 is bound to the first value that makes sort_hand(H1, Sorted_Hand1) true. In this case, it&amp;#8217;s true when a hand is sorted by ascending value, so if&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;H1 = [[4,spades],[king,clubs],[9,hearts],[3,diamonds],[9,spades]].&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;the predicate becomes true if&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;SortedHand = [[3,diamonds],[4,spades],[9,spades],[9,hearts],[king,clubs]].&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Which Prolog will find for us ^_^&lt;/p&gt;

&lt;p&gt;2. Find the same value for the second Hand.&lt;/p&gt;

&lt;p&gt;3. X1 and X2 are the values of determine_hand for the Sorted_Hands, and these are bound to the appropriate types of hand in poker (e.g. &amp;#8220;two pair&amp;#8221; and &amp;#8220;full house&amp;#8221;).&lt;/p&gt;

&lt;p&gt;4. beats is true when the third value (in this case, Verdict) is the winner of the first two hands. If the two hands are the same, Verdict becomes &amp;#8220;tie.&amp;#8221;&lt;/p&gt;

&lt;p&gt;5. One of three things is true: Either Verdict is X1, and Winner is H1 (the left player has a higher hand), OR Verdict is X2, and Winner is H2, OR there was a tie, in which case tiebreak becomes true if it&amp;#8217;s fourth value is the winner of two hands of the same type. (the problem guarantees there&amp;#8217;s always a clear winner, so we won&amp;#8217;t have actual tie games, such as two royal flushes).&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;It&amp;#8217;s a pretty radical departure from more traditional ways of programming. For those interested in logic programming, there are some great chapters near the end of &lt;a href='http://www.cs.brown.edu/%7esk/publications/books/proglangs/2007-04-26'&gt;PLAI&lt;/a&gt; on the subject. Also, &lt;a href='http://www.amazon.com/reasoned-schemer-daniel-p-friedman/dp/0262562146/ref=sr_1_1?ie=utf8&amp;amp;s=books&amp;amp;qid=1260806430&amp;amp;sr=8-1'&gt;The Reasoned Schemer&lt;/a&gt; is essential, and the &amp;#8216;logical Scheme&amp;#8217; they use is an interesting counterpoint to Prolog.&lt;/p&gt;

&lt;p&gt;I firmly believe you should base your language choice on the problem you&amp;#8217;re trying to solve, and you shouldn&amp;#8217;t contort your problem to fit the language (this is why Lisp is so much fun). I don&amp;#8217;t run into too many problems where Prolog is the answer, but when I always greatly look forward to when I do ^_^&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Prolog links:&lt;/p&gt;

&lt;p&gt;* &lt;a href='http://www.swi-prolog.org/'&gt;SWI-Prolog&lt;/a&gt;, a free and pretty nice implementation.&lt;/p&gt;

&lt;p&gt;* &lt;a href='http://www.gprolog.org/'&gt;GNU Prolog&lt;/a&gt;, a little harder to get started with, but worth looking into.&lt;/p&gt;

&lt;p&gt;* &lt;a href='https://prof.ti.bfh.ch/hew1/informatik3/prolog/p-99/'&gt;99 Prolog Problems.&lt;/a&gt; These have &lt;a href='http://www.haskell.org/haskellwiki/H-99:_Ninety-Nine_Haskell_Problems'&gt;since&lt;/a&gt; &lt;a href='http://aperiodic.net/phil/scala/s-99/'&gt;been&lt;/a&gt; &lt;a href='http://www.ic.unicamp.br/%7Emeidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html'&gt;copied&lt;/a&gt; many times over, but the first &amp;#8216;99 Problems&amp;#8217; set of this sort was by Prologgers.&lt;/p&gt;

&lt;p&gt;* &lt;a href='http://www.cs.kuleuven.be/%7Edtai/ppcbook/'&gt;The First 10 Prolog Programming Contests.&lt;/a&gt; A good read for idiomatic language use, and seeing it solve all levels of problems.&lt;/p&gt;

&lt;p&gt;* = If, given the definitions, you then passed determine_hand(X,Y), where x was a royal flush, y would be bound to &amp;#8220;flush.&amp;#8221; why? because the first predicate we defined was successful (a royal flush is just a more specialized flush, and prolog saw that determine_hand was true for the flush first). how do we get around this? you can either by ordering your clauses appropriately, or explicitly stating that one clause can only be true when the others are false.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;the code:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='prolog'&gt;&lt;span class='c1'&gt;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;/span&gt;
&lt;span class='c1'&gt;%% Top Level&lt;/span&gt;

&lt;span class='nf'&gt;main&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Num_Wins&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nf'&gt;open&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;hands&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;read&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Fb&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;read&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Fb&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;ListOfHands&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;play&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;ListOfHands&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Num_Wins&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='nf'&gt;play&lt;/span&gt;&lt;span class='p'&gt;([],&lt;/span&gt;&lt;span class='m'&gt;0&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;play&lt;/span&gt;&lt;span class='p'&gt;([[&lt;/span&gt;&lt;span class='nv'&gt;Hand1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;Hand2&lt;/span&gt;&lt;span class='p'&gt;]|&lt;/span&gt;&lt;span class='nv'&gt;Rst&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='nv'&gt;Num_Wins&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nf'&gt;winner&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Hand1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Hand2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Winner&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;Hand1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nf'&gt;play&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Rst&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;Remaining&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt; &lt;span class='nv'&gt;Num_Wins&lt;/span&gt; &lt;span class='o'&gt;is&lt;/span&gt; &lt;span class='m'&gt;1&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='nv'&gt;Remaining&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt;
   &lt;span class='nf'&gt;play&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Rst&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Num_Wins&lt;/span&gt;&lt;span class='p'&gt;)).&lt;/span&gt;


&lt;span class='c1'&gt;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;/span&gt;
&lt;span class='c1'&gt;%% Playing the game.&lt;/span&gt;
&lt;span class='nf'&gt;winner&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nf'&gt;sort_hand&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Sorted_Hand1&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;sort_hand&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Sorted_Hand2&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Sorted_Hand1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;X1&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Sorted_Hand2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;X2&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;beats&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;X2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Verdict&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Verdict&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;X1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
   &lt;span class='nv'&gt;Verdict&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;X2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
   &lt;span class='nv'&gt;Verdict&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s-Atom'&gt;tie&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nf'&gt;tiebreak&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Sorted_Hand1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Sorted_Hand2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;SortedWinner&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
   &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;SortedWinner&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s-Atom'&gt;left&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;H1&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt;
    &lt;span class='nv'&gt;SortedWinner&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s-Atom'&gt;right&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;)).&lt;/span&gt;


&lt;span class='c1'&gt;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;/span&gt;
&lt;span class='c1'&gt;%% Tiebreaks&lt;/span&gt;
&lt;span class='nf'&gt;tiebreak&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;straight_flush&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt; &lt;span class='nf'&gt;higher_last_card&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;tiebreak&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;four_of_a_kind&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt; &lt;span class='nf'&gt;higher_middle_card&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;tiebreak&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;full_house&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt; &lt;span class='nf'&gt;higher_middle_card&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;tiebreak&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;flush&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt; &lt;span class='nf'&gt;tiebreak&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;high_card&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;tiebreak&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;straight&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt; &lt;span class='nf'&gt;higher_last_card&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;tiebreak&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;three_of_a_kind&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt; &lt;span class='nf'&gt;higher_middle_card&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='nf'&gt;tiebreak&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;two_pair&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='o'&gt;is&lt;/span&gt;&lt;span class='nf'&gt;olate_pairs&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nv'&gt;HighCard1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nv'&gt;LowCard1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='nv'&gt;Last1&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='o'&gt;is&lt;/span&gt;&lt;span class='nf'&gt;olate_pairs&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nv'&gt;HighCard2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nv'&gt;LowCard2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='nv'&gt;Last2&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nf'&gt;beats_with_hand&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;HighCard1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;HighCard2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
   &lt;span class='nv'&gt;Winner&lt;/span&gt; &lt;span class='s-Atom'&gt;\=&lt;/span&gt; &lt;span class='s-Atom'&gt;tie&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
   &lt;span class='nf'&gt;beats_with_hand&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;LowCard1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;LowCard2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
   &lt;span class='nv'&gt;Winner&lt;/span&gt; &lt;span class='s-Atom'&gt;\=&lt;/span&gt; &lt;span class='s-Atom'&gt;tie&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
   &lt;span class='nf'&gt;beats_with_hand&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Last1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Last2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;)).&lt;/span&gt;
     
&lt;span class='nf'&gt;tiebreak&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;pair&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='o'&gt;is&lt;/span&gt;&lt;span class='nf'&gt;olate_pair&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nv'&gt;PairCard1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='nv'&gt;Rst1&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='o'&gt;is&lt;/span&gt;&lt;span class='nf'&gt;olate_pair&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nv'&gt;PairCard2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='nv'&gt;Rst2&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nf'&gt;beats_with_hand&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;PairCard1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;PairCard2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt; &lt;span class='s-Atom'&gt;\=&lt;/span&gt; &lt;span class='s-Atom'&gt;tie&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt;
   &lt;span class='nf'&gt;tiebreak&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;high_card&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Rst1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Rst2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;)).&lt;/span&gt;

&lt;span class='nf'&gt;tiebreak&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;high_card&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nf'&gt;reverse&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;RevH1&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;reverse&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;RevH2&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;highest_card_chain&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;RevH1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;RevH2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;




&lt;span class='nf'&gt;beats_with_hand&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;C1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;C2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nf'&gt;beats&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;C1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;C2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;C1&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt; &lt;span class='nv'&gt;X&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s-Atom'&gt;left&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt;
  &lt;span class='nf'&gt;beats&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;C1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;C2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;C2&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt; &lt;span class='nv'&gt;X&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s-Atom'&gt;right&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt;
  &lt;span class='nv'&gt;X&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s-Atom'&gt;tie&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;

&lt;span class='c1'&gt;% Really ugly. How to better do this?&lt;/span&gt;
&lt;span class='o'&gt;is&lt;/span&gt;&lt;span class='nf'&gt;olate_pairs&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Hand&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;High_Pair&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Low_Pair&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Last&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S1&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S2&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S3&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V4&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S4&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S5&lt;/span&gt;&lt;span class='p'&gt;]]&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;Hand&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;
  &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;V5&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;V4&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;High_Pair&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='nv'&gt;V4&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S4&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S5&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt;
    &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;V3&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Low_Pair&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='nv'&gt;V3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S3&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S2&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='nv'&gt;Last&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S1&lt;/span&gt;&lt;span class='p'&gt;]&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt;
     &lt;span class='nv'&gt;V1&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Low_Pair&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S1&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S2&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='nv'&gt;Last&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nv'&gt;V3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S3&lt;/span&gt;&lt;span class='p'&gt;]))&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt;
  &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Low_Pair&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S1&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S2&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt;
   &lt;span class='nv'&gt;High_Pair&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='nv'&gt;V3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S3&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V4&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S4&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt;
   &lt;span class='nv'&gt;Last&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nv'&gt;V5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S5&lt;/span&gt;&lt;span class='p'&gt;]).&lt;/span&gt;

&lt;span class='o'&gt;is&lt;/span&gt;&lt;span class='nf'&gt;olate_pair&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Hand&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Pair&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Rst&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S1&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S2&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S3&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V4&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S4&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S5&lt;/span&gt;&lt;span class='p'&gt;]]&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;Hand&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;
  &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Pair&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S1&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S2&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='nv'&gt;Rst&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='nv'&gt;V3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S3&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V4&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S4&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S5&lt;/span&gt;&lt;span class='p'&gt;]]&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt;
   &lt;span class='nv'&gt;V2&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;V3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Pair&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='nv'&gt;V3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S3&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S2&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='nv'&gt;Rst&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S1&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V4&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S4&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S5&lt;/span&gt;&lt;span class='p'&gt;]]&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt;
   &lt;span class='nv'&gt;V4&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;V3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Pair&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='nv'&gt;V3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S3&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V4&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S4&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='nv'&gt;Rst&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S1&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S2&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S5&lt;/span&gt;&lt;span class='p'&gt;]]&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt;
   &lt;span class='nv'&gt;V4&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;V5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Pair&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='nv'&gt;V5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S5&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V4&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S4&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='nv'&gt;Rst&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[[&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S1&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S2&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S3&lt;/span&gt;&lt;span class='p'&gt;]]).&lt;/span&gt;
  

&lt;span class='nf'&gt;highest_card_chain&lt;/span&gt;&lt;span class='p'&gt;([&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;|&lt;/span&gt;&lt;span class='nv'&gt;T1&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;|&lt;/span&gt;&lt;span class='nv'&gt;T2&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nf'&gt;beats&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;Verdict&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Verdict&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;X&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s-Atom'&gt;left&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt;
   &lt;span class='nv'&gt;Verdict&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;X&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s-Atom'&gt;right&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt;
   &lt;span class='nv'&gt;Verdict&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s-Atom'&gt;tie&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nf'&gt;highest_card_chain&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;T1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;T2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;)).&lt;/span&gt;

&lt;span class='nf'&gt;higher_last_card&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nv'&gt;H1&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,[&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt;
  &lt;span class='nv'&gt;H2&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,[&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt;
  &lt;span class='nf'&gt;beats&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;Higher&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Higher&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s-Atom'&gt;left&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt;
   &lt;span class='nv'&gt;Higher&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s-Atom'&gt;right&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='nf'&gt;higher_middle_card&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;H2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nv'&gt;H1&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,[&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
  &lt;span class='nv'&gt;H2&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,[&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;
  &lt;span class='nf'&gt;beats&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;Higher&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Higher&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s-Atom'&gt;left&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
   &lt;span class='nv'&gt;Higher&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Winner&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s-Atom'&gt;right&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;



&lt;span class='c1'&gt;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;/span&gt;
&lt;span class='c1'&gt;%% Hand determination&lt;/span&gt;
&lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;([[&lt;/span&gt;&lt;span class='m'&gt;10&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='s-Atom'&gt;jack&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='s-Atom'&gt;queen&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='s-Atom'&gt;king&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='s-Atom'&gt;ace&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='s-Atom'&gt;royal_flush&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;([[&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;C&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;D&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;E&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='s-Atom'&gt;straight_flush&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;E&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;D&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;D&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;C&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;C&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;([[&lt;/span&gt;&lt;span class='nv'&gt;C&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='s-Atom'&gt;four_of_a_kind&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nv'&gt;C&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;A&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt; &lt;span class='nv'&gt;B&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;

&lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;([[&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;C&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;D&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;E&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='s-Atom'&gt;full_house&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nv'&gt;A&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;D&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;E&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;C&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;D&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt; &lt;span class='nv'&gt;C&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;([[&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='s-Atom'&gt;flush&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;([[&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;C&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;D&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;E&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='s-Atom'&gt;straight&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;E&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;D&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;D&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;C&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;C&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;([[&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;C&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;D&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;E&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='s-Atom'&gt;three_of_a_kind&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;B&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;C&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;C&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;C&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;D&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;C&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;D&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;D&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;E&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;([[&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='s-Atom'&gt;two_pair&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;([[&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='s-Atom'&gt;two_pair&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;([[&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='s-Atom'&gt;two_pair&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;([[&lt;/span&gt;&lt;span class='nv'&gt;A&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;C&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;D&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;E&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;]],&lt;/span&gt; &lt;span class='s-Atom'&gt;pair&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nv'&gt;A&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;B&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt; &lt;span class='nv'&gt;B&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;C&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt; &lt;span class='nv'&gt;C&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;D&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt; &lt;span class='nv'&gt;D&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;E&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;

&lt;span class='nf'&gt;determine_hand&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s-Atom'&gt;high_card&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='c1'&gt;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;/span&gt;
&lt;span class='c1'&gt;%% Hand sorting (for easier pattern matching).&lt;/span&gt;
&lt;span class='nf'&gt;sort_hand&lt;/span&gt;&lt;span class='p'&gt;([],&lt;/span&gt; &lt;span class='p'&gt;[]).&lt;/span&gt;
&lt;span class='nf'&gt;sort_hand&lt;/span&gt;&lt;span class='p'&gt;([&lt;/span&gt;&lt;span class='nv'&gt;H&lt;/span&gt;&lt;span class='p'&gt;|&lt;/span&gt;&lt;span class='nv'&gt;T&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='nv'&gt;Sorted&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nf'&gt;filter_by_high_card&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;H&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;T&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;Lower&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;Higher&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;sort_hand&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Lower&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;SortedLower&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;sort_hand&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Higher&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;SortedHigher&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;append&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;SortedLower&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nv'&gt;H&lt;/span&gt;&lt;span class='p'&gt;|&lt;/span&gt;&lt;span class='nv'&gt;SortedHigher&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='nv'&gt;Sorted&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;


&lt;span class='nf'&gt;filter_by_high_card&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='p'&gt;[],&lt;/span&gt; &lt;span class='p'&gt;[],&lt;/span&gt; &lt;span class='p'&gt;[]).&lt;/span&gt;
&lt;span class='nf'&gt;filter_by_high_card&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Pivot&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nv'&gt;H&lt;/span&gt;&lt;span class='p'&gt;|&lt;/span&gt;&lt;span class='nv'&gt;T&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nv'&gt;H&lt;/span&gt;&lt;span class='p'&gt;|&lt;/span&gt;&lt;span class='nv'&gt;Lower&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='nv'&gt;Higher&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nf'&gt;beats&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Pivot&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;H&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;Z&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Z&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;Pivot&lt;/span&gt; &lt;span class='p'&gt;;&lt;/span&gt; &lt;span class='nv'&gt;Z&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s-Atom'&gt;tie&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;filter_by_high_card&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Pivot&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;T&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Lower&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Higher&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;filter_by_high_card&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Pivot&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nv'&gt;H&lt;/span&gt;&lt;span class='p'&gt;|&lt;/span&gt;&lt;span class='nv'&gt;T&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt; &lt;span class='nv'&gt;Lower&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='nv'&gt;H&lt;/span&gt;&lt;span class='p'&gt;|&lt;/span&gt;&lt;span class='nv'&gt;Higher&lt;/span&gt;&lt;span class='p'&gt;])&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nf'&gt;beats&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Pivot&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;H&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;H&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='nf'&gt;filter_by_high_card&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Pivot&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;T&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Lower&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;Higher&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;


&lt;span class='c1'&gt;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;/span&gt;
&lt;span class='c1'&gt;%% Card and Hand Precedence&lt;/span&gt;
&lt;span class='nf'&gt;beats&lt;/span&gt;&lt;span class='p'&gt;([&lt;/span&gt;&lt;span class='nv'&gt;V&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],&lt;/span&gt;&lt;span class='s-Atom'&gt;tie&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;beats&lt;/span&gt;&lt;span class='p'&gt;([&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S&lt;/span&gt;&lt;span class='p'&gt;])&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt; &lt;span class='nf'&gt;value_greater_than&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;beats&lt;/span&gt;&lt;span class='p'&gt;([&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='k'&gt;_&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S&lt;/span&gt;&lt;span class='p'&gt;],[&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;S&lt;/span&gt;&lt;span class='p'&gt;])&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt; &lt;span class='nf'&gt;value_greater_than&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;V2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;V1&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='nf'&gt;beats&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s-Atom'&gt;tie&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;beats&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;Y&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt; &lt;span class='nf'&gt;value_greater_than&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;Y&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;beats&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;Y&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;Y&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt; &lt;span class='nf'&gt;value_greater_than&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Y&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;royal_flush&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;straight_flush&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;straigh_flush&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;four_of_a_kind&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;four_of_a_kind&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;full_house&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;full_house&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;flush&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;flush&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;straight&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;straight&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;three_of_a_kind&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;three_of_a_kind&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;two_pair&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;two_pair&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;pair&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;pair&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s-Atom'&gt;high_card&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;ace&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s-Atom'&gt;king&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;king&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s-Atom'&gt;queen&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;queen&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s-Atom'&gt;jack&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s-Atom'&gt;jack&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='m'&gt;10&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='m'&gt;10&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='m'&gt;9&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='m'&gt;9&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='m'&gt;8&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='m'&gt;8&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='m'&gt;7&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='m'&gt;7&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='m'&gt;6&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='m'&gt;6&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='m'&gt;5&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;
&lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='m'&gt;5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='m'&gt;4&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='m'&gt;4&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='m'&gt;3&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt; &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='m'&gt;3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='m'&gt;2&lt;/span&gt;&lt;span class='p'&gt;).&lt;/span&gt;

&lt;span class='nf'&gt;value_greater_than&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;Y&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;:-&lt;/span&gt;
  &lt;span class='nf'&gt;successor&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;X&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;P&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
  &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;Y&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;P&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
  &lt;span class='nf'&gt;value_greater_than&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;P&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='nv'&gt;Y&lt;/span&gt;&lt;span class='p'&gt;)).&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Reading List</title>
      <link>http://www.morepaul.com/2009/11/reading-list.html</link>
      <pubDate>Sat, 14 Nov 2009 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Almost as contentious (maybe more) than asking a programmer what their favorite editor/language is would be to ask them what the most important books are for a budding programmer to read. Every smart programmer I know has a small list of books that are &lt;em&gt;essential&lt;/em&gt; (they claim) to know anything important about programming, software, etc.&lt;/p&gt;

&lt;p&gt;Taking the union of all such books would yield a stack taller than you are. I&amp;#8217;m doing my best to ferociously play catch-up.&lt;/p&gt;

&lt;p&gt;I tend to read books 2 or 3 at a time: one is usually about a specific technology, one higher-level about programming/coding as a whole, and one usually more for fun (if I&amp;#8217;m lucky, I get to read fiction! That normally happens most in the summer).&lt;/p&gt;

&lt;p&gt;Because broadcasting life is more fun than living it, here&amp;#8217;s what I&amp;#8217;ve been reading, and what&amp;#8217;s next in queue.&lt;/p&gt;

&lt;p&gt;Read last year or so&amp;#8230;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.ccs.neu.edu/home/matthias/BTLS'&gt;The Little Schemer&lt;/a&gt;, by Friedman and Felleison&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.ccs.neu.edu/home/matthias/BTSS/'&gt;The Seasoned Schemer&lt;/a&gt;, by Friedman and Felleison&lt;/li&gt;

&lt;li&gt;&lt;a href='http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&amp;amp;tid=10663%20'&gt;The Reasoned Schemer&lt;/a&gt;, by Friedman, Byrd, and Kiselyov&lt;/li&gt;

&lt;li&gt;&lt;a href='http://mitpress.mit.edu/sicp/full-text/book/book.html'&gt;Structure and Interpretation of Computer Programs&lt;/a&gt;, by Abelson, Sussman, and Sussman.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are what I&amp;#8217;ve read since starting school, Fall 2009.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.pragprog.com/the-pragmatic-programmer'&gt;The Pragmatic Programmer&lt;/a&gt;, by Dave Thomas and Andy Hunt (Finished October, 2009)&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.ccs.neu.edu/home/matthias/BTML/'&gt;The Little MLer&lt;/a&gt;, by Felleison and Friedman (Finished November 13, 2009)&lt;/li&gt;

&lt;li&gt;&lt;a href='http://en.wikipedia.org/wiki/The_Mythical_Man-Month'&gt;The Mythical Man-Month&lt;/a&gt;, by Fred Brooks (Finished November 13, 2009)&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.codersatwork.com/'&gt;Coders at Work&lt;/a&gt;, by Peter Seibel.&lt;/li&gt;

&lt;li&gt;&lt;a href='http://cm.bell-labs.com/cm/cs/cbook/%20'&gt;The C Programming Language&lt;/a&gt;, by Kernighan and Ritchie&lt;/li&gt;

&lt;li&gt;&lt;a href='http://okasaki.blogspot.com/2008/02/ten-years-of-purely-functional-data.html'&gt;Purely Functional Data Structures&lt;/a&gt;, by Chris Okasaki&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have any suggestions, let me know!&lt;/p&gt;

&lt;p&gt;The list of books in my room that I haven&amp;#8217;t started yet (or aren&amp;#8217;t actively finishing up) is far larger, and I&amp;#8217;ll get to those next. Wish me luck!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>New Blog</title>
      <link>http://www.morepaul.com/2009/11/new-blog.html</link>
      <pubDate>Wed, 11 Nov 2009 00:00:00 PST</pubDate>
      <author>Paul Meier</author>
      <description>&lt;p&gt;Hi all,&lt;/p&gt;

&lt;p&gt;In a financial confusion (new cards invalidate old ones, internet companies), the former host of morepaul.com dropped me and my site after a single, spam-collected e-mail.&lt;/p&gt;

&lt;p&gt;Thanks to Google Cache, I was able to recover most of my posts (though little of the uploaded content), and have switched to Blogger for now.&lt;/p&gt;

&lt;p&gt;In many ways, the change is very good: like when I moved from LiveJournal to More Paul, I think it&amp;#8217;s time for a change in tone. In this iteration, I hope to include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Thoughts on Code: You wouldn&amp;#8217;t know it from my previous blog, but I think about code &lt;strong&gt;a lot&lt;/strong&gt;. I&amp;#8217;ll hopefully include code snippets of puzzles I&amp;#8217;m solving, projects I&amp;#8217;m working on, etc.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Thoughts on books, especially relating to code: Like any good programmer, I&amp;#8217;m always reading. I hope to keep a list as to what&amp;#8217;s working for me and what isn&amp;#8217;t.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This hopefully won&amp;#8217;t come at the expense of my previous tone, which was &amp;#8220;here&amp;#8217;s what I&amp;#8217;m doing with my life right now.&amp;#8221; But like the author of &lt;a href='http://www.alistapart.com/articles/writeliving/'&gt;this great A List Apart essay&lt;/a&gt;, no technical detail, no matter how arcane, will be as uninteresting as my previous blog if I care about it enough.&lt;/p&gt;

&lt;p&gt;Besides: it&amp;#8217;s a blog. It&amp;#8217;s an invitation for vanity. So if I tell you how to manually curry functions in Scheme with macros, I will, dammit!&lt;/p&gt;

&lt;p&gt;More later, let this just be a stopgap. In the meantime, welcome!&lt;/p&gt;

&lt;p&gt;(for those who were wondering about the title , it&amp;#8217;s a reference to &lt;a href='http://www.ccs.neu.edu/home/matthias/BTLS/'&gt;The Little Schemer&lt;/a&gt;, a most wonderful book for anyone (of any level) to learn to think about problems recursively. Near the end you explore some pretty hip theoretical topics, but you wouldn&amp;#8217;t know it if I hadn&amp;#8217;t told you ^_^&lt;/p&gt;

&lt;p&gt;[&lt;strong&gt;EDIT: This post used to be hosted on &lt;a href='http://littleschemer.blogspot.com'&gt;http://littleschemer.blogspot.com&lt;/a&gt;&lt;/strong&gt;]).&lt;/p&gt;</description>
    </item>
    

  </channel>
</rss>



