Google Wave 20/20: Product, Protocol, Platform

20
Google Confidential and Proprietary 1 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.

description

These slides introduce the various facets of Google Wave. They were originally delivered as a talk in the 20/20 style (20 slides, 20 seconds each) at the Adobe Platform Users Group Sydney. The slides have been captioned with what was approximately said.

Transcript of Google Wave 20/20: Product, Protocol, Platform

Page 1: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 1

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.

Page 2: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 2

Email 2.0?

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.

Page 3: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 3

Nested Trees of Blips

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 it- you can edit it yourself.

Page 4: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 4

Playback

Private Replies

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.

Page 5: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 5

Late CCs!

Typos!Long Nested Threads!

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 40-

message long thread and trying to interpret the flow of conversation.

Page 6: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 6

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.

Page 7: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 7

Operational Transforms*

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.

Page 8: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 8

Data Model

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.

Page 9: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 9

Client/Server

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.

Page 10: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 10

Developer Platform

HTTP

Plugin

VisualREST | RPC

Google data APIsAdwords APIGeocoding API

Google Maps APIGoogle Visualization APIGoogle Charts APIGoogle Web Elements

OpenSocial GadgetsSpreadsheets GadgetsWave Gadgets/Robots

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.

Page 11: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 11

Embed API

Robots Gadgets

Extensions APIs

And for the developers…

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.

Page 12: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 12

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

Page 13: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 13

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()

Smiley Sample

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.

Page 14: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 14

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

Page 15: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 15

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

Page 16: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 16

Gadget

Shared State

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.

state delta

state callback

Page 17: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 17

Clicky Sample

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.

<Module><ModulePrefs title="State Example" height="120"> <Require feature="wave" /></ModulePrefs><Content type="html"><![CDATA[<input type=button id="button" value="Click Me!" onClick="buttonClicked()"><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); </script> ]]> </Content> </Module>

Page 18: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 18

Gadgets

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.

Page 19: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 19

Playback

Gadgets+Gadgets Gadgets+Blips

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.

Page 20: Google Wave 20/20: Product, Protocol, Platform

Google Confidential and Proprietary 20

Business

Pleasure

Education

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!