<?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>Meta Bates &#187; rails</title>
	<atom:link href="http://www.metabates.com/tag/rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.metabates.com</link>
	<description>The technical ramblings of Mark Bates.</description>
	<lastBuildDate>Wed, 01 Feb 2012 16:25:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Using Sprockets without Rails</title>
		<link>http://www.metabates.com/2011/08/31/using-sprockets-without-rails/</link>
		<comments>http://www.metabates.com/2011/08/31/using-sprockets-without-rails/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 19:17:23 +0000</pubDate>
		<dc:creator>Mark Bates</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[coffee script]]></category>
		<category><![CDATA[coffeescript]]></category>
		<category><![CDATA[rack]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[sprockets]]></category>

		<guid isPermaLink="false">http://www.metabates.com/?p=503</guid>
		<description><![CDATA[I&#8217;ve started working this week on an example application for the next book I&#8217;m about to write and I wanted a simple way for my readers to easily run the app (it&#8217;s going to be a single HTML file with a ton of cool JavaScript going on in it). My first choice for running this [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve started working this week on an example application for the next book I&#8217;m about to write and I wanted a simple way for my readers to easily run the app (it&#8217;s going to be a single HTML file with a ton of cool JavaScript going on in it). My first choice for running this app was to use the popular Ruby library, <a href="http://rack.rubyforge.org/" target="_blank">Rack</a>. If you are unfamiliar with Rack, please check it out. It provides a simple interface for writing web applications. By writing a simple Ruby file readers can use their favorite Rack compatible web server to launch the application. Sounds simple, eh? That&#8217;s because it is.</p>
<p>With a simple Rack application written in a few lines of code I was able to start developing my example application. That&#8217;s when I realized I needed a good way to serve up all my <a href="http://jashkenas.github.com/coffee-script/" target="_blank">CoffeeScript</a> and <a href="http://sass-lang.com/" target="_blank">Sass</a> files. I was going to write a watchr script that did this, but I thought that was a bit heavy handed, and not very flexible, so I turned to <a href="https://github.com/sstephenson/sprockets" target="_blank">Sprockets</a>.</p>
<p>Sprockets recently gained a lot of attention because it is bundled in with <a href="http://guides.rubyonrails.org/3_1_release_notes.html" target="_blank">Rails 3.1</a> to serve up an application&#8217;s assets. It&#8217;s a clever little library that will process your files using CoffeeScript, Sass, etc&#8230; and let you bundle them up in to a single asset by using a manifest. That was exactly what I wanted. After I spent the better part of an afternoon doing a bit of research and debugging here is the Rack configuration file I came up with:</p>
<div id="gist-1184400" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="nb">require</span> <span class="s1">&#39;sprockets&#39;</span></div><div class='line' id='LC2'><span class="n">project_root</span> <span class="o">=</span> <span class="no">File</span><span class="o">.</span><span class="n">expand_path</span><span class="p">(</span><span class="no">File</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="bp">__FILE__</span><span class="p">))</span></div><div class='line' id='LC3'><span class="n">assets</span> <span class="o">=</span> <span class="no">Sprockets</span><span class="o">::</span><span class="no">Environment</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">project_root</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">env</span><span class="o">|</span></div><div class='line' id='LC4'>&nbsp;&nbsp;<span class="n">env</span><span class="o">.</span><span class="n">logger</span> <span class="o">=</span> <span class="no">Logger</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="no">STDOUT</span><span class="p">)</span></div><div class='line' id='LC5'><span class="k">end</span></div><div class='line' id='LC6'><br/></div><div class='line' id='LC7'><span class="n">assets</span><span class="o">.</span><span class="n">append_path</span><span class="p">(</span><span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">project_root</span><span class="p">,</span> <span class="s1">&#39;app&#39;</span><span class="p">,</span> <span class="s1">&#39;assets&#39;</span><span class="p">))</span></div><div class='line' id='LC8'><span class="n">assets</span><span class="o">.</span><span class="n">append_path</span><span class="p">(</span><span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">project_root</span><span class="p">,</span> <span class="s1">&#39;app&#39;</span><span class="p">,</span> <span class="s1">&#39;assets&#39;</span><span class="p">,</span> <span class="s1">&#39;javascripts&#39;</span><span class="p">))</span></div><div class='line' id='LC9'><span class="n">assets</span><span class="o">.</span><span class="n">append_path</span><span class="p">(</span><span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">project_root</span><span class="p">,</span> <span class="s1">&#39;app&#39;</span><span class="p">,</span> <span class="s1">&#39;assets&#39;</span><span class="p">,</span> <span class="s1">&#39;stylesheets&#39;</span><span class="p">))</span></div><div class='line' id='LC10'><br/></div><div class='line' id='LC11'><span class="n">map</span> <span class="s2">&quot;/assets&quot;</span> <span class="k">do</span></div><div class='line' id='LC12'>&nbsp;&nbsp;<span class="n">run</span> <span class="n">assets</span></div><div class='line' id='LC13'><span class="k">end</span></div><div class='line' id='LC14'><br/></div><div class='line' id='LC15'><span class="n">map</span> <span class="s2">&quot;/&quot;</span> <span class="k">do</span></div><div class='line' id='LC16'>&nbsp;&nbsp;<span class="n">run</span> <span class="nb">lambda</span> <span class="p">{</span> <span class="o">|</span><span class="n">env</span><span class="o">|</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="o">[</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="mi">200</span><span class="p">,</span> </div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="s1">&#39;Content-Type&#39;</span>  <span class="o">=&gt;</span> <span class="s1">&#39;text/html&#39;</span><span class="p">,</span> </div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="s1">&#39;Cache-Control&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;public, max-age=86400&#39;</span> </div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="no">File</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s1">&#39;public/index.html&#39;</span><span class="p">,</span> <span class="no">File</span><span class="o">::</span><span class="no">RDONLY</span><span class="p">)</span></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="o">]</span></div><div class='line' id='LC25'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC26'><span class="k">end</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1184400/525bacf6830e9f5ae339b9f2f60814d146d7e529/config.ru" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1184400#file_config.ru" style="float:right;margin-right:10px;color:#666">config.ru</a>
            <a href="https://gist.github.com/1184400">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>That will serve</p>
<pre>/assets/application.css</pre>
<p>via Sprockets. The file itself will live in</p>
<pre>&lt;pwd&gt;/app/assets/stylesheets/application.scss</pre>
<p>The same goes for JavaScript files.</p>
<p>Hopefully this will save someone else a little of time when they&#8217;re trying to do the same thing. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metabates.com/2011/08/31/using-sprockets-without-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Let&#8217;s say goodbye to YAML for configuration, shall we?</title>
		<link>http://www.metabates.com/2011/06/28/lets-say-goodbye-to-yaml-for-configuration-shall-we/</link>
		<comments>http://www.metabates.com/2011/06/28/lets-say-goodbye-to-yaml-for-configuration-shall-we/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 17:31:46 +0000</pubDate>
		<dc:creator>Mark Bates</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[configatron]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[yaml]]></category>

		<guid isPermaLink="false">http://www.metabates.com/?p=482</guid>
		<description><![CDATA[I have to ask a question to my fellow Rubyists out there? Why are you still using YAML? I know why you think you like YAML. You think it&#8217;s a great way to write configuration files, but it&#8217;s really not. You know what&#8217;s a great way of writing configuration files for Ruby apps? RUBY! I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.metabates.com/wp-content/uploads/2011/06/yml.png"><img class="alignleft size-medium wp-image-489" title="yml" src="http://www.metabates.com/wp-content/uploads/2011/06/yml-300x300.png" alt="" width="180" height="180" /></a>I have to ask a question to my fellow Rubyists out there? Why are you still using YAML? I know why you <em>think</em> you like YAML. You think it&#8217;s a great way to write configuration files, but it&#8217;s really not. You know what&#8217;s a great way of writing configuration files for Ruby apps? RUBY!</p>
<p>I know it&#8217;s crazy, isn&#8217;t it? But why not? Why would you not want to use Ruby for configuring your applications instead of YAML?</p>
<p>I&#8217;m the maintainer of a pretty popular configuration tool for Ruby apps, <a href="http://github.com/markbates/configatron">Configatron</a>, so I think I have a little experience in this field. I also write and maintain a lot of libraries that require configuration and I have never thought that YAML is the best way to do this.</p>
<p>Let&#8217;s look at an example of what a library developer has to do to load a YAML file to get configurations:</p>
<div id="gist-1051635" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="l-Scalar-Plain">foo</span><span class="p-Indicator">:</span></div><div class='line' id='LC2'>&nbsp;&nbsp;<span class="l-Scalar-Plain">bar</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1051635/8b2f51859c67c88817a39ec2637be8a4a42b0789/config.yml" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1051635#file_config.yml" style="float:right;margin-right:10px;color:#666">config.yml</a>
            <a href="https://gist.github.com/1051635">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="nb">require</span> <span class="s1">&#39;yaml&#39;</span></div><div class='line' id='LC2'><span class="n">config</span> <span class="o">=</span> <span class="no">YAML</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="no">ERB</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="no">File</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="s1">&#39;/path/to/config.yml&#39;</span><span class="p">))</span><span class="o">.</span><span class="n">result</span><span class="p">)</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1051635/26ccf1d5e93777a585e7dec43204e9d3857e2b4c/gistfile1.rb" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1051635#file_gistfile1.rb" style="float:right;margin-right:10px;color:#666">gistfile1.rb</a>
            <a href="https://gist.github.com/1051635">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>I don&#8217;t know about you, but I think that&#8217;s kind of lame. Most everybody runs their YAML files through ERB so that they can make their YAML files more &#8216;Ruby-ish&#8217;. Why not just use Ruby?? Here&#8217;s the same example in Ruby:</p>
<div id="gist-1051638" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="no">SomeLibrary</span><span class="o">.</span><span class="n">config</span> <span class="o">=</span> <span class="p">{</span><span class="ss">:foo</span> <span class="o">=&gt;</span> <span class="ss">:bar</span><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1051638/61390f260946f24cd62e871e379b8b7c334aa25d/config.rb" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1051638#file_config.rb" style="float:right;margin-right:10px;color:#666">config.rb</a>
            <a href="https://gist.github.com/1051638">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="nb">require</span> <span class="s1">&#39;/path/to/config.rb&#39;</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1051638/f64d4b978dfcdffdc6d08d4983c264f93d36ce28/gistfile1.rb" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1051638#file_gistfile1.rb" style="float:right;margin-right:10px;color:#666">gistfile1.rb</a>
            <a href="https://gist.github.com/1051638">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>In addition to not having to deal with all the whitespace, tabs, crazy nesting, etc&#8230; that YAML brings we get to use the full power of Ruby for our configurations! Try storing a Proc in YAML. Yeah, that&#8217;s what I thought. You can drive configurations from the database, environment variables, crazy equations, etc&#8230; the world is your oyster. All you need to do now is stop using YAML!</p>
<p>I&#8217;ve decided to drop YAML support in Configatron 2.9 (coming sometime this Summer) and I encourage all other library developers to do the same. It&#8217;s just not needed, or very nice for that matter. Now, if we can only get Rails to drop the database.yml file, I think we&#8217;ll be all set.</p>
<address>Ps. Make sure to check out my app <a href="http://www.fluxtracker.com?ref=yaml">FluxTracker.com</a> for all your issue, project, and error tracking needs. Also check out <a href="http://tweetko.com?ref=yaml">TweetKO.com</a> for backing up and bookmarking your favorite tweets.</address>
]]></content:encoded>
			<wfw:commentRss>http://www.metabates.com/2011/06/28/lets-say-goodbye-to-yaml-for-configuration-shall-we/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Because everybody has an opinion&#8230;</title>
		<link>http://www.metabates.com/2011/04/15/because-everybody-has-an-opinion/</link>
		<comments>http://www.metabates.com/2011/04/15/because-everybody-has-an-opinion/#comments</comments>
		<pubDate>Sat, 16 Apr 2011 01:30:20 +0000</pubDate>
		<dc:creator>Mark Bates</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[active record]]></category>
		<category><![CDATA[coffee script]]></category>
		<category><![CDATA[erb]]></category>
		<category><![CDATA[haml]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.metabates.com/?p=430</guid>
		<description><![CDATA[In case you&#8217;ve been living in a cave this week you&#8217;ve probably heard that Ruby on Rails is going to be including both the CoffeeScript and SASS libraries, it will also make jQuery the default JavaScript framework, replacing the Prototype framework. I would like to start by addressing my experiences with CoffeeScript. My opinion of [...]]]></description>
			<content:encoded><![CDATA[<p>In case you&#8217;ve been living in a cave this week you&#8217;ve probably heard that <a href="http://www.rubyinside.com/rails-3-1-adopts-coffeescript-jquery-sass-and-controversy-4669.html">Ruby on Rails</a> is going to be including both the <a href="http://coffeescript.org/">CoffeeScript</a> and <a href="http://sass-lang.com/">SASS</a> libraries, it will also make <a href="http://jquery.com/">jQuery</a> the default JavaScript framework, replacing the <a href="http://www.prototypejs.org/">Prototype</a> framework.</p>
<p>I would like to start by addressing my experiences with CoffeeScript. My opinion of it is of ambivalence. I&#8217;ve used it on a project, I&#8217;ve played with and in the end I&#8217;ve come out with the opinion of &#8220;it&#8217;s ok&#8221;. It didn&#8217;t blow me away, but at the same time I can see why so many people like. It offers some really cool features that I really wish JavaScript had and you can cut down on the amount of code you have to write. On the other hand the apps I tend to write don&#8217;t tend to be that JavaScript heavy that I really needed to reach out for something like CoffeeScript.</p>
<p><img class="alignleft" src="http://blogs.worldbank.org/files/publicsphere/public%20opinion_JGRNLY.jpeg" alt="" width="326" height="246" />So, how do I feel about CoffeeScript being included with Rails? Well, I&#8217;ll get to that. Let&#8217;s go over some of the most common arguments I&#8217;ve heard from people this week about why they&#8217;re anti-CoffeeScript in Rails.</p>
<blockquote><p>&#8220;It&#8217;s an abstraction layer of JavaScript! JavaScript isn&#8217;t that bad, why can&#8217;t you just write JavaScript?&#8221;</p>
<p>&#8220;It&#8217;s going to be a hinderance to newbies. It&#8217;ll be too much of a learning curve!&#8221;</p></blockquote>
<p>Let&#8217;s start with that second point first, shall we? I agree, it does represent a new element that needs to be learned when coming to Rails. But here&#8217;s the pretty nifty thing about how it&#8217;s all implemented in Rails. In order to actually use CoffeeScript in Rails you have to create your files named foo.js.coffee if, however, you just name your file foo.js then, guess what? You will have to write plain old JavaScript! Seems like newbies, and those who don&#8217;t like CoffeeScript, can just keep writing plain old JavaScript without anything stopping them at all.</p>
<p>Now, let&#8217;s talk about the abstraction layer argument. Yes, CoffeeScript is an abstraction on top of JavaScript, but let&#8217;s take a look at a few other parts of the Rails stack and see how they hold up against this argument.</p>
<p>Here&#8217;s a fairly common Rails stack:</p>
<ul>
<li>ActiveRecord</li>
<li>Haml</li>
<li>jQuery</li>
<li>RSpec</li>
</ul>
<p>What do all those things have in common? Well, they&#8217;re all abstraction layers that sit on top of something else, don&#8217;t they? Let&#8217;s look at that list again?</p>
<ul>
<li>ActiveRecord &#8211; SQL (Structured Query Language)</li>
<li>Haml &#8211; HTML</li>
<li>jQuery &#8211; JavaScript, you could just as easily hand roll those AJAX calls in pure JavaScript.</li>
<li>RSpec &#8211; Test/Unit</li>
</ul>
<p>What I&#8217;ve found funny about the particular argument is that I&#8217;ve heard it MOST from those who use things like HAML, which is a DEFINITELY an abstraction layer that sits on top of HTML. See where I&#8217;m going with this one? Good, I don&#8217;t want to belabor the point. <img src='http://www.metabates.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>So, finally, where do I stand on this whole thing? Well, I view like it Test/Unit and Prototype. Those are both the current standard (although jQuery will replace Prototype in 3.1) and I don&#8217;t like or use either of them. Instead I configure Rails to use jQuery and RSpec. I don&#8217;t like Haml, but those that do simply replace ERB with Haml and they move on with their day. So my take is this, it&#8217;s there, it&#8217;s included. Use it if you like, or don&#8217;t. Is it really that big a deal? No, it really isn&#8217;t. If Rails dropped ERB and went with Haml as the default, would I bitch and moan, probably a bit, but then I&#8217;d just install the Rails-ERB gem and move on with my day, just like I do with jQuery and RSpec today.</p>
<p>So sit back, relax, use the libraries that you want to use, Rails let&#8217;s you do that. Oh, while you&#8217;re relaxing why not try out CoffeeScript, who knows, you might just enjoy it. Or not.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metabates.com/2011/04/15/because-everybody-has-an-opinion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Becoming an &#8216;Expert&#8217; Developer</title>
		<link>http://www.metabates.com/2010/11/17/becoming-an-expert-developer/</link>
		<comments>http://www.metabates.com/2010/11/17/becoming-an-expert-developer/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 15:50:16 +0000</pubDate>
		<dc:creator>Mark Bates</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[github.com]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.metabates.com/?p=387</guid>
		<description><![CDATA[Last week I received an email from someone who used to work at a company that I used to work with. I didn&#8217;t know him, but he knew me through my work at the company, and my other exploits. He sent me an email to say that after a short time with the company he [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I received an email from someone who used to work at a company that I used to work with. I didn&#8217;t know him, but he knew me through my work at the company, and my other exploits. He sent me an email to say that after a short time with the company he had been laid off, along with half of the development team. He wasn&#8217;t looking for pity, but rather advice.</p>
<p>What kind of advice was he asking for, well, he quite simply needed to know how could he become an &#8216;expert&#8217; Ruby on Rails developer. First, let me say that this post won&#8217;t have anything to do with Ruby, Rails, or any other specific programming language. Everything I&#8217;ll talk about is valid in ANY language on ANY platform. With that disclaimer, let&#8217;s move on, shall we?</p>
<p><img class="alignleft" title="Monkey" src="http://herd.typepad.com/.a/6a00d83451e1dc69e2010536ad3deb970b-800wi" alt="" width="250" /></p>
<p>While at this company he got introduced to Ruby on Rails and really loved it, coming from a non-Rails background. Since being laid off he&#8217;s been trying to land another Rails gig, but everyone is looking for &#8216;expert&#8217; Rails developers. So the question was, how to become an &#8216;expert&#8217; developer?</p>
<p>I keep putting &#8216;expert&#8217; in quotes because, let&#8217;s be honest here, that&#8217;s a VERY subjective term. As someone who has hired many developers in his day, I can tell you that I&#8217;v</p>
<p>e hired newbies to &#8216;experts&#8217; and everywhere in between. Everyone has their merits and possibilities. I&#8217;ve met &#8216;experts&#8217; that I wouldn&#8217;t hire to take out my trash, let alone build my business. I&#8217;ve also met people right out of college that I would hire again and again. So your mileage my vary.</p>
<p>So&#8230; how do you build up that &#8216;expert&#8217; reputation? Let&#8217;s look at it. Below are some of things I&#8217;ve done, as well as some of the things that I look for as a hiring manager. Some are incredibly easy to do, others require work, but in the end they WILL pay off, and you&#8217;ll easily be at the head of the pack when going for that job.</p>
<h3>Build Something</h3>
<p>When you are looking for a job people want to see what it is you&#8217;ve actually built. If you haven&#8217;t built anything, then how are you an expert? Build a lot of different things and put them up on the web for perspective employers to find and play around with. Use these are a playground for trying out all those cool new technologies you keep hearing about. Want to give NoSQL a try? Great, build an app that uses it. Need to improve your testing chops? Write an application and write all the tests you can possibly think of!</p>
<h3>Get a GitHub Account</h3>
<p>I can&#8217;t tell you how important GitHub has become when trying to make a name for yourself. It seems like unless you&#8217;re on GitHub, you&#8217;re nobody. While that might not be true, it certainly hurts more than it helps to not have an account. You know those apps you&#8217;ve just been building and playing around with? Post them on GitHub! Then put your profile page link on your resume. Yep, you read that right. Give those looking at your resume a link to your code. Let them see how good a developer you actually are. Show them you know how to code all the things you&#8217;ve got on your resume. Listing a language, platform, or tool on resume is one thing, but actually showing your perspective employer is another! They&#8217;ll love it.</p>
<p>While you&#8217;re on GitHub, why not contribute to an open source project that&#8217;s up there. There are plenty of them, and they&#8217;re ALL looking for people to help out with their projects. Simply fork the projects, make some improvements, and then give those changes back to the projects owner. This looks great on a resume and really helps to show that you are interested and active in the community. Again, employers love this! Plus, you&#8217;ll be starting to build a name for yourself, and building a network, and a network is INCREDIBLY important when looking for work.</p>
<h3>Blog and Write</h3>
<p>I should probably heed my own advice here and blog more often, but do as I say, not as I do. <img src='http://www.metabates.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  With that said I wrote a book, which looks AMAZING on a resume, but might be a bit out of reach for most people, so I recommend blogging instead. Why should you blog? Well, it shows that you have good communications skills, again very important to most employers. It can also show that you have a deep understanding of whatever it is you blog about.</p>
<p>What should you write about? If you&#8217;re stuck on a topic, might I make a recommendation or two. First, when you&#8217;re building those applications I mentioned early if you run into a bug or something else that got you a bit stuck, blog about it! Others could really benefit from your experience. Explain the problem and how you went about solving it. Another great thing to write about is your favorite libraries or plugins. Pick a different one each week and dissect it. Write about how it works, what it does, etc&#8230; This is a great exercise in both writing and learning about how things work. Very valuable.</p>
<h3>Network</h3>
<p>I mentioned earlier that a good network is INCREDIBLY important when looking for work, and I wasn&#8217;t lying. It&#8217;s the most important thing. A good network will constantly be feeding you new opportunities, or putting you in touch with those who can. So how do you develop that network? A few ways, I mentioned contributing to open source earlier, that&#8217;s a great way. Another great way is through conferences, hackfests, rumbles, and whatever other local (and non-local) events are being held in your development community of choice. Attend these events, participate, introduce yourself, speak, buy drinks, whatever! Just get out there and NETWORK!!</p>
<h3>Conclusion</h3>
<p>The gentleman who emailed me said that he was reading a lot of books in hopes of becoming an &#8216;expert&#8217;. While I&#8217;m not going to tell you not to read books (you should!!), I will tell you that there is no substitute for doing. All of things I&#8217;ve talked about above are ALL about doing. Reading is not doing, it&#8217;s reading. It&#8217;s passive and will not get you further in your career. There&#8217;s no place on a resume for the books you&#8217;ve read. Take what you&#8217;ve read and put it into action, then you&#8217;ll be on your way to becoming an &#8216;expert&#8217; developer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metabates.com/2010/11/17/becoming-an-expert-developer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CoverMe – Code Coverage for Ruby 1.9 Reaches RC1</title>
		<link>http://www.metabates.com/2010/09/30/coverme-%e2%80%93-code-coverage-for-ruby-1-9-reaches-rc1/</link>
		<comments>http://www.metabates.com/2010/09/30/coverme-%e2%80%93-code-coverage-for-ruby-1-9-reaches-rc1/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 16:09:25 +0000</pubDate>
		<dc:creator>Mark Bates</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[Updates]]></category>
		<category><![CDATA[cover_me]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rcov]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://www.metabates.com/?p=363</guid>
		<description><![CDATA[In August I announced CoverMe a code coverage tool for Ruby 1.9. Well, today I announce that it has hit it&#8217;s first release candidate! I&#8217;ve very excited by the fact it&#8217;s getting close to an &#8216;official&#8217; release. The response to CoverMe has been great and through feedback from the community I&#8217;ve made a lot of [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://www.metabates.com/2010/08/13/coverme-code-coverage-for-ruby-1-9/">August</a> I announced <a href="http://github.com/markbates/cover_me" target="_blank">CoverMe</a> a code coverage tool for Ruby 1.9. Well, today I announce that it has hit it&#8217;s first release candidate! I&#8217;ve very excited by the fact it&#8217;s getting close to an &#8216;official&#8217; release.</p>
<p>The response to CoverMe has been great and through feedback from the community I&#8217;ve made a lot of improvements and fixed a lot of issues.</p>
<p>While quite a few things have changed under the hood, not much has changed in how you use CoverMe.</p>
<h2>Installation</h2>
<p>The following are instructions for how you would configure CoverMe for a Rails 3 project, adjust to your local environment accordingly.</p>
<p>In  your Gemfile add the following:</p>
<pre>gem 'cover_me', '&gt;= 1.0.0.rc1', :group =&gt; :test</pre>
<p>Then run:</p>
<pre>$ bundle install</pre>
<p>After CoverMe is installed place the following line at the <strong><em>VERY TOP</em></strong> of your &#8216;test_helper.rb&#8217; or &#8216;spec_helper.rb&#8217; file (for Cucumber put it at the top of the &#8216;env.rb&#8217; file):</p>
<pre>require 'cover_me'</pre>
<p>I can&#8217;t emphasize enough how important it is that the require statement is at the <strong><em>VERY</em></strong> top of that file!</p>
<p>Finally (and optionally) run:</p>
<pre>$ rails g cover_me:install</pre>
<p>This will simply install a Rake task that will wrap both Test::Unit and RSpec tasks with CoverMe and will launch the results at the end of the test suites. I would recommend it. It&#8217;s kinda the whole point. <img src='http://www.metabates.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>That&#8217;s it!</h2>
<p>Enjoy the release candidate, and of course, please let me know if you find any issues with it. Issues can be reported on <a href="http://github.com/markbates/cover_me/issues" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metabates.com/2010/09/30/coverme-%e2%80%93-code-coverage-for-ruby-1-9-reaches-rc1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fixtures v. Factories &#8211; Can&#8217;t We All Just Get Along?</title>
		<link>http://www.metabates.com/2010/08/15/fixtures-v-factories-cant-we-all-just-get-along/</link>
		<comments>http://www.metabates.com/2010/08/15/fixtures-v-factories-cant-we-all-just-get-along/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 12:49:37 +0000</pubDate>
		<dc:creator>Mark Bates</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[factories]]></category>
		<category><![CDATA[fixtures]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://www.metabates.com/?p=358</guid>
		<description><![CDATA[Testing in Ruby on Rails is incredibly easy. I mean stupidly easily. So easy that if you&#8217;re not doing it, you are a very, very bad developer and should re-evaluate your career choices. (Yes, I believe in testing that much!) One thing that is not all that easy, however, is object creation and populating your [...]]]></description>
			<content:encoded><![CDATA[<p>Testing in Ruby on Rails is incredibly easy. I mean stupidly easily. So easy that if you&#8217;re not doing it, you are a very, very bad developer and should re-evaluate your career choices. (Yes, I believe in testing that much!) One thing that is not all that easy, however, is object creation and populating your test database. Five years ago when I first started working with Rails the only options we had to get data into the database were fixtures, or hastily written &#8216;factory&#8217;-esque methods custom to each application.</p>
<p>Fixtures, for those who don&#8217;t know, are YAML files that contain YAML-ized versions of objects that then get loaded into the test database when you run your test suite. These objects can then be pulled back from the database during your tests. Sounds great, doesn&#8217;t it? Well, not everybody thinks so. One of the biggest problems with fixtures is they can very quickly get out of control. Keeping track of all the different scenarios your tests needs can get very confusing and frustrating to deal with.</p>
<p><img class="alignleft" title="Factory Workers" src="http://www.uni.edu/schneidj/webquests/adayinthelife/lotsofworkers.jpg" alt="" width="360" height="283" />So how do we fix this problem? Well, most developers have turned to using factories. Factories allow us to quickly build the data we need for each test, now the building of the data you need for your test is right there in a setup or before method. Easy to manage and keep track of. Now there are a plethora of different factory libraries meant to make this task nicer, a few of the popular ones are <a href="http://github.com/thoughtbot/factory_girl" target="_blank">Factory Girl</a>, <a href="http://github.com/notahat/machinist">Machinist</a>, and <a href="http://github.com/flogic/object_daddy" target="_blank">Object Daddy</a>. The problem with this approach, however, is that it can slow down your tests as you are building database objects for nearly every test, and as we all know, object creation and database inserting can be expensive.</p>
<p>So, what can we do to help solve both of these problems? Well, we can use both of these technologies. Together. Yeah, that&#8217;s right I&#8217;m saying you should use fixtures as well as factories. Sound crazy? Not really. Let me explain.</p>
<p>Most Rails applications have most, if not all, of their functionality behind a login. So whenever we&#8217;re testing some controller action that sites behind a login we need a user to login with. If we were using factories we would have a setup or before method that would create a new User object and save it to the database, and it would do that for every variant of the test, as well as every other test in our suite that needs a user object.</p>
<p>Why not, create one user object and use that repeatedly through our tests? What I like to do is stick one or two users in my fixtures, so that they&#8217;re there whenever I need one. I like to do this with most of my major models. Then, when I need to have some custom scenarios, I can break out the factories and build those custom scenarios.</p>
<p>So what does this achieve? Well, I&#8217;ve sped up my tests by already having a few objects in the database, and not having to create them (and roll them back) with each single test. I&#8217;ve also cleaned up my tests significantly by eliminating a lot of setup and/or before methods where these objects were being created. I&#8217;ve also eliminated the biggest problems with fixtures, that they can get overwhelming, because we are only keeping one or two objects in them and using factories for the rest.</p>
<p>I hoped this helped you to understand that we don&#8217;t have to throw the baby out with the bath water when it comes to fixtures and factories, we can use both. Not go forth and test! Test like your life depends on it (because it does!!).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metabates.com/2010/08/15/fixtures-v-factories-cant-we-all-just-get-along/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>CoverMe &#8211; Code Coverage for Ruby 1.9</title>
		<link>http://www.metabates.com/2010/08/13/coverme-code-coverage-for-ruby-1-9/</link>
		<comments>http://www.metabates.com/2010/08/13/coverme-code-coverage-for-ruby-1-9/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 17:49:44 +0000</pubDate>
		<dc:creator>Mark Bates</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rcov]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://www.metabates.com/?p=343</guid>
		<description><![CDATA[Ruby 1.9(.2) is an amazing language to develop applications in. It&#8217;s faster, more powerful, cleaner, and a huge improvement over Ruby 1.8.x. Because of those reasons every Ruby developer should move to this exciting new version of our language. When making a move of this size it&#8217;s important to have the right tools to help [...]]]></description>
			<content:encoded><![CDATA[<p>Ruby 1.9(.2) is an amazing language to develop applications in. It&#8217;s faster, more powerful, cleaner, and a huge improvement over Ruby 1.8.x. Because of those reasons every Ruby developer should move to this exciting new version of our language.</p>
<div id="_mcePaste">When making a move of this size it&#8217;s important to have the right tools to help us along. Unfortunately, one of the most useful tools as a Ruby developer, <a href="http://github.com/relevance/rcov">RCov</a>, does not work with Ruby 1.9.</div>
<div id="_mcePaste">RCov, for those unfamiliar analyzes your code and tells you which part of your code was not executed. This is INCREDIBLY useful when hooked up to your test suite. While, it&#8217;s not the only metric you should use when determining how good your test coverage it, it certainly is a great first step to point out exactly which parts of your code haven&#8217;t been touched at all!</div>
<p>Enter <a href="http://github.com/markbates/cover_me">CoverMe</a>.</p>
<h2>History</h2>
<p>While working on a Ruby 1.9/Rails 3 project, and loving everything about it (except for the lack of RCov), I came across a <a href="http://engineering.attinteractive.com/2010/08/code-coverage-in-ruby-1-9/">post</a> by Aaron Patterson (of <a href="http://github.com/tenderlove/nokogiri">Nokogiri</a> fame). In this post he quickly outlined a very basic coverage tool using the new built-in Coverage module in Ruby 1.9.</p>
<p>After spending a morning playing with it, I was quickly able to grow the idea into something useful for the project. Later that day the company I was consulting for (<a href="http://www.biddingforgood.com">BiddingForGood.com</a>), and in particular their chief architect, <a href="http://twitter.com/stuartmg">Stuart Garner</a>, told me to take a day or two and clean it up and release it for the world to use, and so <a href="http://github.com/markbates/cover_me">here</a> it is.</p>
<h2>Features</h2>
<p>Here is a brief overview of the features of CoverMe:</p>
<h3>Index Page</h3>
<ul>
<li>Sortable column headers (File, Lines, Lines of Code, Tested %).</li>
<li>Searching/filtering by file name.</li>
<li>Filtering by coverage percent.</li>
<li>Color coded list of files to quickly see which ones are 100% covered, &gt; 90% covered, or less than 90% covered.</li>
<li>Large color coded average coverage percent, for quick reference.</li>
</ul>
<h3>Detail Page</h3>
<ul>
<li>Line by line coverage report</li>
<li>Color coded lines to quickly see which lines where executed and which ones were not.</li>
<li>Side by side viewing with the corresponding test/spec file (if one exists).</li>
</ul>
<p>See the <a href="http://github.com/markbates/cover_me">README</a> file for more information on installation and usage.</p>
<h2>Thanks</h2>
<p>I would just quickly like to give another quick thanks to Aaron Patterson for pointing out the Coverage module in Ruby 1.9 and inspiring this, hopefully, helpful little gem. Also another big thanks to Stuart Garner for pushing me to package this up and release it to the world.</p>
<h2>Screenshots</h2>

<a href='http://www.metabates.com/2010/08/13/coverme-code-coverage-for-ruby-1-9/detail_side_by_side/' title='detail_side_by_side'><img width="150" height="150" src="http://www.metabates.com/wp-content/uploads/2010/08/detail_side_by_side-150x150.png" class="attachment-thumbnail" alt="detail_side_by_side" title="detail_side_by_side" /></a>
<a href='http://www.metabates.com/2010/08/13/coverme-code-coverage-for-ruby-1-9/detail/' title='detail'><img width="150" height="150" src="http://www.metabates.com/wp-content/uploads/2010/08/detail-150x150.png" class="attachment-thumbnail" alt="detail" title="detail" /></a>
<a href='http://www.metabates.com/2010/08/13/coverme-code-coverage-for-ruby-1-9/index_filter/' title='index_filter'><img width="150" height="150" src="http://www.metabates.com/wp-content/uploads/2010/08/index_filter-150x150.png" class="attachment-thumbnail" alt="index_filter" title="index_filter" /></a>
<a href='http://www.metabates.com/2010/08/13/coverme-code-coverage-for-ruby-1-9/index_search/' title='index_search'><img width="150" height="150" src="http://www.metabates.com/wp-content/uploads/2010/08/index_search-150x150.png" class="attachment-thumbnail" alt="index_search" title="index_search" /></a>
<a href='http://www.metabates.com/2010/08/13/coverme-code-coverage-for-ruby-1-9/index/' title='index'><img width="150" height="150" src="http://www.metabates.com/wp-content/uploads/2010/08/index-150x150.png" class="attachment-thumbnail" alt="index" title="index" /></a>

]]></content:encoded>
			<wfw:commentRss>http://www.metabates.com/2010/08/13/coverme-code-coverage-for-ruby-1-9/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Testing is NOT an Option</title>
		<link>http://www.metabates.com/2010/07/01/testing-is-not-an-option/</link>
		<comments>http://www.metabates.com/2010/07/01/testing-is-not-an-option/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 14:04:38 +0000</pubDate>
		<dc:creator>Mark Bates</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cucumber]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://www.metabates.com/?p=337</guid>
		<description><![CDATA[Five years ago I left the world of contracting and reentered the world of the full time employee, and I enjoyed every minute of it (well, almost). Now fast forward five years and I find myself once again at a crossroads. Do I continue on as an FTE or do I become a contractor, and [...]]]></description>
			<content:encoded><![CDATA[<p>Five years ago I left the world of contracting and reentered the world of the full time employee, and I enjoyed every minute of it (well, almost). Now fast forward five years and I find myself once again at a crossroads. Do I continue on as an FTE or do I become a contractor, and play the field, so to speak? Looks like I&#8217;m going to go with the hired gun route for a little while, but that&#8217;s not really the point of this post.</p>
<p>During the past week or so I&#8217;ve spoken with many great companies and people. I&#8217;ve been fortunate enough to have a high degree of interest in what I can bring to the table. During those discussions I talked with a really nice guy at a what seems to be a really cool company, I won&#8217;t name names, because this isn&#8217;t about either the person or the company, but rather something the engineer said during our phone conversation that got me to thinking.</p>
<p><img class="alignleft" title="Failure Testing" src="http://www.commercialventvac.com/finao/failure_testing.jpg" alt="" width="400" height="240" />&#8220;We don&#8217;t have any tests because I couldn&#8217;t convince the company to allocate the time for them.&#8221; That statement really hung with me. After I got off the phone I started thinking really hard about that statement, and all I could think of was how testing is not an option and people shouldn&#8217;t need to be convinced to have time allocated to them.</p>
<p>As developers it is our responsibility to insist on testing. Always include testing in your time estimates. Never give the client (or your company) an option that includes a time estimate without testing. If a feature takes 2 days to code and a day to write tests, then your estimate is 3 days, never 2. You should never say, &#8220;Well, I can get it done in two days if I don&#8217;t write any tests.&#8221; That&#8217;s just an unacceptable thing to say. What you should be saying is, &#8220;That feature will take three days to code&#8221;.</p>
<p>I don&#8217;t feel I should sit here and tell you all the reasons why you should test, you should know them already, and frankly, they&#8217;re all very obvious! But, if you need a few bullet points to &#8216;convince&#8217; your client, here are a few:</p>
<ul>
<li>Less bugs &#8211; The more tests you have the less bugs you will have. It&#8217;s just a fact. You won&#8217;t have 100% bug free code, that&#8217;s a nearly impossible goal, but you highly reduce the likely hood that as soon as you get your code into production your users will find all the breaking points of your code.</li>
<li>Better maintainability, means faster feature turn around &#8211; When you have a large test suite it means adding, updating, or even removing features because a whole lot easier, which means it SAVES time! Why? Simple, you don&#8217;t have to go through and manually test every aspect of your code to make sure you didn&#8217;t break something elsewhere by adding that validation, or by refactoring that bit of code, etc&#8230; That translates into real $ savings.</li>
<li>Test driven development saves time &#8211; this isn&#8217;t quite the same as my last bullet point. Imagine, if you will, you are writing a four step wizard in your application. If you write a few test scripts using something like Cucumber first before you write your code you can simply keep re-running those to make sure your code is working. If you don&#8217;t have those test scripts written then you continually have to keep going to a browser and entering all the information in each of the steps so you can test something in step four. Which one do you think takes longer, having a few test scripts you can run, or manually going through the four page wizard each time you make a change?</li>
<li>It&#8217;s an investment &#8211; thinking of having test scripts like owning a house. When you don&#8217;t have tests and you just keep testing in the browser or the command line what you are doing is a kin to &#8220;renting&#8221;. There is money being spent, but at the end of the day you have nothing to show for it. You&#8217;ve spent hours &#8220;testing&#8221;, but tomorrow when you come in you have to do it all over again. When you spend those hours writing tests you are actually &#8220;buying&#8221; something. You have something to show for that time and money you&#8217;ve spent. Tomorrow, next week, next month, next year, those scripts will still be there, they&#8217;ll still be working for you, giving  you a return on your investment.</li>
</ul>
<p>Well, I hope I have hopefully made a case to you the engineer as to why you should insist on testing. It&#8217;s the right thing to do, for you, for your application and for you client. If if anyone tries to give you grief about it, send them my way, I&#8217;ll sort em out!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metabates.com/2010/07/01/testing-is-not-an-option/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ruby 1.9 &amp; Rails 3.0</title>
		<link>http://www.metabates.com/2010/02/08/ruby-1-9-rails-3-0/</link>
		<comments>http://www.metabates.com/2010/02/08/ruby-1-9-rails-3-0/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 15:06:27 +0000</pubDate>
		<dc:creator>Mark Bates</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[active record]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.metabates.com/?p=313</guid>
		<description><![CDATA[I&#8217;ve always been a big proponent of Ruby 1.9, I make no bones about it. My question is why wouldn&#8217;t you be? It&#8217;s faster, more powerful, easier to use, and makes things a lot clearer and cleaner than 1.8. So why then are pretty much all of us still running our applications on 1.8.x? Great [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve always been a big proponent of Ruby 1.9, I make no bones about it. My question is why wouldn&#8217;t you be? It&#8217;s faster, more powerful, easier to use, and makes things a lot clearer and cleaner than 1.8. So why then are pretty much all of us still running our applications on 1.8.x? Great question, and as far as I can tell there is really only 1 answer.</p>
<p>That answer? Because no one else is. It&#8217;s stupid really, but it&#8217;s the truth. We&#8217;re all afraid to run our applications in 1.9 because we don&#8217;t know many other people that are. Because of that it makes it hard for you to make your application work with 1.9 because all those gems and libraries  you use aren&#8217;t 1.9 compatible, so you&#8217;re forced to keep running your app on 1.8. And so the cycle continues.</p>
<p>Enter Rails 3.0. Here is a major upgrade to the most prominent web framework in the Ruby community, and I would argue the reason that most of us got into Ruby in the first place. This upgrade will force us all to make some pretty severe changes to our applications to make them fully compatible.  The changes in ActiveRecord alone are so sweeping and massive that we, as a community, are going to have to put some serious time into upgrade our applications. Yet, despite this, we are all going to do it.</p>
<p>Why are we all going to upgrade to Rails 3.0? Because it  looks cool and sexy, and we want those great new features and all those performance enhancements to make our applications run faster. Which leads me back to Ruby 1.9.</p>
<p>In Rails 3.0 they are dropping support for Ruby 1.8.6 and below in favor of Ruby &gt;1.8.7 and &gt;1.9.1. I propose that Rails 3.0 becomes Ruby 1.9 compatible only. Think about it. What a perfect opportunity for us all. We are all going to have to upgrade the libraries and gems we maintain to support Rails 3.0 and we are going to be upgrading our applications to Rails 3.0, so why not go full steam into Ruby 1.9?</p>
<p>There is no better time than now to push forward into the future as a whole community. Let&#8217;s put Ruby 1.8 behind and reap the benefits of what Ruby 1.9 has to offer. What do you say? Can we do it? I think we can.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metabates.com/2010/02/08/ruby-1-9-rails-3-0/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>APN on Rails Needs a Home</title>
		<link>http://www.metabates.com/2009/12/21/apn-on-rails-needs-a-home/</link>
		<comments>http://www.metabates.com/2009/12/21/apn-on-rails-needs-a-home/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 16:30:41 +0000</pubDate>
		<dc:creator>Mark Bates</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[apn]]></category>
		<category><![CDATA[apn_on_rails]]></category>
		<category><![CDATA[apple push notifications]]></category>
		<category><![CDATA[push notification]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://www.metabates.com/?p=304</guid>
		<description><![CDATA[Hey there everyone, recently I have been getting a lot of requests for bug fixes and new features for the APN on Rails gem that I wrote. While I appreciate that the gem is getting a lot of use and helping a lot of people out, I, unfortunately, no longer have the time to maintain [...]]]></description>
			<content:encoded><![CDATA[<p>Hey there everyone, recently I have been getting a lot of requests for bug fixes and new features for the APN on Rails gem that I wrote. While I appreciate that the gem is getting a lot of use and helping a lot of people out, I, unfortunately, no longer have the time to maintain the gem.</p>
<p>Recent changes in my career have meant that I have moved away from doing a lot o iPhone development, and because of that I no longer have the time, nor the desire, to keep maintaining a gem I&#8217;m no longer using.</p>
<p>So, because of that, I would to find a new home for the APN on Rails gem so that it gets the love and attention it so desires. Are there any takers out there? Is someone willing to take on the ownership of this, apparently, very useful gem? If you are willing to take it on, please let me know and we can workout the details.</p>
<p>Thanks to everyone who has said good things about the gem, and I&#8217;m glad that it has helped people get to using push notifications quicker, hopefully, one of you can take this project and run with it. Thanks again.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metabates.com/2009/12/21/apn-on-rails-needs-a-home/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.736 seconds -->

