Monday, July 20, 2009

Wave Hackathon sessions note

Wave Hackathon in Bay Area today, Thanks to William and many other people (sorry, I do not know all the names) who took the notes during the session, there is a very nice session minutes. I really enjoy the collaborative editing that was happening on the real-time.

For those who do not have wave sandbox account, here is the notes taking by William and many others.

Wave Hackathon - live from Googleplex.

Agenda can be found here

Wave minutes:

Message from Lars (someone check that spelling):

100 thousand beta users by

Highlight extensions by Sept 30

Looking for more ambitious extensions and usage

Make extensions feel right, flow properly.

Building a gallery like experience to find extensions.

Application store planned, monetize extensions (no more info at this time)

David Byttow on Wave API

(Are the slides available somewhere?)

Wave intro (why build on Google wave?)

Real time communication.

Workflow focused on bridging with communication

Business opportunities

Why are we here?

Windows success? From developers

Developers key to long term success


Exciting technology

solve problems in workflow

Increases productivity

life to static pages

foundation with vast range


Place a wave on a web page.

Transparent: can even embed wave without looking like wave.

Done via javascript


change color, styling, etc

have full access to wave

respond to events on wave

Made in Java or Python, on Google App Engine

This is temporary, will be opened up later

In development: Ruby API, PHP, perl coming.

q: when gadget broadcast state, can robot get event?

a: yes. robot have more authority than gadget.

Demo of Smiley robot: replaced ":)" and ":(" with unicode chars

Called "yasr": yet another smiley robot

Demo of Swedish Chef (


Robot to execute python code.

set wave.result to function output, monty makes a blip.


Addie (calculator)

Facty (fact checking bot)

Spammy (spam deleter)

Arnie (terminates other bots)

Publishy (publish content to external db)

Maily (email integration)

Extensions (new)

Shrink wrap your gadgets and robots!

Extend client with third party apps

Richer experience

Share and deploy apps


Debug-> Extensions->Add extension installer

Insert via xml url.

Puzzle , can be put in a wave and sent to others.

Install button.



XML based

Hooks (listeners)

New wave

Toolbar menus

(not implemented yet)

Keyboard shortcuts


regular expressions


Insert gadget

Add participant

Create new wave

Apply annotation

Q: do extensions survive in the embedded UI?



Java robot API (open source

Python robot api updated!

java api more advanced, google has updated python api to be closer now.

Markup XHTML supported in blips



Read only anonymous access (stretch goal)

pending scalability issues

Extend UI configuration

Display toolbar, participant list, inbox, ...

More styling options


UI improvements

dropdown menu on hover

speed up rendering

right now, there is a 1-2s delay before it renders

OpenSocial support

retrieve friends, etc

DiffOnOpen/Playback states

GWT-based gadgets


New wire protocol (v0.2)

JSON based, see python code (?)

Will be published later for feedback

Bring parity to Java+Python APIs

Internal speed improvement for AppEngine robots

Robot gateway, OpenSocial REST access

Robot access to OAUTH controlled resources

Multiple wave access

Sunset (get rid of) robot CRON, in favor of direct access to wave servers w/ authentication

Gateway support: improve the current "tweety" type of access to support outside addresses of the form ""


Enable users to easily discover extension installers

Directory of gadgets/robots/extensions

Extention Marketplace

Enable user management of their installed extensions (uninstaller)

Expand API from feedback

Marcel Prasetya ( - Robot Details


read/write wave content in which it participates

General classes

content assist, completey, smiley

data synchronization: buggy, tweety

multi-wave applications: polly, blogbot

conversational: eliza

Currently, robots only run on AppEngine


Client->Wave server->linky

Client->Wave server->spelly

Client->Wave server->Robot proxy->(JSON HTTP)->robot


Wavelet self added

Blip submitted

Document changed



Wavelet append blip

wavelet set title

document insert/delete


View objects

Wave is xml doc with text and non-text content

Abstraction layer:

Text View

Form View

Gadget view

Demo: tweetz robot: simplified demo of tweety

no login form, uses hard-coded uname/pass

fetches tweets on wavelet_self_added

submit tweet on blip_submitted

Build a robot (using java):

Get app id (

download client library

Devel using eclipse w/ google appengine plugin

Eclipse project "web application" type

Place libraries in lib/ directory of project

import them into project workspace (might need to refresh project after adding libs, before import)

Create config file: /_wave/capabilities.xml

defines events to trigger

Extend class on AbstractRobotServlet

override processEvents(RobotMessageBundle) func

Create a new blip: bundle.getWavelet().appendBlip().getDocument().append("Hello, world!");

Getting blips: for(Event e : bundle.getBlipSubmitedEvents()) {

extention.xml: Defines extentions, such as UI plugins.

Deploy the robot to App Engine

Click eclipse AppEngine icon from google eclipse plugin



Talk about moderation, whose in charge. Who's in control?

Moderation ability, control a wave.

Comment only mode.

Still thinking about it.

Built initially completely open to get it working, easily can add moderation later

From protocol point of view, who's in charge, moderation

Still very early, see wave protocol forum to give feedback on it

Will talk about it tomorrow on federation day

How handle spam?

Allen: Won't allow spam on wave. ( mass laughter at this point )

Expect to always have some level of abuse.

Noone can add you to a wave without them being in your address book.

Content analysis.

All waves are signed at a provider level.

Some discussion on user level signing, long term.

Again, ask in federation forum

Problem of others editing your waves

Possible solutions

specify "no bots"

Not sure yet

Grainular control?

Only stuff available right now is what the client can do.

Possible to do with robots.

Concurrency issues with gadgets?

Two clients click a button to increment a value, last person to click wins

Planned support for number operations (increment, ..), key/value operations

Currently, only text based operations (replace, append, ...)

Situation with connection limit (proxy->frontend)

No limits on front end?

DOS protections

User opens several [waves/pages of waves] on an account, runs out of connections?

2 channels per page

...No idea...

Robot works with 1 wave. What about robots that can use multiple waves. Robot act on a user's behalf

User might authenticate a robot as themself, do work on all player waves.

will have OpenSocial REST & RPC

will have oauth

Want control over what robots can do to own waves, or on behalf of you

Multiple angles for permissions

"Settings" wave, overall robot interaction

Control, and turn off extentions via setty

concept: "do not use spelly on wave that matches a seach"

Minimum bitrate required

Right now: pretty hight

Not tuned yet

Work on mobile client will improve desktop client as well

Gadget performance

RPCs: very fast, POST message

Loading gadget: initial iframe load issue, 1-2 seconds

Speed being worked on

reason is iframe loading from 3rd party or gmodule

Forwarding waves

Add someone to a wave

Copy wave to a new wave


More control permission to owner

Removing participants feature does not exist. (also, robot cannot remove people right now)

Concern of someone adding too many robots, too many blips

No robot limit

Yes. (it is a concern)

"Who are you waving with, do you trust them"

Long term: control over the wave. Who can add what (block new participants from adding more)

There is a rate limit. Spammy robots get blacklisted if they go insane.

Robots are passive, a crashed robot will not affect anything (aside from the lack of a robot)

Given a thousand-robot wave, don't open that wave.

Enough APIs to create your own wave client (related: running own wave server)

Yes, of course

Still working on it

Ask on federation day.

Currently: only can embed a wave

Later: embed other components

Participant limit?

Cannot handle too many "yet"

Talking about solutions

Will need to be a hard limit

Again, discuss on wave protocol forum

Mobile client, supported now?

Existing client built using GWT

slowly being worked on in background

not a priority right now

Can a gadget talk directly to a robot?

Gadget updates state, robot responds to it

(external?) request: call robot directly (not a good choice, storage and playback bypassed)

Send message directly to robot


Working on more moderation abilities

"Commenter" role important: people can only comment, cant edit original.

Looking at use cases before implementing

How to implement a group, group level access?

Group functionality is limited right now

Working to expand it

Groupy the bot exists, written at a prior hackathon

Location based blips (standalone, not added by gadget)?

Interesting idea

HTML5 has gps/location API?

Announce something when near something?

Mail integration?

Yep, write a mail gateway

Tough problem.

Enough API internally right now

No time before launch

Talk to waveteam if you want to make one.

Access wave client with XMPP client?

Ask at federation protocol

Google Voice integration?

Nothing announced

interesting use cases

Robot protocol, simple protocol


proprietary from Google

fast, compact

Developers use client interface? (???)

Dont think so

implementation detail

Google wave server open source?

Working to make it open source

Will take time to disentangle it from google production stuff

"Tomorrow [federation day] will be very exciting"

White paper? Implementation documentation? Internal timelines?

Question for tomorrow

Robots running on other 3 servers (?)

Different client interface

"It's your wave server"

Robot is mechanism to update content of wave xml

Up to the client how to render a robot.

Robot APIs "should" be made similar

Cirtifying robots/extentions

Nothing to announce right now.

Sept 30: adding real live users

View the backing xml to render a wave in the client?

Robots don't have access right now

Will be opened up later.

Right now: a way to look at wave content for debugging

hotkey or something, combo of 3 keys

dont remember the combo

Used to back up the content?


Robot to backup the data, snapshot of xml

no way to get it "back in" to the wave

If build a client: 2 ways of backend. Bypass editor, or use editor. API to editor?

For google editor: working on modularizing it. Would love to open source it.

Very complex

Nothing to announce right now.

Super important

Haven't had time to open source client.

(Let the hacking begin!)

Requires sandbox account during dev preview

Q: we have to login to wave account first before we browse to the site with wave?

Account will not be required for viewing


Embed on site


Wave CMS



Real time updates

participant support

state management

revision history


Google Gadget Editor

Public Location:

Google App Engine


Adding gadget to wave

Debug menu: Debug->Extentions->Add Gadget, paste url in.

Toolbar menu

Robots API - robot can add gadget


Automatic height adjustment

requires feature: dynamic-height

Calls to gadgets.window.adjustHeight()

(see docs)

Safari 3 gadget flaky right now

Use FireFox 3, or Safari 4

try not to visualize changes before state changes are reflected on the client

Dont submit deltas, render on state change

Develop with playback in mind



server-authoritative chess (robots + gadgets)

Collaborative TODO list


embedded browser (collaborative surfing)


Robotic Butlers :)


Client->Server->Robot Proxy->(JSON HTTP)->Robot on App Engine

Robots are participants, can do anything a user can do.

1 comment:

  1. Did you know that you can create short urls with Shortest and receive money for every click on your shortened urls.