Archive for October, 2005

Ruby Conference Wrap-Up (Part 5)

This is the last installment of my long-winded commentary on the 2005 International Ruby Conference. It’s a short one, because I had leave late Sunday morning to catch my flight home from San Diego.

David Heinemeier Hansson opened the morning’s talks with his presentation on the “The State of Ruby on Rails”. I missed last year’s conference in Virginia, where David introduced Rails, and so this was my first opportunity to hear him speak. It’s evident from his work on Rails and various Rails-based applications that he’s a talented software developer, but this presentation also revealed that he’s a natural salesman and a charistmatic public speaker.

It was for the most part a non-technical talk, a kind of review of the progress that has been made over the past year. From the 9+ Slashdot headlines, to the phenomenal download statistics, to the publication of Agile Web Development with Rails (with over 20,000 copies sold since August), it’s been a huge year for Rails. David commented on some of the things that he believes helped to make Rails such a success. He said that having a strong framework is important, but public “poster child” applications (like 37signalsBasecamp, or the Robot Co-op‘s 43 Things) help to convince the public that Rails is the real deal. He also noted that for a project or technology to succeed, you’ve got to tell people stories that they’re ready to hear. In Rails’ case, that story was that Java and J2EE based web applications really are too complex, and that there’s a better way to do it.

David closed his presentation by announcing the (now available) Rails 1.0 release candidate, and then talking about plans for the next phase of development. The focus is going to shift from core Rails development to platform tools. One, the SwitchTower utility for automated Rails application deployment, is already available and ships as part of Rails. The 37signals crew is also working on Gauge, a tool for monitoring the health of a clustered Rails application nicely (and in real time), as well as Conductor, a web application inspired by Naked Objects that makes it easier to develop Rails applications (a.k.a. “instant scaffolding for your application”).

Side note. During the Q&A that followed, someone mentioned a couple of books by Clayton Christensen that have influenced him: The Innovator’s Dilemma and The Innovator’s Solution. I’ve added both to my wish list if you want to buy one of them for me. He also recommended Kathy Sierra’s web log, Creating Passionate Users.

Nathaniel Talbott started his talk at 10:00, and I had to leave around 10:40 to check out of the hotel and catch my ride to the airport. I managed to hear a lot of his talk, but I wish I’d had enough time to hear it all. I’m going to need to find the audio for this and listen to it in its entirety some day soon.

The title of his presentation was “Rails: Serving the Long Tail in 1883 and 2005”. He incorporated a number of ideas, and as I’ve said, I didn’t get to hear the conclusion, but I think his point was that the combination of Ruby and Rails is making software development so “cheap” that it is creating new opportunities, new markets for which to develop software. Nathaniel used the example of some customized software he developed for his wife’s co-op, software that he was able to knock out in a relatively short time using Ruby and Rails. It’s a project he probably wouldn’t even have considered if he were still limited to Java and other, more tedious, development environments. The technology we now have enables us to tap into those long tail markets and finally make a living doing so.

Of course, because it’s Nathaniel, he managed to talk about the parallels he’s seen between how the introduction of the first transcontinental railroad in the late 19th century (and how that changed the U.S. economy) and what’s happening in software today. Thus, a different kind of “rails” managed to serve the long tail, in much the same way, back in 1883. Got it? Good.

Ruby Conference Wrap-Up (Part 4)

After lunch, things picked back up with a presentation by Ryan Davis, entitled “Polishing Ruby: Power Tools and Toys”. As with Austin’s talk earlier Saturday morning, I was too busy paying attention to all of the cool stuff Ryan was demonstrating to take very many notes. Ryan has been busy twisting and contorting Ruby into doing things that Matz surely never intended it to do, and the results were amazing. He covered a lot of ground, and I need to go back and review his slides to see what I missed, but the demonstration that really wowed the audience was his use of ZenOptimize to automatically optimize some code (perhaps a factorial calculator?) and reduce its runtime by about 4x. It’s interesting to consider the consequences of this work in light of the other projects that are attacking Ruby performance from a different (but complementary) angle (e.g. YARV).

Jim Weirich was up next, with a presentation on “Creating Domain-Specific Languages (DSLs) in Ruby”. I took a lot of notes on this content-dense talk, and so I’m just going to hit the high points for this summary. Jim opened with a great demonstration of several non-obvious DSLs. One was the “Siteswap” language, used to describe juggling exercises. (Jim shared that he learned to juggle back in his C programming days, when he had plenty of spare time to kill while waiting for compiles to finish). He also described a DSL for annotating Rubik’s Cube moves, and pointed out that guitar tablature is yet another kind of DSL. In short, domain-specific languages are targeted to very particular problems and solving them well.

Most of us familiar with the history of Rake knew that it grew out of Jim’s frustration with Make. I was interested to hear him admit that until that happened, however, he hadn’t really considered Ruby suitable for DSLs because its syntax was too complex (as compared to, say, Lisp or Forth), that it lacked Lisp’s macro capability, and so forth. He then went into some discussion about how to use Ruby for DSLs (which are best reviewed on his slides) and noted that the goal is to create DSLs that are easy to use, even if we avoid “geek speak” and have to break some programming rules in the process. As Jim said, “The fun part of Ruby is figuring out how to make it behave as it shouldn’t.”

The final talk of the afternoon session was Karlin Fox’s presentation on “System Testing in Ruby with Systir“. Karlin talked a little bit about story-driven development and how it reduces the risk of developing the wrong software. He also described a process in which users write tests in plain English, developers work with the users to design a DSL to encode those tests, and then developers develop the applications. The presentation included a nice demonstration of automated testing of a web site. This was all well and good, but I had trouble identifying exactly what role Systir plays in all of this.

That ended the regular sessions for Saturday. I don’t feel like writing about Matz’s keynote that he gave Saturday evening. Due to a number of interruptions during his talk, things really got off track and it ended up being very frustrating. The conference organizers recognized this problem as well, and hopefully we’ll have some ground rules in place next year so that questions are held until the end.

Ruby Conference Wrap-Up (Part 3)

Ah, Saturday morning arrives in San Diego. Well, actually I’m writing this after the fact so it’s more of a reminiscence than a real time play-by-play. Say, did I mention that most (or all?) of the rooms at the Lafayette Hotel and Suites are named after movie stars? I stayed in the Bette Davis Lani Suite. I’m pretty sure that I now know where she found the inspiration for her famous line, “What a dump!”.

Ah, but enough griping. The first presentation of the morning was Kevin Baird’s intriguingly titled “Refactoring No Clergy”. No Clergy is (according to the RubyForge project description) a “set of tools to perform Open-Form music pieces, in which the audience is able to give feedback during the performance that influences later sections of the piece.” The software was originally written in Python, then rewritten to Ruby, and subsequently refactored. My take on it was that the software generates music for a small group, in real time, but changes the music as it goes along in response to the audience inputs. For example, an audience member might request that the trumpet parts be a little higher, and the music would start evolving in that direction. It was a very cool presentation, but I was worried that it might go over non-musicians’ heads. Fortunately, as we found out in a post-presentation Q&A, a large portion of the audience had at least some music background.

And as for that title: Kevin explained that “No Clergy” isn’t anti-religious. It’s a metaphor of sorts, in that the “clergy” of conductors and directors aren’t needed.

Next up was Brent Roman, talking about “Embedding Ruby in a Robotic Marine Laboratory”. The first half hour or so of the talk focused on a lot of the technical details involved in the configuration of this marine laboratory and the experiments it’s performing. Parts of it reminded me of the work that we used to do on analyzing DNA microarrays at a former employer. But I’m not going to lie to you: I didn’t follow this presentation very closely and didn’t take any notes at all. Sorry, Brent. I’m told that that IRC chatter about this was a bit brutal.

I didn’t take any notes on Austin Ziegler’s presentation on PDF::Writer either, but it wasn’t due to lack of interest. On the contrary, I was watching and being generally impressed with the work that Austin’s done. As I told Austin a few days later on #ruby-lang, I really need to find some excuse to start playing around with PDF::Writer. Very cool.

Ruby Conference Wrap-Up (Part 2)

Hmm, based on the previous installment you might be led to believe that Charles Nutter’s talk was the last one of the Friday morning panel, when in fact it was the first talk of that afternoon’s panel. Oh well.

The second talk on Friday afternoon was Koichi Sasada’s “YARV Progress Report”. The goal, as Koichi explained, is for YARV to become the virtual machine for Ruby 2.0 (a.k.a. “Rite”). I didn’t understand a lot of the technical details, but one thing that I do believe I heard was that Koichi doesn’t expect this work to be completed until at least sometime in 2007. Does that mean that Ruby 2.0, and all that comes with it, is still at least a year or so away? If so, that’s disappointing news.

The final speaker of the afternoon was Eric Hodel, who spoke about reimplementing Ruby in Ruby itself. The basic problem is that a lot of Ruby’s core classes and modules are implemented in C (unlike, for example, Smalltalk, where most of Smalltalk is implemented in Smalltalk itself). Since switching back and forth between C and Ruby programming requires such a huge mental “context switch”, there’s a real entry barrier for developers who’d like to contribute more to the Ruby core. By reimplementing certain core classes primarily in Ruby, with the judicious use of C code via Ryan Davis’ Ruby::Inline module, the dynamic duo is doing a lot to chip away at that barrier.

After a break for dinner, we reconvened for a “roundtable” discussion at 7:30 Friday evening. It was basically an open-ended Q&A session with Matz, but it went really well. There were a lot of good questions. A few things that I took note of:

  • Francis Hwang asked whether Matz intends to write a language “spec” for Ruby. Matz agreed to cooperate with anyone who wants to take the lead on such a project, but he doesn’t want to write it himself.
  • Austin Ziegler tried to pin Matz down about whether (and when) RubyGems could be integrated into the Ruby core; and more to the point, if Matz was going to take a position on the recent controversy on the ruby-talk mailing list concerning RubyGems. As I recall, Matz gave a suitably non-committal answer.
  • Jamis Buck asked if Matz started to work on Ruby to scratch any particular “itch”. Matz replied that no, he was just bored.
  • Derek Sivers (from CD Baby) asked if Matz still thinks of Ruby as his “toy” when making decisions about its direction, or if he takes into account the larger Ruby community’s needs. Matz replied that because he travels around the world meeting Rubyists, he sees a lot of the different ways that people are using Ruby, things that a lot of us aren’t aware of. He also made it clear that whenever he makes decisions about Ruby, he wants to be sure that people understand the reasoning behind those decisions.
  • Nathaniel Talbott asked about moving the source code repository to Subversion. I didn’t hear any firm commitment from Matz on this subject, but it sounds like Subversion is already in use by his group and so it seems likely that this will happen eventually.
  • Someone asked if Matz had any regrets about Ruby’s design, in hindsight. He cited the ambiguity of how multiple assignments work in Ruby as one of his main regrets. Note that it wasn’t until this conference that I finally “got” what he feels is wrong with multiple assignments, and it demonstrated to me all the more how sensitive Matz is to making Ruby simple to understand.
  • Someone asked if Matz had ever been recruited by a large corporation like Microsoft. At first, he said no; but then he recalled that about three years ago, ThoughtWorks told him that they wanted him, but he thinks they were just kidding. Several ThoughtWorks employees there (including the boss man) assured him that it wasn’t a joke!
  • I don’t remember how the question was phrased (i.e. whether the questioner was asking about which languages have influenced Ruby, or simply which languages Matz is interested in), but in his answer Matz mentioned Haskell, Lisp/Common Lisp/Scheme, CLU, Smalltalk and Io.
  • Finally, somewhere in there, it was noted that at this year’s conference we had attendees from fourteen different countries, spread over four continents (North America, Europe, Asia and Australia).
Stay tuned for the third installment, coming real soon…

Nobody Ever Tells Me Anything

I just found out by accident that a movie of Neil Gaiman’s Coraline is in the works. The report is that Dakota Fanning will be providing the voice of Coraline, which is fine I suppose. Looks like it’s going to be an animated feature, which also sounds promising; the director is Henry Selick, who also directed “The Nightmare Before Christmas” and “James and the Giant Peach”. Finally, there’s a thread on the IMDb message board for the movie that claims that They Might Be Giants are providing the soundtrack.


SCIgen is an automatic Computer Science paper generator. If you’ve ever wanted to write a realistic looking, but ultimately nonsensical paper on a random Computer Science topic (with Mr. T as co-author, no less), now’s your chance. Be sure to read about how one of these randomly generated papers was submitted and accepted to a conference!

Ruby Conference Wrap-Up (Part 1)

Early this morning, I was in the middle of typing up a summary of my notes and reflections on this year’s Ruby Conference, when I innocently surfed over to to look up something. Imagine my horror as I watched Firefox crash before my eyes, wiping out the previous half-hour’s work in the process.

Note to self: Save early, save often. Or better yet, compose blog posts off-line from now on.

So instead of going into detail about the weekend’s talks, let me just hit the highlights:

Francis Hwang opened the first morning’s panel with a talk on “Top-to-bottom testing in Ruby”. I’ve only seen Francis speak once before, I guess at the Seattle conference when he introduced Lafcadio. I had forgotten how good he is at this, and it was a great way to kick things off. Favorite quote: “Sometimes a global variable is just a global variable.”

To be blunt, I had low expectations for Akira Tanaka’s talk, entitled “open-uri: easy to use & extensible virtual file system”. This is not to say that open-uri isn’t a wonderfully ingenious and useful module to have in the standard library, but come on: there’s just not that much to say about it, is there? I was pleasantly surprised to find that after spending a relatively short time talking about open-uri itself, Akira turned to the more general subject of how to design “easy to use” APIs.

Akira covered a number of topics during this part of his talk, but perhaps the most interesting was his use of Huffman encoding as an analogy for how one should think about names in APIs: use shorter names for frequently used methods, and longer names for less frequently used methods. As he correctly noted, Ruby’s “p” method has a lousy name by most any objective standard, but in practice it doesn’t present a problem because everyone uses it and thus everyone remembers what it does. He made a number of other good points about what makes for a good (or bad) API, and this turned out to be one of the most interesting talks at the conference for me. Favorite quote: “No configuration is good configuration”.

The final talk of the morning was Charles Nutter’s presentation on the state of JRuby, and especially the redesign work that is now underway. I didn’t take a lot of notes on Charles’ talk because his slides were so detailed and captured most of what he had to say, but this was definitely a topic of interest to me.

More to come in a later installment…

Ruby Code & Style

The first issue of Ruby Code & Style, an online magazine from Artima, is now available. Editors James Britt and Shashank Date have done a fantastic job, along with Bill Venners and the members of the Ruby Code & Style advisory board, to provide this new resource for Ruby developers. So check it out! And if you were somehow unaware of the Artima Developer web site before this, be sure to check out the rest of the site as well.

Festival Fun

This past Saturday I went to the Madison Street Festival. I don’t usually buy anything, but I try to go every year. It’s a fun way to spend about an hour walking around and seeing things. I was especially pleased to see that our Mayor had a booth set up for anyone who wanted to stop by and ask him questions. I don’t remember any of our past mayors doing this, and it just reaffirms my belief that he’s got the right attitude about his job and makes me glad I voted for him.

As I was walking around, I noticed one booth that seemed out of place. This booth was also present at last year’s Street Festival, so I wasn’t entirely surprised to see it again, but still. Rather than taint your decision process, let me just take you on a kind of virtual tour of the Street Festival and see if you notice anything unusual.

  1. Park at the church parking lot and then walk down that little side street that leads into historic downtown Madison, where the street festival is held.
  2. Hang a right and see the table set up with fresh fruit, as well as jars of locally made honey and sorghum molasses. Boy, that looks good. Might have to stop by this table on the way back.
  3. Walk a little further down and see a fellow who is a professional storyteller. He’s taking a break right now, but he is selling one of his CDs.
  4. Up ahead on the right is one of the city’s fire engines. They’re letting little kids get up on it and have their picture taken. The kids seem to be having a lot of fun. I bet my two year-old nephew would seriously get into climbing around that fire truck if he were here.
  5. Time to cross the railroad tracks over to the adjoining street where there are more booths. Here’s the Salvation Army, with their little red bucket, collecting money for disaster victims. Their lone saxophone player is playing “April in Paris”, and doing a fine job of it. I stop and put a twenty in the little red bucket.
  6. Ahead on the left are the Raelians, described by Wikipedia as the largest UFO cult in the world. Next door to them is a lady selling various handwoven items with the logos of different football teams.
  7. Further ahead, up on the hill, is a tent where art work by local school kids is displayed. I stop by to check it out (and to enjoy the shade for a few minutes). As always, I’m amazed by how talented some of our local young artists are.
  8. I leave the art tent and pass the mayor’s booth that I mentioned earlier. He’s talking to a small group of citizens and pointing out something on a large map of the city.
  9. Hey, there’s my friend Steve! Hi, Steve! Steve tells me that his girls played with one of the bands earlier this morning and so he came out to hear them. We talk for a few minutes and then go on our separate ways.
  10. Up on the left is a big stand selling lemonade, hot dogs, funnel cakes, you name it. All of that bad stuff that you only ever eat at places like this. It’s a little too close to lunch so I walk on by for now.
  11. Ahead on the right are the Madison County Democrats, their table not too far from the Republican Women of Madison. They seem to be peacefully coexisting.
  12. I round the bend and cross the railroad tracks again, heading into the home stretch. A group of cheerleaders and someone dressed up as a dog pass by. The dog is wearing what I think is a fireman’s helmet, so maybe he’s some kind of safety dog. I chose not to ask him.
  13. Heading down the street, I pass several games, like a beanbag toss and a fishing booth. Finally, I turn back down the side street I came in on and head back to my car.
OK, did you catch anything unusual in there, or is it just me?