<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Laughing Meme &#187; programming</title>
	<atom:link href="http://laughingmeme.org/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://laughingmeme.org</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Mon, 02 Apr 2012 20:12:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Code Kata: oldie, but goodie.</title>
		<link>http://laughingmeme.org/2010/04/25/code-kata-oldie-but-goodie/</link>
		<comments>http://laughingmeme.org/2010/04/25/code-kata-oldie-but-goodie/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 20:58:43 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Aside]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://laughingmeme.org/?p=4573</guid>
		<description><![CDATA[Back in 2007 the Pragmatic Programmers posted a series of code kata in the style of Are you one of the 10%. Probably worth re-visiting if you&#8217;ve never done them.]]></description>
			<content:encoded><![CDATA[<p>Back in 2007 the Pragmatic Programmers posted a series of code kata in the style of <a href="http://reprog.wordpress.com/2010/04/19/are-you-one-of-the-10-percent/">Are you one of the 10%</a>.  Probably worth re-visiting if you&#8217;ve never done them.</p>
<p><a href='http://codekata.pragprog.com/'>http://codekata.pragprog.com/</a></p>]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2010/04/25/code-kata-oldie-but-goodie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wikimedia has a users RPE of 30mil</title>
		<link>http://laughingmeme.org/2010/02/16/wikimedia-claims-a-users-rpe-of-30mil/</link>
		<comments>http://laughingmeme.org/2010/02/16/wikimedia-claims-a-users-rpe-of-30mil/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 00:43:49 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Aside]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rpe]]></category>
		<category><![CDATA[scale]]></category>

		<guid isPermaLink="false">http://laughingmeme.org/?p=4518</guid>
		<description><![CDATA[&#8220;Wikimedia Foundation currently employs 14 technical people (not all of whom are developers). At 400 million readers/month (as of February 2010), that&#8217;s about 1 developer per 30 million users. Accounting for open source developers probably doesn&#8217;t change that ratio by an order of magnitude.&#8221; (not exactly apples to apples, but still interesting)]]></description>
			<content:encoded><![CDATA[<p>&#8220;Wikimedia Foundation currently employs 14 technical people (not all of whom are developers). At 400 million readers/month (as of February 2010), that&#8217;s about 1 developer per 30 million users. Accounting for open source developers probably doesn&#8217;t change that ratio by an order of magnitude.&#8221; (not exactly apples to apples, but still interesting)</p> 
<p><a href='http://strategy.wikimedia.org/wiki/Technology/en#Analysis'>http://strategy.wikimedia.org/wiki/Technology/en#Analysis</a></p>]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2010/02/16/wikimedia-claims-a-users-rpe-of-30mil/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Why I love everything you hate about Java «  Magic Scaling Sprinkles</title>
		<link>http://laughingmeme.org/2010/02/09/why-i-love-everything-you-hate-about-java-%c2%ab-magic-scaling-sprinkles/</link>
		<comments>http://laughingmeme.org/2010/02/09/why-i-love-everything-you-hate-about-java-%c2%ab-magic-scaling-sprinkles/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 00:39:28 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Aside]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[scaling]]></category>

		<guid isPermaLink="false">http://laughingmeme.org/?p=4482</guid>
		<description><![CDATA[NK: &#8220;All that boilerplate is really important when you work at massive scale and where efficiency really matters.&#8221; More meditations on the coding for scale question and the role of cleverness and abstractions. That said I think the factories actually hide the hard learning that&#8217;s gone into those pool size choices.]]></description>
			<content:encoded><![CDATA[<p>NK: <em>&#8220;All that boilerplate is really important when you work at massive scale and where efficiency really matters.&#8221;</em> More meditations on the coding for scale question and the role of cleverness and abstractions.  That said I think the factories actually hide the hard learning that&#8217;s gone into those pool size choices.</p>
<p><a href='http://magicscalingsprinkles.wordpress.com/2010/02/08/why-i-love-everything-you-hate-about-java/'>http://magicscalingsprinkles.wordpress.com/2010/02/08/why-i-love-everything-you-hate-about-java/</a></p>]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2010/02/09/why-i-love-everything-you-hate-about-java-%c2%ab-magic-scaling-sprinkles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Try Coding Dear Boy</title>
		<link>http://laughingmeme.org/2009/09/29/try-coding-dear-boy/</link>
		<comments>http://laughingmeme.org/2009/09/29/try-coding-dear-boy/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 16:57:21 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[culture]]></category>
		<category><![CDATA[just ship]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://laughingmeme.org/?p=4289</guid>
		<description><![CDATA[Several times a week I get an emails like, &#8220;Can you explain how Flickr does XYZ? I&#8217;m hoping there is a nice packaged solution for this.&#8221; XYZ can be anything from &#8220;draw tag maps&#8221;, to &#8220;click in place editing&#8221;, to &#8220;scale MySQL&#8221;. And I&#8217;m always a little baffled as to what to respond. Until I [...]]]></description>
			<content:encoded><![CDATA[<p>Several times a week I get an emails like, <em>&#8220;Can you explain how Flickr does XYZ?  I&#8217;m hoping there is a nice packaged solution for this.&#8221;</em></p>

<p>XYZ can be anything from &#8220;draw tag maps&#8221;, to &#8220;click in place editing&#8221;, to &#8220;scale MySQL&#8221;.</p>

<p>And I&#8217;m always a little baffled as to what to respond. </p>

<p>Until I realized what was going on.  </p>

<h3>Laziness Impatience Hubris</h3>

<p>This is the dark side of the geek virtue of laziness.  </p>

<p>The belief that if one just thinks hard enough, or cleverly enough, that problems will have an &#8220;elegant solution&#8221;.  And by &#8220;elegant&#8221; we mean a solution that doesn&#8217;t involve much code. (elegant, such a tricky word, it can also mean writing <strong>tons</strong> of code for problems that will likely never manifest)  And by &#8220;think hard and clever&#8221;, a good short cut is probably just be to ask someone.</p>

<p>So I&#8217;ve come up with a response that looks something like:
<blockquote>&#8220;We generally try do the dumbest thing that will work first.  And that&#8217;s usually as far as we get. Almost everything we do is pretty straightforward, and as such is well documented around the Web, sometimes by us, generally by others.  And when we do get fiendishly clever, as we do now and again, it&#8217;s usually a highly tuned (read idiosyncratic) solution for the problems we&#8217;re trying to solve.&#8221;</blockquote></p>

<h3>Method Acting</h3>

<p>But what I want to say, in the spirit of the great <a href="http://en.wikipedia.org/wiki/Laurence_Olivier">Laurence Olivier</a> on giving advice to Dustin Hoffman, <em>&#8220;My dear boy, why don&#8217;t you <strong>try coding</strong>?&#8221;.</em></p>

<h3>Duct Tape</h3>

<p>Which is not to say I mind getting these questions, I love talking about this stuff, it&#8217;s why I do it.  And it&#8217;s often amusing to give the, &#8220;This is how we do it at Flickr, no really&#8221; talk. </p>

<p>But at the end of the day its 0.1% compsci, 0.9% clever ideas, and 99% <a href="http://www.joelonsoftware.com/items/2009/09/23.html">duct tape</a>. (btw Joel&#8217;s <a href="http://www.joelonsoftware.com/items/2009/09/23.html">The Duct Tape Programmer</a> is a meditation in similar vein)</p>
]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2009/09/29/try-coding-dear-boy/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>A Couple of Caveats on Queuing</title>
		<link>http://laughingmeme.org/2008/07/07/a-couple-of-caveats-on-queuing/</link>
		<comments>http://laughingmeme.org/2008/07/07/a-couple-of-caveats-on-queuing/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 18:02:49 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[messaging]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[queue]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://laughingmeme.org/?p=3913</guid>
		<description><![CDATA[Les&#8217; &#8220;Delight Everyone&#8221; post is latest greatest addition to the 17th letter of the alphabet for savior conversation. And believe me I&#8217;m a huge fan, and am busy carving out a night sometime this week to play with the RabbitMQ/XMPP bridge (/waves hi Alexis). But &#8230;. there are a couple of caveats: 1) Some writes [...]]]></description>
			<content:encoded><![CDATA[<p>Les&#8217; <a href="http://decafbad.com/blog/2008/07/04/queue-everything-and-delight-everyone">&#8220;Delight Everyone&#8221;</a> post is latest greatest addition to the <a href="http://randomfoo.net/blog/id/4182">17th letter of the alphabet for savior</a> conversation.</p>

<p>And believe me I&#8217;m a huge fan, and am busy carving out a night sometime this week to play with the <a href="http://www.lshift.net/blog/2008/07/01/rabbitmq-xmpp-gateway-released">RabbitMQ/XMPP bridge</a> (/waves <a href="http://del.icio.us/alexisrichardson">hi Alexis</a>).</p>

<p><strong>But</strong> &#8230;. there are a couple of caveats:</p>

<h3>1) Some writes need to be real time.</h3>

<p>Les notes this as well, but I just wanted to emphasize because really, they do.  </p>

<p>If you can&#8217;t see your changes take effect in a system your understanding of cause and effect breaks down.  It doesn&#8217;t matter that your understanding is <em>wrong</em>, you still need one to function.  Ideally a physical analogy too.  There are no real world effects that get queued for later application.   Violate the principle of (falsely) seeming to respect real world cause and effect and your users will remain forever confused.</p>

<p>del.icio.us showing you the wrong state when you use the inline editing tool, and Flickr taking a handful of seconds to index a newly tagged photo are both good examples of subtly broken interfaces that can really throw people.</p>

<p>My data, now real time.  Everyone else can wait (how long depends on how social your users are).</p>

<h3>2) You&#8217;ve got to process that queue eventually.</h3>

<p>Ideally you can add processing boxes in parallel forever but if your dequeuing rate falls below your queuing rate you are, in technical terms, screwed.  </p>

<p>Think about it, if you&#8217;re falling behind 1 event per second, processing 1,000,000 events a second, but adding 1,000,001 for example, at the end of the day your 86,400 events in debt and counting.  It&#8217;s likes losing money on individual sales, but trying to make it up in volume.  </p>

<p>Good news: <a href="http://radar.oreilly.com/archives/2008/06/the-new-internet-traffic-spike.html">Traffic is spiky</a> and most sites see daily cycles with quiet times.  </p>

<p>Bad news: Many highly tuned systems exhibit slow down properties as their backlogs increase.  Like a credit card, processing debt can get exponentially unmanageable. </p>

<p>In practice this means that most of the time your queue consumers should be sitting around bored. (see Allspaw&#8217;s <a href="http://www.slideshare.net/jallspaw/velocity2008-capacity-management1-484676">Capacity Planning slides</a> for more on that theme.)</p>

<p>If you can&#8217;t guarantee those real time writes for thems that cares, and mostly bored queue consumers the rest of the time then your queues might not delight you after all.</p>

<p>See also: <a href="http://laughingmeme.org/2008/05/28/twitter-or-architecture-will-not-save-you/">Twitter, or Architecture Will Not Save You</a></p>
]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2008/07/07/a-couple-of-caveats-on-queuing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working Notes on Consistent Hashing</title>
		<link>http://laughingmeme.org/2008/03/19/working-notes-on-consistent-hashing/</link>
		<comments>http://laughingmeme.org/2008/03/19/working-notes-on-consistent-hashing/#comments</comments>
		<pubDate>Wed, 19 Mar 2008 16:51:53 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[hashing]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://laughingmeme.org/2008/03/19/working-notes-on-consistent-hashing/</guid>
		<description><![CDATA[Nice to see consistent hashing go from obscure to blindingly obvious in a few short whitepapers. Dynamo is certainly the sexiest discussion of distributed hash tables (DHTs), while Programmerâ€™s Toolbox Part 3: Consistent Hashing is the most straightforward. libketama is open and easy to use implementation of the 64-bit space mapped to a circle style [...]]]></description>
			<content:encoded><![CDATA[<p>Nice to see consistent hashing go from obscure to blindingly obvious in a few short whitepapers.  </p>

<p><a href="http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html">Dynamo</a> is certainly the sexiest discussion of distributed hash tables (DHTs), while <a href="http://www.spiteful.com/2008/03/17/programmers-toolbox-part-3-consistent-hashing/">Programmerâ€™s Toolbox Part 3: Consistent Hashing</a> is the most straightforward.  <a href="http://www.last.fm/user/RJ/journal/2007/04/10/392555/">libketama</a> is open and easy to use implementation of the 64-bit space mapped to a circle style consistent hash, discussed above and originally &#8220;popularized&#8221; by <a href="http://pdos.csail.mit.edu/chord/">Chord</a>. (and proposed <a href="http://citeseer.ist.psu.edu/karger97consistent.html">over a decade ago</a>)</p>

<p>And best quote:</p>

<blockquote>
  <p>&#8220;&#8230;and if anyone tells you that you shouldn&#8217;t use MD5 for this because it isn&#8217;t secure, just nod and back away slowly. You have identified someone not worth arguing with.&#8221;  </p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2008/03/19/working-notes-on-consistent-hashing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Do not treat Flickr photo ids as integers.</title>
		<link>http://laughingmeme.org/2008/01/03/do-not-treat-flickr-photo-ids-as-integers/</link>
		<comments>http://laughingmeme.org/2008/01/03/do-not-treat-flickr-photo-ids-as-integers/#comments</comments>
		<pubDate>Thu, 03 Jan 2008 18:54:01 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Aside]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://laughingmeme.org/2008/01/03/do-not-treat-flickr-photo-ids-as-integers/</guid>
		<description><![CDATA[Every now and then this bites us over here at Flickr as well.]]></description>
			<content:encoded><![CDATA[<p>Every now and then this bites us over here at Flickr as well.</p>
<p><a href='http://blog.driftr.com/post/20'>http://blog.driftr.com/post/20</a></p>]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2008/01/03/do-not-treat-flickr-photo-ids-as-integers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OAuth in PHP (for Twitter)</title>
		<link>http://laughingmeme.org/2007/10/16/oauth-in-php-for-twitter/</link>
		<comments>http://laughingmeme.org/2007/10/16/oauth-in-php-for-twitter/#comments</comments>
		<pubDate>Tue, 16 Oct 2007 07:15:10 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[oauth]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://laughingmeme.org/2007/10/16/oauth-in-php-for-twitter/</guid>
		<description><![CDATA[Mike released HTTP_Request_OAuth today, so I spent a little while this evening coding up Service_Twitter as helper class for making OAuth authorized requests against the Twitter API. Both are early enough in the dev cycle to be called proof of concepts. Mostly I wrote it because I had always envisioned there being wrapper libraries around [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mike.teczno.com/">Mike</a> released <a href="http://teczno.com/HTTP_Request_Oauth.phps"><code>HTTP_Request_OAuth</code></a> today, so I spent a little while this evening coding up <a href="http://laughingmeme.org/code/Service_Twitter.php.txt"><code>Service_Twitter</code></a> as helper class for making OAuth authorized requests against the Twitter API.</p>

<p>Both are early enough in the dev cycle to be called proof of concepts.</p>

<p>Mostly I wrote it because I had always envisioned there being wrapper libraries around the low level OAuth implementations that wrapped the calls, and constants, and as Mike graciously went out and wrote a low level library I felt compelled to write a wrapper.</p>

<p>Also <a href="http://laughingmeme.org/code/twittclient.php.txt">twittclient</a>, an interactive client for getting an authed access token, essential to bootstrapping development.</p>

<p>And nota bene, HRO currently only supports the MD5 signing algorithm, which is undefined in the core spec, and subject to change.  (Just in case you didn&#8217;t believe me about the early state of things.)</p>

<h3>update 2008/4/18</h3>

<p>This code no longer works because Twitter has taken down their (slightly non-compliant) OAuth endpoint.  When they add OAuth support back in, I&#8217;ll link to it.</p>
]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2007/10/16/oauth-in-php-for-twitter/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>r0ml.net: History teaches us &#8230;</title>
		<link>http://laughingmeme.org/2007/09/10/r0mlnet-history-teaches-us/</link>
		<comments>http://laughingmeme.org/2007/09/10/r0mlnet-history-teaches-us/#comments</comments>
		<pubDate>Mon, 10 Sep 2007 15:19:49 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Aside]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[history]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tier]]></category>

		<guid isPermaLink="false">http://laughingmeme.org/2007/09/10/r0mlnet-history-teaches-us/</guid>
		<description><![CDATA[r0ml explores the secret Catholic bias present in Java enterprise development. (in case the hair shirts weren&#8217;t a dead giveaway)]]></description>
			<content:encoded><![CDATA[<p>r0ml explores the secret Catholic bias present in Java enterprise development.  (in case the hair shirts weren&#8217;t a dead giveaway)</p>
<p><a href='http://r0ml.net/blog/2007/09/08/history-teaches-us'>http://r0ml.net/blog/2007/09/08/history-teaches-us</a></p>]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2007/09/10/r0mlnet-history-teaches-us/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;[the] Research Barrier, when an app is big enough that the developer sometimes has to do research to figure things out.&#8221;</title>
		<link>http://laughingmeme.org/2007/04/25/the-research-barrier-when-an-app-is-big-enough-that-the-developer-sometimes-has-to-do-research-to-figure-things-out/</link>
		<comments>http://laughingmeme.org/2007/04/25/the-research-barrier-when-an-app-is-big-enough-that-the-developer-sometimes-has-to-do-research-to-figure-things-out/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 00:33:20 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Aside]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://laughingmeme.org/2007/04/25/the-research-barrier-when-an-app-is-big-enough-that-the-developer-sometimes-has-to-do-research-to-figure-things-out/</guid>
		<description><![CDATA[I spend a huge amount of my day doing &#8220;research&#8221; &#8230; when I&#8217;m not doing &#8220;archeology&#8221;.]]></description>
			<content:encoded><![CDATA[<p>I spend a huge amount of my day doing &#8220;research&#8221; &#8230; when I&#8217;m not doing &#8220;archeology&#8221;. </p>
<p><a href='http://inessential.com/?comments=1&postid=3405'>http://inessential.com/?comments=1&postid=3405</a></p>]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2007/04/25/the-research-barrier-when-an-app-is-big-enough-that-the-developer-sometimes-has-to-do-research-to-figure-things-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Liminal Existence: MapReduce in 36 lines of Ruby</title>
		<link>http://laughingmeme.org/2007/04/03/liminal-existence-mapreduce-in-36-lines-of-ruby/</link>
		<comments>http://laughingmeme.org/2007/04/03/liminal-existence-mapreduce-in-36-lines-of-ruby/#comments</comments>
		<pubDate>Tue, 03 Apr 2007 23:27:13 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Aside]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[distributed]]></category>
		<category><![CDATA[drb]]></category>
		<category><![CDATA[functional]]></category>
		<category><![CDATA[mapreduce]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://laughingmeme.org/2007/04/03/liminal-existence-mapreduce-in-36-lines-of-ruby/</guid>
		<description><![CDATA[Amazing what you can do with a higher order functional language, and a couple of good libraries. Short step to (1..100).each { ec2.spin_up }.dmap { hard problem }.inject { take over the world }]]></description>
			<content:encoded><![CDATA[<p>Amazing what you can do with a higher order functional language, and a couple of good libraries.  Short step to <code>(1..100).each { ec2.spin_up }.dmap { hard problem }.inject { take over the world }</code></p>
<p><a href='http://romeda.org/blog/2007/04/mapreduce-in-36-lines-of-ruby.html'>http://romeda.org/blog/2007/04/mapreduce-in-36-lines-of-ruby.html</a></p>]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2007/04/03/liminal-existence-mapreduce-in-36-lines-of-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter from TextMate</title>
		<link>http://laughingmeme.org/2007/03/25/twitter-from-textmate/</link>
		<comments>http://laughingmeme.org/2007/03/25/twitter-from-textmate/#comments</comments>
		<pubDate>Sun, 25 Mar 2007 18:04:41 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Aside]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[collaboration]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[textmate]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://laughingmeme.org/2007/03/25/twitter-from-textmate/</guid>
		<description><![CDATA[Every since I heard about this, I&#8217;ve been thinking this could be adapated to be actually useful if instead of Twitter it posted to snippets site, like pastie or pastebin]]></description>
			<content:encoded><![CDATA[<p>Every since I heard about this, I&#8217;ve been thinking this could be adapated to be actually useful if instead of Twitter it posted to snippets site, like <a href="http://pastie.caboo.se/">pastie</a> or <a href="http://pastebin.com/">pastebin</a></p>
<p><a href='http://muffinresearch.co.uk/archives/2007/03/20/twitter-from-textmate/'>http://muffinresearch.co.uk/archives/2007/03/20/twitter-from-textmate/</a></p>]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2007/03/25/twitter-from-textmate/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Solving FizzBuzz in XSLT 1.0</title>
		<link>http://laughingmeme.org/2007/03/20/solving-fizzbuzz-in-xslt-10-devaolcom/</link>
		<comments>http://laughingmeme.org/2007/03/20/solving-fizzbuzz-in-xslt-10-devaolcom/#comments</comments>
		<pubDate>Tue, 20 Mar 2007 15:12:26 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Aside]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[fizzbuzz]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[xslt]]></category>

		<guid isPermaLink="false">http://laughingmeme.org/2007/03/20/solving-fizzbuzz-in-xslt-10-devaolcom/</guid>
		<description><![CDATA[Presented without comment &#8212; beyond a little smirking. (via)]]></description>
			<content:encoded><![CDATA[<p>Presented without comment &#8212; beyond a little smirking.  (<a href="http://whump.com">via</a>)</p>
<p><a href='http://dev.aol.com/blog/mdavidpeterson/2007/03/14/fizz-buzz-in-xslt-1.0'>http://dev.aol.com/blog/mdavidpeterson/2007/03/14/fizz-buzz-in-xslt-1.0</a></p>]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2007/03/20/solving-fizzbuzz-in-xslt-10-devaolcom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Avi&#8217;s &#8220;Web Heresies&#8221; was the session at OSCON with the most presenters in the audience.</title>
		<link>http://laughingmeme.org/2007/03/19/avis-web-heresies-was-the-session-at-oscon-with-the-most-presenters-in-the-audience/</link>
		<comments>http://laughingmeme.org/2007/03/19/avis-web-heresies-was-the-session-at-oscon-with-the-most-presenters-in-the-audience/#comments</comments>
		<pubDate>Mon, 19 Mar 2007 15:22:24 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Aside]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[avi bryant]]></category>
		<category><![CDATA[dabbledb]]></category>
		<category><![CDATA[etech]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[smalltalk]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://laughingmeme.org/2007/03/19/avis-web-heresies-was-the-session-at-oscon-with-the-most-presenters-in-the-audience/</guid>
		<description><![CDATA[And it rocked. OMG, yes it did. So sad I&#8217;m not arriving at Etech until Monday night and will miss Applied Web Heresies.]]></description>
			<content:encoded><![CDATA[<p>And it rocked.  OMG, yes it did.  So sad I&#8217;m not arriving at Etech until Monday night and will miss <a href="http://smallthought.com/avi/?p=20">Applied Web Heresies</a>.</p>
<p><a href='http://smallthought.com/avi/?p=20'>http://smallthought.com/avi/?p=20</a></p>]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2007/03/19/avis-web-heresies-was-the-session-at-oscon-with-the-most-presenters-in-the-audience/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>NBL</title>
		<link>http://laughingmeme.org/2007/02/13/nbl/</link>
		<comments>http://laughingmeme.org/2007/02/13/nbl/#comments</comments>
		<pubDate>Wed, 14 Feb 2007 05:03:57 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[quotable]]></category>

		<guid isPermaLink="false">http://laughingmeme.org/2007/02/13/nbl/</guid>
		<description><![CDATA[&#8220;I can&#8217;t tell you how many times I&#8217;ve heard people say they wouldn&#8217;t use Ruby because it lacks automated refactoring tools. Ruby doesn&#8217;t actually need them in the way Java does; it&#8217;s like refusing to switch to an electric car because there&#8217;s no place to put the gasoline.&#8221; &#8211; Steve Yegge on the NBL]]></description>
			<content:encoded><![CDATA[<blockquote>
  <p>&#8220;I can&#8217;t tell you how many times I&#8217;ve heard people say they wouldn&#8217;t use Ruby because it lacks automated refactoring tools. Ruby doesn&#8217;t actually need them in the way Java does; it&#8217;s like refusing to switch to an electric car because there&#8217;s no place to put the gasoline.&#8221; &#8211; <a href="http://steve-yegge.blogspot.com/2007/02/next-big-language.html">Steve Yegge on the NBL</a></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2007/02/13/nbl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Labnotes Â» method_missing: best saved for last</title>
		<link>http://laughingmeme.org/2007/02/07/labnotes-%c2%bb-method_missing-best-saved-for-last/</link>
		<comments>http://laughingmeme.org/2007/02/07/labnotes-%c2%bb-method_missing-best-saved-for-last/#comments</comments>
		<pubDate>Wed, 07 Feb 2007 17:43:28 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Aside]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[cautionary]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://laughingmeme.org/2007/02/07/labnotes-%c2%bb-method_missing-best-saved-for-last/</guid>
		<description><![CDATA[I take this as being a symptom of the Ruby design aesthetic, which as a community exhibit an inordinate fondness for conjuring tricks.]]></description>
			<content:encoded><![CDATA[<p>I take this as being a symptom of the Ruby design aesthetic, which as a community exhibit an inordinate fondness for conjuring tricks.</p>
<p><a href='http://blog.labnotes.org/2007/02/06/method_missing-best-saved-for-last/'>http://blog.labnotes.org/2007/02/06/method_missing-best-saved-for-last/</a></p>]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2007/02/07/labnotes-%c2%bb-method_missing-best-saved-for-last/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>subtlety : create feeds for SVN repositories</title>
		<link>http://laughingmeme.org/2007/01/22/subtlety-create-feeds-for-svn-repositories/</link>
		<comments>http://laughingmeme.org/2007/01/22/subtlety-create-feeds-for-svn-repositories/#comments</comments>
		<pubDate>Mon, 22 Jan 2007 16:22:55 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Aside]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[syndication]]></category>

		<guid isPermaLink="false">http://laughingmeme.org/2007/01/22/subtlety-create-feeds-for-svn-repositories/</guid>
		<description><![CDATA[Finally a Suversion replacement for my aging cvs2rss script. You don&#8217;t have to maintain the repository for it to work, and no more install Trac just to get a feed! (via)]]></description>
			<content:encoded><![CDATA[<p>Finally a Suversion replacement for my aging <a href="http://laughingmeme.org/cvs2rss">cvs2rss</a> script.   You don&#8217;t have to maintain the repository for it to work, and no more install Trac just to get a feed! (<a href="http://simonwillison.net/">via</a>)</p>
<p><a href='http://subtlety.errtheblog.com'>http://subtlety.errtheblog.com</a></p>]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2007/01/22/subtlety-create-feeds-for-svn-repositories/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Code: google-rfc-2445 recurrences</title>
		<link>http://laughingmeme.org/2006/10/25/google-code-google-rfc-2445-recurrences/</link>
		<comments>http://laughingmeme.org/2006/10/25/google-code-google-rfc-2445-recurrences/#comments</comments>
		<pubDate>Wed, 25 Oct 2006 16:33:00 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Aside]]></category>
		<category><![CDATA[calendaring]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[ical]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[recurrence]]></category>

		<guid isPermaLink="false">http://lm.quxx.info/?p=3506</guid>
		<description><![CDATA[Google Calendar&#8217;s implementation of RFC 2445 repeating events. Apache 2.0 license. Java.]]></description>
			<content:encoded><![CDATA[<p>Google Calendar&#8217;s implementation of RFC 2445 repeating events.  Apache 2.0 license.  Java.</p>
<p><a href='http://code.google.com/p/google-rfc-2445/'>http://code.google.com/p/google-rfc-2445/</a></p>]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2006/10/25/google-code-google-rfc-2445-recurrences/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Fishbowl: Comment Your Performance Hacks</title>
		<link>http://laughingmeme.org/2006/10/07/the-fishbowl-comment-your-performance-hacks/</link>
		<comments>http://laughingmeme.org/2006/10/07/the-fishbowl-comment-your-performance-hacks/#comments</comments>
		<pubDate>Sat, 07 Oct 2006 20:25:00 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Aside]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://lm.quxx.info/?p=3493</guid>
		<description><![CDATA[Or restated as comment your code that &#8220;makes it work&#8221; without changing functionality. Super solid advice. (I just went digging for the relevant classic JWZ rant on the Netscape FTP module, but I can&#8217;t find it)]]></description>
			<content:encoded><![CDATA[<p>Or restated as comment your code that &#8220;makes it work&#8221; without changing functionality.  Super solid advice. (I just went digging for the relevant classic JWZ rant on the Netscape FTP module, but I can&#8217;t find it)</p>
<p><a href='http://fishbowl.pastiche.org/2006/10/08/comment_your_performance_hacks'>http://fishbowl.pastiche.org/2006/10/08/comment_your_performance_hacks</a></p>]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2006/10/07/the-fishbowl-comment-your-performance-hacks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stevey&#8217;s Blog Rants: Good Agile, Bad Agile</title>
		<link>http://laughingmeme.org/2006/09/27/steveys-blog-rants-good-agile-bad-agile/</link>
		<comments>http://laughingmeme.org/2006/09/27/steveys-blog-rants-good-agile-bad-agile/#comments</comments>
		<pubDate>Wed, 27 Sep 2006 21:26:00 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Aside]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://lm.quxx.info/?p=3482</guid>
		<description><![CDATA[That has got to be the most effective piece of recruiting/evangelism I&#8217;ve ever read, bar none.]]></description>
			<content:encoded><![CDATA[<p>That has got to be the most effective piece of recruiting/evangelism I&#8217;ve ever read, bar none.</p>
<p><a href='http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile.html'>http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile.html</a></p>]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2006/09/27/steveys-blog-rants-good-agile-bad-agile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

