Google Wave

It has been almost two weeks since Google Wave was announced, so I thought I’d write a little about my thoughts on the subject. I have actually waited with this blog post because I haven’t been exactly sure what I think about it yet. Of course, I’m still not – but hopefully I will be able to get some of my thoughts collected by writing this post.

So let me start with the basics. Google Wave is a combination of email, instant messaging, forums, document creation and much more. The core concept is the wave, which in turn is comprised of blips. The blips are what actually contains content. Blips are threaded in terms of each other. The most different thing about Wave is probably that a wave is persistent and centralized. The model assumes that there is only one instance of each wave (although they can be federated and cached temporarily).

In general, there are three kinds of actors in a wave system. The first one is the human participants. You have a list of contacts and so on, that you can use to include people in a wave. The default settings make it possible for all participants to see all blips in a wave, but you can set this on a blip-by-blip basis. The second kind of actor is the gadget. A gadget is basically a piece of functionality that gets inserted into the blip directly. This is written in JavaScript and is as such a client side functionality. The final kind of actor is the robot, which is basically a computerized participant that can do more or less the same things as a human participant can do.

The robots are interesting, because most of the functionality in Wave is actually implemented in terms of robots. And if you want to build more interesting systems on top of Wave, the robots will be the way to achieve this. For the moment, you can only deploy robots on Google AppEngine – we have been told that this will change, though.

So how does a Robot work? Conceptually, a robot will get a bundle of events that it can react to by doing different things on a simple object model that represents the wave/blip in question. It’s not much harder than that. The available events are actually pretty few right now, including changes of participants, when a new blip is submitted, when a blip is created or has its title changed, when a blip is deleted and when a document is changed. Some of these events doesn’t happen often, while the document changed is generated on every new character. The actual protocol does bundling and so on, so you won’t necessarily run the robot on every character.

The actual wire protocol is built on top of JSON – it hasn’t actually been fully documented yet, the reason being that it’s not totally stable. At the moment it also looks like the protocol is pretty chatty, and that for most real world scenarios, you will want to have quite a few robots in most conversations, which could potentially lead to a large amount of traffic to the robots.

So, what are my impressions? I think it’s definitely cool. I think there is absolutely the potential for Wave to be a new platform that could replace many of the existing ones. Of course, it is still very early days. This means that the functionality and protocols are subject to change. I’m also looking forward to when the implementations will be open sourced so it will be easy to set up your own instance.

At the same time, my initial experience was that Wave easily became very confusing, especially when having several conversations going. On the other hand the Wave team reported the same, but also noted that after they got used to working with the system they learned new ways to handle it. I guess the same will happen for me, after some time of usage.

In summary: Wave is cool. It will be the platform for many applications, and the platform has great potential. It’s going to be interesting.

Java in the Google Cloud event in London

Me and Chris Read will talk at an event at Skills Matter in London May 11th. We will be talking about different aspects surrounding the release of Google App Engine support for Java.

You can find the registration page here:

JRuby Google Tech talk online

The talk I gave at Google last week is now online: