- Jim Freeze talked about teaching Ruby to other people in his company. He works at a company of electrical engineers who don't all have a formal training in any sort of programming. He talked about the challenges and solutions to his teaching dilemmas. - Rich Kilmer gave a spontaneous talk on the Ultralog project that he has been working on for DARPA. He specifically talked about ACME, A Ruby-based framework for testing distributed applications (specifically, for controlling Java processes in a distributed environment with the goal of testing reliability in the event of failures or crashes; the system was required to withstand up to 45% loss of infrastructure without loss of functionality). - Austin Ziegler talked about Ruwiki and how it is implemented. The Wiki is designed to be easily extensible, particularly with regard to formatting text; new tokens can be easily added, so that the Wiki can handle input in many formats. This means that it can emulate other the formatting of other Wikis, which is useful when switching to Ruwiki from another Wiki. - Hal Fultun discussed Tycho, a PIM (not a digital rolodex, but a real information manager) written in Ruby. It's based on a product called InfoSelect (aka Tornado back in the DOS days). He's far from finished, but the mechanisms he uses for organizing information is sound. - Rich Kilmer took the stage again and talked about Alph, a framework in Ruby for interfacing with Flash applicationsEssentially what this allows is a flash application running in a web browser to control a Ruby application on the server. Macromedia has a product called Flex which does something similar, but costs $15K; Alph, on the other hand, is free. Rich gave a demo of Alph last year during one of his talks; now it's almost a year later and he's got Alph released and ready for the world to use). - After the first day of the conference a number of us stayed late and hung out in the hotel lobby to hear about the history of Smalltalk from Charles Perkins, who apparently had known the original Smalltalk developers from Xerox Parc Place when he was a graduate student; he later went on to work for Xerox (though unfortunately right around the time that the interesting people were leaving). He also filled us in on the interesting history of Java, why it was controversial and why it was successful, as well as his [small or perhaps not-so-small] contribution to its history. - Patrick May discussed Narf, a framework in Ruby for creating web applications that are easily unit-testable. Narf makes use of a concept called "Narflates", which abstract the html from the data contained in the web page; this allows the unit test to check the data, not the presentation. Patrick had previously talked about Narf two years ago in Seattle; this year he discussed some of Narf's evolution and Web::Wiki, a sample application written using Narf. The most interesting characteristic of Web::Wiki is the concept of a "tarpit," which he uses to thwart the efforts of spammers. Known spammers get put on a list which gives them access to a copy of the wiki that gets wiped clean each night; this gives the illusion that Patrick himself has personally "fixed" all the pages by hand. - James Britt discussed ruby-doc.org, a website dedicated to the documentation of Ruby and related libraries. He discussed its evolution and future directions. One of the problems he faces is that the available documentation is difficult to sort through and find; he plans to use documentation metadata to make the organization of information simpler. - David Hansson talked about "Ruby on Rails", a simple framework in Ruby that is intended to be "just enough to make the creation of database-backed web applications tolerable." His philosophy is to find an 80% solution that only takes 20% of the time; other developers can fill in the holes. He also believes that only as a newcomer to Ruby was he capable of creating this framework, as only a newcomer is still annoyed enough by the difficulties of what Ruby provides (specifically, in terms of web development) to create something better. - Jim Weirich gave a talk on Rubygems, Ruby's packaging system that is designed to be the basis for something not unlike CPAN. He talked about using and installing gems, as well as the process of creating them. Rubygems was a project started at the Ruby conference in Austin last year by a group of programmers hanging out at the back of a bar with their laptops. - Koichi Sasada gave a wonderful presentation of YARV, an experimental VM for Ruby that he is using for his doctoral research. The intent of the VM is to be the first step toward building a parallel interpreter. YARV uses Matz's interpreter as a library for handling memory management, but differs from Matz's interpreter in that it uses wordcode instead of traversing the AST; this results in an order of magnitude improvement in performance. Future work includes an AOT (ahead-of-time) compiler to C (which should improve performance by an additional order of magnitude) and a JIT compiler. - Nathaniel Talbott presented "test/unit2," the successor to his test/unit framework. He discussed some of the mistakes he made with the original framework and some of the improvements he is making with the new one. For example, instead of writing the unit tests using classes (Java-style) he uses a declarative style using blocks. This change of representation allows metadata to be easily attached to each test, which can be used for, among other things, generating documentation from the tests and documenting dependencies between tests. - Shashank Date gave a short surprise presentation about a Ruby webzine that will be started on artima.com. They need authors, editors, a review board, and someone to sponsor/advertise. - Brad Cox (known as the creator of Objective C) gave the keynote address. He talked about his experience in object-oriented programming, then divided his talk into two parts. The first part was a history of Objective C itself and a very short overview of how the Objective C compiler works (it's very simple, and started out as a pre-compiler to C, much like C++ was originally, except Objective C has a much simpler object model). The second part of his talk was on where the software industry needs to be going in the future in order to have greater growth. He discussed the hardware industry, in which there are many pieces (and those pieces are themselves made of components) in order to produce a single piece of hardware -- the end result is a large economy that has resulted from this need for hardware. He claimed that there is no equivalent in the software industry, hence the reason the software industry has arithmetic growth, instead of the geometric growth that the hardware industry has. His solution was a usage-based system backed technologically by encryption. One person in the audience (who used to work for another group in the financial industry) asked how Dr. Cox thought about software used to provide a service (much like what ATD does); Dr. Cox was very against the idea and dismissed it very quickly. - John Knight gave a short presentation on Rubyx, a Linux distribution based on Ruby (supposedly similar to how Gentoo is based on Python). He was originally going to give a much longer presentation, I think, but had not yet arrived when he was scheduled to give his talk. He gave this short talk just to let us know that Rubyx exists and to point us to its website (www.rubyx.org). - Daniel Berger gave a tutorial on several Ruby libraries for Win32. He talked about win32-service, a library for working with Services (the Win32 equivalent of a daemon) and win32-eventlog, a library for reading from and writing to the event log (equivalent to syslog on *nix). He also covered win32-popen and mentioned that there are several other libraries being developed for interfacing with Win32 from Ruby. - Jamis Buck talked about Copland, an inversion of control library for Ruby. What this gives the programmer is a system for initializing components without the components having any knowledge of where that initialization is coming from. He claims it's not appropriate for small projects, but is very helpful in large projects. He took a small sample application and converted it to use Copland. He also briefly talked about some of Copland's other features, such as interceptors (similar to AOP), as well as future directions for the project. One problem with Copland that was mentioned is that it is a port of a similar project in Java, and still retains many Java-isms that aren't appropriate in Ruby; in the future, it might be interesting to see what Copland looks like after it takes Ruby's dynamic nature into account. - The last talk was from Gordon James Miller. He talked about his experience with using Ruby to generate code for C++ using ERB and ReXML. The code that was generated was for a distributed system, so the code generator and the generated code wasn't (on the surface) too different from IDL. Where it differed, though, is that his system was designed to handle an environment with flaky (at best) communications; 3 second ping times and 90% packet loss were not uncommon. He also discussed benefits and difficulties of using Ruby for this task when there are no other Ruby programmers around to maintain the code.