RailsConf Day 1 Report
Today was the real start of RailsConf 2007, and of course it started with the keynotes. Program chair Chad Fowler was up first, warming everyone up by playing to the crowd. He pointed out that the wider world perceived Rails folks as arrogant bastards. People actually loved this; it's how they want to be perceived, apparently.
Next came the main event: David Heinemeier Hansson talking about Rails 2.0. It looks like Rails 2.0 is going to be like current edge Rails, only more so - indeed, he remarked that 95% of what he was showing today was already in edge (and indeed, I'd already played with much of it, which gave me a warm feeling; I may not be as far behind the curve as I thought). Resource orientation is going to be the default way of building applications in 2.0; no surprise there. Action Web Service is being moved out of the default Rails install, though it will remain available as a plugin: "Rails is not Switzerland - Rails has an opinion."
He also listed nine other things to like about Rails 2.0:
1. Breakpoints are back (via integration of ruby-debugger). I need to dig into this; being able to drop into a fully interactive debugger [take that, VB] by putting a single line of code in the source would be of great use to new people trying to learn this increasingly complex framework.
2. HTTP Performance. Multiple JavaScript and CSS files can be automatically consolidated into gzipped master files and served from asset hosts, along with other assets like images, making best use of multiple connections.
3. Query cache. This is a SQL cache in the Rails layer. Results will return from cache if it doesn't see INSERT/UPDATE/DELETE activity since the previous identical SELECT statement. This clearly has some problems if you're distributing your application across multiple servers, so presumably you can turn it off somehow.
4. action.mimetype.renderer - A new convention for splitting up URLs so that now you have people/index.html.erb, people/index.rss.erb, people/index.atom.builder and so on. The format and renderer are deducible from the URL.
5. config/initializers - Pull stuff out of config/environment.rb and put it in multiple files in config/initializers directory. So, it's a way to organize the complexity, but the complexity is still there.
6. Sexy migrations - A simpler syntax for migrations which is already in edge
7. HTTP Authentication - Built in support for HTTP basic authentication with calls like authenticate_or_request_with_http_basic. This is good for APIs, not so good for user-oriented stuff.
8. The MIT assumption - Creating a new plugin with the generator now assumes the MIT license and generates one for you (because that's what DHH prefers)
9. Spring cleaning - A lot of the deprecated stuff in 1.2 is going to move to plugins.
After a break, I ended up in "Building Community Applications with Rails". This wasn't the session I'd been planning on, but the conference organizers hadn't made any attempt to put more popular sessions in larger rooms and some sessions were full past bursting. It seems like they could have used the data from "MyConfPlan"http://www.myconfplan.com/conferences/RailsConf2007 as a statistically valid sample for planning, although by midday MyConfPlan appeared to be permanently crashed anyway. This session was basically a "lessons learned" from Dan Benjamin, one of the the guys behind cork'd, and it was mostly pretty obvious advice without Rails-specific content.
The computer of choice at this conference is overwhelmingly the Mac Book Pro - 95%, maybe. Many people are struggling with an apparently cranky wifi network; you can tell the ones with EVDO service because we're just happily online.
In the next session slot I caught Scott Raymond's "Doing REST Right". He spent a lot of time talking about the underpinnings of REST, starting with Roy Fielding's work, which was clearly not what the crowd was there for. Data point: about 30% of the crowd had built some amount of a REST application in Rails. Scott covered a number of the common questions people have as they're moving into REST (what about transactions, concurrency, reliability), but again, it didn't tie back to Rails. Talking to a few people after the session I got the impression that folks would have rather had a session that drilled more specifically into the REST support in edge Rails. This seems to be a pretty hands-on crowd, as well as one that is skewed towards people on their first, or first few, Rails applications.
The lunch break was marked by the same box crap food as yesterday. It's a good thing I don't come to conferences for the food. They've got quantity more than covered, but quality is fairly dismal.
After lunch I sat in on Ben Scofield's "Building and Working with Static Sites in Ruby on Rails" session. The basic problem his company was dealing with was handling sites with a lot of static pages (hundreds). For just a few static pages, there's no problem: you can use the obvious approaches of an action and a view for each page, or actionless views (put a file in the views folder, and the default route will serve it up fine in the controller's layout).
For more complex sites, Ben moved through four solutions, which really amounted to four refinements of the solution that Viget developed as they moved from being a PHP shop to being a Rails shop. All depend on using a catch-all route similar to
And then putting the pieces back together in the show method
They gradually ended up with a Page model, a Variables model, and a Redirects model (Page has_many Variables, has_many Redirects), with all of the information filled in from database tables and the page content stored in the database as well so that it can be set up in the site search with ferret or solr or whatever.
Their solution has been packed up for reuse as a plugin application at http://www.viget.com/railsconf/ though he cautions that it's still alpha code.
For my last session of the day, I decided to sample one from the "products and services" track - CodeGear's Joe McGlynn speaking on "Ten Cool Things I Learned on the Path to Rails Enlightenment". He spent about twenty minutes talking about ways that we grow up in our careers as software engineers, and I fear this was pretty much a throwaway; if you've read any of the literature from Fred Brooks on forward, you've seen this sort of thing before. Then he moved into the expected pitch for the new CodeGear Rails IDE. He invited all conference attendees to join the beta though after I looked at the amount of info they wanted to collect, I lost interest (apparently no one from CodeGear attended Dan Benjamin's talk on making signups easy). The demo itself was pretty bad; when neither the product nor the speaker was compelling after ten minutes, I walked out, and I was far from the only one.
There wasn't anything I wanted to catch in the last afternoon slot, so I took off for a bit, caught up on the web, and had some dinner. Then I came back for the evening keynotes. Evening keynotes strike me as a bizarre sort of thing, but I'll play along.
First up was Steven Smith from FiveRuns with "Enterprise is not a Four Letter Word". He spent time putting out facts and figures to prove that people love us, the press love us, and the enterprise market is huge, and ended up with a Monty Python clip with bad sound. Though the Python and the ragging on ASP.NET got a rise out of the crowd, I didn't really find much content in this talk. Yeah, the enterprise market is huge and lots of people have download Rails, but what's the connection between those two dots? I've chatted with half a dozen folks from actual enterprise-level shops at the conference, and they're here because they're interested to see what Rails can do, but they're all pretty clear that it's not even close to moving into their critical systems yet.
Next up was Avi Bryant with "Future History: Ruby at 30 Years", which was probably the best talk of the day. He purported to be talking about a version of Ruby from 2025 that included a number of interesting features:
Then he dropped the other shoe: he wasn't talking about Ruby 2025, but about Smalltalk now, but "Ruby and Smalltalk are the same language" - similar syntax, similar concepts. If you buy into that premise, you can use the current state of Smalltalk to see the future of Ruby. For example, Smalltalk's current state disproves the notion that there's something about Ruby's feature set that makes it inherently slow. (Of course, Avi didn't mention that by the same analogy, in 30 years Ruby will be a marginalized language that most people don't take seriously, kept alive by a small core of dedicated and occasionally shrill practitioners).
This idea didn't go over all that well with the crowd, though things picked up a bit when Avi finished his slides early and moved into "presentation by committee," taking questions and suggestions from the audience. It was clear that most people in the hall didn't know much about Smalltalk, and most who did know didn't think this would be a good path for Ruby, but there was some good back-and-forth.
The evening was capped by Ze Frank, who did some of his standard standup routines . This had nothing to do with Ruby or Rails, but the audience pretty much didn't care. As for me, it was a "get off my lawn" moment; I could have gotten back to the hotel earlier and watched Leno if I'd wanted standup, which I didn't particularly.
Next came the main event: David Heinemeier Hansson talking about Rails 2.0. It looks like Rails 2.0 is going to be like current edge Rails, only more so - indeed, he remarked that 95% of what he was showing today was already in edge (and indeed, I'd already played with much of it, which gave me a warm feeling; I may not be as far behind the curve as I thought). Resource orientation is going to be the default way of building applications in 2.0; no surprise there. Action Web Service is being moved out of the default Rails install, though it will remain available as a plugin: "Rails is not Switzerland - Rails has an opinion."
He also listed nine other things to like about Rails 2.0:
1. Breakpoints are back (via integration of ruby-debugger). I need to dig into this; being able to drop into a fully interactive debugger [take that, VB] by putting a single line of code in the source would be of great use to new people trying to learn this increasingly complex framework.
2. HTTP Performance. Multiple JavaScript and CSS files can be automatically consolidated into gzipped master files and served from asset hosts, along with other assets like images, making best use of multiple connections.
3. Query cache. This is a SQL cache in the Rails layer. Results will return from cache if it doesn't see INSERT/UPDATE/DELETE activity since the previous identical SELECT statement. This clearly has some problems if you're distributing your application across multiple servers, so presumably you can turn it off somehow.
4. action.mimetype.renderer - A new convention for splitting up URLs so that now you have people/index.html.erb, people/index.rss.erb, people/index.atom.builder and so on. The format and renderer are deducible from the URL.
5. config/initializers - Pull stuff out of config/environment.rb and put it in multiple files in config/initializers directory. So, it's a way to organize the complexity, but the complexity is still there.
6. Sexy migrations - A simpler syntax for migrations which is already in edge
7. HTTP Authentication - Built in support for HTTP basic authentication with calls like authenticate_or_request_with_http_basic. This is good for APIs, not so good for user-oriented stuff.
8. The MIT assumption - Creating a new plugin with the generator now assumes the MIT license and generates one for you (because that's what DHH prefers)
9. Spring cleaning - A lot of the deprecated stuff in 1.2 is going to move to plugins.
After a break, I ended up in "Building Community Applications with Rails". This wasn't the session I'd been planning on, but the conference organizers hadn't made any attempt to put more popular sessions in larger rooms and some sessions were full past bursting. It seems like they could have used the data from "MyConfPlan"http://www.myconfplan.com/conferences/RailsConf2007 as a statistically valid sample for planning, although by midday MyConfPlan appeared to be permanently crashed anyway. This session was basically a "lessons learned" from Dan Benjamin, one of the the guys behind cork'd, and it was mostly pretty obvious advice without Rails-specific content.
The computer of choice at this conference is overwhelmingly the Mac Book Pro - 95%, maybe. Many people are struggling with an apparently cranky wifi network; you can tell the ones with EVDO service because we're just happily online.
In the next session slot I caught Scott Raymond's "Doing REST Right". He spent a lot of time talking about the underpinnings of REST, starting with Roy Fielding's work, which was clearly not what the crowd was there for. Data point: about 30% of the crowd had built some amount of a REST application in Rails. Scott covered a number of the common questions people have as they're moving into REST (what about transactions, concurrency, reliability), but again, it didn't tie back to Rails. Talking to a few people after the session I got the impression that folks would have rather had a session that drilled more specifically into the REST support in edge Rails. This seems to be a pretty hands-on crowd, as well as one that is skewed towards people on their first, or first few, Rails applications.
The lunch break was marked by the same box crap food as yesterday. It's a good thing I don't come to conferences for the food. They've got quantity more than covered, but quality is fairly dismal.
After lunch I sat in on Ben Scofield's "Building and Working with Static Sites in Ruby on Rails" session. The basic problem his company was dealing with was handling sites with a lot of static pages (hundreds). For just a few static pages, there's no problem: you can use the obvious approaches of an action and a view for each page, or actionless views (put a file in the views folder, and the default route will serve it up fine in the controller's layout).
For more complex sites, Ben moved through four solutions, which really amounted to four refinements of the solution that Viget developed as they moved from being a PHP shop to being a Rails shop. All depend on using a catch-all route similar to
map.connect "static/*path", :controller => "pages", :action => "show"
And then putting the pieces back together in the show method
def show
page_path = params[:path].join("/")
if file exists ...
They gradually ended up with a Page model, a Variables model, and a Redirects model (Page has_many Variables, has_many Redirects), with all of the information filled in from database tables and the page content stored in the database as well so that it can be set up in the site search with ferret or solr or whatever.
Their solution has been packed up for reuse as a plugin application at http://www.viget.com/railsconf/ though he cautions that it's still alpha code.
For my last session of the day, I decided to sample one from the "products and services" track - CodeGear's Joe McGlynn speaking on "Ten Cool Things I Learned on the Path to Rails Enlightenment". He spent about twenty minutes talking about ways that we grow up in our careers as software engineers, and I fear this was pretty much a throwaway; if you've read any of the literature from Fred Brooks on forward, you've seen this sort of thing before. Then he moved into the expected pitch for the new CodeGear Rails IDE. He invited all conference attendees to join the beta though after I looked at the amount of info they wanted to collect, I lost interest (apparently no one from CodeGear attended Dan Benjamin's talk on making signups easy). The demo itself was pretty bad; when neither the product nor the speaker was compelling after ten minutes, I walked out, and I was far from the only one.
There wasn't anything I wanted to catch in the last afternoon slot, so I took off for a bit, caught up on the web, and had some dinner. Then I came back for the evening keynotes. Evening keynotes strike me as a bizarre sort of thing, but I'll play along.
First up was Steven Smith from FiveRuns with "Enterprise is not a Four Letter Word". He spent time putting out facts and figures to prove that people love us, the press love us, and the enterprise market is huge, and ended up with a Monty Python clip with bad sound. Though the Python and the ragging on ASP.NET got a rise out of the crowd, I didn't really find much content in this talk. Yeah, the enterprise market is huge and lots of people have download Rails, but what's the connection between those two dots? I've chatted with half a dozen folks from actual enterprise-level shops at the conference, and they're here because they're interested to see what Rails can do, but they're all pretty clear that it's not even close to moving into their critical systems yet.
Next up was Avi Bryant with "Future History: Ruby at 30 Years", which was probably the best talk of the day. He purported to be talking about a version of Ruby from 2025 that included a number of interesting features:
- A fast JIT-compiled Ruby VM
- Multiple commercial Ruby vendors
- A best in class IDE written in Ruby
- Standard Library entirely in Ruby
- Major financial/Enterprise use
- Massively scalability
Then he dropped the other shoe: he wasn't talking about Ruby 2025, but about Smalltalk now, but "Ruby and Smalltalk are the same language" - similar syntax, similar concepts. If you buy into that premise, you can use the current state of Smalltalk to see the future of Ruby. For example, Smalltalk's current state disproves the notion that there's something about Ruby's feature set that makes it inherently slow. (Of course, Avi didn't mention that by the same analogy, in 30 years Ruby will be a marginalized language that most people don't take seriously, kept alive by a small core of dedicated and occasionally shrill practitioners).
This idea didn't go over all that well with the crowd, though things picked up a bit when Avi finished his slides early and moved into "presentation by committee," taking questions and suggestions from the audience. It was clear that most people in the hall didn't know much about Smalltalk, and most who did know didn't think this would be a good path for Ruby, but there was some good back-and-forth.
The evening was capped by Ze Frank, who did some of his standard standup routines . This had nothing to do with Ruby or Rails, but the audience pretty much didn't care. As for me, it was a "get off my lawn" moment; I could have gotten back to the hotel earlier and watched Leno if I'd wanted standup, which I didn't particularly.