<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.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>crunchlife</title>
    <link>http://crunchlife.com</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Lagoa Multiphysics 1.0</title>
      <description>&lt;object width="400" height="225"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13457383&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=13457383&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="225"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/13457383"&gt;Lagoa Multiphysics 1.0 - Teaser&lt;/a&gt; from &lt;a href="http://vimeo.com/thiagocosta"&gt;Thiago Costa&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;

</description>
      <pubDate>Tue, 20 Jul 2010 20:17:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:3dbb944f-64f2-4f92-ada0-124df1e8ba48</guid>
      <author>Ryan Baxter</author>
      <link>http://crunchlife.com/articles/2010/07/20/lagoa-multiphysics-1-0</link>
      <category>Inspiration</category>
    </item>
    <item>
      <title>Robert Martin's &amp;quot;Twenty-Five Zeros&amp;quot; Keynote at RailsConf 2010</title>
      <description>&lt;embed src="http://blip.tv/play/AYHl5AoC" type="application/x-shockwave-flash" width="480" height="300" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;

</description>
      <pubDate>Thu, 24 Jun 2010 19:04:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:da42e46d-5e68-4fc2-b6a6-047bb229b121</guid>
      <author>Ryan Baxter</author>
      <link>http://crunchlife.com/articles/2010/06/24/robert-martins-twenty-five-zeros-keynote-at-railsconf-2010</link>
      <category>Programming</category>
      <category>Inspiration</category>
    </item>
    <item>
      <title>Ruby Fractal Library 1.2.2</title>
      <description>&lt;p&gt;&lt;img src="/files/newton.png" class="photo right"&gt;The &lt;a href="http://crunchlife.com/pages/ruby_fractal_library" target="_blank"&gt;Ruby Fractal Library&lt;/a&gt; now uses &lt;a href="http://github.com/wvanbergen/chunky_png" target="_blank"&gt;ChunkyPNG&lt;/a&gt;.  Thanks to Willem van Bergen for creating a 100% pure Ruby PNG solution!  ChunkyPNG provides full read/write capabilities of PNG files without the dependency hassle of bigger image libraries.  Install fractals and enjoy the chunky goodness.&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;sudo&lt;/span&gt; &lt;span class="ident"&gt;gem&lt;/span&gt; &lt;span class="ident"&gt;install&lt;/span&gt; &lt;span class="ident"&gt;fractals&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Oh, and check out &lt;a href="http://blog.mostof.it/mandelbrot-set-in-ruby-and-haskell" target="_blank"&gt;this post&lt;/a&gt; at Implements Developer for another great way to create the Mandelbrot Set in Ruby.  &lt;/p&gt;</description>
      <pubDate>Mon, 08 Mar 2010 20:34:00 -0800</pubDate>
      <guid isPermaLink="false">urn:uuid:eb7618fa-56e5-422d-8811-7c9f21633975</guid>
      <author>Ryan Baxter</author>
      <link>http://crunchlife.com/articles/2010/03/08/ruby-fractal-library-1-2-2</link>
      <category>Code Snippets</category>
      <category>Fractals</category>
      <category>Ruby</category>
    </item>
    <item>
      <title>Hello MongoDB</title>
      <description>&lt;p&gt;In an effort to jump-start my creativity, I thought I&amp;#8217;d hop on the &lt;a href="http://en.wikipedia.org/wiki/NoSQL" target="_blank"&gt;NoSQL&lt;/a&gt; train and work up a little &amp;#8220;Hello World&amp;#8221; app using &lt;a href="http://mongodb.org" target="_blank"&gt;MongoDB&lt;/a&gt; with &lt;a href="http://www.sinatrarb.com/" target="_blank"&gt;Sinatra&lt;/a&gt; and &lt;a href="http://mongomapper.com/" target="_blank"&gt;MongoMapper&lt;/a&gt;.  In a later project I&amp;#8217;ll be throwing &lt;a href="" target="_blank"&gt;Haml&lt;/a&gt; into the mix and working completely outside of my comfort zone.  Dependencies be damned!&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;rubygems&lt;/span&gt;&lt;span class="punct"&gt;'&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;mongo_mapper&lt;/span&gt;&lt;span class="punct"&gt;'&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;sinatra&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;

&lt;span class="constant"&gt;MongoMapper&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;connection&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Mongo&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Connection&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;('&lt;/span&gt;&lt;span class="string"&gt;localhost&lt;/span&gt;&lt;span class="punct"&gt;')&lt;/span&gt;
&lt;span class="constant"&gt;MongoMapper&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;database&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;messages&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;

&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Message&lt;/span&gt;
  &lt;span class="ident"&gt;include&lt;/span&gt; &lt;span class="constant"&gt;MongoMapper&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Document&lt;/span&gt;
  &lt;span class="ident"&gt;key&lt;/span&gt; &lt;span class="symbol"&gt;:message&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="constant"&gt;String&lt;/span&gt;
  &lt;span class="ident"&gt;key&lt;/span&gt; &lt;span class="symbol"&gt;:ip_address&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="constant"&gt;String&lt;/span&gt;
  &lt;span class="ident"&gt;timestamps!&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;

&lt;span class="ident"&gt;get&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;/&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
  &lt;span class="constant"&gt;Message&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;all&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;map&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;m&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
    &lt;span class="ident"&gt;time&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;m&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;created_at&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;localtime&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;On &lt;span class="expr"&gt;#{ time.strftime('%m/%d/%Y') }&lt;/span&gt; at &lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; \
    &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;span class="expr"&gt;#{ time.strftime('%I:%M %p')}&lt;/span&gt; &amp;lt;strong&amp;gt;&lt;span class="expr"&gt;#{ m.ip_address }&lt;/span&gt;&amp;lt;/strong&amp;gt; said, &lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; \
    &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&amp;lt;strong&amp;gt;&lt;span class="escape"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="expr"&gt;#{ m.message }&lt;/span&gt;&lt;span class="escape"&gt;\&amp;quot;&lt;/span&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
  &lt;span class="punct"&gt;}.&lt;/span&gt;&lt;span class="ident"&gt;join&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&amp;lt;br /&amp;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;get&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;/:message&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
  &lt;span class="constant"&gt;Message&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;:message&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;params&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:message&lt;/span&gt;&lt;span class="punct"&gt;],&lt;/span&gt; &lt;span class="symbol"&gt;:ip_address&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="attribute"&gt;@env&lt;/span&gt;&lt;span class="punct"&gt;['&lt;/span&gt;&lt;span class="string"&gt;REMOTE_ADDR&lt;/span&gt;&lt;span class="punct"&gt;']).&lt;/span&gt;&lt;span class="ident"&gt;save&lt;/span&gt;
  &lt;span class="ident"&gt;redirect&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;/&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;On 02/17/2010 at 10:13 PM &lt;strong&gt;127.0.0.1&lt;/strong&gt; said, &lt;strong&gt;&amp;#8220;Hello World!&amp;#8221;&lt;/strong&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 17 Feb 2010 20:11:00 -0800</pubDate>
      <guid isPermaLink="false">urn:uuid:d8efe6cb-4cee-4838-9fdb-333ee2157772</guid>
      <author>Ryan Baxter</author>
      <link>http://crunchlife.com/articles/2010/02/17/hello-mongodb</link>
      <category>Code Snippets</category>
      <category>Inspiration</category>
      <category>Ruby</category>
      <category>MongoDB</category>
      <category>Sinatra</category>
    </item>
    <item>
      <title>Data Visualization in the AlloSphere</title>
      <description>&lt;p&gt;&lt;object width="446" height="326"&gt;&lt;param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;param name="bgColor" value="#ffffff"&gt;&lt;/param&gt; &lt;param name="flashvars" value="vu=http://video.ted.com/talks/embed/JoAnnKuchera-Morin_2009-embed_high.flv&amp;amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/JoAnnKuchera-Morin-2009.embed_thumbnail.jpg&amp;amp;vw=432&amp;amp;vh=240&amp;amp;ap=0&amp;amp;ti=516" /&gt;&lt;embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="446" height="326" allowFullScreen="true" flashvars="vu=http://video.ted.com/talks/embed/JoAnnKuchera-Morin_2009-embed_high.flv&amp;amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/JoAnnKuchera-Morin-2009.embed_thumbnail.jpg&amp;amp;vw=432&amp;amp;vh=240&amp;amp;ap=0&amp;amp;ti=516"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 03 Sep 2009 07:42:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:aaf4686b-ad8d-4a1e-822e-9af525437347</guid>
      <author>Ryan Baxter</author>
      <link>http://crunchlife.com/articles/2009/09/03/data-visualization-in-the-allosphere</link>
      <category>Inspiration</category>
    </item>
    <item>
      <title>Ruby Fractal Library 1.2.0</title>
      <description>&lt;p&gt;&lt;img src="/files/burning_ship.png" class="photo right"&gt;I&amp;#8217;ve finally released version 1.2.0 of the &lt;a href="http://ryanbaxter.net/pages/ruby_fractal_library" target="_blank"&gt;Ruby Fractal Library&lt;/a&gt;.  It&amp;#8217;s still just as small and easy to use, but with a few new twists.  I&amp;#8217;ve removed most of the duplicate code, added Procs where appropriate, and made the syntax more consistent.  The result is much more readable and should be easier to maintain.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The source code has been split into multiple files.  One for each module.&lt;/li&gt;
&lt;li&gt;Each of the fractals has been distilled to a single block passed to the Fractal base class&amp;#8217; constructor.  This makes it easy to construct new orbits fractals by either inheriting from Fractal or instantiating it directly.&lt;/li&gt;
&lt;li&gt;Classes have been added for the Burning Ship and Newton fractals.&lt;/li&gt;
&lt;li&gt;A &amp;#8216;Winter&amp;#8217; theme has been added.&lt;/li&gt;
&lt;li&gt;Users can now choose which dependancy nightmare they&amp;#8217;d prefer.  PNG, RMagick and JRuby each have their own renderer.  PNGRenderer is the default, but is easy to override with the renderer= method.&lt;/li&gt;
&lt;li&gt;bailout and max_iterations are no longer constructor parameters.  This is the biggest breaking change.&lt;/li&gt;
&lt;li&gt;Unit tests have been added for each fractal.&lt;/li&gt;
&lt;li&gt;Several rake tasks have been added to make installation and gem creation easier.&lt;/li&gt;
&lt;li&gt;RDoc &lt;a href="http://ryanbaxter.net/fractals-1.2.1/doc/index.html" target="_blank"&gt;documentation&lt;/a&gt; is now available.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A &lt;a href="http://rubyforge.org/projects/fractals/" target="_blank"&gt;project&lt;/a&gt; for this library has been created at RubyForge, but the source code can still be found at &lt;a href="http://ryanbaxter.net/pages/ruby_fractal_library" target="_blank"&gt;the same old place&lt;/a&gt;.  I&amp;#8217;m considering a move to github, but I&amp;#8217;ll make an announcement if that happens.  If you decide to download the Ruby Fractal Library, be sure to check out examples.rb in the project&amp;#8217;s source.  You should also take a look at the README file and &lt;a href="http://ryanbaxter.net/fractals-1.2.1/doc/index.html" target="_blank"&gt;documentation&lt;/a&gt; before getting started.  Make some fractals and enjoy!  Bugs can be filed at the &lt;a href="http://rubyforge.org/tracker/?group_id=8893" target="_blank"&gt;RubyForge tracker&lt;/a&gt;. &lt;/p&gt;</description>
      <pubDate>Wed, 26 Aug 2009 19:36:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:07858846-0184-44c0-9760-a64e04d44862</guid>
      <author>Ryan Baxter</author>
      <link>http://crunchlife.com/articles/2009/08/26/ruby-fractal-library-1-2-0</link>
      <category>Fractals</category>
      <category>Ruby</category>
    </item>
    <item>
      <title>Subversion: Merging a Branch into Trunk</title>
      <description>&lt;p&gt;I can never remember how to merge a &lt;a href="http://subversion.tigris.org/" target="_blank"&gt;Subversion&lt;/a&gt; branch into trunk.  So for future reference, here is how it&amp;#8217;s done.&lt;/p&gt;

&lt;p&gt;First, get a working copy of the head revision of trunk.&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;svn checkout svn://svnserver/project/trunk project&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Next, merge the branch with your working copy.&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;svn merge svn://svnserver/project/trunk svn://svnserver/project/branches/branch project&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Finally, commit the results of the merge.&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;cd project
svn commit -m &amp;quot;Merging branch X.X.X into trunk.&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;You can also specify a revision number in your merge.&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;svn merge svn://svnserver/project/trunk@223 svn://svnserver/project/branches/branch@223 project&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;That&amp;#8217;s it.&lt;/p&gt;</description>
      <pubDate>Tue, 25 Aug 2009 18:21:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:32e934ca-5772-409a-a579-b8c7692c38b4</guid>
      <author>Ryan Baxter</author>
      <link>http://crunchlife.com/articles/2009/08/25/subversion-merging-a-branch-into-trunk</link>
      <category>Code Snippets</category>
      <category>Oops</category>
      <category>SCM</category>
      <category>SVN</category>
    </item>
    <item>
      <title>Installing RMagick on Ubuntu*</title>
      <description>&lt;p&gt;Because I always forget how&amp;#8230;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;sudo apt-get install libmagickwand-dev
sudo gem install rmagick&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;and you reference it in code like so:&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;# Don't forget the capital &amp;quot;RM&amp;quot;!&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;RMagick&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
&lt;span class="ident"&gt;include&lt;/span&gt; &lt;span class="constant"&gt;RMagick&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;*I&amp;#8217;ve only done this using Ubuntu 9.04.  Your mileage may vary.&lt;/strong&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 20 Aug 2009 10:00:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:dbbef41a-92fd-4d04-85ad-a13ee582e634</guid>
      <author>Ryan Baxter</author>
      <link>http://crunchlife.com/articles/2009/08/20/installing-rmagick-on-ubuntu</link>
      <category>Code Snippets</category>
      <category>Oops</category>
      <category>Ruby</category>
      <category>Ubuntu</category>
    </item>
    <item>
      <title>Where is _why?</title>
      <description>&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Why_the_lucky_stiff" target="_blank"&gt;Why the lucky stiff&lt;/a&gt; speaking at the Carnegie Mellon Art and Code Symposium.  If &lt;a href="http://news.ycombinator.com/item?id=773108" target="_blank"&gt;the rumors&lt;/a&gt; are true, you&amp;#8217;ll be missed.&lt;/p&gt;

&lt;p&gt;&lt;object width="400" height="220"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5047563&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=5047563&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="220"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/5047563"&gt;ART &amp;amp;&amp;amp; CODE Symposium: Hackety Hack, why the lucky stiff&lt;/a&gt; from &lt;a href="http://vimeo.com/sfci"&gt;STUDIO for Creative Inquiry&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 20 Aug 2009 06:20:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:e25abfe2-f960-4f5e-9771-925530b1e98d</guid>
      <author>Ryan Baxter</author>
      <link>http://crunchlife.com/articles/2009/08/20/where-is-_why</link>
      <category>Expect the Unexpected</category>
      <category>Inspiration</category>
      <category>Ruby</category>
    </item>
    <item>
      <title>I'm Only Working</title>
      <description>&lt;p&gt;When I&amp;#8217;m not working, I read a lot of blogs.  While eating lunch today, I read a quote from writer J. Robert Lennon on &lt;a href="http://wilwheaton.typepad.com/wwdnbackup/2009/06/time-to-write.html" target="_blank"&gt;Wil Wheaton&amp;#8217;s blog&lt;/a&gt; that instantly put a smile on my face.  I can attest that the quote applies equally to programmers.  In fact, I catch myself doing this several times a day.&lt;/p&gt;

&lt;blockquote&gt;
The truth, of course, is that &lt;span style="text-decoration: line-through;"&gt;writers&lt;/span&gt; programmers are always working. When you ask a &lt;span style="text-decoration: line-through;"&gt;writer&lt;/span&gt; programmer a direct question, and he smiles and nods and then says &amp;#8220;Well!&amp;#8221; and turns and walks away without saying goodbye, he is actually working.&lt;br /&gt;&lt;br /&gt;

If a &lt;span style="text-decoration: line-through;"&gt;writer&lt;/span&gt; programmer is giving you a ride to the bus station and pulls up in front of the supermarket and turns to you and says, &amp;#8220;Enjoy your trip!,&amp;#8221; she is actually working.
&lt;/blockquote&gt;

&lt;p&gt;So if you&amp;#8217;re talking to me and something similar to the above happens, I apologize.  I&amp;#8217;m only working.&lt;/p&gt;</description>
      <pubDate>Wed, 24 Jun 2009 10:13:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:3b271ec0-782a-42a3-ab33-5765fd3fdde0</guid>
      <author>Ryan Baxter</author>
      <link>http://crunchlife.com/articles/2009/06/24/im-only-working</link>
      <category>Expect the Unexpected</category>
      <category>Programming</category>
    </item>
    <item>
      <title>Multiple Subversion Services on Windows</title>
      <description>&lt;p&gt;&lt;img src="/files/subversion.jpg" class="right"&gt;It&amp;#8217;s possible, but not often necessary, to run multiple instances of the &lt;a href="http://subversion.tigris.org/" target="_blank"&gt;Subversion&lt;/a&gt; service on Microsoft Windows.  At work, the source code of IT staff and Engineers is kept on two different servers with a third hosting Subversion.  Since one of our Engineering departments recently decided to test Subversion as their &lt;a href="http://en.wikipedia.org/wiki/Source_Code_Management" target="_blank"&gt;SCM&lt;/a&gt; system, I had to install an additional service to manage their repositories.&lt;/p&gt;

&lt;p&gt;I have a horrible time remembering the syntax for creating a Subversion service.  That said, I&amp;#8217;ve posted my worst case scenario for future reference.  The arguments include UNC paths, ports, and lots of slashes.  Next time, with the help of Google, I&amp;#8217;ll remember.  Oh, and if you&amp;#8217;re receiving a 1053 error, it may be that you need to run the service under an account with sufficient rights to the UNC path used as the root (-r) Subversion repository.&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;sc create svnserve_it binpath= &amp;quot;\&amp;quot;C:\Program Files\CollabNet Subversion Server\svnserve.exe\&amp;quot; --service -r \&amp;quot;\\ITFILESERVER\Repositories\&amp;quot; --listen-port 3690&amp;quot; displayname= &amp;quot;Subversion Server (IT)&amp;quot; depend= tcpip start= auto&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;sc create svnserve_engineering binpath= &amp;quot;\&amp;quot;C:\Program Files\CollabNet Subversion Server\svnserve.exe\&amp;quot; --service -r \&amp;quot;\\ENGFILESERVER\Repositories\&amp;quot; --listen-port 3691&amp;quot; displayname= &amp;quot;Subversion Server (Engineering)&amp;quot; depend= tcpip start= auto&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 10 Jun 2009 13:13:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:e212a326-066b-4523-a6fe-1f75c8a3c8b1</guid>
      <author>Ryan Baxter</author>
      <link>http://crunchlife.com/articles/2009/06/10/multiple-subversion-services-on-windows</link>
      <category>Code Snippets</category>
      <category>SCM</category>
      <category>SVN</category>
      <enclosure type="image/jpeg" length="21456" url="http://crunchlife.com/files/subversion.jpg"/>
    </item>
    <item>
      <title>Thank You, Mozilla!</title>
      <description>&lt;p&gt;&lt;img src="/files/phoenix.jpg" class="right"&gt;I&amp;#8217;ve been a devout Firefox user since &lt;a href="http://en.wikipedia.org/wiki/Firefox#History" target="_blank"&gt;Phoenix&lt;/a&gt;.  That is until this past week.  Tiring of its horrible CPU spikes and insatiable hunger for memory, I contemplated switching to Opera.  The only thing that kept me from making the transition was Opera&amp;#8217;s lack of an &lt;a href="http://www.xmarks.com/" target="_blank"&gt;Xmarks&lt;/a&gt; plug-in.  Not being able to use my favorite Bookmarks manager killed any hope of an alternate browser on my computers.&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;sudo rm -rf ~/lawn/kids*&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;99% CPU spikes and 350+ MB memory usage are unacceptable, but when using Firefox 3.0 they&amp;#8217;re an every day experience.  With all hope lost, I installed the latest &lt;a href="http://www.mozilla.com/en-US/firefox/all-beta.html" target="_blank"&gt;Firefox beta&lt;/a&gt;.  Since then, Firefox has yet to exceed 75% CPU utilization or consume more than 225 MB of memory.  All this, even while watching the latest high-def &lt;a href="http://www.youtube.com/watch?v=9ETLRnvup08&amp;amp;feature=fvsr" target="_blank"&gt;SWTOR cinematic trailer&lt;/a&gt; (which is awesome btw).  JavaScript heavy websites still consume resources, but with much less cost.  &lt;/p&gt;

&lt;p&gt;Years ago, I wouldn&amp;#8217;t have thought twice about installing a beta, but time has eroded my brazen disregard for a stable computer.  Firefox Beta 4 may not restore your youth, but it will reallocate your memory.  Thank you, Mozilla!&lt;/p&gt;</description>
      <pubDate>Tue, 09 Jun 2009 11:54:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:376083ff-ebb9-4f4d-8814-f2bd72d8dc1e</guid>
      <author>Ryan Baxter</author>
      <link>http://crunchlife.com/articles/2009/06/09/thank-you-mozilla</link>
      <category>Reviews</category>
      <category>Firefox</category>
      <category>www</category>
      <enclosure type="image/jpeg" length="30497" url="http://crunchlife.com/files/phoenix.jpg"/>
    </item>
    <item>
      <title>Linksys NAS200 Disk Failure - Part 2</title>
      <description>&lt;p&gt;A few weeks ago I began &lt;a href="http://crunchlife.com/articles/2009/02/25/linksys-nas200-disk-failure" target="_blank"&gt; having problems&lt;/a&gt; with my Linksys NAS200.  At the time, I couldn&amp;#8217;t discern whether it was a hard drive failure or a problem with the NAS200&amp;#8217;s disk controller.  The status message within the NAS200&amp;#8217;s administrative panel suggested that the drive had been &amp;#8220;removed&amp;#8221;.  I received no alert message and proceeded to diagnose the problem to the best of my abilities.  &lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/B001LDOJXE?ie=UTF8&amp;amp;tag=crunchlife-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B001LDOJXE"&gt;&lt;img border="0" src="/files/51-Bt7_X2PL._SL160_.jpg" class="right"&gt;&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=crunchlife-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B001LDOJXE" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;After some thought, I devised a plan to back up the remaining good disk, power down the NAS200, and replace Disk 1 with a new hard drive.  I purchased an &lt;a href="http://www.amazon.com/gp/product/B001LDOJXE?ie=UTF8&amp;amp;tag=crunchlife-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B001LDOJXE"&gt;Eagle Consus M-Series external drive enclosure&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=crunchlife-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B001LDOJXE" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;
 and a spare Western Digital 500 GB hard drive for a total of $102.95.  I placed the order last Saturday and UPS delivered the package to my door on the following Tuesday.&lt;/p&gt;

&lt;p&gt;Last night I backed up the files on my Linksys NAS200 using the Eagle drive enclosure and a spare 250 GB SATA drive that I had laying around.  Transferring the files from my NAS200 to the external drive was painful.  At speeds between 900 KB/sec and 1.9 MB/sec, I decided to make a sacrifice and chose not to include my music and movie collection.&lt;/p&gt;

&lt;p&gt;Even without my media files the backup still took about nine hours to complete.  It&amp;#8217;s almost inevitable that &lt;a href="http://crunchlife.com/articles/2008/09/21/2-0" target="_blank"&gt;my wife is awake at 3 AM&lt;/a&gt;.  Before bed, I asked her to wake me up so that I could check on the progress of the backup.  I didn&amp;#8217;t want to risk having the USB drive enclosure overheat and foil my plans.  My wife is more cheerful than I am at 3 o&amp;#8217;clock in the morning.  She woke me up as planned and I stumbled from the bedroom to sit on the floor in front of the NAS200.  The backup was complete.&lt;/p&gt;

&lt;p&gt;Do not attempt to insert a hard drive into your NAS200 in the dark.  Remember the &lt;a href="http://crunchlife.com/articles/2007/08/03/review-linksys-nas200" target="_blank"&gt;puzzling &amp;#8220;ribbon&amp;#8221;&lt;/a&gt; that I found in each of the drive bays?  Well, half of the ribbon is encased in plastic.  I didn&amp;#8217;t even think about it last night and ended up turning Disk 1&amp;#8217;s ribbon into an accordion.  In the dark, at 3 AM, I thought the drive was properly seated.  I turned on the device and waited.  The Disk 2 LED lit up brightly.  I waited some more.  Disk 1 remained dark.  My wife turned on our living room lights and found me squatting on the floor holding the NAS200 inches from my face.  Within the glow of the incandescents I could tell what I had just done.&lt;/p&gt;

&lt;p&gt;&lt;center&gt;&lt;img src="/files/ribbon_fail.jpg" title="FAIL!" class="photo"&gt;&lt;/center&gt;&lt;/p&gt;

&lt;p&gt;I had to shake the NAS200 (gently) to remove the disk that I had just securely wedged into the first drive bay.  Once the drive was removed I decided to try again in the morning.  With proper lighting and a few more hours of sleep, I carefully inserted the new drive and pressed the power button.  The NAS200 whirred and its lights began blinking.  Disk 2&amp;#8230; Disk 1&amp;#8230; Disk 1!  According to what I had previously read, The NAS200&amp;#8217;s disk LEDs alternate when mirroring.  My NAS200&amp;#8217;s lights were doing just that.&lt;/p&gt;

&lt;p&gt;After work I noticed that both disk lights were solid indicating that both drives were active.  I checked the NAS200&amp;#8217;s administrative panel and both drives were listed as &amp;#8220;Used by RAID 1&amp;#8221;.  Satisfied, I mounted the shares and proceeded to browse through my files.  Everything was there!&lt;/p&gt;

&lt;p&gt;My original &lt;a href="http://crunchlife.com/articles/2007/08/03/review-linksys-nas200" target="_blank"&gt;NAS200 review&lt;/a&gt; has over ninety comments and both the &lt;a href="http://forums.linksysbycisco.com/" target="_blank"&gt;Linksys community forums&lt;/a&gt; and &lt;a href="http://www.linksysinfo.org/" target="_blank"&gt;linksysinfo.org&lt;/a&gt; are filled with posts left by people inquiring about the device.  I&amp;#8217;ve read a lot of bad reviews and received quite a few disparaging comments regarding the reliability of the NAS200.  I bought it knowing it was new on the market.  Trusting the Linksys brand name, I figured it&amp;#8217;d be a sturdy device and for eighteen months it has been.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s just as foolish to rely on a single device as it is a single hard drive for safe file storage.  Hardware will always fail.  That said, I&amp;#8217;ve begun to work on an off-site storage strategy for my home backups.  I&amp;#8217;ll be posting more on this when I&amp;#8217;ve worked out the details.&lt;/p&gt;</description>
      <pubDate>Wed, 25 Mar 2009 16:27:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:ba5fdaeb-59d1-4ab4-bf6e-c5759c2b5e42</guid>
      <author>Ryan Baxter</author>
      <link>http://crunchlife.com/articles/2009/03/25/linksys-nas200-disk-failure-part-2</link>
      <category>Expect the Unexpected</category>
      <category>Backups</category>
      <category>NAS</category>
      <category>Oops</category>
      <trackback:ping>http://crunchlife.com/articles/trackback/95</trackback:ping>
    </item>
    <item>
      <title>Linksys NAS200 Disk Failure</title>
      <description>&lt;p&gt;After 18 months of abuse, &lt;a href="http://crunchlife.com/articles/2007/08/03/review-linksys-nas200" target="_blank"&gt;my NAS200&lt;/a&gt; finally lost a hard drive. I heard a muffled beep this evening while working on a new design for this website. Thinking it was one of my daughter&amp;#8217;s many noisy toys, I dismissed the alarm and continued working.  About an hour ago I attempted to save my work to a share on the NAS200, but was greeted with this rather ambiguous error message.&lt;/p&gt;

&lt;div style="text-align: center;"&gt;
&lt;img src="/files/nas_error.png"&gt;
&lt;/div&gt;

&lt;p&gt;I could ping the device, but browsing to its administrative website resulted in a 404 error.&lt;/p&gt;

&lt;p&gt;The NAS200&amp;#8217;s power and Disk 2 lights were blinking in alternation. The Disk 1 indicator was not lit at all. My heart sank at this point. So I next did what all IT professionals do when disaster strikes. I hit the power button and said a small prayer. Unfortunately, my NAS200 would not shut down. I yanked its power cord from the wall, let it cool down, and plugged it back in. As the NAS200 powered up, its fan whirred and lights began blinking.&lt;/p&gt;

&lt;p&gt;After reboot, the NAS200&amp;#8217;s lights blinked in the same pattern as before, but this time I decided to wait a few minutes rather than have a panic attack. During this time the ACT light flickered rapidly for about 10 minutes.  When it finally went out, the power and Disk 2 lights stayed lit, but Disk 1 remained dark. At this point I was able to browse to the administrative website and view Disk 1&amp;#8217;s status. The drive appeared to be &amp;#8220;removed&amp;#8221;. Huh?&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m perplexed as to what this means. I did not receive a hardware failure e-mail and the &amp;#8220;removed&amp;#8221; status makes me think that the controller has failed rather than the disk itself.  Hmmm&amp;#8230; Disk 2 is still accessible so my plan is to back it up as quickly as possible and then proceed as if I&amp;#8217;m dealing with a disk failure. Wish me luck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;*Update: The second part of this article can be found &lt;a href="http://crunchlife.com/articles/2009/03/25/linksys-nas200-disk-failure-part-2"&gt;here&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 25 Feb 2009 19:58:00 -0800</pubDate>
      <guid isPermaLink="false">urn:uuid:14e3cd72-3e2d-4bc6-8b61-1483a8b38713</guid>
      <author>Ryan Baxter</author>
      <link>http://crunchlife.com/articles/2009/02/25/linksys-nas200-disk-failure</link>
      <category>Expect the Unexpected</category>
      <category>NAS</category>
      <category>Oops</category>
      <enclosure type="image/png" length="16506" url="http://crunchlife.com/files/nas_error.png"/>
    </item>
  </channel>
</rss>

