<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/stylesheets/rss.css" type="text/css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>OnRails.org</title>
    <link>http://onrails.org/</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Ruby On Rails and related matters.</description>
    <item>
      <title>Feature article on Compassionate Communications, a Ruby on Rails website.</title>
      <description>&lt;p&gt;A while back I worked with Lee and Sean on &lt;a href="http://www.compassionatecommunications.com/"&gt;Compassionate Communications&lt;/a&gt; which was featured in an interview/article in the &lt;a href="http://www.nctimes.com/articles/2008/09/03/lifeandtimes/z8a0df10c4ac0a197882574b20076a4c1.txt"&gt;San Diego North County Times&lt;/a&gt; last week. Read it &lt;a href="http://www.nctimes.com/articles/2008/09/03/lifeandtimes/z8a0df10c4ac0a197882574b20076a4c1.txt"&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Wed, 03 Sep 2008 13:55:40 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:e0b7223d-c750-4a6d-8724-dd9319b38946</guid>
      <author>Daniel Wanja</author>
      <link>http://onrails.org/articles/2008/09/03/feature-article-on-compassionate-communications-a-ruby-on-rails-website</link>
    </item>
    <item>
      <title>Check out the Advanced ActiveRecord Envycast</title>
      <description>&lt;p&gt;I just went through the first &lt;a href="http://envycasts.com/"&gt;screencast&lt;/a&gt; from the &lt;a href="http://www.railsenvy.com/"&gt;Rails Envy&lt;/a&gt; guys&amp;#8217;. I wasn&amp;#8217;t sure if I would liked the fact that they used a green screen approach, but thought I would support their effort as I really like their weekly podcast. Guess what? It&amp;#8217;s a really good screen cast, very informative, high quality and well done. Wait, there is more, they have a cool Cheat Sheet that comes with the download. Well worth the money, go &lt;a href="http://envycasts.com/"&gt;check it out&lt;/a&gt;.&lt;/p&gt;


&lt;div style="text-align:center;"&gt;&lt;img src="http://onrails.org/files/20080829_EnvyCast.jpg" alt="20080829_EnvyCast.jpg" border="0" width="480" height="396" /&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 29 Aug 2008 18:54:46 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:5a66b4c7-2149-44ed-9f11-b84cacacb8c2</guid>
      <author>Daniel Wanja</author>
      <link>http://onrails.org/articles/2008/08/29/check-out-the-advanced-activerecord-envycast</link>
    </item>
    <item>
      <title>Flex from Ford, Power by Microsoft.</title>
      <description>&lt;p&gt;&lt;img src="http://onrails.org/files/20080828_FlexByFord.png" alt="20080828_FlexByFord.png" border="0" width="517" height="256" /&gt;
Is Ford is jumping on the Flex bandwagon? And powered by Microsoft?&lt;/p&gt;


	&lt;p&gt;&lt;img src="http://onrails.org/files/20080828_poweredByMicrosoft.png" alt="20080828_poweredByMicrosoft.png" border="0" width="135" height="57"  /&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 29 Aug 2008 05:35:57 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:80834b0f-c37e-4fd8-9f5e-55f2bd173912</guid>
      <author>Daniel Wanja</author>
      <link>http://onrails.org/articles/2008/08/29/flex-from-ford-power-by-microsoft</link>
    </item>
    <item>
      <title>Flex on Rails: the book - release date?</title>
      <description>As you may know we started a while back with &lt;a href="http://thillerson.blogspot.com/"&gt;Tony&lt;/a&gt; on concocting some of our experiments, war stories, successes, discoveries, real life project experience on using Flex with Rails into a book titled &amp;#8220;Flex on Rails: Building Rich Internet Applications With Adobe Flex 3.0 and Rails 2.0&amp;#8221;. We are now &amp;#8220;code complete&amp;#8221;, wrote all the chapters and are in what I suspect (/hope) is the final editing stage. Yea!... well, that may end up being a longer process than I imagined and was told that it may take up to four month once the final manuscript is accepted. Nevertheless it was funny seeing our book appear on different book selling website as pre-order. Being my first (published) book I was curious and did some googling to see when it will be really ready. It&amp;#8217;s pretty &amp;#8216;funny&amp;#8217; to see how the dates are moving as the days go buy, but in short here is a quick overview on when the book will be released according to google&amp;#8230;note..we are not totally done yet&amp;#8230;so I wouldn&amp;#8217;t really announce a date yet, but if google says&amp;#8230;then it must be true :-) !!! Well, I was really hoping it hits the shelves earlier than some of these:
&lt;ul&gt;
&lt;li&gt;1/16/2009 &lt;a href="http://www.buy.com/prod/flex-on-rails-building-rich-internet-applications-with-adobe-flex-3-0/q/loc/106/208500393.html"&gt;buy.com&lt;/a&gt; &amp;#8211; $29.70
&lt;li&gt;02/28/2009 &lt;a href="http://www.amazon.co.uk/Books/s?ie=UTF8&amp;#38;rh=n%3A266239%2Cp_27%3ADaniel%20Wanja&amp;#38;field-author=Daniel%20Wanja&amp;#38;page=1"&gt;amazon.co.uk&lt;/a&gt;  &amp;#8211; $28.79
&lt;li&gt;May 29, 2008 &lt;a href="http://search.oreilly.com/?author=Daniel+Wanja&amp;#38;i=1&amp;#38;q=flex&amp;#38;u1=q&amp;#38;u2=author"&gt;oreilly.com&lt;/a&gt;
&lt;li&gt;12/26/2008 &lt;a href="http://www.biggerbooks.com/bk_detail.aspx?ISBN=9780321543370"&gt;biggerbooks.com&lt;/a&gt; &amp;#8211; $38.21
&lt;li&gt;12/1/2008 &lt;a href="http://www2.loot.co.za/shop/product.jsp?lsn=0321543378"&gt;loot.co.za&lt;/a&gt; &amp;#8211;  &lt;span class="caps"&gt;R385&lt;/span&gt;.00
&lt;li&gt;12/26/2008 &lt;a href="http://www.ecampus.com/book/9780321543370"&gt;ecampus.com&lt;/a&gt; &amp;#8211; $38.99
&lt;li&gt;2008/12/2 &lt;a href="http://monoclip.jp/by/kyow/monodtl/40755"&gt;monoclip.jp&lt;/a&gt;
&lt;li&gt;2009/01 &lt;a href="http://bookweb.kinokuniya.jp/guest/cgi-bin/booksea.cgi?ISBN=0321543378"&gt;bookweb.kinokuniya.jp&lt;/a&gt;
&lt;li&gt;2009/01&lt;a href="http://www.amazon.co.jp/Flex-Rails-Building-Internet-Applications/sim/0321543378/1"&gt; www.amazon.co.jp&lt;/a&gt; &amp;#8211;  5,772(&amp;#31246;&amp;#36796;) &amp;#12371;&amp;#12398;&amp;#21830;&amp;#21697;&amp;#12399;1500&amp;#20870;&amp;#20197;&amp;#19978;&amp;#22269;&amp;#20869;&amp;#37197;&amp;#36865;&amp;#26009;&amp;#28961;&amp;#26009;
&lt;/ul&gt;</description>
      <pubDate>Fri, 29 Aug 2008 04:44:50 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:5923d336-aa2d-4789-bc88-38aa1e69f2be</guid>
      <author>Daniel Wanja</author>
      <link>http://onrails.org/articles/2008/08/29/flex-on-rails-the-book-release-date</link>
    </item>
    <item>
      <title>Flash Player 10 Mobile for iPhone?</title>
      <description>&lt;style&gt;
.qttitle {
  padding-left: 120px;
  min-height: 120px;
  background-image: url(http://images.apple.com/downloads/images/essentials_quicktime20070611.png);
  background-position: top left;
  background-repeat: no-repeat;
  vertical-align: middle;
}

.playButton {
  background-color: rgb(20,20,20);
  cursor: pointer;
  font-weight: bold;
  font-size: 1.25em;
  opacity: .8;
  filter: alpha(opacity=80);
  -moz-border-radius: 1em;
  -webkit-border-radius: 1em;
  position: relative;
  top: 50%;
  zoom: 100%;
  padding: .5em 1em;
  color: white;
}

.playBackground {
  background-color: rgb(0,0,0);
  opacity: 0.0;
  filter: alpha(opacity=0);
  position: absolute;
  top: 0px; left: 0px;
}
&lt;/style&gt;

I was viewing the video of the &lt;a href="http://www.onflex.org/ted/2008/08/360flex-day-1-keynote-by-mark-anders.php"&gt;Day 1 Keynote&lt;/a&gt; by Mark Anders at 360Flex where he made a reference to a mobile Flash application build in Flex. Mark just skinned a desktop app which turned in into a very iPhone like application which just happen to have the iPhone screen dimensions and behavior. It's 56 minutes in the presentation. Check it out and let me know what you think. I've included a video extract here after (without the sound): 

&lt;script src="http://www.apple.com/library/quicktime/scripts/ac_quicktime.js" language="JavaScript" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="http://www.apple.com/library/quicktime/scripts/qtp_library.js" language="JavaScript" type="text/javascript"&gt;&lt;/script&gt;

&lt;script type="text/javascript"&gt;&lt;!--
	QT_WritePoster_XHTML('Click to Play', 'http://onrails.org/files/20080827_flexiphoneskin_action-poster.jpg',
		'http://onrails.org/files/20080827_flexiphoneskin_action.mov',
		'246', '385', '',
		'controller', 'true',
		'autoplay', 'true',
		'bgcolor', 'black',
		'scale', 'aspect');
//--&gt;
&lt;/script&gt;
&lt;noscript&gt;
&lt;object width="246" height="385" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab"&gt;
	&lt;param name="src" value="http://onrails.org/files/20080827_flexiphoneskin_action-poster.jpg" /&gt;
	&lt;param name="href" value="http://onrails.org/files/20080827_flexiphoneskin_action.mov" /&gt;
	&lt;param name="target" value="myself" /&gt;
	&lt;param name="controller" value="false" /&gt;
	&lt;param name="autoplay" value="false" /&gt;
	&lt;param name="scale" value="aspect" /&gt;
	&lt;embed width="246" height="385" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"
		src="http://onrails.org/files/20080827_flexiphoneskin_action-poster.jpg"
		href="http://onrails.org/files/20080827_flexiphoneskin_action.mov"
		target="myself"
		controller="false"
		autoplay="false"
		scale="aspect"&gt;
	&lt;/embed&gt;
&lt;/object&gt;
&lt;/noscript&gt;
	
That's when he changed the skin:
&lt;div style="text-align:center;"&gt;&lt;img src="http://onrails.org/files/20080827_flexiphoneskin.png" alt="20080827_flexiphoneskin.png" border="0" width="567" height="179" /&gt;&lt;/div&gt;

That would be cool if we could soon start coding in Flex for the iPhone.

Enjoy!
Daniel.</description>
      <pubDate>Wed, 27 Aug 2008 21:58:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:754e7526-9929-44b0-ada2-e8af98162600</guid>
      <author>Daniel Wanja</author>
      <link>http://onrails.org/articles/2008/08/27/flash-player-10-mobile-for-iphone</link>
      <category>Flex</category>
    </item>
    <item>
      <title>What are all the Rails Date Formats?</title>
      <description>&lt;p&gt;Ever forget what all the Rails defined &lt;code&gt;Date/DateTime/Time#strftime&lt;/code&gt; formats are?  Or forget what ones you added to the project yourself?&lt;/p&gt;


	&lt;p&gt;Ala &lt;code&gt;rake routes&lt;/code&gt; comes &lt;code&gt;rake date_formats&lt;/code&gt;:&lt;/p&gt;


&lt;script src="http://gist.github.com/1352.js"&gt;&lt;/script&gt;

Sample output from a Rails 2.1 app:
&lt;pre&gt;
Date
====
            db:'%Y-%m-%d'   2008-08-20
  long_ordinal:'&amp;#38;proc'      August 20th, 2008
          long:'%B %e, %Y'  August 20, 2008
        rfc822:'%e %b %Y'   20 Aug 2008
        number:'%Y%m%d'     20080820
         short:'%e %b'      20 Aug

DateTime
========
            db:'%Y-%m-%d'   2008-08-20 16:56:21
  long_ordinal:'&amp;#38;proc'      August 20th, 2008 16:56
          long:'%B %e, %Y'  August 20, 2008 16:56
        rfc822:'%e %b %Y'   Wed, 20 Aug 2008 16:56:21 -0600
        number:'%Y%m%d'     20080820165621
         short:'%e %b'      20 Aug 16:56

Time
====
            db:'%Y-%m-%d %H:%M:%S'         2008-08-20 16:56:21
  long_ordinal:'&amp;#38;proc'                     August 20th, 2008 16:56
          long:'%B %d, %Y %H:%M'           August 20, 2008 16:56
        rfc822:'%a, %d %b %Y %H:%M:%S %z'  Wed, 20 Aug 2008 16:56:21 -0600
         short:'%d %b %H:%M'               20 Aug 16:56
        number:'%Y%m%d%H%M%S'              20080820165621
          time:'%H:%M'                     16:56
&lt;/pre&gt;</description>
      <pubDate>Wed, 20 Aug 2008 22:54:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:2c07559a-8ec6-4f69-8d07-d657c497ffcd</guid>
      <author>Lee Marlow</author>
      <link>http://onrails.org/articles/2008/08/20/what-are-all-the-rails-date-formats</link>
      <category>Rails Tips</category>
    </item>
    <item>
      <title>360Flex sessions video - Day one</title>
      <description>&lt;iframe src="http://216.92.94.180/1733261879.html" scrolling="auto" frameborder="no" align="center" height = "220px" width = "250px"&gt;&lt;/iframe&gt;

	&lt;p&gt;Sessions Posted:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;TicketMaster Kiosk by Kevin Fauth&lt;/li&gt;
		&lt;li&gt;Flex Accessibility by Giorgio Natili&lt;/li&gt;
		&lt;li&gt;Reading the Flex source code by Jonathan Branam&lt;/li&gt;
		&lt;li&gt;Project Workflow by Axel Jensen&lt;/li&gt;
		&lt;li&gt;Creating Reusable Components by Ben Clinkbeard&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;&lt;a href="http://www.onflex.org/ted/2008/08/recording-360flex-free-full-sessions-on.php"&gt;From Ted&amp;#8217;s blog.&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 19 Aug 2008 19:18:54 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:d2a3b7a4-78ff-4afc-ad8f-ddf7877de802</guid>
      <author>Daniel Wanja</author>
      <link>http://onrails.org/articles/2008/08/19/360flex-sessions-video-day-one</link>
    </item>
    <item>
      <title>Nested to_xml for awesome_nested_set</title>
      <description>&lt;p&gt;I was updating an example build using the better_nested_set to use the  awesome_nested_set. One thing that I didn&amp;#8217;t find in awesome_nested_set are some helper methods that are returning a full tree of the nested set as one &lt;span class="caps"&gt;XML&lt;/span&gt; document. With better nested set I could do&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="constant"&gt;Category&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;result_to_attributes_xml&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="constant"&gt;Category&lt;/span&gt;&lt;span class="punct"&gt;.&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;ancestors&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;So I have added the following &lt;em&gt;full_xml&lt;/em&gt; method to my nested active record to recurse all the children. Note that the &lt;em&gt;full_method&lt;/em&gt; calls the &lt;em&gt;full_method&lt;/em&gt; on the children passing along the xml builder that is created by the to_xml method and passed as the &lt;em&gt;xml&lt;/em&gt; variable to block, thus building a nested &lt;span class="caps"&gt;XML&lt;/span&gt; document.&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;Category&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;ActiveRecord&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Base&lt;/span&gt;
  &lt;span class="ident"&gt;belongs_to&lt;/span&gt; &lt;span class="symbol"&gt;:parent&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:class_name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Category&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
  &lt;span class="ident"&gt;acts_as_nested_set&lt;/span&gt;     

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;full_xml&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;builder&lt;/span&gt;&lt;span class="punct"&gt;=&lt;/span&gt;&lt;span class="constant"&gt;nil&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;     
    &lt;span class="ident"&gt;to_xml&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:builder&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;builder&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:skip_instruct&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="constant"&gt;true&lt;/span&gt;&lt;span class="punct"&gt;)&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;xml&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
      &lt;span class="ident"&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="punct"&gt;{&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;full_xml&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;xml&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;end&lt;/span&gt;

&lt;span class="keyword"&gt;end&lt;/span&gt;    &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Obviously it would be nice that the awesome_nested_set provides such a method.&lt;/p&gt;


	&lt;p&gt;So let&amp;#8217;s assume I create the following nested structure:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="constant"&gt;Category&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;transaction&lt;/span&gt; &lt;span class="keyword"&gt;do&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;Category&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;create&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Main Category&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;

  &lt;span class="ident"&gt;cameras&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Category&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;create&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Cameras &amp;amp; Photo&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;  
  &lt;span class="ident"&gt;cameras&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;move_to_child_of&lt;/span&gt;&lt;span class="punct"&gt;(&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;Category&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;create&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Bags&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="symbol"&gt;:qty_in_stock&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;move_to_child_of&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;cameras&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="constant"&gt;Category&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;create&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Accessories&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="symbol"&gt;:qty_in_stock&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;12&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;move_to_child_of&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;cameras&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="constant"&gt;Category&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;create&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Analog Cameras&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="symbol"&gt;:qty_in_stock&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;move_to_child_of&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;cameras&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="constant"&gt;Category&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;create&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Digital Cameras&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="symbol"&gt;:qty_in_stock&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;5&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;move_to_child_of&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;cameras&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;

  &lt;span class="ident"&gt;phones&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Category&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;create&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Cell Phones&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;
  &lt;span class="ident"&gt;phones&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;move_to_child_of&lt;/span&gt;&lt;span class="punct"&gt;(&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;Category&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;create&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Accessories&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="symbol"&gt;:qty_in_stock&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;8&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;move_to_child_of&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;phones&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="constant"&gt;Category&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;create&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Phones&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="symbol"&gt;:qty_in_stock&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;20&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;move_to_child_of&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;phones&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="constant"&gt;Category&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;create&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Prepaid Cards&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="symbol"&gt;:qty_in_stock&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;3&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;move_to_child_of&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;phones&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;

  &lt;span class="ident"&gt;dvds&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Category&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;create&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Dvds&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;
  &lt;span class="ident"&gt;dvds&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;move_to_child_of&lt;/span&gt;&lt;span class="punct"&gt;(&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;Category&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;create&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Blueray&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="symbol"&gt;:qty_in_stock&lt;/span&gt; &lt;span class="punct"&gt;=&amp;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;move_to_child_of&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;dvds&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="constant"&gt;Category&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;create&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;HD DVD&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="symbol"&gt;:qty_in_stock&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;move_to_child_of&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;dvds&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="constant"&gt;Category&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;create&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;DVD&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="symbol"&gt;:qty_in_stock&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;100&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;move_to_child_of&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;dvds&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;

&lt;span class="keyword"&gt;end&lt;/span&gt;   &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;I can now get the whole nested structure in one go:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="constant"&gt;Category&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;roots&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;first&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;full_xml&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;And get the following &lt;span class="caps"&gt;XML&lt;/span&gt; in return.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;&amp;lt;category&amp;gt;
  &amp;lt;created-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/created-at&amp;gt;
  &amp;lt;description nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/description&amp;gt;
  &amp;lt;id type=&amp;quot;integer&amp;quot;&amp;gt;1&amp;lt;/id&amp;gt;
  &amp;lt;lft type=&amp;quot;integer&amp;quot;&amp;gt;1&amp;lt;/lft&amp;gt;
  &amp;lt;name&amp;gt;Main Category&amp;lt;/name&amp;gt;
  &amp;lt;parent-id type=&amp;quot;integer&amp;quot; nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/parent-id&amp;gt;
  &amp;lt;qty-in-stock type=&amp;quot;integer&amp;quot; nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/qty-in-stock&amp;gt;
  &amp;lt;rgt type=&amp;quot;integer&amp;quot;&amp;gt;28&amp;lt;/rgt&amp;gt;
  &amp;lt;updated-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/updated-at&amp;gt;
  &amp;lt;category&amp;gt;
    &amp;lt;created-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/created-at&amp;gt;
    &amp;lt;description nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/description&amp;gt;
    &amp;lt;id type=&amp;quot;integer&amp;quot;&amp;gt;11&amp;lt;/id&amp;gt;
    &amp;lt;lft type=&amp;quot;integer&amp;quot;&amp;gt;2&amp;lt;/lft&amp;gt;
    &amp;lt;name&amp;gt;Dvds&amp;lt;/name&amp;gt;
    &amp;lt;parent-id type=&amp;quot;integer&amp;quot;&amp;gt;1&amp;lt;/parent-id&amp;gt;
    &amp;lt;qty-in-stock type=&amp;quot;integer&amp;quot; nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/qty-in-stock&amp;gt;
    &amp;lt;rgt type=&amp;quot;integer&amp;quot;&amp;gt;9&amp;lt;/rgt&amp;gt;
    &amp;lt;updated-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/updated-at&amp;gt;
    &amp;lt;category&amp;gt;
      &amp;lt;created-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/created-at&amp;gt;
      &amp;lt;description nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/description&amp;gt;
      &amp;lt;id type=&amp;quot;integer&amp;quot;&amp;gt;14&amp;lt;/id&amp;gt;
      &amp;lt;lft type=&amp;quot;integer&amp;quot;&amp;gt;3&amp;lt;/lft&amp;gt;
      &amp;lt;name&amp;gt;DVD&amp;lt;/name&amp;gt;
      &amp;lt;parent-id type=&amp;quot;integer&amp;quot;&amp;gt;11&amp;lt;/parent-id&amp;gt;
      &amp;lt;qty-in-stock type=&amp;quot;integer&amp;quot;&amp;gt;100&amp;lt;/qty-in-stock&amp;gt;
      &amp;lt;rgt type=&amp;quot;integer&amp;quot;&amp;gt;4&amp;lt;/rgt&amp;gt;
      &amp;lt;updated-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/updated-at&amp;gt;
    &amp;lt;/category&amp;gt;
    &amp;lt;category&amp;gt;
      &amp;lt;created-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/created-at&amp;gt;
      &amp;lt;description nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/description&amp;gt;
      &amp;lt;id type=&amp;quot;integer&amp;quot;&amp;gt;13&amp;lt;/id&amp;gt;
      &amp;lt;lft type=&amp;quot;integer&amp;quot;&amp;gt;5&amp;lt;/lft&amp;gt;
      &amp;lt;name&amp;gt;HD DVD&amp;lt;/name&amp;gt;
      &amp;lt;parent-id type=&amp;quot;integer&amp;quot;&amp;gt;11&amp;lt;/parent-id&amp;gt;
      &amp;lt;qty-in-stock type=&amp;quot;integer&amp;quot;&amp;gt;0&amp;lt;/qty-in-stock&amp;gt;
      &amp;lt;rgt type=&amp;quot;integer&amp;quot;&amp;gt;6&amp;lt;/rgt&amp;gt;
      &amp;lt;updated-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/updated-at&amp;gt;
    &amp;lt;/category&amp;gt;
    &amp;lt;category&amp;gt;
      &amp;lt;created-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/created-at&amp;gt;
      &amp;lt;description nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/description&amp;gt;
      &amp;lt;id type=&amp;quot;integer&amp;quot;&amp;gt;12&amp;lt;/id&amp;gt;
      &amp;lt;lft type=&amp;quot;integer&amp;quot;&amp;gt;7&amp;lt;/lft&amp;gt;
      &amp;lt;name&amp;gt;Blueray&amp;lt;/name&amp;gt;
      &amp;lt;parent-id type=&amp;quot;integer&amp;quot;&amp;gt;11&amp;lt;/parent-id&amp;gt;
      &amp;lt;qty-in-stock type=&amp;quot;integer&amp;quot;&amp;gt;10&amp;lt;/qty-in-stock&amp;gt;
      &amp;lt;rgt type=&amp;quot;integer&amp;quot;&amp;gt;8&amp;lt;/rgt&amp;gt;
      &amp;lt;updated-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/updated-at&amp;gt;
    &amp;lt;/category&amp;gt;
  &amp;lt;/category&amp;gt;
  &amp;lt;category&amp;gt;
    &amp;lt;created-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/created-at&amp;gt;
    &amp;lt;description nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/description&amp;gt;
    &amp;lt;id type=&amp;quot;integer&amp;quot;&amp;gt;7&amp;lt;/id&amp;gt;
    &amp;lt;lft type=&amp;quot;integer&amp;quot;&amp;gt;10&amp;lt;/lft&amp;gt;
    &amp;lt;name&amp;gt;Cell Phones&amp;lt;/name&amp;gt;
    &amp;lt;parent-id type=&amp;quot;integer&amp;quot;&amp;gt;1&amp;lt;/parent-id&amp;gt;
    &amp;lt;qty-in-stock type=&amp;quot;integer&amp;quot; nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/qty-in-stock&amp;gt;
    &amp;lt;rgt type=&amp;quot;integer&amp;quot;&amp;gt;17&amp;lt;/rgt&amp;gt;
    &amp;lt;updated-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/updated-at&amp;gt;
    &amp;lt;category&amp;gt;
      &amp;lt;created-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/created-at&amp;gt;
      &amp;lt;description nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/description&amp;gt;
      &amp;lt;id type=&amp;quot;integer&amp;quot;&amp;gt;10&amp;lt;/id&amp;gt;
      &amp;lt;lft type=&amp;quot;integer&amp;quot;&amp;gt;11&amp;lt;/lft&amp;gt;
      &amp;lt;name&amp;gt;Prepaid Cards&amp;lt;/name&amp;gt;
      &amp;lt;parent-id type=&amp;quot;integer&amp;quot;&amp;gt;7&amp;lt;/parent-id&amp;gt;
      &amp;lt;qty-in-stock type=&amp;quot;integer&amp;quot;&amp;gt;3&amp;lt;/qty-in-stock&amp;gt;
      &amp;lt;rgt type=&amp;quot;integer&amp;quot;&amp;gt;12&amp;lt;/rgt&amp;gt;
      &amp;lt;updated-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/updated-at&amp;gt;
    &amp;lt;/category&amp;gt;
    &amp;lt;category&amp;gt;
      &amp;lt;created-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/created-at&amp;gt;
      &amp;lt;description nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/description&amp;gt;
      &amp;lt;id type=&amp;quot;integer&amp;quot;&amp;gt;9&amp;lt;/id&amp;gt;
      &amp;lt;lft type=&amp;quot;integer&amp;quot;&amp;gt;13&amp;lt;/lft&amp;gt;
      &amp;lt;name&amp;gt;Phones&amp;lt;/name&amp;gt;
      &amp;lt;parent-id type=&amp;quot;integer&amp;quot;&amp;gt;7&amp;lt;/parent-id&amp;gt;
      &amp;lt;qty-in-stock type=&amp;quot;integer&amp;quot;&amp;gt;20&amp;lt;/qty-in-stock&amp;gt;
      &amp;lt;rgt type=&amp;quot;integer&amp;quot;&amp;gt;14&amp;lt;/rgt&amp;gt;
      &amp;lt;updated-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/updated-at&amp;gt;
    &amp;lt;/category&amp;gt;
    &amp;lt;category&amp;gt;
      &amp;lt;created-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/created-at&amp;gt;
      &amp;lt;description nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/description&amp;gt;
      &amp;lt;id type=&amp;quot;integer&amp;quot;&amp;gt;8&amp;lt;/id&amp;gt;
      &amp;lt;lft type=&amp;quot;integer&amp;quot;&amp;gt;15&amp;lt;/lft&amp;gt;
      &amp;lt;name&amp;gt;Accessories&amp;lt;/name&amp;gt;
      &amp;lt;parent-id type=&amp;quot;integer&amp;quot;&amp;gt;7&amp;lt;/parent-id&amp;gt;
      &amp;lt;qty-in-stock type=&amp;quot;integer&amp;quot;&amp;gt;8&amp;lt;/qty-in-stock&amp;gt;
      &amp;lt;rgt type=&amp;quot;integer&amp;quot;&amp;gt;16&amp;lt;/rgt&amp;gt;
      &amp;lt;updated-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/updated-at&amp;gt;
    &amp;lt;/category&amp;gt;
  &amp;lt;/category&amp;gt;
  &amp;lt;category&amp;gt;
    &amp;lt;created-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/created-at&amp;gt;
    &amp;lt;description nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/description&amp;gt;
    &amp;lt;id type=&amp;quot;integer&amp;quot;&amp;gt;2&amp;lt;/id&amp;gt;
    &amp;lt;lft type=&amp;quot;integer&amp;quot;&amp;gt;18&amp;lt;/lft&amp;gt;
    &amp;lt;name&amp;gt;Cameras &amp;amp;amp; Photo&amp;lt;/name&amp;gt;
    &amp;lt;parent-id type=&amp;quot;integer&amp;quot;&amp;gt;1&amp;lt;/parent-id&amp;gt;
    &amp;lt;qty-in-stock type=&amp;quot;integer&amp;quot; nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/qty-in-stock&amp;gt;
    &amp;lt;rgt type=&amp;quot;integer&amp;quot;&amp;gt;27&amp;lt;/rgt&amp;gt;
    &amp;lt;updated-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/updated-at&amp;gt;
    &amp;lt;category&amp;gt;
      &amp;lt;created-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/created-at&amp;gt;
      &amp;lt;description nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/description&amp;gt;
      &amp;lt;id type=&amp;quot;integer&amp;quot;&amp;gt;6&amp;lt;/id&amp;gt;
      &amp;lt;lft type=&amp;quot;integer&amp;quot;&amp;gt;19&amp;lt;/lft&amp;gt;
      &amp;lt;name&amp;gt;Digital Cameras&amp;lt;/name&amp;gt;
      &amp;lt;parent-id type=&amp;quot;integer&amp;quot;&amp;gt;2&amp;lt;/parent-id&amp;gt;
      &amp;lt;qty-in-stock type=&amp;quot;integer&amp;quot;&amp;gt;5&amp;lt;/qty-in-stock&amp;gt;
      &amp;lt;rgt type=&amp;quot;integer&amp;quot;&amp;gt;20&amp;lt;/rgt&amp;gt;
      &amp;lt;updated-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/updated-at&amp;gt;
    &amp;lt;/category&amp;gt;
    &amp;lt;category&amp;gt;
      &amp;lt;created-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/created-at&amp;gt;
      &amp;lt;description nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/description&amp;gt;
      &amp;lt;id type=&amp;quot;integer&amp;quot;&amp;gt;5&amp;lt;/id&amp;gt;
      &amp;lt;lft type=&amp;quot;integer&amp;quot;&amp;gt;21&amp;lt;/lft&amp;gt;
      &amp;lt;name&amp;gt;Analog Cameras&amp;lt;/name&amp;gt;
      &amp;lt;parent-id type=&amp;quot;integer&amp;quot;&amp;gt;2&amp;lt;/parent-id&amp;gt;
      &amp;lt;qty-in-stock type=&amp;quot;integer&amp;quot;&amp;gt;0&amp;lt;/qty-in-stock&amp;gt;
      &amp;lt;rgt type=&amp;quot;integer&amp;quot;&amp;gt;22&amp;lt;/rgt&amp;gt;
      &amp;lt;updated-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/updated-at&amp;gt;
    &amp;lt;/category&amp;gt;
    &amp;lt;category&amp;gt;
      &amp;lt;created-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/created-at&amp;gt;
      &amp;lt;description nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/description&amp;gt;
      &amp;lt;id type=&amp;quot;integer&amp;quot;&amp;gt;4&amp;lt;/id&amp;gt;
      &amp;lt;lft type=&amp;quot;integer&amp;quot;&amp;gt;23&amp;lt;/lft&amp;gt;
      &amp;lt;name&amp;gt;Accessories&amp;lt;/name&amp;gt;
      &amp;lt;parent-id type=&amp;quot;integer&amp;quot;&amp;gt;2&amp;lt;/parent-id&amp;gt;
      &amp;lt;qty-in-stock type=&amp;quot;integer&amp;quot;&amp;gt;12&amp;lt;/qty-in-stock&amp;gt;
      &amp;lt;rgt type=&amp;quot;integer&amp;quot;&amp;gt;24&amp;lt;/rgt&amp;gt;
      &amp;lt;updated-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/updated-at&amp;gt;
    &amp;lt;/category&amp;gt;
    &amp;lt;category&amp;gt;
      &amp;lt;created-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/created-at&amp;gt;
      &amp;lt;description nil=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/description&amp;gt;
      &amp;lt;id type=&amp;quot;integer&amp;quot;&amp;gt;3&amp;lt;/id&amp;gt;
      &amp;lt;lft type=&amp;quot;integer&amp;quot;&amp;gt;25&amp;lt;/lft&amp;gt;
      &amp;lt;name&amp;gt;Bags&amp;lt;/name&amp;gt;
      &amp;lt;parent-id type=&amp;quot;integer&amp;quot;&amp;gt;2&amp;lt;/parent-id&amp;gt;
      &amp;lt;qty-in-stock type=&amp;quot;integer&amp;quot;&amp;gt;2&amp;lt;/qty-in-stock&amp;gt;
      &amp;lt;rgt type=&amp;quot;integer&amp;quot;&amp;gt;26&amp;lt;/rgt&amp;gt;
      &amp;lt;updated-at type=&amp;quot;datetime&amp;quot;&amp;gt;2008-08-18T14:46:07Z&amp;lt;/updated-at&amp;gt;
    &amp;lt;/category&amp;gt;
  &amp;lt;/category&amp;gt;
&amp;lt;/category&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;How do you deal with that situation?&lt;/p&gt;</description>
      <pubDate>Tue, 19 Aug 2008 14:47:04 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:3c7f9897-c26e-4445-8333-ed46ebfd56b5</guid>
      <author>Daniel Wanja</author>
      <link>http://onrails.org/articles/2008/08/19/nested-to_xml-for-awesome_nested_set</link>
    </item>
    <item>
      <title>iPhone in nearly every state. 147 out of 188 stores.</title>
      <description>&lt;p&gt;&lt;img src="http://onrails.org/files/20080722_IphoneEveryWhere.png" alt="20080722_IphoneEveryWhere.png" border="0" width="286" height="184" /&gt;&lt;/p&gt;


	&lt;p&gt;From &lt;a href="http://hasiphone.com/"&gt;hasiphone.com&lt;/a&gt; July 22nd 2pm.&lt;/p&gt;</description>
      <pubDate>Tue, 22 Jul 2008 20:15:11 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:aed0563d-6a12-4065-b8be-ec1d72822941</guid>
      <author>Daniel Wanja</author>
      <link>http://onrails.org/articles/2008/07/22/iphone-in-nearly-every-state-147-out-of-188-stores</link>
    </item>
    <item>
      <title>hasiphone.com now with US map</title>
      <description>&lt;p&gt;Thanks to the &lt;a href="http://degrafa.com/"&gt;Degrafa&lt;/a&gt; library I was able to add a &amp;#8220;US Map of iPhone 3G&amp;#8221; Availability in an hour to the &lt;a href="http://hasiphone.com/"&gt;hasiphone.com&lt;/a&gt; application.&lt;/p&gt;


&lt;div style="text-align:center;"&gt;&lt;img src="http://onrails.org/files/20080721_hasiphoneusmap.png" alt="20080721_hasiphoneusmap.png" border="0" width="495"  /&gt;&lt;/div&gt;

	&lt;p&gt;Also I automated the extraction part of the data and check every hour if new data is there. I was assuming that the data changes only once a day and therefore all the delta (the + and &amp;#8211; next to the availability) are based on previous day. This morning there were only four stores with iPhones, and hour ago 76 and now 78. So it seems that the data is updated more frequently or I have a bug in my extraction routing. Whatever the situation I am leaving on vacations for the next two weeks and won&amp;#8217;t take my notebook with me, so hopefully the data is correct. My good friend Sol will keep an eye on the extraction process to see that we get some daily data. Thanks Sol, ya da man.&lt;/p&gt;


	&lt;p&gt;Enjoy!
Daniel.&lt;/p&gt;


	&lt;p&gt;&lt;img src="http://degrafa.com/images/banners/degrafa-badge-88x35.gif" /&gt; is cool&lt;/p&gt;</description>
      <pubDate>Mon, 21 Jul 2008 19:17:17 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:73f39367-f265-4ec1-8357-863d9478ec43</guid>
      <author>Daniel Wanja</author>
      <link>http://onrails.org/articles/2008/07/21/hasiphone-com-now-with-us-map</link>
    </item>
  </channel>
</rss>
