<?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>Zen and the Art of Programming &#187; .NET</title>
	<atom:link href="http://programmingzen.com/category/programming-languages/dotnet/feed/" rel="self" type="application/rss+xml" />
	<link>http://programmingzen.com</link>
	<description>Meditations on programming, startups, and technology</description>
	<lastBuildDate>Wed, 09 May 2012 07:52:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Interview with the Compilr.com team</title>
		<link>http://programmingzen.com/2011/05/31/interview-with-the-compilr-com-team/</link>
		<comments>http://programmingzen.com/2011/05/31/interview-with-the-compilr-com-team/#comments</comments>
		<pubDate>Tue, 31 May 2011 17:00:23 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[IT Business]]></category>

		<guid isPermaLink="false">http://programmingzen.com/?p=1380</guid>
		<description><![CDATA[1. For those who don&#8217;t know, what is an online compiler and how did you come up with the idea? An online compiler, or online IDE is a full software development environment on the web. This allows us programmers to develop from a wider range of machines without any software installations, and to always have [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p><strong>1. For those who don&#8217;t know, what is an online compiler and how did you come up with the idea?</strong></p>
<p><img src="http://programmingzen.com/wp-content/uploads/2011/05/compilr.png" alt="Compilr" title="Compilr" width="200" height="58" class="alignright size-full wp-image-1381" align="right" stye="float: right;" />An online compiler, or online IDE is a full software development environment on the web. This allows us programmers to develop from a wider range of machines without any software installations, and to always have our code handy whenever we may need it. There are a wide range of online compiler&#8217;s out there today, but <a href="http://compilr.com" target="_blank">Compilr.com</a> is unique since our goal has been to create a fully fledged IDE for developing desktop applications on the web. The idea itself spawned from a combination of wondering what makes an IDE all that it is, knowledge of server side web development languages like PHP and using modern JavaScript libraries to create some really desktop-like user interfaces, and it&#8217;s because of the interest in these technologies that we have been able to bring Compilr to where it is today.</p>
<p><strong>2. Why is using an online compiler / online IDE better than programming on my computer?</strong></p>
<p>To develop from a wider range of machines without any software installations, and to always have our code handy whenever you may need it. But some more truly great things can be accomplished from an online IDE such as the ability to develop Windows code from any other OS or a fully online software team communication suite; allowing team members to work on the same code, communicate code changes actively, and instant message each other. Yes, you can accomplish this with desktop software to some extent, but with an online environment you can bring those change notifications instantly opposed to having to look for changes in source control such as svn or git. Online IDEs can also bring a whole new level to social code sharing, like open public projects that can be edited and tested by anyone in the entire world directly in their browser, yet still providing everyone with the version control they need to spot and prevent issues.</p>
<p><strong>3. How did you translate a traditional IDE into a web format, and what stack did you use for the web IDE itself?</strong></p>
<p>Currently we have deployed a lovely combination of Drupal for our CMS features, ExtJS for the bulk of our IDE&#8217;s user interface, a custom back-end service to handle code building and a number open source projects.</p>
<p><strong>4. Would you consider Compilr to be complete enough for production use or is there substantial work still to be done?</strong></p>
<p>It all depends on your production, currently we do not have any team integration, but we do support publicly visible projects. So if you&#8217;re a one person army, working on a Java, C#, or VB.net desktop application or XNA game, then Compilr might be the right solution for you! In my mind there is always work to be done and this includes: code completion &#8220;IntelliSense&#8221;, online execution of applications and debugging beyond build warnings and errors, and all those lovely team integration features I mentioned earlier.</p>
<p><strong>5. What is on the horizon for <a href="http://compilr.com" target="_blank">Compilr.com</a>?</strong></p>
<p>Besides all the features we want to add, we are always looking for suggestions, expanding our user base, and looking for way to gain recognition for ourselves and Online IDEs in general, we really believe that online IDEs will provide a lot of value for developers in the future.</p>
<p><strong>6. Are there any technological concerns for maintaining an online compiler? What about security?</strong></p>
<p>Security is definitely a concern for us, during our development we take a lot of care in making sure our access points are as secure as possible, although we are human, and we are capable of making mistakes, so we preform regular backups just in case.</p>
<p><strong>7. As more users come to Compilr, how do you plan to scale the system?</strong></p>
<p>We are constantly optimizing code so we can fit more users on to less machines, with less bandwidth. But we also plan on clustering our users, for example: Group 1 would be mirrored on server A and B while Group 2 would be on server C and D. Completely separating the users data and compilation requirements, besides the common elements required by the CMS front end.</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2011/05/31/interview-with-the-compilr-com-team/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How Microsoft is changing the programming world</title>
		<link>http://programmingzen.com/2010/06/23/how-microsoft-is-changing-the-programming-world/</link>
		<comments>http://programmingzen.com/2010/06/23/how-microsoft-is-changing-the-programming-world/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 17:00:26 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Programming Languages]]></category>

		<guid isPermaLink="false">http://programmingzen.com/?p=1215</guid>
		<description><![CDATA[Several years ago I knew a programmer, we&#8217;ll call him Joe, who fancied himself to be a great developer. He was a senior developer at &#8220;Big Co.&#8221;, who received a large enough pay check to just as easily compensate a few junior developers. The guy had Microsoft certifications, as expected of one in his position, [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>Several years ago I knew a programmer, we&#8217;ll call him Joe, who fancied himself to be a great developer. He was a senior developer at &#8220;Big Co.&#8221;, who received a large enough pay check to just as easily compensate a few junior developers.</p>
<p>The guy had Microsoft certifications, as expected of one in his position, and he appeared to know Visual Studio inside and out, just as you&#8217;d imagine. </p>
<p>What was surprising for me at the time, was that as I got to know Joe better, I slowly started to realize that the guy was absolutely clueless about programming beyond the scope of the Microsoft bubble.</p>
<p>He had never used Linux in his life, nor was he interested in learning about it. He wasn&#8217;t aware of tools like CVS or SVN. He didn&#8217;t seem familiar with the ideas behind unit testing or Agile methodologies; words like &#8220;refactoring&#8221; were outside of Joe&#8217;s vocabulary.</p>
<p>How about other programming languages or paradigms, like functional programming? Nope, nothing there either. He knew Visual Basic 6 and VB.NET, C# (the first release at the time) and a bit of C++. That&#8217;s it. And he was proud of it. As I enquired further in an attempt to figure out what he was all about, he didn&#8217;t mind admitting to a complete ignorance of what wasn&#8217;t printed on Microsoft paper. </p>
<p>What&#8217;s interesting is that, despite his cluelessness &#8211; due to a strict adherence to the Microsoft view of the programming world &#8211; and perhaps a lack of intellectual curiosity, the guy did manage to be somewhat adequate at his job. Not spectacular by any stretch of the imagination, but good enough to keep his well paid job.</p>
<p>Joe simply didn&#8217;t care about tools and techniques that fell outside of the narrow, yet mainstream, beaten Microsoft path.</p>
<p>Over the years I&#8217;ve met countless Joes. In fact, if I were to generalize and characterize many Microsoft developers in the early 2000s, Joe would come to mind like an unpleasant stereotype.</p>
<p>I tell this story not to criticize Joe or to claim that Microsoft developers suck. On the contrary, my argument is that Microsoft will be a key factor in terms of enabling functional programming to become mainstream. In fact, what Microsoft is doing is introducing .NET developers to functional programming, one piece at a time. </p>
<p>Just a few days ago I was reading the blog of a guy who seemed happy to discover a cool &#8220;new&#8221; function called Zip in LINQ (hey Haskell programmer over there, stop laughing, you are disrupting my article). These days following blogs by Microsofties is in fact like witnessing some sort of Renaissance, with plenty of talk about exciting features that are clearly borrowed from the functional programming community.</p>
<p>The evolution of C# and Visual Basic, LINQ, and more recently the inclusion of F# as a fully supported language within the .NET Framework 4.0, all indicate Microsoft&#8217;s new outlook towards functional programming. F# in particular is essentially OCaml for .NET, and has been received with open arms by the Microsoft community (as far as I can tell). </p>
<p>There are very few books by mainstream publishers on OCaml. On the other hand, F# already has a rich ecosystem of <a href="http://www.amazon.com/gp/search?ie=UTF8&#038;keywords=F%23&#038;tag=zenruby-20&#038;index=books&#038;linkCode=ur2&#038;camp=1789&#038;creative=9325">printed books</a><img src="http://www.assoc-amazon.com/e/ir?t=zenruby-20&#038;l=ur2&#038;o=1" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> that have been published by O&#8217;Reilly, Apress, Wrox, Manning, and likely in the near future Microsoft itself. On top of that there are titles devoted to LINQ and countless books on the recent, more functional oriented, C# and VB.</p>
<p>I&#8217;m not measuring the popularity of programming languages by the availability of books alone, but it&#8217;s clear to me that there are millions of Joes out there who are ready to learn these new concepts that are now being put out and promoted by Microsoft. It doesn&#8217;t matter that they&#8217;re not new or that they&#8217;re borrowed from other programming languages like Ruby, Python, LISP, ML, Haskell, etcetera.</p>
<p>The end result of Microsoft&#8217;s new approach is that now Joes everywhere are getting exposed to functional programming (masses of people who would otherwise be virtually shielded from the rest of the programming world).</p>
<p>Microsoft may no longer be the influential powerhouse it once was, but I think it is fair to acknowledge the impact it&#8217;s currently having on making functional programming, or at least some degree of it, more mainstream.</p>
<p><strong>Update</strong>: Initially I used the name &#8220;Dick&#8221; (short for Richard) to identify the programmer I talked about in this story. It was meant to be a humorous double entendre, but turned out to somewhat distract certain readers from the key points that this article was actually about. As well it seems that some people felt I was coming across as being strongly against Microsoft developers (which I&#8217;m not in the least). As a result, some readers ended up being offended by this post, which was never my intention. I don&#8217;t love political correctness, but I feel that replacing the name &#8220;Dick&#8221; with &#8220;Joe&#8221; instead ends up detracting less from the heart of the article.</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2010/06/23/how-microsoft-is-changing-the-programming-world/feed/</wfw:commentRss>
		<slash:comments>113</slash:comments>
		</item>
		<item>
		<title>A faster Ruby on Windows is possible (benchmarks for 4 implementations inside)</title>
		<link>http://programmingzen.com/2009/08/04/a-faster-ruby-on-windows-is-possible/</link>
		<comments>http://programmingzen.com/2009/08/04/a-faster-ruby-on-windows-is-possible/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 06:00:08 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby Benchmark Suite]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=932</guid>
		<description><![CDATA[In yesterday&#8217;s post I compared IronRuby 0.9, Ruby 1.8.6 (from the One-Click Installer) and Ruby 1.9.1 (downloaded from the official site) against one another. IronRuby did great, but the discussion in the comment section quickly veered towards what version of the One-Click Ruby Installer should have been used. I justified my choice of using the [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://antoniocangiano.com/2009/08/03/performance-of-ironruby-ruby-on-windows/">yesterday&#8217;s post</a> I compared IronRuby 0.9, Ruby 1.8.6 (from the One-Click Installer) and Ruby 1.9.1 (downloaded from the official site) against one another. IronRuby did great, but the discussion in the comment section quickly veered towards what version of the One-Click Ruby Installer should have been used.</p>
<p>I justified my choice of using the <a href="http://rubyforge.org/frs/?group_id=167&#038;release_id=28426">&#8220;old&#8221; One-Click Installer</a>, by the fact that I wasn&#8217;t aware of official releases of the new installer. As well as that the old One-Click Installer is the most widely downloaded version. Very few people are familiar with the upcoming version of the project. This point is about to change.</p>
<p>Luis Lavena took over the One-Click Installer project and has been working on the next version (<a href="http://github.com/oneclick/rubyinstaller/tree/master">RubyInstaller</a> from now on), the aim of which is to replace the One-Click Installer by building Ruby 1.8 and 1.9 with MinGW and <span class="caps">GCC</span>. In theory, this brings performance gains on Windows to the table, and gets rid of having to use Visual C++ 6 (a &#8220;ten year old compiler&#8221;) to build Ruby and other native gems. The project also strives to be lighter by bundling fewer (unnecessary) gems for Windows users.</p>
<p>There&#8217;s no doubt that in the long run, this new project will become the de facto standard for Windows, but the questions on everyone&#8217;s mind are, should I bother with it now? How much of a performance boost are we talking about here? 10%? 20%? Let&#8217;s find out.</p>
<p>In this follow up article I&#8217;m going to compare the performance of <a href="http://rubyforge.org/frs/?group_id=167&#038;release_id=28426">Ruby 1.8.6 from the One-Click Installer</a> (mswin32), <a href="http://rubyinstaller.org/downloads/">Ruby 1.8.6 from RubyInstaller</a> (mingw32), Ruby 1.9 (mswin32) downloaded from the <a href="http://ruby-lang.org">Ruby-Lang.com site</a>, and <a href="http://rubyinstaller.org/downloads/">Ruby 1.9 from the RubyInstaller project</a> (mingw32) against one another. I&#8217;ll copy and paste part of the setup and disclaimer from yesterday&#8217;s post, for those who haven&#8217;t read it. Feel free to skip this part if you wish.</p>
<p><strong><big>Setup</big></strong></p>
<ul>
<li>The benchmarks were run within a virtual machine with 2 GB of <span class="caps">DDR3 RAM</span> and a 2.66 GHz Intel Core 2 Duo processor. The operating system adopted was Windows <span class="caps">XP SP3</span> (32 bit) with the .NET Framework 3.5 <span class="caps">SP1</span> installed.</li>
<li>Here I employed a large subset of the current <a href="http://github.com/acangiano/ruby-benchmark-suite/tree/master">Ruby Benchmark Suite project</a>. The source code for all of the benchmarks is available within the repository.</li>
<li>The best time out of five runs is reported for each benchmark. When the results report a Timeout, it means that more than 300 seconds were required for a single iteration and was therefore interrupted. Conversely, N/A means that a test that was compatible for the given implementation was not available or the setup on my machine was lacking the required libraries to execute it (1 test affected).</li>
</ul>
<p><strong><big>Disclaimer</big></strong></p>
<ul>
<li>An attempt has been made to improve the quality of the tests. Some of them may be more representative of realistic workloads, but most of them remain micro-benchmarks. They are indicative of how these implementations compare, but cannot be viewed as a guarantee of how they will actually affect your own programs.</li>
<li>There are <a href="http://en.wikipedia.org/wiki/Lies,_damned_lies,_and_statistics">lies, damned lies, and statistics</a>.</li>
</ul>
<p><strong><big>Benchmark results</big></strong></p>
<p>The table/image below shows the times for each benchmark, for Ruby 1.8.6 (mswin32), Ruby 1.8.6 (mingw32), Ruby 1.9.1 (mswin32), and Ruby 1.9.1 (mingw32). In the table I used (RI) as shorthand for RubyInstaller to indicate mingw32 versions.</p>
<p align="center"><img src="http://antoniocangiano.com/wp-content/uploads/2009/08/mri_kri_windows.png" alt="mswin32 vs mingw32"  /></p>
<p>Red values are errors, timeouts and inapplicable tests. Green, bold values indicate better times than what Ruby 1.8.6 (mswin32) delivered. A pale yellow background indicates the best time for a given benchmark. Total time is the run-time for the subset of benchmarks that were successfully executed by all four implementations. Timeouts have been included this time around. Each timeout has been counted as an additional 300 seconds.</p>
<p>The total runtime (including timeouts) is summarized in the chart below:</p>
<p align="center"><img src="http://antoniocangiano.com/wp-content/uploads/2009/08/mri_kri_total_runtime.png" alt="Total Runtime" /></p>
<p><strong><big>Conclusion</big></strong></p>
<p>Wow! Ruby 1.8.6 (mingw32) improves from 3% to 664% (depending on the test), over the current One-Click Installer. The geometric mean of the ratios (read &#8220;on average&#8221;) tells us that <strong>it was about 283% faster</strong>. The Ruby 1.9.1 version provided by the RubyInstaller was slower than the mswin32 version in a couple of tests, but faster everywhere else. How much faster? Up to 342% faster, with an average (again calculated through the geometric mean of the ratios) of <strong>a 77% increase in speed</strong>.</p>
<p>These finds prompt me to ask, what are we waiting for? You know how unresponsive Ruby is on Windows, and how tests take forever to execute? These mingw32-based releases may very well solve this. And incidentally the bar has been raised for IronRuby as well. I formally invite the Ruby on Windows community to embrace these two projects.</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2009/08/04/a-faster-ruby-on-windows-is-possible/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Comparing the performance of IronRuby, Ruby 1.8 and Ruby 1.9 on Windows</title>
		<link>http://programmingzen.com/2009/08/03/performance-of-ironruby-ruby-on-windows/</link>
		<comments>http://programmingzen.com/2009/08/03/performance-of-ironruby-ruby-on-windows/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 12:00:08 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby Benchmark Suite]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=908</guid>
		<description><![CDATA[In my latest article I discussed the importance of JRuby as a means of introducing Ruby to the Enterprise world. Most of the companies that belong to this ecosystem are Java based, but we cannot forget that a sizable portion of them are Microsoft-centric. Within these companies, Ruby will be far more welcome if a [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>In my <a href="http://antoniocangiano.com/2009/07/28/on-jrubys-importance-for-the-future-of-ruby/">latest article</a> I discussed the importance of JRuby as a means of introducing Ruby to the Enterprise world. Most of the companies that belong to this ecosystem are Java based, but we cannot forget that a sizable portion of them are Microsoft-centric. Within these companies, Ruby will be far more welcome if a .NET implementation is available. The answer to this need is sufficiently fulfilled by <a href="http://ironruby.com/">IronRuby</a> (version 0.9 was just <a href="http://blog.jimmy.schementi.com/2009/08/ironruby-09-released.html">released</a>).</p>
<p>IronRuby has been progressing fast lately. First came support for Rails and then, with this release, a great deal of effort has been placed on improving performance. In the past, IronRuby was <a href="http://antoniocangiano.com/2008/12/09/the-great-ruby-shootout-december-2008/">all but fine-tuned</a>. In fact, it was several times slower than Ruby <span class="caps">MRI</span>, as the team worked on improving compatibility with Ruby 1.8 and mostly ignored performance.</p>
<p>In this article I&#8217;m going to provide some performance results for IronRuby 0.9 on Windows, which I&#8217;m sure will interest readers of this blog as well as of <a href="http://www.amazon.com/gp/product/0470374950?ie=UTF8&#38;tag=zenruby-20&#38;linkCode=as2&#38;camp=1789&#38;creative=9325&#38;creativeASIN=0470374950">my book</a>. Before revealing all the details, let&#8217;s start with the setup and a disclaimer. Please read through it carefully, because the old, trite comments about how &#8220;micro-benchmarks are useless&#8221; won&#8217;t be published. We&#8217;ve already been there, folks. Thank you all for your understanding.</p>
<p><big><strong>Setup</strong></big></p>
<ul>
<li>The benchmarks were run within a virtual machine with 2 GB of <span class="caps">DDR3 RAM</span> and a 2.66 GHz Intel Core 2 Duo processor. The operating system adopted was Windows <span class="caps">XP SP3</span> (32 bit) with the .NET Framework 3.5 <span class="caps">SP1</span> installed.</li>
<li>Here I employed a large subset of the current <a href="http://github.com/acangiano/ruby-benchmark-suite/tree/master">Ruby Benchmark Suite</a> project. The source code for all of the benchmarks is available within the repository.</li>
<li>The best time out of five runs is reported for each benchmark. When the results report a Timeout, it means that more than 300 seconds were required for a single iteration and was therefore interrupted. Conversely, N/A means that a test that was compatible for the given implementation was not available (2 tests) or the setup on my machine was lacking the required libraries to execute it (1 test).</li>
<li>I realize that there is a MinGW One-Click Installer effort that may improve the performance of Ruby on Windows. Here however, I used the regular One-Click Installer as it is the most common one (it&#8217;s been downloaded almost 3.5 million times so far). For Ruby 1.9 I used the binary provided by the <a href="http://www.ruby-lang.org/en/downloads/">download page</a> on the official Ruby site.</li>
</ul>
<p><big><strong>Disclaimer</strong></big></p>
<ul>
<li>An attempt has been made to improve the quality of the tests. Some of them may be more representative of realistic workloads, but most of them remain micro-benchmarks. They are indicative of how IronRuby compares to <span class="caps">MRI</span> (Ruby 1.8) and <span class="caps">KRI</span> (Ruby 1.9) performance-wise, but cannot be viewed as a guarantee of how this will actually affect your own programs.</li>
<li>I didn&#8217;t calculate a RubySpec completeness score for IronRuby. That said, IronRuby 0.9 should be a fairly complete implementation of Ruby 1.8.</li>
<li>There are <a href="http://en.wikipedia.org/wiki/Lies,_damned_lies,_and_statistics">lies, damned lies, and statistics</a>.</li>
</ul>
<p><big><strong>Benchmark results</strong></big></p>
<p>The table below shows the times for each benchmark, for IronRuby 0.9, Ruby 1.8.6 (2008-08-11 patchlevel 287) and Ruby 1.9.1p0 (2009-01-30 revision 21907):</p>
<div align="center">
<table border=0 cellpadding=0 cellspacing=0 width=664 style='border-collapse:<br />
   collapse;table-layout:fixed'><br />
<col width=327>
<col class=xl24 width=52>
<col width=95 span=3>
<tr height=13>
<td height=13 class=xl25 width=327>Benchmark File</td>
<td class=xl26 width=52>#</td>
<td class=xl26 width=95>Ruby 1.8.6</td>
<td class=xl26 width=95>IronRuby</td>
<td class=xl26 width=95>Ruby 1.9.1</td>
</tr>
<tr height=13>
<td height=13 class=xl27>macro-benchmarks/bm_gzip.rb</td>
<td class=xl31>100</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl28 style='color:#DD0806'>IOError</td>
<td class=xl28 style='color:#DD0806'>N/A</td>
</tr>
<tr height=13>
<td height=13 class=xl27>macro-benchmarks/bm_hilbert_matrix.rb</td>
<td class=xl31>20</td>
<td class=xl28>1.891</td>
<td class=xl29>0.453</td>
<td class=xl33>0.125</td>
</tr>
<tr height=13>
<td height=13 class=xl27>macro-benchmarks/bm_hilbert_matrix.rb</td>
<td class=xl31>30</td>
<td class=xl28>7.422</td>
<td class=xl29>1.719</td>
<td class=xl33>0.656</td>
</tr>
<tr height=13>
<td height=13 class=xl27>macro-benchmarks/bm_hilbert_matrix.rb</td>
<td class=xl31>40</td>
<td class=xl28>21.500</td>
<td class=xl29>4.625</td>
<td class=xl33>2.266</td>
</tr>
<tr height=13>
<td height=13 class=xl27>macro-benchmarks/bm_hilbert_matrix.rb</td>
<td class=xl31>50</td>
<td class=xl28>56.765</td>
<td class=xl29>10.031</td>
<td class=xl33>5.109</td>
</tr>
<tr height=13>
<td height=13 class=xl27>macro-benchmarks/bm_hilbert_matrix.rb</td>
<td class=xl31>60</td>
<td class=xl28>111.859</td>
<td class=xl29>18.781</td>
<td class=xl33>11.297</td>
</tr>
<tr height=13>
<td height=13 class=xl27>macro-benchmarks/bm_norvig_spelling.rb</td>
<td class=xl31>50</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl29>41.313</td>
<td class=xl33>31.453</td>
</tr>
<tr height=13>
<td height=13 class=xl27>macro-benchmarks/bm_sudoku.rb</td>
<td class=xl31>1</td>
<td class=xl28>43.734</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl33>6.313</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_app_factorial.rb</td>
<td class=xl31>5000</td>
<td class=xl28>1.328</td>
<td class=xl33>0.063</td>
<td class=xl29>0.266</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_app_fib.rb</td>
<td class=xl31>30</td>
<td class=xl28>6.156</td>
<td class=xl33>0.594</td>
<td class=xl29>0.813</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_app_fib.rb</td>
<td class=xl31>35</td>
<td class=xl28>74.125</td>
<td class=xl33>6.922</td>
<td class=xl29>9.344</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_app_mandelbrot.rb</td>
<td class=xl31>1</td>
<td class=xl28>11.953</td>
<td class=xl29>6.922</td>
<td class=xl33>0.641</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_app_pentomino.rb</td>
<td class=xl31>1</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl33>59.938</td>
<td class=xl29>75.859</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_app_strconcat.rb</td>
<td class=xl31>1.5M</td>
<td class=xl28>30.469</td>
<td class=xl33>2.141</td>
<td class=xl29>4.813</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_app_tak.rb</td>
<td class=xl31>7</td>
<td class=xl28>5.516</td>
<td class=xl33>0.531</td>
<td class=xl29>0.578</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_app_tak.rb</td>
<td class=xl31>8</td>
<td class=xl28>15.609</td>
<td class=xl33>1.484</td>
<td class=xl29>1.703</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_app_tak.rb</td>
<td class=xl31>9</td>
<td class=xl28>45.843</td>
<td class=xl33>3.953</td>
<td class=xl29>4.531</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_app_tarai.rb</td>
<td class=xl31>3</td>
<td class=xl28>19.985</td>
<td class=xl33>1.844</td>
<td class=xl29>2.156</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_app_tarai.rb</td>
<td class=xl31>4</td>
<td class=xl28>19.796</td>
<td class=xl33>2.219</td>
<td class=xl29>2.656</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_app_tarai.rb</td>
<td class=xl31>5</td>
<td class=xl28>24.235</td>
<td class=xl33>2.688</td>
<td class=xl29>3.063</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_binary_trees.rb</td>
<td class=xl31>1</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl29>53.078</td>
<td class=xl33>37.375</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_count_multithreaded.rb</td>
<td class=xl31>16</td>
<td class=xl28>0.297</td>
<td class=xl33>0.266</td>
<td class=xl30>0.328</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_count_shared_thread.rb</td>
<td class=xl31>16</td>
<td class=xl28>0.250</td>
<td class=xl33>0.188</td>
<td class=xl29>0.203</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_fannkuch.rb</td>
<td class=xl31>8</td>
<td class=xl28>3.625</td>
<td class=xl33>0.344</td>
<td class=xl29>0.563</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_fannkuch.rb</td>
<td class=xl31>10</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl33>40.750</td>
<td class=xl29>65.438</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_fasta.rb</td>
<td class=xl31>1M</td>
<td class=xl28>192.937</td>
<td class=xl33>23.703</td>
<td class=xl29>35.234</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_fractal.rb</td>
<td class=xl31>5</td>
<td class=xl28>43.172</td>
<td class=xl33>4.672</td>
<td class=xl29>5.781</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_gc_array.rb</td>
<td class=xl31>1</td>
<td class=xl28>228.672</td>
<td class=xl33>32.031</td>
<td class=xl29>59.828</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_gc_mb.rb</td>
<td class=xl31>500K</td>
<td class=xl28>8.109</td>
<td class=xl29>1.109</td>
<td class=xl33>0.469</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_gc_mb.rb</td>
<td class=xl31>1M</td>
<td class=xl28>16.172</td>
<td class=xl29>2.391</td>
<td class=xl33>1.016</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_gc_mb.rb</td>
<td class=xl31>3M</td>
<td class=xl28>44.953</td>
<td class=xl29>6.906</td>
<td class=xl33>2.938</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_gc_string.rb</td>
<td class=xl31>1</td>
<td class=xl28>47.937</td>
<td class=xl29>25.250</td>
<td class=xl33>11.938</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_knucleotide.rb</td>
<td class=xl31>1</td>
<td class=xl28>9.625</td>
<td class=xl29>2.906</td>
<td class=xl33>2.016</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_lucas_lehmer.rb</td>
<td class=xl31>9689</td>
<td class=xl28>122.672</td>
<td class=xl33>18.125</td>
<td class=xl29>36.250</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_lucas_lehmer.rb</td>
<td class=xl31>9941</td>
<td class=xl28>156.750</td>
<td class=xl33>19.625</td>
<td class=xl29>39.391</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_lucas_lehmer.rb</td>
<td class=xl31>11213</td>
<td class=xl28>179.915</td>
<td class=xl33>28.844</td>
<td class=xl29>61.063</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_lucas_lehmer.rb</td>
<td class=xl31>19937</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl33>159.078</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_mandelbrot.rb</td>
<td class=xl31>1</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl33>65.781</td>
<td class=xl29>81.766</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_mbari_bogus1.rb</td>
<td class=xl31>1</td>
<td class=xl33>0.031</td>
<td class=xl30>40.406</td>
<td class=xl30>8.781</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_mbari_bogus2.rb</td>
<td class=xl31>1</td>
<td class=xl28>0.156</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl28 style='color:#DD0806'>N/A</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_mergesort_hongli.rb</td>
<td class=xl31>3000</td>
<td class=xl28>25.282</td>
<td class=xl33>3.531</td>
<td class=xl29>6.031</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_mergesort.rb</td>
<td class=xl31>1</td>
<td class=xl28>24.735</td>
<td class=xl29>3.906</td>
<td class=xl33>3.219</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_meteor_contest.rb</td>
<td class=xl31>1</td>
<td class=xl28>147.704</td>
<td class=xl33>19.713</td>
<td class=xl29>19.781</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_monte_carlo_pi.rb</td>
<td class=xl31>10M</td>
<td class=xl28>79.406</td>
<td class=xl33>5.109</td>
<td class=xl29>20.672</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_nbody.rb</td>
<td class=xl31>100K</td>
<td class=xl28>37.625</td>
<td class=xl33>8.281</td>
<td class=xl29>10.938</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_nsieve_bits.rb</td>
<td class=xl31>8</td>
<td class=xl28>69.656</td>
<td class=xl29>33.156</td>
<td class=xl33>6.531</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_nsieve.rb</td>
<td class=xl31>9</td>
<td class=xl28>58.344</td>
<td class=xl33>5.453</td>
<td class=xl28 style='color:#DD0806'>N/A</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_partial_sums.rb</td>
<td class=xl31>2.5M</td>
<td class=xl28>93.391</td>
<td class=xl33>10.797</td>
<td class=xl29>26.422</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_pathname.rb</td>
<td class=xl31>100</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_primes.rb</td>
<td class=xl31>3000</td>
<td class=xl28>21.359</td>
<td class=xl29>9.594</td>
<td class=xl33>0.031</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_primes.rb</td>
<td class=xl31>30K</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl33>0.469</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_primes.rb</td>
<td class=xl31>300K</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl33>5.281</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_primes.rb</td>
<td class=xl31>3M</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl33>100.406</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_quicksort.rb</td>
<td class=xl31>1</td>
<td class=xl28>51.046</td>
<td class=xl29>11.594</td>
<td class=xl33>8.703</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_regex_dna.rb</td>
<td class=xl31>20</td>
<td class=xl28>181.172</td>
<td class=xl29>21.188</td>
<td class=xl33>11.938</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_reverse_compliment.rb</td>
<td class=xl31>1</td>
<td class=xl28>61.875</td>
<td class=xl33>48.469</td>
<td class=xl30>138.047</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_so_ackermann.rb</td>
<td class=xl31>7</td>
<td class=xl28>2.234</td>
<td class=xl29>0.563</td>
<td class=xl33>0.484</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_so_ackermann.rb</td>
<td class=xl31>9</td>
<td class=xl28>50.000</td>
<td class=xl29>14.938</td>
<td class=xl33>9.281</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_so_array.rb</td>
<td class=xl31>9000</td>
<td class=xl28>26.328</td>
<td class=xl33>8.984</td>
<td class=xl29>10.781</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_so_count_words.rb</td>
<td class=xl31>100</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl29>60.688</td>
<td class=xl33>42.250</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_so_exception.rb</td>
<td class=xl31>500K</td>
<td class=xl28>78.125</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl33>32.672</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_so_lists_small.rb</td>
<td class=xl31>1000</td>
<td class=xl28>13.906</td>
<td class=xl29>4.250</td>
<td class=xl33>3.172</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_so_lists.rb</td>
<td class=xl31>1000</td>
<td class=xl28>64.531</td>
<td class=xl29>22.266</td>
<td class=xl33>16.797</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_so_matrix.rb</td>
<td class=xl31>60</td>
<td class=xl28>8.312</td>
<td class=xl29>2.781</td>
<td class=xl33>2.125</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_so_object.rb</td>
<td class=xl31>500K</td>
<td class=xl28>16.375</td>
<td class=xl29>5.313</td>
<td class=xl33>1.672</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_so_object.rb</td>
<td class=xl31>1M</td>
<td class=xl28>29.312</td>
<td class=xl29>10.500</td>
<td class=xl33>2.844</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_so_object.rb</td>
<td class=xl31>1.5M</td>
<td class=xl28>43.312</td>
<td class=xl29>16.000</td>
<td class=xl33>4.281</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_so_sieve.rb</td>
<td class=xl31>4000</td>
<td class=xl28>241.922</td>
<td class=xl29>37.859</td>
<td class=xl33>35.688</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_socket_transfer_1mb.rb</td>
<td class=xl31>10K</td>
<td class=xl28>13.266</td>
<td class=xl28 style='color:#DD0806'>SocketError</td>
<td class=xl33>3.359</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_spectral_norm.rb</td>
<td class=xl31>100</td>
<td class=xl28>5.110</td>
<td class=xl29>0.922</td>
<td class=xl33>0.719</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_sum_file.rb</td>
<td class=xl31>100</td>
<td class=xl28 style='color:#DD0806'>Timeout</td>
<td class=xl33>20.406</td>
<td class=xl29>23.797</td>
</tr>
<tr height=13>
<td height=13 class=xl27>micro-benchmarks/bm_word_anagrams.rb</td>
<td class=xl31>1</td>
<td class=xl28>70.828</td>
<td class=xl29>30.188</td>
<td class=xl33>8.125</td>
</tr>
<tr height=13>
<td height=13 class=xl26>TOTAL TIME</td>
<td class=xl26>-</td>
<td class=xl32>2933.334</td>
<td class=xl32>607.088</td>
<td class=xl32>664.094</td>
</tr>
</table></div>
<p><br/></p>
<p>Red values are errors, timeouts, inapplicable tests and times that were worse than Ruby 1.8.6. Green, bold values are better times than what Ruby 1.8.6 delivered. A pale yellow background indicates the best time for a given benchmark. Total time is the runtime for the subset of benchmarks that were successfully executed by all three implementations (whose cardinality is 54).</p>
<p>The total runtime is summarized by the chart below:</p>
<p align="center"><img src="http://antoniocangiano.com/wp-content/uploads/2009/08/rir_total_runtime.png" alt="Total runtime" /></p>
<p>And let&#8217;s compare each of the &#8220;macro-benchmarks&#8221; on an individual basis:</p>
<p align="center"><img src="http://antoniocangiano.com/wp-content/uploads/2009/08/rir_macrobenchmarks.png" alt="Macro-benchmarks chart" /></p>
<p><big><strong>Conclusions</strong></big></p>
<p>IronRuby went from being much slower than Ruby <span class="caps">MRI</span> to considerably faster across nearly all the tests. That&#8217;s major progress for sure, and the team behind the project deserves mad props for it.</p>
<p>One final warning before we get too excited here. IronRuby is not faster than Ruby 1.9.1 at this stage. Don&#8217;t let that first chart mislead you. While it&#8217;s faster in certain tests, it&#8217;s also slower is many others. Currently, it&#8217;s situated between Ruby 1.8.6 and Ruby 1.9.1, but much closer to the latter. The reason why this chart is misleading is that it doesn&#8217;t take into account any tests that timed out, and several of such timeouts were caused by IronRuby (more than those caused by Ruby 1.9.1). If you were to add, say, 300 seconds to the total, for each timeout for the two implementations, you&#8217;d quickly see that Ruby 1.9.1 still has the edge. The second chart that compares macro-benchmarks does a better job at realistically showing how IronRuby sits between Ruby 1.8.6 and Ruby 1.9.1 from a performance standpoint. If you were to plot every single benchmark on a chart, you&#8217;d find a similar outcomes for a large percentage of the tests.</p>
<p>Whether it&#8217;s faster than Ruby 1.9 or not, now that good performances are staring to show up, it&#8217;s easier to see IronRuby delivering on it&#8217;s goal of becoming the main implementation choice for those who both develop and deploy on Windows. This, paired with the .NET and possible Visual Studio integration, the great tools available to .NET developers, and the ability to execute Ruby code in the browser client-side thanks to projects like Silverlight/Moonlight and <a href="http://visitmix.com/Labs/gestalt/">Gestalt</a>, make the project all the more interesting.</p>
<p>What are your thoughts on IronRuby, and how will this dramatic performance gain affect your projects?</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2009/08/03/performance-of-ironruby-ruby-on-windows/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Merb, Rails Myths, Language Popularity and other Zenbits</title>
		<link>http://programmingzen.com/2008/11/14/merb-rails-myths-language-popularity-and-other-zenbits/</link>
		<comments>http://programmingzen.com/2008/11/14/merb-rails-myths-language-popularity-and-other-zenbits/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 23:50:53 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[DB2]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Merb]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby Benchmark Suite]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Zenbits]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=381</guid>
		<description><![CDATA[Zenbits are posts which include a variety of interesting subjects that I&#8217;d like to talk about briefly, without writing a post for each of them. Merb: A few days ago Merb 1.0 was released. Congratulations to Ezra Zygmuntowicz on this important milestone, the Merb community and Engine Yard (who finances the project). Merb 1.0 wasn&#8217;t [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p><em><strong>Zenbits</strong> are posts which include a variety of interesting subjects that I&#8217;d like to talk about briefly, without writing a post for each of them.</em></p>
<p><strong>Merb:</strong> A few days ago <a href="http://brainspl.at/articles/2008/11/08/merb-1-0">Merb 1.0</a> was released. Congratulations to Ezra Zygmuntowicz on this important milestone, the Merb community and <a href="http://engineyard.com">Engine Yard</a> (who finances the project). Merb 1.0 wasn&#8217;t even out yet when some people had already started commenting on the fracturing of the Ruby community that this new framework might bring with this, and the impact that this high visibility &#8220;competitor&#8221; might have on Rails. I believe that having more than one widely adopted web framework will only benefit the Ruby community. Furthermore, it&#8217;s important to remember that this is not a zero-sum game. Ruby programmers are perfectly capable of learning two frameworks and using one or the other, depending on the project at hand. This is particularly true if we consider that Merb, for all of its advantages &#8211; and disadvantages &#8211; when compared to Rails, is not totally different from its forerunner. If you are an expert Rails programmer, you should be able to become proficient in Merb in very little time. To help with this process, the Merb community needs to concentrate on the documentation now, given that the API is finally stable.</p>
<p><strong>Rails Myths:</strong> David Heinemeier Hansson began <a href="http://www.loudthinking.com/posts/29-the-rails-myths">a series of posts about Rails Myths</a>. I like the idea of seeing common myths addressed straight from the horse&#8217;s mouth. Over the past two years, Rails has received quite a bit of backslash and old fashion FUD, so it&#8217;s important to set the record straight, whether the myths are entirely fabricated or if there is some element of truth to them. Whether you agree with David or not, it&#8217;s also nice to hear two sides of the same story. In fact, at the beginning of <a href="http://antoniocangiano.com/my_ruby_on_rails_book.php">my book</a> I debunk a few myths, just to set the record straight regarding what some readers may have heard surrounding the framework. It was a fun part to write.</p>
<p><strong>My Book:</strong> Speaking of my book, <a href="http://antoniocangiano.com/my_ruby_on_rails_book.php">Ruby on Rails for Microsoft Developers</a>, I&#8217;m getting closer to the finish line. I&#8217;m about to complete Chapter 9 (out of eleven chapters). The initial schedule I was provided with has been extended slightly so that there will be sufficient time to properly review the content and ensure that it&#8217;s up to date with the final release of Rails 2.2. Some people wondered what the &#8220;Microsoft Developers&#8221; part means. Is it for people that work at Microsoft? Is it for .NET programmers? Is it for people who develop on Windows?</p>
<p>The truth is that &#8220;Microsoft Developers&#8221; is probably just a marketing term that Wrox selected as a catch-all for of the aforementioned categories of programmers. As an author I&#8217;m trying to serve all of them well, by providing a guide that sneaks in much of the Rails culture and softens the migration path by using an Operating System, and to a certain extent, tools that they&#8217;re already familiar with. In my opinion one of the major obstacles when switching to, or trying, Rails when coming from the Microsoft world, is the culture shock. The documentation and most books assume that you are familiar with *nix systems and tools, and this can be frustrating for those who are forced not only to learn a new language and framework, but also an entirely new set of tools. As it&#8217;s targeted at Microsoft developers, the book obviously makes quite a few references and comparisons to the .NET world, where they fit. This is done so that the many .NET programmers amongst the group of so called &#8220;Microsoft Developers&#8221; will find the book particularly useful. Yet the book remains generic enough so that it can be used by any programmer (particularly Windows users), even those without any knowledge of the Microsoft .NET Framework or ASP.NET.</p>
<p><strong>Python books:</strong> While on the subject of books, I wanted to mention that the final version of the <a href="http://pylonsbook.com/alpha1/toc">Pylons book</a> is available online. Despite the much less fancy UI, the book pretty much does what the <a href="http://djangobook.com/en/1.0/">Django Book</a> did in the past. And both are available in print as well (<a href="http://www.amazon.com/gp/product/1590597257?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=1590597257">The Definitive Guide to Django: Web Development Done Right</a> and <a href="http://www.amazon.com/gp/product/1590599349?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=1590599349">The Definitive Guide to Pylons</a>). <a href="http://pylonshq.com/">Pylons</a> is a Python web framework that can be viewed as a Ruby on Rails clone, in a far greater way than Django could ever be considered.</p>
<p>Another thing I want to mention is that I received a copy of <a href="http://www.amazon.com/gp/product/184719494X?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=184719494X">Expert Python Programming</a>. I haven&#8217;t gotten to far into it yet, but from what I&#8217;ve seen so far, things look good. I hope to be able to read it through, over a weekend in the near future and then provide a proper review. Stay tuned.</p>
<p><strong>Language Popularity:</strong> If you take a look at the <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">TIOBE Index</a>, you&#8217;ll notice a few interesting things: Ruby has dropped two positions since last year, and it&#8217;s now the 11th most popular language in the world. This shouldn&#8217;t be cause for concern though, as shown by this <a href="http://www.tiobe.com/index.php/paperinfo/tpci/Ruby.html">Ruby graph</a>. Python on the other hand is increasing in popularity and moved from the 7th to the 6th most popular language. Interestingly, according to the index (the results of which are educated guesses only), Python would seem to be more popular than C#. I find this to be true, in terms of online activity within an increasingly vibrant community, but in my opinion, the job market hasn&#8217;t caught up yet. In fact, at least in Toronto, when there&#8217;s a Python opening it&#8217;s pretty much an event that&#8217;s worthy of being discussed on the local Python mailing list. C# openings are much more common. This may be different in Silicon Valley, of course. It would also seem that Delphi has experienced a huge come back, moving from the 11th position last year to the 8th one this time around. It&#8217;s hard to imagine that Delphi has had a similar level of adoption as C# and thus has become more popular than Perl, JavaScript and Ruby. Delphi is a great solution for Win32 programming, but I don&#8217;t quite believe this overly optimistic outlook. And if this is the case, where are all the Delphi jobs and buzz?</p>
<p><strong>DB2:</strong> <a href="http://www.youtube.com/watch?v=W69zLWjpzEo">This interview</a> shows a few good reasons why even smaller and medium sized companies are increasingly adopting DB2. And while the video doesn&#8217;t mention it, IBM is coming out with <a href="http://www.ibm.com/software/data/db2/express/download.html?S_CMP=ECDDWW01&#038;S_TACT=ACDB201">an updated version of DB2 Express-C 9.5</a>. This new version, 9.5.2 or 9.5 FixPack 2, is going to introduce exciting new features, including an engine for full text search.</p>
<p><strong>The Great Ruby Shootout</strong> These days you hear a lot of talk about parallel programming. Intel <a href="http://software.intel.com/en-us/blogs/2008/10/22/sequential-programming-is-dead-so-stop-teaching-it/">promotes it</a> and despite their bias, it&#8217;s plausible that parallel programming will become important as the CPU market heads towards an increasingly larger number of cores, as opposed to focusing on the frequency of said CPUs. In the world of Ruby, this translates into <a href="http://www.igvita.com/2008/11/13/concurrency-is-a-myth-in-ruby/">multiprocessing, as opposed to multithreading</a> due to the infamous GIL (Global Interpreter Lock). This means that Ruby will most likely approach the problem similarly to how Python 2.6 did with the <a href="http://docs.python.org/dev/library/multiprocessing.html">multiprocessing module</a>, which is a process-based interface. The obvious exceptions are JRuby and IronRuby, which establish a 1 to 1 relationship between green threads and OS threads.</p>
<p>For the shootout, it would be interesting to see some multithreaded code, so as to get a better sense of how well JRuby and IronRuby compare to MRI and 1.9, when more cores are available. In fact, the long-promised shootout will be performed on a quad-core machine with 8GB of RAM. If Charles Nutter, John Lam, or any of their team members would like to contribute some programs that are able to take advantage of &#8220;native&#8221; multithreading, I&#8217;d be very happy to include them in the <a href="http://groups.google.com/group/ruby-benchmark-suite?pli=1">Ruby Benchmark Suite</a>, to be used for my shootout.</p>
<p>The repository requires some love and refactoring, since it needs to be split in two types of benchmarks. The simpler one will evaluate the execution time minus the startup time, while the more advanced benchmark will also exclude the time required for parsing and loading modules, classes and methods in the AST. It would also be nice to test each program with variable input sizes and report these results accordingly. Right now I&#8217;m very busy with the book, but as I become more available, I&#8217;ll start working on this.</p>
<p>Finally, I want to point out <a href="http://unweary.com/2008/11/specifying-performance.html">a very interesting article</a> about performance and UIs. Slow is indeed a very relative concept, and it&#8217;s important to understand how to analyze and respond to the user requirements when it comes to the responsiveness of an application as a user interacts with it.</p>
<p><strong>Hardware:</strong> I finally bought a <a href="http://www.amazon.com/gp/product/B00006B9CR?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=B00006B9CR">Trackball made by Logitech</a> and the <a href="http://www.amazon.com/gp/product/B000OOY4S6?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=B000OOY4S6">Microsoft Ergonomic Keyboard</a> (Microsoft makes great hardware). I don&#8217;t have wrist problems, but I&#8217;d like to see how these two affect my extensive computer usage. I plan to report my experience as soon as I&#8217;ve had a chance to use these input devices for a while, since I know this is a topic that interests lots programmers (many of whom end up being victims of <a href="http://en.wikipedia.org/wiki/Repetitive_strain_injury">RSI</a>, and some of the IRS <img src='http://programmingzen.com/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> ). I also bought <a href="http://www.amazon.com/gp/product/B000XZ79ME?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=B000XZ79ME">a bad-ass color laser printer</a> which is quite handy when you&#8217;re a programmer and you are writing a book. I&#8217;ll let you know how it goes. What I didn&#8217;t buy, but still think is awesome, is the <a href="http://www.amazon.com/gp/product/B001HSOFI2?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=B001HSOFI2">Flip minoHD</a>. It&#8217;s the equivalent of an iPod for the world of camcorders. $235 for a camcorder that&#8217;s so perfectly compact, and yet that can record in HD, is a pretty sweet deal. I&#8217;m considering it for Christmas, assuming it reaches Canada by then.</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2008/11/14/merb-rails-myths-language-popularity-and-other-zenbits/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Rise of the Functional Paradigm</title>
		<link>http://programmingzen.com/2008/11/08/the-rise-of-the-functional-paradigm/</link>
		<comments>http://programmingzen.com/2008/11/08/the-rise-of-the-functional-paradigm/#comments</comments>
		<pubDate>Sat, 08 Nov 2008 21:21:10 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=366</guid>
		<description><![CDATA[In yesterday&#8217;s address to the Ruby community, Dave Thomas invited Rubyists to fork Ruby, to freely research and experiment with new and interesting features. If this process is successful, many of these features will inevitably see their way back into Ruby&#8217;s core, thus improving the language in leaps and bounds. And I feel he couldn&#8217;t [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p><img src="http://antoniocangiano.com/images/lambda.gif" alt="Lambda" title="Lambda" align="right"/>In <a href="http://www.matthewdavidwilliams.com/2008/11/07/rubyconf-2008-dave-thomas-keynote-notes/">yesterday&#8217;s address</a> to the Ruby community, Dave Thomas invited Rubyists to fork Ruby, to freely research and experiment with new and interesting features. If this process is successful, many of these features will inevitably see their way back into Ruby&#8217;s core, thus improving the language in leaps and bounds. And I feel he couldn&#8217;t have been any more right. In fact, the whole industry is experiencing the trend of incorporating features developed in less common languages, research languages, &#8220;toy languages&#8221; if you prefer, within mainstream ones.</p>
<p>Experimenting with these alternative languages is important because occasionally they themselves become widely used, and even when they fail to do so, they lend their insight to the world of software development, finding their way into other languages. This approach greatly accelerates the development of common languages for the good of their large user bases and the improvement of the software industry. It&#8217;s a win-win situation for everyone involved and for the development community as a whole.</p>
<p>Pay attention to the development community online, and you&#8217;ll quickly notice a few non-mainstream programming languages appear over and over again. I&#8217;m referring to languages like F#, Erlang, Haskell, Scala and Clojure. I&#8217;ll admit to a certain selection bias, given that I tend to hang out in communities where hackers and developers actively pursue the betterment of their programming skills, beyond the stereotypical 9 to 5 requirements. But nevertheless, three or four years ago the average developer probably wouldn&#8217;t have heard about any of them (at least the ones that existed at the time). And today all of these languages have active communities, books being published about them, and most programmers have at least encountered some of these names.</p>
<p>They are all different languages, but their common denominator is the functional paradigm. Notice that I titled this post &#8220;The Rise of the Functional Paradigm&#8221; and not &#8220;The Rise of Functional Languages&#8221;. In a sense the latter is true as well, since there&#8217;s been much more attention towards functional programming languages lately. But there is a subtle difference. I don&#8217;t expect purely functional languages to become the most used programming languages anytime soon. For the foreseeable future, I don&#8217;t predict US companies to outsource Haskell jobs to India or China, like they do today for Java or .NET projects.</p>
<p>Yet these functional languages serve a higher purpose. Not only do they satisfy the needs of intellectually curious developers and companies looking for a competitive advantage, but they also have a great deal of influence on the rest of the development world.</p>
<p>We are seeing a convergence between these two groups of languages. Functional languages will strive to become as useful as possible, with libraries and tools that are more adequate for mainstream developers, while conserving their functional purity (I&#8217;m looking at you almighty Haskell). Meanwhile, mainstream languages will slowly adopt powerful features found in these functional and other research languages, adding further expressiveness and capabilities to their largely adopted foundations. F#, the evolution of C# and the addition of <span class="caps">LINQ</span> should be enough evidence that this is the case at least for the .NET platform. And even C++0x and D are leaning towards the incorporation of some functional features (e.g. lambda expressions and closures). The two types of languages come from different directions but will reach a similar destination.</p>
<p>The ever increasingly popular Ruby, Python and JavaScript owe their success to several factors. And while they are considered multi-paradigm and were mostly aided in their popularity by their immediacy, simplicity, usefulness and a set of historical circumstances, they&#8217;re all hybrid languages that adopt functional features. The functional paradigm is becoming so common, that it&#8217;s hard to imagine seeing any new programming language rise to fame without including at least a subset of the features available in other functional programming languages. As developers, we&#8217;ve grown to expect the elegance of functional features in a language. No lambda, no party.</p>
<p>If the 90s were characterized by the rise of the Object Oriented paradigm, and this decade can be considered as a transition phase, then the future belongs to the functional paradigm. Whether developers prefer to mix this with other paradigms (e.g. in languages like Ruby, Python, C#, etc&#8230;), like a powerful cocktail, or shoot it straight down (e.g. in purely functional languages like Haskell), the functional paradigm is here to stay.</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2008/11/08/the-rise-of-the-functional-paradigm/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Take this survey and win a free ticket for the Professional Ruby Conference</title>
		<link>http://programmingzen.com/2008/11/06/take-this-survey-and-win-a-free-ticket-for-the-professional-ruby-conference/</link>
		<comments>http://programmingzen.com/2008/11/06/take-this-survey-and-win-a-free-ticket-for-the-professional-ruby-conference/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 21:52:45 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[DB2]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=355</guid>
		<description><![CDATA[Addison Wesley will hold their first Professional Ruby Conference in Boston, Massachusetts between November 17 and 20, 2008. This conference, for which Obie Fernandez is the Technical Chair, is highly educational and boasts some of the best speakers from the Ruby and Rails communities. The organizers were kind enough to invite me, offering me a [...]
Possibly related posts:<ol>
<li><a href='http://programmingzen.com/2007/11/27/ruby-python-haskell-and-objective-c-feed-survey/' rel='bookmark' title='Ruby, Python, Haskell and Objective-C Feed Survey'>Ruby, Python, Haskell and Objective-C Feed Survey</a></li>
<li><a href='http://programmingzen.com/2008/10/06/free-version-of-ruby-in-steel/' rel='bookmark' title='Free version of Ruby in Steel'>Free version of Ruby in Steel</a></li>
<li><a href='http://programmingzen.com/2006/09/13/xml-webcast-with-ibms-team-plus-free-book/' rel='bookmark' title='XML Webcast with IBM&#8217;s team plus free book'>XML Webcast with IBM&#8217;s team plus free book</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img src="/images/ruby_voices.jpg" alt="Professional Ruby Conference" align="right" />Addison Wesley will hold their first Professional Ruby Conference in Boston, Massachusetts between November 17 and 20, 2008. This conference, for which <a href="http://blog.obiefernandez.com/">Obie Fernandez</a> is the Technical Chair, is <a href="http://www.voicesthatmatter.com/ruby2008/schedule.aspx">highly educational</a> and boasts <a href="http://www.voicesthatmatter.com/ruby2008/speakers.aspx">some of the best speakers</a> from the Ruby and Rails communities.</p>
<p>The organizers were kind enough to invite me, offering me a complimentary pass for the Professional Ruby Conference. I won&#8217;t be able to attend, so I decided to donate my free admission to one lucky reader. They also provided me with a priority code (like a coupon) for my readers, which entitle you to receive a $200 discount off the regular admission price.</p>
<p>I really value your opinions and I&#8217;d appreciate it if you could take <a href="https://spreadsheets.google.com/viewform?key=poYI1HLTLZ5ZWHt-6OO1pIw&#038;hl=en">this survey</a>, so that I can improve the quality of this blog. At the end of the survey you&#8217;ll receive your $200 discount code, and will be entered into my draw for your chance to win one free ticket. I will announce and get in touch with the winner early next week (Monday or Tuesday depending on participation levels).</p>
<p><br/></p>
<div align="center">
<h3><a href="https://spreadsheets.google.com/viewform?key=poYI1HLTLZ5ZWHt-6OO1pIw&#038;hl=en">SURVEY</a></h3>
</div>
<p>Possibly related posts:<ol>
<li><a href='http://programmingzen.com/2007/11/27/ruby-python-haskell-and-objective-c-feed-survey/' rel='bookmark' title='Ruby, Python, Haskell and Objective-C Feed Survey'>Ruby, Python, Haskell and Objective-C Feed Survey</a></li>
<li><a href='http://programmingzen.com/2008/10/06/free-version-of-ruby-in-steel/' rel='bookmark' title='Free version of Ruby in Steel'>Free version of Ruby in Steel</a></li>
<li><a href='http://programmingzen.com/2006/09/13/xml-webcast-with-ibms-team-plus-free-book/' rel='bookmark' title='XML Webcast with IBM&#8217;s team plus free book'>XML Webcast with IBM&#8217;s team plus free book</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2008/11/06/take-this-survey-and-win-a-free-ticket-for-the-professional-ruby-conference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What Arc should learn from Ruby</title>
		<link>http://programmingzen.com/2008/10/26/what-arc-should-learn-from-ruby/</link>
		<comments>http://programmingzen.com/2008/10/26/what-arc-should-learn-from-ruby/#comments</comments>
		<pubDate>Sun, 26 Oct 2008 05:07:06 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Merb]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=293</guid>
		<description><![CDATA[There was a lot of buzz surrounding Arc before it was released. Then Paul Graham made an early version available to the public and most people weren&#8217;t too impressed. Paul is a charismatic figure and has his own following, so despite the uncertain welcome that the language received, Arc managed to attract a small community [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>There was a lot of buzz surrounding Arc before it was released. Then Paul Graham made an early version available to the public and most people weren&#8217;t too impressed. Paul is a charismatic figure and has his own following, so despite the uncertain welcome that the language received, Arc managed to attract a small community of curious developers. Then silence. For a few months, most people hardly heard anything about Arc. Until today. <a href="http://www.arclanguage.org/item?id=8462">A post</a> on news.arc suddenly found its way into the spotlight. In this post, its author tried to summarize the status of the language, its failure to attract new developers or even retain the existing ones, and what is perceived as a lack of leadership for the project and a very uncertain future.</p>
<p>I joked about this and said that &#8220;Arc is the infogami of programming languages&#8221;. <a href="http://infogami.com/">Infogami</a> was a project started by <a href="http://www.aaronsw.com/weblog/">Aaron Swartz</a>, that was claiming it was going to revolutionize the web &#8220;like the Macintosh did for computers&#8221; (if I recall the quote correctly). Despite the great expectations and the grand announcements that were made, the project (launched by what was a <a href="http://ycombinator.com">YCombinator</a> startup) never really flew. But I digress; the point is that Arc, like infogami was wrapped in layers of expectations, like a scallop with <a href="http://bacon.reddit.com">bacon</a>, but the delivery and the outcome were less than stellar.</p>
<p>Don&#8217;t hold this against Paul (or Aaron); projects fail or have rocky starts all the time. It&#8217;s the nature of software and of this business. Don&#8217;t jump to conclusions too quickly and assume that Arc has failed and is dead, either. Paul seems to have long term plans for the language. Many popular languages today were absolutely obscure to most developers for their first several years. Should Arc become the great language many had hoped for, people will have no qualms in adopting it in 1, 3 or even 5 years time.</p>
<p>I think that Paul is trying to distinguish between what the core features of the language are and its libraries, and his aim and focus is currently directed towards the former; a core that he wishes to change and evolve with a certain degree of freedom. From many of his writings, it is apparent that Paul has set out one clear cut criterium for the features of his language: whatever changes are made, need to make Arc concise. Concise doesn&#8217;t mean terse or unreadable, it means powerful and expressive enough to enable the language&#8217;s users to write a certain program with much less code than what&#8217;s required by other commonly adopted languages, and if possible, even by the most popular dialects of Lisp.</p>
<p>This approach to the design of the core language is far from off course. For example, Ruby&#8217;s conciseness is one of its most appreciated characteristics and one of the prominent features that sets it apart from compiled languages like C or Java. But a powerful and well designed programming language is not enough. That&#8217;s not really what developers are after.</p>
<p>Programmers are looking for solutions to existing problems and pains. They want tools, and this includes languages, that are good at helping them while they try to implement certain types of software. The languages may be general purpose, but if they don&#8217;t represent an advantage over other alternatives in a particular domain, they are hardly used.</p>
<p>In short, libraries and the ecosystem surrounding programming languages are often as important as the languages themselves.</p>
<p>In a somewhat <a href="http://news.ycombinator.com/item?id=343594">related &#8220;ask News.YCombinator&#8221; question</a>, <a href="http://clojure.org/">Clojure</a> was mentioned as a possible &#8220;next big thing&#8221; for the Lisp world. As you can imagine, the subject of Arc was brought up and Paul stepped in with a few comments. Two significant ones specifically focused on the subject of libraries, trying to address what is currently perceived as one of Arc&#8217;s big weaknesses, whereas it&#8217;s a strong point for Clojure, which can rely on all the existing code available for the Java world (since Clojure targets the JVM).</p>
<p>The first of these comments included the following quote:</p>
<blockquote><p>Powerful libraries are a cheap way to make a new language the language du jour. (Think Rails.) They&#8217;re not the critical ingredient if you&#8217;re trying to make something to last; they may even hurt. &#8212; Paul Graham</p></blockquote>
<p>And the second one, further explained what his position was:</p>
<blockquote><p>The dangers of libraries are that they distract one&#8217;s attention from the core language, and that they could conceal or perpetuate flaws in the core language. I&#8217;m not saying that languages *shouldn&#8217;t* have powerful libraries, btw, just that they may not be 100% upside. &#8212; Paul Graham</p></blockquote>
<p>Read that first quote again. I agree with the initial part of it, but find the conclusion is not supported by the facts. Paul himself brought up the example of Ruby and Rails, so let&#8217;s explore this further and see what Arc could learn from Ruby&#8217;s experience.</p>
<p>Ruby was a very good programming language that for a long time was hardly used outside of Japan. Beside the scarcity of documentation in English, one of the major untold challenges of the language was that it didn&#8217;t really solve a particular problem. It was a beautiful general purpose language and that was it. Sure, quite a few smart early adopters realized the potential of the language, and it started to gain some momentum amongst Perl developers, as a possible Perl successor. But let&#8217;s face it, for most people Perl was good enough.</p>
<p>Ruby&#8217;s core didn&#8217;t really change in 2006, when a large majority of the development community acknowledged the merits of the language. Ruby in 2000 and Ruby in 2006 were not really that different. What was drastically different about the two was the ecosystem surrounding Ruby. And the fact that Ruby now offered an incredible solution for those developers who desired to address the problem of web development. Matz was right, Rails is Ruby&#8217;s killer application.</p>
<p>But let&#8217;s not stop here. Paul agrees that Ruby&#8217;s growth rate has been exponentially increased thanks to Rails. So much so that he mentioned it as an emblematic example of a &#8220;cheap way&#8221; to bring a language to the front of the class. He concludes however, that this is not really the right approach or the critical ingredient needed to create something that lasts. He even goes so far as to say that it may end up hurting the language. And in this, I absolutely disagree.</p>
<p>I disagree because the history of Ruby and that of a few other programming languages shows how the arrival of a community of interested developers has always had many more benefits than drawbacks, provided that a minimal leadership for the projects existed. Taking an accelerated course in Ruby History 101, we&#8217;d discover that Ruby already had its own group of fans and a growing English speaking community. Ruby was able to stand on its own merits. What Rails did was inject an incredible amount of attention towards Ruby from developers, companies and the tech oriented media.</p>
<p>What was the effect of all this on Ruby? Countless libraries were written for the language; thousands of companies, particularly startups, adopted Ruby as their language of choice. There was a spur of alternative new Ruby web frameworks (like Merb, Ramaze, etc&#8230;) and also a dozen alternative implementations that attempt to improve upon the shortcomings of the language&#8217;s main implementation and, in a few occasions, to integrate Ruby with other existing VMs (e.g. with JRuby and IronRuby). There were a grand total of two generally available books on the topic, yet now bookstores are filled with Ruby-specific books, not just ones about Rails (something I predicted to my wife back in 2004). Perhaps more importantly, Ruby is now also widely used outside of the web development world as the truly general purpose language it was intended to be. Every time a DSL is needed, Ruby delivers. There are very popular conferences for the language held throughout the year and companies (e.g. Engine Yard) and VCs are investing money in the future of Ruby. mod_ruby wasn&#8217;t working for Rails? Along came Mongrel (and several other alternatives) and now even mod_rails to address the deployment issues.</p>
<p>Paul, I&#8217;ll take this flourishing community and ecosystem if its downside is just a sea of newbies asking silly questions in forums. Rails has shown the world what Ruby is capable of, and by doing so, it also presented Ruby&#8217;s faults in a clear light. Only this time, there weren&#8217;t 100 people ready to jump in and fix it; there were 10,000, several companies and millions of dollars to back it up. To me this is a critical ingredient to make something last.</p>
<p>I understand that Paul isn&#8217;t rushing when it comes to Arc, and that he wants to perfect his language before letting a large crowd gather around it, but the risk here is the alienation of early adopters and letting many people who were genuinely interested in the project down. Arc like Ruby did (and unlike Clojure), cannot rely on a wealth of existing code. To ensure its bright future Arc will therefore need to make up for this with, yes, a well designed powerful core, but above all with a growing set of libraries, a growing community and if possible, at least one easily identifiable area where Arc shines in resolving one problem better than other existing languages are capable of doing. Based on the trend of the development world, this killer application will probably come in the form of a Rails or Seaside equivalent for Arc. There isn&#8217;t a mad dash, Arc is still very young after all, but it would be a mistake to underestimate the importance of such a critical component for the future and success of this language.</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2008/10/26/what-arc-should-learn-from-ruby/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Free version of Ruby in Steel</title>
		<link>http://programmingzen.com/2008/10/06/free-version-of-ruby-in-steel/</link>
		<comments>http://programmingzen.com/2008/10/06/free-version-of-ruby-in-steel/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 04:12:58 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=255</guid>
		<description><![CDATA[Later today, SapphireSteel is going to release a free &#8216;personal&#8217; version of their Ruby in Steel IDE (based on the Visual Studio Shell). This is great news for those of you who are used to Visual Studio and are now switching to Ruby/Rails, or simply for developers who opt to work on Windows (both categories [...]
Possibly related posts:<ol>
<li><a href='http://programmingzen.com/2006/01/30/ruby-cookbook-rough-cuts-version/' rel='bookmark' title='Ruby Cookbook: Rough Cuts Version'>Ruby Cookbook: Rough Cuts Version</a></li>
<li><a href='http://programmingzen.com/2007/11/23/give-rubynet-09-some-love/' rel='bookmark' title='Give Ruby.NET 0.9 some love'>Give Ruby.NET 0.9 some love</a></li>
<li><a href='http://programmingzen.com/2008/05/20/this-week-in-ruby-may-20-2008/' rel='bookmark' title='This Week in Ruby (May 20, 2008)'>This Week in Ruby (May 20, 2008)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Later today, <a href="http://www.sapphiresteel.com/">SapphireSteel</a> is going to release a free &#8216;personal&#8217; version of their Ruby in Steel IDE (based on the Visual Studio Shell). This is great news for those of you who are used to Visual Studio and are now switching to Ruby/Rails, or simply for developers who opt to work on Windows (both categories of developers may also be interested in <a href="/my_ruby_on_rails_book.php">my forthcoming book</a>).</p>
<p align="center"><img src="http://antoniocangiano.com/wp-content/uploads/2008/10/intellisense_small-300x225.gif" alt="Ruby in Steel" title="Ruby in Steel" />
</p>
<p>This has not been officially announced, but trust me, the free version should become available later today, so keep an eye on <a href="http://www.sapphiresteel.com/">their site</a>. Enjoy! <img src='http://programmingzen.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><strong>UPDATE</strong>: <a href="http://www.sapphiresteel.com/Ruby-In-Steel-New-Free-Edition">Direct link to the announcement</a>.</p>
<p>Possibly related posts:<ol>
<li><a href='http://programmingzen.com/2006/01/30/ruby-cookbook-rough-cuts-version/' rel='bookmark' title='Ruby Cookbook: Rough Cuts Version'>Ruby Cookbook: Rough Cuts Version</a></li>
<li><a href='http://programmingzen.com/2007/11/23/give-rubynet-09-some-love/' rel='bookmark' title='Give Ruby.NET 0.9 some love'>Give Ruby.NET 0.9 some love</a></li>
<li><a href='http://programmingzen.com/2008/05/20/this-week-in-ruby-may-20-2008/' rel='bookmark' title='This Week in Ruby (May 20, 2008)'>This Week in Ruby (May 20, 2008)</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2008/10/06/free-version-of-ruby-in-steel/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>This Week in Ruby (July 26, 2008)</title>
		<link>http://programmingzen.com/2008/07/26/this-week-in-ruby-july-26-2008/</link>
		<comments>http://programmingzen.com/2008/07/26/this-week-in-ruby-july-26-2008/#comments</comments>
		<pubDate>Sat, 26 Jul 2008 08:10:59 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[This Week in Ruby]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=207</guid>
		<description><![CDATA[This is the 13th episode of This Week in Ruby, please consider subscribing to my feed so as to not miss any weekly installments. Also, if you enjoy the series and this blog in general, please consider recommending me on Working With Rails. JRuby 1.1.3 has been released. This version includes several bug fixes and [...]
Possibly related posts:<ol>
<li><a href='http://programmingzen.com/2008/07/11/this-week-in-ruby-july-11-2008/' rel='bookmark' title='This Week in Ruby (July 11, 2008)'>This Week in Ruby (July 11, 2008)</a></li>
<li><a href='http://programmingzen.com/2008/04/28/this-week-in-ruby-april-28-2008/' rel='bookmark' title='This Week in Ruby (April 28, 2008)'>This Week in Ruby (April 28, 2008)</a></li>
<li><a href='http://programmingzen.com/2008/04/21/this-week-in-ruby-april-21-2008/' rel='bookmark' title='This Week in Ruby (April 21, 2008)'>This Week in Ruby (April 21, 2008)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><em>This is the 13th episode of This Week in Ruby, please consider <a href="http://feeds.feedburner.com/ZenAndTheArtOfRubyProgramming">subscribing to my feed</a> so as to not miss any weekly installments. Also, if you enjoy the series and this blog in general, please consider <a href="http://workingwithrails.com/recommendation/new/person/4723-antonio-cangiano">recommending me</a> on Working With Rails.</em></p>
<p></p>
<p><a href="http://docs.codehaus.org/display/JRUBY/2008/07/19/JRuby+1.1.3+Released">JRuby 1.1.3</a> has been released. This version includes several bug fixes and major speed and memory improvements.<br />
Satish Talim of RubyLearning has announced <a href="http://rubylearning.com/satishtalim/jruby_course.html">a new course</a> dedicated to the subject, and also interviewed Charles Nutter for the occasion, who provided some suggestions for <a href="http://rubylearning.com/blog/2008/07/21/charles-nutter-talks-to-rubylearning-participants/">RubyLearning participants</a>. This week, Satish also interviewed <a href="http://rubylearning.com/blog/2008/07/23/guy-naor-cto-morph-labs/">Guy Naor</a>, the <span class="caps">CTO</span> of Morph Labs, a prominent cloud computing Rails hosting company.</p>
<p>On the .NET side, things are moving just as quickly. <a href="http://rubyworld.wordpress.com/2008/07/25/great-ironruby-news-from-oscon-2008-cheer-up/">Some great news</a> emerged from <span class="caps">OSCON 2008</span> regarding IronRuby, including the first binary release and the setting up of a project called ironruby-contrib on GitHub. This already includes the Rails plugin for Silverlight. Meanwhile, Peter Cooper published a great set of <a href="http://www.rubyinside.com/ironruby-tutorials-by-justin-etheredge-964.html">IronRuby tutorials to bring C# developers into the Ruby fold</a>.</p>
<p>In the alternative framework world, <a href="http://www.mackframework.com/2008/07/16/release-060/">Mack Framework 0.6</a> was released, which includes DataMapper 0.9.2 and RSpec support, transactional tests, internationalization and other improvements. The <a href="http://blog.merbivore.com/2008/07/21/charging-toward-1-0">roadmap to Merb 1.0</a> was also posted on the official blog.</p>
<p>I had previously mentioned a few well known issues with Ruby and <span class="caps">XML</span>. Well, it appears that there is hope regarding a <a href="http://cfis.savagexi.com/articles/2008/07/16/resurrecting-libxml-ruby">libxml-ruby resurrection</a> after all. <a href="http://redcloth.org">RedCloth 4</a> was also released this week.</p>
<p>Two interesting articles were: <a href="http://judofyr.net/posts/dont-forget-about-rubyforge.html">Don&#8217;t forget about RubyForge</a>, which covers the issue of mass migration towards GitHub, and <a href="http://blog.jayfields.com/2008/07/ruby-underuse-of-modules.html">Modules underuse</a> by Jay Fields.</p>
<p>Toronto&#8217;s sponsor-less conference <a href="http://rethink.unspace.ca/2008/7/20/we-are-rubyfringe">RubyFringe</a> is over and according to its participants it was fantastic. I truly regret not being able to participate in it. For those who were there, feel free to share your opinions in the comment section.</p>
<p>One last thing before you go; I must give my &#8220;caught-red-handed Ruby Community award&#8221; this week to Thiyagarajan Veluchamy. This dude thought it was a good idea to <a href="http://thiyagarajanveluchamy.wordpress.com/2008/07/23/top-10-ruby-on-rails-performance-tips">lift the entire content</a> of <a href="http://antoniocangiano.com/2007/02/10/top-10-ruby-on-rails-performance-tips/">one of my most popular articles</a> from more than a year ago, even hotlinking the image, and then attributing the post to himself. Did he really think that no one would notice? Its link became popular on Del.icio.us for the Rails tag, and I got all sorts of emails from people who recognized my old (and now somewhat outdated) article. After a brief investigation, it turns out that Thiyagarajan has a habit of stealing content. Other articles appear to be copied verbatim from various blogs. Thiyagarajan, a word of advice, gathering inspiration from a certain post is fine, copying it is not. Especially if you try to pull it off by copying from someone who reports on the most interesting and popular posts in the community. That&#8217;s just a really dumb move.</p>
<p>To keep the good times rolling, the fourth edition of <a href="http://weblog.rubyonrails.org/2008/7/26/this-week-in-rails-july-26-2008">This Week in Rails</a> is available on the official Rails blog.</p>
<p>Possibly related posts:<ol>
<li><a href='http://programmingzen.com/2008/07/11/this-week-in-ruby-july-11-2008/' rel='bookmark' title='This Week in Ruby (July 11, 2008)'>This Week in Ruby (July 11, 2008)</a></li>
<li><a href='http://programmingzen.com/2008/04/28/this-week-in-ruby-april-28-2008/' rel='bookmark' title='This Week in Ruby (April 28, 2008)'>This Week in Ruby (April 28, 2008)</a></li>
<li><a href='http://programmingzen.com/2008/04/21/this-week-in-ruby-april-21-2008/' rel='bookmark' title='This Week in Ruby (April 21, 2008)'>This Week in Ruby (April 21, 2008)</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2008/07/26/this-week-in-ruby-july-26-2008/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

