<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Launchpad</title>
    <link>http://launchpad.rocketjumpindustries.com</link>
    <description>The Launchpad by Rocket Jump</description>
    <language>en-us</language>
    <copyright>Copyright 2009, Rocket Jump Industries</copyright>
    <pubDate>Sat, 15 Jan 2011 03:35:57 -0500</pubDate>
    <lastBuildDate>Sat, 15 Jan 2011 03:35:57 -0500</lastBuildDate>
    <ttl>30</ttl>
    <item>
      <title>Dynamic databases for Git branches in Ruby on Rails</title>
      <link>http://launchpad.rocketjumpindustries.com/posts/10-dynamic-databases-for-git-branches-in-ruby-on-rails</link>
      <description>&lt;p&gt;Branching is a great way to play with your code without risking the quality of your code.  Many times when doing Rails development, I end up with branches that have slightly unique database schemas between them.  This introduces a problem when you&amp;#8217;re actively switching between branches and your development database is constantly out-of-sync.  The best way that I&amp;#8217;ve found to combat this problem is by creating a dynamic database configuration.&lt;/p&gt;</description>
      <author>Nathaniel</author>
      <pubDate>Wed, 12 Aug 2009 21:41:55 +0000</pubDate>
      <comments>http://launchpad.rocketjumpindustries.com/posts/10-dynamic-databases-for-git-branches-in-ruby-on-rails#comments</comments>
      <guid>http://launchpad.rocketjumpindustries.com/posts/10-dynamic-databases-for-git-branches-in-ruby-on-rails</guid>
    </item>
    <item>
      <title>Gem Specification Spam</title>
      <link>http://launchpad.rocketjumpindustries.com/posts/9-gem-specification-spam</link>
      <description>&lt;p&gt;The &lt;a href=&quot;http://rubygems.org/read/chapter/20&quot; class=&quot;outgoing&quot; title=&quot;rubygems.org&quot;&gt;Gem specification&lt;/a&gt; provides information about a Ruby Gem library, including title, description, author, and author email address, among many other things.  The email address is an optional value, according to the specification, but most gem builders add it by default.&lt;/p&gt;
&lt;p&gt;In my case, I generally do provide an email address in those specs which point to an inbox used solely for gems &amp;#8211; which is to say, never used.  Today, I&amp;#8217;m happy to announce that I received my first spam message to it.  I&amp;#8217;ve been wondering just how long it would take for someone to start harvesting those specs for spam&amp;#8230; and now I have my answer.&lt;/p&gt;</description>
      <author>Nathaniel</author>
      <pubDate>Mon, 06 Apr 2009 16:56:36 +0000</pubDate>
      <comments>http://launchpad.rocketjumpindustries.com/posts/9-gem-specification-spam#comments</comments>
      <guid>http://launchpad.rocketjumpindustries.com/posts/9-gem-specification-spam</guid>
    </item>
    <item>
      <title>The Importance of 3rd Party Abstraction</title>
      <link>http://launchpad.rocketjumpindustries.com/posts/8-the-importance-of-abstraction</link>
      <description>&lt;p&gt;Often times when I come into an existing project, or even come back to a project I&amp;#8217;ve been maintaining for a long time, I&amp;#8217;m reminded of the importance of third party abstraction.&lt;/p&gt;
&lt;p&gt;This type of abstraction provides your application with an insulation layer, a warm blanket if you will, against uncontrollable changes within the code which you do not directly maintain.&lt;/p&gt;</description>
      <author>Nathaniel</author>
      <pubDate>Sun, 05 Apr 2009 02:33:24 +0000</pubDate>
      <comments>http://launchpad.rocketjumpindustries.com/posts/8-the-importance-of-abstraction#comments</comments>
      <guid>http://launchpad.rocketjumpindustries.com/posts/8-the-importance-of-abstraction</guid>
    </item>
    <item>
      <title>Public Service Announcement: Rails 2.3 is incompatible with Passenger 2.0.x and under</title>
      <link>http://launchpad.rocketjumpindustries.com/posts/7-public-service-announcement-rails-2-3-is-incompatible-with-passenger-2-0-x-and-under</link>
      <description>&lt;p&gt;&lt;a href=&quot;http://www.modrails.com/&quot; class=&quot;outgoing&quot; title=&quot;modrails.com&quot;&gt;Phusion Passenger&lt;/a&gt; version 2.0.x and under are incompatible with Rails 2.3.&amp;#215;.  This is a public service announcement to remind you to upgrade your application server in the event of a Rails upgrade.&lt;/p&gt;</description>
      <author>Nathaniel</author>
      <pubDate>Wed, 25 Mar 2009 15:38:04 +0000</pubDate>
      <comments>http://launchpad.rocketjumpindustries.com/posts/7-public-service-announcement-rails-2-3-is-incompatible-with-passenger-2-0-x-and-under#comments</comments>
      <guid>http://launchpad.rocketjumpindustries.com/posts/7-public-service-announcement-rails-2-3-is-incompatible-with-passenger-2-0-x-and-under</guid>
    </item>
    <item>
      <title>Exceptional knowledge content hosted by Google</title>
      <link>http://launchpad.rocketjumpindustries.com/posts/6-exceptional-knowledge-content-hosted-by-google</link>
      <description>&lt;p&gt;I stumbled across &lt;a href=&quot;http://knol.google.com&quot; class=&quot;outgoing&quot; title=&quot;knol.google.com&quot;&gt;knol&lt;/a&gt; today and found some exceptional user generated content.  Take, for example, this &lt;a href=&quot;http://knol.google.com/k/leon-starr/how-to-build-articulate-uml-class-models/2hnjef6cmm97l/4&quot; class=&quot;outgoing&quot; title=&quot;knol.google.com&quot;&gt;this article&lt;/a&gt; on How to Build Articulate &lt;span class=&quot;caps&quot;&gt;UML&lt;/span&gt; Class Models.  It is well written, contains awesome diagrams, and a wonderful overall explanation.  Leon Starr (the author) put in an incredible amount of effort and produced a truly great tutorial.&lt;/p&gt;</description>
      <author>Nathaniel</author>
      <pubDate>Thu, 19 Mar 2009 18:01:47 +0000</pubDate>
      <comments>http://launchpad.rocketjumpindustries.com/posts/6-exceptional-knowledge-content-hosted-by-google#comments</comments>
      <guid>http://launchpad.rocketjumpindustries.com/posts/6-exceptional-knowledge-content-hosted-by-google</guid>
    </item>
    <item>
      <title>Defining a dynamic page cache loction by subdomain in Rails</title>
      <link>http://launchpad.rocketjumpindustries.com/posts/5-defining-a-dynamic-page-cache-loction-by-subdomain-in-rails</link>
      <description>&lt;p&gt;Ruby on Rails gives you the ability to customize your page cache directory by specifying a &lt;code&gt;config.action_controller.page_cache_directory&lt;/code&gt; in your environment configuration.  For the purpose of this example, I&amp;#8217;ll set mine to &lt;code&gt;File.join(RAILS_ROOT, '/public/cache/')&lt;/code&gt;.  It is in this directory that a new file will be created for each cached action request.  Subsequently &amp;#8211; only if your web server is configured properly &amp;#8211; these static files will be served thereafter for each request.  Page caching represents the best and fastest cache mechanism available in Rails since once the cache is created, Rails is no longer used at all.&lt;/p&gt;
&lt;p&gt;There is however a catch with the &lt;code&gt;page_cache_directory&lt;/code&gt;.  It is a static class-level variable.  That means, you cannot have it act dynamically based on any individual user or client request.  So, if you&amp;#8217;re building a multi-tenant application, where the content is unique to each subdomain requested, how do you properly separate (or segregate or silo) those cached files?&lt;/p&gt;</description>
      <author>Nathaniel</author>
      <pubDate>Thu, 19 Mar 2009 15:00:46 +0000</pubDate>
      <comments>http://launchpad.rocketjumpindustries.com/posts/5-defining-a-dynamic-page-cache-loction-by-subdomain-in-rails#comments</comments>
      <guid>http://launchpad.rocketjumpindustries.com/posts/5-defining-a-dynamic-page-cache-loction-by-subdomain-in-rails</guid>
    </item>
    <item>
      <title>Using jQuery plugins with Google hosted AJAX libraries</title>
      <link>http://launchpad.rocketjumpindustries.com/posts/4-using-jquery-plugins-with-google-hosted-ajax-libraries</link>
      <description>&lt;p&gt;The Google hosted &lt;a href=&quot;http://code.google.com/apis/ajaxlibs/&quot; class=&quot;outgoing&quot; title=&quot;code.google.com&quot;&gt;JavaScript libraries&lt;/a&gt; is a great service and another wonderful idea by the people at Google.  Sharing large framework code between multiple sites not only makes your visitors happy &amp;#8211; because they now only need to cache a potentially &lt;em&gt;large&lt;/em&gt; library once &amp;#8211; but also removes the burden of hosting and even updating that library, yourself.&lt;/p&gt;
&lt;p&gt;That being said however, it is often necessary to extend the basic &lt;span class=&quot;caps&quot;&gt;AJAX&lt;/span&gt; frameworks (jQuery, Prototype, Scriptaculous, etc.) with 3rd party or custom plugins.  When using the Google hosted &lt;span class=&quot;caps&quot;&gt;AJAX&lt;/span&gt; libraries, properly loading those plugins isn&amp;#8217;t as straightforward as it used to be.&lt;/p&gt;</description>
      <author>Nathaniel</author>
      <pubDate>Thu, 19 Mar 2009 19:13:45 +0000</pubDate>
      <comments>http://launchpad.rocketjumpindustries.com/posts/4-using-jquery-plugins-with-google-hosted-ajax-libraries#comments</comments>
      <guid>http://launchpad.rocketjumpindustries.com/posts/4-using-jquery-plugins-with-google-hosted-ajax-libraries</guid>
    </item>
    <item>
      <title>An enhanced assert_did_not_send_email for Shoulda</title>
      <link>http://launchpad.rocketjumpindustries.com/posts/2-an-enhanced-assert_did_not_send_email-for-shoulda</link>
      <description>&lt;p&gt;&lt;a href=&quot;http://thoughtbot.com/projects/shoulda/&quot; class=&quot;outgoing&quot; title=&quot;thoughtbot.com&quot;&gt;Shoulda&lt;/a&gt; is an excellent bit of icing for writing and maintaining your Ruby Test::Unit tests.  The library is written and maintained by the great guys over at &lt;a href=&quot;http://thoughtbot.com/&quot; class=&quot;outgoing&quot; title=&quot;thoughtbot.com&quot;&gt;Thoughtbot&lt;/a&gt;.  Shoulda comes with dozens of macros (which run several several specific tests in one line of code), custom assertions, and general features allowing you to write your tests in a far more easily understood format.&lt;/p&gt;
&lt;p&gt;Now, just some of those custom assertions that I find myself using quite a bit are the &lt;code&gt;assert_sent_email&lt;/code&gt; and &lt;code&gt;assert_did_not_send_email&lt;/code&gt;.  Actually, I pretty much use them all and then some.  Anyway, getting back to the email assertions, the two don&amp;#8217;t act the same out of the box.  &lt;code&gt;assert_sent_email&lt;/code&gt; can take a block which allows you to test for specific email criteria.  &lt;code&gt;assert_did_not_send_email&lt;/code&gt;, however, does not.&lt;/p&gt;</description>
      <author>Nathaniel</author>
      <pubDate>Thu, 19 Mar 2009 18:16:42 +0000</pubDate>
      <comments>http://launchpad.rocketjumpindustries.com/posts/2-an-enhanced-assert_did_not_send_email-for-shoulda#comments</comments>
      <guid>http://launchpad.rocketjumpindustries.com/posts/2-an-enhanced-assert_did_not_send_email-for-shoulda</guid>
    </item>
  </channel>
</rss>
