<?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>QuirkeyBlog &#187; Rails</title>
	<atom:link href="http://www.quirkey.com/blog/category/rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.quirkey.com/blog</link>
	<description>A Developer with too little time.</description>
	<lastBuildDate>Mon, 01 Aug 2011 16:07:38 +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>Rails Rumble: Please Tag Your Photos</title>
		<link>http://www.quirkey.com/blog/2009/08/24/rails-rumble-please-tag-your-photos/</link>
		<comments>http://www.quirkey.com/blog/2009/08/24/rails-rumble-please-tag-your-photos/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 04:42:29 +0000</pubDate>
		<dc:creator>AQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=345</guid>
		<description><![CDATA[After a mere 48 hours, Rails rumble and the app we (@mrb_bk and I) set out to build, Please Tag Your Photos is launched. This was both of our first &#8216;rumble and I was really excited to participate after 2 years of sitting on the side-lines. Somehow, with not enough planning and really only about [...]]]></description>
			<content:encoded><![CDATA[	<p><img src="http://img.skitch.com/20090824-kdn6ewggrm9yw9q61627kt4sxy.jpg" alt="Please Tag Your Photos" /></p>

	<p>After a mere 48 hours, <a href="http://railsrumble.com" title="">Rails rumble</a> and the app we (<a href="http://twitter.com/mrb_bk" title="">@mrb_bk</a> and I) set out to build, <a href="http://pleasetagyourphotos.com" title="">Please Tag Your Photos</a> is launched.</p>

	<p><span id="more-345"></span></p>

	<p>This was both of our first &#8216;rumble and I was really excited to participate after 2 years of sitting on the side-lines. Somehow, with not enough planning and really only about 24 hours of coding we were able to get something functional up.</p>

	<p>What is <a href="http://pleasetagyourphotos" title="">Please Tag Your Photos?</a> Well, a while ago I realized that I had over 1000 photos on Flickr and half of them didn&#8217;t even have real titles. Sure, I remember the moments the photos have captured now, but what about 5 years from now? I tried to do the tagging and updating in Flickr, but unfortunately, the interface made it really difficult to breeze through a lot of photos. The idea was to make an interface that would guide you and encourage you to give your photos a proper dose of data. We got pretty far in our idea, but given the time and opportunity to work on it some more in the future, I think it could actually be really useful.</p>

	<h4>What works now:</h4>

	<ul>
		<li>Flickr authentication</li>
		<li>Some fancy background fetching and scoring of all your photos</li>
		<li>Updating the title, description, and tags of a photo (updates to flickr too)</li>
		<li>Simple &#8216;recent tags&#8217; interface</li>
		<li>Live score updates</li>
	</ul>

	<h4>What we wanted to work:</h4>

	<ul>
		<li>Geo-tagging interface</li>
		<li>Some nice flashy JS page loading to make it a single page app (<a href="http://code.quirkey.com/sammy" title="">Sammy</a>, duh)</li>
	</ul>

	<h4>What we knew we knew we werent going to get to this weekend but would like to play with at some point:</h4>

	<ul>
		<li>Image scanning (using OpenCV) to do facial recognition/tagging.</li>
		<li>Collaborative Photo tagging &#8211; earn &#8216;points&#8217; for suggesting tags for other peoples photos</li>
	</ul>

	<p>All in all, decently successful. We used MongoDB for this project and it boosted productivity in some places (not worrying about changing schemas) and was a big road block in others (getting it to work with DelayedJob). Either way it was cool to get to know it, I&#8217;ll definitely be using it for future projects. Somehow, in this exhaustive weekend of coding, I did manage to pack in: Curry Making, Two brunches, a <span class="caps">BBQ</span>, and some decent sleep. Not too shabby.</p>
 ]]></content:encoded>
			<wfw:commentRss>http://www.quirkey.com/blog/2009/08/24/rails-rumble-please-tag-your-photos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>RailsBridge: Moving the community forward</title>
		<link>http://www.quirkey.com/blog/2009/05/04/railsbridge-moving-the-community-forward/</link>
		<comments>http://www.quirkey.com/blog/2009/05/04/railsbridge-moving-the-community-forward/#comments</comments>
		<pubDate>Mon, 04 May 2009 17:39:10 +0000</pubDate>
		<dc:creator>AQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=305</guid>
		<description><![CDATA[Some exciting news, a little less then a week ago, I tried to take an initiative and do something to move the community out of the negative mindset and towards something more positive. I found out that I wasn&#8217;t alone. Not surprisingly, there are a ton of amazing, talented, and ambitious people who are trying [...]]]></description>
			<content:encoded><![CDATA[	<p>Some exciting news, a little less then a week ago, I <a href="http://www.quirkey.com/blog/2009/04/27/the-ghetto-of-the-mind/" title="">tried to take an initiative</a> and do something to move the community out of the negative mindset and towards something more positive. I found out that I wasn&#8217;t alone. Not surprisingly, there are a ton of amazing, talented, and ambitious people who are trying really hard to do a lot of things to try to make the Rails and Ruby communities of now and the future &#8211; awesome.</p>

	<p>Officially, as of today, the work is being grouped and promoted through <a href="http://railsbridge.org" title="">RailsBridge.</a><br />
Thanks to everyone involved. I wont be there in person, so good luck to everyone at RailsConf!</p>
 ]]></content:encoded>
			<wfw:commentRss>http://www.quirkey.com/blog/2009/05/04/railsbridge-moving-the-community-forward/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On the Ruby on Rails Podcast</title>
		<link>http://www.quirkey.com/blog/2009/04/29/on-the-ruby-on-rails-podcast/</link>
		<comments>http://www.quirkey.com/blog/2009/04/29/on-the-ruby-on-rails-podcast/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 17:17:30 +0000</pubDate>
		<dc:creator>AQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Press]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Sinatra]]></category>

		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=288</guid>
		<description><![CDATA[Thanks to Geoff of Peepcode fame I was interviewed about Sinatra and my talk at GoGaRuCo on the Ruby on Rails Podcast. The episode also features Rich Kilmer &#8211; whose talk about MacRuby and HotCocoa totally blew my mind.]]></description>
			<content:encoded><![CDATA[	<p>Thanks to <a href="http://www.peepcode.com" title="">Geoff of Peepcode fame</a> I was interviewed about <a href="http://podcast.rubyonrails.org/programs/1/episodes/gogaruco" title="">Sinatra and my talk at GoGaRuCo on the Ruby on Rails Podcast.</a></p>

	<p>The episode also features <a href="http://richkilmer.blogs.com/" title="">Rich Kilmer</a> &#8211; whose talk about <a href="http://www.macruby.org/" title="">MacRuby and HotCocoa</a> totally blew my mind.</p>
 ]]></content:encoded>
			<wfw:commentRss>http://www.quirkey.com/blog/2009/04/29/on-the-ruby-on-rails-podcast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Farewell Edinburgh</title>
		<link>http://www.quirkey.com/blog/2009/03/29/farewell-edinburgh/</link>
		<comments>http://www.quirkey.com/blog/2009/03/29/farewell-edinburgh/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 21:45:32 +0000</pubDate>
		<dc:creator>AQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Travel]]></category>

		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=265</guid>
		<description><![CDATA[To soon, much too soon, we&#8217;re leaving Edinburgh and are off on a whirlwind tour of the Highlands and then London. The conference was amazing. Well organized, great talks, and everyone was attentive, polite, AND great to talk too. I had a fantastic time and I hope to come back next year. Thanks to everyone [...]]]></description>
			<content:encoded><![CDATA[	<p>To soon, <em>much</em> too soon, we&#8217;re leaving Edinburgh and are off on a whirlwind tour of the Highlands and then London. The conference was amazing. Well organized, great talks, and everyone was attentive, polite, <span class="caps">AND</span> great to talk too. I had a fantastic time and I hope to come back next year. Thanks to everyone who gave me constructive feedback and sat through some <span class="caps">FAIL</span> during the live coding at the end of my talk.</p>

	<p>If people are interested, I&#8217;ve <a href="http://www.scribd.com/doc/13733666/UsingAbusingResusing-Ruby-on-Rails" title="">posted the slides online at scribd.</a> I&#8217;ll post an update when the video is available, too.</p>

	<p>Also here are all the libraries I mentioned in the talk.</p>

	<p><a href="http://code.quirkey.com/qadmin" title="">http://code.quirkey.com/qadmin</a><br />
<a href="http://code.quirkey.com/qcontent" title="">http://code.quirkey.com/qcontent</a><br />
<a href="http://github.com/nakajima/acts_as_fu" title="">http://github.com/nakajima/acts_as_fu</a></p>

 ]]></content:encoded>
			<wfw:commentRss>http://www.quirkey.com/blog/2009/03/29/farewell-edinburgh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What I&#8217;ve been up to: Week of 3/23</title>
		<link>http://www.quirkey.com/blog/2009/03/23/what-ive-been-up-to-week-of-323/</link>
		<comments>http://www.quirkey.com/blog/2009/03/23/what-ive-been-up-to-week-of-323/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 20:27:31 +0000</pubDate>
		<dc:creator>AQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Sinatra]]></category>

		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=256</guid>
		<description><![CDATA[Since my last plea for Sinatra as a library a couple things went down: My article was published in The Rubyist! Thanks to Jeremy McAnally for getting it out. Buy a copy and support a burgeoning dead tree business. I was interviewed about Sinatra for Ruby Learning. Thanks to Satish. He&#8217;s doing a great job [...]]]></description>
			<content:encoded><![CDATA[	<p>Since my last plea for <a href="http://www.quirkey.com/blog/2009/03/04/sinatra-the-framework-within/" title="">Sinatra as a library</a> a couple things went down:</p>

	<ul>
		<li>My article was published in <a href="http://therubyist.com" title="">The Rubyist!</a> Thanks to Jeremy McAnally for getting it out. Buy a copy and support a burgeoning dead tree business.</li>
		<li>I was <a href="http://rubylearning.com/blog/2009/03/20/interview-aaron-quint-on-sinatra/" title="">interviewed about Sinatra for Ruby Learning.</a> Thanks to Satish. He&#8217;s doing a great job spreading the gospel of Ruby and Rails. If you&#8217;re interested in Sinatra &#8211; look for his seminars &#8211; I&#8217;m sure you&#8217;ll learn a ton.</li>
		<li>In preparation for my presentation I started adding what I consider pretty good documentation to a couple of my gems/plugins using github pages. See <a href="http://code.quirkey.com/restful_query" title="">Restful Query,</a> <a href="http://code.quirkey.com/qadmin" title="">Qadmin,</a> and <a href="http://code.quirkey.com/qcontent" title="">Qcontent</a></li>
	</ul>

	<p>Other insane news: Its less then a week from <a href="http://scotlandonrails.com" title="">Scotland on Rails!</a> My presentation is all wrapped up. I&#8217;m getting a little nervous, but looking forward to the fun times ahead of meeting great Rubyists from around the world and having a <span class="caps">REAL</span> vacation all over the UK. Exciting!</p>

	<p>If you&#8217;re going to Scotland on Rails and reading this &#8211; please say hello at the conference. Theres a couple projects I&#8217;m hoping to hack on there, too.</p>
 ]]></content:encoded>
			<wfw:commentRss>http://www.quirkey.com/blog/2009/03/23/what-ive-been-up-to-week-of-323/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Rails App Templates</title>
		<link>http://www.quirkey.com/blog/2009/02/16/rails-app-templates/</link>
		<comments>http://www.quirkey.com/blog/2009/02/16/rails-app-templates/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 16:00:31 +0000</pubDate>
		<dc:creator>AQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Software/Scripts]]></category>

		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=222</guid>
		<description><![CDATA[Over the holidays I had my first experience contributing to Rails by adding test coverage and a bit of a refactor to Jeremy Mcanally&#8217;s awesome Rails templating feature. It&#8217;s finally going to be released as Part of Rails 2.3 (exciting!). Ryan Bates released a great Railscast with a detailed overview of templates. Ryan does a [...]]]></description>
			<content:encoded><![CDATA[	<p>Over the holidays I had my first experience contributing to Rails by <a href="http://github.com/rails/rails/commit/9fd35fc2d892393386ca9f522d25ba0bcb9c6764" title="">adding test coverage and a bit of a refactor</a> to <a href="http://github.com/rails/rails/commit/e8cc4b116c460c524961a07da92da3f323854c15" title="">Jeremy Mcanally&#8217;s awesome Rails templating feature.</a></p>

	<p>It&#8217;s finally <a href="http://weblog.rubyonrails.org/2009/2/1/rails-2-3-0-rc1-templates-engines-rack-metal-much-more" title="">going to be released as Part of Rails 2.3</a> (exciting!).</p>

	<p>Ryan Bates released a great <a href="http://railscasts.com/episodes/148-app-templates-in-rails-2-3" title="">Railscast with a detailed overview of templates.</a> Ryan does a great job as usual getting to the meat of the feature.</p>

	<p>If you&#8217;re interested, <a href="http://github.com/quirkey/halpers/tree/master" title="">I have my own Rails template as part of my &#8216;halpers&#8217;.</a> It installs jQuery and a couple of plugins and gems &#8211; including a <a href="http://github.com/quirkey/restful-authentication" title="">forked version of restful-authentication</a> that has a shoulda test suite and email of login based authentication. I hope you enjoy this feature as much as I do.</p>
 ]]></content:encoded>
			<wfw:commentRss>http://www.quirkey.com/blog/2009/02/16/rails-app-templates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On Pairing</title>
		<link>http://www.quirkey.com/blog/2009/02/09/on-pairing/</link>
		<comments>http://www.quirkey.com/blog/2009/02/09/on-pairing/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 14:15:13 +0000</pubDate>
		<dc:creator>AQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=201</guid>
		<description><![CDATA[This past week was intense. This past week . . . I paired. A couple of weeks ago, my good friend and team lazer partner, Mike (mrb) proposed that once I was done launching in January we should do a couple days of side by side programming on the big client project he has been [...]]]></description>
			<content:encoded><![CDATA[	<p>This past week was intense. This past week . . . I paired.</p>

	<p>A couple of weeks ago, my good friend and <a href="http://wehavelazers.com" title="">team lazer</a> partner, Mike (mrb) proposed that once I was done launching in January we should do a couple days of side by side programming on the big client project he has been working on. There&#8217;s been a lot of talk about Pair Programming in the Ruby and Rails community lately (<a href="http://blog.obiefernandez.com/content/2009/01/now-available-on-video-hashrocket.html" title="">here</a> and <a href="http://www.pivotalabs.com/discipline" title="">here</a>) and I can say honestly up until now, I didn&#8217;t really &#8216;get it&#8217;. Sure, it helps to have someone check your code but isn&#8217;t that just cutting each developers productivity in half? I couldn&#8217;t really understand how two programmers working on the same thing at the same time could produce more work then two programmers working separately. I was looking at the wrong equation.</p>

	<p><span id="more-201"></span></p>

	<h3>What I thought:</h3>

	<p>1 nerd working alone = ~1000 lines of code a day<br />
2 nerds each working alone = ~2000 lines of a code a day</p>

	<p>2 nerds working together = ~1000 lines of code a day</p>

	<h3>What I left out:</h3>

	<p><strong>Quality.</strong></p>

	<p>Sure, two programmers working separately can produce a lot more work product if work product is measured in shear volume. However, what I discovered, is the code we produced working together was cleaner, faster, and more acurate then what we could have produced in the same time apart.</p>

	<p>When we decided to go for it we set out some initial goals: What did Mike want to achieve in two days?</p>

	<ul>
		<li>Speeding up some slow actions</li>
		<li>Fixing some broken pieces</li>
		<li>Cleaning up some repetitive code</li>
	</ul>

	<p>It seemed reasonable. I came up with a plan of action:</p>

	<ul>
		<li>Get a tour of the codebase</li>
		<li>Find a good place to start</li>
		<li>Branch the codebase</li>
		<li>Add test coverage</li>
		<li>Tear things apart</li>
	</ul>

	<p>And so it was coded.</p>

	<p>In two days we managed to add a small but solid test suite to the linchpin actions, reduce the controller time in most places by 400%, and delete a ton of code. It felt really good. By doing this as a Pairing session instead of just me grabbing code and working on it alone we both gained a ton. It was the small pieces of this experience that I didn&#8217;t think initially about that made me realize how powerful pairing can be.</p>

	<p><strong>Lack of Distractions/Extreme Focus</strong> &#8211; Because we were sharing a single computer and both staring at the same piece of code all of the common things that would derail a work session (Email, <span class="caps">AIM</span>, Twitter, etc) werent even available. After the first day we stepped back and realized that besides the break for lunch and some coffee/water breaks, we worked the entire day.</p>

	<p><strong>Code Correction/No Shortcuts</strong> &#8211; Having someone look over your shoulder provides not only the constant spell check (something I need) but also forces you out of the habit of shortcuts or cutting corners. A physical manifestation of your conscience, your partner wont (or at least shouldn&#8217;t) allow you to write the crappy code to just &#8216;get it done&#8217;. In this way, after all was said and done, not only did I feel extremely productive, but I felt like I wrote great code.</p>

	<p><strong>Social Hacking/Learning</strong> &#8211; Working from home for the past little while and then jumping into this made me realize that constant human contact for me is a requirement. It puts me in a better mood as well as keeps me focused. I also enjoyed the give and take of this relationship.</p>

	<p>In an ideal world, I suppose your Pair partner in coding is a rough equivilient of a Detective&#8217;s partner. They back you up when there&#8217;s heat; They make sure you&#8217;re not taking cuts under the table; They keep you on your toes.</p>

	<p>Well, something like that.</p>

	<p>P.S. This week I hope to post some of the better refactoring patterns/examples discovered in our sessions.</p>

 ]]></content:encoded>
			<wfw:commentRss>http://www.quirkey.com/blog/2009/02/09/on-pairing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ActionMailer: Changing the subject in the template</title>
		<link>http://www.quirkey.com/blog/2008/08/29/actionmailer-changing-the-subject-in-the-template/</link>
		<comments>http://www.quirkey.com/blog/2008/08/29/actionmailer-changing-the-subject-in-the-template/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 13:51:18 +0000</pubDate>
		<dc:creator>AQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=172</guid>
		<description><![CDATA[Here's another little bit to go along with the previous post. Another thing I didn't quite get/like about some of the ActionMailer setup is that even though you're putting all the email body text in a file somewhere that's not your Mailer class, you put the text of you're subject in there. Some more snooping [...]]]></description>
			<content:encoded><![CDATA[<p>Here's another little bit to go along with <a href="http://www.quirkey.com/blog/2008/08/28/actionmailer-hacking-multiple-template-paths/">the previous post.</a></p>

<p>Another thing I didn't quite get/like about some of the ActionMailer setup is that even though you're putting all the email body text in a file somewhere that's not your Mailer class, you put the text of you're subject in there. Some more snooping in the source reveals setting the subject from within the template is easy - your Mailer instance is exposed to the template as 'controller':</p>

<pre class="textmate-source"><span class="text text_html text_html_ruby"><span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html">&lt;% controller<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>subject <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>Change of subject<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span> %&gt;</span>
Hello <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html">&lt;%= <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>user</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>display_name %&gt;</span>

Thank you for your order. 

Love <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html">&lt;%= controller<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>from %&gt;</span></span></pre>

]]></content:encoded>
			<wfw:commentRss>http://www.quirkey.com/blog/2008/08/29/actionmailer-changing-the-subject-in-the-template/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ActionMailer: Hacking multiple template paths</title>
		<link>http://www.quirkey.com/blog/2008/08/28/actionmailer-hacking-multiple-template-paths/</link>
		<comments>http://www.quirkey.com/blog/2008/08/28/actionmailer-hacking-multiple-template-paths/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 03:23:26 +0000</pubDate>
		<dc:creator>AQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.quirkey.com/blog/?p=168</guid>
		<description><![CDATA[I was up against a little wall this afternoon and I had to monkey patch my way out. It struck me as weird that with ActionView you can have a whole array (really Array) of view/template paths that are iteratively searched for a matching template, however, with ActionMailer (even though it uses ActionView) you can [...]]]></description>
			<content:encoded><![CDATA[<p>I was up against a little wall this afternoon and I had to monkey patch my way out.</p>

<p>It struck me as weird that with ActionView you can have a whole array (really Array) of view/template paths that are iteratively searched for a matching template, however, with ActionMailer (even though it uses ActionView) you can only define or override the single template_root. </p>
<p>Bizarre, right? I bet rails core had some good reason for this, but in this specific project I'm relying heavily on using ActionView::Base.prepend_view_path() to have the app structured with default templates that are easily replaced by dropping templates in to a different view path. So if I'm doing that for an entire site it would make sense to do the same for my 'Notification' templates as well. The rails docs were pretty unhelpful, but a quick dive into the source proved fruitful. If you drop the code below into config/initializers/action_mailer_extensions.rb:</p>

<pre class="textmate-source"><span class="source source_ruby source_ruby_rails"><span class="meta meta_module meta_module_ruby"><span class="keyword keyword_control keyword_control_module keyword_control_module_ruby">module</span> <span class="entity entity_name entity_name_type entity_name_type_module entity_name_type_module_ruby">ActionMailer</span></span>
<span class="meta meta_class meta_class_ruby">  <span class="keyword keyword_control keyword_control_class keyword_control_class_ruby">class</span> <span class="entity entity_name entity_name_type entity_name_type_class entity_name_type_class_ruby">Base</span></span>
    class_inheritable_accessor <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>view_paths</span>
    
    <span class="meta meta_function meta_function_method meta_function_method_with-arguments meta_function_method_with-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">self.prepend_view_path</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_ruby">(</span><span class="variable variable_parameter variable_parameter_function variable_parameter_function_ruby">path</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_ruby">)</span></span>
      view_paths<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>unshift<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">*</span>path<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>
      <span class="support support_class support_class_ruby">ActionView</span><span class="punctuation punctuation_separator punctuation_separator_other punctuation_separator_other_ruby">::</span><span class="support support_class support_class_ruby">TemplateFinder</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>process_view_paths<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>path<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>
    <span class="keyword keyword_control keyword_control_ruby">end</span>

    <span class="meta meta_function meta_function_method meta_function_method_with-arguments meta_function_method_with-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">self.append_view_path</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_ruby">(</span><span class="variable variable_parameter variable_parameter_function variable_parameter_function_ruby">path</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_ruby">)</span></span>
      view_paths<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>push<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">*</span>path<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>
      <span class="support support_class support_class_ruby">ActionView</span><span class="punctuation punctuation_separator punctuation_separator_other punctuation_separator_other_ruby">::</span><span class="support support_class support_class_ruby">TemplateFinder</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>process_view_paths<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>path<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>
    <span class="keyword keyword_control keyword_control_ruby">end</span>

    <span class="keyword keyword_other keyword_other_special-method keyword_other_special-method_ruby">private</span>
    <span class="meta meta_function meta_function_method meta_function_method_without-arguments meta_function_method_without-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">self.view_paths</span></span>
      <span class="variable variable_other variable_other_readwrite variable_other_readwrite_class variable_other_readwrite_class_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@@</span>view_paths</span> <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_augmented keyword_operator_assignment_augmented_ruby">||=</span> <span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">[</span>template_root<span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">]</span>
    <span class="keyword keyword_control keyword_control_ruby">end</span>
    
    <span class="meta meta_function meta_function_method meta_function_method_without-arguments meta_function_method_without-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">view_paths</span></span>
      <span class="variable variable_language variable_language_ruby">self</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>class<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>view_paths
    <span class="keyword keyword_control keyword_control_ruby">end</span>
    
    <span class="meta meta_function meta_function_method meta_function_method_with-arguments meta_function_method_with-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">initialize_template_class</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_ruby">(</span><span class="variable variable_parameter variable_parameter_function variable_parameter_function_ruby">assigns</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_ruby">)</span></span>
      <span class="support support_class support_class_ruby">ActionView</span><span class="punctuation punctuation_separator punctuation_separator_other punctuation_separator_other_ruby">::</span><span class="support support_class support_class_ruby">Base</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span><span class="keyword keyword_other keyword_other_special-method keyword_other_special-method_ruby">new</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>view_paths<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> assigns<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="variable variable_language variable_language_ruby">self</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>
    <span class="keyword keyword_control keyword_control_ruby">end</span>

  <span class="keyword keyword_control keyword_control_ruby">end</span>
<span class="keyword keyword_control keyword_control_ruby">end</span></span></pre>

You can do:

<pre class="textmate-source"><span class="source source_ruby"><span class="support support_class support_class_ruby">ActionMailer</span><span class="punctuation punctuation_separator punctuation_separator_other punctuation_separator_other_ruby">::</span><span class="support support_class support_class_ruby">Base</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>prepend_view_path<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>/my/other/path/to/search/first/<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> or
</span><span class="support support_class support_class_ruby">ActionMailer</span><span class="punctuation punctuation_separator punctuation_separator_other punctuation_separator_other_ruby">::</span><span class="support support_class support_class_ruby">Base</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>append_view_path<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>/my/other/path/to/search/last/<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span></span></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.quirkey.com/blog/2008/08/28/actionmailer-hacking-multiple-template-paths/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>DRYing up Rails Flash with Flashdance</title>
		<link>http://www.quirkey.com/blog/2008/02/29/drying-up-rails-flash-with-flashdance/</link>
		<comments>http://www.quirkey.com/blog/2008/02/29/drying-up-rails-flash-with-flashdance/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 19:24:23 +0000</pubDate>
		<dc:creator>AQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[QuirkeyTools]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Software/Scripts]]></category>

		<guid isPermaLink="false">http://www.quirkey.com/blog/2008/02/29/drying-up-rails-flash-with-flashdance/</guid>
		<description><![CDATA[The scenario: Its 3AM. You've been coding all day and youre just about ready to launch this sweet social networking app for steel workers who love to dance. One last thing - you need to replace all the crappy copy you stuck in to your 'flash' messages with real informative text. "sucesfil post" might make [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/tzofia/185003069/" target="_blank"><img src="http://farm1.static.flickr.com/73/185003069_af97784abe.jpg" alt="Flashdance" /></a></p>

<p><em>The scenario:</em> Its 3AM. You've been coding all day and youre just about ready to launch this sweet social networking app for steel workers who love to dance. One last thing - you need to replace all the crappy copy you stuck in to your 'flash' messages with <strong>real informative text</strong>. "sucesfil post" might make sense to you, but wont make sense to the blue collar guy doing the electric slide all over your server. You go to replace these warnings and feedback messages but theyre all over your code. <em>You think</em>: If Rails is so DRY and the business and display logic are all supposed to be separate, then why am I putting messages that will end up in my views all through my controllers?!</p>

<h3>Introducing Flashdance</h3>

<p>The get-the-view-out-of-the-controller-so-you-can-rest plugin.</p>

<p>Instead of all-up-in your controller files, messages are stored in a single YAML file:</p>

<pre class="textmate-source"><span class="source source_yaml"><span class="comment comment_line comment_line_number-sign comment_line_number-sign_yaml"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_yaml">#</span> in app/views/shared/flash.yml
</span>
<span class="string string_unquoted string_unquoted_yaml"><span class="entity entity_name entity_name_tag entity_name_tag_yaml">all_is_good<span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_yaml">:</span></span> <span class="string string_unquoted string_unquoted_yaml">This is great</span></span>
<span class="string string_unquoted string_unquoted_yaml"><span class="entity entity_name entity_name_tag entity_name_tag_yaml">this_failed<span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_yaml">:</span></span> <span class="string string_unquoted string_unquoted_yaml">This failed</span></span>
<span class="string string_unquoted string_unquoted_yaml"><span class="entity entity_name entity_name_tag entity_name_tag_yaml">using_erb<span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_yaml">:</span></span> <span class="string string_unquoted string_unquoted_yaml">you are an idiot, &lt;%= @email %&gt;</span></span>
<span class="meta meta_tag meta_tag_yaml"><span class="entity entity_name entity_name_tag entity_name_tag_yaml">section</span><span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_yaml">:</span>
</span>  <span class="string string_unquoted string_unquoted_yaml"><span class="entity entity_name entity_name_tag entity_name_tag_yaml">subsection<span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_yaml">:</span></span> <span class="string string_unquoted string_unquoted_yaml">I'm nested</span></span>
<span class="meta meta_tag meta_tag_yaml"><span class="entity entity_name entity_name_tag entity_name_tag_yaml">my_controller</span><span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_yaml">:</span>
</span>  <span class="meta meta_tag meta_tag_yaml"><span class="entity entity_name entity_name_tag entity_name_tag_yaml">my_action</span><span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_yaml">:</span>
</span>    <span class="string string_unquoted string_unquoted_yaml"><span class="entity entity_name entity_name_tag entity_name_tag_yaml">message<span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_yaml">:</span></span> <span class="string string_unquoted string_unquoted_yaml">I'm soaking wet</span></span></span></pre>

<h4>Examples</h4>

<p>At its most unobtrusive:</p>

<pre class="textmate-source"><span class="source source_ruby source_ruby_rails"><span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> in your controller
</span>  <span class="meta meta_function meta_function_method meta_function_method_without-arguments meta_function_method_without-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">update</span></span>
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby">    <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> . . . booring part where record gets updated
</span>    flash<span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">[</span><span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>warning</span><span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">]</span> <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> flashdance<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>this_failed</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span> <span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span>=&gt; This failed
</span>  <span class="keyword keyword_control keyword_control_ruby">end</span>
</span></pre>

<p>A little nicer:</p>

<pre class="textmate-source"><span class="source source_ruby source_ruby_rails"><span class="meta meta_function meta_function_method meta_function_method_without-arguments meta_function_method_without-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">update</span></span>
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby">    <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> . . .
</span>    flash<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>message</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>all_is_good<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span> <span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> YAML entries can be referred to by strings or symbols
</span><span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby">    <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> equivalent to flash[:message] = "This is great"
</span>  <span class="keyword keyword_control keyword_control_ruby">end</span></span></pre>
  
<p>ERB is evaluated in the context of the controller so you can do fun things like:</p>
  
<pre class="textmate-source"><span class="source source_ruby source_ruby_rails">  <span class="meta meta_function meta_function_method meta_function_method_without-arguments meta_function_method_without-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">tell_off_the_spammer</span></span>
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby">    <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> . . .
</span>    <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>email</span> <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>jon@example.com<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span>
    flash<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>warning</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>using_erb</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby">    <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> equivalent to flash[:warning] = "you are an idiot, jon@example.com"
</span>  <span class="keyword keyword_control keyword_control_ruby">end</span>
</span></pre>  

<p>So what if your app is huge and you use these flash thingies all over the place? Your YAML file might get big and unreadable. Well, thats why you can nest! Nested sections are refered to by arrays.</p>

<pre class="textmate-source"><span class="source source_ruby source_ruby_rails">  <span class="meta meta_function meta_function_method meta_function_method_without-arguments meta_function_method_without-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">make_a_nest</span></span>
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby">    <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span>  . . .
</span>    flash<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>nest</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">[</span><span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>section</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span><span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>subsection</span><span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">]</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby">    <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> equivalent to flash[:nest] = "I'm nested"
</span>  <span class="keyword keyword_control keyword_control_ruby">end</span>
</span></pre>
  
<p>Flashdance automatically checks for entries nested in the controller/action path where you call it from. And heres where you get splashed with that big bucket of water:</p>

<pre class="textmate-source"><span class="source source_ruby source_ruby_rails"><span class="meta meta_rails meta_rails_controller"><span class="meta meta_class meta_class_ruby"><span class="keyword keyword_control keyword_control_class keyword_control_class_ruby">class</span> <span class="entity entity_name entity_name_type entity_name_type_class entity_name_type_class_ruby">MyController<span class="entity entity_other entity_other_inherited-class entity_other_inherited-class_ruby"> <span class="punctuation punctuation_separator punctuation_separator_inheritance punctuation_separator_inheritance_ruby">&lt;</span> ApplicationController</span></span></span>
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby">  <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> . . . 
</span>  
  <span class="meta meta_function meta_function_method meta_function_method_without-arguments meta_function_method_without-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">my_action</span></span>
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby">   <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> . . . where you dance your heart out
</span>   flash<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>message</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby">   <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> equivalent to flash[:message] = "I'm soaking wet"
</span>  <span class="keyword keyword_control keyword_control_ruby">end</span>
</span><span class="keyword keyword_control keyword_control_ruby">end</span></span></pre>

<h4>Install it</h4>

<p>From subversion:</p>

<pre>
./script/plugin install -x svn://svn.quirkey.com/quirkey_tools/trunk/flashdance
</pre>

<p>or Download: <a href="http://www.quirkey.com/downloads/quirkey_tools/flashdance.tar.gz">flashdance.tar.gz</a></p>

<p>You can email me at aaron at this domain for bug reports/comments/suggestions - and I'm looking to set up Trac or something else soon.</p>
<p></p>
<p><em>Photo credit: <a href="http://www.flickr.com/photos/tzofia/185003069/">http://www.flickr.com/photos/tzofia/185003069/</a></em>]]></content:encoded>
			<wfw:commentRss>http://www.quirkey.com/blog/2008/02/29/drying-up-rails-flash-with-flashdance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QuirkeyTools</title>
		<link>http://www.quirkey.com/blog/2008/02/28/quirkeytools/</link>
		<comments>http://www.quirkey.com/blog/2008/02/28/quirkeytools/#comments</comments>
		<pubDate>Thu, 28 Feb 2008 22:09:28 +0000</pubDate>
		<dc:creator>AQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Software/Scripts]]></category>

		<guid isPermaLink="false">http://www.quirkey.com/blog/2008/02/28/quirkeytools/</guid>
		<description><![CDATA[I&#8217;ve been such a Rails mooch. Relying on everyone else&#8217;s plugins, gems, and helpful blog posts. A while ago I said how I wanted to be a real part of this community. Well its time to stop coding (briefly) and start sharing. It&#8217;s time to give back. Over the past year and a half () [...]]]></description>
			<content:encoded><![CDATA[	<p><img src="http://farm1.static.flickr.com/25/36125185_0517a93806.jpg" alt="" border="0" /></p>

	<p>I&#8217;ve been such a Rails mooch. Relying on everyone else&#8217;s plugins, gems, and helpful blog posts. A while ago I said <a href="http://www.quirkey.com/blog/2006/04/12/confessions-of-a-rails-groupie/" title="">how I wanted to be a real part of this community.</a> Well its time to stop coding (briefly) and start sharing. It&#8217;s time to give back.</p>

	<p>Over the past year and a half (<img src="!" alt="" border="0" />) of doing Rails and Ruby full time, I&#8217;ve come up with a lot of code thats useful, at least to me. For a while its all been packaged as a plugin on my private <span class="caps">SVN</span> server called QuirkeyTools. It&#8217;s chock full of helpers, generators, extensions, macros &#8211; its bursting at the seems.</p>

	<p>So the idea over the next couple of weeks is to start splitting out the code, cleaning up the tests, and releasing them as separate Rails plugins. I&#8217;m also going to look into packaging some gems &#8211; which sounds like fun.</p>

	<p>All of this is made possible in part by the fact that I&#8217;ve got a new <span class="caps">VPS</span> from <a href="http://www.slicehost.com/" title="">slicehost.</a> I&#8217;m not getting paid to say this but its awesome! Super fast, haven;t had any reliability problems and its a blank slate &#8211; meaning install whatever you want. They also have some <strike>great</strike> of the <a href="http://articles.slicehost.com/" title="">best tutorials for setting up.</a> This blog remains (for the time being) on my shared host at Site5, but I&#8217;ve set up an <span class="caps">SVN</span> server and repositories with public read permissions. So here comes the code . . .</p>

	<p><em>Photo Credit: <a href="http://www.flickr.com/photos/docman/36125185/sizes/m/</em" title="">http://www.flickr.com/photos/docman/36125185/sizes/m/</a>></p>
 ]]></content:encoded>
			<wfw:commentRss>http://www.quirkey.com/blog/2008/02/28/quirkeytools/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Recent Project: Wejetset</title>
		<link>http://www.quirkey.com/blog/2008/02/18/recent-project-wejetset/</link>
		<comments>http://www.quirkey.com/blog/2008/02/18/recent-project-wejetset/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 19:39:40 +0000</pubDate>
		<dc:creator>AQ</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Web Apps]]></category>

		<guid isPermaLink="false">http://www.quirkey.com/blog/2008/02/18/recent-project-wejetset/</guid>
		<description><![CDATA[Sexy and cool and full stuff is wejetset.com, an online store + blog, highlighting some of the neatest travel and general awesome products available. I coded this application from scratch and I can say that the back-end is pretty sexy too. E-commerce sites aren&#8217;t always the most fun to work on, but with this gorgeous [...]]]></description>
			<content:encoded><![CDATA[	<p><a href="http://www.wejetset.com"><img id="image147" src="http://www.quirkey.com/blog/wp-content/uploads/2008/02/wejetset_screen.jpg" alt="WeJetSet.com" /></a></p>

	<p>Sexy and cool and full stuff is <a href="http://wejetset.com" title="">wejetset.com,</a> an online store + blog, highlighting some of the neatest travel and general awesome products available.</p>

	<p>I coded this application from scratch and I can say that the back-end is pretty sexy too. E-commerce sites aren&#8217;t always the most fun to work on, but with this gorgeous design &#8211; a collaboration between <a href="http://www.stapledesign.com/" title="">Staple Design,</a> <a href="http://www.friendandstranger.com/speak/" title="">friend and stranger</a> and <a href="http://www.intersectnyc.com" title="">Intersect</a> &#8211; I can easily say I was very proud to be a part of this project.</p>

	<p>Its gotten some <a href="http://www.joshspear.com/item/wejetset-came-and-conquered/" title="">good press already.</a> I kind of want to buy everything in the store (<a href="http://www.wejetset.com/store/item/36" title="">action books?</a> Sweet GTDness.).</p>
 ]]></content:encoded>
			<wfw:commentRss>http://www.quirkey.com/blog/2008/02/18/recent-project-wejetset/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recent Project: Indagare</title>
		<link>http://www.quirkey.com/blog/2007/08/08/project-indagare/</link>
		<comments>http://www.quirkey.com/blog/2007/08/08/project-indagare/#comments</comments>
		<pubDate>Wed, 08 Aug 2007 22:36:36 +0000</pubDate>
		<dc:creator>AQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.quirkey.com/blog/2007/08/08/project-indagare/</guid>
		<description><![CDATA[Indagare at its heart is an online community and magazine focused around luxury travel. Really, it&#8217;s much more. Not only does Indagare publish a monthly newsletter (trust me &#8211; this is not a double sided sheet of paper its really more of a mini-magazine) for its members, but it provides a constantly growing wealth of [...]]]></description>
			<content:encoded><![CDATA[	<p><a href="http://www.indagare.com" title="">Indagare</a> at its heart is an online community and magazine focused around luxury travel. Really, it&#8217;s much more. Not only does Indagare publish a monthly newsletter (trust me &#8211; this is not a double sided sheet of paper its really more of a mini-magazine) for its members, but it provides a constantly growing wealth of information and tips provided by experienced travel writers and members alike.</p>

	<p>I worked as the Lead Developer with <a href="http://www.intersectnyc.com" title="">Intersect, Inc.</a> to build Indagare from the ground up. Working closely with the Indagare team and Intersect&#8217;s designers, we were able to launch (on a very tight deadline) an amazing and truly unique online experience.</p>

	<p>Indagare was built with Ruby on Rails and includes a lot of cool features that I implemented for the first time. Not only is the entire content of the site controlled with a very simple custom management tool, but the members have a number of features and tools at their disposal. Depending on your <a href="http://www.indagare.com/info/membership" title="">membership level</a> you can comment on articles, bookmark them, organize your bookmarks into itineraries, talk to other members and the staff in a number of different forums/discussion boards, and a lot more.</p>

	<p>This project was one of the most challenging I&#8217;ve ever completed, not just because of its size, but also because of its specificity and customization. It was also one of the most fun. I learned more and wrote more neat code then I ever have before, and its not over.</p>

	<p>One of the most fun things about this project was being able to brainstorm and bring new ideas to the client and work out a plan to implement a lot of them in the near future. Melissa Bradley and the team at Indagare are all very very intelligent. They really know what they want but are still very open to new ideas. Some of the coolest features that we&#8217;ve developed together haven&#8217;t even launched yet, but are coming in a big update very soon.</p>

	<p>If you&#8217;re interested in becoming a member, you can apply <a href="http://www.indagare.com/info/join_now" title="">here.</a> It does cost a bit, but I can tell you its worth it now, and the site is only getting better.</p>
 ]]></content:encoded>
			<wfw:commentRss>http://www.quirkey.com/blog/2007/08/08/project-indagare/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>All your problems are nil</title>
		<link>http://www.quirkey.com/blog/2007/08/06/all-your-problems-are-nil/</link>
		<comments>http://www.quirkey.com/blog/2007/08/06/all-your-problems-are-nil/#comments</comments>
		<pubDate>Tue, 07 Aug 2007 02:39:41 +0000</pubDate>
		<dc:creator>AQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.quirkey.com/blog/2007/08/06/all-your-problems-are-nil/</guid>
		<description><![CDATA[Your logs are littered with them. Like an apparition, the Rails screen of death appears to haunt your sleep. /execute/this/action/ works sometimes, but not all the time. My friends, your problems are nil. In my growing time with Ruby and Rails I&#8217;ve noticed a good deal of reoccurring themes. Themes may be to grand . [...]]]></description>
			<content:encoded><![CDATA[<p>Your logs are littered with them. Like an apparition, the Rails screen of death appears to haunt your sleep. /execute/this/action/ works sometimes, but not all the time. My friends, your problems are nil.
</p>
<p>In my growing time with Ruby and Rails I&#8217;ve noticed a good deal of reoccurring themes. Themes may be to grand . . . mistakes are more accurate. In working with my own and other people&#8217;s code, an error that keeps coming up, and is often responsible for the majority of errors on a site looks something like this:
</p>
<pre>
<code>
  undefined method `amplify' for nil:NilClass

  [RAILS_ROOT]/app/controllers/belch_controller.rb:102:in `make_that_belch_loud'
</code>
</pre>

<p>The undefined method error is everywhere. And it can cause an endless amount of frustration as a bourgeoning Ruby developer. This foul thing arrives out of Ruby&#8217;s beauty. Ruby is very loosely typed, meaning the variable called  <em>&#8216;integer&#8217;</em> could very well be a string, or even an ActiveRecord model. There are various ways to test this:
</p>
<pre class="textmate-source"><span class="source source_ruby">integer <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>Not so much<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span>
integer<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>is_a?<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="variable variable_other variable_other_constant variable_other_constant_ruby">Fixnum</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span> <span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span>=&gt; false
</span>integer<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>class <span class="keyword keyword_operator keyword_operator_comparison keyword_operator_comparison_ruby">==</span> <span class="variable variable_other variable_other_constant variable_other_constant_ruby">String</span> <span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span>=&gt; true</span></span></pre>

<p>So in an application where not everyone is as knowledgeable is you, and users are constantly throwing junk in your code&#8217;s face, you&#8217;ll get a lot of variables that aren&#8217;t what they claim to be.</p> 

<p>Above, the method <em>make_that_belch_loud</em> takes a single argument which we assume to be of the class <em>Belch</em>.  Taking this for granted, we&#8217;re trying to call the <em>amplify</em> method of the <em>Belch</em> object. However, this assumption cause the application fart above &#8211; not what we expected. This could have happened for many reasons. Someone didnt fill out a form field; a bot is trying to access the site without sending the right vars. Of course its always a good idea to look up the execution tree and see where things went wrong. If for some reason you can&#8217;t validate before the method, or that just isnt enough, there is always the most basic and root solution.
</p>
<pre class="textmate-source"><span class="source source_ruby"><span class="meta meta_function meta_function_method meta_function_method_with-arguments meta_function_method_with-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">make_that_belch_loud</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_ruby">(</span><span class="variable variable_parameter variable_parameter_function variable_parameter_function_ruby">belch</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_ruby">)</span></span>
  <span class="keyword keyword_control keyword_control_pseudo-method keyword_control_pseudo-method_ruby">return</span> <span class="keyword keyword_control keyword_control_ruby">unless</span> belch
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby">  <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> or even more specific
</span>  <span class="keyword keyword_control keyword_control_pseudo-method keyword_control_pseudo-method_ruby">return</span> <span class="keyword keyword_control keyword_control_ruby">unless</span> belch <span class="keyword keyword_operator keyword_operator_logical keyword_operator_logical_ruby">and</span> belch<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>is_a?<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="variable variable_other variable_other_constant variable_other_constant_ruby">Belch</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span></span></pre>

<p>Of course checking error logs in production is no substitution for preemptive testing, but there are often errors like this you just don&#8217;t expect.</p>]]></content:encoded>
			<wfw:commentRss>http://www.quirkey.com/blog/2007/08/06/all-your-problems-are-nil/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating simple display methods</title>
		<link>http://www.quirkey.com/blog/2007/03/27/creating-simple-display-methods/</link>
		<comments>http://www.quirkey.com/blog/2007/03/27/creating-simple-display-methods/#comments</comments>
		<pubDate>Tue, 27 Mar 2007 21:21:34 +0000</pubDate>
		<dc:creator>AQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.quirkey.com/blog/2007/03/27/creating-simple-display-methods/</guid>
		<description><![CDATA[Lets say you have a User class with your basic fields including prefix, first name, last name, and middle initial. None of these are required fields, though you want to display them a lot in your templates. You find yourself doing this alot: &#60;%= @user.prefix %&#62; &#60;%= @user.first_name %&#62; &#60;%= @user.middle_initial %&#62; &#60;%= @user.last_name %&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Lets say you have a User class with your basic fields including <em>prefix, first name, last name, and middle initial</em>. None of these are required fields, though you want to display them a lot in your templates.  You find yourself doing this alot:</p>
<pre class="textmate-source"><span class="text text_html text_html_ruby"><span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>user</span>.prefix <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span> <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>user</span>.first_name <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span> <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>user</span>.middle_initial <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span> <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>user</span>.last_name <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
</span></pre>
<p>Why? When methods and attributes are indistiguishable. Just add a little diddy to your User class.</p>
<pre class="textmate-source"><span class="source source_ruby"><span class="meta meta_function meta_function_method meta_function_method_without-arguments meta_function_method_without-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">display_name</span></span>
  display = <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>
  [<span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>prefix</span>,<span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>first_name</span>,<span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>middle_initial</span>,<span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>last_name</span>].each <span class="keyword keyword_control keyword_control_ruby keyword_control_ruby_start-block">do </span>|name|
    display &lt;&lt; send(name) &lt;&lt; <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span> <span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span> <span class="keyword keyword_control keyword_control_ruby">unless</span> send(name).nil?
  <span class="keyword keyword_control keyword_control_ruby">end</span>
  display.strip
<span class="keyword keyword_control keyword_control_ruby">end</span></span></pre>
<p>Isn't this prettier?</p>
<pre class="textmate-source"><span class="text text_html text_html_ruby"><span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>user</span>.display_name <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span></span></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.quirkey.com/blog/2007/03/27/creating-simple-display-methods/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

