<?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>fnokd! &#187; Tools</title>
	<atom:link href="http://www.fnokd.com/tag/tools/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fnokd.com</link>
	<description>Bob Blogs</description>
	<lastBuildDate>Mon, 18 May 2009 17:42:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Unwind with Subversion</title>
		<link>http://www.fnokd.com/2007/10/15/unwind-with-subversion/</link>
		<comments>http://www.fnokd.com/2007/10/15/unwind-with-subversion/#comments</comments>
		<pubDate>Tue, 16 Oct 2007 04:30:32 +0000</pubDate>
		<dc:creator>Bob McWhirter</dc:creator>
				<category><![CDATA[Codehaus]]></category>
		<category><![CDATA[JBoss.ORG]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.fnokd.com/2007/10/15/unwind-with-subversion/</guid>
		<description><![CDATA[At the Codehaus and at JBoss.org, I&#8217;ve continually come across Subversion repositories that needed to be split apart or merged, perhaps after converting from CVS.  One problem you continually hit, particularly if you&#8217;re merging repositories, is the &#8220;date order of revisions&#8221; bug.  Simply stated, if you create a new repository loaded from two [...]]]></description>
			<content:encoded><![CDATA[<p>At the <a title="Codehaus" href="http://codehaus.org/">Codehaus</a> and at <a title="JBoss" href="http://jboss.org/">JBoss.org</a>, I&#8217;ve continually come across Subversion repositories that needed to be split apart or merged, perhaps after converting from CVS.  One problem you continually hit, particularly if you&#8217;re merging repositories, is <a href="http://svn.haxx.se/dev/archive-2006-01/0381.shtml">the &#8220;date order of revisions&#8221; bug</a>.  Simply stated, if you create a new repository loaded from two other repositories, you can end up with a situation where revision N does not necessarily occur before revision N+1, in terms of the commit time-stamp.</p>
<p>When you do a date-based operation using Subversion, it does a binary search through the revision sequence to find the revisions matching the specified dates. This binary search assumes the revisions are indeed date-ordered.</p>
<p>With the acquisition of Mobicents by JBoss, we&#8217;re in the situation of having to merge about a dozen repositories. Some are CVS, some are SVN.  Good ol&#8217; <a title="cvs2svn" href="http://cvs2svn.tigris.org/cvs2svn.html">cvs2svn</a> works well for the first step, of converting a CVS repository into a SVN repository.  But now we have either oddly disjoint repositories, or conflicting paths overlaid one another.</p>
<p>I&#8217;ve always been a fan of <a title="mod_rewrite beginners guide" href="http://www.workingwith.me.uk/articles/scripting/mod_rewrite">mod_rewrite</a> for <a title="Apache httpd" href="http://httpd.apache.org/">Apache-httpd</a>, and a <a title="SVN dumpfile format" href="http://svn.collab.net/repos/svn/trunk/notes/dump-load-format.txt">SVN dumpfile</a> has a lot of paths just ripe for rewriting.  1000 lines of Ruby code later, I&#8217;m able to announce <a title="Unwind" href="http://svn.rubyhaus.org/unwind/trunk/">Unwind</a>.  Unwind is a Ruby library, along with a command-line tool, for performing mind-numbing feats of repository surgery.</p>
<p>Since a massive conversion and rewriting is something that requires a bit of trial-and-error, the command-line utility is ultimately driven by a configuration file.  Of course, with Ruby, it&#8217;s just a DSL created using <a title="Ruby instance_eval" href="http://www.ruby-doc.org/core/classes/Object.html#M000336">instance_eval</a> and blocks.</p>
<p><img width="461" height="389" id="image327" alt="Picture 5.png" src="http://www.fnokd.com/wp-content/uploads/2007/10/Picture%205.png" /></p>
<p>This configuration file will ultimate produce a single file (<code>merged-repo.svndump</code>) from multiple input dump files.  Each source file can <code>include()/exclude</code> paths (based upon the original paths in that particular dumpfile).  Each source can also use Rails-ish URL rewriting.  The <strong><code>:something</code></strong> syntax matches 1 segment of a path, and is available as a substitution value in the output path for the rule.</p>
<p>The rewrite engine tracks all existing paths, and creates parent directories when necessary.  SVN <strong><code>copy</code></strong> operations are fully adjusted both for the source and the destination paths.</p>
<p>Unwind automatically interleaves revisions to achieve total monotonically increasing time-ordering for the final repository.</p>
<p>Finally, before a revision is emitted to the output repository, addition <code>include()/exclude()</code> rules can be applied.  For repositories converted from CVS, you may end up with a bundle of <code>CVSROOT</code> directories attempting to live in the same location.  No reason to rewrite them to unique locations, as you can just exclude them before they get figured into the final output repository.</p>
<p>Unwind uses <a title="SQLite" href="http://www.sqlite.org/">SQLite</a> for organizing the meta-information about each repository and revision, while performing random-access seeks on the source dumpfiles to produce the final repository.   While merging may be the common use-case, Unwind&#8217;s rewriting also makes it useful just for extracting bits out of a repository.</p>
<p>At this point, this blog entry is the complete documentation for Unwind.  But feel free to <a title="Unwind repository" href="http://svn.rubyhaus.org/unwind/trunk/">browse the SVN repository</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnokd.com/2007/10/15/unwind-with-subversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mashup Down Under</title>
		<link>http://www.fnokd.com/2007/08/01/mashup-down-under/</link>
		<comments>http://www.fnokd.com/2007/08/01/mashup-down-under/#comments</comments>
		<pubDate>Wed, 01 Aug 2007 06:44:48 +0000</pubDate>
		<dc:creator>Bob McWhirter</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.fnokd.com/2007/08/01/mashup-down-under/</guid>
		<description><![CDATA[Mike &#8220;JIRA JIRA JIRA&#8221; Cannon-Brookes pinged me on IM tonight to let me know that Atlassian has acquired Cenqua.  Cenqua, as you might know, makes the fancy-dandy FishEye product for viewing source repositories.  Atlassian is the Australian wiki/bug-tracking giant run by stylish surfers.
Congrats to both groups.  I enjoyed having beers with the [...]]]></description>
			<content:encoded><![CDATA[<p><img width="161" height="151" align="right" alt="Picture 13.png" id="image285" title="Picture 13.png" src="http://www.fnokd.com/wp-content/uploads/2007/08/Picture%2013.png" />Mike &#8220;JIRA JIRA JIRA&#8221; Cannon-Brookes pinged me on IM tonight to let me know that <a title="Atlassian buys Cenqua" href="http://www.atlassian.com/cenqua/default.jsp?s_kwcid=HMcenqua">Atlassian has acquired Cenqua</a>.  Cenqua, as you might know, makes the fancy-dandy FishEye product for viewing source repositories.  Atlassian is the Australian wiki/bug-tracking giant run by stylish surfers.</p>
<p>Congrats to both groups.  I enjoyed having beers with the Cenqua kids at JavaOne this year.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnokd.com/2007/08/01/mashup-down-under/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Yard Blog</title>
		<link>http://www.fnokd.com/2007/07/22/yard-blog/</link>
		<comments>http://www.fnokd.com/2007/07/22/yard-blog/#comments</comments>
		<pubDate>Mon, 23 Jul 2007 02:10:22 +0000</pubDate>
		<dc:creator>Bob McWhirter</dc:creator>
				<category><![CDATA[Asheville]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Yard]]></category>

		<guid isPermaLink="false">http://www.fnokd.com/2007/07/22/yard-blog/</guid>
		<description><![CDATA[Rebecca and I have a habit of standing around, talking about all the things we could do to our house.
Some of our talk has centered around the ugly &#8220;patio&#8221; of poorly-laid bricks and easy-to-trip-over landscaping timbers.

This morning it was a brisk 65 degrees, perfect for some manual labor, so up came the patio.
Thankfully the people [...]]]></description>
			<content:encoded><![CDATA[<p>Rebecca and I have a habit of standing around, talking about all the things we could do to our house.</p>
<p>Some of our talk has centered around the ugly &#8220;patio&#8221; of poorly-laid bricks and easy-to-trip-over landscaping timbers.</p>
<p><a class="imagelink" title="removal.jpg" href="http://www.fnokd.com/wp-content/uploads/2007/07/removal.jpg"><img width="418" height="195" id="image282" alt="removal.jpg" title="removal.jpg" src="http://www.fnokd.com/wp-content/uploads/2007/07/removal.jpg" /></a><br />
<a class="imagelink" title="spike.jpg" href="http://www.fnokd.com/wp-content/uploads/2007/07/spike.jpg"><img width="139" height="135" align="right" title="spike.jpg" id="image284" alt="spike.jpg" src="http://www.fnokd.com/wp-content/uploads/2007/07/spike.jpg" /></a>This morning it was a brisk 65 degrees, perfect for some manual labor, so up came the patio.</p>
<p>Thankfully the people who laid these bricks previously had indulged in quite a bit of sand, so I only need to screen it before laying everything back down, hopefully better than it was before.</p>
<p>One of the best tools ever is a 6-foot-long tempered steel spike with a cutting edge.  Great for removing stumps or prying up landscaping timbers.</p>
<p><a title="bricks_gloves.jpg" class="imagelink" href="http://www.fnokd.com/wp-content/uploads/2007/07/bricks_gloves.jpg"><img width="406" height="271" alt="bricks_gloves.jpg" id="image281" src="http://www.fnokd.com/wp-content/uploads/2007/07/bricks_gloves.jpg" /></a></p>
<p>I&#8217;ve also found that I enjoy yardwork as a nice form of exercise, instead of doing something pointless, like lifting a weight 50 times, or walking around in a large circle.</p>
<p><a title="brick_stack.jpg" class="imagelink" href="http://www.fnokd.com/wp-content/uploads/2007/07/brick_stack.jpg"><img width="388" height="260" alt="brick_stack.jpg" id="image280" src="http://www.fnokd.com/wp-content/uploads/2007/07/brick_stack.jpg" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnokd.com/2007/07/22/yard-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Which looks right?</title>
		<link>http://www.fnokd.com/2007/07/06/which-looks-right/</link>
		<comments>http://www.fnokd.com/2007/07/06/which-looks-right/#comments</comments>
		<pubDate>Fri, 06 Jul 2007 17:29:21 +0000</pubDate>
		<dc:creator>Bob McWhirter</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://www.fnokd.com/2007/07/06/which-looks-right/</guid>
		<description><![CDATA[Was signing up to try Remember The Milk, and thought the way they figure out your date-formatting preference was pretty smooth.

Well, that&#8217;s pretty darn simple.
]]></description>
			<content:encoded><![CDATA[<p>Was signing up to try <a title="Remember The Milk" href="http://rememberthemilk.com/">Remember The Milk</a>, and thought the way they figure out your date-formatting preference was pretty smooth.</p>
<div style="text-align: center"><img style="border: 1px solid #cccccc; padding: 1em" id="image275" alt="Picture 6.png" src="http://www.fnokd.com/wp-content/uploads/2007/07/Picture%206.png" /></div>
<p>Well, that&#8217;s pretty darn simple.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnokd.com/2007/07/06/which-looks-right/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Silent Paint Remover</title>
		<link>http://www.fnokd.com/2007/04/04/silent-paint-remover/</link>
		<comments>http://www.fnokd.com/2007/04/04/silent-paint-remover/#comments</comments>
		<pubDate>Thu, 05 Apr 2007 03:17:59 +0000</pubDate>
		<dc:creator>Bob McWhirter</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.fnokd.com/2007/04/04/silent-paint-remover/</guid>
		<description><![CDATA[Today, the Man In Brown showed up, and dropped off some boxes.
They were for my wife.  Damn!
Then he came back! And brought a box for me.  Inside the box there was some flavorless edible packing peanuts (they dissolved amazingly quickly in your mouth) protecting a Silent Paint Remover.
This thing rocks!
I live in an [...]]]></description>
			<content:encoded><![CDATA[<p><img align="right" alt="Picture 28.png" id="image243" title="Picture 28.png" style="width: 116px; height: 198px" src="http://www.fnokd.com/wp-content/uploads/2007/04/Picture%2028.png" />Today, the Man In Brown showed up, and dropped off some boxes.</p>
<p>They were for my wife.  Damn!</p>
<p>Then he came back! And brought a box for me.  Inside the box there was some flavorless edible packing peanuts (they dissolved amazingly quickly in your mouth) protecting a <a title="The Toy" href="http://www.silentpaintremover.com/spr/index.htm">Silent Paint Remover</a>.</p>
<p>This thing rocks!</p>
<p>I live in an 82-year-old house, which means it&#8217;s seen 82-years worth of styles come and go.  That&#8217;s a lot of paint.  Our shoe molding is all rounded over due to the many layers of lead, latex and who knows what else.</p>
<p>Point it at the shoe molding for 60 seconds and then give a good scrape.  Truly amazing.</p>
<p>While the heating device itself is silent, the squeals coming from the scraper as 82 years of sea-foam green, buttermilk, white and teal come peeling off the wall are reminiscent of dragging a pair of cats across a chalkboard.</p>
<p>From reading online, the amazingness of the product made me suspect there was a high probability it could be a RonCo-esque product and a waste of money.  Though, it probably <span style="font-weight: bold">can</span> be used to <a title="cook a turkey!" href="http://www.ronco.com/rco_prodinfo.aspx?pid=ST4201101001&#038;color=&#038;active=acsry">cook a turkey</a> nicely.</p>
<p>But then I found <a title="this guy" href="http://www.oceanmanorhouse.com/paintremover.html">this guy, who explained the science and even provided a how-to</a> about making one for yourself.  I promptly set out to find the required space-heater of the appropriate type.</p>
<p>I quickly learned that asking the Helpful Friendly People at Lowe&#8217;s and Home Depot for space-heaters while you are wearing shorts and a t-shirt is a fantastic way to survey how different people express &#8220;what kind of nut are you?&#8221; with only their eyebrows.</p>
<p>Apparently space-heaters are a seasonal item, and April isn&#8217;t the season for them.</p>
<p>Due to the lack of parts to build my own, I punted and just bought the pre-made version.   Tonight, with minimal effort, I stripped 8&#8242; of base boards in about a half hour.  Without any chemical burns or heavy metal poisoning.</p>
<p>I&#8217;d consider that a success.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnokd.com/2007/04/04/silent-paint-remover/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Desk Flossing</title>
		<link>http://www.fnokd.com/2007/03/13/desk-flossing/</link>
		<comments>http://www.fnokd.com/2007/03/13/desk-flossing/#comments</comments>
		<pubDate>Tue, 13 Mar 2007 20:07:35 +0000</pubDate>
		<dc:creator>Bob McWhirter</dc:creator>
				<category><![CDATA[Health]]></category>
		<category><![CDATA[Lifehack]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.fnokd.com/2007/03/13/desk-flossing/</guid>
		<description><![CDATA[Just a quick lifehack that I&#8217;ve started recently, completely unintentionally.
I picked up a huge bag of DenTek Easy Angle(tm) Floss Picks (&#8221;Flossing Made Easy!&#8221;) and keep them at my desk.
I previously thought I hated flossing.  Now I&#8217;ve realized that I simply didn&#8217;t like wrapping thin string around my fingers until they turned blue.  [...]]]></description>
			<content:encoded><![CDATA[<p><a title="DenTek Easy Angle(tm) Floss Picks (" href="http://www.usdentek.com/products_ea.html"><img width="179" height="116" align="right" alt="Floss!" id="image195" title="Floss!" src="http://www.fnokd.com/wp-content/uploads/2007/03/Picture%2023.png" /></a>Just a quick lifehack that I&#8217;ve started recently, completely unintentionally.</p>
<p>I picked up a huge bag of DenTek Easy Angle(tm) <a title="DenTek Easy Angle(tm) Floss Picks (" href="http://www.usdentek.com/detail_ea.html">Floss Picks</a> (&#8221;Flossing Made Easy!&#8221;) and keep them at my desk.</p>
<p>I previously thought I hated flossing.  Now I&#8217;ve realized that I simply didn&#8217;t like wrapping thin string around my fingers until they turned blue.  The Floss Picks are nice.</p>
<p>The key is to use them when you&#8217;re stuck on a long, mute-friendly conference call.  It helps if you have a headset. Sure, you could surf the web or try to be productive, but you&#8217;ll miss someone important say something even more important at just the wrong time if you let your attention wander too much.  Flossing, on the other hand, is an activity that doesn&#8217;t require you to take too much attention away from the call. Unlike trimming your finger and/or toe nails, flossing is a relatively quiet sport, suitable for cubicle dwellers.</p>
<p>I&#8217;ve flossed more in the past week than I had in years.</p>
<p>Give it a whirl.  And don&#8217;t forget to hit <strong>mute</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnokd.com/2007/03/13/desk-flossing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Boxy To Go</title>
		<link>http://www.fnokd.com/2006/12/05/boxy-to-go/</link>
		<comments>http://www.fnokd.com/2006/12/05/boxy-to-go/#comments</comments>
		<pubDate>Tue, 05 Dec 2006 19:45:59 +0000</pubDate>
		<dc:creator>Bob McWhirter</dc:creator>
				<category><![CDATA[Culture]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.fnokd.com/2006/12/05/boxy-to-go/</guid>
		<description><![CDATA[Being an OSX user, I&#8217;ve felt massive amounts of unlove from TiVo, in terms of the TiVoDesktop, TiVoToGo, etc.Â  But now, man, the guys behind tivodecode have come to my rescue.Â  While playing with it, I also discovered that the TiVo actually produces a nice XML feed, and mine at least attempts to serve up [...]]]></description>
			<content:encoded><![CDATA[<p><img width="119" height="110" align="left" alt="Picture 11.png" id="image105" title="Picture 11.png" src="http://www.fnokd.com/wp-content/uploads/2006/12/Picture%2011.png" />Being an OSX user, I&#8217;ve felt massive amounts of unlove from TiVo, in terms of the TiVoDesktop, TiVoToGo, etc.Â  But now, man, the guys behind <a href="http://tivodecode.sourceforge.net/">tivodecode</a> have come to my rescue.Â  While playing with it, I also discovered that the TiVo actually produces a nice XML feed, and mine at least attempts to serve up some RSS (but it ultimately fails).</p>
<p><strong>tivodecode</strong> spews out MPEG-2, which QuickTime can&#8217;t handle natively.Â  You can <a href="http://www.apple.com/quicktime/mpeg2/">spend $19.99 at the Apple Store</a> to get the MPEG codec pack, or use <a href="http://darwinports.opendarwin.org/">DarwinPorts</a> to install <a href="http://www.mplayerhq.hu/design7/news.html">MPlayer</a>, which handles MPEG-2 just fine.Â  For free.</p>
<p>Bless all those opensouce geeks out there in the world.Â  Bless each and every one of you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnokd.com/2006/12/05/boxy-to-go/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google Refinement</title>
		<link>http://www.fnokd.com/2006/10/05/google-refinement/</link>
		<comments>http://www.fnokd.com/2006/10/05/google-refinement/#comments</comments>
		<pubDate>Fri, 06 Oct 2006 03:09:02 +0000</pubDate>
		<dc:creator>Bob McWhirter</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.fnokd.com/2006/10/05/google-refinement/</guid>
		<description><![CDATA[
New feature?
Update: No, not a new feature.Â  A quick googling resulted in at least a sighting back in April.Â  This seems to be a feature specific to medical terms.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.google.com/search?q=congestion"><img width="449" height="228" id="image89" alt="Picture 42.png" src="http://www.fnokd.com/wp-content/uploads/2006/10/Picture%2042.png" /></a><br />
<a href="http://www.google.com/search?q=congestion">New feature?</a></p>
<p><strong>Update: </strong>No, not a new feature.Â  A quick googling resulted in at least a sighting back in April.Â  This seems to be a feature specific to <a href="http://www.google.com/search?q=gangrene">medical terms</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnokd.com/2006/10/05/google-refinement/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>100% Pure Ruby(tm)</title>
		<link>http://www.fnokd.com/2006/09/26/100-pure-rubytm/</link>
		<comments>http://www.fnokd.com/2006/09/26/100-pure-rubytm/#comments</comments>
		<pubDate>Tue, 26 Sep 2006 06:08:16 +0000</pubDate>
		<dc:creator>Bob McWhirter</dc:creator>
				<category><![CDATA[Day Job]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.fnokd.com/2006/09/26/100-pure-rubytm/</guid>
		<description><![CDATA[Recently I&#8217;ve been doing a fair amount of work in Ruby.  And yes, I&#8217;ve felt super-productive.  Particularly compared to Java.
The downside of working in Java is the 100% Pure Java(tm) mentality.  In the search for a clean and cohesive system, we take the attitude that if it&#8217;s not pure Java, it&#8217;s crap. [...]]]></description>
			<content:encoded><![CDATA[<p><img width="187" height="86" align="left" title="Picture 34.png" id="image87" alt="Picture 34.png" src="http://www.fnokd.com/wp-content/uploads/2006/09/Picture%2034.png" />Recently I&#8217;ve been doing a fair amount of work in Ruby.  And yes, I&#8217;ve felt super-productive.  Particularly compared to Java.</p>
<p>The downside of working in Java is the <strong>100% Pure Java(tm)</strong> mentality.  In the search for a clean and cohesive system, we take the attitude that if it&#8217;s not pure Java, it&#8217;s crap.  In Java, if we need something to happen periodically, we might examine TimerTask, decide it&#8217;s insufficient and move on to Quartz.  So we add it to our build, figure out the API, realize it conflicts with some other dependency.  Well, damn.</p>
<p>With Ruby, it&#8217;s scripty enough to not feel the need to have a 100% Pure Ruby(tm) mentality.  A Ruby system needs something to occur periodically, we just open a pipe to crontab and hand that bit off to cron.</p>
<p><em>&#8220;But Windows doesn&#8217;t have cron!&#8221;</em></p>
<p>Too bad.</p>
<p>Use a better operating system.</p>
<p>The majority of systems deploy to Linux or some other Unix-alike.  Developing on a Unix-ish system only makes sense.  You wouldn&#8217;t prepare to drive an RV by tooling around in a Kia Sportage, now would you?</p>
<p>When you break free of the  JVM mentality and assume a sensible host operating system, you realize that the OS itself is your virtual machine to play in.  If it&#8217;s in your $PATH and can be expected to behave reasonably well on any sane Unix-like OS, by all means, use it.</p>
<p>Back to the premise&#8230; Since Ruby is indeed &#8220;scripty&#8221; you can accomplish a crapload just using a pair of backticks, effectively <em>not even using Ruby atÂ  all</em>.</p>
<p>And you can do it without guilt or complication.  Completely unlike punting to Runtime.exec(&#8230;).  That always makes you feel dirty.</p>
<p>Perhaps Groovy and JRuby will help break the never-escape-the-JVM attitude.  Give a developer backticks and easy pipes to subprocesses, and no telling what sort of nefarious things he might could do.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnokd.com/2006/09/26/100-pure-rubytm/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Smoking like a Chimney</title>
		<link>http://www.fnokd.com/2006/08/15/smoking-like-a-chimney/</link>
		<comments>http://www.fnokd.com/2006/08/15/smoking-like-a-chimney/#comments</comments>
		<pubDate>Wed, 16 Aug 2006 04:48:16 +0000</pubDate>
		<dc:creator>Bob McWhirter</dc:creator>
				<category><![CDATA[Food]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.fnokd.com/2006/08/15/smoking-like-a-chimney/</guid>
		<description><![CDATA[Continuing the trend of physical-world things you can buy at Lowe&#8217;s, I&#8217;d like to sing the praise of the charcoal chimney.
This summer, I decided to start grilling with actual chunks-of-wood charcoal, instead of pressed-and-formed McCharcoal Briquettes (now made with all white meat).   Real charcoal does not include the mass-load of volatile organic compounds [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.weber.com/bbq/pub/grill/accessory/chargear.aspx"><img align="right" style="width: 212px; height: 152px" src="http://www.weber.com/bbq/img/accessories/allfuel_05_large.jpg" /></a>Continuing the trend of physical-world things you can buy at Lowe&#8217;s, I&#8217;d like to sing the praise of the charcoal chimney.</p>
<p>This summer, I decided to start grilling with actual chunks-of-wood charcoal, instead of pressed-and-formed McCharcoal Briquettes (now made with all white meat).   Real charcoal does not include the mass-load of volatile organic compounds that the &#8220;match-light&#8221; briquettes have.  I started by dousing it with liberal amounts of charcoal starter fluid, and whoosh, I&#8217;d eventually get an uneven grilling bed.</p>
<p>After picking up a few copies of <a href="http://www.cooksillustrated.com/">Cook&#8217;s Illustrated</a> (check out July&#8217;s centerfold), I learned of the <span style="font-style: italic">charcoal chimney</span>.  A few sheets of newspaper or discarded resumes you got from some goons on Craigslist, and your charcoal is evenly nice and toasty within 20 minutes.  It&#8217;s a beautiful and simple design.  I have no idea why I never tried one sooner.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnokd.com/2006/08/15/smoking-like-a-chimney/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deconstruction</title>
		<link>http://www.fnokd.com/2006/08/13/deconstruction/</link>
		<comments>http://www.fnokd.com/2006/08/13/deconstruction/#comments</comments>
		<pubDate>Mon, 14 Aug 2006 03:44:21 +0000</pubDate>
		<dc:creator>Bob McWhirter</dc:creator>
				<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.fnokd.com/2006/08/13/deconstruction/</guid>
		<description><![CDATA[Sometimes you just need to take stuff apart.  Stuff that has been nailed up, painted over, glued on, or otherwise mystically attached to something you wish it to no longer be attached to.  Enter the Wonderbar.  Not just any Wonderbar, but the Super Wonderbar.  A Super Wonderbar is like a normal [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.stanleytools.com/default.asp?TYPE=PRODUCT&#038;PARTNUMBER=55-525"><img width="148" height="65" align="left" src="http://www.stanleytools.com/catalog_images/web_detail/55-525_web_detail.jpg" /></a>Sometimes you just need to take stuff apart.  Stuff that has been nailed up, painted over, glued on, or otherwise mystically attached to something you wish it to no longer be attached to.  Enter the <strong>Wonderbar</strong>.  Not just any Wonderbar, but the <a href="http://www.stanleytools.com/default.asp?TYPE=PRODUCT&#038;PARTNUMBER=55-525"><strong>Super Wonderbar</strong></a>.  A Super Wonderbar is like a normal Wonderbar, but with a few extra bends, which jacks the price up a few dollars.</p>
<p>While many folks seem happy with a normal crow-bar, the Wonderbar is truly a work of intelligent engineering.  Being flat, it slips much easier between parts you wish to separate.  With the multitude of bends, you can easily jab it where it needs to go and still have plenty of leverage for the ripping and tearing.  The notches are beveled just right to grab even the most obstinate nail.</p>
<p>Of course, buying one with cash at your local Lowe&#8217;s still produces a receipt longer than the tool itself.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnokd.com/2006/08/13/deconstruction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
