As I was picking up my badge from the slinky black-cocktail-dress-wearing women (huh?) at the registration desk, this guy came running up saying “We’re sold out! Don’t sell any more!” And the conference was packed, all right. Herewith notes on DHH’s keynote, the crowd, and BDD from Dave Astels.
DHH’s Keynote · David Heinemeier Hansson is rude and arrogant. At least that’s what he claimed in his keynote, displaying the dictionary definition of “arrogant” and saying “Well, yes”; then the next slide said “Fuck You”. We’ll see; some find humility naturally, others have it thrust upon them, and some remain arrogant into their graves, which are then rarely visited. Only having conversed with David once, for about thirty seconds, I have no personal opinion as to whether he’s just putting it on for effect.
Aside from that, the keynote was light-hearted, well-crafted, and informative. He started with some quantitative cheerleading: there have been half a million Rails downloads (3 are me), forty thousand copies of the Agile Web Development With Rails book have been sold, and there are 16 or so more books on the way.
Correctly, I think, DHH argued that the friendliness and ease-of-use of RubyGems (compared, say, to CPAN) is a major factor in Rails’ success.
Before getting into the “Where To” part of the speech, he spent some time on where they’re not going. He offered OpenACS and Zope as examples of things he doesn’t want Rails to be like. Because, he says, they have a culture of thinking that software development is painful, unpleasant, and should be avoided. He doesn’t want Ruby to become a framework for gluing together chunks of business behavior. Hmm, some people think that’s what most programming is.
David spent some time being hostile to internationalization, saying he didn’t really see it as part of the shared infrastructure, and similarly to “components”. I have no idea what he means by component, and the word doesn’t exactly explain itself. As for internationalization, I hope I didn’t understand what he meant, because I’ve always thought of that as something that really needs to be in the shared infrastructure, just because people should be forced to deal with it up front, rather than (much more painfully) later. You could say I’m opinionated on the subject and I think software should be, too.
WS-? and REST · David had a terrific slide, with the characters “WS-” followed by a picture of the Star Wars Deathstar; get it? Not bad, not bad at all. However, the Rails guys are very interested in wiring things together in the REST style, using HTTP as a glue. I’d transcribe paragraphs and paragraphs of his argument, but you’ve read it all before here, I basically agreed with every word. More on this below.
What Next? · They’re working on Rails 1.1.x and would like to have 1.2.0 out before the end of the year, and will do 2.0.0 at some unspecified future time. Their development philosophy is simple: DHH considers himself as the example of the developer he’s trying to reach; thus he works on solving the problems that he has in a fashion pleasing to him. While he frequently calls out to DRY and C-over-C and so on, the real decision procedure is obviously what feels right to the Rails group. I don’t see anything wrong with this; it seems to be working.
One interesting principle though: they want Rails to be for “Small teams doing big things.” There’s a worthy goal. Mind you, almost all the big things ever have been done, initially at least, by small teams.
Another: “Rails is a big collection of solutions to simple problems.” Hmmm...
In a near-future release they’re going to do some serious deprecation, very much in the Java style: condemned things will still work, but will complain at the developer.
Web Style ·
(The title of this section comes from
Rails.next will have a lot of HTTP-related machinery. David said
“We all know HTTP
caching is important, like flossing, and most of us leave it at that, like
flossing”. So they’re putting in a lot of work to support output compression
and static-asset caching and so on; in particular, they’re going to put the
timestamp right there in the URI; so
/pix/dhh.png will become
/pix/dhh.png?200604121745, which should allow The Right
Caching Things to happen more or less automatically. This
makes me nervous, feels like level mixing, but needs more thought.
The Railsians have discovered REST, big-time; we all got a lecture on the Four Big Verbs and the Meaning of Life, which I think was largely new to the audience members. David has been looking at the Atom Protocol and the influence shows, he asserted that “POST is for creating new items... er I mean, and updating them too”.
He noted that HTTP’s CRUD semantics are a pretty good match for those of Rails. There’s been an impedance mismatch between Rails’ notion of a path and the Web’s notion of a resource—at the moment, a reference to a collection and the member in a collection (different URI) are apt to get sent to the same code.
They’ve got what looks like a clever workaround, which allows you to dispatch to URIs based not only on the path but the verb you’re using. Also, they’re going to tunnel PUT and DELETE through HTML forms using a hidden field, all automatically. I’m not sure how much that’ll buy you, really, but it’s a nice idea.
As a finale, DHH showed the audience how you could control a browser (or multiple browsers) from a command line, using essentially the old KnowNow trick of keeping a socket open from the browser back to the server, so you can do “push”. Yawn. Done with Flash. Sigh.
The Crowd · I was far from the only Rails interested-but-inexperienced poseur, there were a lot of people there to find out what it’s all about. I talked to a mostly-PHP developer from Calgary and tried to convince her that Rails ought to be able to do most of what she does, only cleaner and better.
On the other hand, I spent one session sitting next to a guy who has a “Rails shop” in New York, and was hip to the very latest YARV gossip. Mostly young, unsurprising; mostly male, sigh.
BDD · Dave Astels gave an outstanding talk on new issues in TDD; in fact, he wants to rename the whole thing to BDD for “Behavior-Driven Development”; listening to him, it was obvious that he’s thought more about testing issues than anybody else I’ve ever listened to. I’ll be keeping a close eye on what he’s doing with RSpec (it looks like nothing’s there, but the links work).