<?xml version='1.0' encoding='utf-8' ?>
<rss version='2.0'>
  <channel>
    <title>Antarestrader Blog Posts</title>
    <link>http://blog.antarestrader.com/</link>
    <description>A blog about ruby, web development and the development of AntaresTrader a game of comerice and economic domination set among the stars.</description>
    <language>en-us</language>
    <copyright>Copyright 2007-2010 John F. Miller.</copyright>
    <pubDate>Fri, 30 Jul 2010 12:24:00 -0000</pubDate>
    <managingEditor>emperor@antarestrader.com</managingEditor>
    <webMaster>emperor@antarestrader.com</webMaster>
    <generator>Blog -- Ruby blogging software by John F. Miller.  http://github.com/startrader/Blog</generator>
    <ttl>240</ttl>
    <item>
      <title>On the Nature of Time and Computation</title>
      <link>http://blog.antarestrader.com/posts/160</link>
      <description>
        &lt;p&gt;Part of the joy of being a hobby programmer is that I can afford to get sidetracked by all the cool things that &quot;real world&quot; hackers have to put on the back burner because there is paying work.  (Not that I wouldn't take a paying gig mind you)  One of those side tracks is language design, specifically as it relates to parallel computation.  That why I was so interested in the video of Rich Hickey's talk from the JVM Language Summit:&lt;/p&gt;
        
        &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;a href=&quot;http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey/?q=RichHickey&quot;&gt;Are We There Yet?&lt;/a&gt;&lt;/em&gt;. Rick Hickey. JVM Language Summit, Nov 12, 2009.&lt;/strong&gt;&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/160&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Mon, 10 May 2010 12:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Mongoid vs MongoMapper</title>
      <link>http://blog.antarestrader.com/posts/159</link>
      <description>
        &lt;p&gt;Lets start with the obvious: &lt;a href=&quot;http://www.mongodb.org/&quot;&gt;MongoDB&lt;/a&gt; (&lt;a href=&quot;http://www.mongodb.org/display/DOCS/Ruby+Language+Center#RubyLanguageCenter-RubyDriver&quot;&gt;Ruby Driver&lt;/a&gt;) hits the sweet spot in the NoSQL field for web apps.  It has more flexibility then a traditional RDMS and scales horizontally with relative ease, but it is also more user friendly then key/value stores which require you to implement by hand many of the features one might take for granted, like indexes and queries.&lt;br/&gt;
        &lt;/p&gt;
        
        &lt;p&gt;Having said this, there is still a need for an ORM layer if one wants to create the model layer efficiently.  In this post I am going to relate my experience with the two most popular &lt;a href=&quot;http://mongoid.org/&quot;&gt;Mongoid&lt;/a&gt; by &lt;a href=&quot;http://hashrocket.com/people/view/durran-jordan/&quot;&gt;Durran Jordan&lt;/a&gt; and &lt;a href=&quot;http://mongomapper.com/&quot;&gt;MongoMapper&lt;/a&gt; by &lt;a href=&quot;http://railstips.org/about/&quot;&gt;John Nunemaker&lt;/a&gt;.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/159&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Tue, 04 May 2010 03:04:00 +0000</pubDate>
    </item>
    <item>
      <title>Set the Process Name</title>
      <link>http://blog.antarestrader.com/posts/158</link>
      <description>
        &lt;p&gt;Just a quickie derived from my experience with Updater.  It is blindingly simple to set the process name in ruby, just set &lt;code&gt;$0&lt;/code&gt; to the appropriate string.  Dave Thomas does an excellent job of explaining why this might be an &lt;a href=&quot;http://pragdave.blogs.pragprog.com/pragdave/2008/11/trivial-request-logging-for-rails.html&quot;&gt;incredibly useful&lt;/a&gt; thing to do.  You can then see this name in the list of processes from &lt;code&gt;top&lt;/code&gt;, though I had to use the '&lt;code&gt;c&lt;/code&gt;' command, and &lt;code&gt;ps -f&lt;/code&gt;.&lt;/p&gt;
        
        &lt;p&gt;I have rake tasks for updater, and with this I can get a much more useful output then 12 instance of rake.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/158&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Sun, 28 Mar 2010 01:35:37 +0000</pubDate>
    </item>
    <item>
      <title>Released: Updater v0.9.0</title>
      <link>http://blog.antarestrader.com/posts/157</link>
      <description>
        &lt;p&gt;Updater is my background job queue processor. (&lt;a href=&quot;http://github.com/antarestrader/Updater&quot;&gt;GitHub Repository&lt;/a&gt;)  It works a bit like delayed_job or rescue.  While it is intended to work with a number of different ORM layers, at the moment only DataMapper is implemented. Native support for MongoDB and ActiveRecord are planed.  Get it on &lt;a href=&quot;http://gemcutter.org&quot;&gt;GemCutter&lt;/a&gt; with &lt;code&gt;gem install updater&lt;/code&gt;.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/157&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Fri, 26 Mar 2010 21:59:08 +0000</pubDate>
    </item>
    <item>
      <title>Clearing the Connection Pool in DataMapper</title>
      <link>http://blog.antarestrader.com/posts/155</link>
      <description>
        &lt;p&gt;This is one of those thing that I spent too long Googling for and wishing that someone else had written this post.  For a number of different adapters, DataObject (the datastore abstraction layer of DataMapper) creates a pool of up to 8 connections to the database server.  This pool is thread safe, but not safe across processes when using &lt;code&gt;fork&lt;/code&gt;.  In this case, one needs to empty the pool before forking.  A chat an the IRC channel reviled that this also may be useful if you are getting too many connections.  To empty all connection pools:&lt;/p&gt;
        
        &lt;pre&gt;&lt;code&gt;#!/ruby
        DataObjects::Pooling.pools.each do {|pool| pool.dispose}
        &lt;/code&gt;&lt;/pre&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/155&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Tue, 23 Mar 2010 12:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Repository Change</title>
      <link>http://blog.antarestrader.com/posts/154</link>
      <description>
        &lt;p&gt;My GitHub repository has moved from &lt;code&gt;startrader&lt;/code&gt; to &lt;code&gt;antarestrader&lt;/code&gt;.  please update your remotes if you have them pointed at the old repository.  To do this edit you .git/config file and change the line that says startrader to antarestrader.  eg:&lt;/p&gt;
        
        &lt;pre&gt;&lt;code&gt;[remote &quot;github&quot;]
            url = git://github.com/startrader/Updater.git
            fetch = +refs/heads/*:refs/remotes/github/*
        
        becomes
        
        [remote &quot;github&quot;]
            url = git://github.com/antarestrader/Updater.git
            fetch = +refs/heads/*:refs/remotes/github/*
        &lt;/code&gt;&lt;/pre&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/154&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Mon, 22 Mar 2010 12:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Updater Progress Report</title>
      <link>http://blog.antarestrader.com/posts/156</link>
      <description>
        &lt;p&gt;Even though Holy Week is fast approaching and I will be tied up with real world work, I have still made quite a bit of progress on Updater.  Everything else is taking a back seat at the moment because I need this library for everything else I want to do. There are just a few more things to do before I will put out a 1.0 release.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/156&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Sun, 21 Mar 2010 05:51:17 +0000</pubDate>
    </item>
    <item>
      <title>Socket In Brief, For Ruby</title>
      <link>http://blog.antarestrader.com/posts/153</link>
      <description>
        &lt;p&gt;This post is mainly for my reference, but someone is else is going to be looking for this information.  This post is about how to use the low lever socket layer of ruby.  in particular it is about how to get to a point where one can read and write over the connection.  It covers the three major types sockets: UNIX, UDP and TCP.  Most of the information here can be extracted for &lt;a href=&quot;http://oreilly.com/catalog/ruby/chapter/ch04.html&quot;&gt;this page&lt;/a&gt;.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/153&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Sat, 20 Mar 2010 01:09:15 +0000</pubDate>
    </item>
    <item>
      <title>Towards a Better Queue Processing Model</title>
      <link>http://blog.antarestrader.com/posts/152</link>
      <description>
        &lt;p&gt;My current short-term area of interest is in background job queues such as &lt;a href=&quot;http://github.com/blog/542-introducing-resque&quot;&gt;Resque&lt;/a&gt; (&lt;a href=&quot;http://github.com/defunkt/resque&quot;&gt;Git Hub Repository&lt;/a&gt;), &lt;a href=&quot;http://github.com/tobi/delayed_job&quot;&gt;Delayed_job&lt;/a&gt; and my own contribution &lt;a href=&quot;http://github.com/antarestrader/Updater&quot;&gt;Updater&lt;/a&gt;.  So when I ran across &lt;a href=&quot;http://blog.kabisa.nl/2010/03/16/dynamic-queue-assignment-for-resque-jobs/&quot;&gt;this article&lt;/a&gt; about dynamically assigning jobs to queues it got me thinking about why there is a need for different queues, and how jobs get organized.  I realized that it is part of the problem I am trying to solve in Updater.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/152&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Wed, 17 Mar 2010 19:43:14 +0000</pubDate>
    </item>
    <item>
      <title>How to Make News Profitable Again</title>
      <link>http://blog.antarestrader.com/posts/151</link>
      <description>
        &lt;p&gt;This is a follow-up to &lt;a href=&quot;(/posts/150)&quot;&gt;this resent post&lt;/a&gt;.&lt;/p&gt;
        
        &lt;p&gt;Selling news is not at this point a profitable long term business. News organizations large and small are laying off staff, or closing, and I, for one, am saddened.  The quality and diversity of news coverage has dropped.  In the late '90s I was a college student at Cal Poly SLO. My work study job was at the current periodicals desk in the library where I worked the weekend shift.  Any one want to guess what the volume of patrons was at 2:00pm Saturday afternoon?  When I was not helping patrons, I read some of the 25 or so newspapers we subscribed to, along with a number of weekly and most of the articles in the science and physics journals.&lt;br/&gt;
        &lt;/p&gt;
        
        &lt;p&gt;The differences between then and now are that I cannot find a job that pays me to read for 12 hours a week, and even if I could there would be nothing worth reading.  Daily newspapers are filled with the same dozen or so wire service articles, interspersed with reprints of press releases and highlights from police logs dressed up as real reporting.  What I used to love about print publications, in-depth, local reporting is gone with the loss of ad review and with it the loss of readership.&lt;/p&gt;
        
        &lt;p&gt;In this post I want to look at why there is no market for news today, and some of the ways I think good reporting can start t generate profits again.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/151&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Mon, 15 Mar 2010 03:25:10 +0000</pubDate>
    </item>
    <item>
      <title>On the State of Ad Blockers</title>
      <link>http://blog.antarestrader.com/posts/150</link>
      <description>
        &lt;p&gt;Ars Technica's Ken Fisher recently penned an article about &lt;a href=&quot;http://arstechnica.com/business/news/2010/03/why-ad-blocking-is-devastating-to-the-sites-you-love.ars&quot;&gt;Why Ad Blocking is devastating to the sites you love&lt;/a&gt;.  As an avid Ars Technica reader (via their RSS feed) I take an interest in the health of the site, and as a user of &lt;a href=&quot;http://adblockplus.org/en/&quot;&gt;Ad Block Plus&lt;/a&gt; I am just just the kind of user to which Fisher is speaking.  Here is why I still block ads.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/150&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Tue, 09 Mar 2010 03:34:18 +0000</pubDate>
    </item>
    <item>
      <title>SureWest Brings the Fiber for Less</title>
      <link>http://blog.antarestrader.com/posts/149</link>
      <description>
        &lt;p&gt;With the FCC considering the rules for the next decade of internet access, I wanted to put in my two-cents about &lt;a href=&quot;http://surewest.net&quot;&gt;SureWest Communications&lt;/a&gt;.  They have just hooked me up with a Fiber Optice 3Mbps connection for about the same as AT&amp;amp;T wanted to charge for 768Kbps and for less then a third of Comcast's asking price for the same speed.  If you have not heard of SureWest, it is because they are only in two places in the country, and I just happen to be lucky enough to live in one of them. Because of this I don't have to deal with stealth filtering (Comcast) degraded ssl connections (Comcast and AT&amp;amp;T) and less then half of advertised speed (AT&amp;amp;T).  The real point here is that much faster higher quality internet can be delivered at the current price point.  When AT&amp;amp;T wants the FCC to call 350Kbps highspeed and Comcast says that they need filtering to maintain quality, the FCC needs to point to SureWest and ask why they can do it.&lt;br/&gt;
        &lt;/p&gt;
        
        &lt;p&gt;Here's to more competition in the ISP market place!&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/149&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Tue, 16 Feb 2010 12:00:00 +0000</pubDate>
    </item>
    <item>
      <title>No cattr_accessor Blame Rails 3</title>
      <link>http://blog.antarestrader.com/posts/148</link>
      <description>
        &lt;p&gt;Here is another one of those head scratching moments that makes a lot of sense once you know what is going on.  If you have installed the Rails 3 pre release, you may have inadvertently broken a number of gems that depend on ActiveSupport.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/148&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Sun, 14 Feb 2010 23:48:06 +0000</pubDate>
    </item>
    <item>
      <title>New Digs Means No Nets</title>
      <link>http://blog.antarestrader.com/posts/147</link>
      <description>
        &lt;p&gt;Your humble and not very consistent author has survived the Christmas Rush and the purchase of our first home with very few social causalities.  One of these few has been blogging. SureWest is going to come and hook up my fiber connection on Friday, until then I am at the mercy of places that advertise &quot;Free Wifi&quot; but don't actually have a live connection. (I'm looking at you &lt;a href=&quot;http://www.labou.com/&quot;&gt;LaBou Bakery&lt;/a&gt; of S.Natomas)&lt;/p&gt;
        
        &lt;p&gt;This doesn't mean I haven't been hacking.  I have started working with Mongo and MongoMapper both of which are really cool and deserve a post written with out the distraction of a fast food joint.  I'm also looking at Redis.  These alternatives to SQL databases make the complex data relations found in Antares Trader much easier.&lt;br/&gt;
        &lt;/p&gt;
        
        &lt;p&gt;I'm also enjoying learning from the folks at the Sacramento Ruby Meet-up.  More will flow from this blog.&lt;/p&gt;
        
        &lt;p&gt;Finally, I'm starting on Rails 3 sence I know that it will be the version I will want to which I will port Antares Trader.  I thought Merb was great, but it will also be nice to be back in the main stream again.&lt;/p&gt;
        
        &lt;p&gt;More will flow from this blog.  Hopefully starting Friday&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/147&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Mon, 08 Feb 2010 20:39:35 +0000</pubDate>
    </item>
    <item>
      <title>Some Thoughts on Work Queues</title>
      <link>http://blog.antarestrader.com/posts/146</link>
      <description>
        &lt;p&gt;Github has recently posted &lt;a href=&quot;http://github.com/blog/542-introducing-resque&quot;&gt;a wonderful article&lt;/a&gt; about their history with job queues.  It is a superb read and I recomend looking both at it and the &lt;a href=&quot;http://github.com/defunkt/resque#readme&quot;&gt;README&lt;/a&gt; file for Resque, GitHub's new Redis back job queue.  It is replacing the venerable &lt;a href=&quot;http://github.com/tobi/delayed_job/&quot;&gt;delayed_job&lt;/a&gt;.  In this post I am going to briefly look at some of the concepts of Worker Queues in an attempt to better explain my hopes for &lt;a href=&quot;http://github.com/startrader/Updater&quot;&gt;Updater&lt;/a&gt;, my delayed_job clone for DataMapper.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/146&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Wed, 04 Nov 2009 03:36:38 +0000</pubDate>
    </item>
    <item>
      <title>Factory Girl: Continued DataMapper Compatibility</title>
      <link>http://blog.antarestrader.com/posts/145</link>
      <description>
        &lt;p&gt;The &lt;a href=&quot;http://github.com/thoughtbot/factory_girl&quot;&gt;&lt;code&gt;factory_girl&lt;/code&gt;&lt;/a&gt; Gem is a great tool for creating &lt;em&gt;valid&lt;/em&gt; test instances on the fly.  There are lots of posts about why this is &lt;em&gt;so&lt;/em&gt; much better then fixtures.  Unfortunately for us DataMapper fans, the official version is not quite compatible with our favorite ORM.  I've done my best to remedy that situation.  There is now a &lt;a href=&quot;http://github.com/startrader/factory_girl&quot;&gt;fork of factory_girl&lt;/a&gt; that I have made mostly compatible with &lt;em&gt;both&lt;/em&gt; DataMapper and ActiveRecord.  You can also pull the gem from GemCutter as &lt;a href=&quot;http://gemcutter.org/gems/dm-factory_girl&quot;&gt;dm-factory_girl&lt;/a&gt;.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/145&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Sun, 25 Oct 2009 05:44:34 +0000</pubDate>
    </item>
    <item>
      <title>Updater: The Story of a Gem</title>
      <link>http://blog.antarestrader.com/posts/144</link>
      <description>
        &lt;p&gt;The &lt;a href=&quot;/posts/136&quot;&gt;game loop&lt;/a&gt; is an essential part of what makes a game work.  To implement one for Antares Trader, I wrote a class that would repeatedly call the &lt;code&gt;update&lt;/code&gt; method on DataMapper resources.  It was a quick hack that got my mini-game &lt;a href=&quot;/post/16&quot;&gt;sketches&lt;/a&gt; working.  Eventually, I needed to pull the code out from under the web server and give it it's own process.  For a while it was just a class in the lib directory.  Eventually, updater grew to need it's own table in the database and now there was Updater code in too many different places.&lt;/p&gt;
        
        &lt;p&gt;At this point I went looking for a better solution.  I picked up &lt;a href=&quot;http://github.com/tobi/delayed_job&quot;&gt;delayed_job&lt;/a&gt; and liked what I saw.  It did a lot of what I needed.  It had a cool API, and GitHub used it so I knew that it had been tested in the real world.  On the other hand there were a couple of features missing, and more importantly, it depended on ActiveRecord. So it was back to Updater.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/144&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Fri, 23 Oct 2009 01:34:48 +0000</pubDate>
    </item>
    <item>
      <title>Factory Girl Patch for Continued DataMapper Compatibility</title>
      <link>http://blog.antarestrader.com/posts/143</link>
      <description>
        &lt;p&gt;The &lt;a href=&quot;http://github.com/thoughtbot/factory_girl&quot;&gt;Factory Girl gem&lt;/a&gt; from thoughtbot is the way to go if you have to test ORM classes.  It has been &lt;a href=&quot;http://railscasts.com/episodes/158-factories-not-fixtures&quot;&gt;featured&lt;/a&gt; in &lt;a href=&quot;http://railscasts.com/&quot;&gt;Ryan Bates Railscast&lt;/a&gt;, and by good fortune, it also works with DataMapper, my ORM of choice.  When I upgraded to the latest release of DataMapper however, all my user tests broke. in particular the &lt;code&gt;crypted_password&lt;/code&gt; and &lt;code&gt;salt&lt;/code&gt; fields were not being set when the record was saved.  I'm using the salted password mixin from Merb and I assumed that it was to blame having not gotten up to speed with some of the new API changes in DataMapper.  It turned out instead to be an incompatibility between Factory Girl and Datamapper that had existed for a long time but was now showing up.  I've modified factory girl to maintain compatibility and my changes are at &lt;a href=&quot;http://github.com/startrader/factory_girl&quot;&gt;http://github.com/startrader/factory_girl&lt;/a&gt;.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/143&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Sat, 26 Sep 2009 00:56:22 +0000</pubDate>
    </item>
    <item>
      <title>Finally a work around for IE</title>
      <link>http://blog.antarestrader.com/posts/142</link>
      <description>
        &lt;p&gt;Internet Explorer is the bane of every web developer's existence.  Google being the one of the largest web content producers finally got fed up and has developed a work around for everything that is wrong with IE.  They have developed a browser &lt;a href=&quot;http://blog.chromium.org/2009/09/introducing-google-chrome-frame.html&quot;&gt;plug-in&lt;/a&gt; that completely guts IE and replaces its rendering engine with Google Chrome.  The &lt;a href=&quot;http://blog.chromium.org/2009/09/introducing-google-chrome-frame.html&quot;&gt;Google Chrome Frame&lt;/a&gt; looks like a great way to reach all the cooperate users and grandmas that cannot or will not upgrade to a new browser.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/142&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Fri, 25 Sep 2009 12:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Making Games Engaging: The Reward Cycle</title>
      <link>http://blog.antarestrader.com/posts/141</link>
      <description>
        &lt;p&gt;In my &lt;a href=&quot;/posts/163&quot;&gt;last game related post&lt;/a&gt; I wrote about the mechanics of making a game work.  Just because a game works does not mean it is enjoyable to play.  In this post I am going to talk about the reward cycle and why some games are so addictive and other either get boring, or were never fun to begin with.&lt;/p&gt;
        
        &lt;p&gt;The key concept her is the action-reward cycle. A player makes a decision and then gets some feedback on that decision.  Good decisions get rewards while poor ones are either ignored or reduce future rewards. The thing that makes a game fun to play is the balance and value of these rewards.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/141&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Thu, 24 Sep 2009 00:00:49 +0000</pubDate>
    </item>
    <item>
      <title>Language Comparison Example Stink</title>
      <link>http://blog.antarestrader.com/posts/140</link>
      <description>
        &lt;p&gt;Is &lt;a href=&quot;http://www.randomhacks.net/articles/2005/12/03/why-ruby-is-an-acceptable-lisp#repost&quot;&gt;Ruby better the Lisp&lt;/a&gt;?  There are lots of ways and reasons to answer questions like this.  Some people rightly find the argument banal sense there are so many different values and reasons at play.  I personally enjoy such comparisons.  The give me a view of how other people code, and different things that can be done in different ways.&lt;/p&gt;
        
        &lt;p&gt;My problem is that so often the examples that are chosen show me nothing.  They are so small as that they are almost pointless, and if I haven't ever seen something done before, I have no clue why I'd want to do it.  My opinion is that articles like this should have one small, but useful example written in both languages.  This example should actually solve a problem someone might care about, and it should not be the key idea of either language.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/140&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Mon, 21 Sep 2009 12:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Thoughts on using Cucumber Tags</title>
      <link>http://blog.antarestrader.com/posts/138</link>
      <description>
        &lt;p&gt;Cucumber is an acceptance testing framework that lets you and your clients write our requirements as short stories and then test those stories fro compliance.  Those familiar with it will know that you can tag a scenario by placing putting labels precede by the &lt;code&gt;@&lt;/code&gt; sign on the line imminently before the scenario starts.  There are a number of different uses for these tags.  They can sort features by priority or developer, or they can designate in what version the feature is likely to appear.&lt;/p&gt;
        
        &lt;p&gt;As a one-man-band, I don't need quite that level of organization.  But I do use three tags that help me keep my development clean. I do however label all my scenarios as &lt;code&gt;@pending&lt;/code&gt;, &lt;code&gt;@current&lt;/code&gt; or &lt;code&gt;@passing&lt;/code&gt;.  I can then use the &lt;code&gt;-t&lt;/code&gt; flag to choose which tags to run.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/138&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Thu, 17 Sep 2009 12:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Progress Report: JZForm, Minigame, Comments</title>
      <link>http://blog.antarestrader.com/posts/139</link>
      <description>
        &lt;p&gt;JZForm is a side project I've been working on.  Its aim is to provide a DSL for html forms and input in general.  After a week of picking at it I'm setting it aside again because it is sapping my energy without showing much progress.  The problem is, I really don't know what I want.  I have some general ideas, but the API continues to be overly complex while the output is too amorphous to provide a clear path forward.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/139&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Wed, 16 Sep 2009 15:45:04 +0000</pubDate>
    </item>
    <item>
      <title>Quick Tip for Git Users: Touch .nil</title>
      <link>http://blog.antarestrader.com/posts/135</link>
      <description>
        &lt;p&gt;Users of Git will know that it refuses to story an empty directory.  When one is trying to check in a generated project with a bunch of empty directories this can lead to confusion.  It can also bite when you expect a directory to exist, but don't want to put it's contents under version control.  ('&lt;code&gt;/log&lt;/code&gt;' for example).&lt;/p&gt;
        
        &lt;p&gt;The way I have found to fix this is to &lt;code&gt;touch &amp;lt;directory&amp;gt;/.nil&lt;/code&gt; This creates an empty hidden file in the directory that you can add to a git repository.  It would be nice if there was a way to add empty trees, unless and until that happens this will save you a few minutes when you go to deploy and find you cannot open your log files.&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/135&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Thu, 10 Sep 2009 12:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Sake and Rake Get in a Bar Fight</title>
      <link>http://blog.antarestrader.com/posts/137</link>
      <description>
        &lt;p&gt;The latest version of &lt;code&gt;rake&lt;/code&gt; is not playing nicely with the &lt;code&gt;sake&lt;/code&gt;.  There is a &lt;a href=&quot;https://err.lighthouseapp.com/projects/466/tickets/246-sake-fails-on-rake-082&quot;&gt;lighthouse ticket&lt;/a&gt; that explains in more detail what is going on, but the summery is rake complaining &lt;code&gt;can't convert true into String&lt;/code&gt;.  There is a &lt;a href=&quot;https://err.lighthouseapp.com/projects/466/tickets/246/a/50325/sake_rake_0.8.2.patch&quot;&gt;patch that need to be applied to &lt;code&gt;sake&lt;/code&gt;&lt;/a&gt;.  I had to do this by hand because my directory structure did not match the patch.  It is a really easy one liner.  Below I've listed both the error and the patch:&lt;/p&gt;
        &lt;p&gt;&lt;a href=&quot;http://blog.antarestrader.com/posts/137&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;
      </description>
      <author>emperor@antarestrader.com</author>
      <guid isPermaLink='false'>tag:blog.antarestrader.com,2009:/post_id/</guid>
      <pubDate>Thu, 10 Sep 2009 02:18:27 +0000</pubDate>
    </item>
  </channel>
</rss>
