<?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>Backdrifter &#187; ruby</title>
	<atom:link href="http://www.backdrifter.com/tags/ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.backdrifter.com</link>
	<description>The personal site of Jared Hanson</description>
	<lastBuildDate>Tue, 22 Jun 2010 22:16:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Using Multiple Versions of Rake</title>
		<link>http://www.backdrifter.com/2009/04/07/using-multiple-versions-of-rake/</link>
		<comments>http://www.backdrifter.com/2009/04/07/using-multiple-versions-of-rake/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 18:58:04 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[Unknown]]></category>
		<category><![CDATA[chrysalis]]></category>
		<category><![CDATA[rake]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rubygems]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/?p=129</guid>
		<description><![CDATA[Rake has become a critical component of my development toolchain.  So much so that I have developed extensions, such as Chrysalis, to assist with common aspects of the build cycle.
However, due to time constraints, Chrysalis does not support the latest version of Rake (currently 0.8.3).  The 0.8 branch reworked some of the internals, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://rake.rubyforge.org/">Rake</a> has become a critical component of my development toolchain.  So much so that I have developed extensions, such as <a href="http://chrysalis.rubyforge.org/">Chrysalis</a>, to assist with common aspects of the build cycle.</p>
<p>However, due to time constraints, Chrysalis does not support the latest version of Rake (currently 0.8.3).  The 0.8 branch reworked some of the internals, and Chrysalis was developed against 0.7.3.  As such, I often need to quickly switch between multiple versions of Rake.</p>
<p>Thankfully, the executable <a href="http://www.rubygems.org/">RubyGems</a> places in the bin directory makes this easy.  I had long been curious how this works, so I took the time to figure it out.</p>
<p><span id="more-129"></span></p>
<p>The executable scripts generated by RubyGems, in this case for Rake, look like the following:<br />
<code><br />
require 'rubygems'<br />
&nbsp;<br />
version = "&gt;= 0"<br />
&nbsp;<br />
if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then<br />
&nbsp;&nbsp;version = $1<br />
&nbsp;&nbsp;ARGV.shift<br />
end<br />
&nbsp;<br />
gem 'rake', version<br />
load 'rake'<br />
</code></p>
<p>There is a bit of regular expression magic that works on the first argument to the command, accessed through <code>ARGV.first</code>.  The <code>=~</code> is the positive match operator for regular expressions.  If a match is found, a portion of it will be stored in the global variable <code>$1</code>.</p>
<p>The goal of the RubyGems-generated script is to match a user-supplied version number, without interfering with any other arguments the actual script may expect.  In order to do so, the version argument is surrounded by underscores.  This is enforced by using the <code>^</code> and <code>$</code> as achors for the beginning and end of the string, respectively.</p>
<p>The result of all this is a simple way to switch between versions easily on the command line.<br />
<code><br />
$ rake _0.7.3_ --version<br />
$ rake _0.8.3_ --version<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2009/04/07/using-multiple-versions-of-rake/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>VStudioIDE &amp; XcodeIDE Released</title>
		<link>http://www.backdrifter.com/2008/01/19/vstudioide-xcodeide-released/</link>
		<comments>http://www.backdrifter.com/2008/01/19/vstudioide-xcodeide-released/#comments</comments>
		<pubDate>Sat, 19 Jan 2008 20:49:08 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[Unknown]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[visualstudio]]></category>
		<category><![CDATA[vstudioide]]></category>
		<category><![CDATA[xcode]]></category>
		<category><![CDATA[xcodeide]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/2008/01/19/vstudioide-xcodeide-released/</guid>
		<description><![CDATA[I&#8217;ve just released initial, 0.1.0, releases of two Ruby libraries, VStudioIDE and XcodeIDE.  VStudioIDE is a parser for Visual Studio solution files, and XcodeIDE parses Xcode project files.
My main motivation for writing these libraries was to get at the build configurations, so convenience methods are provided for reading those.  However, a full parse [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just released initial, 0.1.0, releases of two <a href="http://www.ruby-lang.org/">Ruby</a> libraries, <a href="http://rubyforge.org/projects/vstudioide/">VStudioIDE</a> and <a href="http://rubyforge.org/projects/xcodeide/">XcodeIDE</a>.  VStudioIDE is a parser for <a href="http://msdn.microsoft.com/vstudio/">Visual Studio</a> solution files, and XcodeIDE parses <a href="http://developer.apple.com/tools/xcode/">Xcode</a> project files.</p>
<p>My main motivation for writing these libraries was to get at the build configurations, so convenience methods are provided for reading those.  However, a full parse tree is constructed, so any other information can be obtained relatively easily as well.</p>
<p>To install, use the following commands:<br />
<code><br />
&gt; gem install vstudioide<br />
&gt; gem install xcodeide<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2008/01/19/vstudioide-xcodeide-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chrysalis 0.1.0 Is Out</title>
		<link>http://www.backdrifter.com/2007/12/10/chrysalis-010-is-out/</link>
		<comments>http://www.backdrifter.com/2007/12/10/chrysalis-010-is-out/#comments</comments>
		<pubDate>Mon, 10 Dec 2007 17:16:27 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[Unknown]]></category>
		<category><![CDATA[chrysalis]]></category>
		<category><![CDATA[rake]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/2007/12/10/chrysalis-010-is-out/</guid>
		<description><![CDATA[Last night I released the initial version of Chrysalis, a simple, yet powerful dependency manager built on Ruby and Rake.  This morning, the gem has circulated out to the mirrors, so the launch is off the ground.
I&#8217;ve long thought that building applications, along with their dependencies, could be easier and more efficient.  Chrysalis [...]]]></description>
			<content:encoded><![CDATA[<p>Last night I <a href="http://chrysalis.rubyforge.org/news/2007/12/09/chrysalis-010-released/">released</a> the initial version of <a href="http://chrysalis.rubyforge.org/">Chrysalis</a>, a simple, yet powerful dependency manager built on <a href="http://www.ruby-lang.org/">Ruby</a> and <a href="http://docs.rubyrake.org/">Rake</a>.  This morning, the gem has circulated out to the mirrors, so the launch is off the ground.</p>
<p>I&#8217;ve long thought that building applications, along with their dependencies, could be easier and more efficient.  Chrysalis is my attempt at making it so.  I&#8217;ve been putting it to use in my projects, and have been pleased with the results.</p>
<p>If you&#8217;ve had the same thoughts, check out Chrysalis.  There&#8217;s plenty of <a href="http://chrysalis.rubyforge.org/documentation/">documentation</a> on the site to get you started.  The core of initial release is stable, but there are additional features that would be useful.  Feel free to send me your feedback and suggestions.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2007/12/10/chrysalis-010-is-out/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>mongrel-soap4r 0.0.1</title>
		<link>http://www.backdrifter.com/2007/07/16/mongrel-soap4r-001/</link>
		<comments>http://www.backdrifter.com/2007/07/16/mongrel-soap4r-001/#comments</comments>
		<pubDate>Tue, 17 Jul 2007 04:06:03 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[mongrel-soap4r]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[soap]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/2007/07/16/mongrel-soap4r-001/</guid>
		<description><![CDATA[This weekend I polished up some code that had been sitting idle on my hard drive.  With its new shine, it needed to be properly displayed, so I created a RubyForge project and released mongrel-soap4r 0.0.1.
mongrel-soap4r allows you to host SOAP-based web services using Mongrel as the underlying HTTP server.  Incoming SOAP messages [...]]]></description>
			<content:encoded><![CDATA[<p>This weekend I polished up some code that had been sitting idle on my hard drive.  With its new shine, it needed to be properly displayed, so I created a <a href="http://rubyforge.org/">RubyForge</a> project and released <a href="http://rubyforge.org/projects/mongrel-soap4r/">mongrel-soap4r</a> 0.0.1.</p>
<p>mongrel-soap4r allows you to host <a href="http://en.wikipedia.org/wiki/SOAP">SOAP</a>-based web services using <a href="http://mongrel.rubyforge.org/">Mongrel</a> as the underlying <a href="http://en.wikipedia.org/wiki/HTTP">HTTP</a> server.  Incoming SOAP messages will be routed to the standard <a href="http://dev.ctor.org/soap4r">SOAP4R</a> library for processing.</p>
<p><span id="more-66"></span></p>
<p>This is the initial release, so it hasn&#8217;t been thoroughly tested and the documentation is sparse.  But I&#8217;ll be remedying these problems, and would appreciate feedback and patches.</p>
<p>To install, execute the usual command:</p>
<p><code>&gt; gem install mongrel-soap4r</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2007/07/16/mongrel-soap4r-001/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails 1.2 Released</title>
		<link>http://www.backdrifter.com/2007/01/19/ruby-on-rails-12-released/</link>
		<comments>http://www.backdrifter.com/2007/01/19/ruby-on-rails-12-released/#comments</comments>
		<pubDate>Sat, 20 Jan 2007 05:34:08 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/2007/01/19/ruby-on-rails-12-released/</guid>
		<description><![CDATA[Ruby on Rails 1.2 has been released!  This is the latest version of the popular framework for building web applications.  Coinciding with this release of Rails 1.2 is the release of Prototype 1.5.  Prototype is the JavaScript framework that powers the rich functionality of many web applications.
Ruby on Rails dramatically altered the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rubyonrails.org/">Ruby on Rails</a> 1.2 has been <a href="http://weblog.rubyonrails.org/2007/1/19/rails-1-2-rest-admiration-http-lovefest-and-utf-8-celebrations">released</a>!  This is the latest version of the popular framework for building web applications.  Coinciding with this release of Rails 1.2 is the <a href="http://weblog.rubyonrails.org/2007/1/19/prototype-1-5-now-with-a-manual">release</a> of <a href="http://www.prototypejs.org/">Prototype</a> 1.5.  Prototype is the JavaScript framework that powers the rich functionality of many web applications.</p>
<p>Ruby on Rails dramatically altered the way people build web applications.  With the 1.2 release, it continues to influence thought patterns by bringing <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm">REST</a> to the forefront.  REST provides a set of principles for the design of network-based software.  By presenting these patterns to a mainstream audience, Rails is having a profound impact on the future of software development.</p>
<p>The release also has numerous other improvements, including Unicode support, a new URL routing implementation, and better module loading.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2007/01/19/ruby-on-rails-12-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Strongtalk VM for Ruby?</title>
		<link>http://www.backdrifter.com/2006/10/28/strongtalk-vm-for-ruby/</link>
		<comments>http://www.backdrifter.com/2006/10/28/strongtalk-vm-for-ruby/#comments</comments>
		<pubDate>Sat, 28 Oct 2006 18:26:24 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[smalltalk]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/2006/10/28/strongtalk-vm-for-ruby/</guid>
		<description><![CDATA[RubyConf 2006 wrapped up last weekend, with one of the most debated topics being Ruby 2.0 and the need for a new virtual machine.  Adding fuel to the fire was the announcement that Ruby 2.0 would eliminate (temporarily?) support for continuations and green threads.
This announcement came down from the top, by both Matz and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rubyconf.org/">RubyConf 2006</a> wrapped up last weekend, with one of the most debated topics being Ruby 2.0 and the need for a new virtual machine.  Adding fuel to the fire was the announcement that Ruby 2.0 would eliminate (temporarily?) support for continuations and green threads.</p>
<p>This announcement came down from the top, by both Matz and Koichi.  Matz, short for Yukihiro Matsumoto, is the creator of the <a href="http://www.ruby-lang.org/en/">Ruby</a> language; Koichi is the developer of <a href="http://www.atdot.net/yarv/">YARV</a>, the &#8220;official&#8221; virtual machine for Ruby 2.0.</p>
<p>Making the situation more interesting is the development of two other interpreters, <a href="http://jruby.codehaus.org/">JRuby</a> and <a href="http://www.rubyclr.com/">RubyCLR</a>.  JRuby targets the <a href="http://java.sun.com/">Java</a> VM, and is developed by <a href="http://headius.blogspot.com/">Charles Oliver Nutter</a> and Thomas Enebo, both of whom have recently been hired by <a href="http://www.sun.com/">Sun</a>.  RubyCLR, of course, targets the Common Language Runtime that powers <a href="http://www.microsoft.com/net/">.NET</a>.  It is developed by <a href="http://www.iunknown.com/">John Lam</a>, who has been hired by <a href="http://www.microsoft.com/">Microsoft</a>, not wanting to be left behind.</p>
<p><span id="more-13"></span></p>
<p>Chris Petrilli, provides a <a href="http://blog.amber.org/2006/10/26/selling-your-future-for-fame-in-the-present/">rundown</a> of the current situation.  And, while these VM efforts are admirable, Patrick Logan <a href="http://patricklogan.blogspot.com/2006/10/ruby-might-be-sucking-less.html">calls</a> it like it is:</p>
<blockquote><p>
Seriously, Ruby is in dire need of a decent implementation. The JVM and the CLR are fine for what they are, old legacy. But Ruby needs its own *modern* implementation.
</p></blockquote>
<p>That leads me to <a href="http://www.strongtalk.org/">Strongtalk</a>.  Strongtalk is a virtual machine for Smalltalk that adds on optional static type system, from which it derives its name.  It was developed by a company named Animorphic, which was acquired by Sun, who put its engineers to work on the JVM.</p>
<p>Sun recently released the Strongtalk code under an <a href="http://www.opensource.org/">open source</a>, BSD-style license.  Admittedly, the code has not been actively developed for about 10 years.  Yet the <a href="http://www.strongtalk.org/documents.html">research</a> behind Strongtalk is state-of-the-art as far as dynamic, interpreted languages are concerned.</p>
<p>Having a Strongtalk-powered VM for Ruby would have a number of benefits.  The most important benefit would be giving Ruby the advanced, high-performance VM that it desperately needs.  Also not to be ignored is the the need a pure open source implementation, not mired by the questionable licenses that currently hinder both Java and the CLR.  And, in my own idealistic programming world, it would unify Smalltalk and Ruby under a common runtime.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2006/10/28/strongtalk-vm-for-ruby/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Message Passing Web</title>
		<link>http://www.backdrifter.com/2006/10/15/the-message-passing-web/</link>
		<comments>http://www.backdrifter.com/2006/10/15/the-message-passing-web/#comments</comments>
		<pubDate>Mon, 16 Oct 2006 01:48:36 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[http]]></category>
		<category><![CDATA[objectivec]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[smalltalk]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/2006/10/15/the-message-passing-web/</guid>
		<description><![CDATA[Objective-C is hands-down my favorite programming language.  Even though I was taught primarily C++ in college, and indeed spend most of my time coding in that language, I consider knowledge of Objective-C to have given me the most useful insights into software design and architecture.
My Objective-C leanings lead me to use Ruby as a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/">Objective-C</a> is hands-down my favorite programming language.  Even though I was taught primarily C++ in college, and indeed spend most of my time coding in that language, I consider knowledge of Objective-C to have given me the most useful insights into software design and architecture.</p>
<p>My Objective-C leanings lead me to use <a href="http://www.ruby-lang.org/">Ruby</a> as a scripting language.  Ruby has been propelled into the spotlight recently by <a href="http://www.rubyonrails.org/">Ruby on Rails</a>, an incredible framework for developing web applications.</p>
<p>Objective-C and Ruby are both descendants of <a href="http://www.smalltalk.org/">Smalltalk</a>.  All three languages are object-oriented, and have the notion of message passing as a central construct.  Message passing is not found in more popular languages like C++ and <a href="http://java.sun.com/">Java</a>, yet understanding it can give any developer an invaluable new perspective.</p>
<p><span id="more-10"></span></p>
<p>In an attempt to further my understanding of these concepts, I&#8217;ve recently been studying Smalltalk.  While having been around for more than 30 years, the concepts behind the language are still considered state-of-the-art and its influence is broad.  That influence extends all the way to the web, as I discovered in a recent <a href="http://www.cincomsmalltalk.com/blog/blogView?showComments=true&#038;entry=3338189012">entry</a> by James Robertson.</p>
<p>Found in the comments is a link to an <a href="http://www.w3.org/People/Connolly/9703-web-apps-essay.html">editorial</a> by <a href="http://www.w3.org/People/Connolly/">Dan Connolly</a>, dated February 13, 1997.  From the article:</p>
<blockquote><p>
HTTP was design as a distributed realization of the Objective C (originally Smalltalk) message passing infrastructure: the first few bytes of every HTTP message are a method name: GET or POST. Uniform Resource Locator is just the result of squeezing the term object reference through the IETF standardization process.
</p></blockquote>
<p>Recent projects have caused me to view the web as just such a distributed object system.  However, I was not aware of the historical link to Objective-C and Smalltalk.  Seen in that light, though, the message passing approach is remarkably consistent.</p>
<p>David Heinemeier Hansson, the creator of Ruby on Rails, is a true innovator in the web application frontier.  His addition of Active Resource to edge Rails is the natural next step in this line of thinking.  In his <a href="http://blog.scribestudio.com/articles/2006/07/09/david-heinemeier-hansson-railsconf-2006-keynote-address">keynote address</a> at <a href="http://www.railsconf.org/">RailsConf 2006</a>, he gives a compelling presentation about the benefits of <a href="http://www.loudthinking.com/arc/000593.html">discovering</a> a world of resources.</p>
<p>Message passing languages are efficient and productive for application development.  Unfortunately, they have a minority stake of developer mindshare.  Ruby and Rails are currently improving this situation.  It may be wishful thinking, but I&#8217;d like to see these trends renew interest in Objective-C and Smalltalk as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2006/10/15/the-message-passing-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
