Its Friday morning in Austin Texas, and the 3rd Annual International Ruby conference is just beginning. David Black welcomed everyone to the conference. He spoke a few words about RubyCentral, Inc, the organization that sponsors the conference.
At last year’s conference, Avi Bryant demostrated an unusual web application framework that allowed linear programming to be applied to the rather non-linear web. Avi’s ruby framework was a partial port of his Smalltalk framework, Seaside. Seaside uses continuations to allow a user to return the application to an arbitrary earlier point in the program and to make a different decision.
Eric Hodel has done a complete port of Seaside to Ruby. The result is named "Borges". Eric demoed Borges by modeling SushiNet, a sales cart style application for ordering raw fish.
The Seaside/Borges model for web applications is really interesting. It seems to be a good fit for certain types of applications, especially for those that lead the user through a certain set of pages (e.g. the checkout pages for a web shopping site). Now if I could just get my head wrapped around continuations.
James points out that using XML these days is much like using ASCII, you really don’t care about the exact representation. You just use the APIs without worrying so much about the gory details. James gave us a survey of the currently available XML tools for Ruby, noting whether they were pure Ruby or C library based, whether they were streaming or DOM like, and gave a summary of there use. I’m not going go through his entire list, it was quite long. If fact, I was a bit surprised at the length of the list.
Lafcadio is a OO mapping tool, allowing one to deal with objects in their Ruby code while accessing a relational database. Francis wrote Lafcadio for his own use, but appears to be fairly complete.
Lafcadio is specifically designed to support unit testing. Francis uses an interesting mechanism for flexibly controlling singletong instantiation in the framework.
Here are a couple of notes
Steve intended to talk about the implementation his Ruby World project, but implementation of Ruby World was delayed. Since David Black (one of the conference organizers) wouldn’t let him back out of speaking, Steve decided to talk about using Ruby in a commercial project.
And that’s a good thing. Steve’s company is developing a fax device controller and Steve is using Ruby to write the PC-based scheduling and control software for outbound faxes. This is a native windows application that will actually ship with the product (the fax controller is not yet shipping).
It was refreshing to hear about a Ruby project that is product related.
Some random notes:
As a wrap up, Steve shared some techniques for testing GUI code.
Jack is the author of Code Generation in Action. Jack talks about using code generation for anything from small one-liners to large MDA-style generators.
Some advice from Jack:
I only disagreed with Jack on one point. Jack seemed in favor of guarded blocks in generated code. Guarded blocks are areas where developers are not allowed to edit. I personally have a great dislike for guarded blocks and would rather have the generated code be in a completely separate file, but that’s just me.
I don’t have much details here, buts that’s probably because I was doing more listennig than note taking at that point in time.
Chad Fowler introduced Matz and opened the floor for questions. Matz set the ground rules in that he will talk about Rite and Ruby 2.0 tomorrow night. So no Ruby 2/Rite questions for tonight.
| Note : | The following is very paraphrased and greatly shortened. I captured what I could from the talk as best I could. I apologize for any inaccuracies and errors. |
Aside: This packaging question turns out to be one of the more significant questions asked during the roundtable. It caused a handful of us to lose a great deal of sleep over the weekend. More on this later.
Aside: I’m not sure I’m happy with this. I tend to use proc much more often than lambda, but I guess I can adjust. I suppose this shows what can happen when you can bend Matz’s ear.
At this point people started sharing Ruby stories in the workplace. Matz closed by saying that we will review changes for Ruby 2.0 tomorrow evening. Yeah!
The package question that came up during the roundtable touched a nerve with a number of us. Rich Kilmer, Chad Fowler, Paul Brannan and I (Jim Weirich) headed for the hotel (Club Max) and setup our laptops in a corner (near an outlet). Chad had a cellular internet connection so we were able to pull down a number of packages and previous attempts for review. We finally decided we would hijack the RubyGems project started by Ryan Leavengood. Ryan presented RubyGems at the very first Ruby conference in 2001 and got a favorable reception. Unfortunately the work was never continued and the project languished. So, Ryan, if you are out there, we hope you don’t mind.
We setup the following rough goals:
I don’t recall enumerating the goals in this form, but they evolved from the discussions as the night progressed. In particular, we waffled on installing gems or loading files directly from gems. We finally decided on going through an installation because shared native libraries couldn’t be loaded directly from a gem file.
That first night, Rich and Paul attacked the package format and metadata required for a gem. Chad and I started looking at compression libraries and packaging techniques. Zlib is now packaged with Ruby 1.8, so it will be easy to compress the individual files. Standard zip files were considered, especially when we found a zip file library in the RAA. But eventually we decided on a self-extracting format that begins with a Ruby script to do the extraction.
By the end of the evening my mind was turning to mush. Fortunately the bar began turning out lights at 2:00 am. I headed off to bed, but I’m pretty sure Rich kept going for a bit beyond that.