<?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>Fri, 02 Sep 2011 03:49:34 +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>Setting Up a Ruby Environment on Mac OS X 10.7</title>
		<link>http://www.backdrifter.com/2011/09/01/setting-up-a-ruby-environment-on-mac-os-x-10-7/</link>
		<comments>http://www.backdrifter.com/2011/09/01/setting-up-a-ruby-environment-on-mac-os-x-10-7/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 03:49:34 +0000</pubDate>
		<dc:creator>Jared Hanson</dc:creator>
				<category><![CDATA[Unknown]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rvm]]></category>

		<guid isPermaLink="false">http://www.backdrifter.com/?p=420</guid>
		<description><![CDATA[I recently picked up a new Mac mini, so I could have a stand-alone development system.  One of the nice things about a fresh system is that it offers a clean slate on which to install development tools.
Ruby is one of the languages I use on a regular basis.  Unfortunately, the proliferation of [...]]]></description>
			<content:encoded><![CDATA[<p>I recently picked up a new <a href="http://www.apple.com/macmini/">Mac mini</a>, so I could have a stand-alone development system.  One of the nice things about a fresh system is that it offers a clean slate on which to install development tools.</p>
<p><a href="http://www.ruby-lang.org/">Ruby</a> is one of the languages I use on a regular basis.  Unfortunately, the proliferation of interpreters and <a href="http://rubygems.org/">gems</a> can be hard to keep under control.  One of my goals with the new system was to improve this process.</p>
<p>This posts documents the commands I executed, for future reference.</p>
<p><span id="more-420"></span></p>
<p><b>Mac OS X 10.7 Ruby Environment</b></p>
<p>Before we get started, let&#8217;s inspect the standard Ruby install that ships with Mac OS X 10.7.<br />
<code style="text-align: left;"><br />
$ which ruby<br />
/usr/bin/ruby</p>
<p>$ ruby --version<br />
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]</p>
<p>$ which gem<br />
/usr/bin/gem</p>
<p>$ gem --version<br />
1.3.6</p>
<p>$ gem environment<br />
RubyGems Environment:<br />
  - RUBYGEMS VERSION: 1.3.6<br />
  - RUBY VERSION: 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]<br />
  - INSTALLATION DIRECTORY: /Library/Ruby/Gems/1.8<br />
  - RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby<br />
  - EXECUTABLE DIRECTORY: /usr/bin<br />
  - RUBYGEMS PLATFORMS:<br />
    - ruby<br />
    - universal-darwin-11<br />
  - GEM PATHS:<br />
     - /Library/Ruby/Gems/1.8<br />
     - /Users/jaredhanson/.gem/ruby/1.8<br />
     - /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8<br />
  - GEM CONFIGURATION:<br />
     - :update_sources => true<br />
     - :verbose => true<br />
     - :benchmark => false<br />
     - :backtrace => false<br />
     - :bulk_threshold => 1000<br />
  - REMOTE SOURCES:<br />
     - http://rubygems.org/<br />
</code></p>
<p><b>Install RVM: Ruby Version Manager</b></p>
<p><a href="http://beginrescueend.com/">RVM</a> is a tool that allows us to work with multiple Ruby environments, including different interpreter versions and sets of gems.</p>
<p>Install it just as the instructions recommend:<br />
<code><br />
$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)<br />
</code></p>
<p>The installation script will output useful messages, explaining exactly what it is doing and offering hints about what to do after installation is complete.  The one critical thing to do is source the rvm script, so that the command is available in the shell.  I keep this in my <a href="https://github.com/jaredhanson/dotfiles">dotfiles</a>, so it is always available.  You can also source it temporarily in the current shell by executing:<br />
<code><br />
$ source "$HOME/.rvm/scripts/rvm"<br />
</code></p>
<p><b>Install Ruby</b></p>
<p>Now that RVM is installed, we can proceed to install local versions of Ruby.  To minimize differences, I first install the same version of Ruby shipped with the OS.  RVM makes it easy to install and switch to newer version later.<br />
<code><br />
$ rvm install 1.8.7<br />
$ rvm use 1.8.7<br />
</code></p>
<p>Now, the version of Ruby in use is completely isolated from the system.<br />
<code><br />
$ which ruby<br />
/Users/jaredhanson/.rvm/rubies/ruby-1.8.7-p352/bin/ruby<br />
$ which gem<br />
/Users/jaredhanson/.rvm/rubies/ruby-1.8.7-p352/bin/gem<br />
</code></p>
<p>Rake is my most utilized Ruby-based utility, so that is first on my list to install.<br />
<code><br />
$ gem install rake<br />
/Users/jaredhanson/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/1.8/timeout.rb:60: [BUG] Segmentation fault<br />
ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-darwin11.0.1]</p>
<p>Abort trap: 6<br />
</code></p>
<p>Damn.</p>
<p><b>Install Ruby with GCC 4.2</b></p>
<p>Mac OS X 10.7 is using an <a href="http://llvm.org/">LLVM</a>-based compiler by default, which is causing trouble.  Luckily, a <a href="http://stackoverflow.com/questions/6170813/why-cant-i-install-rails-on-lion-using-rvm">solution</a> can be found on <a href="http://stackoverflow.com/">Stack Overflow</a>.</p>
<p>RVM makes it easy to remove the broken installation of Ruby:<br />
<code><br />
$ rvm remove 1.8.7<br />
</code></p>
<p>Installing Ruby 1.8.7 with plain (non-LLVM) gcc fixes the issue:<br />
<code><br />
CC=/usr/bin/gcc-4.2 rvm install 1.8.7<br />
</code></p>
<p>Gems can now be installed successfully:<br />
<code><br />
$ gem install rake<br />
Fetching: rake-0.9.2.gem (100%)<br />
Successfully installed rake-0.9.2<br />
1 gem installed<br />
Installing ri documentation for rake-0.9.2...<br />
Installing RDoc documentation for rake-0.9.2...</p>
<p>$ which rake<br />
/Users/jaredhanson/.rvm/gems/ruby-1.8.7-p352/bin/rake<br />
</code></p>
<p><b>Conclusion</b></p>
<p>RVM is now installed, and can be used to manage multiple Ruby environments.  Additionally, <a href="http://beginrescueend.com/gemsets/">gemsets</a> can be used to manage which sets of gems are available in each environment.  This is a much cleaner and more flexible way to manage a Ruby development system.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.backdrifter.com/2011/09/01/setting-up-a-ruby-environment-on-mac-os-x-10-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>

