<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Behind the Fan Door</title>
	<atom:link href="http://behindthefandoor.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://behindthefandoor.wordpress.com</link>
	<description>the Fandor engineering blog</description>
	<lastBuildDate>Sat, 29 Oct 2011 05:57:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='behindthefandoor.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Behind the Fan Door</title>
		<link>http://behindthefandoor.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://behindthefandoor.wordpress.com/osd.xml" title="Behind the Fan Door" />
	<atom:link rel='hub' href='http://behindthefandoor.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Naughty callback</title>
		<link>http://behindthefandoor.wordpress.com/2011/10/28/naughty-callback/</link>
		<comments>http://behindthefandoor.wordpress.com/2011/10/28/naughty-callback/#comments</comments>
		<pubDate>Sat, 29 Oct 2011 05:57:25 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://behindthefandoor.wordpress.com/?p=118</guid>
		<description><![CDATA[I recently ran into what at first seemed like an odd problem with Rails while adding a simple before_create filter to one of my models. The code looked something like this: After adding this before_create filter, my gummy bears would no longer save (ActiveRecord::RecordNotSaved exception). It didn&#8217;t hit me right away but I then realized [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=behindthefandoor.wordpress.com&amp;blog=27374284&amp;post=118&amp;subd=behindthefandoor&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I recently ran into what at first seemed like an odd problem with Rails while adding a simple before_create filter to one of my models. The code looked something like this:</p>
<p><pre class="brush: ruby;">
# gummy_bear.rb
class GummyBear

  before_create :set_cheap_sweetener, :if =&gt; :need_to_cut_cost?

  private

  def set_cheap_sweetener
    self.high_fructose_corn_syrup = true
    self.sugar_cane = false
  end
end
</pre></p>
<p>After adding this before_create filter, my gummy bears would no longer save (ActiveRecord::RecordNotSaved exception). It didn&#8217;t hit me right away but I then realized that my callback always returned <em>false</em>. And given that the entire callback chain runs within the &#8220;save&#8221; transaction, that&#8217;s enough to make ActiveRecord choke and rollback the entire operation.</p>
<p>Here is what the <a href="http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html">ActiveRecord documentation</a> says:</p>
<blockquote><p>If a before_* callback returns false, all the later callbacks and the associated action are cancelled. If an after_* callback returns false, all the later callbacks are cancelled. Callbacks are generally run in the order they are defined, with the exception of callbacks defined as methods on the model, which are called last.
</p></blockquote>
<p>Lesson learned, moving on&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/behindthefandoor.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/behindthefandoor.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/behindthefandoor.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/behindthefandoor.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/behindthefandoor.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/behindthefandoor.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/behindthefandoor.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/behindthefandoor.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/behindthefandoor.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/behindthefandoor.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/behindthefandoor.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/behindthefandoor.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/behindthefandoor.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/behindthefandoor.wordpress.com/118/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=behindthefandoor.wordpress.com&amp;blog=27374284&amp;post=118&amp;subd=behindthefandoor&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://behindthefandoor.wordpress.com/2011/10/28/naughty-callback/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/494d05e14ff76e3a9f0441bdd2de7d5c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">martinbreining</media:title>
		</media:content>
	</item>
		<item>
		<title>I like them lean</title>
		<link>http://behindthefandoor.wordpress.com/2011/10/22/i-like-them-lean/</link>
		<comments>http://behindthefandoor.wordpress.com/2011/10/22/i-like-them-lean/#comments</comments>
		<pubDate>Sun, 23 Oct 2011 00:49:46 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://behindthefandoor.wordpress.com/?p=27</guid>
		<description><![CDATA[One of my personal objectives here at Fandor is to improve the overall code quality. This is a lengthy process which requires multiple refactoring iterations spread over time, especially considering that the product itself is constantly evolving. My strategy is simple: whenever I&#8217;m looking at an area of the product that I haven&#8217;t been exposed [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=behindthefandoor.wordpress.com&amp;blog=27374284&amp;post=27&amp;subd=behindthefandoor&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of my personal objectives here at Fandor is to improve the overall code quality. This is a lengthy process which requires multiple refactoring iterations spread over time, especially considering that the product itself is constantly evolving. My strategy is simple: whenever I&#8217;m looking at an area of the product that I haven&#8217;t been exposed to yet, I spend some time analyzing the current design and see if there&#8217;s room for improvement. Typically if I&#8217;m having a hard time understanding the logic or I find the code too convoluted and not easy to read then it&#8217;s time for some refactoring. Here&#8217;s one example I recently came across.</p>
<h3>The code smell</h3>
<p>The code below, which has been slightly modified for clarity purposes, does something as trivial as registering a new user. Yet the implementation appears too verbose and too bloated, particularly given that it resides in a controller. The multiple model invocations and the multiple code paths are also good indications of a code smell.</p>
<p><pre class="brush: ruby;">
# UsersController
def create
  @user = User.new(params[:user])
  render :action =&gt; &quot;new&quot; unless @user.valid?
  credit_card = CreditCard.new(params[:user][:credit_card])
  billing_address = { :street =&gt; params[:user][:billing_address][:address], :city =&gt; params[:user][:billing_address][:city], :state =&gt; params[:user][:billing_address][:state], :zipcode =&gt; params[:user][:billing_address][:zipcode] }
  if @user.valid_credit_card?(credit_card) &amp;&amp; @user.valid_billing_address?(billing_address)
    begin
      if @user.register(@credit_card, @billing_address)
        flash[:notice] = &quot;User successfully created&quot;
        redirect_to @user
      else
        flash.now[:error] = &quot;An error occurred while ...&quot;
        render :action =&gt; &quot;new&quot;
      end
    rescue PaymentGatewayException =&gt; e
      flash.now[:error] = e.message
      render :action =&gt; &quot;new&quot;
    end
  else
    render :action =&gt; &quot;new&quot;
  end
end
</pre></p>
<h3>The refactoring</h3>
<p>What makes this implementation convoluted is that it manipulates three different models (user, credit_card and billing address) in an attempt to ultimately create one new user resource (after all we are in the <em>create</em> action of the <em>UsersController</em>). It&#8217;d be nice if we only had one model to manipulate.</p>
<p>The key insight is to recognize that, even though they are not persisted, the credit card and billing address do &#8220;belong&#8221; to the user. A user &#8220;has one&#8221; credit card and &#8220;has one&#8221; billing address even though there is no explicit <em>has_one</em> association defined between these models.</p>
<p>In other words the credit card and billing address should really be defined as virtual attributes of the user model. With this refactoring in place, the controller code becomes agnostic to the credit card and the billing address or said differently, the credit card and the billing address are now exclusively the concern of the user model. As a result of this separation of concern, the controller code can then focus on what it is meant to do, that is in this particular case, instantiate, validate and persist a new user, while the heavy lifting (e.g. instantiating and validating the credit card and billing address) is left to the user model.</p>
<p>I will spare you all the implementation details but to give you a sense of the refactoring that needed to be done, I&#8217;ve highlighted some of the code that was added to the user model.</p>
<p><pre class="brush: ruby;">
# user.rb
[...]
attr_accessible :credit_card, :billing_address

validate :credit_card_attribute, :unless =&gt; :skip_billing_validations
validate :billing_address_attribute, :unless =&gt; :skip_billing_validations

[...]

def billing_address
  @billing_address ||= BillingAddress.new
end

def billing_address=(hash)
  @billing_address = BillingAddress.new(hash)
end

def credit_card
  @credit_card ||= CreditCard.new
end

def credit_card=(hash)
  @credit_card = CreditCard.new(hash)
end

private

def credit_card_attribute
  self.credit_card.valid?
end

def billing_address_attribute
  self.billing_address.valid?
end

[...]
</pre></p>
<p>As part of this refactoring, the credit card and billing address are now implemented as separate PORO classes (i.e. non-database backed models). I&#8217;m omitting their implementation since this is not the focus of this post. Notice however that they both respond to a <em>valid?</em> method, which will allow us to validate the user, credit card and billing address data all in one shot through a single invocation of <em>user.valid?</em> in the controller.</p>
<p><pre class="brush: ruby;">
# users_controller.rb
def create
  @user = User.new(params[:user])
  if @user.valid?
    begin
      @user.register
    rescue PaymentGatewayException =&gt; e
      flash.now[:error] = e.message
      render :action =&gt; &quot;new&quot;
    else
      flash[:notice] = &quot;User successfully created&quot;
      redirect_to @user
    end
  else
    render :action =&gt; &quot;new&quot;
  end
end
</pre></p>
<h3>The take away</h3>
<p>I refactored this controller by applying the basic principles of <a href="http://en.wikipedia.org/wiki/Separation_of_concerns">separation of concerns</a>. Another way to look at this is to think in terms of <a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development#Outside-in">outside-in design</a>. If you were to design this controller action from scratch starting from the user story, you&#8217;d probably come up with something to the extent of:</p>
<p># Instantiate user using the input parameters<br />
# Register user<br />
# If registration is successful &#8230;<br />
# Otherwise &#8230;</p>
<p>I personally find that even with more complex controllers, there&#8217;s generally no reason for your implementation to introduce a lot more complexity than that, even down the road as the product matures and new functionality is added. It sometimes takes a lot more efforts than in this particular simple example, especially when the existing design exhibits a tight coupling, but it&#8217;s usually well worth the effort.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/behindthefandoor.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/behindthefandoor.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/behindthefandoor.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/behindthefandoor.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/behindthefandoor.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/behindthefandoor.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/behindthefandoor.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/behindthefandoor.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/behindthefandoor.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/behindthefandoor.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/behindthefandoor.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/behindthefandoor.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/behindthefandoor.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/behindthefandoor.wordpress.com/27/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=behindthefandoor.wordpress.com&amp;blog=27374284&amp;post=27&amp;subd=behindthefandoor&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://behindthefandoor.wordpress.com/2011/10/22/i-like-them-lean/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/494d05e14ff76e3a9f0441bdd2de7d5c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">martinbreining</media:title>
		</media:content>
	</item>
		<item>
		<title>Installing gherkin from a git repository with bundler</title>
		<link>http://behindthefandoor.wordpress.com/2011/09/12/installing-gherkin-from-a-git-repository-with-bundler/</link>
		<comments>http://behindthefandoor.wordpress.com/2011/09/12/installing-gherkin-from-a-git-repository-with-bundler/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 03:12:07 +0000</pubDate>
		<dc:creator>dschweisguth</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://behindthefandoor.wordpress.com/?p=10</guid>
		<description><![CDATA[I just installed our Rails application on new hardware running Ubuntu 11.10. Everything went smoothly except for one gem: gherkin 1.0.30. (We&#8217;re on Rails 2 for now, so we&#8217;re using cucumber 0.8.0, which uses gherkin 1.) bundle install resulted in this error: There wasn&#8217;t a serious problem with the native code, but the gcc I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=behindthefandoor.wordpress.com&amp;blog=27374284&amp;post=10&amp;subd=behindthefandoor&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I just installed our Rails application on new hardware running Ubuntu 11.10. Everything went smoothly except for one gem: gherkin 1.0.30. (We&#8217;re on Rails 2 for now, so we&#8217;re using cucumber 0.8.0, which uses gherkin 1.) <code>bundle install</code> resulted in this error:</p>
<p><pre class="brush: plain;">
/usr/lib/ruby/vendor_ruby/1.8/rubygems/installer.rb:533:in `build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)
/usr/bin/ruby1.8 extconf.rb
gcc -I. -I. -I/usr/lib/ruby/1.8/x86_64-linux -I. -fPIC -fno-strict-aliasing -g -g -O2 -fPIC -O0 -Wall -Werror -c gherkin_lexer_ar.c
/Users/aslakhellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl: In function ‘CLexer_scan’:
/Users/aslakhellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl:198:29: error: the comparison will always evaluate as ‘true’ for the address of ‘raise_lexer_error’ will never be NULL [-Werror=address]
cc1: all warnings being treated as errors
</pre></p>
<p><span id="more-10"></span>There wasn&#8217;t a serious problem with the native code, but the gcc I was using (4.6.1) had found a warning that earlier versions presumably had not &#8212; or 1.0.30 wouldn&#8217;t have compiled with -Werror.</p>
<p>The fix was easy; just remove -Werror from the compilation. (It&#8217;s in a rake task that compiles C code generated by the Ragel state machine compiler.) The trick was setting up the modified gem so bundler could use it.</p>
<p>The only way to install a modified version of a gem with native extensions that you don&#8217;t own is to use Gemfile&#8217;s :git option. (There&#8217;s also a :path option which installs a gem from a path on your filesystem, but it doesn&#8217;t compile native extensions.) So, in the including application&#8217;s Gemfile, we have</p>
<p><pre class="brush: plain;">
gem 'gherkin', '1.0.30', :git =&gt; 'git@github.com:dschweisguth/gherkin.git', :branch =&gt; 'v1.0.30-no-Werror'
</pre></p>
<p>pointing at the modified fork of gherkin.</p>
<p>What exactly needed to be modified? Although bundler can fake up a .gemspec if none is present, that .gemspec won&#8217;t compile native extensions. For native extensions to be compiled, a gem installed with :git must have its own gemspec which refers to the extensions. The native code itself must also be present in the gem, which (being generated) it is not in the original gherkin repo.</p>
<p>So I installed Ragel (with MacPorts) and the jeweler and rake-compiler gems, ran <code>rake gems:posix</code> to generate the native code and the .gemspec, removed the .gitignore entries that ignored what I&#8217;d just generated, and added the generated code to my fork. Now <code>bundle install</code> gets the native code from git and compiles it as it would if it came from a packaged gem.</p>
<p>You can look at <a href="https://github.com/dschweisguth/gherkin/tree/v1.0.30-no-Werror" target="_blank">the fork</a> to see the details. I&#8217;m not promising that it&#8217;ll be there forever, so if you need to solve this problem too, make your own fork.</p>
<p>This is probably the most trouble I ever had making a seven-character fix in a single file. Anything to keep the films rolling!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/behindthefandoor.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/behindthefandoor.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/behindthefandoor.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/behindthefandoor.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/behindthefandoor.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/behindthefandoor.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/behindthefandoor.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/behindthefandoor.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/behindthefandoor.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/behindthefandoor.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/behindthefandoor.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/behindthefandoor.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/behindthefandoor.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/behindthefandoor.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=behindthefandoor.wordpress.com&amp;blog=27374284&amp;post=10&amp;subd=behindthefandoor&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://behindthefandoor.wordpress.com/2011/09/12/installing-gherkin-from-a-git-repository-with-bundler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/48891dab622b535f3c2b4ec1c8765bed?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dschweisguth</media:title>
		</media:content>
	</item>
		<item>
		<title>Welcome to &#8230; Behind the Fan Door</title>
		<link>http://behindthefandoor.wordpress.com/2011/09/12/welcome-to-behind-the-fan-door/</link>
		<comments>http://behindthefandoor.wordpress.com/2011/09/12/welcome-to-behind-the-fan-door/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 01:42:45 +0000</pubDate>
		<dc:creator>dschweisguth</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://behindthefandoor.wordpress.com/?p=7</guid>
		<description><![CDATA[By night we watch movies; by day we assemble the tubes through which you can watch them too, on your very own Internet. We are Fandor&#8216;s engineering team. We&#8217;ll use this blog to pass along some things we&#8217;ve learned while building our software. www.fandor.com is a Rails application; we can also sometimes be found Flashing. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=behindthefandoor.wordpress.com&amp;blog=27374284&amp;post=7&amp;subd=behindthefandoor&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>By night we watch movies; by day we assemble the tubes through which you can watch them too, on your very own Internet. We are <a title="Fandor" href="http://www.fandor.com/" target="_blank">Fandor</a>&#8216;s engineering team.</p>
<p>We&#8217;ll use this blog to pass along some things we&#8217;ve learned while building our software. www.fandor.com is a Rails application; we can also sometimes be found Flashing. Soon we&#8217;ll be extending Fandor to new platforms with new engineering challenges. Hear it here first.</p>
<p>This is a work of engineering. Any resemblance to actual films, filthy or otherwise, is purely coincidental.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/behindthefandoor.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/behindthefandoor.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/behindthefandoor.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/behindthefandoor.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/behindthefandoor.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/behindthefandoor.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/behindthefandoor.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/behindthefandoor.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/behindthefandoor.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/behindthefandoor.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/behindthefandoor.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/behindthefandoor.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/behindthefandoor.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/behindthefandoor.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=behindthefandoor.wordpress.com&amp;blog=27374284&amp;post=7&amp;subd=behindthefandoor&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://behindthefandoor.wordpress.com/2011/09/12/welcome-to-behind-the-fan-door/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/48891dab622b535f3c2b4ec1c8765bed?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dschweisguth</media:title>
		</media:content>
	</item>
	</channel>
</rss>
