<?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>Perplexed Labs &#187; Ruby on Rails</title>
	<atom:link href="http://blog.perplexedlabs.com/tag/ruby-on-rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.perplexedlabs.com</link>
	<description>web development war stories from the frontlines to the backend</description>
	<lastBuildDate>Sat, 24 Jul 2010 16:27:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>google-define and last-fm plugins released</title>
		<link>http://blog.perplexedlabs.com/2010/05/06/google-define-and-last-fm-plugins-released/</link>
		<comments>http://blog.perplexedlabs.com/2010/05/06/google-define-and-last-fm-plugins-released/#comments</comments>
		<pubDate>Thu, 06 May 2010 16:44:58 +0000</pubDate>
		<dc:creator>Eric</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://blog.perplexedlabs.com/?p=453</guid>
		<description><![CDATA[Over the last few days I released my first open-source plugins on GitHub. google-define - Extracted from a side project I worked on, it's basically a wrapper class for parsing definitions from Google (define:perplexed). last-fm - This plugin was inspired by a previous gist, which itself was taken from an app I wrote to aggregate [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>Over the last few days I released my first open-source plugins on GitHub.</p>
<ul>
<li><a href="http://github.com/speric/google-define">google-define</a> - Extracted from a side project I worked on, it's basically a wrapper class for parsing definitions from Google (define:perplexed).</li>
<li><a href="http://github.com/speric/last-fm">last-fm</a> - This plugin was inspired by a previous <a href="http://gist.github.com/372629">gist</a>, which itself was taken from an app I wrote to aggregate the last week's movies, books, and music to send to Posterous (example <a href="http://www.ericfarkas.com/the-week-in-review-may-03-2010">here</a>). It's another wrapper class for easily parsing last.fm XML feeds.</li>
</ul>
<p>I hope someone finds these useful.  Any and all feedback is appreciated.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.perplexedlabs.com/2010/05/06/google-define-and-last-fm-plugins-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FormStack API Call Over SSL With Ruby</title>
		<link>http://blog.perplexedlabs.com/2010/04/28/formstack-api-call-over-ssl-with-ruby/</link>
		<comments>http://blog.perplexedlabs.com/2010/04/28/formstack-api-call-over-ssl-with-ruby/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 17:45:44 +0000</pubDate>
		<dc:creator>Eric</dc:creator>
				<category><![CDATA[Random]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[FormStack]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://blog.perplexedlabs.com/?p=449</guid>
		<description><![CDATA[I recently had to use the FormStack API in the context of a Rails app. You need to make these calls over SSL, and API returns either XML or JSON. I chose JSON because it's much easier to work with in my opinion and I hate XML. Below is a simple example. Check out the [...]


Related posts:<ol><li><a href='http://blog.perplexedlabs.com/2009/01/13/installing-ruby-enterprise-edition-with-phusion-passenger/' rel='bookmark' title='Permanent Link: Installing Ruby Enterprise Edition with Phusion Passenger'>Installing Ruby Enterprise Edition with Phusion Passenger</a></li>
<li><a href='http://blog.perplexedlabs.com/2008/02/26/flickr-rss-and-ruby/' rel='bookmark' title='Permanent Link: Flickr, RSS, and Ruby'>Flickr, RSS, and Ruby</a></li>
<li><a href='http://blog.perplexedlabs.com/2008/02/04/building-a-rails-capable-slice-from-scratch/' rel='bookmark' title='Permanent Link: Ruby On Rails and SliceHost Part 1: Initial Setup'>Ruby On Rails and SliceHost Part 1: Initial Setup</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I recently had to use the <a href="http://support.formstack.com/index.php?pg=kb.book&amp;id=3">FormStack API</a> in the context of a Rails app.  You need to make these calls over SSL, and API returns either XML or JSON.  I chose JSON because it's much easier to work with in my opinion and I hate XML.</p>
<p>Below is a simple example.  Check out the <a href="http://support.formstack.com/index.php?pg=kb.book&amp;id=3">FormStack API documentation</a> for all the other API calls.</p>
<p><script src="http://gist.github.com/372524.js"></script></p>


<p>Related posts:<ol><li><a href='http://blog.perplexedlabs.com/2009/01/13/installing-ruby-enterprise-edition-with-phusion-passenger/' rel='bookmark' title='Permanent Link: Installing Ruby Enterprise Edition with Phusion Passenger'>Installing Ruby Enterprise Edition with Phusion Passenger</a></li>
<li><a href='http://blog.perplexedlabs.com/2008/02/26/flickr-rss-and-ruby/' rel='bookmark' title='Permanent Link: Flickr, RSS, and Ruby'>Flickr, RSS, and Ruby</a></li>
<li><a href='http://blog.perplexedlabs.com/2008/02/04/building-a-rails-capable-slice-from-scratch/' rel='bookmark' title='Permanent Link: Ruby On Rails and SliceHost Part 1: Initial Setup'>Ruby On Rails and SliceHost Part 1: Initial Setup</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.perplexedlabs.com/2010/04/28/formstack-api-call-over-ssl-with-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>8 Books To Get A Developer For The Holidays</title>
		<link>http://blog.perplexedlabs.com/2009/11/30/8-books-to-get-a-developer-for-the-holidays/</link>
		<comments>http://blog.perplexedlabs.com/2009/11/30/8-books-to-get-a-developer-for-the-holidays/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 13:30:06 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Book Reviews]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Clojure]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programmer]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.perplexedlabs.com/?p=385</guid>
		<description><![CDATA[Send this to your significant other/parent/relative/friend so, instead of that sweater, you get one of these nuggets of awesome this Christmas. The Pragmatic Programmer: From Journeyman to Master Write better, cleaner, more maintainable code. Learn how to manage your projects and focus on shipping your product. With insight that covers the gamut of software development [...]


Related posts:<ol><li><a href='http://blog.perplexedlabs.com/2009/06/01/be-language-agnostic-solve-the-problem/' rel='bookmark' title='Permanent Link: Be Language Agnostic &#8211; Solve the Problem!'>Be Language Agnostic &#8211; Solve the Problem!</a></li>
<li><a href='http://blog.perplexedlabs.com/2010/02/08/deployment-using-capistrano-and-webistrano-via-rails-and-phusion-passenger/' rel='bookmark' title='Permanent Link: Deployment Using Capistrano / Webistrano via Rails / Phusion Passenger'>Deployment Using Capistrano / Webistrano via Rails / Phusion Passenger</a></li>
<li><a href='http://blog.perplexedlabs.com/2009/07/28/django-1-0-template-development-sample-chapter-serving-multiple-templates/' rel='bookmark' title='Permanent Link: Django 1.0 Template Development: Sample Chapter &#8220;Serving Multiple Templates&#8221;'>Django 1.0 Template Development: Sample Chapter &#8220;Serving Multiple Templates&#8221;</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Send this to your significant other/parent/relative/friend so, instead of that sweater, you get one of these nuggets of awesome this Christmas.</p>
<h3><a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&#038;tag=perplabs-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=020161622X">The Pragmatic Programmer: From Journeyman to Master</a><img src="http://www.assoc-amazon.com/e/ir?t=perplabs-20&#038;l=as2&#038;o=1&#038;a=020161622X" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p>Write better, cleaner, more maintainable code.  Learn how to manage your projects and focus on shipping your product.  With insight that covers the gamut of software development from low level to management<br />
this one is a must have for anyone involved in this industry.</p>
<h3><a href="http://www.amazon.com/gp/product/1934356344?ie=UTF8&#038;tag=perplabs-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=1934356344">The Passionate Programmer: Creating a Remarkable Career in Software Development</a><img src="http://www.assoc-amazon.com/e/ir?t=perplabs-20&#038;l=as2&#038;o=1&#038;a=1934356344" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p>Highly recommended!  <a href="http://blog.perplexedlabs.com/2009/07/29/book-review-the-passionate-programmer/">Read my full review</a>.</p>
<h3><a href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&#038;tag=perplabs-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0735619670">Code Complete: A Practical Handbook of Software Construction</a><img src="http://www.assoc-amazon.com/e/ir?t=perplabs-20&#038;l=as2&#038;o=1&#038;a=0735619670" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p>Another classic "software construction" book.  Sharpen your saw with timeless information that can be applied to any project in any language.  Less bugs, more productivity, more programmer happiness.</p>
<h3><a href="http://www.amazon.com/gp/product/1430219483?ie=UTF8&#038;tag=perplabs-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=1430219483">Coders at Work</a><img src="http://www.assoc-amazon.com/e/ir?t=perplabs-20&#038;l=as2&#038;o=1&#038;a=1430219483" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p>This one is different.  Written as a set of interview transcripts with 15 legendary industry giants, this book is a fantastic insight into how some of the great minds think.  It's inspiring to hear it from the source, must have!</p>
<h3><a href="http://www.amazon.com/gp/product/1934356336?ie=UTF8&#038;tag=perplabs-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=1934356336">Programming Clojure</a><img src="http://www.assoc-amazon.com/e/ir?t=perplabs-20&#038;l=as2&#038;o=1&#038;a=1934356336" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p>A developer should learn at least one new language a year.  This year that language should be Clojure.  Clojure is a dynamic, general purpose, language targeting the Java virtual machine and designed for multi-threaded use.  It's growing popularity, ability to leverage the Java standard library, and its multi-threaded nature make this a must have.</p>
<h3><a href="http://www.amazon.com/gp/product/0201835959?ie=UTF8&#038;tag=perplabs-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0201835959">The Mythical Man-Month: Essays on Software Engineering</a><img src="http://www.assoc-amazon.com/e/ir?t=perplabs-20&#038;l=as2&#038;o=1&#038;a=0201835959" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p>Another classic.  Primarily discusses project management from the perspective of Fred Brooks and his experiences at IBM.  Brooks' Law states that "adding manpower to a late software project makes it later".</p>
<h3><a href="http://www.amazon.com/gp/product/0321344758?ie=UTF8&#038;tag=perplabs-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0321344758">Don't Make Me Think: A Common Sense Approach to Web Usability</a><img src="http://www.assoc-amazon.com/e/ir?t=perplabs-20&#038;l=as2&#038;o=1&#038;a=0321344758" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p>Web developers should always keep in mind the user of the product their creating.  Usability becomes increasingly important as applications move to the web.  The design and usability of your app can make or break its success.  This classic is a must read.</p>
<h3><a href="http://www.amazon.com/gp/product/0201633612?ie=UTF8&#038;tag=perplabs-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0201633612">Design Patterns: Elements of Reusable Object-Oriented Software</a><img src="http://www.assoc-amazon.com/e/ir?t=perplabs-20&#038;l=as2&#038;o=1&#038;a=0201633612" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p>This classic known most commonly as the "gang of four" book is the definitive reference on design patterns.  Covering all of the most common cases and time and time again serving as an invaluable source of information.</p>


<p>Related posts:<ol><li><a href='http://blog.perplexedlabs.com/2009/06/01/be-language-agnostic-solve-the-problem/' rel='bookmark' title='Permanent Link: Be Language Agnostic &#8211; Solve the Problem!'>Be Language Agnostic &#8211; Solve the Problem!</a></li>
<li><a href='http://blog.perplexedlabs.com/2010/02/08/deployment-using-capistrano-and-webistrano-via-rails-and-phusion-passenger/' rel='bookmark' title='Permanent Link: Deployment Using Capistrano / Webistrano via Rails / Phusion Passenger'>Deployment Using Capistrano / Webistrano via Rails / Phusion Passenger</a></li>
<li><a href='http://blog.perplexedlabs.com/2009/07/28/django-1-0-template-development-sample-chapter-serving-multiple-templates/' rel='bookmark' title='Permanent Link: Django 1.0 Template Development: Sample Chapter &#8220;Serving Multiple Templates&#8221;'>Django 1.0 Template Development: Sample Chapter &#8220;Serving Multiple Templates&#8221;</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.perplexedlabs.com/2009/11/30/8-books-to-get-a-developer-for-the-holidays/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter and SD News</title>
		<link>http://blog.perplexedlabs.com/2009/07/31/twitter-and-sd-news/</link>
		<comments>http://blog.perplexedlabs.com/2009/07/31/twitter-and-sd-news/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 17:24:28 +0000</pubDate>
		<dc:creator>Eric</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[hacker news]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.perplexedlabs.com/?p=336</guid>
		<description><![CDATA[Motivation: SD News is a "social news site" (basically a Hacker News clone), written in Rails, that I work on as part of my efforts with a Christian publishing company I run with some friends.  As part of the administrative backend, I wanted to be able to send posts to our Twitter profile.  The site [...]


Related posts:<ol><li><a href='http://blog.perplexedlabs.com/2008/02/26/flickr-rss-and-ruby/' rel='bookmark' title='Permanent Link: Flickr, RSS, and Ruby'>Flickr, RSS, and Ruby</a></li>
<li><a href='http://blog.perplexedlabs.com/2009/06/01/be-language-agnostic-solve-the-problem/' rel='bookmark' title='Permanent Link: Be Language Agnostic &#8211; Solve the Problem!'>Be Language Agnostic &#8211; Solve the Problem!</a></li>
<li><a href='http://blog.perplexedlabs.com/2010/02/08/deployment-using-capistrano-and-webistrano-via-rails-and-phusion-passenger/' rel='bookmark' title='Permanent Link: Deployment Using Capistrano / Webistrano via Rails / Phusion Passenger'>Deployment Using Capistrano / Webistrano via Rails / Phusion Passenger</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><strong>Motivation:</strong> <a href="http://news.sensusdivinitatis.com">SD News</a> is a "social news site" (basically a Hacker News clone), written in Rails, that I work on as part of my efforts with a Christian publishing company I run with some friends.  As part of the administrative backend, I wanted to be able to send posts to our <a href="http://twitter.com/sdpub">Twitter profile</a>.  The site is still young, and the community still growing, so I wanted the admins to have complete control over what gets sent to Twitter.  I had thought of automating this process based on which items have the most votes in a given time period, but trust is easy to lose and all it would take is 1 or 2 irrelevant, or irreverent. posts to lose that trust.</p>
<p><strong>Methodology:</strong> I would first need a good Twitter gem for Ruby, and I'd need to decide which URL shortening service I'd use.  <a href="http://twitter.rubyforge.org/">Ruby Twitter</a> seemed to be the simplest gem for Twitter.  For the URL shortening I chose bit.ly, because the <a href="http://github.com/philnash/bitly/tree/master">bitly gem</a> seemed like the easiest, and the documentation was good.  My plan of attack was:</p>
<ol>
<li>Grab one item from the queue, that has not been Twittered</li>
<li>Shorten the URL via bitly</li>
<li>Send the item's title and shortened URL to Twitter</li>
<li>Save the shortened URL in the database so I could retrieve stats later</li>
</ol>
<p>The script that did this would be run every hour.<br />
<strong><br />
Implementation: </strong>The two gems made this an almost trivial implementation.</p>
<pre class="brush: ruby;">
require 'twitter'
require 'bitly'

@item = Item.find(:first, :conditions =&gt; &quot;send_to_twitter = 1 and twitterd = 0&quot;, :order =&gt; &quot;posted_on desc&quot;)

if !@item.nil?
   b = Bitly.new(username, password)
   @url = b.shorten(&quot;http://news.sensusdivinitatis.com/item/#{@item.id}&quot;).short_url

   httpauth = Twitter::HTTPAuth.new(username, password)
   base = Twitter::Base.new(httpauth)
   base.update(&quot;#{@item.title[0...110]} - #{@url}&quot;) #shorten the title if it's too long

   Item.update(@item.id, :twitterd =&gt; 1, :bitly_url =&gt; @url) #save the bit.ly url
end
</pre>
<p>That's pretty much it.  Incidentally, the bitly gem makes it very easy to grab the stats for any URL.  For instance, if you wanted to see how many clicks a given URL has received:</p>
<pre class="brush: ruby;">
require 'twitter'
require 'bitly'

@item = Item.find(id)
b = Bitly.new(username, password)
@clicks = b.stats(i.bitly_url).stats[&quot;clicks&quot;]
</pre>
<p>Done.</p>


<p>Related posts:<ol><li><a href='http://blog.perplexedlabs.com/2008/02/26/flickr-rss-and-ruby/' rel='bookmark' title='Permanent Link: Flickr, RSS, and Ruby'>Flickr, RSS, and Ruby</a></li>
<li><a href='http://blog.perplexedlabs.com/2009/06/01/be-language-agnostic-solve-the-problem/' rel='bookmark' title='Permanent Link: Be Language Agnostic &#8211; Solve the Problem!'>Be Language Agnostic &#8211; Solve the Problem!</a></li>
<li><a href='http://blog.perplexedlabs.com/2010/02/08/deployment-using-capistrano-and-webistrano-via-rails-and-phusion-passenger/' rel='bookmark' title='Permanent Link: Deployment Using Capistrano / Webistrano via Rails / Phusion Passenger'>Deployment Using Capistrano / Webistrano via Rails / Phusion Passenger</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.perplexedlabs.com/2009/07/31/twitter-and-sd-news/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Be Language Agnostic &#8211; Solve the Problem!</title>
		<link>http://blog.perplexedlabs.com/2009/06/01/be-language-agnostic-solve-the-problem/</link>
		<comments>http://blog.perplexedlabs.com/2009/06/01/be-language-agnostic-solve-the-problem/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 14:15:28 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.perplexedlabs.com/?p=280</guid>
		<description><![CDATA[I like Python. I like Ruby. I like C, C++, and Objective-C. I like Java. I also (actually) like PHP. I like programming - get it? Use whatever gets the job done and done well. Use whatever achieves the performance and scalability you require for a given task. Use what makes sense given a specific [...]


Related posts:<ol><li><a href='http://blog.perplexedlabs.com/2009/11/30/8-books-to-get-a-developer-for-the-holidays/' rel='bookmark' title='Permanent Link: 8 Books To Get A Developer For The Holidays'>8 Books To Get A Developer For The Holidays</a></li>
<li><a href='http://blog.perplexedlabs.com/2010/02/08/deployment-using-capistrano-and-webistrano-via-rails-and-phusion-passenger/' rel='bookmark' title='Permanent Link: Deployment Using Capistrano / Webistrano via Rails / Phusion Passenger'>Deployment Using Capistrano / Webistrano via Rails / Phusion Passenger</a></li>
<li><a href='http://blog.perplexedlabs.com/2009/03/20/django-and-python-first-impressions-part-ii/' rel='bookmark' title='Permanent Link: Django and Python First Impressions &#8211; Part II'>Django and Python First Impressions &#8211; Part II</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I like Python.  I like Ruby.  I like C, C++, and Objective-C.  I like Java.  I also (actually) like PHP.  I like programming - get it?  Use whatever gets the job done and done well.  Use whatever achieves the performance and scalability you require for a given task.  Use what makes sense given a specific problem's domain.  <del datetime="2009-06-09T13:43:01+00:00">Use whatever aligns itself with the way your mind works</del>.  Don't be a one trick pony (that isn't a Django reference).  Learn multiple languages, their strengths, and their weaknesses.  Understand when a language's strengths will allow you to solve a problem faster, easier, better.  Don't force a square peg through a round hole.</p>
<p>Watch <strong><a href="http://www.itworld.com/video?bcpid=1578108607&#038;bclid=1588003312&#038;bctid=23220283001">this</a></strong> video.  It's excellent food for thought and drives home the importance, as a programmer, of learning new, different, languages to expand your ability to solve problems in a variety of ways.  The video mentions the <a href="http://en.wikipedia.org/wiki/Sapir%E2%80%93Whorf_hypothesis">Sapir–Whorf hypothesis</a> which suggests that a particular language influences how a person understands and interacts with the world.  This makes a lot of sense.</p>
<p><strong>A programmer who thinks only in terms of a single language will attempt to solve every problem with that language.  You need more than one tool on your belt because not every problem is a nail.</strong></p>


<p>Related posts:<ol><li><a href='http://blog.perplexedlabs.com/2009/11/30/8-books-to-get-a-developer-for-the-holidays/' rel='bookmark' title='Permanent Link: 8 Books To Get A Developer For The Holidays'>8 Books To Get A Developer For The Holidays</a></li>
<li><a href='http://blog.perplexedlabs.com/2010/02/08/deployment-using-capistrano-and-webistrano-via-rails-and-phusion-passenger/' rel='bookmark' title='Permanent Link: Deployment Using Capistrano / Webistrano via Rails / Phusion Passenger'>Deployment Using Capistrano / Webistrano via Rails / Phusion Passenger</a></li>
<li><a href='http://blog.perplexedlabs.com/2009/03/20/django-and-python-first-impressions-part-ii/' rel='bookmark' title='Permanent Link: Django and Python First Impressions &#8211; Part II'>Django and Python First Impressions &#8211; Part II</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.perplexedlabs.com/2009/06/01/be-language-agnostic-solve-the-problem/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>37Signals and PHP?</title>
		<link>http://blog.perplexedlabs.com/2009/04/21/37signals-and-php/</link>
		<comments>http://blog.perplexedlabs.com/2009/04/21/37signals-and-php/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 16:39:31 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[37signals]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.perplexedlabs.com/?p=219</guid>
		<description><![CDATA[What exactly are they using it for? Front-end? Related posts:Be Language Agnostic &#8211; Solve the Problem! 8 Books To Get A Developer For The Holidays


Related posts:<ol><li><a href='http://blog.perplexedlabs.com/2009/06/01/be-language-agnostic-solve-the-problem/' rel='bookmark' title='Permanent Link: Be Language Agnostic &#8211; Solve the Problem!'>Be Language Agnostic &#8211; Solve the Problem!</a></li>
<li><a href='http://blog.perplexedlabs.com/2009/11/30/8-books-to-get-a-developer-for-the-holidays/' rel='bookmark' title='Permanent Link: 8 Books To Get A Developer For The Holidays'>8 Books To Get A Developer For The Holidays</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.perplexedlabs.com/wp-content/uploads/2009/04/37signals_php.png"><img src="http://www.perplexedlabs.com/wp-content/uploads/2009/04/37signals_php-300x244.png" alt="37signals_php" title="37signals_php" width="300" height="244" class="aligncenter size-medium wp-image-220" /></a></p>
<p>What exactly are they using it for?  Front-end?</p>


<p>Related posts:<ol><li><a href='http://blog.perplexedlabs.com/2009/06/01/be-language-agnostic-solve-the-problem/' rel='bookmark' title='Permanent Link: Be Language Agnostic &#8211; Solve the Problem!'>Be Language Agnostic &#8211; Solve the Problem!</a></li>
<li><a href='http://blog.perplexedlabs.com/2009/11/30/8-books-to-get-a-developer-for-the-holidays/' rel='bookmark' title='Permanent Link: 8 Books To Get A Developer For The Holidays'>8 Books To Get A Developer For The Holidays</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.perplexedlabs.com/2009/04/21/37signals-and-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing Ruby Enterprise Edition with Phusion Passenger</title>
		<link>http://blog.perplexedlabs.com/2009/01/13/installing-ruby-enterprise-edition-with-phusion-passenger/</link>
		<comments>http://blog.perplexedlabs.com/2009/01/13/installing-ruby-enterprise-edition-with-phusion-passenger/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 15:00:18 +0000</pubDate>
		<dc:creator>Eric</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[passenger]]></category>
		<category><![CDATA[phusion]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby enterprise edition]]></category>

		<guid isPermaLink="false">http://www.perplexedlabs.com/?p=121</guid>
		<description><![CDATA[I've been using Phusion Passenger for a few months now and I'm really pleased with it.  The performace vs. Mongrel is better, but what makes it so useful is the ease of deployment.  Being able to setup a vhost in Apache just like you would for a PHP application was very appealing to me.  Having [...]


Related posts:<ol><li><a href='http://blog.perplexedlabs.com/2010/02/08/deployment-using-capistrano-and-webistrano-via-rails-and-phusion-passenger/' rel='bookmark' title='Permanent Link: Deployment Using Capistrano / Webistrano via Rails / Phusion Passenger'>Deployment Using Capistrano / Webistrano via Rails / Phusion Passenger</a></li>
<li><a href='http://blog.perplexedlabs.com/2008/02/04/building-a-rails-capable-slice-from-scratch/' rel='bookmark' title='Permanent Link: Ruby On Rails and SliceHost Part 1: Initial Setup'>Ruby On Rails and SliceHost Part 1: Initial Setup</a></li>
<li><a href='http://blog.perplexedlabs.com/2009/07/31/twitter-and-sd-news/' rel='bookmark' title='Permanent Link: Twitter and SD News'>Twitter and SD News</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I've been using <a href="http://www.modrails.com/">Phusion Passenger</a> for a few months now and I'm really pleased with it.  The performace vs. Mongrel is better, but what makes it so useful is the ease of deployment.  Being able to setup a vhost in Apache just like you would for a PHP application was very appealing to me.  Having previously worked with the Apache/Rails/Mongrel/mod_proxy stack in an "enterprise" environment for over a year, I have experienced pretty much every nightmare deployment scenario possible.  I recently decided to install Phusion's <a href="http://www.rubyenterpriseedition.com/">Ruby Enterprise Edition</a>, which promises up to a 33% savings in memory usage.</p>
<p>Before you do anything, and to save you trouble down the road, I recommend generating a list of all the gems currently installed.  You'll need this later because you'll have to reinstall all of them in Ruby Enterprise Edition.</p>
<blockquote><p>$ gem list</p>
<p>*** LOCAL GEMS ***</p>
<p>actionmailer (2.0.2)<br />
actionpack (2.0.2)<br />
activerecord (2.0.2)<br />
activeresource (2.0.2)<br />
activesupport (2.0.2)<br />
acts_as_taggable (2.0.2)<br />
amazon-ecs (0.5.3)<br />
cgi_multipart_eof_fix (2.5.0)<br />
daemons (1.0.10)<br />
fastthread (1.0.1)<br />
gem_plugin (0.2.3)<br />
hpricot (0.6)<br />
mongrel (1.1.4)<br />
mysql (2.7)<br />
passenger (1.0.1)<br />
rails (2.0.2)<br />
rake (0.8.1)<br />
rspec (1.1.3)<br />
will_paginate (2.2.2)<br />
xml-simple (1.0.11)</p></blockquote>
<p>Copy your list and save it somewhere.  Next, we download and extract the current version of Ruby Enterprise Edition.  The latest version number can be found at the <a href="http://www.rubyenterpriseedition.com/download.html">download page</a>.</p>
<blockquote><p>$ wget http://rubyforge.org/frs/download.php/48623/ruby-enterprise-1.8.6-20081215.tar.gz<br />
$ tar xzvf ruby-enterprise-1.8.6-20081215.tar.gz</p></blockquote>
<p>And run the installer</p>
<blockquote><p>$ ./ruby-enterprise-1.8.6-20081215/installer</p></blockquote>
<p>As the installation proceeds, you'll be prompted for an installation directory.  I went with the default.  When the installation is over, you should see a message like this:</p>
<blockquote><p>Ruby Enterprise Edition is successfully installed!<br />
If want to use Phusion Passenger (http://www.modrails.com) in combination<br />
with Ruby Enterprise Edition, then you must reinstall Phusion Passenger against<br />
Ruby Enterprise Edition, as follows:</p>
<p>/opt/ruby-enterprise-1.8.6-20081215/bin/passenger-install-apache2-module</p>
<p>Make sure you don't forget to paste the Apache configuration directives that<br />
the installer gives you.</p>
<p>If you ever want to uninstall Ruby Enterprise Edition, simply remove this<br />
directory:</p>
<p>/opt/ruby-enterprise-1.8.6-20081215</p>
<p>If you have any questions, feel free to visit our website:</p>
<p>http://www.rubyenterpriseedition.com</p>
<p>Enjoy Ruby Enterprise Edition, a product of Phusion (www.phusion.nl)</p></blockquote>
<p>I do want to use Ruby Enterprise Edition and Apache, so I immediately installed the Apache module.</p>
<blockquote><p>$ /opt/ruby-enterprise-1.8.6-20081215/bin/passenger-install-apache2-module</p></blockquote>
<p>You need to pay attention to the Apache directives that this installation generates, since you'll have to put them into your httpd.conf:</p>
<blockquote><p>The Apache 2 module was successfully installed.</p>
<p>Please edit your Apache configuration file, and add these lines:</p>
<p>LoadModule passenger_module /opt/ruby-enterprise-1.8.6-20081215/lib/ruby/gems/1.8/gems/passenger-2.0.6/ext/apache2/mod_passenger.so<br />
PassengerRoot /opt/ruby-enterprise-1.8.6-20081215/lib/ruby/gems/1.8/gems/passenger-2.0.6<br />
PassengerRuby /opt/ruby-enterprise-1.8.6-20081215/bin/ruby</p></blockquote>
<p>What that message doesn't explain is that, if you previously installed Passenger <strong>without</strong> Ruby Enterprise Edition, you need to comment out any old directives attached to that previous setup.  I made that mistake the first time around.</p>
<p>Next you have to reinstall all the gems that you were using with old Ruby, including Rails:</p>
<blockquote><p>/opt/ruby-enterprise-1.8.6-20081215/bin/ruby /opt/ruby-enterprise-1.8.6-20081215/bin/gem install rails --version 2.0.2</p></blockquote>
<p>Just to prove my point, if you listed all of Enterprise Ruby's gems at this point, the list would look something like this:</p>
<blockquote><p>$ /opt/ruby-enterprise-1.8.6-20081215/bin/ruby /opt/ruby-enterprise-1.8.6-20081215/bin/gem list</p>
<p>*** LOCAL GEMS ***</p>
<p>actionmailer (2.2.2, 2.0.2)<br />
actionpack (2.2.2, 2.0.2)<br />
activerecord (2.2.2, 2.0.2)<br />
activeresource (2.2.2, 2.0.2)<br />
activesupport (2.2.2, 2.0.2)<br />
fastthread (1.0.1)<br />
mysql (2.7)<br />
passenger (2.0.6)<br />
rack (0.9.1)<br />
rails (2.2.2, 2.0.2)<br />
rake (0.8.3)</p></blockquote>
<p>None of my old gems are installed.  Once Rails is installed, you need to reinstall your old gems:</p>
<blockquote><p>$ /opt/ruby-enterprise-1.8.6-20081215/bin/ruby /opt/ruby-enterprise-1.8.6-20081215/bin/gem install will_paginate<br />
$ /opt/ruby-enterprise-1.8.6-20081215/bin/ruby /opt/ruby-enterprise-1.8.6-20081215/bin/gem install xml-simple<br />
$ /opt/ruby-enterprise-1.8.6-20081215/bin/ruby /opt/ruby-enterprise-1.8.6-20081215/bin/gem install hpricot<br />
$ /opt/ruby-enterprise-1.8.6-20081215/bin/ruby /opt/ruby-enterprise-1.8.6-20081215/bin/gem install rmagick</p></blockquote>
<p>And on and on.  If you haven't used Passenger before, check out the <a href="http://www.modrails.com/documentation/Users%20guide.html#_deploying_a_ruby_on_rails_application">Deployment Guide</a>.  If you have used Passenger and your Rails apps are already set up in Apache to take advantage of it's deployment procedures, simply restart Apache.</p>


<p>Related posts:<ol><li><a href='http://blog.perplexedlabs.com/2010/02/08/deployment-using-capistrano-and-webistrano-via-rails-and-phusion-passenger/' rel='bookmark' title='Permanent Link: Deployment Using Capistrano / Webistrano via Rails / Phusion Passenger'>Deployment Using Capistrano / Webistrano via Rails / Phusion Passenger</a></li>
<li><a href='http://blog.perplexedlabs.com/2008/02/04/building-a-rails-capable-slice-from-scratch/' rel='bookmark' title='Permanent Link: Ruby On Rails and SliceHost Part 1: Initial Setup'>Ruby On Rails and SliceHost Part 1: Initial Setup</a></li>
<li><a href='http://blog.perplexedlabs.com/2009/07/31/twitter-and-sd-news/' rel='bookmark' title='Permanent Link: Twitter and SD News'>Twitter and SD News</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.perplexedlabs.com/2009/01/13/installing-ruby-enterprise-edition-with-phusion-passenger/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
