Google Wave is a project that was born right here in our Google Sydney office, created by the engineers that made Google Maps. It's now in early preview stage, and everyone's wondering what it is and how they can use it to make their world a better place. I'm going to explain Wave in terms of its three parts - the product, protocol, and platform, and hopefully give you ideas about how you can use Wave.
Google Confidential and Proprietary
1
Let's start with the product. Google Wave is a communication and collaboration tool. It's been called "Email 2.0" or "what email would look like if invented today." If you just look at the main screen after you're logged in, it kind of even looks like a remixed Gmail.
Email 2.0?
Google Confidential and Proprietary
2
But that first impression is deceptive - it's much more than that. Google Wave lets you create conversations with your contacts, and create a nested tree of replies in those conversations. Those conversations are called waves, and the messages inside them are called blips. If you decide that you don't like the contents of a blip - no matter who created ityou can edit it yourself.
Nested Trees of Blips
Google Confidential and Proprietary
3
If you want to fork the conversation, then you can create a private reply. At any point, you can play back the conversation and see when people and blips were added. It's revision history made easy, and fun. So, yes, people can "vandalize" what you've written - but you can always hold them accountable for their change.
Private Replies
Playback
Google Confidential and Proprietary
4
This doesn't seem that revolutionary, but it actually solves many of the problems that email poses. You don't have to worry about making stupid unretractable typos, trying to figure out who is replying to what where, or getting CCed onto a 40message long thread and trying to interpret the flow of conversation.
Typos!
Long Nested Threads!
Late CCs! Google Confidential and Proprietary
5
So, yes, Google Wave can be thought of as Email 2.0. And just like anyone can set up an SMTP server and send messages across email servers, our goal is for anyone to be able to set up a Wave server, and share Waves across servers. We don't want Google Wave to be the only wave server out there -- we need “competitors” if we want Wave to really take off.
Google Confidential and Proprietary
6
In order to federate Wave, we need to document our protocol and open-source the essential components. The first part we open-sourced was the operational transforms code, which is what we use to enable real-time collaboration of participants. It comes down to insert &delete operations, and a composition of them across clients, so that everyone sees the same thing in the end.
Operational Transforms*
Google Confidential and Proprietary
7
Then we opened the data model specification, which defines the structure of the XML documents that we perform the operational transforms on. Our documents define conversations, since Wave is designed with email-like conversations in mind. But, someone could just as well use our OT protocol in combination with their own data model, like one that described audio clips, and create something like a real-time audio editing client.
Data Model
Google Confidential and Proprietary
8
Now, we're working on open-sourcing the client/server protocol for retrieving and sending Wave operations and rendering them on the client. So far, all we have released is a not-so-rich command-line client, but some developers have started writing their own nice looking clients. Hopefully, we can eventually open-source enough code that people can have a consistent user experience across Wave clients on different servers.
Client/Server
Google Confidential and Proprietary
9
But now, my favorite part: the developer platform. At Google, we know the power of making extensible platforms, as we've seen how developers have added value to products like iGoogle and Maps in ways that we could have never imagined. That may be why we now have more than 60 APIs.
Developer Platform
Visual
HTTP REST | RPC Google data APIs Adwords API Geocoding API
Plugin
Google Maps API Google Visualization API Google Charts API Google Web Elements
OpenSocial Gadgets Spreadsheets Gadgets Wave Gadgets/Robots Google Confidential and Proprietary
10
Our Wave developer offerings include an Embed API, which lets you embed an interactive Wave on your own webpage, and an extensions API, which lets you create robot participants and collaborative gadgets that can be added to Waves. So, you can either take the content out of Wave, or you can put your own content into Wave.
And for the developers…
Embed API
Extensions APIs Robots
Gadgets
Google Confidential and Proprietary
11
A robot is basically an event listener on a Wave, reacting to events like the user typing by doing operations like adding blips, editing text, or inserting gadgets. This robot reacts to the blip submitted event, finds locations in the text, then responds with operations to annotate those locations as hyperlinks.
Robots events
operations
Google Confidential and Proprietary
12
This sample code is for “Yet another smiley robot”, and uses the Python SDK. It registers to listen to the DOCUMENT_CHANGED event, receives the text of the changed blip, searches for the smiley face, and replaces it with a smiley-er smiley face.
Smiley Sample
from waveapi import events from waveapi import robot
def OnBlipSubmitted(properties, context): blip = context.GetBlipById(properties['blipId']) contents = blip.GetDocument().GetText() contents = contents.replace(':(', unichr(0x2639)) # happy contents = contents.replace(':)', unichr(0x263A)) # sad blip.GetDocument().SetText(contents)
if __name__ == '__main__': smiley = robot.Robot('Smiley') smiley.RegisterHandler( events.DOCUMENT_CHANGED, OnDocumentChanged) smiley.Run()
Google Confidential and Proprietary
13
This API can be used to make a variety of useful and fun robots. The Amazon bot detects products in your messages, the Norton bot checks the safety of links, the Row-of-Four bot plays a game against you, the RSSy bot subscribes to feeds, and the WordPress and Bloggy bots help you export your waves to other platforms.
An Army of Robots Google Confidential and Proprietary
14
The cool thing about Robots in Wave, versus other places like IRC or AIM clients, is that they can work together..even if they weren't meant to. Monty is a bot that runs Python code, Syntaxy is a bot that syntax highlights code. They were developed independently, but they can be used together for collaborative syntax-highlighted Python coding.
Collaborative Robots
Google Confidential and Proprietary
15
A Wave gadget is basically a mini-webpage with a shared state that can be modified and retrieved by all the participants. When the participant interacts, they send state deltas to the server, and then the gadgets in each open client get a state callback with the changed state. This shared state is really just a hash map stored in the blip XML.
Gadget state delta
state callback
Shared State
Google Confidential and Proprietary
16
This sample code is for the ‘Click me’ sample, an exciting collaborative clicking gadget. When the button is clicked, a delta with the new click count is sent to the server. When the state callback is triggered, the button renders the new count.
Clicky Sample
<Module> <ModulePrefs title="State Example" height="120"> <script> var button = document.getElementById('button'); function buttonClicked() { var value = parseInt(wave.getState().get('count', '0')); wave.getState().submitDelta({'count': value + 1}); } function stateUpdated() { if(!wave.getState().get('count')) { button.value = "Click me: 0" } else { button.value = "Click me: " + wave.getState().get('count'); } } wave.setStateCallback(stateUpdated); ]]> Google Confidential and Proprietary
17
This simple mechanism can be used to create a wide array of gadgets – for drawing, brainstorming, playing games, learning flashcards, conducting polls, planning a trip, embedding video messages, and much more. The Gadgets API turns Wave into more than just textual communication, into a world of visual communication.
Gadgets
Google Confidential and Proprietary
18
The cool thing about all these gadgets is that they are just a part of a larger collaborative document in Wave. So you can use gadgets in conjunction with other gadgets, converse below the gadgets about what you're making, and watch how the gadgets were created in playback.
Gadgets+Gadgets
Gadgets+Blips
Playback
Google Confidential and Proprietary
19
Wave can be useful across the three main parts of our life - business, pleasure, and education. You can use it to collaborate on design documents with your team or even code together, you can use it to plan a party or play games with your friends living far away, you can use it to make studying more fun and productive. And, well, you can do a hell of a lot more than that. Try it out and see for yourself!
Business
Education
Pleasure
Google Confidential and Proprietary
20