This occasion marks my first visit to
RailsConf (at `Vegas, hence the title). Some of the
Integrum veterans who've been going since the first RailsConf didn't seem to think this was a very good one. I thought RailsConf '09 was better than RubyConf'08. RailsConf seemed to be surrounding more practical topics, even if the speakers had missed the mark. I feel like I pulled a lot away from the conference. I will admit that I mostly stuck to my guns in terms of following
JRuby (and friends) progress.
Crate,
Rawr's CRuby evil (or good?) twin, looks neat, and promises a very small Ruby executable. It sounds like native Windows executables can be created. Can they be created from one platform but built for another? I'm not sure. I'm a little jealous that CRuby can be packed down into about 5 megs (from JRuby's 11M-ish jar). Create seems to put a lot of energy into building cherry picked extensions for an even slimmer package. Crate also seemed to be able to deploy Rails apps on servers where Ruby isn't installed - Something Rawr doesn't do explicitly, but is handled by Warbler pretty well already. I did get a chance to meet with the creator of Crate (the Crator?). I tried to put Rawr on the radar in hopes that we can share any common code (if he wants Crate to be able to do .app files, Rawr can give him a good start).
I also attended a
Glassfish/
Netbeans all-in-one talk. I mostly went for Netbeans, but I learned some stuff about Glassfish I didn't know before. asadmin, the Glassfish controller, stands for App Server Admin - this helps me remember what commands are for, and this one struck me as odd when I first saw it. Setting up Glassfish is pretty stupid easy from how things are described, but I've seen that before. I didn't know that Glassfish is just Rails-aware, but doesn't load any Rails modules until it sees a Rails app inside its app directory. For those who think that Glassfish is a bulky, oversized Java app server, the Glassfish gem is 3 megs. There's also recipes for Capistrano. The app server also supports
Sinatra and
Merb out of the box. It also includes an update center, but I didn't see to what extent this exists.
Netbeans was the other half of the talk. Before I get into Netbeans I want to mention
RubyMine, which appears to be
IntelliJ-lite for Rails (and maybe Ruby). Don't tell the people who like it that it's running on Java (: RubyMine looks a LOT like Netbeans from the screenshots and displays I saw at the booth. When I saw a lot of positive posts about RubyMine, I was a little irritated, since it does a lot of things Netbeans does, and costs money. I'm trying to put that feeling aside - after all, it's all about using the best tools we can, not the ones we are simply fond of. I grabbed a trial version of RubyMine to give a spin. Will it support my JRuby apps? I think I'll do CRuby stuff so I'm not going up-hill here.
For Netbeans, I've blogged before about woes with the debugger, a very promising feature.
Arun Gupta showed the debugger working as it should with the same version of Netbeans I'm using now. This makes me think there's something wrong with my setup, and not Netbeans itself. I need to revisit the debugging feature as well as my project setup (I suspect it's because I'm using Webbrick, and not Glassflish). Netbeans seems to have some usage stats it can pull up. Some of this is through
NewRelic, some just straight Glassfish integration.
There was a JRuby talk given by
Thomas Enebo and
Charles Nutter. They showed how Glassfish doesn't constantly stink up memory for concurrent requests when running in a multi-threaded mode (I'd imagine each thread allocates and deallocates this memory on demand?). Mongrel uses N times the concurrent requests you want to be able to handle. JRuby has the ability to do named groupings with regular expression, which can make a very difficult to read expression at least a little bit easier. It would also allow access to those groupings via a name, rather than an index. JRuby also supports a Ruby 1.9 mode, which means you can play with 1.9 without having to set up another (and potentially conflicting) Ruby environment. Just use --1.9. The JRuby team also got to show off
Gravitor (:
One of the talks was about scaling Rails, or at least was titled that way. They talked about a bunch of problems with scaling databases and didn't offer many solutions. They did show off
Gosu with an interesting
Wolfienstien 3D port, which showed that Ruby 1.9 could handle some performance intensive stuff, but had little to do with scaling Rails.
JRuby and friends got a lot of love with this conference. I believe I missed one of the talks about scaling with
Google App Engine, but the official Google App Engine w/ JRuby talk was one I got to see. This one showed a lot of promise to me. Google App Engine will take your WAR file and run it, like a good hosting provider should, but GAE also throws more resources at the app if it should need them (and your budget allows). The scaling is dynamic, unlike a rent-a-VM solution. The database also scales dynamically, but uses a datastore database, as opposed to a standard SQL/relational database. GAE uses BigTable, and is like CouchDB in the datastore regard. I remember hearing about what CouchDB could do, but now it seems so much more relevant. Instead of having records with IDs that refer to each other, datastore databases just store objects or some kind hashes. How much this buys you isn't totally clear yet, except for the ability to shard the database, and therefore scale. The GAE team provided a DataMapper layer for BigTable, which is the only known way to get a read/writable DataMapper on your JRuby app. Now that Rails 3 has the promise of swapping stuff out on the stack (such as ActiveRecord), things are really looking up here.
Charles Nutter and
Evan Phoenix did a talk on Ruby-performance-no-nos. Showing how a single extend call destroys your entire method lookup cache for CRuby (but not JRuby and Rubinius). The options hash idiom is also very expensive. I got a recording of this session, although I think my hand was covering the microphone, so everything is much more quiet than it should be.
Someone got a video of myself working on Life-Tank with
Gemini. I haven't seen it posted yet. I got pretty choked up on my words because I forgot what to say. I wish I would have gotten the guy's name. Now I won't know when the video lands somewhere.
I'm glad I got to catch up on some JRuby things I'd been slacking on. As the resident JRuby guy, I need to be more up on the Rails side of JRuby (even if Integrum never goes that route), and this definitely helped.