Вы находитесь на странице: 1из 20

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 it-
you 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 40-
message 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

HTTP Visual
REST | RPC Google Maps API
Google Visualization API
Google data APIs
Google Charts API
Adwords API
Google Web Elements

Plugin
Geocoding API

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 Embed API


developers…

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.

<Module>
Clicky Sample <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>

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

Вам также может понравиться