Rave: Back at it

Last year, I started working on a JRuby port of the Google Wave robot API called Rave. I took a bit of a hiatus from working on Rave, since the Google Wave API was a bit unstable, and I had been spinning my wheels trying to solve some things that turned out to be unsolvable... Anyway, the Wave API has stabilized a bit, so I'm back at it. And I have some help - a couple of people have been contributing code to the project. Which is, by the way, awesome.

Anyway, I'll post more on Rave pretty soon. In the mean time, check it out on Github, for more info. Particularly the README.

Vendor Jars

I'm hanging out at JRubyConf today, and I got all inspired to contribute something to the community. So I decided to put together a little plugin for auto-loading jars into a JRuby on Rails project. One of the key advantages of using JRuby instead of MRI is the availability of all of the mature Java libraries. In JRuby, you have the ability to easily wrap those libraries and access them directly from your Ruby code. The process is pretty easy, you just require each jar that you want to use, just like you'd require a gem, or another .rb file. But there is no consistent pattern for this -- no convention for where to place those files. What I wanted was to have a jars folder under vendor where you could just drop jars and have them automatically required in your app. The end result is a ridiculously simple plugin I've imaginatively called Vendor Jars.

To install it, just cd to the top-level folder of your rails app and run

Taking a Break from Rave

I've had a frustrating couple of weeks working on Rave. Rave is a Ruby port of the Python API for building robots in Google Wave. Wave is pretty unstable, and so I keep running into problems where I'll spend hours debugging my code only to determine that it's a problem with Wave. So I'm going to set it aside for a little while. In about a month, Google is going to release new versions of everything, and start letting the general public sign up for Wave accounts. I assume that they are planning on having a more stable version of Wave at that point. So, I'll revisit it then. As it stands, Rave is in a pretty good spot for building a lot of types of robots. The two big things I've been fighting with recently are that the capabilities versioning doesn't work correctly (so Wave caches your robot's capabilities and you can't add or remove capabilities in new versions), and cron events don't work. I'll revisit both of those in October once a more stable version of Wave is out. Until then, I need to stop spinning my wheels and start focusing on some side projects that I can make some actual progress on.

Rave: Google Wave Robots in Ruby

Google Wave
There's been a lot of talk about Google Wave lately, so what's Wave all about? Wave is a protocol, that extends XMPP. In practice, it contains elements of email, instant messaging and threaded discussion. Oh, and document management. Yeah, it seems to do just about everything. The problem with that is that it makes it really hard to describe. It always sounds like it is trying to be everything - to solve every problem. But really, it's all about online collaborative communication. Here, take a look at the demo from the Google I/O keynote this year. It makes more sense once you've seen it in action.


We recently open-sourced Moonstone, our JRuby wrapper around Lucene, the Java search engine toolkit. Moonstone is simple, and easy to use - it lets you put together a powerful search engine quickly. It gives you the full capabilities of Lucene, but replaces the Java-isms with a more Ruby-ish syntax. I wanted to take a quick minute to run through the basics: