Posts from ChadFowler.com...
Posted by chad 16 days ago
We had a great time this year at the RailsConf Community Project Code-Drive. Among other things that happened, Evan, Rich, and I created and released gitjour, which is steadily becoming standard Ruby conference must-have software.
So we thought we’d do it again in Europe. If you have an idea for something you’d like to work on, visit the signup page and list it there. If you don’t have an idea, just show up on the tutorial day with a laptop and an open mind.
Also, don’t miss Early Registration, which ends on July 15 and saves you up to €150.
Posted by chad 31 days ago
Much of what we do in software development is focused on residual artifacts of the process. But software development is itself a process, and the best development happens not when programmers are keying in the code to implement a design but when great programmers are improvising within constraints and iterating toward a goal.
Programming is something you do (as opposed to something that is just done). Why isn’t there much focus on programming as a performance activity?
I’ve heard interesting tales of programmers performing on stage either during conference presentations (the developer of Ruby Cocoa at Ruby Kaigi last year) or driving live computer-music.
I’d like to see more examples. Anyone have any to link?
Posted by chad 34 days ago

We’re at Ruby Kaigi 2008 and having a great time. Yesterday Rich and I did a panel discussion with Masayoshi Takahashi and Matz on the history of Ruby communities and business outside of Japan.
Today the main conference starts with presentations by Koichi, Charlie, and Evan on YARV, JRuby, and Rubinius respectively. It’s shaping up to be an excellent conference. More later.
The one thing that strikes me so far is that it’s much easier to get here and participate than I thought it would be. If you’ve considered coming to Ruby Kaigi and have never been to Japan, I highly recommend it. Tokyo is easy to get around even without speaking Japanese and the trip wasn’t as harrowing as I expected. Hopefully next year we’ll see the non-Japanese contingent grow and the language barriers blur a little more.
Posted by chad 49 days ago
We just wrapped up RailsConf 2008. A lot has been said about RailsConf elsewhere, so
as the program chair I’ll just say “thank you” to the speakers, attendees, co-organizers, sponsors, and
everyone else for making it the best conference I’ve ever been to.
A lot of exciting things happened. Among the most exciting to me was the public unveiling of
Maglev. I’ve had a version of Maglev on my computer for about a month now, but
I haven’t been able to talk about it. Now that it has been announced, most things I know are fair game.
Avi Bryant and I met at the first RubyConf. He’s been a fan and friend of Ruby ever
since. He happens to be doing mostly Smalltalk these days, but he’s been following the Ruby and (more
recently) Rails communities closely. After that first RubyConf, we reconnected while both attending Dick
Gabriel’s pilot MFA in Software Development program at UIUC in
early 2003. Avi’s been talking since then about running Ruby on a Smalltalk VM.
I’ve even started my own attempt once or twice, based on Avi’s ideas of how it could be done.
Given Avi’s interest in Ruby on Smalltalk and that he also created the mind-bending
Seaside web application framework, we invited him to keynote at last year’s RailsConf. It was there, in his message from the future keynote, that he made public
his belief that Ruby could benefit from being hosted on a mature, dynamic (Smalltalk) VM.
It was also, as I understand it, from that talk that Gemstone got the idea to run Rails.
The conversations started just after RailsConf last year, but it was only a few short months ago that Avi started work on Maglev. That’s part of what makes it so amazing. He and the
engineers at Gemstone have gotten a huge subset of the Ruby language running on the Gemstone VM in just three months.
RDBMS R.I.P.
Well, not really, but it’s fun to say.
There are a lot of things to like about what Maglev promises. By far the most interesting to me is
Gemstone’s persistence engine.
What’s coolest about how Gemstone’s persistence engine works within the context of Maglev is that it doesn’t
feel like a persistence engine. It’s just objects. Everything’s just objects.
If you think about it, the average Rails application is a styled set of CRUD operations on top of an
object graph. That’s right, an object graph. The fact that most Rails applications are backed
by a relational database is a somewhat-necessary annoyance.
So in circumstances where you don’t NEED an RDBMS, why would you want to litter your pristine Ruby objects with SQL and other RDBMS-related work-arounds? If it were possible to simply instantiate objects and not have to think about the underlying storage implementation at all, wouldn’t that be better?
That’s what Gemstone (and, therefore, Maglev) gives you.
There were questions during the demo about ActiveRecord compatibility. To me, building in ActiveRecord
compatibility is worse than a waste of time. Sure, there are things in ActiveRecord which would be useful
regardless of the storage mechanism. Declarative relationships and validations are examples. But, when
you’re dealing with objects in memory, the idea of a :conditions clause with SQL in it is absolutely
unnecessary and unappealing.
Fast as hell
Avi and the Gemstone people knew from their understanding of how the VM works that a Ruby implementation
on Gemstone would be really fast. They were right. But as I said, the speed of the implementation is
secondary to the persistence engine.
That being said, it’s really really fast. On micro-benchmarks, it’s up to 100 times faster than MRI.
As has already been whined about ad nauseam, micro-benchmarks can be misleading. They test very specific
parts of the implementation and don’t always give you a picture of what real-world application performance
will be like. So, let’s take this approach with the Maglev benchmarks: it’s fast enough. It’s probably a
lot faster than MRI. And, we’ve been using MRI for years for real applications.
Good enough. Probably awesome. But at least good enough.
Now is it going to slow down as they start implementing more of the libraries and language features? That’s
the conventional wisdom. I say no.
Smalltalk and Ruby are, as Avi has said numerous times, essentially the same language. So the Gemstone VM
has been tailor-made for running dynamic language code with closures, continuations, etc. and has been
doing it for years. Imagine the process, then, of converting Ruby to Smalltalk. It’s in most cases
a fairly straightforward language to language translation.
Where it isn’t as simple as that, Gemstone have a pretty big advantage: they own the VM and they can
change it to fit what Ruby needs.
I expect Maglev to get faster as the team starts to spend time on optimization. So far, they’re in the
“make it run” phase of the process. Remember, three months in.
Antonio Cangiano also had a look at Maglev recently and has a bit more to say about the specifics of Maglev performance
Ruby Compliance (or “it runs WEBRick!”)
So what’s next for Maglev? As the Gemstone team has said, their next goal is to start running and passing
the Ruby specs created by the other Ruby implementers. They hadn’t prioritized this leading up to RailsConf,
because, RailsConf being a web development conference, they wanted us all to see WEBRick running.
But, hey, they have WEBRick running! Have you looked at the code for WEBRick? That’s a lot of Ruby.
I’m looking forward to a report on how well the Ruby specs run at this moment. I think everyone will be
pleasantly surprised. And the specs will give the team a clear goal to work toward.
So Will I Use This Thing?!
When you don’t NEED an RDBMS (more often than you think) or you need scalable Ruby servers, I think
Maglev is going to be an enticing alternative. It’s not going to kill the other implementations. Each
implementation has its place. This isn’t a war, after all.
Macruby, JRuby, and IronRuby are for integration. MRI/YARV and Rubinius will compete for the “standard” use
cases. Maglev is for big, distributed object stores inside of fast, scalable servers. Think Rails,
Adhearsion, or various coordination services running custom protocols on sockets. Don’t run scripts in
Maglev. Don’t write desktop apps in Maglev. Just use Maglev to serve tons of requests against billions of
objects.
Maglev is good for the Ruby ecosystem just as MRI/YARV, Macruby, JRuby, and IronRuby are good for the
Ruby ecosystem. The fact that we (will) have so many alternatives is a good thing.
Posted by chad 68 days ago
Congratulations to Evan and the Rubinius team. Rubinius runs Rails!
By this time next year, we’ll see production deployments of Rubinius, with Rubinius quickly becoming the defacto standard Ruby implementation after that. You won’t want to try to deploy your Rails application on it today, but it’s definitely time to give it a look if you haven’t yet.
Posted by chad 113 days ago
Not that it should be too surprising to me, but (even as a long time Rubyist) I’m finding the Haskell posts on Slick or Slack to be the most beautiful so far. When I took my first look at Haskell years ago, I thought it was ugly. Every progressive year it strikes me as more and more beautiful.
Why am I not a Haskell programmer, then? More on this in an upcoming post.
Posted by chad 114 days ago
In my previous post, I asked for examples of great Ruby code. I got emails, comments, instant messages, and twitter messages with suggestions. I’d still like more.
But one really cool suggestion came from an idea Bil Kleb and Peter Provost had. They proposed a Hot or Not -like site for code.
I thought that would be fun, so Bruce and I whipped something up in a couple of hours over the weekend: Slick or Slack?.

It’s not done yet, but we deployed it anyway. My experience helping Ze Frank with Color Wars 2008 has convinced me that deploying things that aren’t done is more often a good idea than not. If for nothing else that for mental health reasons.
What we want to do now is to start collecting potentially “Slick” code snippets. This could mean beautiful code, clever code, code which does something awesome, or whatever. You can also post code that sucks. We just need code to start the tallies running.
When you visit the site, you’ll be presented with two code samples, probably doing totally different things. They might even be in different languages. Your job is to choose the better of the two. If you can’t make up your mind, just hit refresh.
I doubt this is going to unearth great code in the same way that I doubt Hot or Not unearths great people. But I hope it will be fun to play with. It will probably be broken and we know it’s lacking some necessary features to make it more useful and/or fun. Suggestions are welcome. Just don’t take it too seriously.
Posted by chad 120 days ago
Tonight, Rich, Marcel and I spoke at the DC Ruby Users Group. Instead of choosing a topic, preparing a set of slides, and droning on about something for an hour we decided to involve the group to help us answer a question. It’s a question I get a lot when I do training with The Pragmatic Studio: “Which Ruby projects should I look at to see examples of great Ruby code?”
I have my standard answers (I’m sure we all do), but two things occur to me about answering such a question. The first is that when asked a question like this, I have a gut reaction. There are names that spring immediately to mind. If I scrutinize these reflex reactions I realize that I haven’t really examined the code I’m thinking of in enough detail to call it great. So though I have some cursory knowledge that makes me pretty sure when I give my recommendations (I’m holding off on naming specifics so as to not influence your answer to this question), I’m not 100% sure which projects contain great Ruby code.
The second realization about this is that some of the names that spring to mind are based on potentially the wrong criteria. I, like all humans, am more likely to mention something popular than something obscure. There is also a Ruby community folklore. Some names are synonymous with “great”. But it’s just folklore. So the knee-jerk reactions are at risk of being heavily influenced by the Ruby popular culture. Looking at how successful popular culture is at picking great music, visual art, fiction, and other artistic mediums, it’s pretty clear that we shouldn’t trust pop culture when making decisions about which projects are composed of “great” code.
So we asked the DC RUG: “Who are the greatest Ruby programmers in the world?”
Then, all together, we looked at code written by the people they came up with.
Some of it was beautiful. Some of it was ugly.
We talked about what made some of it beautiful and some of it ugly. We talked about the importance of writing beautiful code. It was fun.
Anyway, I still don’t have a satisfactory list of great Ruby code. I’d like to build such a list. So, please leave a comment saying the name of an open source Ruby project you feel represents truly great Ruby code.
Posted by chad 173 days ago
I’m always looking for ways to get humans together for meaningful (potentially lasting) interactions at our conferences. So we’re trying something new this year during the tutorial day. It happens on the first (or 0th?) day of the conference on purpose: so the work can continue for the rest of the conference. My hope is to bring project owners/committers together with aspiring contributors and bring more people into the fold of projects which need help. Think of it as a room full of code sprints happening all at once. Here’s the description:
Project Owners: Do you have a project you’d like to work with other people on? Maybe it’s an established Open Source project. Maybe it’s a new idea. Come find like-minded developers and spend the day hacking together.
Developers: Are you looking to get involved in an Open Source project but need a bootstrapping session to get you started? Looking for chances to meet other developers and establish collaborative working relationships? Looking to learn by collaborating with others? Come find a project and spend the day sitting side-by-side with one or more of its developers learning the ropes and contributing code.
RailsConf is the largest physical gathering of Ruby and Rails developers internationally. Let’s take advantage of all being in one place at the same time AND take the chance to give something back to the projects and community which we so greatly benefit from.
In the morning, project leaders and representatives will have a chance to make a short pitch for their projects and the work they hope to get done. For the rest of the day, groups will self-organize and write code! Roll up your sleeves and prepare to learn, teach, and most importantly, contribute.
Go to this page and add your project or idea to the list of projects likely to be active in the Code Drive.
Posted by chad 174 days ago
I’m out in not-so-sunny Cupertino, CA with Dave teaching an introduction to Ruby course for a big company this week. Though I’d always rather be back home with Kelly, we’re having a great time out here. In addition to a lovely dinner with Laurent, Jordan, and Luke from Apple last night, I’ve been having a blast introducing a 15-person group to Ruby for the first time.
I do a lot of advanced level courses and Rails courses, but this one is rewarding in a different way: I’m reminded of how absolutely beautiful the Ruby language is. When you use a language every day it’s easy to forget the things about it that originally roped you in. I’m finding this experience to be an excellent way to relive that through the delighted looks on the faces of the students in this class.
Dave and I are doing this course together for the Pragmatic Studio later this month in Denver. If you or someone you know have been meaning to dig into Ruby, I invite you to come share the joy with us
Posted by chad 178 days ago
Now available!
Scanning through the videos this morning, I was reminded of what a great time I had at RailsConf. Planning is well underway for RailsConf 2008 (keep your eyes peeled for registration to open soon). An initial batch of proposals have been selected, and I’m already excited about the program this year.
The Rails community is maturing, and the level of proposed content has matured along with it. Expect more advanced content this year from a more experienced (obviously) group of practitioners.
Seeya there!
Posted by chad 217 days ago
This has been a long time coming, and it is admittedly kind of arbitrary, but it feels good to see our little package manager growing up:
Macintosh-2:~ chad$ gem -v
1.0.0
Thanks to Eric for gradually taking the lead over the past year and putting the nail in a few of the long-standing TODO items for RubyGems.
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/284268
Posted by chad 220 days ago
You may remember that I was working on Advanced Rails Recipes earlier this year. I’m not anymore. I’ve been over-committed and I finally decided to face facts and withdraw myself from the authoring process.
That’s OK though. Someone has pressed the “Kick Ass” button on the Mike Clark book-writing machine, and Advanced Rails Recipes has appeared in beta.
The book is a collection of recipes by Mike and top members of the Rails community. There is literally no one I trust more to put together timely, trustworthy advice on how to develop Rails applications right more than Mike. This one is a must-read, and beta is a great time to get in on the action in that it gives you a chance to make an impact on the final product.
The book is not yet complete, but it’s already worth the price.
Posted by chad 221 days ago
There were more proposals for RailsConf this year than there were attendees at RubyConf 2006. This means two things:
1. The state of the Rails community has changed significantly in that it has grown and there is a larger subset reaching the expert level.
2. It’s going to take us a while to sort through all of these proposals and make selections. Apologies in advance.
Posted by chad 222 days ago
It’s fun to watch the rush to be first to market with a new piece of open source functionality. You probably already know that Amazon released their SimpleDB this week. I was thinking we might whip up a Ruby wrapper but I knew if I just waited a day or so there would already be libraries available. Tonight I checked RubyForge and the three most recent projects are all SimpleDB wrappers:
aws-simpledb
aws-sdb
simpledb
It will be fun to see which one (or more?) of these gains and keeps mind share. Competition among open source projects is an interesting topic given the abstract nature of the stakes.
Posted by chad 261 days ago
Sam Larbi is running a cool little contest over on his weblog. The idea is to try to create a competition on learning new programming language paradigms. This is obviously a topic that’s dear to me (he’s referencing my book), and I think it’s cool that Sam has turned it into a contest.
I also generally like the idea of taking some potentially valuable item that you haven’t used and throwing it onto the internet to promote learning, good will, fun, or whatever. When I get home I may go out into the garage and see what I can find :)
Posted by chad 265 days ago
Follow RubyConf
Posted by chad 271 days ago
Today I installed Apple’s latest OS release: Leopard. One of the most exciting features for me as a Rubyist is the inclusion of a well-designed Ruby installation, complete with RubyGems and a bundle of pre-installed gems for the software I typically use as well as some of the Mac-specific gems most Rubyists would like to have (dnssd, rubycocoa, etc.)
Some of the gems shipped with Leopard are slightly out of date, as can be expected. But since they shipped the software as gems, updating Rails (for example) was as simple as ‘gem update rails’.
Apple has shipped Ruby as one of its Frameworks and has provided first-class integration with its development tools for the first time. They’ve been working with us in the community for nearly a year to get this right and it shows. Kudos to Apple and especially to Laurent Sansonetti and Jordan Hubbard for a job well done.
I can finally remove that extra non-Apple Ruby install I’ve been carrying around for years now and just use the Apple-supported Framework.
(FYI, Giles has completely jumped the shark on this one. Don’t let his poo-pooing worry you.)
Posted by chad 281 days ago
When I was in middle school, my friends and I started a rock band. We picked a name; we had a logo. If we’d had money the next obvious step would have been to print band t-shirts. This all happened, of course, before we ever learned to play any relevant instruments (saxophone and bassoon don’t count).
For well over a year, I’ve been wearing a Scotland on Rails shirt. Scotland on Rails has a name, a logo, and t-shirts.
Now they’ve got a conference.
Organized in part by my good friend and big thinker, Alan C. Francis, Scotland on Rails is sure to be a great time. If you’re in or around the UK, I highly recommend putting it on your calendar (or at the very least considering a mouse pad or pair of boxers).
Posted by chad 322 days ago
We’ve just opened RubyConf registration. There are more spots than last year, but it’s probably still going to sell out. I would book soon if I were you.