<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Gluttonous</title>
    <link>http://glu.ttono.us/</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description />
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Gluttonous" type="application/rss+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>Microsoft to Aquire Powerset</title>
      <description>&lt;p&gt;There&amp;#8217;s details &lt;a href="http://www.powerset.com/blog/"&gt;here&lt;/a&gt;. Sounds like they&amp;#8217;re keeping us intact, and there&amp;#8217;s something to be said about having an additional 10k machines behind you.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;ll see what happens.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Gluttonous/~4/vx5MrRWMLYU" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 02 Jul 2008 02:55:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:2cc749ba-a8bd-4c6f-b403-d0d7fa6ae883</guid>
      <author>kev</author>
      <link>http://feedproxy.google.com/~r/Gluttonous/~3/vx5MrRWMLYU/microsoft-to-aquire-powerset</link>
    <feedburner:origLink>http://glu.ttono.us/articles/2008/07/02/microsoft-to-aquire-powerset</feedburner:origLink></item>
    <item>
      <title>Holy God, Powerset Launches</title>
      <description>&lt;p&gt;&lt;a href="http://powerset.com"&gt;We&amp;#8217;re out&lt;/a&gt;, searching &lt;a href="http://wikipedia.org"&gt;Wikipedia&lt;/a&gt; and &lt;a href="http://freebase.com"&gt;FreeBase&lt;/a&gt;. Proud doesn&amp;#8217;t begin to describe my feelings about what&amp;#8217;s been created. I think it speaks for itself, and I&amp;#8217;ve been using it instead of Wikipedia for the last few months.&lt;/p&gt;

&lt;p&gt;Some people even seem to &lt;a href="http://searchengineland.com/080512-000100.php"&gt;really get it&lt;/a&gt;. And that&amp;#8217;s an amazing high.&lt;/p&gt;

&lt;p&gt;Huge thanks are not only due to the Powerset team (I love working with these people), but also to all of the open source projects we&amp;#8217;re making use of. &lt;a href="http://hadoop.apache.org/"&gt;Hadoop&lt;/a&gt;. &lt;a href="http://hadoop.apache.org/hbase/"&gt;HBase&lt;/a&gt;. &lt;a href="http://developers.facebook.com/thrift/"&gt;Thrift&lt;/a&gt;. &lt;a href="http://www.ruby-lang.org/en/"&gt;Ruby&lt;/a&gt;. &lt;a href="http://merbivore.com/"&gt;Merb&lt;/a&gt;. &lt;a href="http://www.rubyonrails.org/"&gt;Rails&lt;/a&gt;. &lt;a href="http://god.rubyforge.org"&gt;god&lt;/a&gt;. &lt;a href="http://mongrel.rubyforge.org/"&gt;Mongrel&lt;/a&gt;. &lt;a href="http://mootools.net/"&gt;Mootools&lt;/a&gt;. &lt;a href="http://www.rabbitmq.com/"&gt;RabbitMQ&lt;/a&gt;. The &lt;a href="http://code.google.com/p/activemessaging/"&gt;ActiveMessaging&lt;/a&gt; Project. &lt;a href="http://www.danga.com/memcached/"&gt;Memcache&lt;/a&gt; and &lt;a href="http://memcachedb.org/"&gt;MemcacheDB&lt;/a&gt;. &lt;a href="http://www.erlang.org/"&gt;Erlang&lt;/a&gt;. &lt;a href="http://github.com/KirinDave/fuzed/tree/master"&gt;Fuzed&lt;/a&gt;. &lt;a href="http://yaws.hyber.org/"&gt;YAWS&lt;/a&gt;. Countless others. All those people who take the time to answer our questions, and respond to our bugs, and consider our patches, and write interesting articles, and make our code better. You guys rock, and we couldn&amp;#8217;t do it without you. So much love is heading in your direction right now. Thank you, thank you, thank you.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m exausted, and going to bed. Good night, and good luck. And try the app. I&amp;#8217;m stoked.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Gluttonous/~4/oxabvLDq8dg" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 12 May 2008 02:21:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:b357572a-3e76-4e2b-9e1a-e847cbfed8b8</guid>
      <author>kev</author>
      <link>http://feedproxy.google.com/~r/Gluttonous/~3/oxabvLDq8dg/holy-god-powerset-launches</link>
    <feedburner:origLink>http://glu.ttono.us/articles/2008/05/12/holy-god-powerset-launches</feedburner:origLink></item>
    <item>
      <title>TechCrunch's Twitter Article Translated from Arrington-Speak</title>
      <description>&lt;p&gt;With apologies to &lt;a href="http://daringfireball.net/"&gt;Gruber&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Original text from &lt;a href="http://www.techcrunch.com/2008/04/23/amateur-hour-over-at-twitter/"&gt;TechCrunch&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;It doesn’t really matter if Twitter’s Chief Architect Blaine Cook was fired 
    or resigned. The important thing is that he’s gone now, and this gives 
    Twitter the opportunity to hire someone (or a team) who may actually be able 
    to scale the nearly two year old service and keep it live.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I haven&amp;#8217;t done any research or spoken to anyone about it, so don&amp;#8217;t ask, but I have found a scapegoat.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;Cook was directly responsible for scaling Twitter, and he very much failed 
    in his job. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Twitter is down sometimes, and I&amp;#8217;m angry about it.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;A year ago he spoke at the Silicon Valley Ruby Conference about scaling 
    Rails applications. His presentation suggested Twitter’s problems were 
    behind them, but in fact some of their biggest stumbles hadn’t occurred yet. 
    Note in particular slide 9 of that presentation, where Cook says about 
    scaling Rails apps like Twitter: “It’s Easy. Really.” &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I found a posted slide from a public conference during my &amp;#8220;investigative reporting phase. Oh, and Twitter is on Rails, and I can blame Rails. It&amp;#8217;s Easy. Really.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;Whether Twitter’s woes were all on Cook’s shoulders or not, he should not 
    have been boasting about solving the problem last year.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I&amp;#8217;m high as a kite.&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;Meanwhile, Twitter has made at least three key hires this year on the 
    technical side. Lee Mighdoll joined as VP Engineering and Operations in 
    January. And this week they hired two scaling experts - John Kalucki and 
    Steve Jenson (”known for his work scaling Blogger and Blogspot”).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And they hired someone, yada yada yada, sprinkle random facts in so nobody notices my complete incompetence. Perfect!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Gluttonous/~4/1a8wNEKaogI" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 23 Apr 2008 12:19:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:730aae2e-cbf5-40ec-8f41-c0f39ff47b2d</guid>
      <author>kev</author>
      <link>http://feedproxy.google.com/~r/Gluttonous/~3/1a8wNEKaogI/techcrunchs-twitter-article-translated-from-gossip-speak</link>
      <category>Op-Ed</category>
    <feedburner:origLink>http://glu.ttono.us/articles/2008/04/23/techcrunchs-twitter-article-translated-from-gossip-speak</feedburner:origLink></item>
    <item>
      <title>Really Simple Git Deployment with Vlad</title>
      <description>&lt;p&gt;Just drop this in your Rakefile. This is slightly modified from something I&amp;#8217;m using in production.&lt;/p&gt;

&lt;p&gt;Disect! Enjoy! Explanation (read: spoilers) after the jump.&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;##############################################################################&lt;/span&gt;
&lt;span class="comment"&gt;# Deploy&lt;/span&gt;
&lt;span class="comment"&gt;##############################################################################&lt;/span&gt;

&lt;span class="keyword"&gt;begin&lt;/span&gt;
  &lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;rake_remote_task&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;

  &lt;span class="constant"&gt;APP_NAME&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;someapp&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
  &lt;span class="constant"&gt;DEPLOY_ROOT&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/usr/local/share/applications/&lt;span class="expr"&gt;#{APP_NAME}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
  &lt;span class="constant"&gt;ON_DEPLOY_RESTART&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;[&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;someappd&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;]&lt;/span&gt;

  &lt;span class="ident"&gt;role&lt;/span&gt; &lt;span class="symbol"&gt;:app_server&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;myserver.com&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;archive&lt;/span&gt;
    &lt;span class="ident"&gt;commit&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; `&lt;span class="ident"&gt;git&lt;/span&gt;&lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;rev&lt;/span&gt;&lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;list&lt;/span&gt; &lt;span class="punct"&gt;--&lt;/span&gt;&lt;span class="ident"&gt;max&lt;/span&gt;&lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;count&lt;/span&gt;&lt;span class="punct"&gt;=&lt;/span&gt;&lt;span class="number"&gt;1&lt;/span&gt; &lt;span class="punct"&gt;--&lt;/span&gt;&lt;span class="ident"&gt;abbrev&lt;/span&gt;&lt;span class="punct"&gt;=&lt;/span&gt;&lt;span class="number"&gt;10&lt;/span&gt; &lt;span class="punct"&gt;--&lt;/span&gt;&lt;span class="ident"&gt;abbrev&lt;/span&gt;&lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;commit&lt;/span&gt; &lt;span class="constant"&gt;HEAD`&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;chomp&lt;/span&gt;
    &lt;span class="ident"&gt;file&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;span class="expr"&gt;#{APP_NAME}&lt;/span&gt;-&lt;span class="expr"&gt;#{commit}&lt;/span&gt;.tar.gz&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;restart_daemons&lt;/span&gt;
    &lt;span class="constant"&gt;ON_DEPLOY_RESTART&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;each&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;app&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
      &lt;span class="ident"&gt;run&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;sudo god restart &lt;span class="expr"&gt;#{app}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="ident"&gt;namespace&lt;/span&gt; &lt;span class="symbol"&gt;:deploy&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
    &lt;span class="ident"&gt;task&lt;/span&gt; &lt;span class="symbol"&gt;:build&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
      &lt;span class="ident"&gt;sh&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;git archive --format=tar HEAD | gzip &amp;gt; &lt;span class="expr"&gt;#{archive}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="ident"&gt;remote_task&lt;/span&gt; &lt;span class="symbol"&gt;:push&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="symbol"&gt;:build&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
      &lt;span class="ident"&gt;rsync&lt;/span&gt; &lt;span class="ident"&gt;archive&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/tmp&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="ident"&gt;desc&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Install a release from the latest commit&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
    &lt;span class="ident"&gt;remote_task&lt;/span&gt; &lt;span class="symbol"&gt;:install&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="symbol"&gt;:push&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
      &lt;span class="ident"&gt;date_stamp&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Time&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;now&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;strftime&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;%Y%m%d&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;
      &lt;span class="ident"&gt;last_release&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;run&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;ls &lt;span class="expr"&gt;#{DEPLOY_ROOT}&lt;/span&gt;/rels | sort -r | head -n 1&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;).&lt;/span&gt;&lt;span class="ident"&gt;chomp&lt;/span&gt;

      &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="ident"&gt;last_release&lt;/span&gt; &lt;span class="punct"&gt;=~&lt;/span&gt; &lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="regex"&gt;&lt;span class="expr"&gt;#{date_stamp}&lt;/span&gt;&lt;span class="escape"&gt;\-&lt;/span&gt;(&lt;span class="escape"&gt;\d&lt;/span&gt;+)&lt;/span&gt;&lt;span class="punct"&gt;/&lt;/span&gt;
        &lt;span class="ident"&gt;serial&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="global"&gt;$1&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;to_i&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt;
      &lt;span class="keyword"&gt;else&lt;/span&gt;
        &lt;span class="ident"&gt;serial&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt; 
      &lt;span class="keyword"&gt;end&lt;/span&gt;

      &lt;span class="ident"&gt;rel&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;%d-%02d&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;%&lt;/span&gt; &lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="ident"&gt;date_stamp&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;serial&lt;/span&gt;&lt;span class="punct"&gt;])&lt;/span&gt;
      &lt;span class="ident"&gt;rel_dir&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;span class="expr"&gt;#{DEPLOY_ROOT}&lt;/span&gt;/rels/&lt;span class="expr"&gt;#{rel}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;

      &lt;span class="ident"&gt;run&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;sudo mkdir -p &lt;span class="expr"&gt;#{rel_dir}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
      &lt;span class="ident"&gt;run&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;sudo tar -xzvf /tmp/&lt;span class="expr"&gt;#{archive}&lt;/span&gt; -C &lt;span class="expr"&gt;#{rel_dir}&lt;/span&gt; &amp;amp;&amp;amp; rm -rf /tmp/&lt;span class="expr"&gt;#{archive}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
      &lt;span class="ident"&gt;run&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;sudo ln -s -f -T &lt;span class="expr"&gt;#{rel_dir}&lt;/span&gt; &lt;span class="expr"&gt;#{DEPLOY_ROOT}&lt;/span&gt;/current&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
      &lt;span class="ident"&gt;restart_daemons&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="ident"&gt;desc&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Rollback to the previous release&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
    &lt;span class="ident"&gt;remote_task&lt;/span&gt; &lt;span class="symbol"&gt;:rollback&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
      &lt;span class="ident"&gt;current_link&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;run&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;ls -alF &lt;span class="expr"&gt;#{DEPLOY_ROOT}&lt;/span&gt; | awk '/current -&amp;gt; .*/ { print $NF }'&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;).&lt;/span&gt;&lt;span class="ident"&gt;chomp&lt;/span&gt;
      &lt;span class="ident"&gt;current&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;File&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;basename&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;current_link&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
      &lt;span class="ident"&gt;releases&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;run&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;ls &lt;span class="expr"&gt;#{DEPLOY_ROOT}&lt;/span&gt;/rels | sort -r&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;).&lt;/span&gt;&lt;span class="ident"&gt;split&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;span class="escape"&gt;\n&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;
      &lt;span class="ident"&gt;previous&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;releases&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;find&lt;/span&gt; &lt;span class="punct"&gt;{|&lt;/span&gt;&lt;span class="ident"&gt;rel&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt; &lt;span class="ident"&gt;current&lt;/span&gt; &lt;span class="punct"&gt;&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;rel&lt;/span&gt;&lt;span class="punct"&gt;}&lt;/span&gt;
      &lt;span class="keyword"&gt;raise&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;No previous release&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="ident"&gt;previous&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;nil?&lt;/span&gt;
      &lt;span class="ident"&gt;run&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;sudo ln -s -f -T &lt;span class="expr"&gt;#{DEPLOY_ROOT}&lt;/span&gt;/rels/&lt;span class="expr"&gt;#{previous}&lt;/span&gt; &lt;span class="expr"&gt;#{DEPLOY_ROOT}&lt;/span&gt;/current&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
      &lt;span class="ident"&gt;restart_daemons&lt;/span&gt;
      &lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Moved to &lt;span class="expr"&gt;#{previous}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="ident"&gt;desc&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Rollforward to the next release&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
    &lt;span class="ident"&gt;remote_task&lt;/span&gt; &lt;span class="symbol"&gt;:rollforward&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
      &lt;span class="ident"&gt;current_link&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;run&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;ls -alF &lt;span class="expr"&gt;#{DEPLOY_ROOT}&lt;/span&gt; | awk '/current -&amp;gt; .*/ { print $NF }'&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;).&lt;/span&gt;&lt;span class="ident"&gt;chomp&lt;/span&gt;
      &lt;span class="ident"&gt;current&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;File&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;basename&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;current_link&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
      &lt;span class="ident"&gt;releases&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;run&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;ls &lt;span class="expr"&gt;#{DEPLOY_ROOT}&lt;/span&gt;/rels | sort -r&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;).&lt;/span&gt;&lt;span class="ident"&gt;split&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;span class="escape"&gt;\n&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;
      &lt;span class="ident"&gt;next_rel&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;releases&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;find&lt;/span&gt; &lt;span class="punct"&gt;{|&lt;/span&gt;&lt;span class="ident"&gt;rel&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt; &lt;span class="ident"&gt;current&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="ident"&gt;rel&lt;/span&gt;&lt;span class="punct"&gt;}&lt;/span&gt;
      &lt;span class="keyword"&gt;raise&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;No next release&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="ident"&gt;next_rel&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;nil?&lt;/span&gt;
      &lt;span class="ident"&gt;run&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;sudo ln -s -f -T &lt;span class="expr"&gt;#{DEPLOY_ROOT}&lt;/span&gt;/rels/&lt;span class="expr"&gt;#{next_rel}&lt;/span&gt; &lt;span class="expr"&gt;#{DEPLOY_ROOT}&lt;/span&gt;/current&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
      &lt;span class="ident"&gt;restart_daemons&lt;/span&gt;
      &lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Moved to &lt;span class="expr"&gt;#{next_rel}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;rescue&lt;/span&gt; &lt;span class="constant"&gt;LoadError&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;e&lt;/span&gt;
  &lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;NOTE: Install vlad to get Kevin's awesome deployment tasks&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gluttonous/~4/7HiG_ewJv1o" height="1" width="1"/&gt;</description>
      <pubDate>Sat, 05 Apr 2008 19:13:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:1c9bdb1a-5d7b-469b-9f50-ac69a4e46217</guid>
      <author>kev</author>
      <link>http://feedproxy.google.com/~r/Gluttonous/~3/7HiG_ewJv1o/really-simple-git-deployment-with-vlad</link>
      <category>Ruby</category>
      <category>Hacks</category>
    <feedburner:origLink>http://glu.ttono.us/articles/2008/04/05/really-simple-git-deployment-with-vlad</feedburner:origLink></item>
    <item>
      <title>postgresql gem on Leopard stock gem system</title>
      <description>&lt;p&gt;This &lt;a href="http://pastie.caboo.se/131771"&gt;fails horribly&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The solution is to make sure you&amp;#8217;re only building for &lt;em&gt;your&lt;/em&gt; architecture:&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;Odysseus:ext kev$ sudo -s
bash-3.2# ARCHFLAGS='-arch i386' gem install postgres
Building native extensions.  This could take a while...
Successfully installed postgres-0.7.9.2007.12.22
Installing ri documentation for postgres-0.7.9.2007.12.22...
Installing RDoc documentation for postgres-0.7.9.2007.12.22...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gluttonous/~4/TufCq6ARojo" height="1" width="1"/&gt;</description>
      <pubDate>Sat, 22 Dec 2007 20:24:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:d88c3dff-a401-4399-a802-192d7849459a</guid>
      <author>kev</author>
      <link>http://feedproxy.google.com/~r/Gluttonous/~3/TufCq6ARojo/postgresql-gem-on-leopard-stock-gem-system</link>
      <category>Ruby</category>
    <feedburner:origLink>http://glu.ttono.us/articles/2007/12/22/postgresql-gem-on-leopard-stock-gem-system</feedburner:origLink></item>
    <item>
      <title>Rubinius Runs Mongrel</title>
      <description>&lt;p&gt;Reposted from my message to rubinius-dev. Congrats to the whole Rubinius team. This was entirely a group effort, and one hell of an achievement.&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;Here's the first Mongrel handler running on Rubinius:

http://pastie.caboo.se/paste/asset/126441/Picture_4.png

From this code:

$:.unshift "/Users/kev/code/mongrel/mongrel-1.1.1/lib"

puts "Requiring mongrel"
require 'mongrel'

class HelloHandler &lt; Mongrel::HttpHandler
 def process(request, response)
   response.start(200) do |head, out|
     head["Content-Type"] = "text/html"
     out.write "Hello World! I'm running on Rubinius!"
   end
 end
end

server = Mongrel::HttpServer.new("0.0.0.0", 3000)
puts "Started Server"
server.register("/hello", HelloHandler.new)
puts "Registered handler"
t = server.run
t.join

***THE CATCH (as this may be viewed by many people)***

This isn't completely complete. rb_global_variable was #define'd out
to do nothing (so no garbage collection on the global vars), and there
was a slight modification from the trunk to make global aliasing
ignore the fact that the globals just weren't there. Mongrel's
http11.c was also _slightly (very very slightly)_ modified to use the
rb_str_get_char_* methods we've decided to move to from RSTRING()-&gt;ptr
and RSTRING()-&gt;len, and I haven't gotten around to defining ALLOC_N
yet, so it was changed to a simple malloc. That's it though.

And it seems to run. And I feel like I need to run around the block.

It's in 9976301ba.

WOOOOOOOOOOOOOOOOOOOOO!&lt;/pre&gt;&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/Gluttonous/~4/YyfeuSAb84Q" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 10 Dec 2007 04:40:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:a60e8ee4-0637-4a0c-baa4-63ce75278354</guid>
      <author>kev</author>
      <link>http://feedproxy.google.com/~r/Gluttonous/~3/YyfeuSAb84Q/rubinius-runs-mongrel</link>
      <category>Ruby</category>
    <feedburner:origLink>http://glu.ttono.us/articles/2007/12/10/rubinius-runs-mongrel</feedburner:origLink></item>
    <item>
      <title>Secret Incantations</title>
      <description>&lt;h2&gt;Install the do_postgres gem against postgresql82 on MacPorts:&lt;/h2&gt;

&lt;p&gt;Make sure that /opt/local/lib/postgresql82/bin/ is in your path. You need pg_config easily accessible. Then run:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo gem install do_postgres -- --with-pgsql-include-dir=/opt/local/include/postgresql82/ --with-pgsql-lib=/opt/local/lib/postgresql82/&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;Autotest with Rspec on Merb with a Leopard install using the supplied Ruby (whew)&lt;/h2&gt;

&lt;p&gt;This will break because it can&amp;#8217;t find the &amp;#8220;spec command&amp;#8221;. It searches the configured bin directory, which with the supplied ruby is /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ln -s /usr/bin/spec /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/spec&lt;/code&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Gluttonous/~4/27ypZF65CLI" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 10 Dec 2007 01:03:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:6c7d8045-de18-4973-9a83-5d4272e2f96a</guid>
      <author>kev</author>
      <link>http://feedproxy.google.com/~r/Gluttonous/~3/27ypZF65CLI/secret-incantations</link>
      <category>Ruby</category>
    <feedburner:origLink>http://glu.ttono.us/articles/2007/12/10/secret-incantations</feedburner:origLink></item>
    <item>
      <title>Depth First Search</title>
      <description>&lt;p&gt;Because I hadn&amp;#8217;t implemented DFS in Ruby before, and it&amp;#8217;s just so damn easy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Phillip rightly pointed out in the comments that with the yield at the end, it&amp;#8217;s actually post-order traversal, not depth first search per se.&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;TreeNode&lt;/span&gt;
  &lt;span class="ident"&gt;attr_reader&lt;/span&gt; &lt;span class="symbol"&gt;:name&lt;/span&gt;

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;initialize&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="attribute"&gt;@name&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;name&lt;/span&gt;
    &lt;span class="attribute"&gt;@children&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;[]&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;add_node&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;node&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="attribute"&gt;@children&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="ident"&gt;node&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;each_depth_first&lt;/span&gt;
    &lt;span class="attribute"&gt;@children&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;each&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;child&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
      &lt;span class="ident"&gt;child&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;each_depth_first&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;c&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
        &lt;span class="keyword"&gt;yield&lt;/span&gt; &lt;span class="ident"&gt;c&lt;/span&gt;
      &lt;span class="keyword"&gt;end&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;yield&lt;/span&gt; &lt;span class="constant"&gt;self&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;

&lt;span class="comment"&gt;# root  -  a  -  b&lt;/span&gt;
&lt;span class="comment"&gt;#   \       \ &lt;/span&gt;
&lt;span class="comment"&gt;#    e - f   c  -  d&lt;/span&gt;
&lt;span class="comment"&gt;#     \&lt;/span&gt;
&lt;span class="comment"&gt;#      g&lt;/span&gt;

&lt;span class="ident"&gt;root&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;TreeNode&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;root&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;
&lt;span class="ident"&gt;root&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;add_node&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt; &lt;span class="ident"&gt;a&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;TreeNode&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;a&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;))&lt;/span&gt;
&lt;span class="ident"&gt;a&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;add_node&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt; &lt;span class="ident"&gt;b&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;TreeNode&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;b&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;))&lt;/span&gt;
&lt;span class="ident"&gt;a&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;add_node&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt; &lt;span class="ident"&gt;c&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;TreeNode&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;c&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;))&lt;/span&gt;
&lt;span class="ident"&gt;c&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;add_node&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt; &lt;span class="ident"&gt;d&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;TreeNode&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;d&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;))&lt;/span&gt;
&lt;span class="ident"&gt;root&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;add_node&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;e&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;TreeNode&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;e&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;))&lt;/span&gt;
&lt;span class="ident"&gt;e&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;add_node&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;f&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;TreeNode&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;f&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;))&lt;/span&gt;
&lt;span class="ident"&gt;e&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;add_node&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;g&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;TreeNode&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;g&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;))&lt;/span&gt;

&lt;span class="ident"&gt;root&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;each_depth_first&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;child&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
  &lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="ident"&gt;child&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;name&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;

&lt;span class="comment"&gt;# produces:&lt;/span&gt;
&lt;span class="comment"&gt;# b&lt;/span&gt;
&lt;span class="comment"&gt;# d&lt;/span&gt;
&lt;span class="comment"&gt;# c&lt;/span&gt;
&lt;span class="comment"&gt;# a&lt;/span&gt;
&lt;span class="comment"&gt;# f&lt;/span&gt;
&lt;span class="comment"&gt;# g&lt;/span&gt;
&lt;span class="comment"&gt;# e&lt;/span&gt;
&lt;span class="comment"&gt;# root&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gluttonous/~4/O8RvtI11YvY" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 27 Nov 2007 14:24:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:480cc50f-3d8f-4daf-b0e0-54766a79d0b3</guid>
      <author>kev</author>
      <link>http://feedproxy.google.com/~r/Gluttonous/~3/O8RvtI11YvY/depth-first-search</link>
      <category>Ruby</category>
      <category>Hacks</category>
    <feedburner:origLink>http://glu.ttono.us/articles/2007/11/27/depth-first-search</feedburner:origLink></item>
    <item>
      <title>This is too entertaining not to share</title>
      <description>&lt;p&gt;I&amp;#8217;ve apparently &lt;a href="http://shelly-rayedeane.blogspot.com/"&gt;&amp;#8220;hacked&amp;#8221; someone&amp;#8217;s unborn children&lt;/a&gt;. Or something.&lt;/p&gt;

&lt;blockquote&gt;And, among the lists of names, includes someone who goes by the name of Kevin Clark. And, if you were to take it even one step further, and INVESTIGATE this person, you would also come to the conclusion that he is a computer hacker who resides (or has resided) in San Francisco before.

Another coincidence, I suppose?&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; She says in one of her latest comments that she has a gun now. It&amp;#8217;s amusing, but please do not poke/provoke her. Look, but do not touch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update 2:&lt;/strong&gt; She&amp;#8217;s still accusing me of multiple felonies, but seems to have leveled off. I don&amp;#8217;t think she&amp;#8217;s going to track me down at this point. Woo personal safety. Oh, and technorati is apparently involved now:&lt;/p&gt;

&lt;blockquote&gt;I believe Mr. Clark is somehow routing fake websites through technorati via powerset and is doing something illegal.&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/Gluttonous/~4/NfjCwyms-30" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 08 Nov 2007 21:08:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:1ca45ef7-1bcf-419f-8b75-a527e20336af</guid>
      <author>kev</author>
      <link>http://feedproxy.google.com/~r/Gluttonous/~3/NfjCwyms-30/this-is-too-entertaining-not-to-share</link>
      <category>Musings</category>
    <feedburner:origLink>http://glu.ttono.us/articles/2007/11/08/this-is-too-entertaining-not-to-share</feedburner:origLink></item>
    <item>
      <title>13 New SD Ruby Podcasts Up</title>
      <description>&lt;p&gt;&lt;a href="http://podcast.sdruby.com/"&gt;They&amp;#8217;re all up at once&lt;/a&gt;. Wow.&lt;/p&gt;

&lt;p&gt;Mine felt good, but it&amp;#8217;s long. Rather long. 50 minutes fairly non-stop, ~600 megs long. Find some time before watching.&lt;/p&gt;

&lt;pre&gt;Episode 036: The Return of Kevin Clark
Kevin Clark takes a break from Powerset to give a full-throttle talk
on using Merb as a JSON-RPC service, god, gem2rpm, and heckle.

Episode 035: ActiveRecord Backup &amp; MimetypeFu
Matt Aimonetti demonstrates his newest plugins: ActiveRecord Backup
and MimetypeFu.

Episode 034: Intro to JRuby
Brian Chapados shows how to install and work with the latest JRuby
release.

Episode 033: Life on Edge
If you’re a Rails junkie, you’ll want to develop on Edge Rails. Matt
Clark explains how to get started and shares some of the challenges
of working on Edge.

Episode 032: Capistrano
Rob Kaufman takes on Capistrano 2. What is it? How does it work?
What’s changed since version 1?

Episode 031: Seaside
Roger Whitney explores Seaside, the web application framework based
on Smalltalk.

Episode 030: Tuneshelf
Dominic Damian talks about his experiences building Tuneshelf, a web
application that allows music fans to keep track of their favorite
music albums.

Episode 029: Big Stinking Piles (of data)
What do you do when third-party data vendors don’t speak REST? Rob
Kaufman discuss real-world techniques for importing and exporting
data. (This talk was also given at RailsConf 2007.)

Episode 028: Simple Sidebar Plugin
Ryan Felton shows how to use Simple Sidebar plugin to DRY up sidebar
content in applications.

Episode 027: Headliner and Styler
Patrick Crowley talks about his newest plugins: Headliner and Styler.

Episode 026: ActsAsSolr
Rob Kaufman shows how easy it is to integrate Solr powered search
into your Rails application using the ActsAsSolr plugin.

Episode 025: Ajax CSS Star Rating with ActsAsRateable
Ryan Felton shows off how to build an Ajax-powered, CSS star rater
using the ActsAsRateable plugin and Komodo Media’s CSS Star Rating
Redux technique.

Episode 024: Using Ruby + Amazon SQS to build backdoors
Brian Chapados talks about using Ruby and Amazon’s Simple Que Service
web service to build backdoors into systems.&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/Gluttonous/~4/23m113m4saU" height="1" width="1"/&gt;</description>
      <pubDate>Sat, 03 Nov 2007 10:04:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:67360763-d36c-40ac-97eb-70ca00affdab</guid>
      <author>kev</author>
      <link>http://feedproxy.google.com/~r/Gluttonous/~3/23m113m4saU/13-new-sd-ruby-podcasts-up</link>
      <category>Ruby</category>
      <category>sd.rb</category>
    <feedburner:origLink>http://glu.ttono.us/articles/2007/11/03/13-new-sd-ruby-podcasts-up</feedburner:origLink></item>
  </channel>
</rss>
