<?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>Ruby Inside</title>
	
	<link>http://www.rubyinside.com</link>
	<description />
	<lastBuildDate>Fri, 06 Nov 2009 14:04:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</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" href="http://feeds.feedburner.com/RubyInside" type="application/rss+xml" /><feedburner:emailServiceId>RubyInside</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Jekyll: A Ruby-Powered Static Site Generator</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/u5ftlrkDeEg/jekyll-a-ruby-powered-static-site-generator-2716.html</link>
		<comments>http://www.rubyinside.com/jekyll-a-ruby-powered-static-site-generator-2716.html#comments</comments>
		<pubDate>Thu, 05 Nov 2009 21:34:22 +0000</pubDate>
		<dc:creator>Ric Roberts</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/?p=2716</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/11/jekyll.jpg" alt="jekyll" style="float:left; margin-right:12px; margin-bottom:12px" /><a href="http://github.com/mojombo/jekyll">Jekyll</a> is a simple Ruby-powered static site generator, originally by <a href="http://tom.preston-werner.com/">Tom Preston-Werner</a> (aka <em><a href="http://wiki.github.com/mojombo/">mojombo</a></em>) of Github fame.  It's focused around blogging, but it can be configured to generate any kind of static site.  <em>(Note: Jekyll has been around for about a year - <a href="http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html">Tom originally blogged about</a> it in November last year, so apologies if this is old news to some readers, but I've only recently discovered it!)</em></p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/11/jekyll.jpg" alt="jekyll" style="float:left; margin-right:12px; margin-bottom:12px" /><a href="http://github.com/mojombo/jekyll">Jekyll</a> is a simple Ruby-powered static site generator, originally by <a href="http://tom.preston-werner.com/">Tom Preston-Werner</a> (aka <em><a href="http://wiki.github.com/mojombo/">mojombo</a></em>) of Github fame.  It's focused around blogging, but it can be configured to generate any kind of static site.  <em>(Note: Jekyll has been around for about a year - <a href="http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html">Tom originally blogged about</a> it in November last year, so apologies if this is old news to some readers, but I've only recently discovered it!)</em></p>
<p>Because Jekyll outputs a static site structure, it means you can host your blog (or site) from anywhere that you can serve static HTML, simply by using your favourite web server (e.g. Apache).  As Tom describes in his blog post, the idea came from wanting to be able to "Blog like a Hacker".  Jekyll lets you write from the comfort of your favourite text editor, and publish from the command line. Using familiar tools reduces the cognitive load involved with publishing a blog, and lets you focus on what you're writing. It doesn't hurt that even a pretty weak Web server could stand a pounding if it's just serving static files!</p>
<p>By default, Jekyll uses its own (slightly modified) flavour of <a href="http://github.com/tobi/liquid/">Liquid</a> templates, with help from <a href="http://pygments.org/">pygments</a> for syntax highlighting, and you can use textile or markdown for the content.  Each Jekyll blog article template needs a <a href="http://wiki.github.com/mojombo/jekyll/yaml-front-matter">header</a> containing some metadata about that article, such as what layout to use, the article's title, and any custom information you want to provide (such as tags for that article).</p>
<p>Generating your site is easy: just running the <code>jekyll</code> command turns your directory of templates into a complete website, ready to serve.  There's a Jekyll server that you can use for testing (passing <code>--auto</code> as an argument means it will automatically regenerate the site when things are changed).</p>
<pre>
jekyll --server --auto
</pre>
<p><em><a href="http://pages.github.com/">Github Pages</a></em> provides a neat way to publish your Jekyll-generated site.  Every Github page is actually run through Jekyll when you push content to your pages repo (this works because a normal static site is also a valid Jekyll site).</p>
<p>The easiest way to get started with Jekyll is by installing the gem (which is <a href="http://gemcutter.org/gems/jekyll">available on Gemcutter</a>), and checking out the <a href="http://wiki.github.com/mojombo/jekyll">wiki</a> on Github, where there's some great documentation.</p>
<pre>
sudo gem install jekyll
</pre>
<p>As you might expect, <a href="http://tom.preston-werner.com/">Tom Preson-Werner's personal blog</a> runs on Jekyll.  Its source is <a href="http://github.com/mojombo/tpw">publicly available on Github</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=u5ftlrkDeEg:ZeXmuOgi24w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=u5ftlrkDeEg:ZeXmuOgi24w:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=u5ftlrkDeEg:ZeXmuOgi24w:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=u5ftlrkDeEg:ZeXmuOgi24w:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=u5ftlrkDeEg:ZeXmuOgi24w:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=u5ftlrkDeEg:ZeXmuOgi24w:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=u5ftlrkDeEg:ZeXmuOgi24w:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/u5ftlrkDeEg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/jekyll-a-ruby-powered-static-site-generator-2716.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/jekyll-a-ruby-powered-static-site-generator-2716.html</feedburner:origLink></item>
		<item>
		<title>Thinking Functionally In Ruby – A Great Presentation by Tom Stuart</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/Z7Jr7EnuAWs/functional-programming-in-ruby-2713.html</link>
		<comments>http://www.rubyinside.com/functional-programming-in-ruby-2713.html#comments</comments>
		<pubDate>Tue, 03 Nov 2009 14:04:51 +0000</pubDate>
		<dc:creator>Peter Cooper</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[Elsewhere]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/functional-programming-in-ruby-2713.html</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/11/thinkfunc.png" width="110" height="107" alt="thinkfunc.png" style="float:left; margin-right:12px; margin-bottom:12px;" /><a href="http://skillsmatter.com/podcast/ajax-ria/enumerators">Thinking Functionally in Ruby</a> is a talk that British Ruby developer Tom Stuart gave at a recent <a href="http://lrug.org/">London Ruby Users Group</a> meeting. In it he covers what functional programming is, why it's a "pretty neat idea," and how to adopt <a href="http://en.wikipedia.org/wiki/Functional_programming">functional programming</a> principles in Ruby. Skills Matter took <a href="http://skillsmatter.com/podcast/ajax-ria/enumerators">a video of the entire 47 minute presentation</a> <i>(it's embedded on the right hand side of that page - Flash required.. just been told it might be limited to UK visitors only, if so <a href="http://experthuman.com/files/thinking-functionally-in-ruby.mp4">get the original MP4 file</a>)</i> but there's also <a href="http://experthuman.com/files/thinking-functionally-in-ruby.pdf">a 110 page PDF</a> <i>(1.5MB download)</i> you should have to hand too (with Tom's slides).</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/11/thinkfunc.png" width="110" height="107" alt="thinkfunc.png" style="float:left; margin-right:12px; margin-bottom:12px;" /><a href="http://skillsmatter.com/podcast/ajax-ria/enumerators">Thinking Functionally in Ruby</a> is a talk that British Ruby developer Tom Stuart gave at a recent <a href="http://lrug.org/">London Ruby Users Group</a> meeting. In it he covers what functional programming is, why it's a "pretty neat idea," and how to adopt <a href="http://en.wikipedia.org/wiki/Functional_programming">functional programming</a> principles in Ruby. Skills Matter took <a href="http://skillsmatter.com/podcast/ajax-ria/enumerators">a video of the entire 47 minute presentation</a> <i>(it's embedded on the right hand side of that page - Flash required.. just been told it might be limited to UK visitors only, if so <a href="http://experthuman.com/files/thinking-functionally-in-ruby.mp4">get the original MP4 file</a>)</i> but there's also <a href="http://experthuman.com/files/thinking-functionally-in-ruby.pdf">a 110 page PDF</a> <i>(1.5MB download)</i> you should have to hand too (with Tom's slides).</p>
<p><a href="http://skillsmatter.com/podcast/ajax-ria/enumerators"><img src="http://www.rubyinside.com/wp-content/uploads/2009/11/minecode.png" width="640" height="485" alt="minecode.png" /></a></p>
<p>I don't like to link to individual presentations on Ruby Inside too often, but in spite of poor audio quality on the video, Tom's presentation is top notch (the slides are particularly good) and Tom covers some interesting topics that I think Ruby developers could do with revising. If you've wanted to stay on the functional bandwagon but have found yourself slipping into <a href="http://en.wikipedia.org/wiki/Imperative_programming">imperative</a> ways where you shouldn't, this presentation is well worth a watch.</p>
<p style="background-color:#ffd;padding:8px;font-family:verdana;font-size:12px"><a href="http://devver.net/caliper" rel="nofollow"><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/caliper-logo.png" width="98" height="42" alt="caliper-logo.png" style="float:right; margin-bottom:8px; margin-left:12px;" /></a><em>[ad]</em> Find duplication, code smells, complex code and more in your Ruby code with <a href="http://devver.net/caliper" rel="nofollow">Caliper!</a> The metrics are free and setup takes just one click. <a href="http://devver.net/caliper" rel="nofollow">Get started!</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=Z7Jr7EnuAWs:mK9FXSO2HAw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=Z7Jr7EnuAWs:mK9FXSO2HAw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=Z7Jr7EnuAWs:mK9FXSO2HAw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=Z7Jr7EnuAWs:mK9FXSO2HAw:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=Z7Jr7EnuAWs:mK9FXSO2HAw:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=Z7Jr7EnuAWs:mK9FXSO2HAw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=Z7Jr7EnuAWs:mK9FXSO2HAw:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/Z7Jr7EnuAWs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/functional-programming-in-ruby-2713.html/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
<enclosure url="http://experthuman.com/files/thinking-functionally-in-ruby.mp4" length="97618311" type="video/mp4" />
		<feedburner:origLink>http://www.rubyinside.com/functional-programming-in-ruby-2713.html</feedburner:origLink></item>
		<item>
		<title>Riot: for fast, expressive and focused unit tests</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/tfL7w9XuFZ0/riot-for-fast-expressive-and-focused-unit-tests-2669.html</link>
		<comments>http://www.rubyinside.com/riot-for-fast-expressive-and-focused-unit-tests-2669.html#comments</comments>
		<pubDate>Sat, 31 Oct 2009 16:57:28 +0000</pubDate>
		<dc:creator>Ric Roberts</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/?p=2669</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/justin.jpg" alt="Justin" style="float:left; margin-right:12px; margin-bottom:12px;"/><a href="http://github.com/thumblemonks/riot">Riot</a> is a new Ruby test framework by <a href="http://twitter.com/jaknowlden">Justin Knowlden</a> that focuses on <em>faster</em> testing.  Justin was frustrated with his slow running test suites, despite employing techniques such as using factories, mocks and avoiding database access.  He realized that a slow-running suite makes one reluctant to run it or expand it - not good.</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/justin.jpg" alt="Justin" style="float:left; margin-right:12px; margin-bottom:12px;"/><a href="http://github.com/thumblemonks/riot">Riot</a> is a new Ruby test framework by <a href="http://twitter.com/jaknowlden">Justin Knowlden</a> that focuses on <em>faster</em> testing.  Justin was frustrated with his slow running test suites, despite employing techniques such as using factories, mocks and avoiding database access.  He realized that a slow-running suite makes one reluctant to run it or expand it - not good.</p>
<p>With Riot, each test consists of a block which forms a single assertion on the <code>topic</code> of the test, keeping the tests focused. Tests run in a specific <code>context</code>, and the <code>setup</code> code is only run once per context, further contributing to the speed of your test suite, and unlike some Ruby test frameworks, such as <a href="http://www.thoughtbot.com/projects/shoulda/">Shoulda</a>, that rely on or are based on Test::Unit, Riot has taken a new approach for speed purposes. In Justin's own comparisons, Riot comes out about twice as fast as Test::Unit.  </p>
<p>Here's an example Riot test (from the README):</p>
<pre>
context "a new user" do
  setup { User.new(:email => 'foo@bar.com') }
  asserts("email address") { topic.email }.equals('foo@bar.com')
end
</pre>
<p>Riot's comprehensive <a href="http://github.com/thumblemonks/riot/blob/master/README.markdown">README</a> also includes lots of examples and details on how to modify your Rakefile to run your Riot test suite in different frameworks.  The full documentation is available online <a href="http://rdoc.info/projects/thumblemonks/riot">here</a>.</p>
<p>You can install Riot as a gem from <a href="http://gemcutter.org/">Gemcutter</a>:</p>
<pre>
sudo gem sources -a http://gemcutter.org
sudo gem install riot
</pre>
<p>Justin also has a spin-off project called <a href="http://github.com/thumblemonks/riot_rails">Riot Rails</a>, which includes some Rails-related macros for testing your Ruby On Rails code, and <a href="http://alexyoung.org/">Alex Young</a> has written a <a href="http://github.com/alexyoung/riotjs">Javascript port of Riot</a> which is worth checking out too. He also <a href="http://alexyoung.org/2009/10/26/riot-testing/">has his own look at Riot</a> and demonstrates how Riot can reduce redundancy in tests.</p>
<p style="background-color:#ffd;padding:8px;font-family:verdana;font-size:12px"><a href="http://www.codebasehq.com/?utm_source=rubyinside&amp;utm_medium=footer&amp;utm_campaign=sep09" rel="nofollow"><img src="http://www.rubyinside.com/wp-content/uploads/2009/09/CodebaseLogo-RI.png" width="118" height="37" style="float: right; margin-left: 12px; margin-bottom: 12px" alt="CodebaseLogo-RI.png" /></a><em>[ad]</em> <a href="http://www.codebasehq.com/?utm_source=rubyinside&amp;utm_medium=footer&amp;utm_campaign=sep09" rel="nofollow"><b>Codebase</b></a> is a fast &amp; reliable <b>git, mercurial &amp; subversion hosting</b> service with complete project management built-in - ticketing, milestones, wikis &amp; time tracking - all under one roof. <a href="http://www.codebasehq.com/?utm_source=rubyinside&amp;utm_medium=footer&amp;utm_campaign=sep09" rel="nofollow">Click here to try it - free.</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=tfL7w9XuFZ0:sMu09AKRh08:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=tfL7w9XuFZ0:sMu09AKRh08:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=tfL7w9XuFZ0:sMu09AKRh08:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=tfL7w9XuFZ0:sMu09AKRh08:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=tfL7w9XuFZ0:sMu09AKRh08:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=tfL7w9XuFZ0:sMu09AKRh08:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=tfL7w9XuFZ0:sMu09AKRh08:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/tfL7w9XuFZ0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/riot-for-fast-expressive-and-focused-unit-tests-2669.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/riot-for-fast-expressive-and-focused-unit-tests-2669.html</feedburner:origLink></item>
		<item>
		<title>Heroku Gets Add-Ons: Serious Ruby Webapp Hosting Made Easy</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/1-3-gJPb35c/heroku-gets-add-ons-serious-ruby-webapp-hosting-made-easy-2664.html</link>
		<comments>http://www.rubyinside.com/heroku-gets-add-ons-serious-ruby-webapp-hosting-made-easy-2664.html#comments</comments>
		<pubDate>Wed, 28 Oct 2009 15:33:10 +0000</pubDate>
		<dc:creator>Peter Cooper</dc:creator>
				<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/heroku-gets-add-ons-serious-ruby-webapp-hosting-made-easy-2664.html</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/heroku.png" width="123" height="59" alt="heroku.png" style="float:left; margin-right:12px; margin-bottom:12px;" /><a href="http://heroku.com/">Heroku</a> is a Ruby webapp hosting service that <a href="http://www.rubyinside.com/heroku-an-online-rails-development-and-app-hosting-environment-647.html">we first mentioned</a> about two years ago. It started off as an online IDE of sorts, but is now a complete cloud platform for running Ruby webapps. You can develop locally and then, with a single command, deploy your app to their metered service. Well, Heroku got in touch with me last week to talk about <a href="http://addons.heroku.com/">their new "Add-Ons" feature</a> and they've really kicked things up a notch for people wanting to quickly roll out webapps online.</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/heroku.png" width="123" height="59" alt="heroku.png" style="float:left; margin-right:12px; margin-bottom:12px;" /><a href="http://heroku.com/">Heroku</a> is a Ruby webapp hosting service that <a href="http://www.rubyinside.com/heroku-an-online-rails-development-and-app-hosting-environment-647.html">we first mentioned</a> about two years ago. It started off as an online IDE of sorts, but is now a complete cloud platform for running Ruby webapps. You can develop locally and then, with a single command, deploy your app to their metered service. Well, Heroku got in touch with me last week to talk about <a href="http://addons.heroku.com/">their new "Add-Ons" feature</a> and they've really kicked things up a notch for people wanting to quickly roll out webapps online.</p>
<p>Till now, Heroku has provided basic functionality on a semi-metered basis. You pay a monthly fee for a basic rate of service and then pay an hourly rate for more concurrency. Now, you can also add on a bunch of other features which Heroku are calling "Add-ons." Here are just a few of the more interesting ones:</p>
<ul>
<li><a href="http://aws.amazon.com/rds/"><b>Amazon RDS</b></a> <b>(Relational Database Service)</b> - This add-on is free from Heroku's point of view but you'll be paying Amazon.</li>
<li><b>Bundles</b> - A "snapshot" type backup system. You get a single bundle for free or can pay $20 for unlimited bundles.</li>
<li><b>Cron</b> - Daily and hourly crons can be set up with a couple of clicks.</li>
<li><b>Memcached</b> - You can boost your app's performance with in-memory caching provided by Memcached. The key here is that Heroku totally manages the Memcached instance - no server setup needed, etc. Currently this feature is only in private beta though..</li>
<li><b>New Relic</b> - Most readers should be familiar with <a href="http://www.newrelic.com/">New Relic</a>'s application performance tools by now and Heroku makes it easy to get them running directly on your Heroku-hosted apps. (As an aside, New Relic rolled out <a href="http://blog.newrelic.com/2009/10/19/announcing-new-relic-rpm-version-2-with-enhanced-ui-support-for-java-hourly-billing-option-and-more/">a significant update</a> last week - version 2 of their flagship RPM system.)</li>
<li><b>SSL</b> - Get https:// URLs on your Heroku app with a choice between piggyback SSL (free), SNI SSL ($5 per month) or full-blown custom SSL ($100 per month).</li>
<li><b>Websolr</b> - A no-setup-needed Solr instance so you can get quick and easy full text indexing and search functionality in your apps.</li>
</ul>
<p><i>Note: You can learn more about all the different Add-ons at Heroku's dedicated</i> <a href="http://addons.heroku.com/"><i>Add-ons page</i></a><i>.</i></p>
<h3>Impressive but Expensive?</h3>
<p>As impressive as Heroku's one-command-deploy and add-ons features are, though, I can't quite put my finger on Heroku's market - they're kinda pricey. Perhaps it'd be good for professional developers who want to do a test deployment of an app on a live server without getting mired in server configuration?</p>
<p>For full time use, Heroku doesn't strike me as very competitive. For example, for the "Crane" 500MB storage option (billed as <i>"perfect for a small biz app"</i>) with the recommended 4 "Dynos" the fee comes to an estimated $158 per month, and that's without any add-ons. For the entry level "dedicated" option with the recommended 8 dynos, the cost goes to $452.</p>
<p>Despite the cost, though, what Heroku offers is a very simple "no hassles" hosting service that, crucially, can handle significant workloads. You could rig up something similar with VPSes, dedicated boxes elsewhere, or even Amazon EC2, but you're going to be spending time doing server configuration. If playing sysadmin isn't tricky for you (I enjoy it, personally), Heroku might not be for you and you should be looking at companies like <a href="http://www.webbynode.com/">Webbynode</a> or <a href="http://www.linode.com/">Linode.</a> But if you're just a 100% developer who wants to get something up and running and doesn't want to worry about scalability too much, Heroku could be worth the extra expense.</p>
<p><strong>Update: Oren Teich of Heroku got in touch with some notes regarding Heroku's value proposition versus the comparisons I made above. I quote verbatim:</strong></p>
<p>
<blockquote> I wanted to point out that we have many users running huge sites on the free version, serving up hundreds of thousands of hits per month, and that they pricing is deceptive - for that $150 you get an AMAZINGLY high powered service, capable of serving >10 millions requests per day.</p>
<p>We don't do a great job right now of making it clear just how powerful a single dyno is, or what you get with the platform.  We're working on improving the pricing to be clearer.  In the meantime, getting the right message out on this is really important to us.</p>
<p>Also keep in mind, that the DB pricing is for DB usage only - it doesn't include your code, files on disk, etc.  That said, we know we need to right size the DB pricing, but it's amazing how far 500, or even 50 MB of pure DB usage will take you.</p>
<p>Heroku has many users running huge sites on the free version, serving up hundreds of thousands of hits per month.  The pricing can be deceptive, for that $150 you get an AMAZINGLY high powered service, capable of serving >10 millions requests per day.</p></blockquote>
<p>He also noted that there's no charge for bandwidth, although there are some soft limits that haven't been hit by any users yet.</p>
<p><em>Disclaimer: Webbynode and Linode are currently Ruby Inside sponsors. Heroku, however, has no financial connection with Ruby Inside and vice versa.</em></p>
<p style="background-color:#ffd;padding:8px;font-family:verdana;font-size:12px"><a href="http://devver.net/caliper" rel="nofollow"><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/caliper-logo.png" width="98" height="42" alt="caliper-logo.png" style="float:right; margin-bottom:8px; margin-left:12px;" /></a><em>[ad]</em> Find duplication, code smells, complex code and more in your Ruby code with <a href="http://devver.net/caliper" rel="nofollow">Caliper!</a> The metrics are free and setup takes just one click. <a href="http://devver.net/caliper" rel="nofollow">Get started!</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=1-3-gJPb35c:q1C9Q9xW9uA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=1-3-gJPb35c:q1C9Q9xW9uA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=1-3-gJPb35c:q1C9Q9xW9uA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=1-3-gJPb35c:q1C9Q9xW9uA:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=1-3-gJPb35c:q1C9Q9xW9uA:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=1-3-gJPb35c:q1C9Q9xW9uA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=1-3-gJPb35c:q1C9Q9xW9uA:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/1-3-gJPb35c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/heroku-gets-add-ons-serious-ruby-webapp-hosting-made-easy-2664.html/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/heroku-gets-add-ons-serious-ruby-webapp-hosting-made-easy-2664.html</feedburner:origLink></item>
		<item>
		<title>Gemcutter Is The New Official Default RubyGem Host</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/WXttnvaFy84/gemcutter-is-the-new-official-default-rubygem-host-2659.html</link>
		<comments>http://www.rubyinside.com/gemcutter-is-the-new-official-default-rubygem-host-2659.html#comments</comments>
		<pubDate>Mon, 26 Oct 2009 23:48:01 +0000</pubDate>
		<dc:creator>Peter Cooper</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/gemcutter-is-the-new-official-default-rubygem-host-2659.html</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/rubygems.png" width="113" height="113" alt="rubygems.png" style="float:left; margin-right:12px; margin-bottom:12px;" />Just two months ago <a href="http://www.rubyinside.com/gemcutter-a-fast-and-easy-approach-to-ruby-gem-hosting-2281.html">we posted about Gemcutter</a>, a new RubyGem hosting repository that, we said, was <i>"taking aim at <a href="http://rubyforge.org/">RubyForge</a> and <a href="https://github.com/">GitHub</a>."</i> It only took six weeks <a href="http://github.com/blog/515-gem-building-is-defunct">for GitHub to give up on building gems</a> and to start recommending Gemcutter instead. Today, RubyForge is toppled also. Gemcutter developer Nick Quaranto has <a href="http://update.gemcutter.org/2009/10/26/transition.html">announced that Ruby Central has given the thumbs up</a> to replacing <code>http://gems.rubyforge.org/</code> with <code>http://rubygems.org/</code> (the new Gemcutter URL) as the default gem host in RubyGems.</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/rubygems.png" width="113" height="113" alt="rubygems.png" style="float:left; margin-right:12px; margin-bottom:12px;" />Just two months ago <a href="http://www.rubyinside.com/gemcutter-a-fast-and-easy-approach-to-ruby-gem-hosting-2281.html">we posted about Gemcutter</a>, a new RubyGem hosting repository that, we said, was <i>"taking aim at <a href="http://rubyforge.org/">RubyForge</a> and <a href="https://github.com/">GitHub</a>."</i> It only took six weeks <a href="http://github.com/blog/515-gem-building-is-defunct">for GitHub to give up on building gems</a> and to start recommending Gemcutter instead. Today, RubyForge is toppled also. Gemcutter developer Nick Quaranto has <a href="http://update.gemcutter.org/2009/10/26/transition.html">announced that Ruby Central has given the thumbs up</a> to replacing <code>http://gems.rubyforge.org/</code> with <code>http://rubygems.org/</code> (the new Gemcutter URL) as the default gem host in RubyGems.</p>
<p>The transition from RubyForge to Gemcutter/RubyGems.org isn't an overnight deal and gem publishing from RubyForge will continue to work for the time being, but within the next couple of months, RubyForge accounts will be merged with Gemcutter and an update will be made to change the canonical gem source (though, of course, you can use Gemcutter already if you like by following <a href="http://gemcutter.org/">their instructions</a>).</p>
<p>What all of this means for you as a Ruby developer is that if you want to release your own RubyGems (or "gems") in future, things will become a lot easier. Gemcutter, if you haven't checked it out, is definitely a refined evolution in terms of gem hosting - you can "push" a built gem to their server with a single command. If you want to learn how, check out <a href="http://railscasts.com/episodes/183-gemcutter-jeweler">Ryan Bates' awesome Gemcutter &amp; Jeweler screencast</a> that demonstrates how to create a gem and deploy it with Gemcutter.</p>
<p style="background-color:#ffd;padding:8px;font-family:verdana;font-size:12px"><a href="http://www.codebasehq.com/?utm_source=rubyinside&amp;utm_medium=footer&amp;utm_campaign=sep09" rel="nofollow"><img src="http://www.rubyinside.com/wp-content/uploads/2009/09/CodebaseLogo-RI.png" width="118" height="37" style="float: right; margin-left: 12px; margin-bottom: 12px" alt="CodebaseLogo-RI.png" /></a><em>[ad]</em> <a href="http://www.codebasehq.com/?utm_source=rubyinside&amp;utm_medium=footer&amp;utm_campaign=sep09" rel="nofollow"><b>Codebase</b></a> is a fast &amp; reliable <b>git, mercurial &amp; subversion hosting</b> service with complete project management built-in - ticketing, milestones, wikis &amp; time tracking - all under one roof. <a href="http://www.codebasehq.com/?utm_source=rubyinside&amp;utm_medium=footer&amp;utm_campaign=sep09" rel="nofollow">Click here to try it - free.</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=WXttnvaFy84:xAoa18UTnDg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=WXttnvaFy84:xAoa18UTnDg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=WXttnvaFy84:xAoa18UTnDg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=WXttnvaFy84:xAoa18UTnDg:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=WXttnvaFy84:xAoa18UTnDg:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=WXttnvaFy84:xAoa18UTnDg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=WXttnvaFy84:xAoa18UTnDg:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/WXttnvaFy84" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/gemcutter-is-the-new-official-default-rubygem-host-2659.html/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/gemcutter-is-the-new-official-default-rubygem-host-2659.html</feedburner:origLink></item>
		<item>
		<title>Boson: A Next Generation Task Framework for Ruby</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/XIxknT4pR3k/boson-a-next-generation-task-framework-for-ruby-2657.html</link>
		<comments>http://www.rubyinside.com/boson-a-next-generation-task-framework-for-ruby-2657.html#comments</comments>
		<pubDate>Thu, 22 Oct 2009 21:02:17 +0000</pubDate>
		<dc:creator>Peter Cooper</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/boson-a-next-generation-task-framework-for-ruby-2657.html</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/boson.png" width="103" height="104" alt="boson.png" style="float:left; margin-right:12px; margin-bottom:12px;" /><a href="http://tagaholic.me/2009/10/14/boson-command-your-ruby-universe.html">Boson</a> is a new command/task framework for Ruby by Gabriel Horner (of <a href="http://www.rubyinside.com/hirb-an-easy-to-use-view-framework-for-irb-1853.html">Hirb</a> fame). Gabriel seems to be trying to supersede <a href="http://rake.rubyforge.org/">Rake</a>, the Ruby "make" equivalent, and from first glance Boson seems to provide many benefits from the "reinvent the wheel" philosophy.</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/boson.png" width="103" height="104" alt="boson.png" style="float:left; margin-right:12px; margin-bottom:12px;" /><a href="http://tagaholic.me/2009/10/14/boson-command-your-ruby-universe.html">Boson</a> is a new command/task framework for Ruby by Gabriel Horner (of <a href="http://www.rubyinside.com/hirb-an-easy-to-use-view-framework-for-irb-1853.html">Hirb</a> fame). Gabriel seems to be trying to supersede <a href="http://rake.rubyforge.org/">Rake</a>, the Ruby "make" equivalent, and from first glance Boson seems to provide many benefits from the "reinvent the wheel" philosophy.</p>
<p>Anyone who's built a Rakefile knows it's not the most straightforward syntax, so Boson's approach of using regular Ruby code in the shape of methods added to a module is refreshing. Tasks are methods, methods are tasks - simple. Within these methods, you can use the <code>options</code> helper method and passed arguments to access command line options and other data. Another feature is that while, like with Rake (or Thor), Boson can execute commands from the command line, you can <i>also</i> do so from IRB (the Ruby "console").</p>
<p>It's always a bit of a crapshoot when new tools come out in the Ruby world. Some catch on, some don't. Gabriel has clearly put a lot of thought into Boson, though, so if enough people are fed up with using Rake for command launching, I think it could catch on. <a href="http://tagaholic.me/2009/10/14/boson-command-your-ruby-universe.html">Gabriel's blog post</a> outlines what Boson does perfectly. For those ready to shoot down Rake, though, don't forget to read <a href="http://www.jbarnette.com/2009/08/27/on-rake.html">John Barnette's awesome, recent <i>On Rake</i> post.</a> Rake's not just about launching tasks - it's a killer dependency resolution engine at heart, and that can result in less code if you approach your problems the right way.</p>
<p><em>(Aside: Sorry for the slow week at Ruby Inside. Six days ago my wife gave birth to our daughter and since she had a C-section, I'm playing housewife. I have quickly discovered if you're a housewife - or husband! - you have about zero hours left at the end of the day to do any other work.. I shall try my best!)</em></p>
<p style="background-color:#ffd;padding:8px;font-family:verdana;font-size:12px"><a href="http://mobileorchard.com/training?inside"; rel="nofollow"><img src="http://www.rubyinside.com/wp-content/uploads/2009/06/rupho.png"; width="74" height="40" alt="rupho.png" style="float:left; margin-right:12px;" /></a><em>[ad]</em> <strong>Mobile Orchard's <a href="http://mobileorchard.com/training?inside">from Rubyist to iPhone programmer in 2 days class</a></strong> is coming to Portland/OR Nov 12-13 and Los Angeles/CA Nov 19-20. <del>$1200</del> $799 with early reg and "inside" discount code. <em>Note that the early registration price ends tomorrow - 10/23!</em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=XIxknT4pR3k:J4rJdwzPf_s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=XIxknT4pR3k:J4rJdwzPf_s:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=XIxknT4pR3k:J4rJdwzPf_s:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=XIxknT4pR3k:J4rJdwzPf_s:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=XIxknT4pR3k:J4rJdwzPf_s:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=XIxknT4pR3k:J4rJdwzPf_s:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=XIxknT4pR3k:J4rJdwzPf_s:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/XIxknT4pR3k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/boson-a-next-generation-task-framework-for-ruby-2657.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/boson-a-next-generation-task-framework-for-ruby-2657.html</feedburner:origLink></item>
		<item>
		<title>21 Rack Middlewares To Turbocharge Your Ruby Webapps</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/nBom6daZqy4/21-rack-middlewares-2649.html</link>
		<comments>http://www.rubyinside.com/21-rack-middlewares-2649.html#comments</comments>
		<pubDate>Wed, 14 Oct 2009 17:28:43 +0000</pubDate>
		<dc:creator>Peter Cooper</dc:creator>
				<category><![CDATA[Compilation Posts]]></category>
		<category><![CDATA[Elsewhere]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/21-rack-middlewares-2649.html</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/rack-logo.png" width="132" height="68" alt="rack-logo.png" style="float:left; margin-right:12px; margin-bottom:12px;" />If you've worked with Web apps using Ruby, you might know of <a href="http://rack.rubyforge.org/">Rack</a>, an interface that sits between Ruby applications and HTTP-speaking Web servers. All of the major Ruby frameworks and server setups use it now, including Rails. Middleware (in Rack) is code that manipulates data going back and forth between your Ruby apps and the HTTP server. You can use middleware to intercept requests, change data in mid-flow, etc. Ryan Bates has a great <a href="http://railscasts.com/episodes/151-rack-middleware">screencast tutorial</a> if you're new to the concept and want to build your own.</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/rack-logo.png" width="132" height="68" alt="rack-logo.png" style="float:left; margin-right:12px; margin-bottom:12px;" />If you've worked with Web apps using Ruby, you might know of <a href="http://rack.rubyforge.org/">Rack</a>, an interface that sits between Ruby applications and HTTP-speaking Web servers. All of the major Ruby frameworks and server setups use it now, including Rails. Middleware (in Rack) is code that manipulates data going back and forth between your Ruby apps and the HTTP server. You can use middleware to intercept requests, change data in mid-flow, etc. Ryan Bates has a great <a href="http://railscasts.com/episodes/151-rack-middleware">screencast tutorial</a> if you're new to the concept and want to build your own.</p>
<p><em>P.S. I know the term "middlewares" sounds borderline insane, but.. it works, you know what it means - yada, yada ;-)</em></p>
<p>In this post, we're going to highlight various Rack middlewares from CodeRack, an on-going Rack middleware competition:</p>
<div style="margin-left: 1.2em">
<p><a href="http://coderack.org/users/qoobaa/entries/34-karma-chameleon">Karma Chameleon</a> - Focused at Rails developers, Karma Chameleon makes it easy to automatically have file extensions added to all of your app's links and URLs. The humorous motivation for this is so that you can have all your pages use ".aspx" or ".php" extensions to look better in corporate environments. Joking aside, though, this is a cute, well written middleware that's worth looking at.</p>
<p><a href="http://coderack.org/users/jtrupiano/entries/37-rackrewrite" rel="nofollow">Rack::Rewrite</a> - This middleware is a clever attempt at implementing some of Apache's mod_rewrite functionality in Rack. So far it has support for doing basic rewrites (where URLs are changed mid-request before they hit the backend) and HTTP 301 and 302 redirects.</p>
<p><a href="http://coderack.org/users/tylerhunt/entries/6-canonical-host" rel="nofollow">Canonical Host</a> - This middleware lets you specify a "canonical hostname" for your application so that any requests to other hostnames are redirected to the same URL on the canonical hostname.</p>
<p><a href="http://coderack.org/users/webficient/entries/38-racktidy" rel="nofollow">Rack::Tidy</a> - Rack::Tidy cleans up HTML markup by automatically indenting and reformatting content. If you want the output from your Web apps to look clean (especially if you used ERb!), this is worth a try, although it expects valid markup in order to perform its cleaning..</p>
<p><a href="http://coderack.org/users/MetaSkills/entries/15-zombie-shotgun" rel="nofollow">Zombie Shotgun</a> - The Zombie Shotgun provides protection against Microsoft Windows zombie attacks! It rejects requests from known "evil" user agents and to known nefarious URL paths. I dare say this is a useful middleware to throw in front of almost anything.</p>
<p><a href="http://coderack.org/users/Rasputnik/entries/32-imagesizer" rel="nofollow">ImageSizer</a> - This middleware adds an HTTP header to the HTTP response when serving images that provides the image's dimensions. It works with both static and dynamically generated images as it get used after your code has provided the image.</p>
<p><a href="http://coderack.org/users/Simon/entries/39-firebug-logger" rel="nofollow">Firebug Logger</a> - Adds logging to your Rack-powered app for use in the <a href="http://getfirebug.com/">Firebug</a> Firefox extension or Webkit/Safari's Inspector.</p>
<p><a href="http://coderack.org/users/Postmodern/entries/27-enforcessl" rel="nofollow">EnforceSSL</a> - EnforceSSL lets you ensure that certain paths are only reached securely over HTTP/SSL. If a path denoted as sensitive is requested over regular HTTP, an HTTP 307 redirect will be issued (as an aside, I didn't know about <a href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_Redirection">HTTP 307</a> till now - it's worth reading about).</p>
<p><a href="http://coderack.org/users/freels/entries/24-inlineuploader" rel="nofollow">InlineUploader</a> - This middleware sells itself! <i>"Need inline uploads for files like the way GMail handles email attachements? InlineUploader makes it easy! InlineUploader provides a generic file upload endpoint and a way to attach uploaded files to subsequently submitted form data."</i></p>
<p><a href="http://coderack.org/users/Postmodern/entries/25-referercontrol" rel="nofollow">RefererControl</a> - A middleware that restricts access to certain paths based on the <code>Referer</code> header. Rather than blocking people who have no referrer, however, this middleware is intended to <i>enforce</i> certain referrers so that users follow the intended flow of a site.</p>
<p><a href="http://coderack.org/users/sam/entries/21-rackgoogleanalytics" rel="nofollow">Rack::GoogleAnalytics</a> - Rack::GoogleAnalytics automatically adds the Google Analytics tracking code into the HTML pages of your applications. A very simple middleware with code to match (so it's worth looking at if you want to try writing a basic middleware of your own), though I'm not sure whether this sort of thing should be in middleware to start with..</p>
<p><a href="http://coderack.org/users/julioody/entries/20-racknoie" rel="nofollow">Rack::NoIE</a> - This middleware is self described as "the coolest Rack middleware ever created." I'm not so sure about that but it <i>does</i> redirect Internet Explorer 6 users away from your Web site. Supposedly the CodeRack site itself uses this middleware!</p>
<p><a href="http://coderack.org/users/Postmodern/entries/26-banhammer" rel="nofollow">BanHammer</a> - A very simple middleware app that restricts access to specified IPv4/v6 addresses and ranges.</p>
<p><a href="http://coderack.org/users/wbzyl/entries/19-rackcodehighlighter">Rack::Codehighlighter</a> - This middleware automatically applies a code highlighter (of your choice out of CodeRay, Syntax, and Ultraviolet) to any source code embedded within <code>PRE</code> tags in your HTML pages. This could be particularly handy if you're using a Ruby blogging tool that doesn't provide this feature.</p>
<p><a href="http://coderack.org/users/jbr/entries/14-response-time-injector" rel="nofollow">Response Time Injector</a> - Want the full app response time in the body of your served HTML someplace? This middleware substitutes any reference to "$responsetime" in your response body with the amount of time the response took. Could be handy for debugging. It even lets you specify a format to show the time in.</p>
<p><a href="http://coderack.org/users/drnic/entries/17-probably-versioned" rel="nofollow">Probably Versioned</a> - A middleware by <a href="http://drnicwilliams.com/">Dr Nic Williams</a>! Probably Versioned provides the ability to add a version reference into the URLs/routes for your application without affecting your app.. e.g. <code>www.example.com/v1/some/path.json</code> - As Nic explains, however, this is a precautionary tactic to ensure your users use future-proof URLs rather than a permanent fix as you're on your own when version 2 comes along ;-)</p>
<p><a href="http://coderack.org/users/cwninja/entries/18-rackproxy" rel="nofollow">Rack::Proxy</a> - Provides proxying abilities. For example, you could pass remote API calls through your own app/URL scheme. This is one of the middlewares that could probably go on to be a bigger deal with some serious extensions.</p>
<p><a href="http://coderack.org/users/laktek/entries/11-server-proxy" rel="nofollow">Server Proxy</a> - From the name, Server Proxy sounds similar to Rack::Proxy, but Server Proxy is specifically for bypassing cross-domain access restrictions (from AJAX, say). It provides a simple way to proxy requests to remote APIs through your existing site, e.g. <code>http://localhost:3000/server_proxy?service_url=twitter.com&amp;service_path=statuses/public_timeline.xml</code> - you'd need to beware of the security issues with this though!</p>
<p><a href="http://coderack.org/users/Gaius/entries/7-casrack-the-authenticator" rel="nofollow">Casrack the Authentication</a> - A middleware that provides <a href="http://www.jasig.org/cas">CAS</a> (Central Authentication Service) support. CAS is a centralized authentication system initially developed by Yale. I'm not aware of CAS but it looks like a well put together middleware to solve a specific problem. Note: You'll need to be up to speed with <a href="http://gemcutter.org/">Gemcutter</a> to install it as a gem but <a href="http://github.com/gcnovus/casrack_the_authenticator">the code is on GitHub too</a>.</p>
<p><a href="http://coderack.org/users/luigi/entries/4-rackchromeframe" rel="nofollow">Rack::ChromeFrame</a> - Recently Google <a href="http://code.google.com/chrome/chromeframe/">released a plugin</a> for Internet Explorer that provides its own Chrome browser's functionality within existing IE windows. This middleware makes the pages served demand the use of Google Chrome Frame on supported browsers.</p>
<p><a href="http://coderack.org/users/maciej/entries/2-rakismet-akismet-client" rel="nofollow">Rakismet</a> - Rakismet can pipe the comments your site received through the Akismet comment spam checker. There's no documentation here yet, but the code provides a nice example of interacting with Akismet that could be useful even if you don't use the middleware.</p>
</div>
<p style="background-color:#ffd;padding:8px;font-family:verdana;font-size:12px"><a href="http://mobileorchard.com/training?inside"; rel="nofollow"><img src="http://www.rubyinside.com/wp-content/uploads/2009/06/rupho.png"; width="74" height="40" alt="rupho.png" style="float:left; margin-right:12px;" /></a><em>[ad]</em> <strong>Mobile Orchard's <a href="http://mobileorchard.com/training?inside" rel="nofollow">from Rubyist to iPhone programmer in 2 days class</a></strong> is coming to Portland/OR Nov 12-13 and Los Angeles/CA Nov 19-20. <del>$1200</del> $799 with early reg and "inside" discount code.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=nBom6daZqy4:JmmoWXic_9c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=nBom6daZqy4:JmmoWXic_9c:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=nBom6daZqy4:JmmoWXic_9c:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=nBom6daZqy4:JmmoWXic_9c:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=nBom6daZqy4:JmmoWXic_9c:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=nBom6daZqy4:JmmoWXic_9c:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=nBom6daZqy4:JmmoWXic_9c:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/nBom6daZqy4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/21-rack-middlewares-2649.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/21-rack-middlewares-2649.html</feedburner:origLink></item>
		<item>
		<title>Muhammed Ali’s Free Ruby 1.9.x Web Servers E-Book</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/znG3n2cs8wg/muhammed-alis-free-ruby-1-9-x-web-servers-e-book-2644.html</link>
		<comments>http://www.rubyinside.com/muhammed-alis-free-ruby-1-9-x-web-servers-e-book-2644.html#comments</comments>
		<pubDate>Mon, 12 Oct 2009 14:38:32 +0000</pubDate>
		<dc:creator>Peter Cooper</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[Elsewhere]]></category>
		<category><![CDATA[Reference]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/muhammed-alis-free-ruby-1-9-x-web-servers-e-book-2644.html</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/socket.png" width="90" height="90" alt="socket.png" style="float:left; margin-right:12px; margin-bottom:12px;" />Egyptian Ruby developer Muhammed Ali (of <a href="http://www.rubyinside.com/mysqlplus-non-blocking-mysql-driver-for-ruby-1138.html">MySQLPlus</a> fame) has released <a href="http://oldmoe.blogspot.com/2009/10/ruby-19x-web-servers-booklet.html">the first draft of a "Ruby 1.9.x Web Servers" booklet</a>. It looks at how different HTTP daemons and server libraries (<a href="http://www.rubyinside.com/thin-a-ruby-http-daemon-thats-faster-than-mongrel-688.html">Thin</a>, <a href="http://www.modrails.com/">Passenger</a>, <a href="http://en.wikipedia.org/wiki/WEBrick">WEBrick</a> and <a href="http://mongrel.rubyforge.org/">Mongrel</a>) perform in Ruby 1.9.1. You can read the book for free on his site <a href="http://www.scribd.com/doc/20755982/The-Ruby-1-9-x-Web-Servers-Booklet">or on Scribd</a>, but if you want to download a PDF to view locally you'll need to have a free Scribd account, alas.</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/socket.png" width="90" height="90" alt="socket.png" style="float:left; margin-right:12px; margin-bottom:12px;" />Egyptian Ruby developer Muhammed Ali (of <a href="http://www.rubyinside.com/mysqlplus-non-blocking-mysql-driver-for-ruby-1138.html">MySQLPlus</a> fame) has released <a href="http://oldmoe.blogspot.com/2009/10/ruby-19x-web-servers-booklet.html">the first draft of a "Ruby 1.9.x Web Servers" booklet</a>. It looks at how different HTTP daemons and server libraries (<a href="http://www.rubyinside.com/thin-a-ruby-http-daemon-thats-faster-than-mongrel-688.html">Thin</a>, <a href="http://www.modrails.com/">Passenger</a>, <a href="http://en.wikipedia.org/wiki/WEBrick">WEBrick</a> and <a href="http://mongrel.rubyforge.org/">Mongrel</a>) perform in Ruby 1.9.1. You can read the book for free on his site <a href="http://www.scribd.com/doc/20755982/The-Ruby-1-9-x-Web-Servers-Booklet">or on Scribd</a>, but if you want to download a PDF to view locally you'll need to have a free Scribd account, alas.</p>
<p>As of this first draft, the e-book's 60 pages long - resulting in about 50 pages of actual content. It's clearly a draft, but Mohammed has put together a pretty readable overview of the state of not only Web servers but basic TCP servers and concurrency issues on Ruby 1.9. There are even several diagrams that provide visual demonstrations of how the different servers manage requests.</p>
<p>The bulk of the booklet, however, is turned over to graphs showing the results of performance tests made upon each library under different scenarios. There are too many data to summarize here, but unsurprisingly WEBrick typically loses (though not always, in a few it wins!) and Thin is typically in the lead.</p>
<p style="background-color:#ffd;padding:8px;font-family:verdana;font-size:12px"><a href="http://mobileorchard.com/training?inside"; rel="nofollow"><img src="http://www.rubyinside.com/wp-content/uploads/2009/06/rupho.png"; width="74" height="40" alt="rupho.png" style="float:left; margin-right:12px;" /></a><em>[ad]</em> <strong>Mobile Orchard's <a href="http://mobileorchard.com/training?inside">from Rubyist to iPhone programmer in 2 days class</a></strong> is coming to Portland/OR Nov 12-13 and Los Angeles/CA Nov 19-20. <del>$1200</del> $799 with early reg and "inside" discount code.</p>
<p><object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_553928157880354" name="doc_553928157880354" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle"	height="500" width="640" ><param name="movie"	value="http://d1.scribdassets.com/ScribdViewer.swf?document_id=20755982&#038;access_key=key-11g4fpp0rh82bj7p3wko&#038;page=1&#038;version=1&#038;viewMode=slideshow"></param><param name="quality" value="high"></param><param name="play" value="true"></param><param name="loop" value="true"></param><param name="scale" value="showall"></param><param name="wmode" value="opaque"></param><param name="devicefont" value="false"></param><param name="bgcolor" value="#ffffff"></param><param name="menu" value="true"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><param name="salign" value=""></param><param name="mode" value="slideshow"><embed src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=20755982&#038;access_key=key-11g4fpp0rh82bj7p3wko&#038;page=1&#038;version=1&#038;viewMode=slideshow" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_553928157880354_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle" mode="slideshow" height="500" width="640"></embed></param></object></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=znG3n2cs8wg:61XoDIEuqDM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=znG3n2cs8wg:61XoDIEuqDM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=znG3n2cs8wg:61XoDIEuqDM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=znG3n2cs8wg:61XoDIEuqDM:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=znG3n2cs8wg:61XoDIEuqDM:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=znG3n2cs8wg:61XoDIEuqDM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=znG3n2cs8wg:61XoDIEuqDM:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/znG3n2cs8wg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/muhammed-alis-free-ruby-1-9-x-web-servers-e-book-2644.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/muhammed-alis-free-ruby-1-9-x-web-servers-e-book-2644.html</feedburner:origLink></item>
		<item>
		<title>What I’ve Earned and Learned From Writing A Popular(ish) Ruby Book</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/0N2lqCWzBlY/what-ive-earned-and-learned-from-writing-a-popular-ruby-book-2640.html</link>
		<comments>http://www.rubyinside.com/what-ive-earned-and-learned-from-writing-a-popular-ruby-book-2640.html#comments</comments>
		<pubDate>Sat, 10 Oct 2009 13:14:44 +0000</pubDate>
		<dc:creator>Peter Cooper</dc:creator>
				<category><![CDATA[Beginning Ruby Book]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/what-ive-earned-and-learned-from-writing-a-popular-ruby-book-2640.html</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/begruby-edition-2-cover.gif" width="130" height="148" alt="begruby-edition-2-cover.gif" style="float:left; margin-right:12px; margin-bottom:12px;" /> A few days ago I received the latest in a long line of royalty statements for my book, <a href="http://beginningruby.org/">Beginning Ruby</a> (as published by Apress). Long time readers might recall that Ruby Inside was started principally to promote the book, but turned into so much more that the book took a back seat. Well, the whim came over me to share the murky details of being the author of such a book, including how the royalty statements work (or not), how much is earned, sales figures, and so forth.</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/begruby-edition-2-cover.gif" width="130" height="148" alt="begruby-edition-2-cover.gif" style="float:left; margin-right:12px; margin-bottom:12px;" /> A few days ago I received the latest in a long line of royalty statements for my book, <a href="http://beginningruby.org/">Beginning Ruby</a> (as published by Apress). Long time readers might recall that Ruby Inside was started principally to promote the book, but turned into so much more that the book took a back seat. Well, the whim came over me to share the murky details of being the author of such a book, including how the royalty statements work (or not), how much is earned, sales figures, and so forth.</p>
<p>So I wrote <a href="http://beginningruby.org/what-ive-earned-and-learned/">What I've Earned (And Learned) From Writing "Beginning Ruby"</a> over at the new, official <a href="http://beginningruby.org/">Beginning Ruby promotional site</a>. I wasn't planning on mentioning it here, but the post became popular on Hacker News and Reddit to such an extent (almost 10,000 pageviews so far!) that it must be a story people want to read - so check it out.</p>
<p>For those who are interested, Beginning Ruby's 2nd edition was published just a couple of months ago with lots of updates, new sections, and two all-new chapters on Web application frameworks (Rails, Sinatra, and Ramaze) and GUI app development (using Shoes - erk). You can <a href="http://www.amazon.com/gp/product/1430223634?ie=UTF8&amp;tag=rubins-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430223634">buy it at Amazon.com here</a> or learn more at <a href="http://beginningruby.org/">the official Beginning Ruby site</a>. It's a great book for people who are new to Beginning Ruby (or programming generally, even) and you can see tons of reviews on <a href="http://www.amazon.com/Beginning-Ruby-Professional-Peter-Cooper/dp/1590597664/">Amazon's listing for the 1st edition</a> <i>(we're waiting for them to be merged into the 2nd edition's page!)</i> or at <a href="http://beginningruby.org/">the official site</a>.</p>
<p style="background-color:#ffd;padding:8px;font-family:verdana;font-size:12px"><em>[ad]</em> <a href="http://jumpstartlab.com" rel="nofollow"><img src="http://www.rubyinside.com/wp-content/uploads/2009/09/railsjumpstart.png" width="40" height="40" alt="railsjumpstart.png" style="float:left; margin-right:12px; margin-bottom:12px;" /></a><a href="http://jumpstartlab.com" rel="nofollow">Jumpstart Lab</a> is offering <a href="http://jumpstartlab.com/courses/rails/091031" rel="nofollow"><strong>Rails Jumpstart</strong></a>, an introduction to Ruby on Rails, on 10/31-11/1 in Washington, DC. Save $30 with code "<strong><a href="http://www.eventbrite.com/event/392551131?discount=rubyrow" rel="nofollow">rubyrow</a></strong>"!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=0N2lqCWzBlY:3DuyF3-HolM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=0N2lqCWzBlY:3DuyF3-HolM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=0N2lqCWzBlY:3DuyF3-HolM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=0N2lqCWzBlY:3DuyF3-HolM:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=0N2lqCWzBlY:3DuyF3-HolM:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=0N2lqCWzBlY:3DuyF3-HolM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=0N2lqCWzBlY:3DuyF3-HolM:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/0N2lqCWzBlY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/what-ive-earned-and-learned-from-writing-a-popular-ruby-book-2640.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/what-ive-earned-and-learned-from-writing-a-popular-ruby-book-2640.html</feedburner:origLink></item>
		<item>
		<title>Mustache: Logic-Free Views For Your Ruby Web Apps</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/_wqWGTH2oVk/mustache-for-logicfree-views-in-your-ruby-web-apps-2599.html</link>
		<comments>http://www.rubyinside.com/mustache-for-logicfree-views-in-your-ruby-web-apps-2599.html#comments</comments>
		<pubDate>Wed, 07 Oct 2009 16:07:22 +0000</pubDate>
		<dc:creator>Ric Roberts</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[views]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/?p=2599</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/burt.jpg" alt="mustache" style="float:left; margin-right:12px; margin-bottom:12px;" /><strong><a href="http://github.com/defunkt/mustache">Mustache</a></strong> is a new templating library from Chris Wanstrath (a.k.a. <a href="http://defunkt.github.com/">defunkt</a> of GitHub fame) that provides a way to render views in your chosen Ruby web framework. Influenced by <a href="http://code.google.com/p/google-ctemplate/">ctemplate</a>, Mustache helps to keep your <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller">MVC</a> layers separate <strong>by actively preventing the inclusion of application logic in your views.</strong></p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/burt.jpg" alt="mustache" style="float:left; margin-right:12px; margin-bottom:12px;" /><strong><a href="http://github.com/defunkt/mustache">Mustache</a></strong> is a new templating library from Chris Wanstrath (a.k.a. <a href="http://defunkt.github.com/">defunkt</a> of GitHub fame) that provides a way to render views in your chosen Ruby web framework. Influenced by <a href="http://code.google.com/p/google-ctemplate/">ctemplate</a>, Mustache helps to keep your <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller">MVC</a> layers separate <strong>by actively preventing the inclusion of application logic in your views.</strong></p>
<p>With Mustache, the typical view layer is split up into two sub-layers: a Ruby Class-based "view" and an HTML "template", so you can concentrate on crafting your HTML without polluting it with embedded Ruby logic.  This separation also makes it easier to test your view-code.</p>
<p>Amusingly, the name of the project comes from the way that you insert references to the view class into the template.  Tags are denoted by double curly braces, or "mustaches". e.g. <code>{{name}}</code>.</p>
<p>In their simplest form, tags are just calls to methods on your Ruby view class.  But they can also take more complex forms such as block definitions, calls to partials or helpers (from modules included into your view class).</p>
<p>There are <a href="http://github.com/defunkt/mustache/tree/master/examples/">more examples</a> and <a href="http://defunkt.github.com/mustache">documentation</a> in the GitHub project, but here's a canonical usage example from the <a href="http://github.com/defunkt/mustache/blob/master/README.md">README</a>:</p>
<h3>View Logic:</h3>
<pre>
class Simple < Mustache
  def name
    "Chris"
  end

  def value
    10_000
  end

  def taxed_value
    value - (value * 0.4)
  end

  def in_ca
    true
  end
end
</pre>
<h3>Template:</h3>
</pre>
<pre>
Hello {{name}}
You have just won ${{value}}!
{{#in_ca}}
Well, ${{taxed_value}}, after taxes.
{{/in_ca}}
</pre>
<p>At the moment, only Sinatra support is provided "out of the box", but it should be fairly easy to integrate with other Ruby frameworks.</p>
<h3>Installation</h3>
<p>Mustache is available from <a href="http://www.rubyinside.com/gemcutter-a-fast-and-easy-approach-to-ruby-gem-hosting-2281.html">Gemcutter</a> or <a href="http://www.rubyinside.com/rip-ruby-packaging-system-1837.html">Rip.</a> Install in one of two ways:</p>
<pre>
$ gem install mustache
$ rip install git://github.com/defunkt/mustache.git
</pre>
<p style="background-color:#ffd;padding:8px;font-family:verdana;font-size:12px"><a href="http://www.codebasehq.com/?utm_source=rubyinside&amp;utm_medium=footer&amp;utm_campaign=sep09" rel="nofollow"><img src="http://www.rubyinside.com/wp-content/uploads/2009/09/CodebaseLogo-RI.png" width="118" height="37" style="float: right; margin-left: 12px; margin-bottom: 12px" alt="CodebaseLogo-RI.png" /></a><em>[ad]</em> <a href="http://www.codebasehq.com/?utm_source=rubyinside&amp;utm_medium=footer&amp;utm_campaign=sep09" rel="nofollow"><b>Codebase</b></a> is a fast &amp; reliable <b>git, mercurial &amp; subversion hosting</b> service with complete project management built-in - ticketing, milestones, wikis &amp; time tracking - all under one roof. <a href="http://www.codebasehq.com/?utm_source=rubyinside&amp;utm_medium=footer&amp;utm_campaign=sep09" rel="nofollow">Click here to try it - free.</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=_wqWGTH2oVk:odZE5nj4vhQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=_wqWGTH2oVk:odZE5nj4vhQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=_wqWGTH2oVk:odZE5nj4vhQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=_wqWGTH2oVk:odZE5nj4vhQ:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=_wqWGTH2oVk:odZE5nj4vhQ:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=_wqWGTH2oVk:odZE5nj4vhQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=_wqWGTH2oVk:odZE5nj4vhQ:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/_wqWGTH2oVk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/mustache-for-logicfree-views-in-your-ruby-web-apps-2599.html/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/mustache-for-logicfree-views-in-your-ruby-web-apps-2599.html</feedburner:origLink></item>
	</channel>
</rss>
