<?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>Wed, 10 Mar 2010 15:46:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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>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 [...]


No related posts.]]></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 style="color:#CC00FF; font-weight:bold;">Date</span>::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 style="color:#CC00FF; font-weight:bold;">Time</span>::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..31<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>1..31<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..23<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..12<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..366<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> 0..23<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> 1..12<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..12<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..59<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..60<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..53<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..53<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>, 0..6<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..99<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>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Rails+Reminder%3A+DATE_FORMATS+http://bit.ly/8X3Vrn" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2010/03/10/rails-date-formats&amp;title=Rails+Reminder%3A+DATE_FORMATS" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2010/03/10/rails-date-formats&amp;title=Rails+Reminder%3A+DATE_FORMATS" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2010/03/10/rails-date-formats&amp;title=Rails+Reminder%3A+DATE_FORMATS" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2010/03/10/rails-date-formats&amp;title=Rails+Reminder%3A+DATE_FORMATS" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2010/03/10/rails-date-formats&amp;t=Rails+Reminder%3A+DATE_FORMATS" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2010/03/10/rails-date-formats&amp;t=Rails+Reminder%3A+DATE_FORMATS" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2010/03/10/rails-date-formats&amp;title=Rails+Reminder%3A+DATE_FORMATS" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2010/03/10/rails-date-formats&amp;title=Rails+Reminder%3A+DATE_FORMATS" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</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>0</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 [...]


No related posts.]]></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 one 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>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Stand+Up+While+You+Read+This%21+http://bit.ly/asJFNb" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2010/02/25/stand-up-while-you-read-this&amp;title=Stand+Up+While+You+Read+This%21" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2010/02/25/stand-up-while-you-read-this&amp;title=Stand+Up+While+You+Read+This%21" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2010/02/25/stand-up-while-you-read-this&amp;title=Stand+Up+While+You+Read+This%21" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2010/02/25/stand-up-while-you-read-this&amp;title=Stand+Up+While+You+Read+This%21" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2010/02/25/stand-up-while-you-read-this&amp;t=Stand+Up+While+You+Read+This%21" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2010/02/25/stand-up-while-you-read-this&amp;t=Stand+Up+While+You+Read+This%21" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2010/02/25/stand-up-while-you-read-this&amp;title=Stand+Up+While+You+Read+This%21" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2010/02/25/stand-up-while-you-read-this&amp;title=Stand+Up+While+You+Read+This%21" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</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>0</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 [...]


No related posts.]]></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>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Using+Concentrate+for+the+Pomodoro+Technique+on+OS+X+http://bit.ly/cvI9b8" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2010/02/08/using-concentrate-for-pomodoro&amp;title=Using+Concentrate+for+the+Pomodoro+Technique+on+OS+X" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2010/02/08/using-concentrate-for-pomodoro&amp;title=Using+Concentrate+for+the+Pomodoro+Technique+on+OS+X" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2010/02/08/using-concentrate-for-pomodoro&amp;title=Using+Concentrate+for+the+Pomodoro+Technique+on+OS+X" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2010/02/08/using-concentrate-for-pomodoro&amp;title=Using+Concentrate+for+the+Pomodoro+Technique+on+OS+X" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2010/02/08/using-concentrate-for-pomodoro&amp;t=Using+Concentrate+for+the+Pomodoro+Technique+on+OS+X" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2010/02/08/using-concentrate-for-pomodoro&amp;t=Using+Concentrate+for+the+Pomodoro+Technique+on+OS+X" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2010/02/08/using-concentrate-for-pomodoro&amp;title=Using+Concentrate+for+the+Pomodoro+Technique+on+OS+X" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2010/02/08/using-concentrate-for-pomodoro&amp;title=Using+Concentrate+for+the+Pomodoro+Technique+on+OS+X" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</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>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/02/08/using-concentrate-for-pomodoro</feedburner:origLink></item>
		<item>
		<title>8 Chrome Extensions For Web Developers (Mac too!)</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/_R5k2E_Hqo4/8-chrome-extensions-for-web-developers</link>
		<comments>http://jasonseifer.com/2010/02/01/8-chrome-extensions-for-web-developers#comments</comments>
		<pubDate>Mon, 01 Feb 2010 16:12:18 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[chrome]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=267</guid>
		<description><![CDATA[I&#8217;ve been using Google Chrome as my default browser ever since 1Password came out with an extension for Chrome. The state of web browsing on the Mac still, unfortunately, leaves something to be desired. However, after using this full time for a little while I can say that I&#8217;m really liking it. As a web [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using Google Chrome as my default browser ever since <a href="http://agilewebsolutions.com/products/1Password">1Password</a> came out with an extension for Chrome. The state of web browsing on the Mac still, unfortunately, leaves something to be desired. However, after using this full time for a little while I can say that I&#8217;m really liking it. As a web developer I have a need for good developer tools in a browser. For that, Firefox and Firebug will always be king of the hill. Daily browsing and light development in  Chrome has been suiting my needs just fine.</p>
<p>The ability to have extensions is what really makes Chrome shine. It&#8217;s fast and nimble in OS X and I was able to recreate nearly everything I did in Firefox via extensions. The down side is that extensions don&#8217;t work on the latest stable build of Chrome. To use extensions you&#8217;ll need to get a beta or dev channel. In order to do that you can go  <a href="http://dev.chromium.org/getting-involved/dev-channel">here</a>.</p>
<p><a href="https://chrome.google.com/extensions/detail/hmdcmlfkchdmnmnmheododdhjedfccka"><img class="alignright"  src="http://jasonseifer.com/assets/2010/02/87D5D600-79D9-412D-9E6F-021CBA958E54-300x268.jpg" alt="Eye Dropper" border="0" align="right" style="clear:right" /></a><strong><a href="https://chrome.google.com/extensions/detail/hmdcmlfkchdmnmnmheododdhjedfccka">Eye Dropper</a></strong><br />
The Eye Dropper lets you click your mouse on an element to get the color of it in HSB, RGB, or Hex. This differs slightly from the Firefox extension in that there is a pop-up involved and you have to do one more click to get the dorrect color.</p>
<p><strong><a href="https://chrome.google.com/extensions/detail/bnbbfjbeaefgipfjpdabmpadaacmafkj">Firebug Lite</a></strong> <br />
Firebug Lite is a not-as-fully-featured version of the very popular firebug extension. It&#8217;s fine for doing basic inspection of elements, though, and the built in console takes care of script running needs for basic experimentation.</p>
<p><strong><a href="https://chrome.google.com/extensions/detail/cdngiadmnkhgemkimkhiilgffbjijcie">FlashBlock</a></strong><br />
While Flash may be fine on PCs it makes the fan on my laptop spin like crazy. This is the equivalent of the FireFox extension and lets you whitelist sites as well. Browsing the web without flash is really a much more pleasant experience the majority of the time and the Flash files are only a click away if you want to load them.</p>
<p><strong><a href="https://chrome.google.com/extensions/detail/aonjhmdcgbgikgjapjckfkefpphjpgma"><img class="alignright"  src="http://jasonseifer.com/assets/2010/02/measureit.jpg" alt="measureit.jpg" border="0" width="303" height="70" align="right" /></a><a href="https://chrome.google.com/extensions/detail/aonjhmdcgbgikgjapjckfkefpphjpgma">MeasureIt!</a></strong><br />
MeasureIt! is a port of the same FireFox extension. It gives you a ruler that lets you draw a box around a portion of a page to get its width and height in pixels. It comes in pretty handy.</p>
<p><a href="https://chrome.google.com/extensions/detail/bcennaiejdjpomgmmohhpgnjlmpcjmbg"><img class="alignright"  src="http://jasonseifer.com/assets/2010/02/Google-Chrome-300x65.jpg" alt="Google Chrome.jpg" border="0" width="300" height="65" align="right" /></a><strong><a href="https://chrome.google.com/extensions/detail/bcennaiejdjpomgmmohhpgnjlmpcjmbg">Sexy Undo Close Tab</a></strong><br />
This extension lets you re-open recently closed tabs. There&#8217;s another version called &#8220;Undo Closed Tab&#8221; but this one is obviously the sexier of the two which is why I use it. I mean, given the choice between sexy and non-sexy I think it&#8217;s a no-brainer.</p>
<p><img class="alignright"  src="http://jasonseifer.com/assets/2010/02/tabmenu.jpg" alt="tabmenu.jpg" border="0" width="292" height="141" align="right" /><br />
<strong><a href="https://chrome.google.com/extensions/detail/galfofdpepkcahkfobimileafiobdplb">Tab Menu</a></strong> <br />
Tab Menu is a simple extension that gives you a drop down list of all currently open tabs. This is useful if you have a lot of tabs open and can&#8217;t see the titles. On one hand I wonder why this wasn&#8217;t included in the browser by default in some form. On the other hand I can completely understand their desire to not clutter the browser and I don&#8217;t imagine that the vast majority of people have that many tabs open.</p>
<p><a href="https://chrome.google.com/extensions/detail/nlbjncdgjeocebhnmkbbbdekmmmcbfjd"><img class="alignright"  src="http://jasonseifer.com/assets/2010/02/googlerss-300x272.jpg" alt="RSS Subscription Extension" border="0" width="300" height="272" align="right" /></a><br />
<strong><a href="https://chrome.google.com/extensions/detail/nlbjncdgjeocebhnmkbbbdekmmmcbfjd">RSS Subscription Extension</a></strong><br />
The RSS Subscription Extension automagically recognizes the RSS auto discovery links and pops open a new tab to subscribe. I included this for developers because you&#8217;ll want to make sure those RSS auto discovery tags are working. You could also make sure that it correctly subscribe in Google Reader and maybe take a few minutes off while you&#8217;re at it to read some feeds. Just saying.
</p>
<p><a href="https://chrome.google.com/extensions/detail/akdgnmcogleenhbclghghlkkdndkjdjc"><img src="http://jasonseifer.com/assets/2010/02/sequake-300x150.jpg" alt="SeoQuake" border="0" width="300" height="150" align="right" class="alignright" /></a><strong><a href="https://chrome.google.com/extensions/detail/akdgnmcogleenhbclghghlkkdndkjdjc">SeoQuake</a></strong><br />
SeoQuake is also a port of the Firefox extension. It allows you to see a ton of info about a site including Google PageRank, Index, Delicious index, and more. I keep this disabled most of the time unless I really need it or want to see some information about a site.</p>
<p><br class="clear" /></p>
<h3>Bonus Extensions</h3>
<p><a href="https://chrome.google.com/extensions/detail/jhjeaonknehkebginocakiakmiogeblg"><img class="alignright"  src="http://jasonseifer.com/assets/2010/02/chromelicious.jpg" alt="chromelicious.jpg" border="0" style="clear:right" align="right" /></a><strong><a href="https://chrome.google.com/extensions/detail/jhjeaonknehkebginocakiakmiogeblg">Chromelicious</a></strong><br />
Chromelicious is the best Chrome extension I&#8217;ve found for Delicioius integration. The reason is that view your bookmarks in an unobtrusive way from a dropdown menu and actually search your bookmarks and filter down via tabs. It&#8217;s prety handy..</p>
<p>
<strong><a href="https://chrome.google.com/extensions/detail/hcjdanpjacpeeppdjkppebobilhaglfo?hl=en-US">GooglePreview</a></strong><br />
The Google Preview extension inserts thumbnail images of Google searches in your search results. This is totally gratuitous for any real work but it makes search results look cleaner.</p>
<p>
<a href="https://chrome.google.com/extensions/detail/gighmmpiobklfepjocnamgkkbiglidom"><img class="alignright"  src="http://jasonseifer.com/assets/2010/02/AdBlock-300x105.jpg" alt="AdBlock for Chrome" border="0" width="300" height="105" align="right" /></a><br />
<strong><a href="https://chrome.google.com/extensions/detail/gighmmpiobklfepjocnamgkkbiglidom">AdBlock</a></strong><br />
This is the equivalent of AdBlock Plus for FireFox. It&#8217;s not necessarily for development but it is much more pleasant to browse the web with.</p>
<p>
<a href="https://chrome.google.com/extensions/detail/pfminakhmgplohaiaclohnofbanpdgam"><img src="http://jasonseifer.com/assets/2010/02/FacebookFixer.jpg" alt="Better FacebookFixer" border="0" width="206" height="146" align="right" /></a><br />
<strong><a href="https://chrome.google.com/extensions/detail/pfminakhmgplohaiaclohnofbanpdgam">Better Facebook Fixer</a></strong><br />
Facebook Fixer is actually a user script packaged up as an extension. You can do this at the <a href="http://script2chrome.net/">Script2Chrome</a> web site if you have any you want to convert. This extension makes the Facebook experience a bit more pleasant with options like hiding information from the right column, hiding 3rd party apps, and much more. This is a version of the Facebook Fixer extension with the javascript loaded locally instead of another server.</p>
<p></p>
<h3>Mouse Gestures</h3>
<p>Something I didn&#8217;t really touch on was mouse gestures. I use them heavily. For that I use a program called <a href="http://alum.hampshire.edu/~bjk02/xGestures/">xGestures</a> which will work in any application on OS X. I find that to also be an indespensable tool. As a bonus it supports rocker gestures. I use that to go to next and previous tabs in all applications. A rocker gesture means you hold down the right mouse button and click the left. If you bind this to the keystroke <strong>command + {</strong> as a global gesture it works in almost every app in Leopard. The other bracket <strong>(command + })</strong> works as well.  This is not a free program but it is well worth the price of admission!</p>
<p>Wrapping up, Chrome has come a long way, especially on the Mac. The developer version, for me at least, has been extremely stable and works well enough to be my daily browser. Check it out if you haven&#8217;t yet.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=8+Chrome+Extensions+For+Web+Developers+%28Mac+too%21%29+http://bit.ly/aqdqTr" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2010/02/01/8-chrome-extensions-for-web-developers&amp;title=8+Chrome+Extensions+For+Web+Developers+%28Mac+too%21%29" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2010/02/01/8-chrome-extensions-for-web-developers&amp;title=8+Chrome+Extensions+For+Web+Developers+%28Mac+too%21%29" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2010/02/01/8-chrome-extensions-for-web-developers&amp;title=8+Chrome+Extensions+For+Web+Developers+%28Mac+too%21%29" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2010/02/01/8-chrome-extensions-for-web-developers&amp;title=8+Chrome+Extensions+For+Web+Developers+%28Mac+too%21%29" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2010/02/01/8-chrome-extensions-for-web-developers&amp;t=8+Chrome+Extensions+For+Web+Developers+%28Mac+too%21%29" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2010/02/01/8-chrome-extensions-for-web-developers&amp;t=8+Chrome+Extensions+For+Web+Developers+%28Mac+too%21%29" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2010/02/01/8-chrome-extensions-for-web-developers&amp;title=8+Chrome+Extensions+For+Web+Developers+%28Mac+too%21%29" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2010/02/01/8-chrome-extensions-for-web-developers&amp;title=8+Chrome+Extensions+For+Web+Developers+%28Mac+too%21%29" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/_R5k2E_Hqo4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2010/02/01/8-chrome-extensions-for-web-developers/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/02/01/8-chrome-extensions-for-web-developers</feedburner:origLink></item>
		<item>
		<title>The Dev Show Episode 1</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/BK6lTp_OSDI/the-dev-show-episode-1</link>
		<comments>http://jasonseifer.com/2010/01/26/the-dev-show-episode-1#comments</comments>
		<pubDate>Tue, 26 Jan 2010 19:07:23 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=257</guid>
		<description><![CDATA[Dan Benjamin and I have launched a new podcast called The Dev Show. We aim to talk about new things in the programming community and point out things that may be of interest to developers. The first episode focuses on domain names, mongo db, javascript and a couple of other topics. Check it out!
  [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p><a href="http://hivelogic.com">Dan Benjamin</a> and I have launched a new podcast called <a href="http://5by5.tv/devshow">The Dev Show</a>. We aim to talk about new things in the programming community and point out things that may be of interest to developers. The first episode focuses on domain names, mongo db, javascript and a couple of other topics. <a href="http://5by5.tv/devshow">Check it out!</a></p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=The+Dev+Show+Episode+1+http://bit.ly/992smf" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2010/01/26/the-dev-show-episode-1&amp;title=The+Dev+Show+Episode+1" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2010/01/26/the-dev-show-episode-1&amp;title=The+Dev+Show+Episode+1" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2010/01/26/the-dev-show-episode-1&amp;title=The+Dev+Show+Episode+1" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2010/01/26/the-dev-show-episode-1&amp;title=The+Dev+Show+Episode+1" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2010/01/26/the-dev-show-episode-1&amp;t=The+Dev+Show+Episode+1" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2010/01/26/the-dev-show-episode-1&amp;t=The+Dev+Show+Episode+1" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2010/01/26/the-dev-show-episode-1&amp;title=The+Dev+Show+Episode+1" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2010/01/26/the-dev-show-episode-1&amp;title=The+Dev+Show+Episode+1" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/BK6lTp_OSDI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2010/01/26/the-dev-show-episode-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2010/01/26/the-dev-show-episode-1</feedburner:origLink></item>
		<item>
		<title>Live blogging BizConf Day 2</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/CRqub3DGnTo/live-blogging-bizconf-day-2</link>
		<comments>http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2#comments</comments>
		<pubDate>Fri, 21 Aug 2009 16:40:54 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[conference]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=239</guid>
		<description><![CDATA[



Day 1 of BizConf was phenomenal and I&#8217;m going to try and keep up the live blogging for day 2.  I missed the lightning talks last night but heard great things from everyone who went.  I&#8217;ve got my camera charged up today so I&#8217;ll try and get some pictures of the presenters as [...]


Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/20/liveblogging-bizconf' rel='bookmark' title='Permanent Link: Liveblogging Bizconf'>Liveblogging Bizconf</a> <small> I'm lucky to attend BizConf so I thought I'd...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<div class="img_right">
<a href="http://www.flickr.com/photos/jseifer/3842436229/" title="Obie Fernandez and Roy Singham by jseifer, on Flickr"><img src="http://farm4.static.flickr.com/3506/3842436229_002e50b6ec_m.jpg" width="240" height="160" alt="Obie Fernandez and Roy Singham" /></a>
</div>
<p>
Day 1 of BizConf was phenomenal and I&#8217;m going to try and keep up the live blogging for day 2.  I missed the lightning talks last night but heard great things from everyone who went.  I&#8217;ve got my camera charged up today so I&#8217;ll try and get some pictures of the presenters as well.  Fair warning: I&#8217;m really not that great of a photographer.
</p>
<ul>
<li><a href="#keynote">Roy Singham&#8217;s keynote</a></li>
<li><a href="#agilefail">Corey Haines: How Agile Will Probably Fail You</a></li>
<li><a href="#manage_agile">Bruno Miranda: Successfully Managing Local and Remote Teams</a></li>
<li><a href="#thecloud">Agile, Rails, and the Cloud</a></li>
<li><a href="#legalities">Legalities</a></li>
</ul>
<p></p>
<hr />
</p>
<div id="keynote"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_173">Roy Singham</a></h3>
<h4>Keynote</h4>
<div class="img_right">
<a href="http://www.flickr.com/photos/jseifer/3842436379/" title="Roy Singham by jseifer, on Flickr"><img src="http://farm4.static.flickr.com/3514/3842436379_187af55221_m.jpg" width="233" height="240" alt="Roy Singham" /></a>
</div>
<p>Roy talks quick! I had some trouble keeping up with the wealth of information coming from this talk.</p>
<p>Randomness is a much greater predictor of success than skill.  <a href="http://en.wikipedia.org/wiki/Decoy_effect">Decoy pricing</a> is probably used a lot by consulting firms.  It&#8217;s easy to compare a distorted version of something to the non-distorted version than to something else.
</p>
<p>Think about your leadership.  Write down your top 10 mistakes. Put them in to categories. People mistakes and investing in the wrong person. How you handle yourself in a crisis. When confronted with a huge number of decisions, how do you handle it?  Are you confident?</p>
<p>A mistake is something you made in hindsight, not in foresight.  The sign of really great leaders is to protect people who have different skills.  You have to have people who offset  your own weaknesses.  Not trusting his gut about a certain person in his organization cost the company a lot of money.  Even though he had a gut feeling about this person he forged ahead.  Always trust your gut.</p>
<p>There&#8217;s no bonuses at Thoughtworks but leaders still focus on money.  Even though we would like to believe that sales are driven by supply and demand, we&#8217;re closer to ducks.  Take the iPhone as an example, and Starbucks coffee.  Starbucks is not worth $5/coffee but we&#8217;ve been convinced it is.  That&#8217;s how a lot of consulting companies charge exorbitant amounts.</p>
<ul>
<li>Are they good at their job?</li>
<li>Does their boss recognize it?</li>
<li>Do they have friends at work?</li>
</ul>
<p>The average 23 year old expects to have 12 jobs by the time they are 30.  That&#8217;s almost a job a year.</p>
<p>Roy&#8217;s ideas for surviving a recession:</p>
<ul>
<li>No matter how smart you think you are, you will still make mistakes.</li>
<li>Massively increase sales force.</li>
<li>Double intimacy with customers. Get closer to them.  Understand your customer&#8217;s customer. If you can understand that, you will create more value for customers.</li>
</ul>
<p>Take the biggest risk you can possibly think of to create new business strategies.  Learn quickly, make it something you can live with. Thoughtworks is engaging five simultaneous new offerings.</p>
<p>A huge limitation of why we fail at software consulting is that people in the software industry aren&#8217;t generally aware of how their clients are feeling emotionally.</p>
<p>Think about what you want to be known for when you get older. Make a difference you will be proud of.  Success should not be about how big your company is.  It should be about how you change peoples lives.</p>
<p></p>
<hr />
</p>
<div id="agilefail"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_182">Why Agile Will Probably Fail You</a></h3>
<h4>Corey Haines of coreyhaines.com</h4>
<div class="img_right">
<a href="http://www.flickr.com/photos/jseifer/3842437223/" title="Corey Haines by jseifer, on Flickr"><img src="http://farm3.static.flickr.com/2472/3842437223_5aa4469906_m.jpg" width="220" height="240" alt="Corey Haines" /></a>
</div>
<p>If you&#8217;re not familiar with <a href="http://coreyhaines.com">Corey Haines</a>, he&#8217;s a &quot;software journeyman.&quot; He travels around and pair programs with people all over the country.  I&#8217;ve had the opportunity to pair with him for a day and it was quite an experience.</p>
<p>Life rule #1: Any time you get to go to the scientist only section, you say yes.</p>
<p><strong>Why do we write bad code?</strong><br />
This is not the question. No one likes to write bad code. The question becomes the following:
</p>
<p><strong>When do we write bad code?</strong><br />
When we&#8217;re under pressure and have to get it done.  The deadline is coming and you&#8217;re only 80% done. There&#8217;s only so much time left so we start hacking away.  &quot;Get it done&quote; vs &quot;Do It Right&quot;.  There&#8217;s a perception that when you have to get it done the only way to do it is to hack away.
</p>
<p><strong>Constant Pressure</strong><br />
Here&#8217;s an idea: if we have developers feel like they&#8217;re under pressure at the end of the project, let&#8217;s change the deadlines to every month. It would be great if we could let everyone figure out their own process. When people think of agile this is what they think of. Yet the issue of &quot;Get It Done&quote; vs &quot;Do It Right&#038;quot is still an issue. Most young people, in terms of a development perspective, only think about today.  Scrum assumes that developers self oganize and are responsible.
</p>
<div class="img_right">
<a href="http://www.flickr.com/photos/jseifer/3842436737/" title="Corey Haines laptop by jseifer, on Flickr"><img src="http://farm3.static.flickr.com/2531/3842436737_17f95794b4_m.jpg" width="240" height="159" alt="Corey Haines laptop" /></a>
</div>
<p><strong>Features and Quality</strong><br />
Let&#8217;s talk about features.  Add a feature to your app.  Change a feature in your app.  Then time passes. As you work with crap code it takes more time to add features.  This brings us to a definition of software quality: having a nominal cost of adding new features. It doesn&#8217;t mean there will be no bugs.</p>
<p>Software can be similar to gardening.  Gardening isn&#8217;t about growing plants.  It&#8217;s about changing the environment to let it flourish.  Add a feature then clean it up. Change a feature then clean it up. Make sure your code base stays clean and boring to add new features.</p>
<p><strong>&quot;If I&#8217;m adding a new feature I don&#8217;t want excitement&quot;</strong></p>
<p><strong>Why doesn&#8217;t everyone do the XP techniques?</strong><br />
We don&#8217;t know how. They&#8217;re hard to learn.  While learning to do TDD a friend of Corey&#8217;s took a 70% hit in productivity.  So how do you learn to do XP?  Most small businesses can&#8217;t take that hit in productivity.  Work is not practice.
</p>
<div class="img_right">
<a href="http://www.flickr.com/photos/jseifer/3843226684/" title="Corey Haines laptop by jseifer, on Flickr"><img src="http://farm4.static.flickr.com/3509/3843226684_6607c72bca_m.jpg" width="240" height="159" alt="Corey Haines laptop" /></a>
</div>
<p>Becoming a better software developer is about practice.  How good would a band be if they only practiced while they were on stage?  What kind of quality would a play have if the actors were only given the script an hour before the show?  Enter the software craftsmanship manifesto.</p>
<p><strong>Practice Techniques</strong></p>
<ul>
<li>Code Kata</li>
<li>Coding Dojo</li>
<li>Code Retreat</li>
<li>Acceptance Test-based</li>
</ul>
<p>In the end I think it boils down to this: developing quality software is about taking pride in your work.  The software craftsmanship manifesto gives you guidelines.  The practices outlined above get you better at it.  Take pride in your work and write quality code.</p>
<p>During this talk Jerry got in to a bit of a debate with Corey on practices. While the debate was lively and interesting, this probably could have waited until his talk was over rather than taking time away from Corey&#8217;s talk. There was about 25 minutes worth of content Corey didn&#8217;t get to.  I&#8217;m going to be forced to find out about the rest of the content of this talk over scotch later.  The horror.  I&#8217;ll update this post later.</p>
<p></p>
<hr />
</p>
<div id="manage_agile"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_203">Successfully Managing Local and Remote Web 2.0 Teams</a></h3>
<h4>Bruno Miranda of Hoodiny Entertainment</h4>
<div class="img_right">
<a href="http://www.flickr.com/photos/jseifer/3843227152/" title="Bruno Miranda by jseifer, on Flickr"><img src="http://farm3.static.flickr.com/2669/3843227152_c953e6c39f_m.jpg" width="233" height="240" alt="Bruno Miranda" /></a>
</div>
<p>
Cyloop is a music site.  The first version of the site was in Java. It couldn&#8217;t scale.  The CEO of the company decided to switch to Rails and hired Hashrocket.  They did the 3-2-1 launch.  Hashrocket taught the developers, who were all Java, .Net, and PHP developers, about TDD and Rails.  Hashrocket&#8217;s time lasted about a month.  The app was re-launched in about 3 months total.
</p>
<p>
Having a local team is important. You have a lot of bandwidth to talk and communicate.  It can also be distracting. The team uses headphones a lot to reduce distractions.  It&#8217;s good to have the stakeholders in the same spot as developers. There&#8217;s five people in the Miami office, one in Orlando, and remote developers in Brazil.  The team tends to type rather than talk, even in person.  Typing tends to keep conversations more succinct.
</p>
<p>
Why go distributed? Bruno wrote a post on his blog about limiting yourself.  The Ruby community is small and there&#8217;s not a ton Ruby talent in Miami.  They would rather not limit themselves to just local talent, they want the best developers.  Do video chats to hire people over-seas.  Use other resources to find about people.  Look at their <a href="http://github.com">GitHub</a> accounts.  It&#8217;s all about finding the right people and staying transparent.
</p>
<p>
Working with local and remote teams is about transparency. If you don&#8217;t know what someone is doing then how do you know they&#8217;re doing anything at all?  If you don&#8217;t have a lot of throughput to talk to people face to face you wind up getting a lot of phone calls and meeting requests.  Skype and AIM are &#8220;silo&#8221; based and talking one on one is probably going to be beneficial so move it to <a href="http://campfirenow.com">Campfire</a>.  Mac folks, check out <a href="http://propaneapp.com">Propane</a> so you can get your name growled.
</p>
<p>
<strong>Communication</strong><br />
In another company, Bruno tried daily standups via phone and Skype but you always waste time getting the mic set up.  Daily standups are done in camp fire.  Standups are a one paragraph conversation with the rest of the screen.  There&#8217;s a script that calls for the daily stand-up every day in the Campfire room. Don&#8217;t let your standup become a book. <a href="http://newrelic.com">NewRelic</a> notifications and incidents get automatically posted in to the campfire team room as well.  There&#8217;s mainly one product with this company and you may want to move individual projects in to their own room.
</p>
<p>They don&#8217;t pair all the time. They pair over iChat and Skype. Skype has better sound so disable the mic in iChat.</p>
<p>Projects are managed in <a href="http://pivotaltracker.com">Pivotal Tracker</a> and meetings are done with the person who makes the decision. The whole local and remote teams are not included because there&#8217;s too many people. There&#8217;s a lot of streamlining of the communication process in this company. Your company has to be able to accept change to pull this sort of strategy off.</p>
<p>
<strong>Conclusions</strong><br />
There&#8217;s a strong misconception that you can&#8217;t manage a local and remote team.  It can be done and it can be done successfully, your organization just has to be willing to accept change.  It makes business and financial sense and as long as you get the right people you get quality code.  Bruno did a great job with this presentation and made some great points.
</p>
<p></p>
<hr />
</p>
<div id="thecloud"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_190">Agile, Rails, and the Cloud</a></h3>
<h4>Ian McFarland of Pivotal Labs</h4>
<div class="img_right">
  <a href="http://www.flickr.com/photos/jseifer/3843180313/" title="BizConf 2009 by jseifer, on Flickr"><img src="http://farm4.static.flickr.com/3458/3843180313_be68ddeee5_m.jpg" width="240" height="159" alt="BizConf 2009" /></a>
</div>
<p>As developers, we build software because it&#8217;s cool, fun, exciting, and we love the challenge.  Also it beats a lot of other jobs.  Companies build software for different reasons. They do it to save money, manage risk, and satisfy business and government requirements.  We&#8217;re in the middle of a revolution.  This revolution in software is about one thing: building better value for businesses for lest money.</p>
<p>Software is expensive.  The following are the most expensive with developing software: developers, defects, deployment, maintenance, and change.  In the current economy budgets are smaller, the stakes are higher, departments have to do more with less, and failure is more catastrophic.</p>
<p><strong>Agile</strong><br />
  Agile is business driven: requirements come from business stakeholders.  </p>
<p>  <strong>The customer:</strong></p>
<ul>
<li>The customer is empowered to make decisions and priorities are set by that customer.</li>
<li>The customer can change priorities on anything unstarted.</li>
<li>The customer accepts the work in fine-grained increments.</li>
<li>The customer is intimately aware of progress and projected feedback dates.</li>
<li>Closing the feedback loop is critical.</li>
</ul>
<p>TDD and BDD factors in to this. Good tests tell us when we&#8217;ve met the customer&#8217;s needs, what&#8217;s broken, and lets us refactor.  TDD helps keeps you focused: you&#8217;re not building features if you don&#8217;t need them.</p>
<p>A big part of agile is iterative development. These days, iterations are getting shorter.  Because the customer is seeing the work on a daily basis, the feedback cycle is short.  This keeps the cost of change low by preventing unnecessary work.</p>
<p>
  <strong>Continuous Integration and Continuous Releasability</strong><br />
  There is a bit of a misconception about continuous release.  Just because you <em>can</em> release continuously doesn&#8217;t mean you <em>have</em> to release continuously.
</p>
<p>
  <strong>Pair Programming</strong><br />
  You have to pair if you want to be as efficient as you possibly can.  As long as there&#8217;s more than one developer you&#8217;re already pairing.  Doing it all the time means you get better at it.  Pairing is effective because you stay focused.  Developers can get distracted.  It&#8217;s hard to stay focused all day.  At Pivotal developers are exhausted at the end of the day their first week on the job. This is because they&#8217;re really not used to coding non stop for 8 hours a day.
</p>
<div class="img_right">
  <a href="http://www.flickr.com/photos/jseifer/3843968458/" title="BizConf 2009 by jseifer, on Flickr"><img src="http://farm4.static.flickr.com/3438/3843968458_d10b2d1000_m.jpg" width="240" height="159" alt="BizConf 2009" /></a>
</div>
<p>
  Pairing helps because you don&#8217;t get stuck so you spend more time on the more interesting part of your code. Developers get more well-rounded as they pair. You learn from your pair &#8212; design and testing techniques, new development techniques, etc. As a business owner you&#8217;re investing a lot in your developers this way. If you&#8217;re not pairing you&#8217;re throwing that away.  New team members can be brought up to speed in an hour when pairing rather than taking a week to figure out their way around.  Another benefit to pairing is that you distribute knowledge more. Your bus factor (the number of people who need to get hit by a bus for the project to stop) goes up.
</p>
<p>
  You need to make a productive workspace in a pair environment.  Have consistent pairing stations.  Pivotal will have breakfast available before the morning stand-up.  The reason is that some developers wouldn&#8217;t eat breakfast before work and some would.  This would result in some developers wanting to stop earlier for lunch than others.
</p>
<p>
  Developer happiness is important to the business.  Having a happy developer is important because developer happiness is directly correlated to developer productivity.  Productive developers tend to be happier.  When you&#8217;re doing grunt work as a developer things don&#8217;t seem as bad.  Happy workers are more focused.
</p>
<p>
  <strong>Rails</strong><br />
  Rails is powerful. Rails goes very well with agile &#8212; it&#8217;s practically baked in to the culture.  Anecodtally, Pivotal has seen a lot of improvements in efficiency with Rails.
</p>
<p>
  <strong>The Cloud</strong><br />
  You don&#8217;t have to worry about buying hardware anymore.  You don&#8217;t have to be in the infrastructure business.  You can scale on demand if you architect for it.  You can stay focused on development.  This is a big change in the industry.
</p>
<p>
  The enterprise is not quite cloud ready yet.  Lots of CIOs really want everything running on ahrdware they already bought. There are sometimes legislative restrictions about having things in the cloud.  But it&#8217;s getting better. People run HR, CRM, and financials in the cloud now. The cloud is getting closer to being enterprise ready. There are market pressures being addressed every day by cloud offerings. These are all problems we&#8217;ve heard before.
</p>
<p>
  In the end, it&#8217;s not about the technology.  Businesses don&#8217;t care about technology. Technology is the means to an end. Think about the technology like a business.  Think about getting it done cheaply, quickly, and well.  This is why Rails, agile, and the cloud make business sense.
</p>
<p></p>
<hr />
</p>
<div id="legalities"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_196">Legalities</a></h3>
<h4>Jose Gonzalez of Hoodiny Entertainment</h4>
<div class="img_right">
  <a href="http://www.flickr.com/photos/jseifer/3843968302/" title="BizConf 2009 by jseifer, on Flickr"><img src="http://farm4.static.flickr.com/3528/3843968302_d2e440a8e9_m.jpg" width="240" height="159" alt="BizConf 2009" /></a>
</div>
<p>
  Other than what you&#8217;re going to provide, when you&#8217;re going to provide it, and how much it&#8217;s going to be fore, everything is going to be specific for your business.  Don&#8217;t accept sloppy code and don&#8217;t accept ambiguity in the business.  If you and your client don&#8217;t understand what it means then a judge won&#8217;t understand what it means.
</p>
<p>
  <strong>Trade Secrets</strong><br />
  Under the law trade secrets are protected as long as they are secret.  If you come up with something that is a trade secret the very nature of its protection is associated with its confidentiality.  On the other end of this is patents which require you say as much as possible in order to obtain protection.  To mark it as a trade secret it must be marked confidential. Do not let anyone see it who doesn&#8217;t need to see it. If a client has given you something that is a trade secret <em>it should be market as confidential</em>.</p>
<p>
  Some companies will put <em>everything</em> as confidential. Some judges will toss that out as a matter of course.  As a consultant, everything you learn while in the client&#8217;s office should be treated as confidential.  That&#8217;s just good practice.
</p>
<p>
  <strong>Copyright</strong><br />
  If you write the same ten word essay as someone else, both people retain the same copyright. Copyright is the right to stop somebody of copying your work. If you have created something independently from another person then you are not copying.
</p>
<p><strong>Trademark isn&#8217;t there for you. You need to fight to keep it.</strong></p>
<p><strong>If you&#8217;re going to do business, do safe business.  Get business insurance.</strong>  </p>
<p>
  <strong>Merger Clause</strong><br />
  It&#8217;s a little thing at the bottom of the clause. Anything that anybody said prior to executing this contract in oral communications, written, etc, is gone.  If it&#8217;s not in the contract it doesn&#8217;t exist. Basically, if you want something.  Particularly for consultants if there were conversations you had with clients prior to the deal, <em>put them in the contract</em> or they don&#8217;t apply.
</p>
<p>
  <strong>Understand the Client&#8217;s Organization</strong><br />
  If someone is the CIO and they hire you, you generally don&#8217;t have to worry about hiring issues with them.  A CIO would have &quot;apparent authority.&quot; You need to make sure that the person who is signing the contract with you is authorized to sign the contract.  He jokes that in a bank everybody is the vice president.  Don&#8217;t negotiate with someone who is seven levels down in a company.  You may have already given someone your best deal who has no power to execute on it. Understand the layout of the company before you make a decision otherwise you will be spending a lot of time and energy that might not even apply.
</p>
<ul>
<li>
  If you&#8217;re going to make a statement of work they should only have statements specific to the business and scope of the work.  There may be times when you come up with a situation where you have an agreement where you have to change something with a specific deliverable.
</li>
<li>
  SLAs are nothing more than a way of limiting liability in a specific circumstance. Be careful with them. If the SLA doesn&#8217;t meet what you&#8217;re looking for it overrides liability.  Make sure you understand SLAs.
</li>
<li>
  If you need something from the client in order to make something happen put it in the contract.  Outline the client&#8217;s responsibilities.
</li>
<li>It all comes down to this: protect yourself.  See a lawyer and get a contract made.</li>
</ul>
<p>Overall this was one of the most useful talks so far of BizConf.  Jose <em>thoroughly</em> knows his stuff.</p>
<style type="text/css">
.img_right { 
float:right;margin:3px;border: 1px solid #eee;
}
</style>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Live+blogging+BizConf+Day+2+http://bit.ly/L0Ydq" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2&amp;title=Live+blogging+BizConf+Day+2" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2&amp;title=Live+blogging+BizConf+Day+2" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2&amp;title=Live+blogging+BizConf+Day+2" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2&amp;title=Live+blogging+BizConf+Day+2" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2&amp;t=Live+blogging+BizConf+Day+2" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2&amp;t=Live+blogging+BizConf+Day+2" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2&amp;title=Live+blogging+BizConf+Day+2" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2&amp;title=Live+blogging+BizConf+Day+2" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/20/liveblogging-bizconf' rel='bookmark' title='Permanent Link: Liveblogging Bizconf'>Liveblogging Bizconf</a> <small> I'm lucky to attend BizConf so I thought I'd...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/CRqub3DGnTo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2</feedburner:origLink></item>
		<item>
		<title>Liveblogging Bizconf</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/hBqlOmykWyw/liveblogging-bizconf</link>
		<comments>http://jasonseifer.com/2009/08/20/liveblogging-bizconf#comments</comments>
		<pubDate>Thu, 20 Aug 2009 19:03:10 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[conference]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=218</guid>
		<description><![CDATA[<p>
<img src="http://jasonseifer.com/assets/2009/08/bizconf.jpg" alt="BizConf Logo" border="0" width="225" height="119" align="right" />
I'm lucky to attend <a href="http://bizconf.org">BizConf</a> so I thought I'd blog about my experience here.  I can't promise to get every presentation here but I'll try my best. This post will be updated as things happen.
</p>


Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2' rel='bookmark' title='Permanent Link: Live blogging BizConf Day 2'>Live blogging BizConf Day 2</a> <small> Day 1 of BizConf was phenomenal and I&#8217;m going...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://bizconf.org"><img src="http://jasonseifer.com/assets/2009/08/bizconf.jpg" alt="BizConf Logo" border="0" width="225" height="119" align="right" /></a></p>
<p>
I&#8217;m lucky to attend <a href="http://bizconf.org">BizConf</a> so I thought I&#8217;d blog about my experience here.  I can&#8217;t promise to get every presentation here but I&#8217;ll try my best. This post will be updated as things happen.
</p>
<p>Impressions so far: amazing conference.  I&#8217;ve never been to a conference where so many people are having difficulty choosing talks because they all look so interesting and useful.</p>
<ul>
<li><a href="#opening">Opening Keynote</a></li>
<li><a href="#sellvalue">Selling Value For Fun and Profit</a></li>
<li><a href="#no">Learning to say &quot;No&quot;.</a></li>
<li><a href="#bootstrap">Bootstrap Like a Missionary</a></li>
</ul>
<div id="opening"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_170">Welcome Address and Keynote</a></h3>
<h4>Obie Fernandez, Hashrocket</h4>
<p>Be controversial. But if you&#8217;re going to be controversial be prepared to take the abuse.  In that respect, be confident in yourself but not to the point that you seem desperate.  &#8220;He who cares the least wins.&#8221;  This can be a fine tuned art or skill that some have innately and some have to really work on.  Referrals are your lifeblood &#8212; try and get the most values out of referrals as possible.  Obie shows a video where a client talks about what they&#8217;re doing and .  As tech people we&#8217;re used to email and instant messages. But don&#8217;t do that.  If there&#8217;s a phone number in an email, call the person!  Keep a notebook to keeping notes and to-dos.</p>
<p>Lawyers cost a lot of money.  If you run in to a situation where things can be difficult then make sure to negotiate at a time that&#8217;s good for you, and not when you&#8217;re under pressure.  This goes back to not seeming desperate.  Don&#8217;t do fixed bid contracts.  Agile doesn&#8217;t work with fixed bid contracts.  Charge what you are worth.  Budget for both nonpaying clients and internal products.  Use pivotal tracker.</p>
<p>Regarding agile, do it by the book first and don&#8217;t defend it.  Be consistently excellent because perception is reality.  Make sure you make it easy to see.  If the client doesn&#8217;t recognize it then you&#8217;re not doing an excellent job.  This reminds me of a quote by Richard Bandler &#8211; &quot;The meaning of your communication is the response that you get.&quot;</p>
<p>He closes by saying don&#8217;t lose your sense of fun.  Great keynote.  I&#8217;m not sure Obie realized it but he demonstrated nearly everything he spoke on <em>during his actual talk</em>.  This was a very inspiring start to the conference.</p>
<p></p>
<div id="sellvalue"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_189">Selling Value For Fun and Profit</a></h3>
<h4>Randall Thomas, Engineyard</h4>
<p>
I came in a bit late on this.  Adding features to a product actually changes the product. Example: BMW i-drive.
</p>
<p><strong>Simplify the complicated</strong><br />
Simplification is really important and it adds value. 37Signals is a great example here.  Consumers actually face anxiety when they face choices no a product.  Amazon is an example of things that are easy, like Amazon prime.  Randall went from buying 3 or 4 things a year on Amazon to 3 or 4 a month</p>
<p><strong>Educate an audience</strong><br />
As geeks, we like to educate.  A good example of this is having APIs for your apps.  Writing an API educates your audience about your app.
</p>
<p><strong>Preserve existing value</strong><br />
Once you&#8217;ve invested in something you have to preserve the value of it.  He asks how many people have expensive electroincs.  Lots of hands go up.  How many have an alarm?  Not nearly as many hands go up.  Software is similar to this.
</p>
<p><strong>Selling Value</strong><br />
Value is the only thing that&#8217;s ever sold and bought.
</p>
<p><strong>Communicate Value</strong> <br />
If you solved an awesome problem, make sure your clients know about this.  If you solve a problem in 3 hours but don&#8217;t communicate how awesome that is compared to the guy who takes 300 and keeps in constant contact with the client, the client will see more value in the longer one.   We have lots of ways to do this: email, sms IM, skype, etc.  You&#8217;re not delivering value if your client doesn&#8217;t understand it.
</p>
<p><strong>Understanding Value</strong><br />
Your clients need to understand the value you provide.  If they don&#8217;t you&#8217;re not providing that value.
</p>
<p><strong>Getting Paid</strong><br />
Do what&#8217;s valuable for a client.  If you don&#8217;t understand what is valuable for a client you can&#8217;t charge correctly and get paid.  Some people are more interested in how nice you were at a party vs how great of a programmer you are.  This affects how you will get paid.
</p>
<p><strong>Open with Value</strong><br />
Before you start talking about how you are getting paid and what you&#8217;re getting paid, explain the value.  Money is easy to communicate but value is not.  Start with the value.  A great example is <a href="http://newrelic.com">NewRelic</a>.  Engine Yard lets people try it and they often upgrade.
</p>
<p><strong>Show Don&#8217;t Tell</strong><br />
Make value tangible. Agile plays in to this because of collaboration and communication.  Example: saying a bomb can level a city vs showing footage of Nagasaki. When you demonstrate value consistently you preserve your value and get more referrals.
</p>
<p><strong>Price at Value</strong><br />
Not at cost. The value of something is relative.  Focus and price at value. If you&#8217;ve done your homework, you know what the value is.  Make all efforts to preserve that value because if you don&#8217;t it starts a bad precedent.  &quot;Protect the integrity of your fee.&quot;
</p>
<p>Selling on value is based on trust and honesty.  If you can&#8217;t deliver on a promise or slip on a promise this needs to be communicated.  If not your value goes down. When you sell and get paid based on quality, you start focusing on craftsmanship, quality, and the art of it.</p>
<p>This was an great presentation and full of useful information that is applicable to almost everyone.</p>
<p></p>
<h3><a href="http://www.bizconf.org/schedule#talk_178">Fifty Simple Things that Can Improve Your Business</a></h3>
<h4>Jerry Weinberg of geraldmweinberg.com</h4>
<p>
<strong>Three things to look for when developing software:</strong></p>
<p><strong>Motivation</strong></p>
<p>You can teach all you want. If you see an organization with no enthusiasm for what they&#8217;re doing they probably don&#8217;t have enthusiasm for what you&#8217;re offering.</p>
<p><strong>Organization</strong></p>
<p>Learn whether or not people are organized. If an organization doesn&#8217;t care enough to organize, nothing is going to happen.</p>
<p><strong>Information</strong><br />
Information is not really enough.  Strive to find out what&#8217;s really going on and what the real problem is. Example: &quot;We have this software project that has been mishandled. It needs to be done in three weeks or the company goes under.&quot;  In this instance you&#8217;re a scapegoat not an architect.</p>
<p><strong>Figure out the real situation and act in accordance.</strong></p>
<p><strong>Jiggling</strong><br />
Like physical things, organizations can get stuck in a loop.  You give them a jiggle and it helps them get back on track.  At one campus a fire destroyed everything including data.  One year later they were more efficient.  A lot of times when you come in as a consultant you need to jiggle the company.  It may cost you your job but it will be worth it to the company.  If you do it nicely you may get repeat business.  Agile is the opposite of stuck.  A lot of problems aren&#8217;t the model but the organization being stuck in what they&#8217;re doing.</p>
<p><strong>Audience Question: </strong>How can you get stuck in an agile process?<br />
If you think you&#8217;re doing agile and not really, you can get stuck.  If you&#8217;ve spent time and budget not giving someone what they want you run in to problems.  If you have a client that doesn&#8217;t have an idea where they&#8217;re going to end up they may be surprised.  You can deliver a lot of product without delivering value.  You can be agile at the process level but not be agile at all.</p>
<p></p>
<div id="no"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_176"> Learning to Say &#8220;No&#8221;</a></h3>
<h4>Jerry Weinberg of geraldmweinberg.com </h4>
<p>Jerry opens this talk by asking if someone had something they should have said no to but didn&#8217;t. Then the whole audience goes through and analyzes the situation with Jerry as the leader.  He breaks down what was done well and what could have been done better.  By using an actual example and getting the audience involved, we all got value out of this.</p>
<p>Here&#8217;s some things I got out of this presentation:</p>
<ul>
<li>Your bottom line applies to everything.  If you wouldn&#8217;t build something for free it doesn&#8217;t matter what else is offered.</li>
<li>Make the NO clear.  There should be no ambiguities.</li>
<li>Do good business. If you can&#8217;t accommodate something, say no. It will be better than doing it poorly.</li>
<li>Word spreads around. As with the previous point, if you&#8217;re not doing good business people will know.</li>
</ul>
<p>I would have liked to have better notes for this one but it was more of a participatory thing.  Jerry did a thorough job getting his points across in this way.</p>
<p></p>
<div id="bootstrap"></div>
<h3><a href="http://www.bizconf.org/schedule#talk_201">Bootstrap Like a Missionary</a></h3>
<h4>Andrew Warner of Mixergy.com</h4>
<p>Find ways in the door when you&#8217;re not supposed to be in the door.  Find ways to get your message in the door. He gives an example of an ad company who he wanted to sell his ads.  He was too small a company for them but didn&#8217;t give up.  He called every day and they declined.  Every day.  Finally he drove down with a check for $2,000.  They took a chance on him.</p>
<p><strong>Start with garbage as your first product</strong><br />
Build your product in stages. He asked Christian Carter how he builds a product.  The answer was &quot;When I have an idea for a product, I buy an ad on Google and see the click rates.&quot;  We then get a ton of examples from Andrew and the audience and the moral is the same for all of them: I wish I would have launched earlier.  Your audience will shape your product more than you can imagine.  You will have a better product for it.
</p>
<p><strong>Build an audience for yourself.</strong><br />
Some people build their audience by a blog.  Some build their audience by message boards.  Some do it by meetings.  Do what works for you.  We get some more audience participation for this one. <a href="http://alexdc.org">Alex De Carvalho</a> gets up and tells us about Refresh Miami and how he built the community.  As in the case of Threadless, Magento, etc, you generally can&#8217;t buy the great press you get from involving the community and building your audience.
</p>
<p><strong>Get your members to recruit for you.</strong><br />
Viral marketing doesn&#8217;t work anymore.  Hotmail was the originator of this by adding on to everyone&#8217;s email message.  Viral marketing can it <em>or it can&#8217;t</em>.  Some youtube videos get millions of views.  For Andrew, this isn&#8217;t enough to build a business off of.  You don&#8217;t want to build your business on hoping people spread your word.
</p>
<p><strong>Must Marketing</strong><br />
Andrew&#8217;s dad got Skype installed.  His dad wanted a friend to use it so he installed it for his friend.  Some popular restaurants don&#8217;t have tables for one.  You have to get friends to go with you.
</p>
<blockquote>
<p><strong>Rules for Must Marketing</strong></p>
<p><strong>It doesn&#8217;t work alone</strong><br />
You can&#8217;t have must marketing if you can do something alone.  The big risk is that it could fail completely.  That&#8217;s why you put out garbage first and iterate.
</p>
<p><strong>There should be accountability</strong><br />
People should be able to see whether or not you did something.  An example is a Twitter post voting site.  People could see who tweeted to vote for things and who didn&#8217;t.  Then they would ask for people to vote.
</p>
<p><strong>The Recipient Needs To Be Able To Reciporicate</strong><br />
In the virtual gift example, a guy can send his girlfriend virtual flowers.  When she gets them she can send some back.  By converting the recipient in to the sender the loop continues.
</p>
</blockquote>
<p>Andrew has a ton of energy and really gets people involved in his presentation. It&#8217;s no wonder he&#8217;s a successful entrepreneur.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Liveblogging+Bizconf+http://bit.ly/m2rw" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/20/liveblogging-bizconf&amp;title=Liveblogging+Bizconf" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/20/liveblogging-bizconf&amp;title=Liveblogging+Bizconf" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/20/liveblogging-bizconf&amp;title=Liveblogging+Bizconf" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/20/liveblogging-bizconf&amp;title=Liveblogging+Bizconf" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/20/liveblogging-bizconf&amp;t=Liveblogging+Bizconf" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/20/liveblogging-bizconf&amp;t=Liveblogging+Bizconf" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/20/liveblogging-bizconf&amp;title=Liveblogging+Bizconf" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/20/liveblogging-bizconf&amp;title=Liveblogging+Bizconf" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/21/live-blogging-bizconf-day-2' rel='bookmark' title='Permanent Link: Live blogging BizConf Day 2'>Live blogging BizConf Day 2</a> <small> Day 1 of BizConf was phenomenal and I&#8217;m going...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/hBqlOmykWyw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/08/20/liveblogging-bizconf/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/08/20/liveblogging-bizconf</feedburner:origLink></item>
		<item>
		<title>Using the Rails logger outside of models and controllers</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/QyTe-YBAE24/using-the-rails-logger-outside-of-models-and-controllers</link>
		<comments>http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers#comments</comments>
		<pubDate>Mon, 10 Aug 2009 16:39:43 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=210</guid>
		<description><![CDATA[
  You can use the Rails logger outside of Rails models in at least version 2.3.X and up of Rails.  You might be used to doing the following in your models or controllers:


logger.info &#34;Some debugging info I want to see in my development log.&#34;

If you make a regular model that doesn&#8217;t inherit from [...]


Related posts:<ol><li><a href='http://jasonseifer.com/2009/04/24/receving-email-with-rails' rel='bookmark' title='Permanent Link: Receiving Email with Rails'>Receiving Email with Rails</a> <small>This article originally appeared in the first issue of Rails...</small></li><li><a href='http://jasonseifer.com/2009/04/08/rails-metal-call-order' rel='bookmark' title='Permanent Link: Rails metal call order'>Rails metal call order</a> <small>I was really mystified today trying to figure out how...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>
  You can use the Rails logger outside of Rails models in at least version 2.3.X and up of Rails.  You might be used to doing the following in your models or controllers:
</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">logger.<span style="color:#9900CC;">info</span> <span style="color:#996600;">&quot;Some debugging info I want to see in my development log.&quot;</span></pre></div></div>

<p>If you make a regular model that doesn&#8217;t inherit from ActiveRecord, though, you may see the following error:</p>
<pre>undefined local variable or method `logger' for #&lt;Class:0x42fd77c&gt;</pre>
</p>
<p>The solution is to call <strong>Rails</strong>.logger.info (or debug, or warn) as follows:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">Rails.<span style="color:#9900CC;">logger</span>.<span style="color:#9900CC;">info</span> <span style="color:#996600;">&quot;Some debugging info I want to see in my development log.&quot;</span></pre></div></div>

<p>I hope that helps someone.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Using+the+Rails+logger+outside+of+models+and+controllers+http://bit.ly/dNmok" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers&amp;title=Using+the+Rails+logger+outside+of+models+and+controllers" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers&amp;title=Using+the+Rails+logger+outside+of+models+and+controllers" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers&amp;title=Using+the+Rails+logger+outside+of+models+and+controllers" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers&amp;title=Using+the+Rails+logger+outside+of+models+and+controllers" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers&amp;t=Using+the+Rails+logger+outside+of+models+and+controllers" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers&amp;t=Using+the+Rails+logger+outside+of+models+and+controllers" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers&amp;title=Using+the+Rails+logger+outside+of+models+and+controllers" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers&amp;title=Using+the+Rails+logger+outside+of+models+and+controllers" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/04/24/receving-email-with-rails' rel='bookmark' title='Permanent Link: Receiving Email with Rails'>Receiving Email with Rails</a> <small>This article originally appeared in the first issue of Rails...</small></li><li><a href='http://jasonseifer.com/2009/04/08/rails-metal-call-order' rel='bookmark' title='Permanent Link: Rails metal call order'>Rails metal call order</a> <small>I was really mystified today trying to figure out how...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/QyTe-YBAE24" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers</feedburner:origLink></item>
		<item>
		<title>Getting RSpec and TextMate to play nice</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/5y1hgFCGrq8/getting-rspec-and-textmate-to-play-nice</link>
		<comments>http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice#comments</comments>
		<pubDate>Thu, 06 Aug 2009 04:17:08 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=206</guid>
		<description><![CDATA[

Elijah Miller has a great blog post on getting TextMate and RSpec to play nicely together.  This is pretty useful for just running specific spec files.  Also, did you know you can get TextMate to automatically recognize spec files by naming them with the .spec extension and RSpec will recognize it?

Link
  Delicious [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p><span class="outgoing_link_image" style="float:right"><a href="http://jqr.github.com/2009/02/06/textmate-rspec-and-dot-spec-party.html"><img src="http://jasonseifer.com/assets/2009/08/beer_labelsTextMate-Rspec-and-Dot-Spec-Party-__-Elijah-Miller-Build-20090805031252.jpg" alt="TextMate, Rspec and Dot Spec Party __ Elijah Miller - (Build 20090805031252).jpg" border="0" width="355" height="308" align="right" /><br />
</a></span></p>
<p>Elijah Miller has a great blog post on getting TextMate and RSpec to play nicely together.  This is pretty useful for just running specific spec files.  Also, did you know you can get TextMate to automatically recognize spec files by naming them with the .spec extension and RSpec will recognize it?<br />
<br />
<span class="outgoing_link"><a href="http://jqr.github.com/2009/02/06/textmate-rspec-and-dot-spec-party.html">Link</a></span></p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Getting+RSpec+and+TextMate+to+play+nice+http://bit.ly/30duUc" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice&amp;title=Getting+RSpec+and+TextMate+to+play+nice" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice&amp;title=Getting+RSpec+and+TextMate+to+play+nice" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice&amp;title=Getting+RSpec+and+TextMate+to+play+nice" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice&amp;title=Getting+RSpec+and+TextMate+to+play+nice" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice&amp;t=Getting+RSpec+and+TextMate+to+play+nice" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice&amp;t=Getting+RSpec+and+TextMate+to+play+nice" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice&amp;title=Getting+RSpec+and+TextMate+to+play+nice" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice&amp;title=Getting+RSpec+and+TextMate+to+play+nice" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/5y1hgFCGrq8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice</feedburner:origLink></item>
		<item>
		<title>Microsoft deems Ruby on Rails a competitor</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/y5tc128_21c/microsoft-deems-ruby-on-rails-a-competitor</link>
		<comments>http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor#comments</comments>
		<pubDate>Wed, 05 Aug 2009 21:47:17 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor</guid>
		<description><![CDATA[

Numerous commercial  software vendors offer competing software applications for connectivity (both Internet and intranet), security, hosting, and e-business servers. System Center competes with server management and server virtualization platform providers, such as BMC,  CA, Inc., Hewlett-Packard, IBM, and VMWare in the management of information technology infrastructures. Forefront security products compete with McAfee, Symantec, [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<div class="posterous_bookmarklet_entry">
<blockquote class="posterous_long_quote">
<p align="justify" style="margin-top: 0px; margin-bottom: 0px; text-indent: 2%;">Numerous commercial  software vendors offer competing software applications for connectivity (both Internet and intranet), security, hosting, and e-business servers. System Center competes with server management and server virtualization platform providers, such as BMC,  CA, Inc., Hewlett-Packard, IBM, and VMWare in the management of information technology infrastructures. Forefront security products compete with McAfee, Symantec, and Trend Micro in protecting both client and server applications. Our products for  software developers compete against offerings from Adobe, Borland, IBM, Oracle, Sun Microsystems, other companies, and open-source projects. Open source projects include Eclipse (sponsored by CA, IBM, Oracle, and SAP), PHP, and <strong>Ruby on Rails</strong>, among  others. We believe that our server products provide customers with advantages in innovation, performance, total costs of ownership, and productivity by delivering superior applications, development tools, and compatibility with a broad base of  hardware and software applications, security, and manageability. </p>
<p align="justify" style="margin-top: 12px; margin-bottom: 0px;">
</blockquote>
<div class="posterous_quote_citation">via <a href="http://www.sec.gov/Archives/edgar/data/789019/000119312509158735/d10k.htm">sec.gov</a></div>
<p>Emphasis mine.</p>
</div>
<p style="font-size: 10px;">  <a href="http://posterous.com">Posted via web</a>   from <a href="http://jasonseifer.posterous.com/microsoft-deems-ruby-on-rails-a-competitor">Jason&#8217;s posterous</a>  </p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Microsoft+deems+Ruby+on+Rails+a+competitor+http://bit.ly/PtRvj" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor&amp;title=Microsoft+deems+Ruby+on+Rails+a+competitor" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor&amp;title=Microsoft+deems+Ruby+on+Rails+a+competitor" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor&amp;title=Microsoft+deems+Ruby+on+Rails+a+competitor" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor&amp;title=Microsoft+deems+Ruby+on+Rails+a+competitor" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor&amp;t=Microsoft+deems+Ruby+on+Rails+a+competitor" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor&amp;t=Microsoft+deems+Ruby+on+Rails+a+competitor" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor&amp;title=Microsoft+deems+Ruby+on+Rails+a+competitor" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor&amp;title=Microsoft+deems+Ruby+on+Rails+a+competitor" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/y5tc128_21c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/08/05/microsoft-deems-ruby-on-rails-a-competitor</feedburner:origLink></item>
		<item>
		<title>Receiving Email with Rails</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/nzTeygGC9CM/receving-email-with-rails</link>
		<comments>http://jasonseifer.com/2009/04/24/receving-email-with-rails#comments</comments>
		<pubDate>Fri, 24 Apr 2009 04:58:28 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=186</guid>
		<description><![CDATA[This article originally appeared in the first issue of Rails Magazine.  It is reproduced here not quite verbatim with a couple of corrections and additions.

Photo from esparta on Flickr.

Introduction
Receiving email is a great way to add functionality to your application.  This is one area, though, that is not very well documented with Rails. [...]


Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers' rel='bookmark' title='Permanent Link: Using the Rails logger outside of models and controllers'>Using the Rails logger outside of models and controllers</a> <small> You can use the Rails logger outside of Rails...</small></li><li><a href='http://jasonseifer.com/2009/04/08/rails-metal-call-order' rel='bookmark' title='Permanent Link: Rails metal call order'>Rails metal call order</a> <small>I was really mystified today trying to figure out how...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><em>This article originally appeared in the first issue of <a href="http://railsmagazine.com">Rails Magazine</a>.  It is reproduced here not quite verbatim with a couple of corrections and additions.</em></p>
<div style="float:right; text-align:center; margin: 8px; padding: 3px; border: 1px solid #aaa"><img src="http://jasonseifer.com/assets/2009/04/423aefd3-8e36-43a1-b054-c16f860cf0fe.jpg" alt="423AEFD3-8E36-43A1-B054-C16F860CF0FE.jpg" border="0" width="240" height="160" align="right" /></p>
<p class="small">Photo from <a href="http://www.flickr.com/photos/esparta/1609874001/">esparta</a> on Flickr.</p>
</div>
<h2>Introduction</h2>
<p>Receiving email is a great way to add functionality to your application.  This is one area, though, that is not very well documented with Rails.  Sure, we have ActionMailer documentation, but how does something like this actually work in a production environment and what are the concerns?  I had to tackle this problem recently and no solution that was &#8220;in the wild&#8221; would work with the requirements I had for this application.  In this article, we will take a look at a couple of options and go in to detail with one method that has not recieved much coverage.</p>
<p>John Nunemaker, on the Rails Tips blog, posted a solution to this problem using GMail with IMAP to Receive Email in Rails<sup><a href="#railstips">(1)</a></sup>.  He uses a script to connect to an IMAP server every minute or so and polls for new e-mails.  The Rails environment is loaded and if there are new messages waiting, this is processed using an ActiveRecord model.  He uses the &#8216;Daemons&#8217; library to keep the script running and give it start/stop commands and keep a pidfile.</p>
<p>This is a perfectly valid and functional way to process e-mail.  The application I was working on, though, had to be able to handle and process e-mail in as little time as possible. People would likely be e-mailing things from their mobile phones and might want to check on them soon after an upload.  At that point, polling every X number of minutes wasn&#8217;t a viable solution, so I had to come up with something else.</p>
<p>It&#8217;s also worth noting that polling for email should take in to account your user base and size.  Let&#8217;s say that we have an app with 10,000 active users.  Let&#8217;s also say that during peak times, they <em>all</em> decide to email our application.  Finally, we&#8217;ll say that they are sending an average 5 emails apiece.  With these hypothetical numbers, this works out to about 833 emails per minute.  If your IMAP server is being polled every three minutes, that&#8217;s going to leave you about 3,332 e-mails to download and process each time.</p>
<h2>Configuring Your Email Server</h2>
<p>Email itself is a problem that has been largely solved.  There are a wealth of email servers available but  this article will take a look at Postfix.  Postfix is most easily installed using the package manager of your distribution and may already be installed if you have a VPS.  I prefer Ubuntu server side so this article will focus on that flavor. Just be aware that certain configuration file locations may vary depending on your distribution.  So let&#8217;s get started.</p>
<p>First we need to add or change some DNS records.  The instructions for how to do this will vary depending on how you have your DNS hosted. I personally use DNS Made Easy and recommend it to my clients as well, should they need DNS hosting. DNS Made Easy has very reasonable rates and quotas.  Regardless of your host you need to create the following records:</p>
<p><img src="http://jasonseifer.com/assets/2009/04/mxrecord.jpg" alt="mxrecord.t.jpg" border="0" width="636" height="332" align="right" /></p>
<ul>
<li>An &#8220;A&#8221; record that has your domain name only.</li>
<li>An &#8220;A&#8221; record that is just <code>"mail"</code>.</li>
<li>An &#8220;MX&#8221; record that is set to level 10 and points to &#8220;mail&#8221;</li>
<li>Optional: An SPF Record</li>
</ul>
<p>OK, I was lying.  The SPF record isn&#8217;t really optional. This is going to be a TXT Record and should read something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">	<span style="color: #007800;">v</span>=spf1 mx <span style="color: #660033;">-all</span></pre></div></div>

<p>There are several different variations you can use with SPF records but going through them would be beyond the scope of this article.  Do some research and pick the combination that&#8217;s right for your setup.</p>
<p>Now, the first thing that you&#8217;re going to need to do is figure out what address you want to receive mail as. This is going to be your catch-all address.  In this case we&#8217;re going to choose &quot;killerrobot&quot; because that just might keep spammers at bay<sup><a href="#spammers">(2)</a></sup>. I mean, who&#8217;s going to spam a killer robot? </p>
<p>Reading tutorials around the web or even looking in some books will tell you that you can tell postfix to forward mail simply by piping it in /etc/aliases.  You might be tempted to do something like pipe everything to a ruby script:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># /etc/aliases</span>
...
killerrobot: <span style="color: #ff0000;">&quot;|/usr/bin/ruby /var/www/apps/myapp/current/lib/mail_receiver.rb&quot;</span>
<span style="color: #000000; font-weight: bold;">*</span>: killerrobot</pre></div></div>

<p>This, unfortunately, won&#8217;t work.  If you do it this way, all of your scripts are going to run as root.  This is not what you want and can be a security concern.  The proper way to do this is with a postmap filter.  Open up /etc/postfix/master.cf.  The first line after all of the comments should look like this:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># /etc/postfix/master.cf</span>
smtp      inet  n       -       -       -       -       smtpd</pre></div></div>

<p>Add a line right below that to tell postfix that you&#8217;re using a filter:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># /etc/postfix/master.cf</span>
smtp      inet  n       -       -       -       -       smtpd
 <span style="color: #660033;">-o</span> <span style="color: #007800;">content_filter</span>=myapp_filter:</pre></div></div>

<p>Then go all the way down to the bottom of the file and add your filter:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># /etc/postfix/master.cf </span>
smtp      inet  n       -       -       -       -       smtpd
 <span style="color: #660033;">-o</span> <span style="color: #007800;">content_filter</span>=myapp_filter:
...
myapp_filter unix -     n       n       -       -       pipe
 <span style="color: #007800;">flags</span>=Xhq <span style="color: #007800;">user</span>=deploy <span style="color: #007800;">argv</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>ruby <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>apps<span style="color: #000000; font-weight: bold;">/</span>myapp<span style="color: #000000; font-weight: bold;">/</span>current<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>mail_receiver.rb</pre></div></div>

<p>The &#8220;X&#8221; parameter in &#8220;flags=Xhq&#8221; tells postfix that an external command performs final delivery.  This is going to change the message status from &#8220;relayed&#8221; to &#8220;delivered&#8221;.  The &#8220;h&#8221; flag sets the recipients and domains to lowercase, and the &#8220;q&#8221; flag quotes whitespace and other special characters.  Now, reload postfix by doing <code>sudo postfix reload</code>. At this point, you should have a very basic mail server configured to receive email and put it in to a <code>mail_receiver.rb</code> script.</p>
<h2>Handling The Email</h2>
<p>	We&#8217;re going to be putting all of our mail that comes in to a message queue and parsing it with the &#8216;mms2r&#8217; gem.  In this article I&#8217;m going to use beanstalkd<sup><a href="#beanstalkd">(3)</a></sup> but you could substitute your favorite message queue for this part of the architecture.  I&#8217;m going to assume that a message queue is already installed and running and that you have both the &#8216;tmail&#8217; and &#8216;mms2r&#8217; gems installed.</p>
<p>	We want our <code>mail_receiver</code> script to be super lean.  It&#8217;s only going to serve one function: put the incoming mail in to a queue.  We&#8217;ll process the queue later but for now we just want to get it in there and handle any attachments.  We want it to be super lean because if we&#8217;re receiving a lot of mail we don&#8217;t want this script to be memory intensive or take a long time to start up or run.  It will look something like this:
</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'tmail'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'mms2r'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'beanstalk-client'</span>
&nbsp;
message = <span style="color:#ff6633; font-weight:bold;">$stdin</span>.<span style="color:#9900CC;">read</span>
mail = <span style="color:#6666ff; font-weight:bold;">TMail::Mail</span>.<span style="color:#9900CC;">parse</span><span style="color:#006600; font-weight:bold;">&#40;</span>message<span style="color:#006600; font-weight:bold;">&#41;</span>
mms = <span style="color:#6666ff; font-weight:bold;">MMS2R::Media</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>mail<span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">if</span> !mail.<span style="color:#9900CC;">to</span>.<span style="color:#0000FF; font-weight:bold;">nil</span>?
  BEANSTALK = <span style="color:#6666ff; font-weight:bold;">Beanstalk::Pool</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'127.0.0.1:11300'</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  BEANSTALK.<span style="color:#9900CC;">yput</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span>:type <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'received_email'</span>, 
    <span style="color:#ff3333; font-weight:bold;">:to</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> mail.<span style="color:#9900CC;">to</span>.<span style="color:#9900CC;">flatten</span>.<span style="color:#9900CC;">first</span>.<span style="color:#CC0066; font-weight:bold;">gsub</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'@mydomain.com'</span>, <span style="color:#996600;">''</span><span style="color:#006600; font-weight:bold;">&#41;</span>, 
    <span style="color:#ff3333; font-weight:bold;">:tags</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> mail.<span style="color:#9900CC;">subject</span>, 
    <span style="color:#ff3333; font-weight:bold;">:attachment</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> mms.<span style="color:#9900CC;">default_media</span>.<span style="color:#9900CC;">path</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>What we&#8217;re doing here is taking the email message from standard input and parsing it by putting it in to a TMail object.  TMail is a great library that takes care of most of the formatting for us.  It lets us do things like refer to mail messages as objects and use <code>mail.to</code>, <code>mail.from</code>, etc.  If we have attachments, they&#8217;re going along as well.</p>
<p>MMS2R is an amazing piece of software.  It works for both emails and, as the name implies, MMS messages as well.  What makes it so amazing?  There are dozens of different formats that an attachment can come in from both email and MMS.  Different phone carriers each have their own way of doing MMS attachments, each of them slightly different.  MMS2R alleviates the problem of trying to parse all of these different formats and does it all for you.  In this way we can call <code>MMS2R::Media.new(mail)</code> and be done with it.</p>
<p>For the purposes of our example application, the user can tag the photos they upload by putting the different tags in the subject. We send that in as another option in the job hash for beanstalkd.  Each user is assigned a unique identifier in their account that lets them send email to the application, for example &#8220;aslkdf32@myapp.com&#8221;.  We grab the first recipient (mail.to) because that will come in as an array.  We take the domain out and send that in as the &#8220;to&#8221; field.  Finally, the temporary media location on disk that we parsed using MMS2R is thrown in to the queue as the :attachment option.  Our mail is in the queue.</p>
<h2>Processing the Queue</h2>
<p>Now that we have our email in the queue, we need to get it out. For this part, we&#8217;re actually going to load the Rails environment.  I have this in the <code>lib</code> directory.  The code would look something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#996600;">'..'</span>, <span style="color:#996600;">'config'</span>, <span style="color:#996600;">'environment'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'beanstalk-client'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'yaml'</span>
beanstalk_config = <span style="color:#CC00FF; font-weight:bold;">YAML</span>::<span style="color:#CC0066; font-weight:bold;">load</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;#{RAILS_ROOT}/config/beanstalk.yml&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#0066ff; font-weight:bold;">@logger</span> = <span style="color:#CC00FF; font-weight:bold;">Logger</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;#{RAILS_ROOT}/log/queue.#{Rails.env}.log&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#0066ff; font-weight:bold;">@logger</span>.<span style="color:#9900CC;">level</span> = <span style="color:#6666ff; font-weight:bold;">Logger::INFO</span>
&nbsp;
BEANSTALK = <span style="color:#6666ff; font-weight:bold;">Beanstalk::Pool</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>beanstalk_config<span style="color:#006600; font-weight:bold;">&#91;</span>Rails.<span style="color:#9900CC;">env</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">loop</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  job = BEANSTALK.<span style="color:#9900CC;">reserve</span>
  job_hash = job.<span style="color:#9900CC;">ybody</span>
  <span style="color:#9966CC; font-weight:bold;">case</span> job_hash<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:type</span><span style="color:#006600; font-weight:bold;">&#93;</span>
  <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#996600;">'received_email'</span>
    <span style="color:#0066ff; font-weight:bold;">@logger</span>.<span style="color:#9900CC;">info</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Got email: #{job_hash.inspect}&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">if</span> EmailProcessor.<span style="color:#9900CC;">process</span><span style="color:#006600; font-weight:bold;">&#40;</span>job_hash<span style="color:#006600; font-weight:bold;">&#41;</span>
      job.<span style="color:#9900CC;">delete</span>
    <span style="color:#9966CC; font-weight:bold;">else</span>
      <span style="color:#0066ff; font-weight:bold;">@logger</span>.<span style="color:#9900CC;">warn</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Did not process email: #{job_hash.inspect}&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      job.<span style="color:#9900CC;">bury</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">else</span>
    <span style="color:#0066ff; font-weight:bold;">@logger</span>.<span style="color:#9900CC;">warn</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Don't know how to process #{job_hash.inspect}&quot;</span><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>The first line loads the Rails environment so we have access to all of our ActiveRecord models.  We want to keep our code DRY and use only one method of processing an attachment, routing messages, or the like.  If we were using attachment_fu or paperclip, we would keep this code in the model.  You might even want to make a seprate class, such a presenter, for your logic.  In this case the EmailProcessor class finds the user based on the reception_email attribute and then executes the &#8220;do_stuff&#8221; method to process the message.  It would look something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'local_file'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'tmail'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'mms2r'</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> EmailProcessor
  attr_accessor <span style="color:#ff3333; font-weight:bold;">:user</span>, <span style="color:#ff3333; font-weight:bold;">:options</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">process</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">*</span>args<span style="color:#006600; font-weight:bold;">&#41;</span>
    email_processor = new<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">*</span>args<span style="color:#006600; font-weight:bold;">&#41;</span>
    email_processor.<span style="color:#9900CC;">do_stuff</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> find_user
    <span style="color:#0066ff; font-weight:bold;">@user</span> = User.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:first</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;">&#123;</span>:reception_email <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0066ff; font-weight:bold;">@options</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:to</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> do_stuff
		<span style="color:#008000; font-style:italic;"># Your actual logic would go here...</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> initialize<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">*</span>args<span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#0066ff; font-weight:bold;">@options</span> = args.<span style="color:#9900CC;">extract_options</span>!
    find_user
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>This uses the LocalFile class from Ben Rubenstein<sup><a href="#localfile">(4)</a></sup></p>
<p>We&#8217;re not quite done yet.  We need to make the <code>mail_processor</code> run as a daemon instead of just running &#8220;ruby mail_processor.rb&#8221; when we want to launch it.  We&#8217;ll use the &#8216;daemons&#8217; library for that.  This will take care of setting up PID files and lets us do <code>ruby mail_processor_control.rb start</code> and <code>ruby mail_processor_control.rb stop</code>.  We&#8217;re also using the &#8220;daemons_extension&#8221; file from Rapleaf that actually gives feedback on stopping of the daemon.  The script itself is extremely simple and goes in the <code>lib</code> directory with your <code>mail_processor.rb</code> script: </p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'daemons'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#996600;">'daemons_extension'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'RAILS_ENV'</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">||</span>= <span style="color:#996600;">'development'</span>
&nbsp;
options = <span style="color:#006600; font-weight:bold;">&#123;</span>
  <span style="color:#ff3333; font-weight:bold;">:app_name</span>  <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'processor'</span>,
  <span style="color:#ff3333; font-weight:bold;">:dir_mode</span>  <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:script</span>,
  <span style="color:#ff3333; font-weight:bold;">:dir</span>       <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'../log'</span>,
  <span style="color:#ff3333; font-weight:bold;">:backtrace</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>,
  <span style="color:#ff3333; font-weight:bold;">:mode</span>      <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:load</span>,
  <span style="color:#ff3333; font-weight:bold;">:monitor</span>   <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>
<span style="color:#006600; font-weight:bold;">&#125;</span>
&nbsp;
Daemons.<span style="color:#9900CC;">run</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#996600;">'processor.rb'</span><span style="color:#006600; font-weight:bold;">&#41;</span>, options<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Now just start it by doing &#8220;<code>ruby mail_processor_control.rb start" </code>and your daemon will be up and running. That&#8217;s it! You&#8217;re receiving e-mail to your Rails app.  It is very important that you load the rails environment in your worker and not the daemon controller.  The controller only manages the worker, therefore it won&#8217;t have access to the Rails environment and will error out.</p>
<h2>Considerations</h2>
<p>Depending on your configuration, you may want to use a different message queue than beanstalkd.  I&#8217;ve personally  found beanstalkd to be reliable but your architecture might call for something else.  For example, you may want to put your message queue on another server.  If you did this then you wouldn&#8217;t have access to the temporary storage that MMS2R defaults to for saving the attachments.  In that case you could use a queue and put the attachments directly in the queue, on s3, etc.</p>
<p>Some people have reported problems using the daemons library and having their daemon just halt and stop responding.  I&#8217;ve never encountered that and I&#8217;ve had this similar setup running for months. You will also want to put your <code>mail_processor_control</code> under some sort of process supervision, such as by monit or god.</p>
<p>You may be asking yourself why we didn&#8217;t use ActionMailer to handle the incoming emails since it does that?  The answer is that if you do it the way it&#8217;s described, for example, on the Rails wiki, it will spin up a new Rails process for <em>each</em> email that&#8217;s received.  Under any significant load, this will fail<sup><a href="#railscantscale">(5)</a></sup>.  Another drawback to that approach is that if there is a failure, you lose the email.  With this type of architecture, it remains in the queue and you can just process it later.</p>
<h2>Conclusion</h2>
<p>This is a good start to handling email in your application.  Being able to process email is a great way to enhance your app and give your users mobile access. With email-capable phones becoming ubiquitous, they no longer need to be tied to a computer to use your app. Remember, an app that can be used anywhere is an app that will be used anywhere.</p>
<h3>Citations</h3>
<ol>
<li id="railstips"><a href="http://railstips.org/2008/10/27/using-gmail-with-imap-to-receive-email-in-rails">http://railstips.org/2008/10/27/using-gmail-with-imap-to-receive-email-in-rails</a></li>
<li id="stopspammers">No it won&#8217;t.</li>
<li id="beanstalkd"><a href="http://xph.us/software/beanstalkd/">http://xph.us/software/beanstalkd/</a></li>
<li id="localfile"><a href="http://www.benr75.com/articles/2008/01/04/attachment_fu-now-with-local-file-fu">http://www.benr75.com/articles/2008/01/04/attachment_fu-now-with-local-file-fu</a></li>
<li id="railscantscale">Because rails can&#8217;t scale.  See <a href="http://canrailsscale.com">http://canrailsscale.com</a> for more information.</li>
</ol>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Receiving+Email+with+Rails+http://bit.ly/nFC0N" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/04/24/receving-email-with-rails&amp;title=Receiving+Email+with+Rails" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/04/24/receving-email-with-rails&amp;title=Receiving+Email+with+Rails" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/04/24/receving-email-with-rails&amp;title=Receiving+Email+with+Rails" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/04/24/receving-email-with-rails&amp;title=Receiving+Email+with+Rails" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/04/24/receving-email-with-rails&amp;t=Receiving+Email+with+Rails" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/04/24/receving-email-with-rails&amp;t=Receiving+Email+with+Rails" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/04/24/receving-email-with-rails&amp;title=Receiving+Email+with+Rails" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/04/24/receving-email-with-rails&amp;title=Receiving+Email+with+Rails" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers' rel='bookmark' title='Permanent Link: Using the Rails logger outside of models and controllers'>Using the Rails logger outside of models and controllers</a> <small> You can use the Rails logger outside of Rails...</small></li><li><a href='http://jasonseifer.com/2009/04/08/rails-metal-call-order' rel='bookmark' title='Permanent Link: Rails metal call order'>Rails metal call order</a> <small>I was really mystified today trying to figure out how...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/nzTeygGC9CM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/04/24/receving-email-with-rails/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/04/24/receving-email-with-rails</feedburner:origLink></item>
		<item>
		<title>32 Rack Resources to Get You Started</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/xpvxHi1WP2Y/32-rack-resources-to-get-you-started</link>
		<comments>http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started#comments</comments>
		<pubDate>Wed, 08 Apr 2009 02:47:47 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=174</guid>
		<description><![CDATA[
Rack

What the heck is Rack and why is it getting so much press lately? Well, from it&#8217;s tag-line: &#8220;Rack provides an minimal interface between webservers supporting Ruby and Ruby frameworks.&#8221;

But what does that mean?  Prior to Rack if you wanted to interface with Mongrel or Thin you had to write your own custom wrapper [...]


Related posts:<ol><li><a href='http://jasonseifer.com/2009/04/08/rails-metal-call-order' rel='bookmark' title='Permanent Link: Rails metal call order'>Rails metal call order</a> <small>I was really mystified today trying to figure out how...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://jasonseifer.com/assets/2009/04/257dcd94-fdec-4a09-b58f-afd97e3f8d3b.jpg" alt="257DCD94-FDEC-4A09-B58F-AFD97E3F8D3B.jpg" border="0" width="400" height="200" align="right" /></p>
<h2>Rack</h2>
<p>
What the heck is Rack and why is it getting so much press lately? Well, from it&#8217;s tag-line: &#8220;Rack provides an minimal interface between webservers supporting Ruby and Ruby frameworks.&#8221;
</p>
<p>But what does that mean?  Prior to Rack if you wanted to interface with Mongrel or Thin you had to write your own custom wrapper for talking to that web server.  Rack standardized the interface for doing that and even added some icing on the cake.</p>
<h3>Resources</h3>
<p></p>
<ul>
<li><a href="http://rack.rubyforge.org/">Rack Homepage</a> &#8211; This is the official Rack home page. There&#8217;s a mirror on <a href="http://rack.github.com">GitHub</a> as well.</li>
<li><a href="http://github.com/rack/rack/tree/master">Rack on GitHub</a> &#8211; This is the official Rack source repository.</li>
<li><a href="http://github.com/rack/rack-contrib/tree/master">Rack-Contrib</a> &#8211; This is the repository for rack middleware and different rack utilities.  It&#8217;s a great starting point for examples.</li>
<li><a href="http://groups.google.com/group/rack-devel">Rack-development</a> &#8211; The official Rack Google Group.  It&#8217;s a great place to ask questions or get help with Rack related troubles.</li>
<li><a href="http://github.com/brynary/rack-test/tree/master">Rack::Test</a> and its <a href="http://gitrdoc.com/brynary/rack-test/tree/master">RDoc</a>.  Much like Rack is a standard interface for talking to web servers, Rack::Test is a standard interface for testing Rack apps.</li>
</ul>
<h3>Tutorials and Links</h3>
<p></p>
<ul>
<li><a href="http://chneukirchen.org/blog/archive/2007/02/introducing-rack.html">Introducing Rack</a> by Christian Neukirchen.  Christian is the author rack and this is the introductory blog post about it.</li>
<li><a href="http://amberbit.com/blog/2009/04/04/introduction-to-rack-middleware/">Introduction to Rack Middleware</a> &#8211; This tutorial goes through what Rack middleware is and gives an example of writing an ascii shrimp middleware in your application.</li>
<li><a href="http://www.decodeuri.com/2008/10/15/creating-a-rack-middleware-for-minifying-your-javascript-files/">Creating a Rack middleware for minifying your javascript files</a> &#8211; This post by Luciano Panaro is less of a tutorial than a full fledged middleware with explanation but it is a solid example to learn from.</li>
<li><a href="http://www.hokstad.com/rack-middleware-adding-cache-headers.html">Adding cache headers</a> by Vidar Hokstad is another example of creating a middleware for a specific purpose.</a></li>
<li><a href="http://asciicasts.com/episodes/151-rack-middleware">Rack middleware asciicast</a> the same version of the RailsCast below but in text form.</li>
<li><a href="http://vision-media.ca/resources/ruby/ruby-rack-middleware-tutorial">Ruby Rack Middleware Tutorial</a> &#8211; This tutorial goes over the call chain and gives a real world example.</li>
<li><a href="http://thewebfellas.com/blog/2008/12/22/flash-uploaders-rails-cookie-based-sessions-and-csrf-rack-middleware-to-the-rescue">Flash uploaders, Rails, cookie based sessions and CSRF: Rack Middleware to the rescue!</a> &#8211; This is one of the better tutorials out there because it starts with a real world problem and demonstrates how to solve it.</li>
<li><a href="http://www.pathf.com/blogs/2009/02/its-only-rack-on-rails-but-i-like-it/">It’s Only Rack on Rails But I Like It</a> &#8211; Noel Rappin goes through and gives a brief introduction to Rack, why it&#8217;s good for Rails, and how to use it from a Rails app.</li>
<li><a href="http://snippets.aktagon.com/snippets/302-How-to-setup-and-use-Rack-Cache-with-Rails-2-3-0-RC-1">How to setup and use Rack::Cache with Rails 2.3</a> &#8211; The title is pretty self explanatory.</li>
<li><a href="http://www.brynary.com/2009/3/5/rack-test-released-a-simple-testing-api-for-rack-based-frameworks-and-apps">Rack::Test tutorial</a> &#8211; Simply test any Rack-compatible app.</li>
<li><a href="http://soylentfoo.jnewland.com/articles/2008/12/16/rails-metal-a-micro-framework-with-the-power-of-rails-m">Rails Metal introduction</a> is an awesome introduction to Rails Metal by Jesse Newland.</li>
<li><a href="http://opensoul.org/2009/3/3/plugging-rack-into-rails">Plugging Rack into Rails</a> &#8211; Another rack/rails tutorial.</li>
<li><a href="http://wiki.github.com/rack/rack/tutorial-rackup-howto">How to Rackup</a> &#8211; This is from the official Rack wiki and explains what Rackup files are and hwo to use them.</li>
</ul>
<h3>Screencasts, Videos, and Presentations</h3>
<p></p>
<ul>
<li><a href="http://wiki.github.com/rack/rack/presentations">Rack presentations</a> on the Rack GitHub wiki.</a></li>
<li><a href="http://mwrc2009.confreaks.com/13-mar-2009-11-05-in-a-world-of-middleware-who-needs-monolithic-applications-jon-crosby.html">Jon Crosby&#8217;s MountainWest Ruby Conf presentaiton</a> &#8211; In a world of middleware, who needs monolithic applications?
<li><a href="http://railscasts.com/episodes/151-rack-middleware">Rack middleware RailsCast</a> &#8211; Ryan Bates usual high quality screencasts on how to create a Rack Middleware</li>
<li><a href="http://railscasts.com/episodes/150-rails-metal">Rails Metal RailsCast</a> &#8211; An introduction to creating Rails Metal apps by Ryan Bates
<li><a href="http://remi.org/2009/02/19/rack-basics.html">Rack basics</a> &#8211; Remi goes in to the very basics of Rack.</li>
<li><a href="http://remi.org/2009/02/24/rack-part-2.html">Rack part 2</a> &#8211; Going over rackup files, creating an executable rack application, using middleware, reloading</a></li>
<li><a href="http://remi.org/2009/02/28/rack-part-3-middleware.html">Rack Middleware</a> &#8211; What it is, how to write your own, using it in Sinatra and Rails</li>
</li>
<li><a href="http://www.techscreencast.com/web-development/ruby-on-rails/rack-middleware/1540">Another Rack middleware screencast</a></li>
</ul>
<h3>Middleware</h3>
<p></p>
<ul>
<li><a href="http://wiki.github.com/rack/rack/list-of-middleware">List of Rack Middleware</a> on the Rack wiki</a>.</li>
<li><a href="http://tomayko.com/src/rack-cache/">Rack-Cache</a> &#8211; HTTP reverse proxy cache (<a href="http://groups.google.com/group/rack-cache/topics">Google Group</a>).    If you want to explore using HTTP caching to its fullest check out this link.  It has a few links that explain HTTP caching as well.</li>
<li><a href="http://github.com/peburrows/rack-contrib/blob/fea3d5b2c23cc5f9337555df9133da3c453fb23f/lib/rack/contrib/cssvariables.rb">CSS Variables</a> and a <a href="http://blog.philburrows.com/articles/2009/03/18/css-variables-with-rack-middleware/">tutorial</a> for using it.</li>
<li><a href="http://github.com/atmos/hancock-client/tree/master">Hancock-client</a> is a sinatra app and rack middleware piece for the hancock SSO server.</li>
</ul>
<h3>Documentation</h3>
<p></p>
<ul>
<li><a href="http://guides.rubyonrails.org/rails_on_rack.html ">Rails on Rack</a> gives you Rails and Rack specific information.  This was suggested by Hubert Lepicki in the comments.</li>
<li><a href="http://rack.rubyforge.org/doc/">Rack Documentation (RDOC)</a></li>
<li><a href="http://rack.rubyforge.org/doc/files/SPEC.html">Rack Specification</a></li>
</ul>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=32+Rack+Resources+to+Get+You+Started+http://bit.ly/a56Zt" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started&amp;title=32+Rack+Resources+to+Get+You+Started" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started&amp;title=32+Rack+Resources+to+Get+You+Started" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started&amp;title=32+Rack+Resources+to+Get+You+Started" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started&amp;title=32+Rack+Resources+to+Get+You+Started" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started&amp;t=32+Rack+Resources+to+Get+You+Started" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started&amp;t=32+Rack+Resources+to+Get+You+Started" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started&amp;title=32+Rack+Resources+to+Get+You+Started" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started&amp;title=32+Rack+Resources+to+Get+You+Started" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/04/08/rails-metal-call-order' rel='bookmark' title='Permanent Link: Rails metal call order'>Rails metal call order</a> <small>I was really mystified today trying to figure out how...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/xpvxHi1WP2Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/04/08/32-rack-resources-to-get-you-started</feedburner:origLink></item>
		<item>
		<title>Rails metal call order</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/ztffW-d1q6w/rails-metal-call-order</link>
		<comments>http://jasonseifer.com/2009/04/08/rails-metal-call-order#comments</comments>
		<pubDate>Wed, 08 Apr 2009 02:45:01 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[metal]]></category>
		<category><![CDATA[rack]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=172</guid>
		<description><![CDATA[I was really mystified today trying to figure out how to bump up the response in Rails metal.  The default metal generator generates something that looks like the following:


I had mistakenly changed it to 500 and didn&#8217;t realize why the app completely broke. It turns out that Rails itself uses a 404 code in [...]


Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers' rel='bookmark' title='Permanent Link: Using the Rails logger outside of models and controllers'>Using the Rails logger outside of models and controllers</a> <small> You can use the Rails logger outside of Rails...</small></li><li><a href='http://jasonseifer.com/2009/04/24/receving-email-with-rails' rel='bookmark' title='Permanent Link: Receiving Email with Rails'>Receiving Email with Rails</a> <small>This article originally appeared in the first issue of Rails...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>I was really mystified today trying to figure out how to bump up the response in Rails metal.  The default metal generator generates something that looks like the following:
</p>
<p><script src="http://gist.github.com/91599.js"></script></p>
<p>I had mistakenly changed it to 500 and didn&#8217;t realize why the app completely broke. It turns out that Rails itself uses a 404 code in the metal response to go up the call chain to the next metal:</p>
<p><script src="http://gist.github.com/91597.js"></script></p>
<p>So if you want to return from the metal, just send back a 404.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Rails+metal+call+order+http://bit.ly/2RTXEl" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/04/08/rails-metal-call-order&amp;title=Rails+metal+call+order" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/04/08/rails-metal-call-order&amp;title=Rails+metal+call+order" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/04/08/rails-metal-call-order&amp;title=Rails+metal+call+order" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/04/08/rails-metal-call-order&amp;title=Rails+metal+call+order" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/04/08/rails-metal-call-order&amp;t=Rails+metal+call+order" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/04/08/rails-metal-call-order&amp;t=Rails+metal+call+order" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/04/08/rails-metal-call-order&amp;title=Rails+metal+call+order" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/04/08/rails-metal-call-order&amp;title=Rails+metal+call+order" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/10/using-the-rails-logger-outside-of-models-and-controllers' rel='bookmark' title='Permanent Link: Using the Rails logger outside of models and controllers'>Using the Rails logger outside of models and controllers</a> <small> You can use the Rails logger outside of Rails...</small></li><li><a href='http://jasonseifer.com/2009/04/24/receving-email-with-rails' rel='bookmark' title='Permanent Link: Receiving Email with Rails'>Receiving Email with Rails</a> <small>This article originally appeared in the first issue of Rails...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/ztffW-d1q6w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/04/08/rails-metal-call-order/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/04/08/rails-metal-call-order</feedburner:origLink></item>
		<item>
		<title>Passenger 2.1.1 and Local Production Environment</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/nBNlIbIcMcY/passenger-2-1-1-beta-production-env</link>
		<comments>http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env#comments</comments>
		<pubDate>Wed, 04 Mar 2009 13:03:26 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[passenger]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=163</guid>
		<description><![CDATA[If you're on the passenger 2.1.1 beta and having problems locally with getting your rails apps to not be in the production environment, read on.


No related posts.]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re on the <a href="http://blog.phusion.nl/2009/03/01/phusion-passenger-211-beta-released-thanks-sponsors/">Passenger 2.1.1 beta</a> and can&#8217;t figure out why your rails app is going in to the production mode, it&#8217;s because it sets the RackEnv environment variable production instead of the RailsEnv variable.  This is fine on rails 2.3+ apps because they are based on Rack but if you have a rails 2.2.2 app or below, you&#8217;ll need the following in your apps passenger site config:</p>
<pre>

&lt;VirtualHost*:80&gt;
  ServerName myserver.local
  DocumentRoot "/myapp/public"
  RackEnv development
  RailsEnv development
  &lt;directory "/myapp/public"&gt;
    Order allow,deny
    Allow from all
  &lt;/directory&gt;
&lt;/VirtualHost&gt;
</pre>
<p></p>
<p><strong>Update:</strong> I thought I should add, based on Hongli Lai&#8217;s response in the comments, that this is with me using the passenger preference pane in Leopard.  That might be the culprit.  Is anyone else seeing this problem?  Let me know in the comments.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Passenger+2.1.1+and+Local+Production+Environment+http://bit.ly/agVnV" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env&amp;title=Passenger+2.1.1+and+Local+Production+Environment" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env&amp;title=Passenger+2.1.1+and+Local+Production+Environment" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env&amp;title=Passenger+2.1.1+and+Local+Production+Environment" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env&amp;title=Passenger+2.1.1+and+Local+Production+Environment" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env&amp;t=Passenger+2.1.1+and+Local+Production+Environment" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env&amp;t=Passenger+2.1.1+and+Local+Production+Environment" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env&amp;title=Passenger+2.1.1+and+Local+Production+Environment" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env&amp;title=Passenger+2.1.1+and+Local+Production+Environment" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/nBNlIbIcMcY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/03/04/passenger-2-1-1-beta-production-env</feedburner:origLink></item>
		<item>
		<title>Ruby Hash Trickery</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/A-R5gn9pi9I/ruby-hash-trickery</link>
		<comments>http://jasonseifer.com/2009/03/03/ruby-hash-trickery#comments</comments>
		<pubDate>Tue, 03 Mar 2009 20:10:46 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[paste]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=159</guid>
		<description><![CDATA[Ilya Grigorick put up a pretty cool pastie showing a neat hack to make Ruby hashes raise errors with invalid keys:

  Delicious  Digg This Post  Facebook  Reddit This Post

No related posts.


No related posts.]]></description>
			<content:encoded><![CDATA[<p><a href="http://igvita.com">Ilya Grigorick</a> put up a pretty cool <a href="http://pastie.org/406312">pastie</a> showing a neat hack to make Ruby hashes raise errors with invalid keys:<br />
<script src='http://pastie.org/406312.js'></script></p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Ruby+Hash+Trickery+http://bit.ly/RDZuU" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/03/03/ruby-hash-trickery&amp;title=Ruby+Hash+Trickery" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/03/03/ruby-hash-trickery&amp;title=Ruby+Hash+Trickery" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/03/03/ruby-hash-trickery&amp;title=Ruby+Hash+Trickery" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/03/03/ruby-hash-trickery&amp;title=Ruby+Hash+Trickery" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/03/03/ruby-hash-trickery&amp;t=Ruby+Hash+Trickery" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/03/03/ruby-hash-trickery&amp;t=Ruby+Hash+Trickery" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/03/03/ruby-hash-trickery&amp;title=Ruby+Hash+Trickery" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/03/03/ruby-hash-trickery&amp;title=Ruby+Hash+Trickery" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/A-R5gn9pi9I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/03/03/ruby-hash-trickery/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/03/03/ruby-hash-trickery</feedburner:origLink></item>
		<item>
		<title>Rails Magazine Issue 1</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/E-a7wgh4t_w/rails-magazine-issue-1</link>
		<comments>http://jasonseifer.com/2009/03/01/rails-magazine-issue-1#comments</comments>
		<pubDate>Sun, 01 Mar 2009 03:43:47 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=157</guid>
		<description><![CDATA[The first issue of Rails Magazine is out!  I&#8217;m super excited because I&#8217;ve got an article in there on receiving email with Rails.  Go check it out.  I can reproduce the article here after the publication has been out for 30 days so stay tuned for that.
  Delicious  Digg This [...]


Related posts:<ol><li><a href='http://jasonseifer.com/2009/04/24/receving-email-with-rails' rel='bookmark' title='Permanent Link: Receiving Email with Rails'>Receiving Email with Rails</a> <small>This article originally appeared in the first issue of Rails...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://railsmagazine.com/issues/1"><img src="http://jasonseifer.com/assets/2009/03/skitched-20090228-223944.jpg" alt="skitched-20090228-223944.jpg" border="0" width="233" height="128" align="right" /></a>The first issue of Rails Magazine is out!  I&#8217;m super excited because I&#8217;ve got an article in there on receiving email with Rails.  Go <a href="http://railsmagazine.com/issues/1">check it out</a>.  I can reproduce the article here after the publication has been out for 30 days so stay tuned for that.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Rails+Magazine+Issue+1+http://bit.ly/BVSfs" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/03/01/rails-magazine-issue-1&amp;title=Rails+Magazine+Issue+1" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/03/01/rails-magazine-issue-1&amp;title=Rails+Magazine+Issue+1" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/03/01/rails-magazine-issue-1&amp;title=Rails+Magazine+Issue+1" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/03/01/rails-magazine-issue-1&amp;title=Rails+Magazine+Issue+1" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/03/01/rails-magazine-issue-1&amp;t=Rails+Magazine+Issue+1" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/03/01/rails-magazine-issue-1&amp;t=Rails+Magazine+Issue+1" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/03/01/rails-magazine-issue-1&amp;title=Rails+Magazine+Issue+1" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/03/01/rails-magazine-issue-1&amp;title=Rails+Magazine+Issue+1" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/04/24/receving-email-with-rails' rel='bookmark' title='Permanent Link: Receiving Email with Rails'>Receiving Email with Rails</a> <small>This article originally appeared in the first issue of Rails...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/E-a7wgh4t_w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/03/01/rails-magazine-issue-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/03/01/rails-magazine-issue-1</feedburner:origLink></item>
		<item>
		<title>Ruby Interpreter Comparison</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/TIOr5ekHqjg/ruby-interpreter-comparison</link>
		<comments>http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison#comments</comments>
		<pubDate>Sat, 28 Feb 2009 00:41:23 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=150</guid>
		<description><![CDATA[I did a talk at QCon a while back on the different Ruby Virtual Machines.  You can check out the presentation the InfoQ web site: Ruby VMs: A Comparison.
  Delicious  Digg This Post  Facebook  Reddit This Post

No related posts.


No related posts.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.infoq.com/presentations/seifer-ruby-vm-comparison"><img src="http://jasonseifer.com/assets/2009/02/infoq-ruby-vms-a-comparison-1.jpg" alt="InfoQ_ Ruby VMs_ A Comparison-1.jpg" border="0" width="331" height="343"  style="float:right; margin: 6px" /></a>I did a talk at QCon a while back on the different Ruby Virtual Machines.  You can check out the presentation the InfoQ web site: <a href="http://www.infoq.com/presentations/seifer-ruby-vm-comparison">Ruby VMs: A Comparison</a>.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Ruby+Interpreter+Comparison+http://bit.ly/XF57Q" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison&amp;title=Ruby+Interpreter+Comparison" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison&amp;title=Ruby+Interpreter+Comparison" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison&amp;title=Ruby+Interpreter+Comparison" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison&amp;title=Ruby+Interpreter+Comparison" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison&amp;t=Ruby+Interpreter+Comparison" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison&amp;t=Ruby+Interpreter+Comparison" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison&amp;title=Ruby+Interpreter+Comparison" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison&amp;title=Ruby+Interpreter+Comparison" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/TIOr5ekHqjg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/02/28/ruby-interpreter-comparison</feedburner:origLink></item>
		<item>
		<title>Offline Gem Server RDocs</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/NuIRCCguuLU/offline-gem-server-rdocs</link>
		<comments>http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs#comments</comments>
		<pubDate>Sun, 22 Feb 2009 07:17:55 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=129</guid>
		<description><![CDATA[
 ol li { margin: 15px 0 10px 0 }


Click To Zoom
Get Sinatra, Rubygems, and Passenger working for offline RDocs? Count me in.  I saw this and new I had to have it.  I&#8217;ve been on some long plane rides recently and I frequently find myself wanting to look up something from a [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<style type="text/css">
 ol li { margin: 15px 0 10px 0 }
</style>
<div style="text-align:center;"><a href="http://twitter.com/jnewland/status/1235806122"><img src="http://jasonseifer.com/assets/2009/02/twitter-jesse-newland-sinatra-rubygems-passeng.jpg" alt="Twitter _ Jesse Newland_ sinatra-rubygems + Passeng ....jpg" border="0" width="557" height="232" /></a></div>
<p><div style="text-align:center;float:right;"><a href="http://jasonseifer.com/assets/2009/02/rdoc-documentation.jpg" target="_blank"><img src="http://jasonseifer.com/assets/2009/02/rdoc-documentation-300x206.jpg" alt="RDoc Documentation.jpg" border="0"  /><br/><small>Click To Zoom</small></a></div>
<p>Get Sinatra, Rubygems, and Passenger working for offline RDocs? Count me in.  I saw this and new I had to have it.  I&#8217;ve been on some long plane rides recently and I frequently find myself wanting to look up something from a gem&#8217;s documentation while I&#8217;m coding. You can use the <code>gem server</code> command but that&#8217;s just such a pain to do every time you want to look something up.  I hadn&#8217;t really given it much thought that there might be an easier way until I saw Jesse&#8217;s tweet about it.  Having this offline using passenger at http://gems.local is great but I wanted to have a little more searching baked in.  Here&#8217;s how I did it:
</p>
<ol>
<li><strong>Install the hanna gem from mislav.</strong>
<p> You may need to have the HAML gem installed for this to work.  The hanna gem is a great theme for rdoc output.  It includes javascript to make some ajaxy type search so you can filter methods by typing in to a text field in one of the frames on the left.  It took me a little while to find this theme.  It&#8217;s the one currently in use on <a href="http://gitrdoc.com">GitRDoc</a>, which is a great resource (if you&#8217;re online).</p>
<p>
<script src="http://gist.github.com/68367.js"></script></li>
<li><strong>Tell rdoc to use the hanna theme</strong>
<p>In order to tell rdoc and gem to use this when you use the &quot;gem&quot; command, you need to add to your .gemrc.  Beware that this will affect all future rdoc generation when you install a gem.  Add the following to ~/.gemrc:<br />
<script src="http://gist.github.com/68377.js"></script>
</p>
<p></li>
<li><strong>Regenerate your rdocs</strong>
<p>You then need to regenerate all of your rdocs with this theme.  You can do this by executing the following:<br />
<script src="http://gist.github.com/68378.js"></script>
</p>
<p></li>
<li><strong>Get sinatra-rubygems</strong>
<p>Clone <a href="http://github.com/jseifer/sinatra-rubygems/tree/master">my fork</a> of <a href="http://github.com/jnewland/sinatra-rubygems/tree/master">Jesse Newland&#8217;s sinatra-rubygems</a> from GitHub:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">git clone git:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>jseifer<span style="color: #000000; font-weight: bold;">/</span>sinatra-rubygems.git</pre></div></div>

</p>
<p>
</li>
<li><strong>Add it to Passenger</strong>
<p>Hook it up to your <a href="http://www.fngtps.com/2008/06/putting-the-pane-back-into-deployment">passenger preference pane</a> and set the name to &quot;gems.local&quot;, restart Apache and you&#8217;ll be all set:</p>
<div style="text-align:center;"><img src="http://jasonseifer.com/assets/2009/02/passenger-pref-pane.jpg" alt="passenger pref pane.jpg" border="0" width="460" height="339" /></div>
</li>
</ol>
<p>After you complete the above steps, everything should be working.  Enjoy!  This will come in handy next time you don&#8217;t have internet access and need to look up some methods.  I&#8217;d like to give a special thanks to <a href="http://jnewland.com">Jesse Newland</a> for releasing the sinatra-rubygems app.</p>
<p><strong>Update:</strong> k776 points out in the comments that this doesn&#8217;t work on the latest version of rdoc, which is 2.4.1 as of this writing.  It seems 2.3.0 is the version to go with.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Offline+Gem+Server+RDocs+http://bit.ly/18CRXX" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs&amp;title=Offline+Gem+Server+RDocs" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs&amp;title=Offline+Gem+Server+RDocs" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs&amp;title=Offline+Gem+Server+RDocs" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs&amp;title=Offline+Gem+Server+RDocs" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs&amp;t=Offline+Gem+Server+RDocs" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs&amp;t=Offline+Gem+Server+RDocs" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs&amp;title=Offline+Gem+Server+RDocs" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs&amp;title=Offline+Gem+Server+RDocs" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/NuIRCCguuLU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs/feed</wfw:commentRss>
		<slash:comments>25</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/02/22/offline-gem-server-rdocs</feedburner:origLink></item>
		<item>
		<title>Turning Off Webrat’s Automatic Browser Opening</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/IUx98B8TmdY/turning-off-webrats-automatic-browser-opening</link>
		<comments>http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening#comments</comments>
		<pubDate>Wed, 18 Feb 2009 14:36:36 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=121</guid>
		<description><![CDATA[If you&#8217;re using webrat for doing your integration testing with Rails and you&#8217;re on OS X you may notice that webrat opens an html version of the failing test every time you run it.  This can be fairly annoying if you&#8217;re running autotest.  I didn&#8217;t see how to turn it off in the [...]


Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice' rel='bookmark' title='Permanent Link: Getting RSpec and TextMate to play nice'>Getting RSpec and TextMate to play nice</a> <small> Elijah Miller has a great blog post on getting...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re using <a href="http://github.com/brynary/webrat/tree/master">webrat</a> for doing your integration testing with Rails and you&#8217;re on OS X you may notice that webrat opens an html version of the failing test <strong>every time you run it</strong>.  This can be fairly annoying if you&#8217;re running autotest.  I didn&#8217;t see how to turn it off in the documentation but I found on <a href="http://blog.bitmacro.com/2008/11/14/shoulda-factory_girl-webrat">this page</a> that you can turn it off by doing the following:</p>
<p><script src="http://gist.github.com/66362.js"></script></p>
<p>This doesn&#8217;t work for the gem version I had installed but only with the GitHub version of brynary-webrat.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening+http://bit.ly/15nXn8" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening&amp;title=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening&amp;title=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening&amp;title=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening&amp;title=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening&amp;t=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening&amp;t=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening&amp;title=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening&amp;title=Turning+Off+Webrat%E2%80%99s+Automatic+Browser+Opening" title="Post to Reddit">Reddit This Post</a></p>

<p>Related posts:<ol><li><a href='http://jasonseifer.com/2009/08/05/getting-rspec-and-textmate-to-play-nice' rel='bookmark' title='Permanent Link: Getting RSpec and TextMate to play nice'>Getting RSpec and TextMate to play nice</a> <small> Elijah Miller has a great blog post on getting...</small></li></ol></p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/IUx98B8TmdY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/02/18/turning-off-webrats-automatic-browser-opening</feedburner:origLink></item>
		<item>
		<title>NVidia Graphics Update 2009-01-26</title>
		<link>http://feedproxy.google.com/~r/jasonseifer/~3/nNS3YaojNSs/nvidia-graphics-update-2009-01-26</link>
		<comments>http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26#comments</comments>
		<pubDate>Mon, 26 Jan 2009 23:05:38 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://jasonseifer.com/?p=114</guid>
		<description><![CDATA[I&#8217;ve written before about the problems with the Mini DisplayPort to dual link DVI adapter from Apple.  Today Apple has released a graphics update that is supposed to fix the cursor movement problem.  After having installed it, it does NOT fix the out of sync issues.  I guess we&#8217;ll have to wait [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p><img src="http://jasonseifer.com/assets/2009/01/a7063cdd-4c14-4053-a921-0e77a54be623.jpg" alt="NVidia logo" border="0" width="150" align="right" />I&#8217;ve written before about the <a href="http://jasonseifer.com/2009/01/09/mini-displayport-to-dual-link-dvi-adapter-fix-temporary">problems</a> with the Mini DisplayPort to dual link DVI adapter from Apple.  Today Apple has released a graphics update that is supposed to fix the cursor movement problem.  After having installed it, it does NOT fix the out of sync issues.  I guess we&#8217;ll have to wait on that one for a little while yet.</p>
<p>Regardless, you can download it <a href="http://support.apple.com/downloads/NVIDIA_Graphics_Update_2009">here</a>.</p>
<p><strong>Update:</strong> Apple has pulled the update for some unknown reason.  The page linked above is leads to a 404 not found page.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=NVidia+Graphics+Update+2009-01-26+http://bit.ly/GfBmC" title="Post to Twitter"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26&amp;title=NVidia+Graphics+Update+2009-01-26" title="Post to Delicious"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26&amp;title=NVidia+Graphics+Update+2009-01-26" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26&amp;title=NVidia+Graphics+Update+2009-01-26" title="Post to Digg"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26&amp;title=NVidia+Graphics+Update+2009-01-26" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26&amp;t=NVidia+Graphics+Update+2009-01-26" title="Post to Facebook"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26&amp;t=NVidia+Graphics+Update+2009-01-26" title="Post to Facebook">Facebook</a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26&amp;title=NVidia+Graphics+Update+2009-01-26" title="Post to Reddit"><img class="nothumb" src="http://jasonseifer.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit" /></a> <a class="tt" href="http://reddit.com/submit?url=http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26&amp;title=NVidia+Graphics+Update+2009-01-26" title="Post to Reddit">Reddit This Post</a></p>

<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/jasonseifer/~4/nNS3YaojNSs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jasonseifer.com/2009/01/26/nvidia-graphics-update-2009-01-26</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 5.945 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-03-10 10:48:44 --><!-- Compression = gzip -->
