Google Wave 20/20: Product, Protocol, Platform

  • Uploaded by: wuzziwug
  • 0
  • 0
  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Google Wave 20/20: Product, Protocol, Platform as PDF for free.

More details

  • Words: 1,454
  • Pages: 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 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

Related Documents


More Documents from "wuzziwug"