<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Nimble Code: Tag ruby</title>
    <link>http://nimblecode.com/articles/tag?tag=ruby</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Jacob Harris' Weblog</description>
    <item>
      <title>Rails Under the Knife</title>
      <description>&lt;p&gt;After months of rehearsing and revising, I finally gave the talk at &lt;span class="caps"&gt;OSCON&lt;/span&gt;. I think it could use another month of refinement, but people seemed to enjoy it, and I actually enjoyed giving it as well. If you were at the talk, thank you for coming and feel free to let me know if you have any feedback or questions.&lt;/p&gt;


	&lt;p&gt;My talk was &lt;strong&gt;Rails Under the Knife&lt;/strong&gt;, a look at the some of the internals of Rails to get a better idea of 3 powerful Ruby techniques:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Metaprogramming&lt;/li&gt;
		&lt;li&gt;Reflection&lt;/li&gt;
		&lt;li&gt;Blocks&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;You can download the slides at&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://s3.amazonaws.com/harrisj-share/oscon2007.pdf"&gt;http://s3.amazonaws.com/harrisj-share/oscon2007.pdf&lt;/a&gt; (&lt;em&gt;5mb &lt;span class="caps"&gt;PDF&lt;/span&gt;!&lt;/em&gt;)&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;This talk is aimed at an intermediate Rails programmer who knows the basics of Rails coding (I have another similar talk for beginners called Rubyisms in Rails), but still is a bit unsure about the power trio of serious Rails hackery. Hopefully, this will help to provide some inspiration for you to delve into the Rails code on your own. Enjoy.&lt;/p&gt;</description>
      <pubDate>Thu, 26 Jul 2007 18:20:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:7b7fce0c-25ef-4561-8ca1-6552ceb9e572</guid>
      <author>harrisj@nimblecode.com (Jacob Harris)</author>
      <link>http://nimblecode.com/articles/2007/07/26/rails-under-the-knife</link>
      <category>Programming</category>
      <category>ruby</category>
      <category>rails</category>
      <category>oscon</category>
      <trackback:ping>http://nimblecode.com/articles/trackback/990</trackback:ping>
    </item>
    <item>
      <title>Packaging Your First Gem With Hoe</title>
      <description>&lt;p&gt;My name is Jacob Harris, and I am a rubygem addict. I&amp;#8217;d estimate I have hundreds of them tooling around on my hard drive, useful little snippets of Ruby or C library wrappers or random noodlings. I might not actually use most of them in any of my projects, but like a vast library of unread books, I enjoy having them around. But for the longest time, I&amp;#8217;ve been a freeloader. I&amp;#8217;ve downloaded gems, but I&amp;#8217;ve never written one, but it&amp;#8217;s time I start giving something back.&lt;/p&gt;


	&lt;p&gt;And so, I&amp;#8217;ve written my first gem. It&amp;#8217;s nothing incredible &amp;#8211; all things have to start simple &amp;#8211; but I like it. It&amp;#8217;s called &lt;a href="http://amazon-hacks.rubyforge.com/"&gt;Amazon Hacks&lt;/a&gt; and it consists of two classes (for now) to benefit people whose sites handle Amazon links. The Amazon::Hacks::Link class contains a few methods to extract an &lt;span class="caps"&gt;ASIN&lt;/span&gt; from any product link, normalize product links, and append an affiliate ID easily. The slightly sillier Amazon::Hacks::Image class puts a convenient Ruby wrapper around the &lt;a href="http://aaugh.com/imageabuse.html"&gt;convoluted syntax Amazon uses for its image transformation engine&lt;/a&gt;. If you work on a site that links to Amazon product pages (e.g.,  &lt;a href="http://www.allconsuming.net/"&gt;All Consuming&lt;/a&gt;), try it out and let me know if it works for you or it can be improved. It&amp;#8217;s simple to get started, simply run&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;&lt;strong&gt;gem install amazon-hacks&amp;#8212;include-dependencies&lt;/strong&gt;&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;Which brings me to &lt;strong&gt;hoe&lt;/strong&gt;. Last night, I gave a talk on hoe to the &lt;a href="http://www.nycruby.org/"&gt;NYC.rb group&lt;/a&gt; and the slides are here if you want to learn more about the process. &lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.nimblecode.com/files/hoetalk.pdf"&gt;Building Your First Gem With Hoe&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Before last week, I had no idea of what it takes to create a gem, but it seemed like a lot, and I had better things to distract myself with. And it does indeed require a fair amount of busy work, what I call &lt;em&gt;administrivia&lt;/em&gt;, to turn your snippet of Ruby code into a packaged gem, and this work has to be started anew for each gem you want to create. Now, as pragmatic programmers, we learn to automate menial tasks whenever possible, and hoe makes the creation of gems a lot more manageable by automating the busy-work away via a set of useful rake tests. The result is more time for coding, faster releases, and more likely you&amp;#8217;ll release that gem in the first place. So, give hoe a shot, learn about gems, and start writing gems. You&amp;#8217;re a brilliant Ruby coder, it&amp;#8217;s time to share it with the world. And when you write that gem, I&amp;#8217;ve got a cherished spot on my hard drive for it.&lt;/p&gt;</description>
      <pubDate>Wed, 10 Jan 2007 14:36:00 -0800</pubDate>
      <guid isPermaLink="false">urn:uuid:8260c73d-36d8-4853-a148-a946e2961226</guid>
      <author>harrisj@nimblecode.com (Jacob Harris)</author>
      <link>http://nimblecode.com/articles/2007/01/10/packaging-your-first-gem-with-hoe</link>
      <category>Programming</category>
      <category>hoe</category>
      <category>gems</category>
      <category>presentations</category>
      <category>ruby</category>
      <trackback:ping>http://nimblecode.com/articles/trackback/980</trackback:ping>
    </item>
    <item>
      <title>Or You Can Cheat</title>
      <description>&lt;p&gt;Wow, long time no blog. Work and home life have just sucked all the mental energy out of me lately. For those of you who still have kept me in your feedrolls or click here from time to time, I have a new set of slides presented for your personal enjoyment.&lt;/p&gt;


	&lt;p&gt;Last week&amp;#8212;transfixed by the horror of an empty slate of speakers&amp;#8212;I decided it was time to give another talk to the &lt;span class="caps"&gt;NYC&lt;/span&gt;.rb and so I spent a few days throwing together a presentation I titled &lt;em&gt;Or You Can Cheat&lt;/em&gt;. It&amp;#8217;s all about how you can write C extensions for Ruby and also how this something you shouldn&amp;#8217;t undertake lightly. I have a very &lt;em&gt;interesting&lt;/em&gt; approach to presentations: when I want to learn more about a subject, I throw together a presentation on it. I think the combination of casual interest and the abject fear of humiliation in front of my peers is a great personal motivational tool. This talk continues that trend, and while I can not claim to be a definitive expert on C extensions for Ruby, I certainly know a lot more about the subject now and I think you will too.&lt;/p&gt;


	&lt;p&gt;If you are interested, you can download the talk here&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.nimblecode.com/files/rubyextend.pdf"&gt;Or You Can Cheat&lt;/a&gt;  (600K &lt;span class="caps"&gt;PDF&lt;/span&gt;)&lt;/p&gt;


	&lt;p&gt;This is a bit more silly and off-the-cuff than &lt;a href="http://www.nimblecode.com/articles/2006/04/25/rubyisms-in-rails"&gt;Rubyisms in Rails&lt;/a&gt;, and I really enjoyed it. There are a few references I should clarify though. First, there is the matter of &lt;a href="http://en.wikipedia.org/wiki/Arepa"&gt;arepas&lt;/a&gt;. The arepa is &lt;strong&gt;the&lt;/strong&gt; official food of &lt;a href="http://www.nycruby.org/"&gt;NYC.rb&lt;/a&gt; and it is a rite of passage here to take visiting Ruby eminences to our official supplier, the &lt;a href="http://www.caracasarepabar.com/"&gt;Caracas Arepa Bar&lt;/a&gt;. Asides from being addictively tasty, arepas serve as a perfect metaphor for Ruby extensions, in that they wrap the tasty ingredients inside a pragmatic corn flour shell. They really are that tasty. Yes, I also suppose I was a bit harsh calling Joel Spolsky a troll, but I had no other term to &lt;a href="http://www.joelonsoftware.com/items/2006/09/12.html"&gt;describe his wild extrapolation&lt;/a&gt; that current Ruby interpreter performance augurs that Ruby will always be slow, that Rails is a horrible web development framework, and how you should shackle your entire development environment around the slowest part. But he is right that Ruby currently is slow for &lt;em&gt;some uses&lt;/em&gt;, and C exensions are a potent way to resolve those edge cases without throwing in the towel.&lt;/p&gt;


	&lt;p&gt;And yet, I hope you&amp;#8217;re not dropping everything to write them.&lt;/p&gt;


	&lt;p&gt;Why the lukewarm recommendation? Well, I think Ruby performance has become an all-purpose scapegoat these days. In some cases, this is deserved (we need &lt;span class="caps"&gt;YARV&lt;/span&gt;. Now.), but it&amp;#8217;s all too easy to blame Ruby when the real problem is your web server, your database, or some stupid algorithm you wrote that&amp;#8217;s wildly inefficient. Rule all that out first before you dive into C extensions for Ruby. Because C is dangerous, C is tricky, and C is just plain &lt;strong&gt;no fun.&lt;/strong&gt; C extensions can be like eating an arepa filled with broken glass if you aren&amp;#8217;t careful. But they also are a useful tool for performance and especially for wrapping existing libraries and legacy code.&lt;/p&gt;


	&lt;p&gt;Which gets me wondering if there are any cool killer apps for C extensions and Ruby. Are there some cool open-source libraries that would be nice with Ruby bindings? How cool would could a combination of &lt;a href="http://www.rufy.com/starfish/doc/"&gt;Starfish&lt;/a&gt; and &lt;a href="http://www.zenspider.com/ZSS/Products/RubyInline/"&gt;RubyInline&lt;/a&gt; really be? Would we need to use C extensions to create rbsh, a Ruby shell? What other fun things could you do if you had nice Ruby tongs to keep that nasty C code at bay? Let me know if you have any awesome ideas and if you enjoyed these slides. And in return, I&amp;#8217;ll try to see if I can actually blog again one of these days. Thanks.&lt;/p&gt;</description>
      <pubDate>Wed, 27 Sep 2006 13:08:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:cac7d787-298f-46df-8cf4-66f06aef20b3</guid>
      <author>harrisj@nimblecode.com (Jacob Harris)</author>
      <link>http://nimblecode.com/articles/2006/09/27/or-you-can-cheat</link>
      <category>Programming</category>
      <category>ruby</category>
      <category>performance</category>
      <category>presentation</category>
      <trackback:ping>http://nimblecode.com/articles/trackback/959</trackback:ping>
    </item>
    <item>
      <title>Rubyisms in Rails Redux</title>
      <description>&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="constant"&gt;self&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;promote!&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;I am pleased to announce that the &lt;a href="http://www.informit.com/bookstore/product.asp?isbn=0321474074&amp;#38;rl=1"&gt;digital shortcut &lt;span class="caps"&gt;PDF&lt;/span&gt; version&lt;/a&gt; (to purchase, you have to go to the &lt;a href="http://www.informit.com/shortcuts"&gt;Digital Shortcuts page&lt;/a&gt; or you can buy it from &lt;a href="http://safari.awprofessional.com/0321474074"&gt;Safari&lt;/a&gt; Sorry!) of my &lt;a href="http://www.nimblecode.com/articles/2006/04/25/rubyisms-in-rails"&gt;Rubyisms in Rails&lt;/a&gt; presentation is finally available for purchase. At 54 pages in length for the low price of $9.99, I guarantee you&amp;#8217;ll glean at least 18.5 cents of insight from each page (disclaimer: that&amp;#8217;s a mean instructional value; although gorgeous, the title page is not particularly educational in itself).&lt;/p&gt;


	&lt;p&gt;In addition, the book is also now available in &lt;a href="http://safari.awprofessional.com/"&gt;Safari Books Online&lt;/a&gt;, and possibly Amazon or other retailers as well. Also, be sure to check out the list of &lt;a href="http://www.informit.com/shortcuts"&gt;other upcoming Ruby titles&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;So, what&amp;#8217;s in it? If you&amp;#8217;ve read the original presentation, you already have a sense of the scope of material I am covering here, but the shortcut allows me to focus on the material in greater depth. The result is a richer and more thorough examination of the examples presented in the original slides. If you are an intermediate to advanced Rails hacker, you probably know all this stuff already. But if you are a newcomer to Ruby through Rails, or you still find yourself still stuck coding &lt;span class="caps"&gt;PHP&lt;/span&gt; or Java-like Ruby, this ebook might help to align your thinking to the Ruby way.&lt;/p&gt;


	&lt;p&gt;Will I write another ebook? I&amp;#8217;d say yes, but I&amp;#8217;ll have to think up another interesting topic. But if you are ever thinking of creating a technical book, I&amp;#8217;d recommend starting in a smaller dose like this first. As I discovered, even 54 pages can be a lot of work, and it&amp;#8217;s better to test out your time commitments and abilities with something small before you start pitching large references. But that&amp;#8217;s a topic for another blog posting. Make me happy: &lt;a href="http://www.informit.com/shortcuts"&gt;Buy the ebook&lt;/a&gt; or &lt;a href="http://safari.awprofessional.com/0321474074"&gt;read it on Safari&lt;/a&gt; and give me your feedback. Thanks!&lt;/p&gt;


	&lt;h4&gt;Update&lt;/h4&gt;


	&lt;p&gt;Fixed purchase link to be go to Shortcuts page (where you can add to cart).&lt;/p&gt;</description>
      <pubDate>Wed, 02 Aug 2006 09:46:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:542f8763-96ba-4dad-8185-8ece45adad9e</guid>
      <author>harrisj@nimblecode.com (Jacob Harris)</author>
      <link>http://nimblecode.com/articles/2006/08/02/rubyisms-in-rails-redux</link>
      <category>Books</category>
      <category>Web Coding</category>
      <category>Programming</category>
      <category>ruby</category>
      <category>rails</category>
      <category>rubyisms</category>
      <trackback:ping>http://nimblecode.com/articles/trackback/946</trackback:ping>
    </item>
    <item>
      <title>Rubyisms In Rails</title>
      <description>&lt;p&gt;In an apparently blatant attempt to be more like &lt;a href="http://www.slash7.com/"&gt;Amy Hoy&lt;/a&gt;, I&amp;#8217;ve decided it&amp;#8217;s time I did some Intro to Rails writing. Tonight I&amp;#8217;m going to be giving a little talk on what I&amp;#8217;m calling &lt;strong&gt;Rubyisms&lt;/strong&gt; as seen in Ruby on Rails. I think one of the things that makes Rails so cool is how it is built upon some of the best aspects of Ruby&amp;#8217;s style: duck typing, symbols, blocks, and metaprogramming. And yet, I think many newcomers to Rails don&amp;#8217;t really notice some of the magic going on behind such simple declarations as&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="punct"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="number"&gt;30&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;minutes&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;from_now&lt;/span&gt; &lt;span class="punct"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="string"&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;or more complicated Rails cases like&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Review&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;ActiveRecord&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Base&lt;/span&gt;
  &lt;span class="ident"&gt;belongs_to&lt;/span&gt; &lt;span class="symbol"&gt;:article&lt;/span&gt;
  &lt;span class="ident"&gt;validates_presence_of&lt;/span&gt; &lt;span class="symbol"&gt;:author&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;My humble little slideshow goes out to those Rails newcomers hacking code to look like &lt;span class="caps"&gt;PHP&lt;/span&gt; or Java. The conceit is to use some sample Rails code as starting points for deeper explorations into some of the Ruby coolness lurking inside Rails. This is a nice little look under the hood, but I hope it will educate people new to Rails on how to embrace Ruby style for cleaner and &lt;em&gt;cooler&lt;/em&gt; code.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m posting the slides early for some last minute feedback and I might update these files if any other errors are found. I&amp;#8217;d like to thank &lt;a href="http://www.nycruby.org/"&gt;NYC.rb&lt;/a&gt; compatriots &lt;a href="http://www.zonageek.com/"&gt;Sebastian Delmont&lt;/a&gt;, &lt;a href="http://locomotive.raaum.org/home/show/HomePage"&gt;Ryan Raaum&lt;/a&gt;, &lt;a href="http://www.lifecoding.com/"&gt;Trotter Cashion&lt;/a&gt;, and &lt;a href="http://www.rubypowerandlight.com/"&gt;David Black&lt;/a&gt; for their help and corrections as well.&lt;/p&gt;


	&lt;p&gt;The presentation itself is two parts. I&amp;#8217;m releasing it here in two style. The &lt;em&gt;light version&lt;/em&gt; is stripped of interstitial chapter screens and is a lot easier on the bandwidth:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="/files/rubynewbies-lite.pdf"&gt;PDF Version&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="/files/rubynewbies-lite.swf"&gt;Flash Version&lt;/a&gt; (&lt;strong&gt;Note&lt;/strong&gt;: Flash version is cutting off bottoms of some slides)&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;If you like what you see there and want to get the version I&amp;#8217;m presenting with images, the full 2MB &lt;span class="caps"&gt;PDF&lt;/span&gt; dump is also available:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="/files/rubynewbies.pdf"&gt;Huge &lt;span class="caps"&gt;PDF &lt;/span&gt;Version&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Anyhow, I hope you enjoy my little presentation, and as always feedback and corrections are welcome in the comments.&lt;/p&gt;


	&lt;h3&gt;Update (8/2/06)&lt;/h3&gt;


	&lt;p&gt;This presentation is now available for sale as a &lt;a href="http://www.informit.com/shortcuts"&gt;digital shortcut from Informit&lt;/a&gt; (54 pages, $9.99). Please see my &lt;a href="http://www.nimblecode.com/articles/2006/08/02/rubyisms-in-rails-redux"&gt;Rubyisms Redux&lt;/a&gt; for a small pitch and purchasing links. Thank you!&lt;/p&gt;</description>
      <pubDate>Tue, 25 Apr 2006 10:44:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:12a5164c-0a8b-4924-8661-9d66a0e6a691</guid>
      <author>harrisj@nimblecode.com (Jacob Harris)</author>
      <link>http://nimblecode.com/articles/2006/04/25/rubyisms-in-rails</link>
      <category>Web Coding</category>
      <category>Programming</category>
      <category>ruby</category>
      <category>rails</category>
      <trackback:ping>http://nimblecode.com/articles/trackback/215</trackback:ping>
    </item>
    <item>
      <title>Stop Kicking The Enterprise</title>
      <description>&lt;p&gt;I have to agree with &lt;a href="http://jroller.com/page/obie"&gt;Obie Fernandez&lt;/a&gt; when he complains in his posting &lt;a href="http://jroller.com/page/obie?entry=enterprise_is_not_an_insult"&gt;Enterprise Is Not An Insult&lt;/a&gt; about some of the recent derision directed at the Enterprise lately from the avant garde in the  &lt;a href="http://www.rubyonrails.org/"&gt;Ruby On Rails&lt;/a&gt; community lately. The problem is most of the mockery comes over a misunderstanding that &amp;#8220;enterprise&amp;#8221; means    &amp;#8220;insanely large&amp;#8221;, which Obie points out is completely different from any definition used by people who actually work in enterprise software:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;Plenty of us say &amp;#8220;enterprise&amp;#8221; when referring to internal-facing systems written by corporate IT departments and it doesn&amp;#8217;t carry a stigma for being too large or too small, too simple or too complex. Enterprise projects might be large, take years, straddle business units and have global effects or they might be small, departmental efforts with only a handful of end users. So many factors influence the success of enterprise software in a given organization, only few of which have anything to do with technology.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;Yes, there are large products that call themselves &amp;#8220;enterprise-class software&amp;#8221;, but that doesn&amp;#8217;t mean that all enterprise software has to be big, slow, and hard to develop. But unfortunately, mocking the state of enterprise software has become an oft repeated &lt;a href="http://www.37signals.com/svn/archives2/predicting_06_enterprise_is_the_new_legacy.php"&gt;dumb&lt;/a&gt; &lt;a href="http://www.37signals.com/svn/archives2/define_enterprise_in_10_words_or_less.php"&gt;joke&lt;/a&gt; lately. This is like when a comedian throws out a laugh line &amp;#8211; like slamming Microsoft or calling France &amp;#8220;surrender monkeys&amp;#8221; &amp;#8211; to get a quick laugh; it&amp;#8217;s funny at first but soon loses its novelty.&lt;/p&gt;


	&lt;p&gt;Giving a definition of my own, &amp;#8220;enterprise software&amp;#8221; means &amp;#8220;business software.&amp;#8221; All businesses want to increase their profits, and they do that by reducing inefficiency (ie, &amp;#8220;we can track all of our operations within Excel&amp;#8221;) or expanding into new niches (ie, opening overseas offices or offereing new business). Enterprise or &lt;acronym title="business to business"&gt;B2B&lt;/acronym&gt; software &amp;#8211; whether shrink-wrapped or custom &amp;#8211; is what helps them get there. The best enterprise software becomes as essential as the &lt;span class="caps"&gt;CEO&lt;/span&gt; or infrastructure to a company&amp;#8217;s success. And smart companies look to develop such software as quickly as possible, both to increase their profits quicker and gain advantage over their competitors. Yes, there is slow and clunky enterprise software, but there is also lightweight and rapidly developed enterprise software too. Speaking from personal experience, at &lt;a href="http://www.alacra.com/"&gt;Alacra&lt;/a&gt;, we work with a lot of vendors both large and small, and I can assure you that agility and &lt;em&gt;profitability&lt;/em&gt; are far more important than slavish adherence to some awkward and enormous toolkit. Consider that the agile methodologies of &lt;a href="http://www.extremeprogramming.org/"&gt;Extreme Programming&lt;/a&gt; and &lt;a href="http://www.scrumalliance.org/"&gt;Scrum&lt;/a&gt; were first heavily used in such large enterprise environments as Chrysler and Honeywell respectively. And I would argue that the success of such radically-new-at-the-time technology like the Web, &lt;span class="caps"&gt;XML&lt;/span&gt;, or Java was entirely due to the &lt;span class="caps"&gt;B2B&lt;/span&gt; community recognizing their value early and embracing them fully.&lt;/p&gt;


	&lt;p&gt;Which is why I think the jokes have to stop; does Rails want to continue to present itself as a niche tool for small &lt;acronym title="business to consumer"&gt;B2C&lt;/acronym&gt; development or does it want to be a &lt;span class="caps"&gt;B2B&lt;/span&gt; player? Why have we gone from &lt;a href="http://www.loudthinking.com/arc/000479.html"&gt;Rails does too scale!&lt;/a&gt; to &lt;a href="http://www.37signals.com/svn/archives2/dont_scale_99999_uptime_is_for_walmart.php"&gt;Uptime is overrated?&lt;/a&gt; 
Yeah, 99.9999% uptime is overkill for almost all software, but if you&amp;#8217;re going to sell to business you shouldn&amp;#8217;t mock people if they want 99% uptime. They&amp;#8217;re not whinging; they want to make your product an essential tool for their business. And so I think Rails needs to embrace enterprise needs. I think David is right to resist such code additions to the core, but I think it has a place in third-party contributed plugins and code snippets. To be an enterprise player, people will want to plug Rails into working legacy database schemas, handling composite keys, potentially even interfacing with back-end service-oriented architectures;  maybe even hacking lightweight support for such horrors as &lt;span class="caps"&gt;SOAP&lt;/span&gt; or &lt;span class="caps"&gt;CORBA&lt;/span&gt;. And I think such work is what Rails needs to really succeed. Maybe you think it&amp;#8217;s selling out, but I&amp;#8217;d rather see Ruby in the enterprise than C#. There is a middle ground between obscurity and (code) obesity; let&amp;#8217;s not mock people for trying to find it.&lt;/p&gt;</description>
      <pubDate>Fri, 06 Jan 2006 13:13:00 -0800</pubDate>
      <guid isPermaLink="false">urn:uuid:5578081c-b931-4610-8fea-8d5e1a60145b</guid>
      <author>harrisj@nimblecode.com (Jacob Harris)</author>
      <link>http://nimblecode.com/articles/2006/01/06/dont-shun-the-enterprise</link>
      <category>Net Culture</category>
      <category>Web Coding</category>
      <category>ruby</category>
      <category>rails</category>
      <category>enterprise</category>
      <category>agile</category>
      <trackback:ping>http://nimblecode.com/articles/trackback/79</trackback:ping>
    </item>
    <item>
      <title>I'm Finally With The Cool Kids</title>
      <description>&lt;p&gt;It&amp;#8217;s been an excellent week for my geeky self-esteem, with beta invitations to both &lt;a href="http://ma.gnolia.com/"&gt;Ma.gnolia&lt;/a&gt; (a new bookmarking site) and &lt;a href="http://www.measuremap.com/"&gt;Measuremap&lt;/a&gt; (a blog statistics tracking program). Both are written in &lt;a href="http://www.rubyonrails.com/"&gt;Ruby on Rails&lt;/a&gt; and both look pretty awesome. That&amp;#8217;s all I&amp;#8217;m going to say (not sure how much I can legally say yet), but I will close with the observation that there&amp;#8217;s an energy for new projects on the web I haven&amp;#8217;t seen in years and that the &lt;a href="http://caboo.se/"&gt;Ruby on Rails community&lt;/a&gt; is one of the nicest and most open I&amp;#8217;ve ever seen.&lt;/p&gt;


	&lt;p&gt;Ah well, two down, &lt;a href="http://momb.socio-kybernetics.net/"&gt;approximately 100 to go.&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 05 Jan 2006 20:11:00 -0800</pubDate>
      <guid isPermaLink="false">urn:uuid:bed897d0-4a3e-43fa-842f-cb8e091c5b42</guid>
      <author>harrisj@nimblecode.com (Jacob Harris)</author>
      <link>http://nimblecode.com/articles/2006/01/05/im-finally-with-the-cool-kids</link>
      <category>Web</category>
      <category>web2.0</category>
      <category>betas</category>
      <category>ma.gnolia</category>
      <category>measuremap</category>
      <category>ruby</category>
      <category>rails</category>
      <trackback:ping>http://nimblecode.com/articles/trackback/78</trackback:ping>
    </item>
    <item>
      <title>Rails and the Distribution Question</title>
      <description>&lt;p&gt;I like &lt;a href="http://www.rubyonrails.org"&gt;Ruby on Rails&lt;/a&gt; a lot. It&amp;#8217;s a pretty awesome web development frameworrk and it&amp;#8217;s generated a serious amount of buzz for its young age (just over a year). One major milestone that&amp;#8217;s ahead for the language will be a 1.0 release that among other things promises to deliver more &lt;span class="caps"&gt;API&lt;/span&gt; stability than there has been with more recent releases (as well as freeing developers and writers from creating code that&amp;#8217;s partially outmoded on arrival). Will that mean though that the big development work for Rails will be done? Hardly. If Rails is really to succeed as a development platform, I believe it can only happen if the distribution problems are solved. And Rails 1.0 seems to be a necessary precursor to that.&lt;/p&gt;


	&lt;p&gt;I like to think with web application frameworks there are 3 Ds that are important for the platform to succeed:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Development&lt;/strong&gt; &amp;#8211; how easy is it to develop?&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Deployment&lt;/strong&gt; &amp;#8211; how easy is it to place on your own servers and systems?&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Distribution&lt;/strong&gt; &amp;#8211; how easy is it for third-party users to deploy on their servers?&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;I think Rails has done very well in the first case. In the second case, I think tools like &lt;a href="http://wiki.rubyonrails.com/rails/show/SwitchTower"&gt;Switch Tower&lt;/a&gt; will help to make the second problem as nice as the first. But I think the third problem is the most problematic in Rails right now. Essentially, there are no nice and standard ways for developers to package up their Rails-developed programs for other users to easily install (without Rails experience).&lt;/p&gt;


	&lt;p&gt;Let me give a concrete example here. As you may know, I recently switched this blog from &lt;a href="http://www.wordpress.org/"&gt;Wordpress&lt;/a&gt; (a &lt;span class="caps"&gt;PHP&lt;/span&gt;-based service) to &lt;a href="http://typo.leetsoft.com/"&gt;Typo&lt;/a&gt; (a Rails-based service). I currently am hosting on Textdrive, which is rare among hosting providers in that it supports the latest Rails versions, so at least I did not have to fight with my &lt;span class="caps"&gt;ISP&lt;/span&gt; to get Rails as an option. But even then, I must admit that Wordpress&amp;#8217; setup was a dream to use, and not knowing a lick of &lt;span class="caps"&gt;PHP&lt;/span&gt;, I was able to get a blog up, installed, and running in no time. In contrast, I do have some knowledge of Rails, but Typo was definitely harder. For starters, I had to manually create tables in a MySQL database by running a MySQL file to create the tables (good thing I didn&amp;#8217;t use one of the more obscure adapters like &lt;span class="caps"&gt;MS SQL&lt;/span&gt; that didn&amp;#8217;t have a manually written schema file for them). I had to go an edit the database.yml config file manually in a shell (not confugured via an install script) Importing the data from Wordpress was a bit difficult too, and I had to fix the import script. Finally, I discovered that I have actually been dispatching Rails methods with the FastCGI dispatcher, even though I&amp;#8217;m not using it currently. So, my blog went down over the weekend and I didn&amp;#8217;t know. Not good.&lt;/p&gt;


	&lt;p&gt;This is not to trash Typo, which is a truly excellent product. Nor is it to condemn Rails, which is still too young to even explore a thorough solution to the distribution problem yet. But I think if we start thinking about the future of Rails, the distribution problem is important, because without easy distribution, Rails will be doomed by the network effect. What do I mean by that?&lt;/p&gt;


	&lt;p&gt;There are a lot of &lt;span class="caps"&gt;PHP&lt;/span&gt; developers out there these days, far more than develop for Rails, Django, Seaside or some of the other frameworks out there. Why? Is &lt;span class="caps"&gt;PHP&lt;/span&gt; a better framework? Arguably no. But is &lt;span class="caps"&gt;PHP&lt;/span&gt; in a whole lot of publicly deployed web products, like Wordpress? Or more wikis than you can shake a stick at? Yes. This in turn leads to more people thinking of developing in that language, books being written, etc. which accelerates adoption of &lt;span class="caps"&gt;PHP&lt;/span&gt; even further. The network effect.&lt;/p&gt;


	&lt;p&gt;I think 37 Signals, Robot Coop and such have done a lot to advance Rails over the last few years. But ultimately, I think it&amp;#8217;ll do more to sell their particular style of visual design than Rails as a development platform. Sure, there are people making custom solutions from scratch that might be wowed by the backend magic that makes it all happen. But I think there&amp;#8217;s a bigger pool of programmers who might find themselves having to setup a quick Wiki for their intranet or such? Given the choice, how many of them will write a system from scratch in Rails? And how many of them will just grab an existing &lt;span class="caps"&gt;PHP&lt;/span&gt;-based solution? And once they&amp;#8217;ve done the latter, how likely is it they&amp;#8217;ll look at Rails ever again? The best way for Rails to grow is for there to be many Rails apps to choose from. And to get there, Rails needs to make distribution as easy as development.&lt;/p&gt;


	&lt;p&gt;(&lt;em&gt;I hope to follow up on this in a few days with some further observations and ideas.&lt;/em&gt;)&lt;/p&gt;</description>
      <pubDate>Tue, 23 Aug 2005 01:43:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:4c35cd0f94168179d4511dac5a4b5854</guid>
      <author>harrisj@nimblecode.com (Jacob Harris)</author>
      <link>http://nimblecode.com/articles/2005/08/23/rails-and-the-distribution-question</link>
      <category>ruby</category>
      <category>rails</category>
      <category>distribution</category>
      <trackback:ping>http://nimblecode.com/articles/trackback/37</trackback:ping>
    </item>
    <item>
      <title>Moved to Typo</title>
      <description>&lt;p&gt;Just wanted to note that I have moved this blog to &lt;a href="http://blog.leetsoft.com/"&gt;Typo&lt;/a&gt;, an excellent blogging system written in &lt;a href="http://www.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt; . If you&amp;#8217;re not reading this in an &lt;span class="caps"&gt;RSS&lt;/span&gt; reader, the change should be pretty apparent, although I must apologize for not having rethemed yet. Otherwise, I look forward to hopefully spending more time blogging and less time doing maintenance in the future.&lt;/p&gt;</description>
      <pubDate>Thu, 11 Aug 2005 02:50:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:fd63600e651a08d9396af307589af518</guid>
      <author>harrisj@nimblecode.com (Jacob Harris)</author>
      <link>http://nimblecode.com/articles/2005/08/11/moved-to-typo</link>
      <category>Meta</category>
      <category>typo</category>
      <category>blog</category>
      <category>ruby</category>
      <category>rails</category>
      <trackback:ping>http://nimblecode.com/articles/trackback/35</trackback:ping>
    </item>
    <item>
      <title>Extracted Standards</title>
      <description>Still busy, but there is a great article at O'Reilly Radar on how great frameworks are sometimes extracted wholesale from successful applications rather than built from scratch up. That is, it's &lt;a href="http://radar.oreilly.com/archives/2005/04/designing_from.html"&gt;often better to extract the framework from the application&lt;/a&gt;, rather than build the application on top of a framework:

&lt;blockquote&gt;That is, at 37signals, they try to design the usability and function of the application first, and that drives the implementation. And if they can then extract a re-usable framework, all the better. For example, basecamp wasn't built on top of Ruby on Rails. Rather, Ruby on Rails was extracted from basecamp.&lt;/blockquote&gt;

This echoes some of the complaints I was making earlier about the &lt;a href="/blog/?p=22"&gt;unwieldiness of SOAP&lt;/a&gt; for web standards. And it fits in with the philosophy of nimble technologies perfectly. Create a product, solve a need, and make it work great and the frameworks will follow, but complicated frameworks in themselves solve nothing.</description>
      <pubDate>Mon, 02 May 2005 21:39:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:420a4ac5f2837123fab29a7accd3d585</guid>
      <author>harrisj</author>
      <link>http://nimblecode.com/articles/2005/05/02/extracted-standards</link>
      <category>Web Coding</category>
      <category>rails</category>
      <category>ruby</category>
      <category>soap</category>
      <trackback:ping>http://nimblecode.com/articles/trackback/23</trackback:ping>
    </item>
  </channel>
</rss>
