<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Coffee Powered &#187; Ruby</title>
	<atom:link href="http://www.coffeepowered.net/tag/ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.coffeepowered.net</link>
	<description>code and content</description>
	<lastBuildDate>Sun, 05 Sep 2010 20:38:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Quick tip: Strip URLs before parsing!</title>
		<link>http://www.coffeepowered.net/2009/03/28/quick-tip-strip-urls-before-parsing/</link>
		<comments>http://www.coffeepowered.net/2009/03/28/quick-tip-strip-urls-before-parsing/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 08:09:32 +0000</pubDate>
		<dc:creator>Chris Heald</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[parse]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[uri]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://www.coffeepowered.net/?p=170</guid>
		<description><![CDATA[Rather than roll my own URL regexes, I prefer to let the existing libraries do the heavy lifting. Ruby has a uri library which is fantastic for parsing (and validating) URLs. For example, something like this might be used in a model validation: require 'uri' def validate_url(url) parsed_uri = URI::parse(url) rescue URI::InvalidURIError errors.add :url, &#34;Sorry, [...]]]></description>
			<content:encoded><![CDATA[<p>Rather than roll my own URL regexes, I prefer to let the existing libraries do the heavy lifting. Ruby has a <code>uri</code> library which is fantastic for parsing (and validating) URLs.</p>
<p>For example, something like this might be used in a model validation:</p>
<pre class="brush: ruby;">
require 'uri'

def validate_url(url)
	parsed_uri = URI::parse(url)
rescue URI::InvalidURIError
	errors.add :url, &quot;Sorry, that doesn't look like a valid URL&quot;
end
</pre>
<p>I noticed a bit ago that I started getting invalid URL errors where there shouldn&#8217;t be any. After far too long spent in the library&#8217;s code, I realized my error: the URLs were being pasted with a trailing space. Stripping the string before attempting to parse it fixed it right up.</p>
<p>I&#8217;d argue that URI::parse should likely strip any incoming strings, but in the meantime, remember to strip your user input before trying to determine whether it&#8217;s valid or not, or you may end up with frustrated users.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coffeepowered.net/2009/03/28/quick-tip-strip-urls-before-parsing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Quick tip &#8211; use anonymous blocks!</title>
		<link>http://www.coffeepowered.net/2008/10/09/quick-tip-use-anonymous-blocks/</link>
		<comments>http://www.coffeepowered.net/2008/10/09/quick-tip-use-anonymous-blocks/#comments</comments>
		<pubDate>Fri, 10 Oct 2008 05:30:21 +0000</pubDate>
		<dc:creator>Chris Heald</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[blocks]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.coffeepowered.net/?p=75</guid>
		<description><![CDATA[In tracking down a memory leak in one of our Rails apps today, I ran across an interesting post detailing the difference between anonymous and named blocks in Ruby, and the performance differences therein. It&#8217;s definitely worth a look, especially if you&#8217;re running in a complex environment, where new closures will be large and unwieldy. [...]]]></description>
			<content:encoded><![CDATA[<p>In tracking down a memory leak in one of our Rails apps today, I ran across an <a href="http://blog.pluron.com/2008/02/rails-faster-as.html">interesting post</a> detailing the difference between anonymous and named blocks in Ruby, and the performance differences therein.</p>
<p>It&#8217;s definitely worth a look, especially if you&#8217;re running in a complex environment, where new closures will be large and unwieldy. It&#8217;s very easy, too. Any time you use:</p>
<pre class="brush: ruby;">
def note(text, options = {}, &amp;block)
  options[:class] = ((options[:class] || &quot;&quot;) + &quot; form-note&quot;).strip
  content_tag(:div, text, options, &amp;block)
end
</pre>
<p>Instead, don&#8217;t explicitly name the block parameter; just yield to it, and you prevent all the messiness of creating a new Proc object.</p>
<pre class="brush: ruby;">
def note(text, options = {})
  options[:class] = ((options[:class] || &quot;&quot;) + &quot; form-note&quot;).strip
  content_tag(:div, text, options) {|*block_args| yield(*block_args) if block_given? }
end
</pre>
<p>I don&#8217;t have benchmarks just yet, but anecdotally it has definitely slowed instance memory consumption in my apps. It&#8217;s worth taking a look at!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coffeepowered.net/2008/10/09/quick-tip-use-anonymous-blocks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Re: Simple RoR+MySQL optimization</title>
		<link>http://www.coffeepowered.net/2008/09/30/re-simple-rormysql-optimization/</link>
		<comments>http://www.coffeepowered.net/2008/09/30/re-simple-rormysql-optimization/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 21:42:44 +0000</pubDate>
		<dc:creator>Chris Heald</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[garabge collector]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[orm]]></category>

		<guid isPermaLink="false">http://www.coffeepowered.net/?p=58</guid>
		<description><![CDATA[I recently ran across a rather bare post espousing some generic &#8220;optimization&#8221; techniques for Rails apps. It offered no education, no explanation, no benchmarks. So, I thought, why not put those claims to the test? find_by_sql versus find_by_x First, Konstantin claims that Model#find_by_field is slower than Model#find_by_sql. This one is hard to dispute; the first [...]]]></description>
			<content:encoded><![CDATA[<p>I recently ran across a <a href="http://guruonrails.com/blog/simple-ror-mysql-optimization">rather bare post</a> espousing some generic &#8220;optimization&#8221; techniques for Rails apps. It offered no education, no explanation, no benchmarks. So, I thought, why not put those claims to the test?<br />
<span id="more-58"></span></p>
<h2>find_by_sql versus find_by_x</h2>
<p>First, Konstantin claims that <code>Model#find_by_field</code> is slower than <code>Model#find_by_sql</code>. This one is hard to dispute; the first will invoke method_missing and spend time generating SQL, while the latter simply executes a statement. Is cutting the knees out from under your ORM worth the time saved? Let&#8217;s see!</p>
<pre class="brush: ruby;">
require 'benchmark'

def measure_find_by_sql_vs_orm(num = 1000)
  puts &quot;find_by_sql (#{num}x)&quot;
  puts Benchmark.measure {
    num.times { User.find_by_sql &quot;select * from users where id = 123&quot; }
  }

  puts &quot;find_by_id (#{num}x)&quot;
  puts Benchmark.measure {
    num.times { User.find_by_id 123 }
  }
end

measure_find_by_sql_vs_orm(10000)
</pre>
<p>Let&#8217;s run this a few times.</p>
<pre><code>
[chris@polaris benchmarks]$ script/runner benchmark.rb
find_by_sql (10000x)
  2.290000   0.540000   2.830000 (  4.452150)
find_by_id (10000x)
  4.660000   0.400000   5.060000 (  6.766629)

[chris@polaris benchmarks]$ script/runner benchmark.rb
find_by_sql (10000x)
  2.300000   0.480000   2.780000 (  4.473950)
find_by_id (10000x)
  4.520000   0.560000   5.080000 (  6.837272)

[chris@polaris benchmarks]$ script/runner benchmark.rb
find_by_sql (10000x)
  2.170000   0.540000   2.710000 (  4.419207)
find_by_id (10000x)
  4.580000   0.540000   5.120000 (  6.881676)

find_by_sql: Averages 4.44 sec for 10,000 queries
find_by_id: Averages 6.83 sec for 10,000 queries
</code></pre>
<p>Conclusion the first: Using the ORM to build SQL adds some overhead; in my tests, 2.47 sec/10,000 queries, or 0.000247 seconds per query. Is this worth optimizing out? Yeah, probably not. In fact, the productivity lost by using <code>find_by_sql</code> is likely going to end up costing the project more.</p>
<h2>IDs and numbers in quotes</h2>
<p>Second, they claim that quoting values in your SQL statements slows down your queries. This one struck me as just a <em>little</em> out there. Let&#8217;s see what the benchmarks say.</p>
<pre class="brush: ruby;">
require 'benchmark'

def measure_select_with_quotes(num = 1000)
  puts &quot;Without quotes (#{num}x):&quot;
  db = ActiveRecord::Base.connection.instance_variable_get :@connection
  puts Benchmark.measure {
    num.times { db.query(&quot;select * from users where id = 123&quot;) {} }
  }

  puts &quot;With quotes (#{num}x):&quot;
  puts Benchmark.measure {
    num.times { db.query(&quot;select * from users where id = \&quot;123\&quot;&quot;) {} }
  }
end

measure_select_with_quotes(10000)
</pre>
<p>And the results:</p>
<pre><code>
[chris@polaris benchmarks]$ script/runner benchmark.rb
Without quotes (10000x):
  0.690000   0.340000   1.030000 (  2.639554)
With quotes (10000x):
  0.670000   0.290000   0.960000 (  2.655049)

[chris@polaris benchmarks]$ script/runner benchmark.rb
Without quotes (10000x):
  0.570000   0.320000   0.890000 (  2.654003)
With quotes (10000x):
  0.550000   0.400000   0.950000 (  2.617369)
</code></pre>
<p>Well, that&#8217;s certainly interesting. In 10,000 queries, an average difference of about 3/100ths of a second. Certainly not worth combing through your codebase as an optimization point.</p>
<p>Conclusion the second: The performance gain from quoted versus non-quoted field values is so small to be inconsequential.</p>
<p>On a side note, there is a <b>very</b> interesting subtlety here. Observe the difference between</p>
<pre class="brush: ruby;">
num.times { db.query(&quot;select * from users where id = 123&quot;) {} }
</pre>
<p>and </p>
<pre class="brush: ruby;">
num.times { db.query(&quot;select * from users where id = 123&quot;) }
</pre>
<p>The former passes the <code>Mysql::Result</code> object to a block, and frees it after the block terminates. The latter does not, and the returned <code>Mysql::Result</code> object remains in scope for the entire pass of the benchmark. This subtlety makes a massive difference.</p>
<pre class="brush: ruby;">
def measure_select_with_free(num = 1000)
  db = ActiveRecord::Base.connection.instance_variable_get :@connection

  puts &quot;Query with block, result immediately freed&quot;
  puts Benchmark.measure {
    num.times { db.query(&quot;select * from users where id = 123&quot;) {} }
  }

  puts &quot;Query without block, result remains in scope&quot;
  puts Benchmark.measure {
    num.times { db.query(&quot;select * from users where id = 123&quot;) }
  }
end
</pre>
<pre><code>
[chris@polaris benchmarks]$ script/runner benchmark.rb
Query with block, result immediately freed
  0.060000   0.040000   0.100000 (  0.267983)
Query without block, result remains in scope
  5.040000   0.050000   5.090000 (  5.266476)
</code></pre>
<p>Whoa damn. Ruby&#8217;s GC is <i>slaughtering</i> performance there. Just adding a pair of curly braces makes the benchmark run <i>20 times faster</i>.</p>
<h2>It&#8217;s better to request only specific column</h2>
<p>Finally, Konstantin mentions that selecting only specific fields from a table is faster. This is a truth in both MySQL and in the ActiveRecord ORM, for a number of reasons. However, he says that</p>
<blockquote><p>Person.find_by_name(&#8220;Name&#8221;).phone_number. It would be much faster if you use: Person.find_by_sql(&#8220;SELECT persons.phone_number WHERE persons.name = &#8216;Name&#8217;&#8221;) </p></blockquote>
<p>Why not just use the :select option that ActiveRecord provides?</p>
<pre class="brush: ruby;">
Person.find_by_name(&quot;Name&quot;, :select =&gt; &quot;phone_number&quot;)
</pre>
<p>Let&#8217;s test those assumptions.</p>
<pre class="brush: ruby;">
def measure_single_field_select(num = 1000)
  puts &quot;Find with all fields&quot;
  puts Benchmark.measure {
    num.times { User.find_by_id(123)}
  }

  puts &quot;Find with one field, with :select&quot;
  puts Benchmark.measure {
    num.times { User.find_by_id(123, :select =&gt; &quot;email&quot;)}
  }
end
</pre>
<pre><code>
[chris@polaris benchmarks]$ script/runner benchmark.rb
Find with all fields
  0.720000   0.060000   0.780000 (  0.963273)
Find with one field, with :select
  0.310000   0.010000   0.320000 (  0.364554)

[chris@polaris benchmarks]$ script/runner benchmark.rb
Find with all fields
  0.710000   0.110000   0.820000 (  1.014548)
Find with one field, with :select
  0.260000   0.020000   0.280000 (  0.351761)
</code></pre>
<p>Very significant difference there&#8230;and we didn&#8217;t have to bypass the ORM to get it, either.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coffeepowered.net/2008/09/30/re-simple-rormysql-optimization/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Stupid attachment_fu tricks, part 1</title>
		<link>http://www.coffeepowered.net/2008/09/25/stupid-attachment_fu-tricks-part-1/</link>
		<comments>http://www.coffeepowered.net/2008/09/25/stupid-attachment_fu-tricks-part-1/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 23:16:23 +0000</pubDate>
		<dc:creator>Chris Heald</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[attachment_fu]]></category>
		<category><![CDATA[imagemagick]]></category>

		<guid isPermaLink="false">http://www.coffeepowered.net/?p=27</guid>
		<description><![CDATA[attachment_fu is fantastic, but it&#8217;s a bit limited for some purposes. Ever wanted to upload data from a URL instead of making people upload files? It&#8217;s a common problem! Presume that we have a model named Image, which is our target for attachment_fu. Adding URL upload capability is surprisingly simple: class Image &#60; ActiveRecord::Base # [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://svn.techno-weenie.net/projects/plugins/attachment_fu/">attachment_fu</a> is fantastic, but it&#8217;s a bit limited for some purposes. Ever wanted to upload data from a URL instead of making people upload files? It&#8217;s a common problem!</p>
<p>Presume that we have a model named Image, which is our target for attachment_fu. Adding URL upload capability is surprisingly simple:</p>
<pre class="brush: ruby;">
class Image &lt; ActiveRecord::Base

	# Standard attachment_fu inclusion here
	has_attachment :storage =&gt; :file_system,
		:content_type =&gt; :image,
		:resize_to =&gt; &quot;1024x1024&gt;&quot;,
		:path_prefix =&gt; &quot;public/images/cache/attached&quot;,
		:format =&gt; &quot;jpg&quot;

	# Allows the direct assignment of a URL to this image, which is the source image to save from
	def url=(v)
		self.uploaded_data = UrlUpload.new(v)
	end

	# Or, we can just pass a URL to Image#uploaded_data
	def uploaded_data=(filedata_or_url)
		if filedata_or_url.is_a? String and filedata_or_url.match /^http(s)?:\/\// then
			file = open(filedata_or_url)
			file.extend(UrlUpload)
			super(file)
		else
			super(filedata_or_url)
		end
	end
end

module UrlUpload
	def filename
		base_uri.to_s.split(&quot;/&quot;).last
	end

	def original_filename
		base_uri.to_s.split(&quot;/&quot;).last
	end
end
</pre>
<p>There you go. All you need now is <code>Image.create(:url => "http://some.url/to/an/image.png")</code> and when the model is saved, the image will be sucked down and saved. Easy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coffeepowered.net/2008/09/25/stupid-attachment_fu-tricks-part-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Jabberish: making Rails talk back</title>
		<link>http://www.coffeepowered.net/2008/09/25/jabberish-making-rails-talk-back/</link>
		<comments>http://www.coffeepowered.net/2008/09/25/jabberish-making-rails-talk-back/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 11:45:49 +0000</pubDate>
		<dc:creator>Chris Heald</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[drb]]></category>
		<category><![CDATA[google talk]]></category>
		<category><![CDATA[jabber]]></category>
		<category><![CDATA[xmpp]]></category>

		<guid isPermaLink="false">http://www.coffeepowered.net/?p=19</guid>
		<description><![CDATA[Ever wanted to do IM from Rails? xmpp4r-simple makes it really easy to talk to Jabber clients (such as Google Talk users) from Ruby, but it&#8217;s not quite a cut-and-dried solution for your Rails apps. Fortunately, there&#8217;s Jabberish. Jabberish is a DRb-backed Jabber client designed for use in multi-server Rails apps. Just drop in the [...]]]></description>
			<content:encoded><![CDATA[<p>Ever wanted to do IM from Rails? <a href="http://code.google.com/p/xmpp4r-simple/">xmpp4r-simple</a> makes it really easy to talk to Jabber clients (such as <a href="http://www.google.com/talk/">Google Talk</a> users) from Ruby, but it&#8217;s not quite a cut-and-dried solution for your Rails apps. Fortunately, there&#8217;s <a href="http://github.com/cheald/jabberish/tree/master">Jabberish</a>.</p>
<p>Jabberish is a DRb-backed Jabber client designed for use in multi-server Rails apps. Just drop in the plugin, configure, start the daemon, and off you go.</p>
<p>Installation is painless, as you&#8217;d expect.</p>
<pre><code> script/plugin install git://github.com/cheald/jabberish.git</code></pre>
<p>Jabberish calls in your code will fail silently if the Jabberish DRb process isn&#8217;t running, so if the daemon goes missing, it won&#8217;t bring your app crashing down around your shoulders &#8211; you just won&#8217;t get IMs.</p>
<p>Once it&#8217;s installed, it&#8217;s very easy to get it up and running.</p>
<ol>
<li>Pop open <code>config/jabberish.yml</code> and set your preferences as you best see fit.</li>
<li>run <code>rake jabberish:start</code> &#8211; this will start up your DRb daemon, and connect to your configured account to your Jabber network</li>
<li>Call Jabberish from your code!</li>
</ol>
<pre class="brush: ruby;">
JabberishAgent.deliver(&quot;your-email@gmail.com&quot;, &quot;Hi there!&quot;)
</pre>
<p>There are many potential applications. For example, to send yourself IMs when your app has an error, in application.rb:</p>
<pre class="brush: ruby;">
def rescue_action(e)
  # The third parameter is &quot;throttle&quot;, which will cause Jabberish to refuse
  # to send the same message to a given recipient twice in a row
  msg = sprintf(&quot;[#%s] %s (%s)&quot;, Time.now.to_i, e, e.backtrace.first)
  JabberishAgent.deliver(&quot;your-email@gmail.com&quot;, msg, true)
end
</pre>
<p>And lickety split, you&#8217;re IMing error reports to yourself in realtime. I&#8217;m sure others will find much more interesting things to do with it!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coffeepowered.net/2008/09/25/jabberish-making-rails-talk-back/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>site_config &#8211; painless custom configuration for your Rails project</title>
		<link>http://www.coffeepowered.net/2008/09/25/site_config-painless-config-variables-for-rails-projects/</link>
		<comments>http://www.coffeepowered.net/2008/09/25/site_config-painless-config-variables-for-rails-projects/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 11:31:59 +0000</pubDate>
		<dc:creator>Chris Heald</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.coffeepowered.net/?p=14</guid>
		<description><![CDATA[site_config is a little plugin that addresses a problem lots of people seem to need to solve in their Rails apps: per-environment configuration variables. It&#8217;s very simple, but makes configuration dead-easy. To install it: script/plugin install git://github.com/cheald/site_config.git Once you have it installed, check out config/site_config.yml &#8211; there&#8217;s your config file. You&#8217;ll notice that it has [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://github.com/cheald/site_config/tree/master">site_config</a> is a little plugin that addresses a problem lots of people seem to need to solve in their Rails apps: per-environment configuration variables.</p>
<p>It&#8217;s very simple, but makes configuration dead-easy. To install it:</p>
<pre><code>script/plugin install git://github.com/cheald/site_config.git</code></pre>
<p>Once you have it installed, check out <code>config/site_config.yml</code> &#8211; there&#8217;s your config file.</p>
<p>You&#8217;ll notice that it has some dummy data in there to begin with. It&#8217;s much like your <code>database.yml</code> file; just specify the environment, and under that, specify the key:value pairs you want to have available in your app. site_config has one little trick up its sleeve, though &#8211; the key &#8220;inherit&#8221; is special, and tells it to pull values from another environment. This helps you DRY up your configs, and makes it quite easy to maintain.</p>
<p>For example, if you had the following <code>site_config.yml</code>:</p>
<pre class="brush: ruby;">
development:
  page_title: &quot;my development site&quot;
  admin_user: chris

production:
  inherit: development
  page_title: &quot;my production site&quot;
</pre>
<p>You can then use those configured values in your site like so:</p>
<pre class="brush: xml;">
&lt;title&gt;&lt;%=config_option :page_title %&gt;&lt;/title&gt;
Your friendly admin is &lt;%=config_option :admin_user %&gt;
</pre>
<p>site_config will pull values defined for your current environment. If you don&#8217;t have a value defined for a given environment, but do have an <code>inherit</code> defined, site_config will then look to the inherited config to pull values from.</p>
<p>Additionally, if you want a value from a specific environment, <code>config_option</code> accepts a second parameter, which specifies the environment to pull from.</p>
<pre class="brush: ruby;">
config_option :page_title, :development
</pre>
<p>There&#8217;s more at the github page. Check it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coffeepowered.net/2008/09/25/site_config-painless-config-variables-for-rails-projects/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using memcached
Page Caching using memcached
Database Caching 10/18 queries in 0.011 seconds using memcached

Served from: www.coffeepowered.net @ 2010-09-09 10:36:04 -->