<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US">
  <title>Nick Sieger</title>
  <id>tag:blog.nicksieger.com,2005:Typo</id>
  <generator uri="http://www.typosphere.org" version="4.0">Typo</generator>
  
  <link rel="alternate" type="text/html" href="http://blog.nicksieger.com/" />
  <updated>2010-03-12T23:21:04+00:00</updated>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/nicksieger" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="nicksieger" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <author>
      <name>Nick Sieger</name>
    </author>
    <id>urn:uuid:b2e0444e-6cf4-468d-a222-0f5a783aed94</id>
    <published>2010-03-12T23:21:04+00:00</published>
    <updated>2010-03-12T23:21:04+00:00</updated>
    <title>RubyConf India 2010!</title>
    <link rel="alternate" type="text/html" href="http://blog.nicksieger.com/articles/2010/03/12/rubyconf-india-2010" />
    <category term="ruby" scheme="http://blog.nicksieger.com/articles/tag/ruby" />
    <category term="rubyconf" scheme="http://blog.nicksieger.com/articles/tag/rubyconf" />
    <category term="rubyconfindia" scheme="http://blog.nicksieger.com/articles/tag/rubyconfindia" />
    <content type="html">&lt;p&gt;I&amp;#8217;m honored to be heading to the first ever &lt;a href="http://www.rubyconfindia.org/"&gt;&lt;strong&gt;RubyConf India&lt;/strong&gt;&lt;/a&gt; in Bangalore next week&amp;#46; I&amp;#8217;ll be delivering an update on Rails 3, JRuby, and what&amp;#8217;s in store for the future of the combined platform in 2010&amp;#46; I&amp;#8217;m looking forward to meeting you there!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rubyconfindia.org"&gt;&lt;img src="http://rubyconfindia.org/stock/rubyconf-badges/RubyConf2010/270X185_speaking.jpg" alt="I'm speaking at RubyConf India 2010"&gt;&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Nick Sieger</name>
    </author>
    <id>urn:uuid:0f5baa63-e5d6-414c-9aa8-8ec55b051013</id>
    <published>2010-03-11T20:25:51+00:00</published>
    <updated>2010-03-11T20:25:52+00:00</updated>
    <title>Toward a GoDaddy-Free Life</title>
    <link rel="alternate" type="text/html" href="http://blog.nicksieger.com/articles/2010/03/11/toward-a-godaddy-free-life" />
    <content type="html">&lt;p&gt;Ask ten geeks who their favorite domain registrar is, and you&amp;#8217;ll get ten answers &amp;#45;&amp;#45; though I doubt GoDaddy would be one of them&amp;#46; Their heavily&amp;#45;ad&amp;#45;filled, upselling, confusing site makes even the most patient webmaster&amp;#8217;s skin crawl, and don&amp;#8217;t even get me started about their embarrassingly titillating Super Bowl tease ads&amp;#46;&lt;/p&gt;

&lt;p&gt;Along those lines, there seems to be a fair amount of myth around GoDaddy inertia&amp;#46; While not what I&amp;#8217;d describe as a pleasant experience, it is possible to extricate yourself from GoDaddy&amp;#46; Here&amp;#8217;s the process I took, which took maybe an hour start&amp;#45;to&amp;#45;finish&amp;#46; Maybe I just got lucky and hit the right buttons, so YMMV&amp;#46;&lt;/p&gt;

&lt;p&gt;I decided to go with &lt;a href="http://www.dynadot.com/"&gt;Dynadot&lt;/a&gt; as my new registrar based on reasonable prices, &lt;a href="http://news.ycombinator.com/item?id=150561"&gt;some good words from other hackers&lt;/a&gt;, available features such as email forwarding (so I don&amp;#8217;t have to maintain a Postfix server), and a clean&amp;#45;looking site&amp;#46; So far I have not been disappointed &amp;#45;&amp;#45; the account panel is straightforward and easy to use, the purchase process is quick, and I haven&amp;#8217;t had any hiccups with the transfer&amp;#46;&lt;/p&gt;

&lt;p&gt;So herewith are the steps I took:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Prepare the GoDaddy domains &lt;a href="http://help.godaddy.com/article/3560"&gt;for transfer&lt;/a&gt;&amp;#46;&lt;/li&gt;
&lt;li&gt;Make sure you don&amp;#8217;t change the Organization or First/Last Name in any of your domain contact fields! It appears that GoDaddy will put a 60&amp;#45;day lock on your domain if you do so&amp;#46;&lt;/li&gt;
&lt;li&gt;Cancel any Domains by Proxy private registration&amp;#46; The new registrar needs to be able to fetch an email address from WHOIS that&amp;#8217;s under your control&amp;#46;&lt;/li&gt;
&lt;li&gt;Make sure the domains are unlocked&amp;#46; You can do this in the Domain Manager by selecting the domains to transfer and clicking the &amp;#8220;Lock&amp;#8221; icon, and selecting to unlock them in following dialogs&amp;#46;&lt;/li&gt;
&lt;li&gt;Get an authorization code for each domain you wish to transfer&amp;#46; To do this, you have to visit each individual domain in the Domain Manager, and click the link to send the code via email&amp;#46; You should have the codes within 10 minutes&amp;#46;&lt;/li&gt;
&lt;li&gt;Initiate a &lt;a href="https://www.dynadot.com/domain/transfer.html"&gt;transfer&lt;/a&gt; or &lt;a href="https://www.dynadot.com/domain/transfers.html"&gt;bulk transfer&lt;/a&gt;, specify the authorization codes for each domain, and check out&amp;#46;&lt;/li&gt;
&lt;li&gt;Within another 10 minutes Dynadot initiates the transfer by sending email to the address in the WHOIS record for each domain&amp;#46;&lt;/li&gt;
&lt;li&gt;In the email, click on a link back to Dynadot and authorize each transfer&amp;#46;&lt;/li&gt;
&lt;li&gt;Within another 10 minutes Dynadot contacts GoDaddy and initiates the transfer&amp;#46;&lt;/li&gt;
&lt;li&gt;Receive an email from GoDaddy that they acknowledged the transfer&amp;#46;&lt;/li&gt;
&lt;li&gt;To speed up the transfer process, go back into the Domain Manager one last time&amp;#46; Under the &amp;#8220;Domains&amp;#8221; hover menu, look for the &amp;#8220;Pending Transfers&amp;#8221; item&amp;#46;&lt;/li&gt;
&lt;li&gt;See the domains listed in the Pending Transfer queue&amp;#46; Select all and click the &amp;#8220;Accept/Deny&amp;#8221; button, select &amp;#8220;Accept&amp;#8221; in the prompt&amp;#46;&lt;/li&gt;
&lt;li&gt;Within another 10&amp;#45;20 minutes, receive confirmation from Dynadot that the transfer has been completed&amp;#46; You can now go into the Dynadot panel and manage your DNS and other settings&amp;#46;&lt;/li&gt;
&lt;li&gt;Apparently you can&amp;#8217;t fully cancel your GoDaddy account, but you can &lt;a href="http://www.givegoodweb.com/post/56/cancel-godaddy"&gt;remove all payment methods, services and turn off email notifications&lt;/a&gt;&amp;#46;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Bask in the glory that is your renewed life as a website operator!&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Nick Sieger</name>
    </author>
    <id>urn:uuid:603837d6-55bf-4e03-8fec-4d2db26c002e</id>
    <published>2010-02-24T03:58:59+00:00</published>
    <updated>2010-02-24T03:58:59+00:00</updated>
    <title>JRuby and Rails 3, Sitting in a Tree</title>
    <link rel="alternate" type="text/html" href="http://blog.nicksieger.com/articles/2010/02/24/jruby-and-rails-3-sitting-in-a-tree" />
    <category term="jruby" scheme="http://blog.nicksieger.com/articles/tag/jruby" />
    <category term="rails" scheme="http://blog.nicksieger.com/articles/tag/rails" />
    <content type="html">&lt;h2&gt;Synopsis&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;jruby -S rails newapp -m http://jruby.org/rails3.rb
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;When creating your Rails 3 application, just add the JRuby&amp;#45;specific template (&lt;code&gt;-m http://jruby.org/rails3.rb&lt;/code&gt;)&amp;#46;&lt;/p&gt;

&lt;h2&gt;Details&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;$ jruby -S gem install rails --pre --no-rdoc --no-ri
Due to a rubygems bug, you must uninstall all older versions of bundler for 0.9 to work
Successfully installed i18n-0.3.3
Successfully installed tzinfo-0.3.16
Successfully installed builder-2.1.2
Successfully installed memcache-client-1.7.8
Successfully installed activesupport-3.0.0.beta
Successfully installed activemodel-3.0.0.beta
Successfully installed rack-1.1.0
Successfully installed rack-test-0.5.3
Successfully installed rack-mount-0.4.7
Successfully installed abstract-1.0.0
Successfully installed erubis-2.6.5
Successfully installed actionpack-3.0.0.beta
Successfully installed arel-0.2.1
Successfully installed activerecord-3.0.0.beta
Successfully installed activeresource-3.0.0.beta
Successfully installed mime-types-1.16
Successfully installed mail-2.1.3
Successfully installed text-hyphen-1.0.0
Successfully installed text-format-1.0.0
Successfully installed actionmailer-3.0.0.beta
Successfully installed thor-0.13.3
Successfully installed railties-3.0.0.beta
Successfully installed bundler-0.9.7
Successfully installed rails-3.0.0.beta
24 gems installed
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;And:&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;$ jruby -S gem install activerecord-jdbcsqlite3-adapter --no-rdoc --no-ri
Successfully installed activerecord-jdbc-adapter-0.9.3-java
Successfully installed jdbc-sqlite3-3.6.3.054
Successfully installed activerecord-jdbcsqlite3-adapter-0.9.3-java
3 gems installed
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Finally:&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;$ jruby -S rails newapp -m http://jruby.org/rails3.rb
      create
...(app creation)...
       apply  http://jruby.org/rails3.rb
       apply    http://jruby.org/templates/default.rb
        gsub      Gemfile
         run      jruby script/rails generate jdbc from "."
...(warnings omitted)...
       exist  
      create  config/initializers/jdbc.rb
      create  lib/tasks/jdbc.rake
$ cd newapp
$ jruby script/rails server
...(warnings omitted)...
=&amp;gt; Booting WEBrick
=&amp;gt; Rails 3.0.0.beta application starting in development on http://0.0.0.0:3000
=&amp;gt; Call with -d to detach
=&amp;gt; Ctrl-C to shutdown server
[2010-02-23 19:44:26] INFO  WEBrick 1.3.1
[2010-02-23 19:44:26] INFO  ruby 1.8.7 (2010-02-23) [java]
[2010-02-23 19:44:26] INFO  WEBrick::HTTPServer#start: pid=16449 port=3000
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src="http://img.skitch.com/20100224-eik9e957x7uu8k5x8y4xgt9jes.jpg" alt="rails-welcome"/&gt;&lt;/p&gt;

&lt;h2&gt;Recap&lt;/h2&gt;

&lt;p&gt;You&amp;#8217;ll have best results with &lt;a href="http://ci.jruby.org/snapshots"&gt;JRuby 1&amp;#46;5 snapshots&lt;/a&gt;, which include RubyGems 1&amp;#46;3&amp;#46;6&amp;#46; JRuby 1&amp;#46;5 final is coming soon&amp;#46; Also, &lt;a href="http://rubyforge.org/forum/forum.php?forum_id=36489"&gt;the new &lt;code&gt;activerecord-jdbc-adapter&lt;/code&gt; 0&amp;#46;9&amp;#46;3 release&lt;/a&gt; is required for Rails 3 compatibility&amp;#46;&lt;/p&gt;

&lt;p&gt;The Rails experience on JRuby continues to get better&amp;#46;&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Nick Sieger</name>
    </author>
    <id>urn:uuid:1500ad3a-6955-43fe-975a-3c663b48c100</id>
    <published>2010-01-28T15:16:49+00:00</published>
    <updated>2010-01-28T15:16:49+00:00</updated>
    <title>Gem clash: activerecord-jdbc-adapter and pg</title>
    <link rel="alternate" type="text/html" href="http://blog.nicksieger.com/articles/2010/01/28/gem-clash-activerecord-jdbc-adapter-and-pg" />
    <category term="jruby" scheme="http://blog.nicksieger.com/articles/tag/jruby" />
    <category term="ruby" scheme="http://blog.nicksieger.com/articles/tag/ruby" />
    <content type="html">&lt;p&gt;I got a note from a community member about an annoying problem that a &lt;a href="http://blog.admoolabs.com/uninitialized-constant-activerecord-connectionadapters-postgresqladapter-pgconn/"&gt;few people have run into&lt;/a&gt; when installing &lt;code&gt;activerecord-jdbc-adapter&lt;/code&gt; (AR&amp;#45;JDBC) into a C Ruby implementation:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;NameError: uninitialized constant
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::PGconn
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Turns out it&amp;#8217;s pretty easy to momentarily forget to use &lt;code&gt;jruby -S gem&lt;/code&gt; or &lt;code&gt;jgem&lt;/code&gt; and just &lt;code&gt;gem install activerecord-jdbc-adapter&lt;/code&gt; and suddenly your &lt;code&gt;pg&lt;/code&gt; Postgres gems are not working properly&amp;#46; I thought it was worth documenting here in case others run into this problem&amp;#46;&lt;/p&gt;

&lt;p&gt;I apologize for the clash&amp;#46; I had to provide a stub &lt;code&gt;pg.rb&lt;/code&gt; in AR&amp;#45;JDBC inside of JRuby so that I could get &lt;code&gt;active_record/connection_adapters/postgresql_adapter.rb&lt;/code&gt; to load with a database adapter type of &lt;code&gt;postgresql&lt;/code&gt;&amp;#46; Because of load path order issues, I couldn&amp;#8217;t get AR&amp;#45;JDBC&amp;#8217;s code to load before ActiveRecord&amp;#8217;s&amp;#46; At the time I was thinking this wouldn&amp;#8217;t be a problem because the &lt;code&gt;pg&lt;/code&gt; library won&amp;#8217;t work on JRuby anyway, right? Wrong&amp;#46;&lt;/p&gt;

&lt;p&gt;I can think of a couple options going forward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Submit a patch to ActiveRecord so that &lt;code&gt;active_record/connection_adapters/postgresql_adapter.rb&lt;/code&gt; can load without requiring &lt;code&gt;pg&lt;/code&gt; up front and then AR&amp;#45;JDBC won&amp;#8217;t have to stub it out&amp;#46;&lt;/li&gt;
&lt;li&gt;Display a big fat warning message when AR&amp;#45;JDBC is installed into anything other than JRuby&amp;#46;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Any other thoughts?&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Nick Sieger</name>
    </author>
    <id>urn:uuid:93e42dac-f363-41aa-bd63-24e5186d6a3b</id>
    <published>2009-11-06T16:06:37+00:00</published>
    <updated>2009-11-06T16:09:03+00:00</updated>
    <title>New Hpricot Release</title>
    <link rel="alternate" type="text/html" href="http://blog.nicksieger.com/articles/2009/11/06/new-hpricot-release" />
    <category term="ruby" scheme="http://blog.nicksieger.com/articles/tag/ruby" />
    <category term="rails" scheme="http://blog.nicksieger.com/articles/tag/rails" />
    <category term="jruby" scheme="http://blog.nicksieger.com/articles/tag/jruby" />
    <category term="hpricot" scheme="http://blog.nicksieger.com/articles/tag/hpricot" />
    <content type="html">&lt;p&gt;It&amp;#8217;s with a modicum of fanfare and a cocktail of orange peel, maraschino, bitters, bourbon and vermouth that I announce the 0&amp;#46;8&amp;#46;2 release of Hpricot&amp;#46;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://hpricot.github.com/hpricot/images/hpricot.png" alt="hpricot"/&gt;&lt;/p&gt;

&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;p&gt;The angly thingies are just two martini glasses turned on their side, see? Pouring out hpricoty goodness for you&amp;#46; (I don&amp;#8217;t know if &lt;a href="http://en.wikipedia.org/wiki/Why_the_lucky_stiff"&gt;_why&lt;/a&gt; imbibed alcoholic beverages but I feel the desire to raise a glass to him&amp;#46;)&lt;/p&gt;

&lt;p&gt;This release is mostly a refresh; the previous release was way back in April&amp;#46; From the &lt;a href="http://github.com/hpricot/hpricot/commits/master/"&gt;Git logs&lt;/a&gt; I can see that there were a few bug fixes since then&amp;#46; Otherwise, the main addition is a modern JRuby release, thanks to &lt;a href="http://olabini.com/"&gt;Ola Bini&lt;/a&gt;&amp;#46; (the previous was the 0&amp;#46;6 series)&amp;#46; This does &lt;a href="http://jira.codehaus.org/browse/JRUBY-3732"&gt;fix a fairly old, popular JRuby bug&lt;/a&gt;&amp;#46;&lt;/p&gt;

&lt;p&gt;As for the future of Hpricot, it&amp;#8217;s up to you&amp;#46; I know it&amp;#8217;s still a trusty tool for many; I have no grand plans to change it&amp;#46; So if you encounter bugs and want to send patches, I&amp;#8217;m happy to serve as your curator&amp;#46;&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Nick Sieger</name>
    </author>
    <id>urn:uuid:65e528d4-1673-400f-b67c-60f97a152db4</id>
    <published>2009-10-12T18:30:45+00:00</published>
    <updated>2009-10-12T18:30:46+00:00</updated>
    <title>Fresh 0.9.2 activerecord-jdbc-adapter Release</title>
    <link rel="alternate" type="text/html" href="http://blog.nicksieger.com/articles/2009/10/12/fresh-0-9-2-activerecord-jdbc-adapter-release" />
    <category term="jruby" scheme="http://blog.nicksieger.com/articles/tag/jruby" />
    <category term="activerecord" scheme="http://blog.nicksieger.com/articles/tag/activerecord" />
    <category term="jdbc" scheme="http://blog.nicksieger.com/articles/tag/jdbc" />
    <content type="html">&lt;p&gt;As &lt;a href="http://markmail.org/message/mkwdu56wp74pj4tf"&gt;announced last week on the jruby&amp;#45;user list&lt;/a&gt;, 0&amp;#46;9&amp;#46;2, the latest &lt;code&gt;activerecord-jdbc-adapter&lt;/code&gt; release, has been pushed out&amp;#46; Please install the gem in the usual fashion and try it out on your applications&amp;#46;&lt;/p&gt;

&lt;p&gt;One of the &lt;a href="http://jira.codehaus.org/browse/JRUBY-3502"&gt;most contentious bugs&lt;/a&gt; broke &lt;code&gt;db:create&lt;/code&gt; and &lt;code&gt;db:drop&lt;/code&gt;, ruining the quick&amp;#45;start workflow that Rails is known for&amp;#46; To fix this, a creative solution was needed that ended up bringing some nice benefits&amp;#46;&lt;/p&gt;

&lt;p&gt;The problem stemmed from the fact that some database setup tasks in Rails 2&amp;#46;3 no longer load the environment; instead they just load the configuration data and work with that&amp;#46; This means that there is no easy way to hook into Rails and override those tasks, which is &lt;a href="http://github.com/nicksieger/activerecord-jdbc-adapter/blob/master/lib/jdbc_adapter/jdbc.rake"&gt;what activerecord&amp;#45;jdbc needs to do&lt;/a&gt;&amp;#46;&lt;/p&gt;

&lt;p&gt;The solution I ended up with was to create a &lt;code&gt;jdbc&lt;/code&gt; Rails generator that inserts a couple files into your rails application that inject the JDBC logic into ActiveRecord and the database rake tasks&amp;#46; To wit:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ jruby script/generate jdbc
      exists  config/initializers
      create  config/initializers/jdbc.rb
      exists  lib/tasks
      create  lib/tasks/jdbc.rake
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The upside of this new technique is that now that we have a way to ensure the JDBC adapter is properly injected into Rails, and you no longer need to use adapter names like &lt;code&gt;jdbcmysql&lt;/code&gt;, &lt;code&gt;jdbcsqlite3&lt;/code&gt; and the like&amp;#46; The net result is that &lt;strong&gt;database&amp;#46;yml no longer needs to be modified&lt;/strong&gt; for the default Rails databases (&lt;code&gt;mysql&lt;/code&gt;, &lt;code&gt;sqlite3&lt;/code&gt;, &lt;code&gt;postgresql&lt;/code&gt;)&amp;#46; So while we introduced one additional step in the process to bootstrap a Rails application under JRuby, the removal the step where &lt;code&gt;database.yml&lt;/code&gt; needs to be modified results in a more predictable workflow&amp;#46;&lt;/p&gt;

&lt;p&gt;The new JRuby&amp;#45;specific Rails workflow looks like the following, assuming you&amp;#8217;ve installed the &lt;code&gt;activerecord-jdbc-adapter&lt;/code&gt; gem into JRuby, along with the appropriate database driver gem (e&amp;#46;g, &lt;code&gt;jdbc-mysql&lt;/code&gt;)&amp;#46; (Of course, the gems only need to be installed once per JRuby installation&amp;#46;)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create your Rails application as usual&amp;#46;&lt;/li&gt;
&lt;li&gt;Run the &lt;code&gt;jdbc&lt;/code&gt; generator as shown above&amp;#46;&lt;/li&gt;
&lt;li&gt;Profit!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Additionally, if you maintain a &lt;a href="http://m.onkey.org/2008/12/4/rails-templates"&gt;Rails application template&lt;/a&gt; that you use to start a new application, you can simply add &lt;code&gt;generate(:jdbc)&lt;/code&gt; to that template&amp;#8217;s script&amp;#46;&lt;/p&gt;

&lt;p&gt;What&amp;#8217;s more, the presence of the JDBC files in your application are guarded and only inject JDBC support when running under JRuby, so you can safely keep them around when running Rails under multiple Ruby implementations&amp;#46;&lt;/p&gt;

&lt;p&gt;For more details of what&amp;#8217;s in the release please consult the &lt;a href="http://rubyforge.org/forum/forum.php?forum_id=34972"&gt;mini&amp;#45;changelog on Rubyforge&lt;/a&gt; and the &lt;a href="http://kenai.com/jira/browse/ACTIVERECORD_JDBC/fixforversion/10195"&gt;list of fixed issues in JIRA&lt;/a&gt;&amp;#46;&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Nick Sieger</name>
    </author>
    <id>urn:uuid:c67b3b5d-38de-48d2-a7d7-66b6a378c1b0</id>
    <published>2009-09-12T04:22:15+00:00</published>
    <updated>2009-09-12T04:30:01+00:00</updated>
    <title>JRubyConf 2009: First of Many!</title>
    <link rel="alternate" type="text/html" href="http://blog.nicksieger.com/articles/2009/09/12/jrubyconf-2009-first-of-many" />
    <category term="jruby" scheme="http://blog.nicksieger.com/articles/tag/jruby" />
    <category term="jrubyconf" scheme="http://blog.nicksieger.com/articles/tag/jrubyconf" />
    <content type="html">&lt;p&gt;I&amp;#8217;m so excited to see the news finally hit the wire today about the paint drying on the plans for &lt;a href="http://jrubyconf.com/"&gt;JRubyConf 2009&lt;/a&gt;! &lt;/p&gt;

&lt;p&gt;&lt;img src="/files/jrubyconf-sf.jpg" alt="jrubyconf-sf.jpg"/&gt;&lt;/p&gt;

&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;p&gt;We always joked about having the first JRubyConf in the middle of a brisk Minnesota winter at Tom&amp;#8217;s Cabin, but I think this will do nicely!&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm3.static.flickr.com/2057/2222072226_d81ef00828.jpg" alt="cabin"/&gt;&lt;/p&gt;

&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;p&gt;Please go quickly and &lt;a href="http://jrubyconf.eventbrite.com/"&gt;register&lt;/a&gt;! Though there is no fee for the day, we only have a limited number of spots available!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;P&amp;#46;S&amp;#46; This post is a little late to the party; I was in the air on the way back from JavaZone&amp;#46; If you want a peek at what&amp;#8217;s been happening in JRuby land you can &lt;a href="/nicksieger-javazone09-jruby.pdf"&gt;check out the slides from my talk there&lt;/a&gt;&amp;#46;&lt;/em&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Nick Sieger</name>
    </author>
    <id>urn:uuid:29c2d853-8c43-4d1c-b09a-3f6f6ff88690</id>
    <published>2009-08-27T20:12:00+00:00</published>
    <updated>2009-08-27T20:14:13+00:00</updated>
    <title>What's New: Releases and Oh Right, a New Gig</title>
    <link rel="alternate" type="text/html" href="http://blog.nicksieger.com/articles/2009/08/27/whats-new-releases-and-oh-right-a-new-gig" />
    <category term="jruby" scheme="http://blog.nicksieger.com/articles/tag/jruby" />
    <category term="engineyard" scheme="http://blog.nicksieger.com/articles/tag/engineyard" />
    <category term="warbler" scheme="http://blog.nicksieger.com/articles/tag/warbler" />
    <category term="rack" scheme="http://blog.nicksieger.com/articles/tag/rack" />
    <content type="html">&lt;p&gt;So, after a long, busy summer, I&amp;#8217;m finally back onto support of the various bits for JRuby web application development (meaning &lt;a href="http://warbler.kenai.com/"&gt;Warbler&lt;/a&gt; and &lt;a href="http://jruby-rack.kenai.com/"&gt;JRuby&amp;#45;Rack&lt;/a&gt;)&amp;#46; I&amp;#8217;m pleased to announce the 0&amp;#46;9&amp;#46;5 release of JRuby&amp;#45;Rack and the 0&amp;#46;9&amp;#46;14 release of Warbler! All of this brought to you courtesy of Engine Yard, my &lt;a href="http://www.engineyard.com/blog/2009/jrubys-future-at-engine-yard/"&gt;new employer&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Both of these are long&amp;#45;overdue releases&amp;#46; Here&amp;#8217;s the low&amp;#45;down on each:&lt;/p&gt;

&lt;h2&gt;JRuby&amp;#45;Rack 0&amp;#46;9&amp;#46;5&lt;/h2&gt;

&lt;p&gt;For the full history, see the &lt;a href="http://github.com/nicksieger/jruby-rack/blob/805edcc003f96c4eb30b073f24b35cd92dce056a/History.txt"&gt;0&amp;#46;9&amp;#46;5 entry in the History&amp;#46;txt file&lt;/a&gt;&amp;#46;&lt;/p&gt;

&lt;p&gt;One &lt;a href="http://kenai.com/jira/browse/JRUBY_RACK-18"&gt;bad bug in particular&lt;/a&gt; prevented you from running Rack&amp;#45;powered Rails 2&amp;#46;3 out of the box at all because JRuby&amp;#45;Rack bundled an older version of Rack than needed by Rails&amp;#46; This has been fixed for good by not forcing JRuby&amp;#45;Rack&amp;#8217;s bundled copy of Rack on your application; any version of Rack you include (either via gems or vendor&amp;#8217;ed in Rails or your application) will take precedence&amp;#46;&lt;/p&gt;

&lt;p&gt;Another major upgrade is the introduction of rewindable requests&amp;#46; The &lt;a href="http://rack.rubyforge.org/doc/SPEC.html"&gt;Rack spec dictates that the request IO object be rewindable&lt;/a&gt; and that server/handler writers (such as myself) need to buffer the input&amp;#46; You&amp;#8217;d think that Java application servers would do this for you, but, as is the case with Java so often, servers perform the bare minimum amount of work and leave the grunt work to the application developer&amp;#46; So JRuby&amp;#45;Rack takes care of the input buffering for you&amp;#46; The first 64k of input data are buffered entirely in memory; above that the request body is dumped into a temp file&amp;#46; (64k is a default and is configurable&amp;#46; If you have a better suggestion for a default, let me know&amp;#46;)&lt;/p&gt;

&lt;p&gt;Finally, this release brings back Java Servlet&amp;#45;based sessions for use with the Rack&amp;#45;based session mechanism&amp;#46; For those of you experimenting with hybrid Rails/Java applications and want to share session data between them, you&amp;#8217;ll want this&amp;#46; Servlet sessions are not the default; you need to turn them on by setting &lt;code&gt;ActionController::Base.session_store = :java_servlet_store&lt;/code&gt;&amp;#46;&lt;/p&gt;

&lt;h2&gt;Warbler 0&amp;#46;9&amp;#46;14&lt;/h2&gt;

&lt;p&gt;Warbler&amp;#8217;s main change this release is to unbundle JRuby&amp;#46; When you install Warbler as a gem, you&amp;#8217;ll now get a dependent gem called &lt;code&gt;jruby-jars&lt;/code&gt; installed for you&amp;#46; We&amp;#8217;ll be releasing a new version of this gem with every release of JRuby, and you&amp;#8217;ll be able to upgrade JRuby versions without having to update Warbler&amp;#46;&lt;/p&gt;

&lt;p&gt;JRuby&amp;#45;Rack is still bundled with Warbler for now (0&amp;#46;9&amp;#46;14 comes with JRuby&amp;#45;Rack 0&amp;#46;9&amp;#46;5 of course), but the jar file is not that big and the two projects tend to be released around the same time&amp;#46; By Warbler 1&amp;#46;0 I hope to have a mechanism to unbundle all jar files so that Warbler is just a lightweight Rake library with enough smarts to fetch the binaries your application needs&amp;#46;&lt;/p&gt;

&lt;h2&gt;Future&lt;/h2&gt;

&lt;p&gt;The projects seem to be headed for a 1&amp;#46;0 release soon&amp;#46; For these releases, I hope to ensure that they are both ready to take advantage of Rails 3 out of the box&amp;#46; One of the ways is to use &lt;a href="http://github.com/wycats/bundler/tree/master"&gt;Bundler&lt;/a&gt; in Warbler to manage gems&amp;#46; Hopefully as Rails 3 and other applications start to standardize Bundler manifests, it means less custom configuration for Warbler&amp;#46;&lt;/p&gt;

&lt;p&gt;Since the core of JRuby&amp;#45;Rack seems to be stabilizing, the next promising step is to explore more ways to integrate with existing Java code and Java applications&amp;#46; This should dovetail nicely with JRuby&amp;#8217;s plan for better Java integration in the upcoming JRuby 1&amp;#46;4 release&amp;#46; For example, &lt;a href="http://markmail.org/message/xck6goqc22ob454l"&gt;Christian Seiler explained how he&amp;#8217;s using JRuby&amp;#45;Rack&lt;/a&gt; to integrate JMS while running an in&amp;#45;memory ActiveMQ server for his site &lt;a href="http://www.blissmessage.com/"&gt;blissmessage&amp;#46;com&lt;/a&gt;&amp;#46; These kinds of ease&amp;#45;of&amp;#45;use scenarios where you can start a single process with all of your application needs: web server, message queue, timer for periodic tasks etc&amp;#46; present a great way to jumpstart a project&amp;#46; I&amp;#8217;d like to see some of these APIs &lt;a href="http://github.com/wireframe/backgrounded/tree"&gt;standardize&lt;/a&gt; so that we can transition from all&amp;#45;in&amp;#45;one development servers up to scalable production clusters where app, message queue, and other servers are separated and standalone&amp;#46;&lt;/p&gt;

&lt;p&gt;The fellows over at Google have been busy this summer with the &lt;a href="http://code.google.com/p/appengine-jruby/"&gt;appengine&amp;#45;jruby&lt;/a&gt; project, and there are opportunities for tuning that experience as well&amp;#46;&lt;/p&gt;

&lt;p&gt;Of course, your suggestions are welcome too&amp;#46; I&amp;#8217;d appreciate it if you&amp;#8217;d drop me a line if you&amp;#8217;re doing something novel with these tools, so I can help shape future directions around people like you who are Getting Things Done with them!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Postlude: Both these projects need a logo&amp;#46; If you can mock something up, I&amp;#8217;d love to see some ideas!)&lt;/em&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Nick Sieger</name>
    </author>
    <id>urn:uuid:a3633f0f-4b90-4de2-a278-6c33c3d15aab</id>
    <published>2009-06-12T20:34:27+00:00</published>
    <updated>2009-06-12T20:40:17+00:00</updated>
    <title>Which Tool Would You Use?</title>
    <link rel="alternate" type="text/html" href="http://blog.nicksieger.com/articles/2009/06/12/which-tool-would-you-use" />
    <category term="ruby" scheme="http://blog.nicksieger.com/articles/tag/ruby" />
    <content type="html">&lt;p&gt;I started in on the twice&amp;#45;yearly task of pruning our hedges today&amp;#46; So confronted with this task:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/nicksieger/3619672997/" title="Shearing the shrubs by nicksieger, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2458/3619672997_70636e8702.jpg" width="375" height="500" alt="Shearing the shrubs" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;p&gt;Which tool would you use?&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/nicksieger/3620490416/" title="Which tool? by nicksieger, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3410/3620490416_2fb853899c.jpg" width="375" height="500" alt="Which tool?" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;p&gt;I used both today, but realized I enjoy using the hand trimmers much more&amp;#46; With the electric trimmers, you can buzz through a lot of hedge quickly, but sometimes this happens:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/nicksieger/3620491260/" title="Too close by nicksieger, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3300/3620491260_3c9ddd2ab1.jpg" width="500" height="375" alt="Too close" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;p&gt;With the hand trimmers, I can take my time and make precise cuts&amp;#46; The end result may take more time, but it turns out much, much better&amp;#46;&lt;/p&gt;

&lt;p&gt;Software tools have similar feels to me&amp;#46; Java feels an awful lot like the electric trimmers&amp;#46; It&amp;#8217;s heavy and powerful, but sometimes by the time you&amp;#8217;ve finished with it, you&amp;#8217;ve cut so far in that you may have missed a simpler, lighter solution&amp;#46;&lt;/p&gt;

&lt;p&gt;Ruby feels like the hand trimmers&amp;#46; Precision, less code, more intent, and I can take my time to think through and arrive at a solution without leaving a huge trail of trimmings (code) behind me&amp;#46;&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Nick Sieger</name>
    </author>
    <id>urn:uuid:9a1f22f6-e5db-4cf7-a49d-79c06dbb4bf2</id>
    <published>2009-06-09T02:23:36+00:00</published>
    <updated>2009-06-09T02:23:36+00:00</updated>
    <title>Project Kenai at JavaOne</title>
    <link rel="alternate" type="text/html" href="http://blog.nicksieger.com/articles/2009/06/09/project-kenai-at-javaone" />
    <category term="kenai" scheme="http://blog.nicksieger.com/articles/tag/kenai" />
    <category term="jruby" scheme="http://blog.nicksieger.com/articles/tag/jruby" />
    <category term="rails" scheme="http://blog.nicksieger.com/articles/tag/rails" />
    <content type="html">&lt;p&gt;It&amp;#8217;s just the beginning and a small milestone, but it&amp;#8217;s a goal we set for ourselves by JavaOne last week that we reached: 10K registered users at &lt;a href="http://kenai.com/"&gt;http://kenai&amp;#46;com/&lt;/a&gt;&amp;#46; We were fortunate to be highlighted in the Tuesday afternoon keynote, which, to our collective relief, &lt;a href="http://blogs.zdnet.com/BTL/?p=19181"&gt;went off without a hitch&lt;/a&gt;&amp;#46; I also had a chance to speak a bit about Project Kenai behind the scenes in my technical session&amp;#46;&lt;/p&gt;

&lt;p&gt;&lt;a href="/TS5413_09J1_SiegerLessons.pdf"&gt;My slides are available&lt;/a&gt; and contain a decent overview of what we&amp;#8217;ve been doing&amp;#46; One slide in particular seems to have &lt;a href="http://twitter.com/olabini/status/2027466455"&gt;surprised&lt;/a&gt; some folks: our codebase metrics&amp;#46;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;12K lines of application code (everything in &lt;code&gt;app/{controllers,models,helpers}&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;10K lines of views (HTML + template code in &lt;code&gt;app/views&lt;/code&gt;) &lt;/li&gt;
&lt;li&gt;1K lines of custom Javascript (&lt;code&gt;public/javascripts&lt;/code&gt; excluding jQuery and plugins)&lt;/li&gt;
&lt;li&gt;8K lines of test code (RSpec + plain text stories) (yes, we&amp;#8217;re upgrading to &lt;a href="http://cukes.info"&gt;Cucumber&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;73&amp;#46;7% test coverage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you&amp;#8217;re doing Rails, you&amp;#8217;re probably not all that surprised by these numbers; hopefully you&amp;#8217;ve seen similar ones yourself&amp;#46; If you haven&amp;#8217;t tried Rails, consider a site like kenai&amp;#46;com and ask yourself if you could build and maintain a production site like it with these numbers in your favorite language/framework&amp;#46;&lt;/p&gt;

&lt;p&gt;Other takeaways from my talk:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Java what it&amp;#8217;s good for; in this case, long&amp;#45;running server apps&amp;#46; The downtime of the JRuby/GlassFish&amp;#45;deployed Rails application has been minimal for us; the few cases where we&amp;#8217;ve had issues, they&amp;#8217;ve usually been self&amp;#45;inflicted application problems&amp;#46; Instead of running Monit with a pack of Mongrels that need to be periodically recycled, we run a few GlassFish domains per server and only recycle them when we deploy new code&amp;#46;&lt;/li&gt;
&lt;li&gt;For the Java programmers out there, don&amp;#8217;t be afraid to use stuff other than Java&amp;#46; We use Python, Django, Memcached, Perl, and anything that gets the job done&amp;#46;&lt;/li&gt;
&lt;li&gt;You can build cool stuff quickly with community Rails plugins like &lt;a href="http://github.com/technoweenie/attachment_fu/tree/master"&gt;attachment_fu&lt;/a&gt;, &lt;a href="http://geokit.rubyforge.org/"&gt;geokit&lt;/a&gt;, and &lt;a href="http://wiki.github.com/mislav/will_paginate"&gt;will_paginate&lt;/a&gt;&amp;#46; Not news to Rails programmers, but I&amp;#8217;d be interested to hear of any equivalents for Java&amp;#45;based web frameworks&amp;#46;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jruby.org/"&gt;JRuby&lt;/a&gt; is a big win, allowing co&amp;#45;development on MRI and JRuby with deployment to GlassFish&amp;#46; JRuby&amp;#8217;s java integration also allows for neat tricks like &lt;a href="http://kenai.com/projects/image-voodoo"&gt;image_voodoo&lt;/a&gt;, a pure&amp;#45;Java imaging plugin for attachment_fu&amp;#46;&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry>
</feed>
