Friday, June 26, 2009

Wave client-server protocol

There were some discussion about client-server protocol at wave office hour.
On, there is a white paper about wave client-server protocol.
However, the white paper is a high level view of what the protocol should look like, it does not yet specify what the protocol should look like.

I think client-server protocol may be important to help people who build other server and client to maintain compatibility. This is especially important for desktop client. If email protocol was not standardized, Outlook and Thunderbird email client may only talk to only certain email servers. Hopefully, a client-server protocol standard may emerge.

Flex Builder 4 Beta is out

Flex Builder 4 beta is out for at least a week now. I like Flex Builder 4 more than Flash Builder 4. I wish they have kept the original name. In the enterprise world, it is much better in the enterprise world to call it Flex than Flash...

Tuesday, June 23, 2009

Google launches Wave sample Gallery


Wednesday, June 17, 2009

Presented Wave Actionscript API at first Bay Area Google Wave meetup

Last Monday was the first Bay Area Google Wave meetup. I have presented the wave-as-client (the first Wave Actionscript Library) with a photo browser demo. When one party scroll to a different photo, the other party's photo browser will scroll to that photo too. :) Hopefully people enjoy the demo.

Monday, June 15, 2009

Google Wave and Race Condition

Character-level protocol

Google wave is the new platform for real-time communication that allows both parties to edit the same wavlet (you can think of wavelet as conversation or document). If you are a software developer, you might be thinking about how Wave is going to deal with race condition. I just found a good video from a Google engineer David Wang that might help clarify how wave can avoid race condition on protocol level when both sides are transmitting changes. Bascially, the protocol will specify the changes at the character level.

Race condition on Wave Gadget
That said, it seems that Wave Gadget may run into race condition.
If one participant write "gamestate"=1 into wave gadget state and the other party write "gamestate"=5. Then whoever writes later will overwrite the other's change.

To make it more concrete:
Let's say that both party check state to see if a host for the game is selected. If not, claim to be host and save it to state.
  1. party1 calls wave.getState() to and sees that "gamehost" property is absent. So gamehost is not selected.
  2. party2 calls wave.getState() to and sees that "gamehost" property is absent. So gamehost is not selected.
  3. party1 go ahead and claim to be gamehost and write the state "gamehost=party1" (by calling wave.getState().submitDelta())
  4. party2 go ahead and claim to be gamehost and write the state "gamehost=party2"
  5. Now both side think they are the host. Whoever writes last will overwrite the other side's state.
Hopefully there will be better control about race condition in Wave Gadget later.

First Bay Area Google Wave Meetup Tonight

Lawrence Wong has organized a new Google Wave Meetup for Silicon Valley and San Francisco Bay Area. If you are interested in Wave and you are local to this meetup, you should come check this out.

Monday, June 8, 2009

Google Wave Actionscript API - v0.3 asDoc posted

Posted v0.3's asDoc at this location:

Google Wave Actionscript API - v0.3 released

Implemented wave.getParticipants() and wave.getParticipantById().
All methods are implemented.

Downloaded the source code and swc at

asDoc with Flex Builder

Martin R├Ądlinger has a good article about how to setup asDoc right from Eclipse or Flex Builder. The instruction works great. The only thing you have to be careful is that the arguments should be "-window-tile" instead of "- window-title" (look at the screenshot that shows the argument and you'll understand what I mean).

iPhone, Android, and Palm Pre units sold

Here are a few items found from the Internet about how many units was sold for each of the 3 phones.

Stat as of 2009/06/08

Number of units

Number of apps


40million (June 2009, before new iphone launches. It will surely increases after new iPhone launches.)

1st generation: 146k sold in first weekend

3g version: 1m sold in first weekend

50000 (June 2009)


1m g1 sold on t-mobile in Mar or Apr 09 according to one blog (approximately 5 or 6 months after launch).

According to another blog, 1m g1 is sold in 71 days (faster than 1st generation iphone)

Palm pre

Estimate 50k sold in first weekend (June 8, 2009)


Source: Iphone and Palm Pre figures: MG Siegler

Source: android data:

Sunday, June 7, 2009

Google Wave Actionscript API - v0.2 out

Most of the major functionalities are working. It is tested on Wave developer sandbox. Yes, I get the sandbox access. :)

Saturday, June 6, 2009

Google Wave Actionscript API - status update

Most of the major functionalities should work. Will fix a couple more issue on Sunday.

Thursday, June 4, 2009

Google Wave Actionscript API

I have started creating an Actionscript library for Google Wave Gadget API. If everything goes as planned, one should be able to create gadgets that contain wave-enabled Flex/Flash using this library.
It is hosted at
It is not yet in any type of working version as it is not tested.

Tuesday, June 2, 2009

Google Wave API Introduction

What type of things you can do beyond the standard Wave:

Developers can use the Wave API to extend the functionalities. Wave API allow us to implement new application that runs on Wave server (ie. Robot api), or client-side application that runs within a wave (ie. Gadget api). It also allows external website to add Wave functionalities to their site (ie. Embed api).

3 types of Wave API

  1. Robot
  2. Gadget
  3. Embed


Robot api allows developer to build an automated program that fills the role of a Wave participant.

API Language: Java, Python

The example of what this api can do include:

Translation robot: robot that automatically translates the text.

Link robot: robot that automatically change the typed link into a hyperlink.


Gadgets are client-side program that can be run inside a wave. Wave itself is a gadget container.

API language: javascript

example: putting a voting gadget within the conversation to allow people to vote on a particular choice.


Embed api allows another web site to embed Wave on it. Right now, this is still quite limited. It basically contains an iframe where you can place a WavePanel in it. Then the website can add participant, add reply, or load an existing conversation.

API language: javascript

Google Wave Introduction

Google Wave is a new communication and collaboration tool.

It is a

  • Platform - opensource product that enterprise can host themselves
  • Protocol
  • API
  • Hosted service
Watch this video and be amazed.