<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Jason Seifer</title>
	
	<link>http://jasonseifer.com</link>
	<description />
	<lastBuildDate>Sat, 14 Apr 2012 20:31:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/jasonseifer" /><feedburner:info uri="jasonseifer" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Installing Ruby, Rails, and MySQL on Mac OS X Lion</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/rdrx08_xkxs/installing-ruby-rails-and-mysql-on-mac-os-x-lion</link>
		<comments>http://jasonseifer.com/2011/11/23/installing-ruby-rails-and-mysql-on-mac-os-x-lion#comments</comments>
		<pubDate>Wed, 23 Nov 2011 18:47:44 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=602</guid>
		<description><![CDATA[This is a quick heads-up! I have a blog post up on the Think Vitamin blog on installing Ruby, Rails, and MySQL on Mac OS X Lion. The instructions will also work on Snow Leopard (sorry Leopard users) and it walks through setting up gcc, homebrew, git, and mysql. It also uses RVM to install [...]]]></description>
			<content:encoded><![CDATA[<p>
This is a quick heads-up! I have a blog post up on the Think Vitamin blog on <a href="http://thinkvitamin.com/code/ruby-on-rails/installing-ruby-rails-and-mysql-on-os-x-lion/">installing Ruby, Rails, and MySQL on Mac OS X Lion</a>. The instructions will also work on Snow Leopard (sorry Leopard users) and it walks through setting up gcc, homebrew, git, and mysql. It also uses <a href="http://rvm.beginrescueend.com">RVM</a> to install the latest release of Ruby. <a href="http://thinkvitamin.com/code/ruby-on-rails/installing-ruby-rails-and-mysql-on-os-x-lion/">Check it out</a>.</p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/rdrx08_xkxs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2011/11/23/installing-ruby-rails-and-mysql-on-mac-os-x-lion/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2011/11/23/installing-ruby-rails-and-mysql-on-mac-os-x-lion</feedburner:origLink></item>
		<item>
		<title>db Bistro Burger Review</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/-adtdUctUxA/db-bistro-burger-review</link>
		<comments>http://jasonseifer.com/2011/06/23/db-bistro-burger-review#comments</comments>
		<pubDate>Thu, 23 Jun 2011 18:39:24 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Health]]></category>
		<category><![CDATA[burger]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=579</guid>
		<description><![CDATA[Taking a small break break from normal ruby and programming related posts, I reviewed what&#8217;s widely regarded as one of the best burgers in New York over on my friend&#8217;s Orlando food blog. Spoiler: it was really good (if the picture doesn&#8217;t do it justice, that is) but maybe not the best burger ever. Check [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://jasonseifer.com/assets/dbburger.png" alt="Buger at Bistro Moderne.png" class="alignright" width="200" /></p>
<p>Taking a small break break from normal ruby and programming related posts, I reviewed what&#8217;s widely regarded as one of the <a href="http://megayummo.com/2011/06/22/db-bistro-moderne">best burgers in New York</a> over on my friend&#8217;s <a href="http://megayummo.com">Orlando food blog</a>. Spoiler: it was really good (if the picture doesn&#8217;t do it justice, that is) but maybe not the best <em>burger</em> ever. Check it out for the full review.</p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/-adtdUctUxA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2011/06/23/db-bistro-burger-review/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2011/06/23/db-bistro-burger-review</feedburner:origLink></item>
		<item>
		<title>CoffeeScript and Rails 3</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/56JEC7htuYA/coffeescript-and-rails-3</link>
		<comments>http://jasonseifer.com/2011/04/13/coffeescript-and-rails-3#comments</comments>
		<pubDate>Wed, 13 Apr 2011 23:26:51 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Humor]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=570</guid>
		<description><![CDATA[After all of the debate with the news that CoffeeScript will be bundled in Rails 3.1, I made a new site: http://doihavetousecoffeescriptinrails.com/. If you&#8217;re looking for a real article on the subject, Peter Cooper has a great post on Ruby Inside summarizing Rails 3.1, CoffeeScript, jQuery, and SASS.]]></description>
			<content:encoded><![CDATA[<p>After all of the debate with the news that CoffeeScript will be bundled in Rails 3.1, I made a new site: <a href="http://doihavetousecoffeescriptinrails.com/">http://doihavetousecoffeescriptinrails.com/</a>.</p>
<p>If you&#8217;re looking for a real article on the subject, Peter Cooper has a great post on Ruby Inside summarizing <a href="http://www.rubyinside.com/rails-3-1-adopts-coffeescript-jquery-sass-and-controversy-4669.html">Rails 3.1, CoffeeScript, jQuery, and SASS</a>.</p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/56JEC7htuYA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2011/04/13/coffeescript-and-rails-3/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2011/04/13/coffeescript-and-rails-3</feedburner:origLink></item>
		<item>
		<title>Employee Scheduling Software</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/ksNeLAwt_Qg/employee-scheduling-software</link>
		<comments>http://jasonseifer.com/2011/04/06/employee-scheduling-software#comments</comments>
		<pubDate>Wed, 06 Apr 2011 18:16:46 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[app]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=559</guid>
		<description><![CDATA[I&#8217;ve been working on this for a while and finally think it&#8217;s good enough to release to the world. You can now sign up for my employee scheduling software. Scheduling is employee scheduling software that lets you manage your work schedules quickly and easily. It&#8217;s best suited for businesses that have employees that work something [...]]]></description>
			<content:encoded><![CDATA[<p>
I&#8217;ve been working on this for a while and finally think it&#8217;s good enough to release to the world. You can now sign up for my <a href="http://schedulingapp.com" title="Employee Scheduling">employee scheduling</a> software. Scheduling is <a href="http://schedulingapp.com">employee scheduling</a>  software that lets you manage your work schedules quickly and easily. It&#8217;s best suited for businesses that have employees that work something other than the typical 9-5 shifts such as restaurants, offices, etc.</p>
<p><a href="http://schedulingapp.com" title="Employee Scheduling Software"><img src="http://jasonseifer.com/assets/scheduling-screenshot.png" alt="Employee Scheduling" title="Employee Scheduling" class="alignright" width="250" height="185" /></a></p>
<p>
<strong>If you make schedules</strong>, <a href="http://schedulingapp.com">Scheduling</a> allows you to easily make a schedule, remember requests  for time off, post the schedule for employees, and more.
</p>
<p><strong>If you&#8217;re an employee</strong>, Scheduling allows you to easily request time off, communicate with the rest of your office via the wall, and quickly and easily see when you work.</p>
<p>Tech wise, it&#8217;s written using Rails 3, resque, Apache, and passenger. There are a lot of places I&#8217;d like to take this software and look forward to maintaining the app and adding more features. I&#8217;ll also do some technical posts later about getting everything working.</p>
<p>So <a href="http://schedulingapp.com" title="Employee Scheduling Software">check out the app</a>, tell your friends, and let me know what you think!</p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/ksNeLAwt_Qg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2011/04/06/employee-scheduling-software/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2011/04/06/employee-scheduling-software</feedburner:origLink></item>
		<item>
		<title>Automatically updating your IP with DNSimple</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/Ul_SKh5DRgQ/auto-update-ip-dnsimple</link>
		<comments>http://jasonseifer.com/2011/04/04/auto-update-ip-dnsimple#comments</comments>
		<pubDate>Mon, 04 Apr 2011 12:53:05 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[dns]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=548</guid>
		<description><![CDATA[I&#8217;ve been using DNSimple for most a lot of my domain hosting lately. It&#8217;s a great service and I highly recommend checking them out for domain hosting. Recently I went out of town but wanted some way to be able to SSH home if I needed to. Luckily, DNSimple has a nice REST API that [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://dnsimple.com"><img src="http://jasonseifer.com/assets/dnsimple.png" alt="DNSimple" class="alignright" width="240" height="90" /></a></p>
<p>
I&#8217;ve been using <a href="https://DNSimple.com">DNSimple</a> for most a lot of my domain hosting lately. It&#8217;s a great service and I highly recommend checking them out for domain hosting. Recently I went out of town but wanted some way to be able to SSH home if I needed to. Luckily, DNSimple has a nice REST API that lets me update records easily. I created a &quot;home&quot; record for one of my domains and created a script to auto update:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #007800;">LOGIN</span>=<span style="color: #ff0000;">&quot;&quot;</span>
<span style="color: #007800;">PASSWORD</span>=<span style="color: #ff0000;">&quot;&quot;</span>
<span style="color: #007800;">DOMAIN_ID</span>=<span style="color: #ff0000;">&quot;&quot;</span>
<span style="color: #007800;">RECORD_ID</span>=<span style="color: #ff0000;">&quot;&quot;</span>
<span style="color: #007800;">IP</span>=<span style="color: #ff0000;">&quot;`curl http://icanhazip.com/&quot;</span>
&nbsp;
curl <span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;Accept: application/json&quot;</span> \
     <span style="color: #660033;">--basic</span> <span style="color: #660033;">-u</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$LOGIN</span>:<span style="color: #007800;">$PASSWORD</span>&quot;</span> \
     <span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;Content-Type: application/json&quot;</span> \
     <span style="color: #660033;">-i</span> <span style="color: #660033;">-X</span> PUT https:<span style="color: #000000; font-weight: bold;">//</span>DNSimple.com<span style="color: #000000; font-weight: bold;">/</span>domains<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$DOMAIN_ID</span><span style="color: #000000; font-weight: bold;">/</span>records<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$RECORD_ID</span>.json \
     <span style="color: #660033;">-d</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #ff0000;">&quot;record&quot;</span>:<span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #ff0000;">&quot;content&quot;</span>:<span style="color: #ff0000;">&quot;<span style="color: #007800;">$IP</span>&quot;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></div></div>

<p>It uses the awesome new <a href="http://jsonip.com">jsonip</a> service to grab your ip. It then does a quick sed parsing on that output to grab just your ip. Finally it does a put to the record in DNSimple updating it with the new information. You must have already created a record and domain in order for this to work. I saved this script as <code>dnsimple_update.sh</code> in my <code>~/bin</code> directory.</p>
<p>Fill in your login and password credentials (or set some environment variables) and domain and record ids and you&#8217;re good to go. You can get your domain and record ids by hovering over the edit link in the advanced editor in DNSimple for the record you want and copying and pasting the domain and record ids.</p>
<p>Finally, I set it to run as a cronjob every 15 minutes:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># m h  dom mon dow   command</span>
<span style="color: #000000; font-weight: bold;">*/</span><span style="color: #000000;">15</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>my_user<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>DNSimple_update.sh</pre></div></div>

<p>This worked out very well and with some port forwarding on my home router I was able to ssh in to my home machines without any problems.</p>
<p>
  <strong>Update:</strong> <a href="http://kristopher.biz/">Kristopher Murata</a> gave a correction to the script in the comments since jsonip changed their format. Twice!! Thanks, Kris!</p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/Ul_SKh5DRgQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2011/04/04/auto-update-ip-dnsimple/feed</wfw:commentRss>
		<slash:comments>25</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2011/04/04/auto-update-ip-dnsimple</feedburner:origLink></item>
		<item>
		<title>On The Internet</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/33aIAsCoCEc/on-the-internet</link>
		<comments>http://jasonseifer.com/2010/12/13/on-the-internet#comments</comments>
		<pubDate>Mon, 13 Dec 2010 17:12:57 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Humor]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=544</guid>
		<description><![CDATA[I launched a new podcast! On The Internet is a quick snippet of the latest news from the tech industry. It&#8217;s like Weekend Update from Saturday Night Live but for Tech news. I hope you enjoy it and find it funny.]]></description>
			<content:encoded><![CDATA[<p><a href="http://5by5.tv/ontheinternet"><img src="http://jasonseifer.com/assets/ontheinternet.jpg" alt="ontheinternet.jpg" class="alignright" width="273" height="154" /></a></p>
<p>I launched a new podcast! <a href="http://5by5.tv/ontheinternet">On The Internet</a> is a quick snippet of the latest news from the tech industry. It&#8217;s like Weekend Update from Saturday Night Live but for Tech news. I hope you enjoy it and find it funny.</p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/33aIAsCoCEc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2010/12/13/on-the-internet/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/12/13/on-the-internet</feedburner:origLink></item>
		<item>
		<title>Textmate Next and Previous Tab Keys</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/Pu6ZxWhtcrk/textmate-next-and-previous-tab-keys</link>
		<comments>http://jasonseifer.com/2010/11/13/textmate-next-and-previous-tab-keys#comments</comments>
		<pubDate>Sat, 13 Nov 2010 22:27:02 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[textmate]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=538</guid>
		<description><![CDATA[If you&#8217;ve just upgraded to Revision 1616 of Textmate, you may be wondering why your next and previous file tab keys stopped working. The author of Textmate recently changed the next and previous file tab key shortcuts to the universal mac application equivalents. Here it is in the release notes: [CHANGED] Change next/previous file tab [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve just upgraded to Revision 1616 of Textmate, you may be wondering why your next and previous file tab keys stopped working. The author of Textmate recently changed the next and previous file tab key shortcuts to the universal mac application equivalents. Here it is in the release notes:</p>
<p>
<code><strong>[CHANGED]</strong> Change next/previous file tab key equivalents to shift command [ and ]. This has become the de facto standard.</code>
</p>
<p>I tried to deal with this for a few days but that keyboard shortcut is  just too ingrained in my brain.  You can fix this, though, by going in to your Keyboard preference pane, then the &quot;Keyboard Shortcuts&quot; tab. Under &quot;Application Shortcuts&quot; click the plus button, find TextMate, and add the following:</p>
<p><img style="display:block; margin-left:auto; margin-right:auto;" src="http://jasonseifer.com/assets/textmate-keyboard.png" alt="TextMate Keyboard Shortcuts" border="0" width="600" height="536" /></p>
<p>Voila. Fixed! Now you can get back to coding at the speed of thought.</p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/Pu6ZxWhtcrk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2010/11/13/textmate-next-and-previous-tab-keys/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/11/13/textmate-next-and-previous-tab-keys</feedburner:origLink></item>
		<item>
		<title>The Changelog Joins The Genius Pool</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/f9qMejPjzT0/the-changelog-joins-the-genius-pool</link>
		<comments>http://jasonseifer.com/2010/09/14/the-changelog-joins-the-genius-pool#comments</comments>
		<pubDate>Tue, 14 Sep 2010 20:51:24 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[awesome]]></category>
		<category><![CDATA[changelog]]></category>
		<category><![CDATA[shamless-self-promotion]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=533</guid>
		<description><![CDATA[I just posted this over on my redesigned company site but it&#8217;s awesome so I had to share it here too. The Changelog, an amazing development podcast, is now part of the Genius Pool Network. Check out the blog post on Twisted Mind, over on The Changelog, or post a job now.]]></description>
			<content:encoded><![CDATA[<p><a href="http://thechangelog.com/"><img src="http://jasonseifer.com/assets/NewImage2.jpg" alt="changelog" border="0" width="170" height="170" class="alignright"/></a></p>
<p>I just posted this over on my redesigned <a href="http://twistedmind.com">company site</a> but it&#8217;s awesome so I had to share it here too. <a href="http://thechangelog.com/">The Changelog</a>, an amazing development podcast, is now part of the <a href="http://geniuspool.com/pages/network">Genius Pool Network</a>. <a href="http://twistedmind.com/the-changelog-joins-geniuspool">Check out the blog post on Twisted Mind</a>, over on <a href="http://thechangelog.com/post/1122365505/episode-0-3-5-homebrew-with-max-howell">The Changelog</a>, or <a href="https://geniuspool.com/jobs/new">post a job now</a>.</p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/f9qMejPjzT0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2010/09/14/the-changelog-joins-the-genius-pool/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/09/14/the-changelog-joins-the-genius-pool</feedburner:origLink></item>
		<item>
		<title>Rails 3.0 rc2 Notes</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/9OaDan9peWw/rails-3-rc2</link>
		<comments>http://jasonseifer.com/2010/08/24/rails-3-rc2#comments</comments>
		<pubDate>Tue, 24 Aug 2010 04:00:07 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rc]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=518</guid>
		<description><![CDATA[With the recent release of Rails 3.0 Release Candidate 2, DHH posted on the official Rails blog to check out the sweet GitHub compare view between the two RCs for detailed information. This list is by no means complete but I made some notes from the commit view, with links where possible, about the bigger [...]]]></description>
			<content:encoded><![CDATA[<p>
With the recent release of <a href="http://weblog.rubyonrails.org/2010/8/24/rails-3-0-release-candidate-2">Rails 3.0 Release Candidate 2</a>, DHH posted on the official Rails blog to check out the sweet <a href="http://github.com/rails/rails/compare/v3.0.0_RC...v3.0.0_RC2">GitHub compare view</a> between the two RCs for detailed information. This list is by no means complete but I made some notes from the commit view, with links where possible, about the bigger changes:
</p>
<ul>
<li>Add a header that tells Internet Explorer (all versions) to use the best available standards support. [Yehuda Katz]</li>
<li>Rename <code>_snowman</code> to <code>_e</code>. <strong>Update:</strong> This was later updated to <code>utf8</code> as Kieran and Santiago point out in the comments.</li>
<li>Mysql2 is now the default mysql adapter.</li>
<li><code>render :file</code> is deprecated in favor of <code>render :template</code> except for absolute paths.</li>
<li>Apps upgrading from version 2.3 get defaulted to utf-8.</li>
<li><a href="http://github.com/rails/rails/commit/06af2913466acb88d46fc18b60c13f5c071395b1">Update documentation on <code>autosave</code></a>.</li>
<li>Several performance <a href="http://github.com/rails/rails/commit/fb6edb1769229fff66bf23a7c2e9d52cf26359c8">improvements</a> <a href="http://github.com/rails/rails/commit/dac2b37b037587053b53cb6ed3c67a1fd4339778">mostly</a> <a href="http://github.com/rails/rails/commit/ff760dd6ceee4414e54afdb346c322dee6280edc">by</a> <a href="http://github.com/rails/rails/commit/c8509d5303db0fd0930d09357b059bb4a6b19f9f">tenderlove</a>.</li>
<li>Tons of deprecations.</li>
<li><a href="http://github.com/rails/rails/commit/82eff0ffe977674ccf49bf192dacabd04b195995">Require rdoc version 2.5.10</a></li>
<li><a href="http://github.com/rails/rails/commit/6edae4553ee0f95d3a9a9de278db12c3ce880ef9">Require rack-mount 0.6.12</a></li>
<p></u></p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/9OaDan9peWw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2010/08/24/rails-3-rc2/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/08/24/rails-3-rc2</feedburner:origLink></item>
		<item>
		<title>Genius Pool Supports Twitter Integration</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/TiAksLV1sRU/geniuspool-twitter-integration</link>
		<comments>http://jasonseifer.com/2010/07/20/geniuspool-twitter-integration#comments</comments>
		<pubDate>Tue, 20 Jul 2010 20:11:20 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[features]]></category>
		<category><![CDATA[geniuspool]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=509</guid>
		<description><![CDATA[This has been around for a little while now, but Genius Pool now has Twitter integration when a new job is posted. Check it out and post a job.]]></description>
			<content:encoded><![CDATA[<p><a href="http://geniuspool.com"><img style="display:block; margin-left:auto; margin-right:auto;" src="http://jasonseifer.com/assets/geniuspooltwitter.jpg" alt="Genius Pool on Twitter" border="0" width="512" height="152" /></a></p>
<p>This has been around for a little while now, but <a href="http://geniuspool.com">Genius Pool</a> now has Twitter integration when a new job is posted. <a href="http://geniuspool.com">Check it out</a> and post a job.</p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/TiAksLV1sRU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2010/07/20/geniuspool-twitter-integration/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/07/20/geniuspool-twitter-integration</feedburner:origLink></item>
		<item>
		<title>Mac OS X Post Install Guide, May 2010</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/75pcWAyxWcM/osx-post-install-guide-4</link>
		<comments>http://jasonseifer.com/2010/05/05/osx-post-install-guide-4#comments</comments>
		<pubDate>Wed, 05 May 2010 16:37:23 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[snow leopard]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=478</guid>
		<description><![CDATA[I have to reformat and reinstall every so often. Most recently I upgraded the hard drive in my MacBook and this time I decided to post a bit about my reinstall process and what apps I use.]]></description>
			<content:encoded><![CDATA[<h4>Part 1: Update Software</h4>
<p>This takes a while. Go get some coffee and install the developer tools.</p>
<h3>System Settings</h3>
<h4>Appearance</h4>
<p><img src="http://jasonseifer.com/assets/scroll_arrows.jpg" alt="Scroll Arrows at top and bottom" border="0" width="200" height="39" class="alignright" /></p>
<p>Place scroll arrows at top and bottom. This is a left over windows preference I just can&#8217;t get used to.</p>
<h4>Finder</h4>
<p><img src="http://jasonseifer.com/assets/finderinfo.jpg" class="alignright" alt="Finder Buttons" border="0" width="200" height="37" /></p>
<p>
Add delete and get info to toolbar. I&#8217;m of the opinion that this should be the default.
</p>
<h4>Keyboard</h4>
<p><a href="http://jasonseifer.com/assets/modifierkeys.jpg" rel="lb"><img src="http://jasonseifer.com/assets/modifierkeys-220x104.jpg" alt="Modifier Keys" class="alignright" /></a><br />
<a href="http://jasonseifer.com/assets/keyboardaccess.jpg" rel="lb"><img src="http://jasonseifer.com/assets/keyboardaccess-50x50.jpg" alt="Full Keyboard Access" class="alignright" /></a></p>
<p>The Keyboard is a pretty big deal for developers. Here are my settings:</p>
<p>Get some Emacs keybindings in all of cocoa:<br />
<a href="http://www.gnufoo.org/macosx/">http://www.gnufoo.org/macosx/</a>. I&#8217;m a vim guy but they&#8217;re useful.</p>
<p>
Modifier keys, set caps lock to control. Allow Full keyboard access also.
</p>
<p>
<a href="http://jasonseifer.com/assets/NewImage.jpg" rel="lb"><img src="http://jasonseifer.com/assets/NewImage.jpg" alt="keyboard settings" border="0" width="200" class="alignright" /></a><br />
Uncheck &quot;Illuminate keyboard in low light conditions&quot; for better battery life.</p>
<h2>Apps</h2>
<ul>
<li><a href="http://blog.boastr.net">BetterTouchTool</a>
<p>Adds a bunch of configuration options for the Magic Mouse. I set a 3 finger tap for spaces. It&#8217;s handy.
</p>
</li>
<li><a href="https://www.dropbox.com/referrals/NTExNTA0OQ">Dropbox</a>
<p>
Effortlessly sync files across computers. If you use the link above I get some free space. <a href="http://dropbox.com">Use this one</a> for a referral free link if you prefer.</p>
</li>
<li><a href="http://skitch.com">Skitch</a>
<p>Capture screenshots, share images. This has become so ingrained in my day to day use I don&#8217;t know what I&#8217;d do without it.</p>
</li>
<li><a href="http://www.evernote.com">Evernote</a>
<p>Enhanced syncable notepad. I use this for everything from code snippets to projects notes, recipes, and everything in between.</p>
</li>
<li><a href="http://www.google.com/chrome?platform=mac">Google Chrome Beta</a>
<p>I couldn&#8217;t do without it. <a href="http://jasonseifer.com/2010/02/01/8-chrome-extensions-for-web-developers">Spice it up</a> with some developer extensions and you&#8217;re good to go.</p>
</li>
<li><a href="http://mailplaneapp.com">Mailplane</a>
<p> Gmail on the desktop. I&#8217;ve tried almost every os x mail solution and couldn&#8217;t get more productive than Gmail. However, I still keep Mail.app configured in case I need to refer to old mail offline.</p>
</li>
<li><a href="http://macromates.com/">Textmate</a>
<p>This is practically a necessity. The best text editor on OS X.</p>
</li>
<li><a href="http://macvim.org">MacVIM</a>
<p>It&#8217;s no emacs but it&#8217;s good to have around.</p>
</li>
<li>
<p><a href="http://www.islayer.com/apps/istatmenus/">iStat Menus</a></p>
<p><img src="http://jasonseifer.com/assets/NewImage1.jpg" alt="istat menus" class="alignright" width="219" height="495" /> Find out useful information about what&#8217;s going on in your system. I mainly use this for the calendar widget in the menu bar. Why this isn&#8217;t an option in OS X by default I&#8217;m not sure. It recently became a paid app and I upgraded immediately.</p>
</li>
<li><a href="http://getconcentrating.com/">Concentrate</a>
<p>Eliminate distractions. I&#8217;ve written about this one before in my <a href="http://jasonseifer.com/2010/02/08/using-concentrate-for-pomodoro">Using concentrate for the Pomodoro Technique</a> post.</p>
</li>
<li><a href="http://adiumx.com">Adium</a>
<p>Multi protocol IM client. I use it when not forced to use iChat by others.</p>
</li>
<li>
  <a href="http://skype.com">Skype</a>
<p>Needed for work and for recording podcasts.</p>
</li>
<li>
  <a href="http://www.busymac.com">BusyCal</a>
<p>Think of it as iCal pro. I like this better for syncing with Google Calendar.</p>
</li>
<li>
  <a href="http://culturedcode.com/things/">Things</a>
<p>The best to do list app on OS X.</p>
</li>
<li>
  <a href="http://www.obdev.at/products/launchbar/index.html">LaunchBar 5</a>
<p>LaunchBar is an app launcher and more. Although, to be fair, I&#8217;m giving <a href="http://www.alfredapp.com/">Alfred</a> a shot right now, too.
</li>
<li>
  <a href="http://www.shirt-pocket.com/SuperDuper/SuperDuperDescription.html">SuperDuper!</a>
<p>I don&#8217;t even use Time Machine because of SuperDuper! It&#8217;s a great backup program, though the target is a bit different than Time Machine. It&#8217;s well worth the money because of the smart backup feature.</p>
</li>
<li><a rel="lb" href="http://jasonseifer.com/assets/Choosy.png"><img src="http://jasonseifer.com/assets/Choosy-220x92.png" alt="Choosy" class="alignright" /></a>
<p>  <a href="http://www.choosyosx.com">Choosy</a>
<p>    Choosy is a &#8220;better default browser&#8221; for os x. It lets you choose which browser you want to open a link in. It&#8217;s really invaluable when you get used to it.
  </p>
</li>
<li>
  <a href="http://www.truecrypt.org/">TrueCrypt</a>
<p>Described on the web site as &#8220;Free open-source disk encryption software for Windows 7/Vista/XP, Mac OS X, and Linux.&#8221; I use it for an encrypted disk image where I hold my financial information. This image is kept in my Dropbox and synced when ever it&#8217;s unmounted automatically.</p>
</li>
<li>
  <a href="http://www.atebits.com/tweetie-mac/">Tweetie</a>
<p>My favorite OS X Twitter client so far.</p>
</li>
<li>
  <a href="http://www.apple.com/downloads/macosx/internet_utilities/rssmenu.html">RSS Menu</a>
<p>RSS Menu lets you track rss feeds in your menu bar. I don&#8217;t have all my feeds in here but a few select ones, like twitter searches that I want to pay attention to.
  </p>
</li>
<h2>Developer Stuff</h2>
<ul id="dev">
<li>
Git branch in Bash Prompt. This goes in ~/.bash_profile:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">parse_git_branch<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>
  <span style="color: #c20cb9; font-weight: bold;">git</span> branch <span style="color: #660033;">--no-color</span> <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/^[^*]/d'</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s/* \(.*\)/\ →\ \1/'</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">PS1</span>=<span style="color: #ff0000;">'\[\e[1;37m\][\[\e[1;35m\]\u\[\e[1;37m\]@\[\e[1;32m\]\h\[\e[1;37m\]:\[\e[1;36m\]\w\[\e[1;33m\]$(parse_git_branch)\[\e[1;37m\]]$ \[\e[0m\]'</span></pre></div></div>

<p>This will make your prompt look like this:<br />
<img src="http://jasonseifer.com/assets/gitbranch.png" alt="gitbranch.png" border="0" width="486" height="27" /></p>
</li>
<li>
Git config (~/.gitconfig:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #7a0874; font-weight: bold;">alias</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>
	st = status
	<span style="color: #c20cb9; font-weight: bold;">co</span> = checkout
	br = branch
	ui = update-index
	lg = log <span style="color: #660033;">--graph</span> <span style="color: #660033;">--pretty</span>=format:<span style="color: #ff0000;">'%Cred%h%Creset -%C(yellow)%d%Creset %f %Cgreen(%cr)%Creset'</span> <span style="color: #660033;">--abbrev-commit</span> <span style="color: #660033;">--date</span>=relative</pre></div></div>

</li>
<li>
Domain checking obsession. Put this in <code>~/.bash_profile</code>, courtesy of <a href="http://ozmm.org">Chris Wanstrath</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> isreg <span style="color: #7a0874; font-weight: bold;">&#123;</span>
	<span style="color: #c20cb9; font-weight: bold;">whois</span> <span style="color: #007800;">$1</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-q</span> <span style="color: #ff0000;">'No match'</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;No&quot;</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Yes&quot;</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></div></div>

<p>Use as follows:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ isreg jasonseifer.com
Yes</pre></div></div>

</li>
<li>
<p>Put the following in ~/.inputrc. Create it if it doesn&#8217;t exist. Paste in the following:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">set</span> show-all-if-ambiguous On
<span style="color: #000000; font-weight: bold;">set</span> completion-ignore-case on
<span style="color: #ff0000;">&quot;\ep&quot;</span>: history-search-backward
<span style="color: #ff0000;">&quot;\e[A&quot;</span>: history-search-backward
<span style="color: #ff0000;">&quot;\e[B&quot;</span>: history-search-forward</pre></div></div>

<p>Now you can use tab to auto complete ignoring case and also suggest more options. The history search stuff lets you use the up arrow to search backwards through your history by typing in the first few letters of a command you&#8217;ve typed before and going back through. It&#8217;s like ctrl+r but easier.</p>
</p>
<li>
<p>Install <a href="http://github.com/mxcl/homebrew">Homebrew</a>. Then: </p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">  brew <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #c20cb9; font-weight: bold;">wget</span>
  brew <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #c20cb9; font-weight: bold;">git</span>
  brew <span style="color: #c20cb9; font-weight: bold;">install</span> mysql</pre></div></div>

</li>
<li>
<p><strong>Ruby:</strong></p>
<p>First thing&#8217;s first. The version of rubygems that comes with Snow Leopard is a bit outdated. Update it:</p>
<p><code>sudo gem update --system</code></p>
<p><a href="http://rvm.beginrescueend.com/">RVM</a> is the Ruby Version Manager. It lets you have multiple versions of Ruby installed on you system. But it&#8217;s much more than that. You can also have gemsets which are preconfigured sets of gems. I&#8217;ve been using one gemset per project.
</p>
<p>
Local rack apps can easily be hosted with <a href="http://github.com/alloy/passengerpane">Passenger Pane</a>. Then you can also <a href="http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs">set up your rdocs for local viewing</a> without using <code>gem server</code>. The instructions in the article still work, you just need to keep an old version or rdoc installed.
</p>
<p><strong><a href="http://effectif.com/articles/opening-ruby-gems-in-textmate">mategem</a></strong> command to edit a gem in Textmate with completion:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">_mategem<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
    <span style="color: #7a0874; font-weight: bold;">local</span> curw
    <span style="color: #007800;">COMPREPLY</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
    <span style="color: #007800;">curw</span>=<span style="color: #800000;">${COMP_WORDS[COMP_CWORD]}</span>
    <span style="color: #7a0874; font-weight: bold;">local</span> <span style="color: #007800;">gems</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$(gem environment gemdir)</span>/gems&quot;</span>
    <span style="color: #007800;">COMPREPLY</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span>$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">compgen</span> <span style="color: #660033;">-W</span> <span style="color: #ff0000;">'$(ls $gems)'</span> <span style="color: #660033;">--</span> <span style="color: #007800;">$curw</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;
    <span style="color: #7a0874; font-weight: bold;">return</span> <span style="color: #000000;">0</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
<span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #660033;">-F</span> _mategem <span style="color: #660033;">-o</span> dirnames mategem</pre></div></div>

</li>
<li>
<a href="http://peepcode.com/products/peepopen">PeepOpen</a> is a new application from PeepCode that gives you a smarter fuzzy file search (like in TextMate) and also works in MacVim and Emacs. It really helps out in MacVim and is much easier to configure than the fuzzy file finder plugin.
</li>
</ul>
<h3>Wrapping Up</h3>
<p>This isn&#8217;t <em>everything</em> I use but It&#8217;s a pretty good start. If you have any must have apps or dev environment shortcuts, please post in the comments.</p>
<style type="text/css">
h4 { margin-bottom: 0 }
li a p { margin-top: 0 }
ul#dev { margin:0; padding:0; text-indent: 0}
</style>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/75pcWAyxWcM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2010/05/05/osx-post-install-guide-4/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/05/05/osx-post-install-guide-4</feedburner:origLink></item>
		<item>
		<title>Friends Around Me</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/GElYSwlIvto/friends-around-me</link>
		<comments>http://jasonseifer.com/2010/04/09/friends-around-me#comments</comments>
		<pubDate>Fri, 09 Apr 2010 19:55:40 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[launch]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=449</guid>
		<description><![CDATA[I&#8217;d like to congratulate Friends Around Me with their official launch today. I was involved with doing some back-end development for this project. It&#8217;s mainly an iPhone (and iPad!) app with a Rails back-end. It&#8217;s a great idea from a very talented group of people whom I was lucky to work with. Check out the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://friendsaround.me"><img class="alignright" src="http://img.skitch.com/20100409-cx27891pygu9y2kq88ekr1bjb4.png" alt="Friends Around Me" /></a></p>
<p>I&#8217;d like to congratulate <a href="http://www.friendsaround.me/">Friends Around Me</a> with their official launch today. I was involved with doing some back-end development for this project. It&#8217;s mainly an iPhone (and iPad!) app with a Rails back-end. It&#8217;s a great idea from a very talented group of people whom I was lucky to work with. Check out <a href="http://www.friendsaround.me/">the site</a> or <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=342291920&#038;mt=8">grab the app from iTunes</a>.</p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/GElYSwlIvto" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2010/04/09/friends-around-me/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/04/09/friends-around-me</feedburner:origLink></item>
		<item>
		<title>Rails Envy</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/o-aQE8lXLk8/rails-envy</link>
		<comments>http://jasonseifer.com/2010/04/08/rails-envy#comments</comments>
		<pubDate>Thu, 08 Apr 2010 23:06:40 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[rails-envy]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=436</guid>
		<description><![CDATA[Many have asked what happened to Rails Envy so I thought it was time to tell the story. Fair warning: this gets a bit personal at times. A Brief Bit About Me I went to school for Psychology where I got a Bachelor of Science at the University of Central Florida. I took some programming [...]]]></description>
			<content:encoded><![CDATA[<p>Many have asked what happened to Rails Envy so I thought it was time to tell the story. Fair warning: this gets a bit personal at times.</p>
<h3>A Brief Bit About Me</h3>
<p>
  I went to school for Psychology where I got a Bachelor of Science at the University of Central Florida. I took some programming classes but was always a &quot;closet geek.&quot;  I&#8217;ve been programming since I was 6 years old and Ruby and Rails just felt right when I found it.  Even more so after coming from PHP, Perl, C, and (shudder) some MS Access coding. Right around when I was finishing college I started attending ORUG meetings and some hackfests. This is where I met Gregg Pollack. We got along great, especially with coding.
</p>
<h3>Where Rails Envy Came From</h3>
<p><img class="alignright" src="http://jasonseifer.com/assets/2010/04/D487E895-248A-4542-A811-11C152B9DA46.jpg" /></p>
<p>
  I think I attended all but the first Orlando Ruby Users Group and occasionally gave presentations. On the <a href="http://orug.org/articles/2006/11/07/next-meeting-tuesday-november-14th">Tuesday, November 14th</a> meeting I gave a presentation on using RJS in Rails. I actually thought it was a good idea to use the term &quot;AJAXified&quot; in a presentation description, but I digress. That night I was joking around with someone and we decided a local [insert other language here] developer had &quot;Rails Envy.&quot; At the time, I thought it would make a pretty funny Rails focused blog name so I registered the domain. Then I sat on it for a while.
</p>
<p>
  At some point in all this, Gregg, who has his <a href="http://www.patchedsoftware.com/">Patched Software</a> consultancy at the time, asked me to come work for him on a contract basis because he needed help on a project. This actually terrified me at the time. What would I do when the contract ran out? How would I find other work? I was pretty fresh out of college and hadn&#8217;t considered going contract. After talking it over with a lot of people, I quit my job.
</p>
<h3>Full Time to Contract</h3>
<div class="alignright" style="width:190px; text-align: center">
<a href="http://www.flickr.com/photos/jseifer/520857903/in/set-72157600287909611/"><img src="http://farm1.static.flickr.com/213/520857903_fb5452cd70_m.jpg" alt="Me and Gregg" /></a><br />
<span class="image_caption">This picture has nothing to do with the paragraph, but it&#8217;s from that time period.</span>
</div>
<p>
  Coming from the full time employment world, working on a contract basis was a wonderful experience. I was <em>working</em> while wearing a <em>t-shirt and shorts</em>! Plus, the work was fascinating to me. I remember working with Gregg to solve some very interesting Ruby and Rails problems of the time. There were always people blogging but not as many as today and a lot of the time you had to dive deep in to Rails rather than googling solutions. It&#8217;s inspiring to see how far Rails has come.
</p>
<p>After I working with Gregg for a little while I convinced him that we needed a blog. Gregg wasn&#8217;t convinced we were qualified enough to write a blog. I remember saying that we didn&#8217;t have to be because we had <em>something</em> to offer people based on our experience developing Rails full time. This was a different time &#8212; not many people were doing full time Rails work.  We used railsenvy.com, set up <a href="http://mephistoblog.com/">Mephisto</a>, and we were rolling.
</p>
<p>We weren&#8217;t expecting the amount of feedback we got. It was great.</p>
<h3>We Make Some Videos</h3>
<p>
  I remember leaving ORUG one night and saying to Gregg &quot;Wouldn&#8217;t it be funny if we parodied the Mac vs PC ads only using Ruby on Rails and other web development frameworks?&quot; I was just joking but Gregg convinced me it would be a good idea to actually shoot these. I remember writing some script on a notepad during ORUG about a guy running in a track suit. I&#8217;m really glad that one didn&#8217;t make it in. Anyway, Gregg set up a <a href="http://123.writeboard.com/7e19607f41c8f8290/v/show/2294579">writeboard</a> (password: railsenvy), we bounced some ideas back and forth, got in touch with a friend of mine who did video work, and actually shot the videos.
</p>
<p>
Shooting the videos turned out to take a lot longer than I expected. It also was much more fun than I expected. I think the original set of four took nearly two full days including rehearsals. I still love the bear in a jar for hibernate. The videos went viral and that was awesome. I think I have a screenshot somewhere of 3 of the videos being in various spots on the front page of digg at the same time.
</p>
<p>Gregg managed to get in contact with Chad Fowler and have the videos played at the first Railsconf. That was a truly exciting experience. I wasn&#8217;t expecting it at all and was flattered that they even considered playing them.  After Railsconf we made some more.  To this day I&#8217;m still embarrassed by the <a href="http://www.youtube.com/watch?v=kU-4D51FY98">myspace</a> one.</p>
<h3>Hey, Let&#8217;s Start a Podcast!</h3>
<p><a href="http://www.flickr.com/photos/jseifer/1525646639/in/set-72157602340863629/"><img class="alignright" src="http://farm3.static.flickr.com/2233/1525646639_447cf2eb55_m.jpg" alt="Rails Envy" /></a></p>
<p>
  I wasn&#8217;t much of a podcast listener. Gregg turned me on to the amazing <a href="http://radiolab.org">Radio Lab</a> and <a href="http://www.thisamericanlife.org/">This American Life</a> podcasts. I had noticed at the time that there weren&#8217;t any Ruby or Rails news podcasts. I remember it took some convincing of Gregg to get one started. My original pitch was something like &quot;Just a five minute thing where we read what&#8217;s new. We&#8217;re reading all of the RSS feeds anyway&quot; &quot;Why would people listen to us when they could just read RSS feeds?&quot; &quot;Some people like listening to podcasts. And we&#8217;re funny.&quot; After doing some research on how to set up a successful podcast (Thanks <a href="http://coderpath.com/">Miles</a> and <a href="http://ryanpricemedia.com/">Ryan!</a>) we were up and running.
</p>
<p>
  I learned a ton about editing podcasts. <a href="http://hivelogic.com">Dan</a> taught me why I should use compression rather than normalization under certain circumstances. For the longest time, I used Soundtrack Pro to edit the podcasts. I think I did the first 40 episodes in Soundtrack before learning Pro Tools. Gregg and I would record each <em>story</em> separately and assemble them later. It usually took three takes if we messed up. Which was often. Looking back, I can&#8217;t believe I edited over 90 of them. Every week. It was a lot of work but I loved doing it.
</p>
<h3>Rails Can&#8217;t Scale</h3>
<p><a href="http://skitch.com/jseifer/n7923/rails-can-t-scale-google-search"><img src="http://img.skitch.com/20100408-ng348jrrshk17mpttqf3e9jixc.png" width="225" alt="Can Rails Scale?" class="alignright" /></a></p>
<p>
  I think a lot of people were wondering why a Rails developer would be saying that Rails <a href="http://railscantscale.com">can&#8217;t</a> <a href="http://canrailsscale.com">scale</a>, very often at least once a week. When I started this meme there were a lot of blog posts and questions about the time about Rails and scalability. People were citing Twitter as an example of Rails not being able to scale during their fail whale days. Java people were saying Ruby is slow. TechCrunch was <a href="http://techcrunch.com/2008/05/22/twitter-at-scale-will-it-work/">all over it</a>.</p>
<p>My idea was to make the expression &quot;Rails can&#8217;t scale&quot; so tired out that people would get sick of hearing it. When people commented asking me to stop, I knew I was doing a good job. Sorry everyone. But it was for a good cause. There&#8217;s a lot less sentiment these days about Rails not being able to scale. I&#8217;d like to think I played a small part in that.</p>
<h3>Working for The Man!</h3>
<p><img class="alignright" src="http://img.skitch.com/20100408-ekyp3e21h71g1jsx82h56km8rj.png" alt="Halogen Guides" /></p>
<p>
  Gregg and I were approached by <a href="http://hivelogic.com">Dan Benjamin</a> about working for a startup called Helium Report (now <a href='http://halogenguides.com'>Halogen Guides</a>). We accepted. I got the opportunity to work with a kick ass team.  I have nothing but praise and respect for everyone I worked with. We had our challenges but I think we handled them well. I wrote some pretty good code, if I do say so myself.<br />
However, for reasons I&#8217;m about to outline, I wasn&#8217;t able to keep the job.</p>
<h3>Tragedy Strikes</h3>
<p> This part is difficult for me to write. Gregg mentioned in his post that I moved to Ft. Lauderdale for a year but didn&#8217;t say why. On May 1st, 2008, my mother woke up to find my father missing from the house. She was very worried and under a lot of stress at the time. My sister and I eventually found my dad, though my mother suffered her second heart attack while we were looking for him. She passed away a few days later.
</p>
<p> Words can&#8217;t convey how deeply I miss her. I think about her every day. She was an amazing human being and I&#8217;m proud to be her son. I owe her a lot and I&#8217;m largely the person I am today because of her.</p>
<p>I&#8217;m not sure people ever really &quot;get over&quot; these kinds of things; rather, you find a new normal. I got a lot of supportive emails when Gregg announced this at the end of the podcast. I&#8217;m sorry if you emailed and I never got back to you.</p>
<p>I wasn&#8217;t able to keep a job while all of this was going on. However, everyone at Halogen Guides was ridiculously, above and beyond, supportive. For that I&#8217;m extremely grateful. I wish everyone nothing but the best.</p>
<h3>Some Good Comes out of it</h3>
<p><img class="alignright" src="http://lh4.ggpht.com/_aJ8TVhEgOQU/SDBjny0Ej2I/AAAAAAAAC6I/RgpXSiAkqvE/s288/IMG_1672.png"></p>
<p>My girlfriend Candace and I moved to South Florida to help take care of my father.  She selflessly changed jobs and moved in with my father and I. This sealed the deal in my mind and I proposed. She said yes. She&#8217;s a wonderful person and we&#8217;re getting married September 25th, this year. I couldn&#8217;t be happier, even though I&#8217;m a bit difficult at times. I probably wouldn&#8217;t have been able to get through everything without her support and the support from some very good friends. You know who you are. I thank you all deeply.
</p>
<h3>Wrapping Up</h3>
<p>
  With me living in South Florida and Gregg in Orlando, each working on different projects, it started to become more difficult to do the podcast which was still going strong. We did our best but it started making more sense to split off in to our own companies. I started <a href="http://twistedmind.com">Twistedmind Inc.</a> where, among other things, I offer consulting services scaling Rails. <a href="http://hivelogic.com">Dan Benjamin</a> took over the reigns as co-host of the podcast, which we eventually moved over to <a href="http://5by5.tv">5by5</a>. We also started <a href="http://5by5.tv/devshow">The Dev Show</a> to do a big longer discussion on general programming topics.
</p>
<h3>Moving On</h3>
<p>
  Though we have mutually decided to take the Rails Envy web site down, I feel that Rails Envy, and what Gregg and I accomplished together, should be celebrated. I&#8217;m proud of the work we did and what we accomplished as a team. I&#8217;m proud of the videos, podcasts, talks, and client work we did.  I&#8217;m grateful for the opportunities to have met and worked with so many people. It was a great experience. I hope to continue to set the bar high doing client work through my new company, <a href="http://twistedmind.com">Twistedmind</a> (Hire me!), being a part of podcasts like <a href="http://5by5.tv/rubyshow">The Ruby Show</a> and <a href="http://5by5.tv/devshow">The Dev Show</a>, and launching projects like <a href="http://geniuspool.com">Genius Pool</a> and <a href="http://schedulingapp.com">Employee Scheduling software</a>.  I wish everyone the best. See you soon.</p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/o-aQE8lXLk8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2010/04/08/rails-envy/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/04/08/rails-envy</feedburner:origLink></item>
		<item>
		<title>Rake Tutorial</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/e5Qoz404RGU/rake-tutorial</link>
		<comments>http://jasonseifer.com/2010/04/06/rake-tutorial#comments</comments>
		<pubDate>Tue, 06 Apr 2010 08:25:09 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rake]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=388</guid>
		<description><![CDATA[If you&#8217;re developing with Rails you&#8217;ve probably encountered rake once or twice. This blog post aims to walk you through where rake came from and an introduction on how to use it effectively in your Rails apps. A Little Bit of History Rake is the project of Jim Weirich. It&#8217;s a build tool. For a [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://farm4.static.flickr.com/3531/3183114977_da7c827934_m.jpg" /></p>
<p>If you&#8217;re developing with Rails you&#8217;ve probably encountered rake once or twice. This blog post aims to walk you through where rake came from and an introduction on how to use it effectively in your Rails apps.</p>
<h3>A Little Bit of History</h3>
<p>
  Rake is the project of <a href="http://onestepback.org">Jim Weirich</a>. It&#8217;s a build tool. For a good laugh and an even more in depth history check out the &quot;<a href="http://rake.rubyforge.org/files/doc/rational_rdoc.html">rational.rdoc</a>&quot; from the Rake documentation.  Essentially, rake started as an idea for using Ruby inside of a Makefile. Though Jim doesn&#8217;t sound convinced from the tone in that document, it <em>is</em> a good idea.
</p>
<p>What&#8217;s the need for an automated build system at all? As usual, <a href="http://en.wikipedia.org/wiki/Build_tool">Wikipedia</a> has the answer:</p>
<blockquote><p>
  Historically, developers used build automation to call compilers and linkers from inside a build script versus attempting to make the compiler calls from the command line. It is simple to use the command line to pass a single source module to a compiler and then to a linker to create the final deployable object. However, when attempting to compile and link many source code modules, in a particular order, using the command line process is not a reasonable solution. [sic]<br />
  As the build process grew more complex, developers began adding pre and post actions around the calls to the compilers such as a check-out from version control to the copying of deployable objects to a test location. The term &#8220;build automation&#8221; now includes managing the pre and post compile and link activities as well as the compile and link activities.
  </p></blockquote>
<h3>It&#8217;s about Dependencies</h3>
<p>
  This may be a bit of a stretch to say but build tools are about dependencies. One file or set of files depends on another set to get compiled, linked, or other fun things before the next set can be processed. The same idea exists in rake with tasks and task dependencies. Let&#8217;s look at a simple rake task. Save the following as &#8220;Rakefile&#8221; in any directory:
</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  directory <span style="color:#996600;">&quot;tmp&quot;</span>
&nbsp;
  file <span style="color:#996600;">&quot;hello.tmp&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;tmp&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    sh <span style="color:#996600;">&quot;echo 'Hello' &gt;&gt; 'tmp/hello.tmp'&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>What we&#8217;re saying here is that the file named &#8220;hello.tmp&#8221; depends on the directory &quot;tmp&quot;. When rake runs across this, it&#8217;s going to create the directory &quot;tmp&quot; first before running the &quot;hello.tmp&quot; task. When you run it, you&#8217;ll see something like the following:
</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">  <span style="color: #7a0874; font-weight: bold;">&#91;</span>jason<span style="color: #000000; font-weight: bold;">@</span>brick:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ rake hello.tmp
  <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>jason<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#41;</span>
  <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">'Hello'</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #ff0000;">'tmp/hello.tmp'</span></pre></div></div>

<p>If you were to look at the &quot;hello.tmp&quot; file you would see the phrase &quot;Hello&quot;. What happens if you run it again? You&#8217;ll see the same output again. What&#8217;s going on? Rake is generating the file again. It&#8217;s doing this because it can&#8217;t actually find the file tmp/hello.tmp from that definition. Let&#8217;s redefine the task:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  directory <span style="color:#996600;">&quot;tmp&quot;</span>
&nbsp;
  file <span style="color:#996600;">&quot;tmp/hello.tmp&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;tmp&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    sh <span style="color:#996600;">&quot;echo 'Hello' &gt; 'tmp/hello.tmp'&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Now if you were to run it twice you would see something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">  <span style="color: #7a0874; font-weight: bold;">&#91;</span>jason<span style="color: #000000; font-weight: bold;">@</span>brick:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ rake <span style="color: #ff0000;">&quot;tmp/hello.tmp&quot;</span>
  <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>jason<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#41;</span>
  <span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> tmp
  <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">'Hello'</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #ff0000;">'tmp/hello.tmp'</span>
  <span style="color: #7a0874; font-weight: bold;">&#91;</span>jason<span style="color: #000000; font-weight: bold;">@</span>brick:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ rake <span style="color: #ff0000;">&quot;tmp/hello.tmp&quot;</span>
  <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>jason<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

<p>Rake now knows that the file task has been run.</p>
<h3>Running Other Tasks</h3>
<p>
  Rake tasks can take the form of having prerequisites and can <em>depend on</em> another task. Let&#8217;s say I wanted to get ready in the morning. My process would be something like this:</p>
<ol>
<li>Turn off alarm clock.</li>
<li>Groom myself.</li>
<li>Make coffee.</li>
<li>Walk dog.</li>
</ol>
<p>
  Let&#8217;s further assume that I have OCD and have to do all of these in order. In rake I might express my morning as follows:
</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  task <span style="color:#ff3333; font-weight:bold;">:turn_off_alarm</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Turned off alarm. Would have liked 5 more minutes, though.&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  task <span style="color:#ff3333; font-weight:bold;">:groom_myself</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Brushed teeth.&quot;</span>
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Showered.&quot;</span>
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Shaved.&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  task <span style="color:#ff3333; font-weight:bold;">:make_coffee</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    cups = ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;COFFEE_CUPS&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">||</span> <span style="color:#006666;">2</span>
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Made #{cups} cups of coffee. Shakes are gone.&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  task <span style="color:#ff3333; font-weight:bold;">:walk_dog</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Dog walked.&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  task <span style="color:#ff3333; font-weight:bold;">:ready_for_the_day</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:turn_off_alarm</span>, <span style="color:#ff3333; font-weight:bold;">:groom_myself</span>, <span style="color:#ff3333; font-weight:bold;">:make_coffee</span>, <span style="color:#ff3333; font-weight:bold;">:walk_dog</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Ready for the day!&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>If I were to run this as is I would type <code>rake ready_for_the_day</code> and I&#8217;d see the following:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">  <span style="color: #7a0874; font-weight: bold;">&#91;</span>jason<span style="color: #000000; font-weight: bold;">@</span>brick:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ rake ready_for_the_day
  <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>jason<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#41;</span>
  Turned off alarm. Would have liked <span style="color: #000000;">5</span> <span style="color: #c20cb9; font-weight: bold;">more</span> minutes, though.
  Brushed teeth.
  Showered.
  Shaved.
  Made <span style="color: #000000;">5</span> cups of coffee. Shakes are gone.
  Dog walked.
  Ready <span style="color: #000000; font-weight: bold;">for</span> the day<span style="color: #000000; font-weight: bold;">!</span></pre></div></div>

<p>By running the <code>ready_for_the_day</code> task it notices that the <code>turn_off_alarm, groom_myself, make_coffee, and walk_dog</code> tasks are all prerequisites of the <code>ready_for_the_day</code> task. Then it runs them all in the appropriate order. You&#8217;ll notice that we can pass something in to the <code>make_coffee</code> task. If we were having a really tough day we could pass in a value to the COFFEE_CUPS environment variable and be more prepared:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">  <span style="color: #7a0874; font-weight: bold;">&#91;</span>jason<span style="color: #000000; font-weight: bold;">@</span>brick:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ rake <span style="color: #007800;">COFFEE_CUPS</span>=<span style="color: #000000;">5</span> make_coffee
  <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>jason<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#41;</span>
  Made <span style="color: #000000;">5</span> cups of coffee. Shakes are gone.</pre></div></div>

</p>
<h3>Namespaces</h3>
<p>
  Rake supports the concept of namespaces which essentially lets you group together similar tasks inside of one namespace. You&#8217;d then specify the namespace when you call a task inside it.  It keeps things tidy while still being quite effective.  In Rails, you might notice the <code><strong>db</strong>:migrate</code> task. In that example, <code><strong>db</strong></code> is the namespace and migrate is the task. Using the above example, we might put everything in to the <code>morning</code> namespace:
</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  namespace <span style="color:#ff3333; font-weight:bold;">:morning</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    task <span style="color:#ff3333; font-weight:bold;">:turn_of_alarm</span>
    ....
  <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Now if you were to run <code>rake COFFEE_CUPS=3 morning:ready_for_the_day</code> you would have the same output as above, only it only took 3 cups of coffee today. Score!</p>
<h3>The Default Task</h3>
<p>
  Rake has the concept of a <em>default</em> task. This is essentially the task that will be run if you type rake without any arguments. If we wanted our default task to be turning off the alarm from the example above, we&#8217;d do this:
</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  task <span style="color:#ff3333; font-weight:bold;">:default</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'morning:turn_off_alarm'</span></pre></div></div>

<p>Running <code>rake</code> now produces the following:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">  <span style="color: #7a0874; font-weight: bold;">&#91;</span>jason<span style="color: #000000; font-weight: bold;">@</span>brick:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ rake
  <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>jason<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#41;</span>
  Turned off alarm. Would have liked <span style="color: #000000;">5</span> <span style="color: #c20cb9; font-weight: bold;">more</span> minutes, though.</pre></div></div>

<h3>Describing Your Tasks</h3>
<p>You can use the <code>desc</code> method to describe your tasks. This is done on the line right above the task definition. It&#8217;s also what gives you that nice output when you run <coee>rake -T</coee> to get a list of tasks.  Tasks are displayed in alphabetical order. We&#8217;ll define some descriptions in our Rakefile (abbreviated for brevity):</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  ...
  <span style="color:#9900CC;">desc</span> <span style="color:#996600;">&quot;Make coffee&quot;</span>
  task <span style="color:#ff3333; font-weight:bold;">:make_coffee</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    cups = ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;COFFEE_CUPS&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">||</span> <span style="color:#006666;">2</span>
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Made #{cups} cups of coffee. Shakes are gone.&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  ...</pre></div></div>

<p>Now when we run <coee>rake -T</coee> for our list of tasks we get the following output:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">  <span style="color: #7a0874; font-weight: bold;">&#91;</span>jason<span style="color: #000000; font-weight: bold;">@</span>brick:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ rake <span style="color: #660033;">-T</span>
  <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>jason<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#41;</span>
  rake afternoon:make_coffee      <span style="color: #666666; font-style: italic;"># Make afternoon coffee</span>
  rake morning:groom_myself       <span style="color: #666666; font-style: italic;"># Take care of normal hygeine tasks.</span>
  rake morning:make_coffee        <span style="color: #666666; font-style: italic;"># Make coffee</span>
  rake morning:ready_for_the_day  <span style="color: #666666; font-style: italic;"># Get ready for the day</span>
  rake morning:turn_off_alarm     <span style="color: #666666; font-style: italic;"># Turn off alarm.</span>
  rake morning:walk_dog           <span style="color: #666666; font-style: italic;"># Walk the dog</span></pre></div></div>

<p>You can add in a string to get tasks matching that displayed. Running <code>rake -T af</code> would show just the afternoon task.</p>
<h3>Redefining Tasks</h3>
<p>Let&#8217;s say you want to add on to an existing task. Perhaps you have another item in your grooming routine like styling your hair.  You could write another task and slip it in as a dependency for <code>groom_myself</code> but you could also redefine <code>groom_myself</code> later on (shortened for brevity but you get the idea):</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  namespace <span style="color:#ff3333; font-weight:bold;">:morning</span> <span style="color:#9966CC; font-weight:bold;">do</span>
	....
	<span style="color:#9900CC;">task</span> <span style="color:#ff3333; font-weight:bold;">:groom_myself</span> <span style="color:#9966CC; font-weight:bold;">do</span>
      <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Brushed teeth.&quot;</span>
      <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Showered.&quot;</span>
      <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Shaved.&quot;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
    ....
  <span style="color:#9966CC; font-weight:bold;">end</span>
  ...
  <span style="color:#9900CC;">namespace</span> <span style="color:#ff3333; font-weight:bold;">:morning</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    task <span style="color:#ff3333; font-weight:bold;">:groom_myself</span> <span style="color:#9966CC; font-weight:bold;">do</span>
      <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Styled hair.&quot;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">  <span style="color: #7a0874; font-weight: bold;">&#91;</span>jason<span style="color: #000000; font-weight: bold;">@</span>brick:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ rake morning:groom_myself
  <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>jason<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#41;</span>
  Brushed teeth.
  Showered.
  Shaved.
  Styled hair.</pre></div></div>

<p><img class="alignright" src="http://farm1.static.flickr.com/133/337248947_f1eadc7cc0_m.jpg" /></p>
<h3>Invoking Tasks</h3>
<p>
  You may at some point want to invoke a task from inside another task.  Let&#8217;s say, for example, you wanted to make coffee in the afternoon, too. If you need an extra upper after lunch you could do that the following way:
</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  namespace <span style="color:#ff3333; font-weight:bold;">:afternoon</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    task <span style="color:#ff3333; font-weight:bold;">:make_coffee</span> <span style="color:#9966CC; font-weight:bold;">do</span>
      <span style="color:#6666ff; font-weight:bold;">Rake::Task</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'morning:make_coffee'</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">invoke</span>
      <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Ready for the rest of the day!&quot;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Which outputs:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">  <span style="color: #7a0874; font-weight: bold;">&#91;</span>jason<span style="color: #000000; font-weight: bold;">@</span>brick:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ rake afternoon:make_coffee <span style="color: #007800;">COFFEE_CUPS</span>=<span style="color: #000000;">1</span>
  <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>jason<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #7a0874; font-weight: bold;">&#41;</span>
  Made <span style="color: #000000;">1</span> cups of coffee. Shakes are gone.
  Ready <span style="color: #000000; font-weight: bold;">for</span> the rest of the day<span style="color: #000000; font-weight: bold;">!</span></pre></div></div>

<p>A real world example of this is the <code>rcov:all</code> task. I use this in <a href="http://geniuspool.com">Genius Pool</a> for aggregate rcov data. It&#8217;s shamelessly stolen from <a href="http://www.claytonlz.com/index.php/2009/04/how-to-setup-rspec-cucumber-webrat-rcov-and-autotest-on-leopard/">Clayton Lengel-Zigich</a>. Go check out that post for a good example of invoking other tasks from rake.</p>
<h3>Refactoring</h3>
<p>
  You&#8217;ll notice in the example above we&#8217;re delegating most of the work to already defined methods and tasks in the RSpec and Cucumber classes. As a general rule, try to keep your methods already defined other places and call them from rake with your specific options and use cases.  Let&#8217;s say I had a Rails application that e-mailed all accounts in the system that their account was expiring in a certain number of days. Here&#8217;s one way to write it:
</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  namespace <span style="color:#ff3333; font-weight:bold;">:accounts</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    desc <span style="color:#996600;">&quot;Email expiring accounts to let them know&quot;</span>
    task <span style="color:#ff3333; font-weight:bold;">:email_expiring</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:environment</span> <span style="color:#9966CC; font-weight:bold;">do</span>
      date = ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'from'</span><span style="color:#006600; font-weight:bold;">&#93;</span> ? <span style="color:#CC00FF; font-weight:bold;">Date</span>.<span style="color:#9900CC;">parse</span><span style="color:#006600; font-weight:bold;">&#40;</span>ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'from'</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span> : <span style="color:#CC00FF; font-weight:bold;">Date</span>.<span style="color:#9900CC;">today</span>
      accounts = Account.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:all</span>, <span style="color:#ff3333; font-weight:bold;">:conditions</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;expiration_date = ?&quot;</span>, date<span style="color:#006600; font-weight:bold;">&#93;</span>
      accounts.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>account<span style="color:#006600; font-weight:bold;">|</span>
        Notifier.<span style="color:#9900CC;">deliver_account_expiration</span><span style="color:#006600; font-weight:bold;">&#40;</span>account<span style="color:#006600; font-weight:bold;">&#41;</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>A better way, that would let you test it more thoroughly would be to do the following:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  namespace <span style="color:#ff3333; font-weight:bold;">:accounts</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    desc <span style="color:#996600;">&quot;Email expiring accounts to let them know&quot;</span>
    task <span style="color:#ff3333; font-weight:bold;">:email_expiring</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:environment</span> <span style="color:#9966CC; font-weight:bold;">do</span>
      date = ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'from'</span><span style="color:#006600; font-weight:bold;">&#93;</span> ? <span style="color:#CC00FF; font-weight:bold;">Date</span>.<span style="color:#9900CC;">parse</span><span style="color:#006600; font-weight:bold;">&#40;</span>ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'from'</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span> : <span style="color:#CC00FF; font-weight:bold;">Date</span>.<span style="color:#9900CC;">today</span>
      Account.<span style="color:#9900CC;">notify_expiring</span><span style="color:#006600; font-weight:bold;">&#40;</span>date<span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>This lets you unit test your <code>notify_expiring</code> method on the account class and make sure that it&#8217;s doing what it&#8217;s supposed to do. This is a small, made up example, but you get the idea. Here&#8217;s an example from <a href="http://github.com/defunkt/resque/blob/master/tasks/redis.rake">Resque</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  desc <span style="color:#996600;">'Restart redis'</span>
  task <span style="color:#ff3333; font-weight:bold;">:restart</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    RedisRunner.<span style="color:#9900CC;">stop</span>
    RedisRunner.<span style="color:#9900CC;">start</span>
  <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Notice the delegation to the RedisRunner class methods? This is a great rake task</p>
<h3>Rails</h3>
<p>
  You can get access to your models, and in fact, your whole environment by making tasks dependent on the <code>environment</code> task. This lets you do things like run <code>rake RAILS_ENV=staging db:migrate</code>. Rails will <strong>autmatically pick up tasks in lib/tasks</strong>.  Any files named with the <code>.rake</code> extension will get picked up when you do <code>rake -T</code>.
</p>
<h3>Scheduling Rake Tasks</h3>
<p>
  You can use <a href="http://en.wikipedia.org/wiki/Cron">cron</a> to schedule rake tasks.  Let&#8217;s say you wanted to run the account email expiration task every night at 12:15 on your production server, you might have something like this:
</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">  <span style="color: #000000;">15</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>my_app<span style="color: #000000; font-weight: bold;">/</span>current <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>rake <span style="color: #007800;">RAILS_ENV</span>=production accounts:email_expiring</pre></div></div>

<h3>Misc</h3>
<p>
  <code>Rake.original_dir</code> gives you the directory that the original rake task was run from.
</p>
<p></p>
<h3>Derivatives</h3>
<ul>
<li><a href="http://github.com/wycats/thor/">Thor</a> is a more class based approach to solving some of the things rake does as far as actual tasks go. </li>
<li><a href="http://capify.org">Capistrano</a> is the de facto standard for deploying rails apps. Its syntax is inspired pretty heavily by Rake, but it is definitely <em>not</em> rake.</li>
</ul>
<h3>Further Reading</h3>
<ul>
<li><a href="http://blog.jayfields.com/2006/11/ruby-testing-rake-tasks.html">&quot;Testing Rake Tasks&quot;</a> by Jay Fields</li>
<li><a href="http://www.jbarnette.com/2009/08/27/on-rake.html">&quot;On Rake&quot; by John Barnette</a></li>
<li><a href="http://www.claytonlz.com/index.php/2009/04/how-to-setup-rspec-cucumber-webrat-rcov-and-autotest-on-leopard/">How To: Setup RSpec, Cucumber, Webrat, RCov and Autotest on Leopard | Clayton Lengel-Zigich</a></li>
<li><a href="http://railscasts.com/episodes/66-custom-rake-tasks">Custom Rake Tasks</a> Railscast</li>
</ul>
<h3>Useful Rake Examples</h3>
<ul>
<li><a href="http://gist.github.com/359401">Sample Rakefile</a> from this article.</li>
<li><a href="http://github.com/defunkt/resque/blob/master/tasks/redis.rake">redis.rake</a> from Resque.</li>
</ul>
<p>If you have any more useful rake examples, please let me know and I&#8217;ll add them here.</p>
<p></p>
<p><strong>Photo Credits:</strong><br />
<strong><a href="http://www.flickr.com/photos/34094515@N00/3183114977/">Shaker rake</a></strong> by <a href="http://www.flickr.com/photos/34094515@N00/">dicktay2000</a> on Flickr.<br />
<strong><a href="http://www.flickr.com/photos/altemark/337248947/">Toy sampling megaphone</a></strong> by <a href="http://www.flickr.com/photos/altemark/">altemark</a> on Flickr.</p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/e5Qoz404RGU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2010/04/06/rake-tutorial/feed</wfw:commentRss>
		<slash:comments>63</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/04/06/rake-tutorial</feedburner:origLink></item>
		<item>
		<title>Developer Job Board</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/yI0200eeupo/developer-job-board</link>
		<comments>http://jasonseifer.com/2010/03/29/developer-job-board#comments</comments>
		<pubDate>Mon, 29 Mar 2010 18:51:07 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Business]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=391</guid>
		<description><![CDATA[I&#8217;m pleased to announce the Genius Pool job board. This is a new job board for connecting companies to job seekers. With the connection to the 5by5 podcast network, making sure your job opportunity is in the ears of qualified applicants has never been easier. Why&#8217;s that? If you&#8217;re looking for a Ruby or Rails [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://geniuspool.com/?s=jsbl"><img class="alignright" src="http://jasonseifer.com/assets/2010/03/logo.png" alt="Genius Pool" border="0" width="243" height="64" /></a>I&#8217;m pleased to announce the <a href="http://geniuspool.com/?s=jsb">Genius Pool</a> job board. This is a new job board for connecting companies to job seekers. With the connection to the <a href="http://5by5.tv">5by5 podcast network</a>, making sure your job opportunity is in the ears of qualified applicants has never been easier. Why&#8217;s that? If you&#8217;re looking for a Ruby or Rails developer, what better spot is there than <a href="http://5by5.tv/rubyshow">The Ruby Show</a>? The same applies to <a href="http://5by5.tv/devshow">The Dev Show</a>. You can also be assured that whomever is applying has an <em>impeccable</em> sense of humor and taste. </p>
<p>So <a href="http://geniuspool.com/?s=jsb">check it out</a> if you get a moment or <a href="http://twitter.com/geniuspool">follow Genius Pool on Twitter</a> for new job postings as they get posted. I&#8217;ll be doing some blog posts in the coming weeks about the process of launching your own project as well.</p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/yI0200eeupo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2010/03/29/developer-job-board/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/03/29/developer-job-board</feedburner:origLink></item>
		<item>
		<title>80s Me</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/SX1trDGA0HY/80s-me</link>
		<comments>http://jasonseifer.com/2010/03/26/80s-me#comments</comments>
		<pubDate>Fri, 26 Mar 2010 19:34:11 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Humor]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=384</guid>
		<description><![CDATA[This fantastic image courtesy of Peter Cooper.]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;"><a href="http://skitch.com/petercooper/n551p/seifer-80s"><img src="http://jasonseifer.com/assets/2010/03/20100326-qu2ym5us1yxacd3j78a7ggs4ex.jpg" alt="20100326-qu2ym5us1yxacd3j78a7ggs4ex.jpg" border="0" width="419" height="527" /></a></div>
<p></p>
<p>This fantastic image courtesy of <a href="http://skitch.com/petercooper/n551p/seifer-80s">Peter Cooper</a>.</p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/SX1trDGA0HY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2010/03/26/80s-me/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/03/26/80s-me</feedburner:origLink></item>
		<item>
		<title>On Passwords</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/oHhcIi4CGUI/on-passwords</link>
		<comments>http://jasonseifer.com/2010/03/21/on-passwords#comments</comments>
		<pubDate>Sun, 21 Mar 2010 10:00:11 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[passwords]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=355</guid>
		<description><![CDATA[On a recent episode of The Dev Show Dan and I talked about passwords. In particular, the topic of password hashing came up. I&#8217;d like to say up front that I&#8217;m not a security guy and most definitely not a cryptographer. However, I don&#8217;t have to be because there are much smarter people who have [...]]]></description>
			<content:encoded><![CDATA[<p>On a recent episode of <a href="http://5by5.tv/devshow/4">The Dev Show</a> Dan and I talked about passwords. In particular, the topic of password hashing came up. I&#8217;d like to say up front that I&#8217;m not a security guy and most definitely not a cryptographer. However, I don&#8217;t <em>have</em> to be because there are much smarter people who have already done a lot of work on encryption schemes and have done it much better than I ever could.</p>
<div class="image_caption"><img src="http://jasonseifer.com/assets/2010/03/9EB3D76B-FB9C-43A5-B23D-CB6EB6EB28F9.jpg" alt="Spaceballs" border="0" width="360" height="240" /><br />
Above: discussion of best practices in passwords.
</div>
<p></p>
<p>This should go without saying: you shouldn&#8217;t be storing your passwords in plain text in your database. Unless you need to be able to retrieve the password later, it should be stored in the database in a hashed format. Thomas Ptacek, a very highly respected security professional, explains all you need to know about passwords in <a href="http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html">this blog post</a>. I&#8217;ll save you the trouble of reading the whole thing: just use <a href="http://en.wikipedia.org/wiki/Bcrypt">bcrypt</a> as your encryption scheme. It&#8217;s the slowest to generate the encrypted hash. By virtue of being slow to generate, it would also take a <em>very</em> long time to perform a successful lookup using <a href="http://en.wikipedia.org/wiki/Rainbow_tables">rainbow tables</a>. See that blog post linked for much more information and a thorough explanation.</p>
<p>Just how much longer does it take to generate? The following is a quick ruby program I whipped up to benchmark. It uses each encryption scheme to generate a password 50 times.  The following was how long it took to run on my macbook using ruby 1.9.1-p378.  You can grab the script <a href="http://gist.github.com/339346">here</a> if you&#8217;d like to run it locally. It contains absolutely no tests which makes my inner <a href="http://www.coreyhaines.com/">Corey Haines</a> frown:</p>
<pre>
  Password to hash: password
                    user     system      total        real
  MD5           0.000000   0.000000   0.000000 (  0.001443)
  SHA1          0.000000   0.000000   0.000000 (  0.001679)
  SHA256        0.000000   0.000000   0.000000 (  0.001308)
  bcrypt (3)    0.080000   0.000000   0.080000 (  0.086532)
  bcrypt (10)   4.550000   0.010000   4.560000 (  4.601996)
</pre>
<p>The differences between the (3) and (10) are the &quot;cost&quot; of generating the password. The documentation for the bcrypt gem summarizes that very well:</p>
<blockquote><p>
    Takes an optional :cost option, which is a logarithmic variable which determines how computational expensive the hash is to calculate (a :cost of 4 is twice as much work as a :cost of 3). The higher the :cost the harder it becomes for attackers to try to guess passwords (even if a copy of your database is stolen), but the slower it is to check users’ passwords.
  </p></blockquote>
<p>But I&#8217;m getting off topic. The reason I wanted to write this post was to create a list of popular open source software and see what kind of passwords hashing schemes are in use.  Here&#8217;s the list I&#8217;ve compiled so far:</p>
<ul>
<li>
<p><strong><a href="http://www.djangoproject.com/">Django</a></strong><br />
    <strong>Encryption Scheme: </strong>SHA1, MD5, or crypt<br />
    <strong>Notes: </strong>Previous Django versions, such as 0.90, used simple MD5 hashes without password salts. For backwards compatibility, those are still supported; they&#8217;ll be converted automatically to the new style the first time check_password() works correctly for a given user. More info:<br />
    <a href="http://docs.djangoproject.com/en/dev/topics/auth/">http://docs.djangoproject.com/en/dev/topics/auth/</a><br />
    <a href="http://docs.python.org/library/crypt.html">http://docs.python.org/library/crypt.html</a></td>
</p>
</li>
<li>
<p>
    <strong><a href="http://dev.mysql.com/">MySQL</a></strong><br />
    <strong>Encryption Scheme: </strong>Double SHA1
   </p>
</li>
<li>
<p>
        <strong><a href="http://wordpress.org">WordPress</a></strong><br />
        <strong>Encryption Scheme: <a href="http://www.openwall.com/phpass/">PHPass</a></strong><br />
        <strong>Notes</strong> The awkwardly named PHPass library defaults to bcrypt (awesome) and falls back to DES or MD5 based salted hashes depending on the php version and supported features.
      </p>
</li>
<li>
<p>
        <strong><a href="http://expressionengine.com/">Expression Engine</a></strong><br />
        <strong>Encryption Scheme: </strong> SHA1</p>
</li>
<li>
<p>
      <strong><a href="http://www.joomla.org/">Joomla</a></strong><br />
      <strong>Encryption Scheme: </strong> MD5
    </p>
</li>
<li>
<p>
      <strong><a href="http://phpbb.com">phpBB</a></strong><br />
      <strong>Encryption Scheme: </strong> Proprietary hash method using /dev/urandom and md5
    </p>
</li>
<li>
<p>
      <strong>ASP.Net Authentication</strong><br />
      <strong>Encryption Scheme: </strong> Uses a concept of &quot;<a href="http://msdn.microsoft.com/en-us/library/eeyk640h.aspx">providers</a>&quot;.<br />
      <strong>Notes: </strong> There&#8217;s a <a href="http://derekslager.com/blog/posts/2007/10/bcrypt-dotnet-strong-password-hashing-for-dotnet-and-mono.ashx">BCrypt</a> open source option available.</p>
</li>
<li>
<p>
      <strong>Rails: <a href="http://github.com/technoweenie/restful-authentication">restful-authentication</a></strong><br />
      <strong>Encryption Scheme: </strong> SHA1<br />
      <strong>Notes: </strong> This was the defacto standard for a long time in the Rails world as far as authentication goes. Changing the encryption scheme in an application would be a <em>relatively</em> painless process.
    </p>
</li>
<li>
<p>
      <strong>Rails: <a href="http://github.com/binarylogic/authlogic">Authlogic</a></strong><br />
      <strong>Encryption Scheme: </strong> bcrypt, aes256, md5, sha1, sha256, sha512<br />
      <strong>Notes: </strong> This is configurable to any of the listed options. Default is SHA512. The author doesn&#8217;t recommend using MD5 or SHA1 in the README but provides the options for migration and compaitiblity. How awesome is that?
    </p>
</li>
<li>
<p>
          <strong><a href="http://drupal.org/">Drupal</a></strong><br />
          <strong>Encryption Scheme: </strong> MD5 by default<br />
          <strong>Notes:</strong> Christefano points out in the comments that MD5 is used by default but PHPass and AES are available via third party modules.
       </p>
</li>
</ul>
<p>If you don&#8217;t see your favorite software here, either leave it in the comments or <a href="http://jasonseifer.com/contact">contact me</a> and I&#8217;ll add it to the list. These are in no particular order, so I&#8217;m not trying to favor anything in particular (though we all know I&#8217;m mostly a Ruby developer).</p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/oHhcIi4CGUI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2010/03/21/on-passwords/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/03/21/on-passwords</feedburner:origLink></item>
		<item>
		<title>Rails Reminder: DATE_FORMATS</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/UhVDJK20I30/rails-date-formats</link>
		<comments>http://jasonseifer.com/2010/03/10/rails-date-formats#comments</comments>
		<pubDate>Wed, 10 Mar 2010 14:49:39 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=340</guid>
		<description><![CDATA[A friend of mine recently asked me about adding time formats to Rails apps. It&#8217;s not completely intuitive on how to add new &#34;default&#34; symbols for date and time formats or to get a list of the built in ones. The API has the built-in lists of constants under DATE_FORMATS but it&#8217;s a bit difficult [...]]]></description>
			<content:encoded><![CDATA[<p>A friend of mine recently asked me about adding time formats to Rails apps.  It&#8217;s not completely intuitive on how to add new &quot;default&quot; symbols for date and time formats or to get a list of the built in ones.  The <a href="http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Time/Conversions.html">API</a> has the built-in lists of constants under DATE_FORMATS but it&#8217;s a bit difficult to read on that page. Here&#8217;s a link to the current stable version of the Rails time formats: <a href="http://github.com/rails/rails/blob/2-3-stable/activesupport/lib/active_support/core_ext/time/conversions.rb">rails/activesupport/lib/active_support/core_ext/time/conversions.rb</a>.  In order to add new ones you use the ruby <a href="http://cheat.errtheblog.com/s/strftime/">strftime</a> function. </p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#6666ff; font-weight:bold;">ActiveSupport::CoreExtensions</span>::<span style="color:#CC00FF; font-weight:bold;">Date</span>::<span style="color:#6666ff; font-weight:bold;">Conversions::DATE_FORMATS</span>.<span style="color:#9900CC;">merge</span>!<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span>
  <span style="color:#ff3333; font-weight:bold;">:quick</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;%m %d, %Y at %I:%M %p&quot;</span>,
  <span style="color:#ff3333; font-weight:bold;">:end_date</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;%B %d, %Y&quot;</span>
<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#6666ff; font-weight:bold;">ActiveSupport::CoreExtensions</span>::<span style="color:#CC00FF; font-weight:bold;">Time</span>::<span style="color:#6666ff; font-weight:bold;">Conversions::DATE_FORMATS</span>.<span style="color:#9900CC;">merge</span>!<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span>
  <span style="color:#ff3333; font-weight:bold;">:job_list</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;%B %d, %Y&quot;</span>
<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>This lets you do something like <code><%= model.created_at.to_s(:quick) %></code> in your code.</p>
<p>And here&#8217;s the <code>strftime</code> options from the cheat page as a refresher:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  <span style="color:#006600; font-weight:bold;">%</span>a <span style="color:#006600; font-weight:bold;">-</span> The abbreviated weekday name <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">``</span>Sun<span style="color:#996600;">''</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>A <span style="color:#006600; font-weight:bold;">-</span> The  full  weekday  name <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">``</span>Sunday<span style="color:#996600;">''</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>b <span style="color:#006600; font-weight:bold;">-</span> The abbreviated month name <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">``</span>Jan<span style="color:#996600;">''</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>B <span style="color:#006600; font-weight:bold;">-</span> The  full  month  name <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">``</span>January<span style="color:#996600;">''</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>c <span style="color:#006600; font-weight:bold;">-</span> The preferred local date <span style="color:#9966CC; font-weight:bold;">and</span> time representation
  <span style="color:#006600; font-weight:bold;">%</span>d <span style="color:#006600; font-weight:bold;">-</span> Day of the month <span style="color:#006600; font-weight:bold;">&#40;</span>01..<span style="color:#006666;">31</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>e <span style="color:#006600; font-weight:bold;">-</span> Day of the month without leading zeroes <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">1</span>..<span style="color:#006666;">31</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>H <span style="color:#006600; font-weight:bold;">-</span> Hour of the day, <span style="color:#006666;">24</span><span style="color:#006600; font-weight:bold;">-</span>hour clock <span style="color:#006600; font-weight:bold;">&#40;</span>00..<span style="color:#006666;">23</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>I <span style="color:#006600; font-weight:bold;">-</span> Hour of the day, <span style="color:#006666;">12</span><span style="color:#006600; font-weight:bold;">-</span>hour clock <span style="color:#006600; font-weight:bold;">&#40;</span>01..<span style="color:#006666;">12</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>j <span style="color:#006600; font-weight:bold;">-</span> Day of the year <span style="color:#006600; font-weight:bold;">&#40;</span>001..<span style="color:#006666;">366</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>k <span style="color:#006600; font-weight:bold;">-</span> Hour of the day, <span style="color:#006666;">24</span><span style="color:#006600; font-weight:bold;">-</span>hour clock w<span style="color:#006600; font-weight:bold;">/</span>o leading zeroes <span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#006666;">0</span>..<span style="color:#006666;">23</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>l <span style="color:#006600; font-weight:bold;">-</span> Hour of the day, <span style="color:#006666;">12</span><span style="color:#006600; font-weight:bold;">-</span>hour clock w<span style="color:#006600; font-weight:bold;">/</span>o leading zeroes <span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#006666;">1</span>..<span style="color:#006666;">12</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>m <span style="color:#006600; font-weight:bold;">-</span> Month of the year <span style="color:#006600; font-weight:bold;">&#40;</span>01..<span style="color:#006666;">12</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>M <span style="color:#006600; font-weight:bold;">-</span> Minute of the hour <span style="color:#006600; font-weight:bold;">&#40;</span>00..<span style="color:#006666;">59</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span><span style="color:#CC0066; font-weight:bold;">p</span> <span style="color:#006600; font-weight:bold;">-</span> Meridian indicator <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">``</span>AM<span style="color:#996600;">''</span>  <span style="color:#9966CC; font-weight:bold;">or</span>  <span style="color:#996600;">``</span>PM<span style="color:#996600;">''</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span><span style="color:#CC0066; font-weight:bold;">P</span> <span style="color:#006600; font-weight:bold;">-</span> Meridian indicator <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">``</span>am<span style="color:#996600;">''</span>  <span style="color:#9966CC; font-weight:bold;">or</span>  <span style="color:#996600;">``</span>pm<span style="color:#996600;">''</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>S <span style="color:#006600; font-weight:bold;">-</span> Second of the minute <span style="color:#006600; font-weight:bold;">&#40;</span>00..<span style="color:#006666;">60</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>U <span style="color:#006600; font-weight:bold;">-</span> Week  number  of the current year,
          starting with the first Sunday as the first
          day of the first week <span style="color:#006600; font-weight:bold;">&#40;</span>00..<span style="color:#006666;">53</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>W <span style="color:#006600; font-weight:bold;">-</span> Week  number  of the current year,
          starting with the first Monday as the first
          day of the first week <span style="color:#006600; font-weight:bold;">&#40;</span>00..<span style="color:#006666;">53</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>w <span style="color:#006600; font-weight:bold;">-</span> Day of the week <span style="color:#006600; font-weight:bold;">&#40;</span>Sunday is <span style="color:#006666;">0</span>, <span style="color:#006666;">0</span>..<span style="color:#006666;">6</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>x <span style="color:#006600; font-weight:bold;">-</span> Preferred representation <span style="color:#9966CC; font-weight:bold;">for</span> the date alone, no time
  <span style="color:#006600; font-weight:bold;">%</span>X <span style="color:#006600; font-weight:bold;">-</span> Preferred representation <span style="color:#9966CC; font-weight:bold;">for</span> the time alone, no date
  <span style="color:#006600; font-weight:bold;">%</span>y <span style="color:#006600; font-weight:bold;">-</span> Year without a century <span style="color:#006600; font-weight:bold;">&#40;</span>00..<span style="color:#006666;">99</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%</span>Y <span style="color:#006600; font-weight:bold;">-</span> Year with century
  <span style="color:#006600; font-weight:bold;">%</span>Z <span style="color:#006600; font-weight:bold;">-</span> <span style="color:#CC00FF; font-weight:bold;">Time</span> zone name
  <span style="color:#006600; font-weight:bold;">%</span>z <span style="color:#006600; font-weight:bold;">-</span> <span style="color:#CC00FF; font-weight:bold;">Time</span> zone expressed as a UTC offset <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">``</span><span style="color:#006600; font-weight:bold;">-</span>04:00<span style="color:#996600;">''</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">%%</span> <span style="color:#006600; font-weight:bold;">-</span> Literal <span style="color:#996600;">``</span><span style="color:#006600; font-weight:bold;">%</span><span style="color:#996600;">''</span> character
&nbsp;
   t = <span style="color:#CC00FF; font-weight:bold;">Time</span>.<span style="color:#9900CC;">now</span>
   t.<span style="color:#9900CC;">strftime</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Printed on %m/%d/%Y&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>   <span style="color:#008000; font-style:italic;">#=&gt; &quot;Printed on 04/09/2003&quot;</span>
   t.<span style="color:#9900CC;">strftime</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;at %I:%M%p&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>            <span style="color:#008000; font-style:italic;">#=&gt; &quot;at 08:56AM&quot;</span>
   t.<span style="color:#9900CC;">strftime</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;%e %B, %Y&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>	       <span style="color:#008000; font-style:italic;">#=&gt; &quot;9 April, 2003&quot;</span>
   t.<span style="color:#9900CC;">strftime</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;%Y-%m-%dT%H:%M:%S&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>     <span style="color:#008000; font-style:italic;">#=&gt; &quot;2003-04-09T08:56:07&quot; (EN 28601)</span></pre></div></div>

<p>The preferred method for doing this is to add these in an initializer in your app. Something along the lines of <code>config/initializers/my_time_formats.rb</code>.</p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/UhVDJK20I30" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2010/03/10/rails-date-formats/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/03/10/rails-date-formats</feedburner:origLink></item>
		<item>
		<title>Stand Up While You Read This!</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/wJ6AZ_wmIdk/stand-up-while-you-read-this</link>
		<comments>http://jasonseifer.com/2010/02/25/stand-up-while-you-read-this#comments</comments>
		<pubDate>Thu, 25 Feb 2010 17:15:36 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Health]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=337</guid>
		<description><![CDATA[The New York Times has an article up on standing while you work. People who sit all day without moving around much are at higher risk for medical problems typically associated with obesity. This includes doctors who even do the same job but just walk more during the day: Just to underscore the point that [...]]]></description>
			<content:encoded><![CDATA[<p>The New York Times has an article up on standing while you work. People who sit all day without moving around much are at higher risk for medical problems typically associated with obesity.  This includes doctors who even do the same job but just walk more during the day:</p>
<blockquote>
<p>Just to underscore the point that you do have a choice: a study of junior doctors doing the same job, the same week, on identical wards found that some individuals walked four times farther than others at work each day. (No one in the study was overweight; but the “long-distance” doctors were thinner than the “short-distance” doctors.)</p>
<p>So part of the problem with sitting a lot is that you don’t use as much energy as those who spend more time on their feet. This makes it easier to gain weight, and makes you more prone to the health problems that fatness often brings.</p>
</blockquote>
<p>Obviously it&#8217;s not the best idea to take medical advice from an opinion writer but I can personally attest to the benefits of sitting on an exercise ball throughout the day for work. In addition to building core muscles, for some reason it helps me focus more on coding.</p>
<p>Here are a couple of quick tips on choosing an exercise ball:</p>
<ul>
<li> If you plan on working out with one, get a high quality one so you don&#8217;t have to fear having it burst. <a href="http://www.duraball.com/">Duraball</a> and <a href="http://www.amazon.com/TOGU-ABS-Redo-Gymnastic-Ball/dp/B000OONQ4E">TOGU Powerball Premium</a> are high quality ones for that.  <a href="http://shop1.mailordercentral.com/thechekinstitute/prodinfo.asp?number=9101D">The Chek Institute</a> has a good DVD for a home workout as well.</li>
<li>If you plan on sitting on one while working, get one that&#8217;s the next size up from the recommended size for your height.</li>
</ul>
<p><a href="http://opinionator.blogs.nytimes.com/2010/02/23/stand-up-while-you-read-this/?em">Link</a></p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/wJ6AZ_wmIdk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2010/02/25/stand-up-while-you-read-this/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/02/25/stand-up-while-you-read-this</feedburner:origLink></item>
		<item>
		<title>Using Concentrate for the Pomodoro Technique on OS X</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/InFEAlUUkWQ/using-concentrate-for-pomodoro</link>
		<comments>http://jasonseifer.com/2010/02/08/using-concentrate-for-pomodoro#comments</comments>
		<pubDate>Mon, 08 Feb 2010 20:21:28 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[pomodoro]]></category>
		<category><![CDATA[technique]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=322</guid>
		<description><![CDATA[Concentrate is a Mac only app. It lets you do a number of things like block web sites, launch apps, play sounds, etc. Combinations of these things can be configured to go on for varying amounts of time. I use it for the Pomodoro Technique when programming. Corey Haines introduced me to Tomatoist when I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://getconcentrating.com/"><img src="http://jasonseifer.com/assets/2010/02/concentrate.png" alt="concentrate.png" border="0" width="325" height="158" class="alignright" /></a></p>
<p><a href="http://getconcentrating.com/">Concentrate</a> is a Mac only app. It lets you do a number of things like block web sites, launch apps, play sounds, etc. Combinations of these things can be configured to go on for varying amounts of time. I use it for the <a href="http://www.pomodorotechnique.com/">Pomodoro Technique</a> when programming. <a href="http://coreyhaines.com/">Corey Haines</a> introduced me to <a href="http://tomatoi.st">Tomatoist</a> when I paired with him during one of his journeyman tours. While that site is awesome, I prefer using the Mac app to force eliminate distractions.</p>
<h3>The Pomodoro Technique</h3>
<p>The root of the idea is that you program for 25 minutes straight and then break for 5 minutes. This seems like a pretty simple idea but when you&#8217;re working by yourself things can happen. For example, maybe you want to send a quick email to someone but want to refer to something in their Facebook account you can&#8217;t quite remember. So then you look it up. While looking it up you notice something else interesting by another one of your friends and the distractions start. By the end of the distractions you&#8217;ve ordered enough parts for a fully functional robot suit off eBay. If you only had 5 minutes to do this stuff, maybe that wouldn&#8217;t have happened.</p>
<h3>Setting Up Concentrate</h3>
<p><a href="http://jasonseifer.com/assets/2010/02/concentrate-newtask.png"><img  class="alignright" src="http://jasonseifer.com/assets/2010/02/concentrate-newtask-300x291.png" alt="Concentrate New Task" border="0" width="300" height="291" /></a></p>
<p>Concentrate is actually a very simple application to use. Click on the &#8220;New Activity Button&#8221; and set your options. I called mine &quot;Program Pomodoro.&quot; It&#8217;s set to block any site that could potentially distract me, Growl a message, and play a sound on completion. The typical Pomodoro technique lasts 25 minutes so drag the location slider over until you see 25 minutes. Boom, good to go. Now you can&#8217;t look at anyone&#8217;s Facebook account or respond to any threads on <a href="http://news.ycombinator.com">hacker news</a> for a good 25 minutes.  You&#8217;ll get to that during your break.
</p>
<p><a href="ttp://jasonseifer.com/assets/2010/02/concentrate-activities.png"><img class="alignright" src="http://jasonseifer.com/assets/2010/02/concentrate-activities-300x236.png" alt="Concentrate Activities" border="0" width="300" height="236" /></a></p>
<p>The next task you&#8217;ll want to set up is the break. This is the most rewarding task. I just have this one Growl a message (&quot;Get back to work!&quot;) and play a sound when it&#8217;s done. The duration slider should be set to 5 minutes.
</p>
<h3>Get To It!</h3>
<p>That&#8217;s about it. It&#8217;s simple software and well worth the $30 to eliminate distractions. I use it only for those two techniques listed above and have been very happy. Special thanks to <a href="http://coreyhaines.com">Corey Haines</a> for introducing me to the Pomodoro technique.</p>
<img src="http://feeds.feedburner.com/~r/jasonseifer/~4/InFEAlUUkWQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2010/02/08/using-concentrate-for-pomodoro/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/02/08/using-concentrate-for-pomodoro</feedburner:origLink></item>
	</channel>
</rss><!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->

