man: Ladies and gentlemen,
please welcome Vice President, Engineering, Vic Gundotra.
[cheers and applause]
Gundotra: Well, good morning, everyone.
Welcome to day two of Google I/O.
I hope you all had a great time yesterday.
I hope you enjoyed your sessions,
and I hope you enjoyed those Android phones.
[audience whoos]
[cheers and applause]
Yesterday, we promised you a surprise for this morning.
And this morning, Google will surprise you.
We are about to unveil
a personal communication and collaboration tool
in a very early form.
We decided to do this at this forum
for a couple of reasons.
This unbelievable product,
one that I'm very, very excited about,
will be open-sourced.
It's open-sourced for many reasons.
Not only do we want to contribute to the Internet,
but frankly, we need developers
to help us complete this product,
and we need your support.
So we hope after you see this
you're as excited about it as we are.
And number two,
we decided to unveil this product
in its early form at this conference
because it is an unbelievable, powerful demonstration
of what is possible in the browser.
I guarantee you that over the next hour and a half,
as you see this product, you will forget
that you are looking at the browser.
And I want you to repeat after me.
"I am looking at an HTML 5 app.
I am looking at what's possible in the browser."
And I hope you are as excited and delighted as I was
when I first saw the thinking behind this product.
Now, it shouldn't have surprised me
that this product would be magical.
After all, the engineering leadership
had already produced a magical product.
The engineering leadership behind what you're about to see
is the work of two brothers,
and an amazing engineering team with them.
Those two brothers are Lars and Jens Rasmussen.
You might remember those names,
because those were the same amazing people
that did another magical app called Maps--Google Maps.
And so you'll see what they've been working on
unveiled for the first time today.
So why don't we go ahead and get started?
Remember, this is an early developer preview
for this audience.
Everyone in this room will get accounts to give us feedback,
and we'll talk about that a little bit later.
We have your email addresses, so you will get those passwords
a little bit later on, likely tomorrow.
With that, let me just go ahead and get started.
Let me introduce Lars Rasmussen and Stephanie Hannon.
Thank you.
[cheers and applause]
Lars Rasmussen: Thank you.
Thank you. Thank you.
Thank you very much.
I shall wake up my laptop.
Good morning, everyone.
Thank you very much for coming early.
I know you've been here partying all night.
Uh, we're going to show a demo today
of a product that we've been working on
for a couple of years down in Sydney, Australia.
It's called Google Wave,
and it's a communication and collaborations tool
that we're launching later in the year.
Uh, like Vic said, it's a little unusual for us
to be showing it to the world this early.
The reason we're doing it is very simple.
We're starting a developer preview today.
You guys will all get accounts
on a sandbox build of the system.
You are the first outside of Google to see this,
and you'll be the first to get accounts on the system.
And we're doing that because as you will see from the demo,
Google Wave comes with a set of really nice APIs,
and we're hoping we can persuade you guys
to start building cool things with those APIs
while we're getting the product ready for launch,
which is going to happen later this year.
Because that way, when we do launch,
our users and your users can enjoy both Google Waves
and all the cool things that we hope you'll build
at the same time.
Let me introduce Stephanie Hannon.
She's quite possibly the best PM in the world.
[cheers and applause]
Hannon: [laughs]
Good morning, I/O.
Thank you, Vic, for the invitation to be here.
We couldn't imagine a better audience
to show our product to first.
Lars Rasmussen: I second that.
Hannon: Our presentation today is in three parts.
First, we're going to show you a demo of the product.
Second, we'll show you the APIs that Lars talked about.
You can use Waves to enhance your Web site
and you can build extensions to Wave itself.
Third, we'll show you that Wave is also a protocol.
We are very passionate about this being
an open system of communication.
We hope other people build Wave services
that interoperate with ours
so users have choice in their provider.
We affectionately call this the three Ps.
Product, platform, protocol.
And we'll talk about them all today.
Lars Rasmussen: Okay, so communication.
Um, email today is by far the most popular way
for us to communicate on the Internet,
which is remarkable,
because email was invented more than 40 years ago.
before the Internet, before the Web,
and it was done without the experience
of things like SMS, and instant messenging,
and blogs, and Wikis, and bulletin boards,
and discussion groups, and social networks, and Wikis,
and media sharing sites, and collaborative editors--
All of these different kinds of communication
that we take for granted today.
Also, of course, computers and networks
have dramatically improved in those four decades,
and so when we started this project--
and it's been more than two years--
we asked ourselves the question,
"what might email look like if it was invented today?"
And needless to say, there is about a million
different ways you can answer that question.
What you're going to see today, Google Wave, is our attempt.
And so let me start by briefly contrasting
email from Wave.
Email essentially mimics snail mail.
The basic metaphor is you write a message
and you send it to one or more recipients,
and then email systems--
and we like to think Gmail does this particularly well--
can collate related messages into conversations or threads.
Wave, by contrast, starts out
with the definition of a conversation,
which is simply a lightweight tree structure of messages
and a set of users participating in that conversation.
And then instead of thinking of individual messages
as being sent back and forth,
we think of the entire conversation object
as being a shared object hosted on a server somewhere.
And users that participate can open up that wave,
leave their replies, go away,
and then when the next user comes,
she can open up that same shared object,
see those replies, and add her own.
That's how the wave grows.
That's how the conversation builds up.
And you'll recognize that this is a model
that came to how bulletin boards work.
We found that with a tight enough implementation,
you can use that to build a single communication tool
that has functionality spanning quite a lot further
than what you can do with email today.
And so we'll show you a demo.
It'll take you through a series of usage scenarios
that you'll be familiar with,
but where today we would use different tools for each one,
and we'll show you how it all fits neatly
in this one metaphor of hosted conversations.
Stephanie.
Hannon: So what you are looking at is an HTML 5 app
that we built with the Google Web Toolkit.
On the left side is Lars running Chrome.
On the right side, I'm running Safari.
And a little bit later we're going to throw in Firefox.
So the same thing is being shown on each pair of screens,
you can just choose one to look at.
Lars Rasmussen: Okay, so we'll start
with plain vanilla-type email conversations,
and we'll show you how it looks in Wave.
We're planning a boat trip.
And I'm going to start by clicking "New Wave" here,
and then I'll type my title in the first line.
Hannon: Watch your spelling, Lars.
There's a lot of people.
Lars Rasmussen: [laughs] There is a lot of people.
They can't see what I'm typing anyway.
"Are you ready for the boat trip?
Hey, Steph."
Did you guys like the spell-checker?
[applause]
You do.
We'll talk more about that later.
Since you don't want to watch me type for an hour,
we put canned messages in there.
We'll try hard to pull them out before we launch.
I click "Done," it asks me for more users.
I'll add Stephanie.
And since she is offline,
I'm going to go stare at a blank page.
Hannon: So I will open Wave.
And you'll see in my Search panel, the middle panel,
will be an unread message from Lars.
He's asking me if I want to go shopping,
uh, before this boat trip,
so I'll do something very email like,
which is hit "Reply,"
and say, "I looove shopping."
Lars Rasmussen: I wrote the script.
Hannon: "I need new fins. Let's go."
The first benefit I want to show you
of this being a hosted conversation
is it's easier to keep track of structure.
If this was email and I wanted to reply
to the middle part of Lars's message
where he asked which bus to take,
I would hit "Reply," the email client would copy the message,
and I'd hand-edit in the response.
Because this is a hosted conversation
that lives in one place,
I can just instruct the server to split the message apart
and say, "You never wake up early,"
which is true.
"Let's take the late bus."
Okay, Lars isn't online; I'm going to close this wave.
Lars Rasmussen: So a little bit later I come back online,
and you'll see, for starters, that that wave is now bold
to show me there is new material in it.
When I open it up, Stephanie's first message gets the highlight
and I can navigate the conversation with my keyboard,
and of course, continue her thread here.
"You know me too well."
Like that.
And that's how plain vanilla email-type conversations
work in Wave.
So you've noticed that we have carefully avoided
having the wave open on both screens.
When we do have the wave open at the same time,
my message bounces right off the server
into Stephanie's browser.
The effect is that you can also
do Instant Messaging-type conversations in Wave.
In fact in the same wave you can switch back and forth
between these different ways of communicating.
I'll show you that now.
Shiny. You must know a good store.
[cheers and applause]
Hannon: There is a new one over on George Street.
Lars Rasmussen: Cool. Let's go at 7:00.
Hannon: "Sounds good. Let's invite Jens too."
Lars Rasmussen: "Okay."
So you noticed that it didn't wait for me to hit "Done"
before showing Stephanie the message,
but rather--and this was difficult to do--
we transmit live almost character by character
what I'm typing.
Why did we do that?
It's because with today instant messaging tools
you spend half of your time looking at it saying,
"Stephanie is typing, she's typing, she's typing,
she's typing," and then you see what she said.
Thank you. [laughs]
But because in general you can start formulating your own reply
before Stephanie is done typing hers,
by doing this live transmission,
you end up spending 100% of your time either reading or writing,
which dramatically speeds up the conversation.
Now needless to say, there are times
you don't want everyone to see every keystroke,
in particular if you spell like I do.
Um, and so we have this checkbox here.
All you have to do is check it
and now no one can see what you're typing
until you hit that "Done" button.
This is one of the features we haven't implemented quite yet.
[laughter]
Okay, so that's how email conversations,
or rather email-type conversations
and instant messaging-type conversations
no longer require two separate tools.
Next thing we want to show you is how easy it is
to add a new person to an ongoing conversation.
Can I just introduce my brother Jens, by the way?
Give him a hand, please.
[cheers and applause]
So we want to--
We want to add Jens to the conversation.
If this was email, I would take the last message here,
reply to it and add Jens to the recipient list.
There's two problems with that.
For starters,
because we branched the conversation up here,
that last email message
would not contain the entire conversation.
But also, if Stephanie then later
went and replied to an earlier message of mine,
Jens wouldn't get that anyway.
You end up with these cat and mouse games.
In the Wave model, all you have to do
is make Jens a participant in the wave like that.
And now I'll switch over to Firefox here
where Jens is already signed in.
Jens Rasmussen: So now that I'm on the wave,
um, I'm going to open it,
and, of course, everything is going to be marked
as unread for me.
But because I was added late,
I didn't get to see Lars's message in one piece,
and by the time I'm added they could be arbitrarily far apart.
So we added a feature called Playback.
So I get to see Lars's original message,
Lars asks Stephanie, Stephanie replies,
Steph does in-line reply, and so on, and so on.
[applause]
Thank you.
So Playback turns out to be a really useful feature,
particularly when the wave
starts picking up more structure,
and we'll show you more of that later.
But now that I've caught up on this wave,
I'm going to just add my reply.
"Me too."
Oh, I think I crashed.
Lars Rasmussen: Did I mention that it's a developer preview?
[laughter]
So we made sure to inject a few bugs
so that you wouldn't have too high expecta--
I'm just kidding.
Jens Rasmussen: Did you notice how quickly it reloads?
[laughter]
Did we mention we used GWT?
All right, so I'm going to add my reply.
"Me too.
Don't forget your keys."
And then I'll hand it back to Lars.
Lars Rasmussen: Thank you.
So that's how easy it is to add a new person
to an ongoing conversation.
And so often we end up having
very nice group conversations in Wave.
And then occasionally you want to say something
in a wave that's not visible to all the participants.
We call that a "Private Reply,"
and I'll add one down here at the bottom,
and I'll say,
"Let's buy Steph a reeeally nice present."
Hannon: I wrote this part.
Lars Rasmussen: And then I will add just Jens,
and you will see,
if I just quickly flip over to Jens's browser,
and scroll down,
he sees that private reply,
but if you look at Stephanie's screen,
she doesn't see it.
If you remember, I've explained
that a wave is a tree structure of messages.
Essentially you can take any sub-tree of the wave
and restrict access to a subset of the participants.
Okay, I switch back to my own account, here.
The next thing we want to show you
is how attachments work in Wave.
So we've been on a boat trip--
It was very nice, thank you--
And we all got pictures.
I have six of them sitting here on my desktop,
and I'm going to drag them onto the wave like this.
[applause]
Hannon: You might not have noticed,
but the thumbnails appeared on my screen
long before the full images were uploaded from Lars's computer.
I'll show you that again
by dragging in my own photos from iPhoto.
Ready? Here we go.
Lars Rasmussen: And you can see them show up over on my screen.
audience member: Yeah.
[applause]
Lars Rasmussen: Don't be shy, you guys.
If you like what you see, don't be shy letting us know.
[cheers and applause]
We can--we can handle pretty much any amount of applause.
[laughter]
Hannon: This feature--
drag and drop from the desktop to the browser--
is the one part of Wave that HTML 5 can't support yet.
We're working on a proposal to add it to the standard.
In the meantime, you need to download Gears
for this specific feature to work.
It's the only part of Wave that you need Gears for.
When Lars dropped in his images,
you might've noticed at the bottom of the Wave panel
there's an Image menu
with actions you'd probably do on images,
like upload or download.
What's important is these actions
apply to all the images in the wave,
not just the ones I dropped in,
which makes Wave really an easy, lightweight way
to create a group photo album together,
which is surprisingly hard to do with today's tools.
Lars Rasmussen: And so here's the photo album.
This is Captain Athena.
Here's the hard life down under.
And as advertised, you'll see over here
Stephanie's images show up in my slideshow
so that I can show you
just how much fun life down under is.
And that's images.
So that's how easy it is to share photos in Wave.
This was a group trip.
We'll all throw our photos in here.
We'd probably share it with the rest of the office
to make them envious.
In this particular case, it's not clear
that we want everyone to know that we went shopping together.
And so one of the features down here
lets me copy just the images
from this wave into a fresh wave.
"Boating in January.
Enjoy all, here and yonder."
And then I'll add Stephanie to this.
I could now share that with the rest of the office.
Now, this feature here of extracting images
from a wave and putting them in a new one
is actually part of a very important
design principle for us.
Namely that we care just as much
about the product of the wave as we do the wave itself.
And we'll show you more examples of that later.
Yes, we will.
Um, I forgot what's next.
Hannon: How 'bout we show them the embedding APIs?
Lars Rasmussen: Excellent idea.
Okay, thank you. So...
[laughter]
She's right.
We should've rehearsed this before coming this morning.
Just kidding.
So the first--
The first category of, um, APIs that we want to show you
are APIs that let you embed waves onto your webpage.
It is very similar to the Maps API,
which, by the way, um, thank you, everyone who used it.
We consider your enthusiasm for that API
an enormous factor in that product's success,
and we're hoping, obviously, to repeat that with Wave.
Hannon: Give a round of applause to themselves.
Lars Rasmussen: Oh, yeah, a round of applause to yourself.
Well done. [applause]
Lars Rasmussen: Okay, so... Hannon: Yay, developers!
Lars Rasmussen: Here's an example application.
It's a little blogging site we've built.
It's over on Google App Engine,
but you could build it anywhere you host your website.
And this blogging site--
In addition to embedding waves on its pages,
it provides me with this robotic participant
that we affectionately call Bloggy.
All I have to do is add Bloggy to the wave,
and now you'll see--
You can probably not read that,
but on that yellow banner,
all users on the wave is now warned that Bloggy,
this new participant, has published the blog
on a page which we built over an app engine.
Can I just introduce Gregory Delasander?
He's another PM on the team.
[cheers and applause]
And he's going to show you the blog site now.
Delasander: Hi, I'm Greg,
and I'm a huge fan of Lars's blog,
just like everybody on the team is told they should be.
I'm going to show you... Hannon: He makes us read it.
Lars Rasmussen: It's a good blog. Come on.
Delasander: Oh, hold on just a second.
Did we lose...
Hannon: Did we lose VPN?
Delasander: Yes, I think we might have.
Hannon: Lars, this is where you do the dance.
Delasander: Lars, dance a little bit.
Lars Rasmussen: Everyone look at me.
Don't look at his screen.
[humming]
The Wave dance.
Delasander: I think we lost all connectivity.
Lars Rasmussen: Neener, neener. Neener, neener.
There's not a-- Delasander: And then...
Lars Rasmussen: There's not a lot of people in the world
that can have their demos as spectacularly fail
in front of 4,000 people and not break a sweat.
Hannon: It wasn't the demo, it was the network.
Lars Rasmussen: We wish we were one of them.
Delasander: Excellent.
Lars Rasmussen: I think your proxy server might be missing.
Oh, there we go. Hannon: All right, we're back.
Delasander: So as I was saying...
The blog.
So in the blog, one of the cool things you'll s--
you can see is that we're not just embedding the images,
we're actually embedding the whole wave
with all of its UI.
This means that I can respond.
"Hey, that looks fun. Why wasn't I invited?"
[cheers and applause]
The same way we embed--
And we--we do--
You can respond in the same way you do in the Wave client.
Lars Rasmussen: Exactly.
And so now, I can see, obviously, uh,
Greg's question from inside my Wave client.
I can answer from in here.
I don't have to go to the blog site to do that.
I could if I wanted to, but I can stay here.
"Um, I lost the phone with your number."
I really, truly can't spell.
Here we go.
Delasander: So one of the things you just saw
is that I happened to be online when Lars was online,
and I saw his response coming in live on his blog.
That's not always going to be the case.
Since I responded to this blog,
it'll show up in my Wave client.
Right after I refresh my Wave client.
Um, it will show up in my Wave client
and I can continue the conversation in there.
"But, Lars, I live next door."
[laughter]
And, um-- And then we can--
That response shows up on the blog,
we can continue the conversation from there,
and anyone else can join in that conversation.
Lars Rasmussen: Thank you, Greg. Delasander: No problem.
[applause]
Lars Rasmussen: Thank you.
And so this, again, is an example
of how to use our embedding APIs to put blogs on your web pages,
and here we showed you with a blogging site,
but you could imagine discussion group sites,
community forums--
if you have a rich-media site
you can let your users discuss that using waves.
The benefit for developers, of course,
is you get to provide this very live, rich experience
with very little code.
For your users, for starters, they get to use a familiar UI,
but for those of your users that have Wave accounts,
they get to walk around the Web
and aggregate the conversations they're interested in
into the Wave client so that they don't
have to go check back on 10,000 different pages
whether someone responded to them.
Which will make flame wars so much more effective.
[laughter]
She hates that joke.
Hannon: I hate it. [laughs]
Lars Rasmussen: Okay.
So that was an example of how to embed waves.
The embedding APIs can do other things,
and Stephanie will show you that now.
Hannon: So we invited some of our colleagues
from Brazil and India to Sydney
who work on one of our social networks called Orkut.
We wanted to build a demo of what it could look like
to put waves inside of Orkut.
Obviously, it's a place where lots of discussions happen.
It demonstrates three important principles,
or features, of our embed API.
Let me load up the demo.
So here's my Orkut account.
And you can see there's a Wave panel in the middle.
And the first thing is I can create a wave on Orkut.
So I'm starting a new wave, and I'll say, "Brazil trip?
Wonder when Lars will let me go."
The second important feature is that you can
use contacts other than your Wave contacts.
In this case, the authors of the site
chose to use the Orkut contacts,
so I can add some of my Orkut friends
like Sid, Torston, and Rodrigo,
who all helped build this demo.
The third principle is that I can embed a "Search" panel
inside of Orkut using the embed API.
I'll show you that now.
I can search for all my waves from here.
And so on. And look at them.
So that's waves embedded in Orkut.
What's important is that our embed API
is powerful enough for you to build your own Wave client.
In this case, the Orkut team
chose to focus on waves created inside of Orkut.
But just like in the blog example,
I can go back to my Wave client,
and I can see the wave I started there.
"Wonder when Lars will let me go to Brazil."
So that's the embed API.
Lars Rasmussen: You guys-- [applause]
Thank you.
Are you guys feeling inspired yet?
So remember that we're all going to give you accounts
on a sandbox build,
which is in fact the build that we're demo-ing from later today,
and this is all sample applications
that we're hoping you'll pick up
and build much, much cooler things with.
Okay, so the next thing I want to show is
of course you're going to want Wave on your mobile devices,
and I have an Android and an iPhone here,
and I was going to show you how well it works communicating
from mobile devices to the desktop,
but you guys are all on Facebook, aren't you?
Because I can't get on the wireless.
[laughter]
So if it doesn't work, it's your fault.
Okay, so you can see my inbox over here.
This is on the Android device.
Here's an open--
uh, the same open wave we saw before.
You see the pretty pictures here.
And then I can click the "Reply" button like this,
and you'll see over on Stephanie's screen,
which I can't see.
You will see a reply.
Imagine I was actually on a network,
and then I could type in, "I am on the boat."
Done.
Notice again my spelling.
And nothing is going to show up over there
because we haven't yet figured out
squeezing this through without a connection.
Maybe we'll show you that.
[laughter]
Hannon: As long as it's your fault that it's not working.
Lars Rasmussen: We are--
Hannon: I just don't want to screw up the--
Lars Rasmussen: We are working on it.
Okay, so that's mobile.
Hannon: How 'bout we talk about editing?
Lars Rasmussen: Oh, that's a brilliant idea.
Thank you.
Okay, so the next thing we're going to show.
Again because, um, there's only--
Back to my desktop. Thank you.
There is only one copy of the wave out there.
Even though we put these pictures on my blog,
I discussed them with Greg,
uh, we had them on my mobile device.
Now I notice that some of the captions
are kind of wonky.
And all I have to do is click this "Edit" button here,
and then I can fix that.
Kayaks. Beer Man.
Thank you. [applause]
Hannon: And as you notice,
the captions are updating on the blog.
Lars Rasmussen: Yes, hopefully you saw that the captions
were actually updating live on the blog as I was typing.
So, here I edited my own message,
but we actually let users edit each other's messages as well,
which is a very nice effect that in addition
to everything we showed you already,
you can use waves
to collaboratively author documents,
which we'll show you now.
So let's leave the boat behind, and let's go to work.
Stephanie.
Hannon: As Lars mentioned, I'm a product manager,
and I often have to take notes in a meeting.
Today I have to decide if I want to send those notes
out on email because I want people to discuss them,
or if I'm going to put them in a dock or a Wiki,
'cause I want other people to help me edit them.
With Wave you don't have to make that choice.
You can do both discussion and content collaboration
in one tool.
So these are our meeting notes.
I'm going to add Lars,
Jens, Greg, and ACD.
[Lars Rasmussen and Hannon speak over each other]
Lars Rasmussen: Pardon me.
Hannon: Then you open it.
Lars Rasmussen: Then I open it.
And even though this is Stephanie's message,
I can click that same "Edit" button
and change this to "glorious."
And then I can add an action item.
"AI. Make more better AIs, already."
Whoo, like that.
Thank you.
[applause]
Thank you.
And so that's how easy it is
for me to edit Stephanie's message.
We want to show you now how it looks
to the other participants on the wave--
the fact that I edited her message.
We'll start with Stephanie.
Hannon: So you can see the wave pop back into my inbox
because there's new material.
If I open it, I see the markups.
So I see the changes that Lars made.
Lars Rasmussen: Thank you.
[applause]
Hannon: We haven't implemented it yet,
but we'll also have a little description at the top
that says Lars edited this message.
What's important is I see these markups
not because I wrote the original message,
but because I saw the original message.
Anyone who saw my original message
would see these same markups
the next time they visited the wave
after Lars made his edits.
Jens Rasmussen: All right, now,
I didn't get to see the original message,
so when I open up this wave,
I just see the current version of it.
But I do get to see
that both Stephanie and Lars wrote this message.
Most of the time I'm not going to care,
but if I do care, then Playback is my friend again.
So I see Stephanie's original message,
she adds Lars,
and then I get to see Lars's edits.
[applause]
Thank you.
So now that we have accountability--
accountability in place,
we're going to allow everybody on a wave
to edit everything by default.
When something is changed,
the author is notified immediately,
and, if needed, can take action.
and everybody who's on the wave can find out who did what.
So Stephanie promised that we were going to do
collaboration and communication using the same tool.
Hannon: I did. Jens Rasmussen: So I'm going--
Now that I know that Lars made this--the request for more AIs,
I'm going to use the in-line reply tool we showed earlier,
um, to add my reply here.
"No, enough AIs already."
My spelling is not doing well either.
Lars Rasmussen: It's hard when 4,000 people are watching.
Jens Rasmussen: Typing and talking?
It's a little bit too much.
There we go. So I'll hand it back to Lars.
Lars Rasmussen: Okay, thank you.
So notice--
Notice that we never said, "Let's start a document, here."
These are all just waves.
The only thing different here
is that we chose to think of that opening message
more like a document we're collaborating about
than a message that starts a conversation.
And then we're choosing to think about that in-line reply
more like the beginning of a conversation
about the point in that document.
But to the system, they're all just waves,
and in fact, you can collaboratively edit
any message in the tree.
Doesn't have to be, uh, document-like at all.
Stephanie often comes and very friendly fixes
all of my spelling errors.
And so we think this combination of collaborative editing
and in-line discussion
makes for a very powerful collaboration tool.
And I want to show you that with a design document
that the team wrote a while back.
Let me just reconfigure my client, here.
I'm going to go do a safe search, find the document here,
Let me make some more space for it.
And you'll see here that it's a RISTEX document.
It's got headlines, it's got bullet points.
It's got illustrations, different types of fonts.
And then it's interrupted
by these little snippets of conversation
that help facilitate the collaboration.
And as always, the best way to see how this happened
is to play back the wave.
And you'll see Steven, our trusted server guy,
started out with a terse draft.
He added the rest of the team
Lars the manager says, "Please do more work."
Steven grudgingly adds another paragraph.
He says, "Yeah, whatever."
Then Stephanie the PM makes an edit here.
She adds a comment there,
starts a discussion there, and so on.
I can use the slider here to drag it
to anywhere in the history of the wave.
And we're planning a bunch of power tools
that come with Playback.
For example, I might ask it
only to play back Stephanie's contribution.
So I might ask it to only play back a single message
or even a single paragraph inside a message.
we're definitely going to let you take
one change in the history
and revert it at the end of the history.
Maybe name aversion so that you can find it again and so on.
Playback is going to be a really powerful tool
for investigating and manipulating
the entire history of the wave.
Thank you.
[applause]
And so now imagine we're done with the design document.
Or we find we're in a good state;
we want to share it with a wider audience.
You'll notice it's not super comfortable reading a document
interrupted by all this discussion,
so we added this widget here
that lets you hide and show some discussions,
but also, just like we extracted images from a wave earlier,
we let you extract the current version
of any message in a tree into a fresh wave.
Like this.
And now I have a fresh wave
with the pristine product of our work,
which I can now submit to the server
and share with whomever I like,
put on a mailing list internal blog or even keep working on.
And in fact, we're planning more features here
for document production.
Imagine you go back and do more work
in the original wave.
Then you'll be able to merge just those changes
into that same product wave.
The product wave will just have a two-step history now,
where each step is attributed to whoever did the copy.
In fact, and you guys will recognize this as, um,
inspired by source-controlled systems.
We'll have you--
We'll let you have a whole string of work waves,
all pointing to the same product wave.
You can have different themes
working on different parts of a wave,
and then when one team merges
and that changes into the product wave,
the other teams can pull that down,
merge it with the local changes, and so on.
So this is going to become
a very powerful document production tool.
Thank you.
[applause]
We showed you this, of course, with, um,
with, uh, rich text documents.
There's no reason we shouldn't
later add spreadsheet-type functionality in there,
or presentation building-type functionality in there.
In fact as we'll show you later, we've taken great care
to make the content model inside Wave extendable,
both by us and by you.
Okay, the next thing I want--
Hannon: Why don't you just talk for a minute
before you open it?
Lars Rasmussen: Talk for a minute...
Hannon: You know.
Lars Rasmussen: Before I open it.
Hannon: 30 seconds.
Lars Rasmussen: We could do a little interpretive dance
while we open it.
It's not that there's anything wrong
with the thing I was about to open,
it's just that--
How're you guys doing?
[laughter]
Are you having a good time?
I know it's a long demo. Thank you.
Don't be shy if you like it.
Hannon: All right, we're ready.
Lars Rasmussen: There's a whole bunch of people
in blue shirts working feverishly over there.
[chuckles] And we're ready.
Okay, so here is a wave, um...
Here is a wave. That's right.
So my little introduction here is the following:
We're going to show you now
the thing we had the most fun working on.
As in this was the hardest thing we did.
Um, which is to let more than one person
edit the same message at the same time
and still transmitting the characters live on the wire.
So we have a set of pictures here,
and Stephanie is going to start
at the top-left editing the captions.
You can see on my screen
I can see exactly where that orange label--where she is,
and I'm going to start from the lower-right.
Hannon: "Thumbs up."
Lars Rasmussen: "Spelling Google."
Hannon: "Lars in the lead."
Lars Rasmussen: "Smiley David."
Hannon: "Wave crew hiking." Lars Rasmussen: "Kapow."
[applause]
Thank you.
Now we're very close to each other.
I'll add some styling here.
I'll make this italic.
Oh, boy, if someone can add some color.
We can do this.
Notice how close we can edit to each other.
You can see we've got a couple of--
of our team has joined us.
We've got three people here.
Casey, Steph, Ophir and Dan.
We have four people now,
editing the same document right next to each other.
[applause]
Thank you.
And so apart from hours and hours of fun
just chasing each other's carrots around on the screen...
[laughter]
Hannon: It's a lot of fun. Lars Rasmussen: A lot of fun.
Um, the--the--this sort of live, concurrent editing
opens up a whole set of new ways of using the tool.
We're actually still discovering some.
Imagine you're in the same room,
you're taking notes from a meeting.
Oftentimes people don't even come to the meeting,
they just open up the wave, see the notes being taken,
they just pop their questions in the wave, and so on.
I want to-- while I'm showing off our edit,
I want to make sure you see
that it supports right-to-left languages.
This is Ophir speaking in Hebrew.
Thank you.
[applause]
You see up at the top-left that the editor supports languages
that require international input method editors as well.
I'm pretty sure that's Chinese.
Okay. That's collaborative editing.
And now...
Man, this is a long demo.
You guys want to stand up a little?
Stretch. Hannon: Any stretching?
Lars Rasmussen: Stretch a little.
Hug the person next to you.
[laughter]
You don't have to do that.
Hannon: A hug break. Make some friends.
Lars Rasmussen: Um, I want to take a little break.
We have lots more to show you,
but I want to take a little break,
and I want to, um, call out to our friends and colleagues
on the Google Web Toolkit team.
So--Thank you.
[applause]
Thank you.
So Google Wave is 100% built with the Google Web Toolkit
from the first line of code we wrote in a prototype
back in early 2007.
And as I'm sure you know, the Google Web Toolkit
lets you write HTML 5 applications in Java.
And then GWT, as we call it,
automatically translates that into HTML, JavaScript, CSS,
all of those things that then run
in all of the modern browsers.
And I think that we couldn't possibly have built
something this rich without the Google Web Toolkit.
In fact, I don't think we would even have thought to do that.
I think using modern tools like this
changes your way of thinking.
When I was still hand rolling JavaScript for Google Maps,
I found too much of my brain cycles
were used worrying about the constraints of programming
in a scripting language in a browser.
But by using GWT, I get to write in Java
and have this amazing set of tools
that come with writing in Java,
and we found that our programmers
can now spend most of their time
thinking about the amazing potential of the Web.
And by the way, this is both if you're on a desktop
or if you're on a mobile device,
when I showed you on the Android and iPhone here,
Wave was running in the browser in both of those phones.
GWT makes that fairly easy to do.
It's actually the same code
that runs in those mobile devices,
it's just a different layout.
We estimate that the extra requirement of serving this
both into desktop browsers and mobile browsers
only adds about 5% extra engineering effort,
which I find remarkable.
Okay.
Hannon: And that graph from yesterday.
Lars Rasmussen: Pardon me.
Oh, the graph from yesterday. Did you see that?
How we built 1.4 megs of code and then all of a sudden
it went down to 200k?
We like GWT for that.
[applause]
Hannon: All right. So back to the demo.
Let's talk about organization.
We learned from our own use of Wave
that you get a lot of waves, which is great,
but you need tools to organize them.
We have things you're familiar with
like folders and saved searches.
We also have tags and they're shared
by all the participants on the wave.
So you have just as much incentive
to put a great tag on a wave as a great subject.
For example, Lars is way too lazy
to organize his own stuff.
Lars Rasmussen: Oh, yeah.
Hannon: So we have a team help him do it.
Lars Rasmussen: Thank you. Hannon: [laughs]
But the most powerful way to organize waves
is with waves themselves.
Let me open a wave we used to organize this demo.
You can see it has links to other waves in it
and you can combine, uh, them in sections, formatting.
You can discuss them.
And if I click on one of these links,
it'll take me to that wave
and I can use the back button to go back.
So let me show you how easy it is
to create one of these wave links.
If I missed one, I can just pick it up
from the search panel and drop it in.
[applause]
I'll do that one more time 'cause I think it's cool.
Drop it in.
So we found on our own team
links--wave links are good for more than just lists.
We're actually interlinking a lot of waves on our site
almost like a Wiki, uh, on our team.
Before we get to Wave extensions,
which I know this audience is really excited about,
I want to show you one more thing
that we worked really hard on.
I'm going to go up here and search for Google Wave.
Lars Rasmussen: I have a feeling, uh, you're going
to want to refresh your browser before we do this.
Hannon: Just like my inbox, when a wave matches this search,
it will pop into the panel.
Lars Rasmussen: And so Stephanie has a search
for Google Wave over there.
I'm teeing up a new wave here.
Said, "Wow.
I am finally demo-ing Google Wave."
Now the reason this hasn't showed up
in Stephanie's search yet is I didn't type the E.
So what I'm going to do, I'm going to count to three,
then I'm going to hit the E,
and you guys can count how many seconds it takes
before it shows up in Stephanie's browser.
One, two, three.
[applause]
You guys want to-- you guys want to see that again?
[laughter]
Hey, Stephanie, can you open up that wave for me?
Hannon: All right, let me go over there.
Lars Rasmussen: Backspace.
Hannon: [laughs]
[laughter and applause]
Lars Rasmussen: E, backspace, E,
backspace, E, backspace, E, backspace.
We call that the Wave dance.
So we've worked really hard on this.
We're pretty proud of the result.
I should just say after we started using it,
we found this is almost too fast.
Sometimes, uh, it draws your attention
to unfinished work.
And we're actually looking for the right balance
between speed and not being interrupted too often.
Okay, what's next?
Hannon: Extensions. Lars Rasmussen: Extensions.
The reasons you guys came here.
Okay. So the next thing we want to show
is the other category of APIs
that we're making available today,
which is about extending the functionality of Wave.
So we have tried hard to maintain a discipline
on the team that even significant offerings
of our own should be built with our own extension APIs
so that your extensions will live
as first-class citizens inside Wave.
It's similar, actually, to how browsers like Firefox
let you extend them.
This is just the web site you're extending
instead of the browser.
So let me show you some examples.
You've undoubtedly noticed how all morning,
I've been pretending my spelling is bad
just so that we could show off our spell-checker.
So normally spell-checkers work
by matching words up against a dictionary.
If they find there's-- if they don't find a word
that is in error,
the problem is that oftentimes
spelling mistakes hits other dictionary words.
And so our spell-checker actually takes the context
of the word into account
and then it matches it up
against an enormous language model
that we've built from the entire web.
Let me show you how powerful that is.
We call this the "Bean Soup Demo."
"Can I have some been soup?"
It puts a red on the line
and it knows that I meant "bean soup."
Thank you.
[applause]
Okay, now watch carefully.
"It has bean so long."
Did you see that?
So it is--it has become so good at spell-checking
that often, it has enough confidence
that we let it automatically correct my errors.
Let me show you that again.
"Icland is an icland."
[applause]
"You are to kind."
Pretty cool, huh? [laughs]
You didn't see that last one.
Okay, so that's our spell-checker,
or Spelly as we affectionately call it.
Let me show you another simpler one
that detects links in what you're typing.
And we call it Linky.
"I love google.com."
It immediately puts an underline--.a--
ooh, that's not a link-- .u--now it's a link again.
[applause]
You're wondering what's this all got to do
with extensions and let me explain that.
So you remember we showed you a robot earlier
called "Bloggy."
All that one did was publish a blog
that let you use the embedding API.
But robots are really powerful ways
of extending Wave's functionality.
They're server-side programs that participate in Wave
with all the power of the human participants.
You can see from your robot the live changes in the wave.
You can make live changes to the wave
including adding and removing messages,
collaboratively edited messaging,
adding and removing participants.
You can even start new waves from robots.
And the way Spelly works
is that it uses our robot APIs to watch what I'm typing.
It sits on the server. It watches what I'm typing.
It takes every so many words and matches it up
against a language model.
And then when it finds an error,
it uses collaborative editing to edit the content.
And in fact, when it doesn't have enough confidence
and it put that red underline,
if Steph and I were editing the message at the same time,
she would also see the red underline
and she could be the one taking the suggestion.
Linky works in the same way.
But who wants to be typing in links all day?
We had a very good friend of ours
from the Google Search Team build this extension for us here
called Searchy.
Let's search for Australia.
Hannon: We have a really clever naming convention.
Lars Rasmussen: And here you can do a Google search
from right inside Wave and add the link like that.
[applause]
You guys want to see that again?
I search for Bora Bora. It's so pretty there.
I add an image to the wave just like that.
Thank you.
[applause]
Let me just quickly return to our friend Linky.
I've got a video sitting here.
Let me copy the URL.
And inside my wave,
I'm going to type "Check this out."
And then I'm going to copy the link in there.
And then I'm going to dance a little bit
while the system spectacularly fails.
[laughter]
Maybe we'll return to that later.
Okay, so that's extensions that we built
with internal APIs.
And what we're doing today as part of the developer preview
is--is make external versions of these APIs
available to you guys.
The external APIs have almost all the power
of the internal APIs.
There is a few things we haven't quite figured out
how to secure the export.
We're working very hard to close the gap.
We're going to show you now a series of examples
of things that are built with the external APIs.
These are all sample codes
that are going to be on code.google.com
where we'll host the API.
Stephanie.
Hannon: Any open social gadget can sit inside a wave.
In fact, we were about to show you one
which might come a little bit later.
But we also make an additional API available
that lets you the developer make your gadget
live and collaborative.
I want to show you that.
But before I do, I'll digress and tell you a little story.
Even though we on this team have been building Wave
and thinking about Wave for a year and a half,
when we first started using it ourselves,
it took awhile for us to discover all the ways
Wave can make you more productive
because we were so used to older tools.
In fact, we're still discovering new ways all the time.
I'll show you that by opening a wave
and using Playback to tell you what happened.
Uh, someone on our team wanted to create a movie outing
and we should all go see the Transformers.
So he sent a wave out and people did something
very email-like and responded.
"I'm interested." "What place are you going to?"
"Is that really a good movie?" And so on.
I tried to get them to see Confessions of a Shopaholic.
Nobody went for that.
Lars Rasmussen: She's still trying.
Hannon: Still trying.
So when you look at this wave,
it's sort of hard to parse out the important information
of who wants to go.
So somebody suggested we should all edit
the opening message instead of putting it
in individual messages.
And we cleaned up the wave.
Everyone started editing the opening message and so on.
This was a much better way to construct this RSVP list.
And we could still have discussions
about which car to take and so on.
Now, we're all engineers,
and you can look at this workflow
and think there are better ways
or there are ways to make this even better
using our extensions.
So another engineer on our team wrote a gadget.
We call this the "yes-no-maybe gadget."
Hey. [laughs]
[applause]
So if you--it's hard to see for you guys, I know.
But I'm currently in "No" in the middle column
and I'm to change it to "Maybe."
And you see it update on Lars' screen.
[applause]
Lars Rasmussen: And I'm currently
in the "Maybe" column.
And I click the "Yes" over here.
And you'll see it quickly updates
on both our screens.
Hannon: So you the gadget developer
only have to worry about two things.
When I click the button,
update the state of the gadget in XML and the wave,
then we automatically transmit through the server
to Lars' client where your gadget
has to update the UI to reflect the new state.
Now, of course we did all this--
ooh, it's a secret though--
I, um, uh, don't tell anyone,
but we did all this so we could build
impossibly fun, addictive games.
And we'll show you a few of those now.
Lars and I are going to open Sudoku.
Lars Rasmussen: Hmm. Hmm.
Hannon: And we intended for this to be a collaborative game
so we could solve the puzzle together,
but somehow it turned competitive.
[laughter]
And, uh, you get a point for making a good move
and a negative point for doing something wrong.
You can see Lars' score is going negative.
Lars Rasmussen: How can you play Sudoku
in front of 4,000 people?
Come on.
Hannon: Then, uh, back in 1851,
Lars and I played this chess game
that became very famous.
It ended in 23 moves.
And it illustrates how well Playback works with gadgets.
So if I go into playback and I click forward,
you can actually step through the whole game.
[applause]
So as we mentioned in the beginning,
we come from the Maps team.
So probably wouldn't be a good demo
if we didn't do a Maps gadget as well.
It's been a lot of work to prepare for this demo.
So I'm going to send Lars a wave about taking a vacation.
Lars Rasmussen: Stephanie's favorite topic.
She wants to go on vacation in Bora Bora.
She's asking me for recommendations.
I highlight the term Bora Bora here.
And then I click this button that's provided
by an extension that you guys could've written
that inserts a map to Bora Bora.
Thank you. [applause]
Hannon: Now, the important thing
is my hands are off of my computer,
but my screen is still on the right.
Lars Rasmussen: And now I click the satellite button
and it changes on both screens.
And I go zoom, zoom, zoom, zoom, zoom, zoom.
[applause]
[laughs] Thank you.
[applause]
And now, Stephanie loves swimming with sharks.
And I happen to know that the lemon sharks hang
over here.
And you can see that I put that marker on.
Shows up live over on Stephanie's screen.
Now my hands are off.
Hannon: And I'll pick up the polygon tool
and I'll tell Lars, actually, I want to stay in this area.
Lars Rasmussen: And you see that showing up on my screen too.
And so again, all you guys have to do with your gadgets
is to store updates to the state
in the local XML.
And then we transmit on the wire
and then the other instance of your gadget
just updates its state when it gets notified
of that change.
And so those are client-side, um, extensions.
I want to just show you, actually,
the team in blue over here is scrambled.
And they brought back up Linky.
And I wanted to show you what happened
when I dropped that YouTube URL into the old extension wave.
So you'll see that Linky didn't just recognize
it was a link,
but it recognized it was a link to a video.
It puts this little friendly light bulb
on my screen where I can open up
a set of suggestions for what I might want to do.
Like, for example, I might want to embed the video
right inside my wave
and play it for you guys.
[wobbling noise]
Dah nah. Pretty cool, huh?
[applause]
Thank you.
Okay. What's next?
So Stephanie showed you a bunch of gadgets.
They're all client-side extensions.
We want to show you next what you can do
on a server side with robots.
And we're going to show you three examples.
The first one is an application--
a collaborative application built entirely within Wave
with our extension API.
So let me just open up my inbox again.
And instead of clicking "new wave,"
I'm going to hit this drop-down button here.
And I'm going to hit this item
called a "new poll."
New poll is just a new wave,
but with a special robot that comes from an extension
that you guys could build called Polly the Pollster.
I'll add Steph to the wave as well.
Polly added a form to the wave.
Yes. And so this is not a gadget.
Forms are native to wave.
You can put them in there.
And now I can fill out the form
starting with the title of the poll
that I want to conduct.
And you'll see as I'm typing in the form,
Polly sits on the server side.
She saw that letter by letter,
and she updated the title of the wave.
Now the really cool thing about having forms in waves
is that you can fill them out collaboratively.
So Stephanie's going to fill in the choices
while I add the question here.
"Which movie is the best ever?"
And you see that Stephanie's filling in the options
in the field below.
Hannon: Star Wars.
Lars Rasmussen: Star Wave. [laughs]
Hannon: Not on purpose. [laughs]
Lars Rasmussen: Confessions of a Shopaholic.
So now Stephanie's going to fill out a number of people
that we're going to send the poll to
in the recipient list there.
She's putting in--
Hannon: Done.
Lars Rasmussen: Putting in six of them.
Now I'll hit the button here that says "distribute poll."
Now, what happens is that Polly sees
that I hit that button.
She fills in a results section
in that same wave here.
And then she sends out fresh waves
with the questions we specified
to all the recipients we specified.
And Stephanie's one of them.
Hannon: So I'm going to answer the poll
that Star Trek's my favorite.
Lars Rasmussen: And you'll see that Polly updates the results
live in the admin wave.
With a bit of luck-- thank you.
[applause]
Okay. So that's the-- an example of an extension
built exclusively inside of Wave.
The next type of extension we want to demonstrate for you
are extensions that integrate Wave
with existent communication systems.
In this case, we'll show you with everyone's favorite
microblogging service, Twitter.
Hannon: So at this point, you're probably wondering
how to install these extensions.
So let me open a wave.
And you probably won't be surprised to hear
that extensions can live inside a wave.
Here's their--a bunch of puzzle pieces
showing some of the things we're using today.
All I have to do if I want to use one of these inst--
extensious--is--
Sorry. Click the "install" button.
And you can see over here, there's a new drop-down menu.
And I have the option to create a new twave.
Lars Rasmussen: A wave, of course--twave, of course,
is a wave of tweets.
Hannon: You can describe as a developer
how your extensions hook into Wave.
It could be a keyboard shortcut,
a button on the tool bar.
It could be something like a new twave button.
There'll be a confirmation page
that tells the users how you're going to interact.
We haven't quite implemented that yet.
So let me log in here.
I have to tell you that Lars created my Twitter account.
Lars Rasmussen: I made her Twiffanie.
She hates that.
Hannon: [laughs]
Lars Rasmussen: She's Twiffanie at Twitter.
Hannon: I think that tab button should be implemented, you guys.
[laughs]
I feel like all sorts of bad stuff is about to happen.
[laughs]
All right, so I'll sign in to Twitter.
And you can see tweets
from all the famous people I follow.
And down here at the bottom, Lars.
Lars Rasmussen: No.
Hannon: I'm just going to close it.
We still haven't, uh, uh...
I wanted to get the contacts out.
Um, it's important you can see that each of these avatars,
they're not necessarily Wave users.
Through our APIs, you can be a proxy
for contacts on a different system.
So I have Lance Armstrong, Ryan Seacrest,
lots of different people.
If I go down here and I look for Lars' tweet,
I can respond to it.
He says, "The demo's going pretty well."
And I'll say, "It ain't over yet."
[laughs]
Lars Rasmussen: And now I've logged in
to Twiffanie at Twitter over here.
And if I refresh the page,
you'll see that the extension took Stephanie's wave reply
and tweeted it.
Thank you.
[applause]
Hannon: Now Tweety also lets you search
over the public timeline of Twitter.
For example, for a phrase like "Google Wave."
So I'm going to start a new twave.
Lars Rasmussen: You're going to search for Google Wave now?
Hannon: Gonna do it.
Lars Rasmussen: How brave it that?
Hannon: [laughs] I'm not afraid.
So try again.
I'm going to log in.
And then I'm going to type Google Wave.
So we did this yesterday and there are only two tweets.
One of them was a woman interviewing at a company
called Wave so she said, "I should google Wave
before my interview."
So now let's sign in. See what happens.
Lars Rasmussen: * Doo doo * Hannon: A lot more than two.
Lars Rasmussen: Oh! [laughs]
Hannon: And we can go down to the bottom
and see tweets still coming in.
Lars Rasmussen: Oh, my God, you guys, thank you.
[laughs] Wow. Thank you.
[applause]
Hannon: So that was a example of an integration
between Wave and another communication system.
Lars Rasmussen: I'll just add to the search functionality
here, actually, that you can-- you can have Tweety
continuously search over in Twitter
and update the wave as they come.
So you can use them like "twit alerts"
for whatever you're interested in.
It'll just pop into your inbox.
Buggy. Hannon: Buggy.
We were reading the tweets.
Lars Rasmussen: We were reading the tw--
Hannon: Totally threw us off.
[laughs]
Lars Rasmussen: Okay, the last example
of a robot extension we want to show
is an example of how you can use Wave extension APIs
to integrate Wave within existent workflows.
You guys are programmers like us.
You probably deal with filing bugs.
I want to show you an integration
between Wave and the issue tracker--
the bugs database over on code.google.com.
But this could be any issue tracker Bugzilla could host,
whichever is your favorite.
So I'll just conjure up a canned message here.
And I'll tell you a little bit
about how we do bugs on my team.
So a programmer has built some code.
They send it for code review.
They also send a demo to the PMs and the UI people
and Jens and I.
And then we sit in the room and we test it.
And you can't read the text here.
But there's a bunch of bullet points
with observations we made.
We, of course, edited this collaboratively.
Some of them are bugs.
Some of them are observations for discussion later.
Some of them are notes for the UI designers.
And, of course, we should now go and file bugs.
Um, but instead of doing that manually,
we run an extension that lets me just select a bullet point,
click this button here,
and now a robot enters the fray called Buggy,
takes that text, and files it as a bug for me.
[applause] Thank you.
Hannon: Hey, Lars, why don't you add me?
Lars Rasmussen: Yes. Excellent.
And I'll add Steph to the wave.
The bug--the, uh--the--the-- sorry, the robot
also grabs a little summary from issue tracker
and puts it right inside the wave.
There's a link there to the bug
will Stephani--which Stephanie will now click
so that you can see the bug sitting over on issue tracker.
Hannon: All right, so I'm going to open this bug,
number 11.
Lars Rasmussen: And while she does that,
I'll file a bunch more.
You can see how easy it is.
And I just triple click here. There's another one.
And I'll file that bug too.
Okay. And so now, we might send this wave--
we might share this wave with our bug triage team.
I'll just do that myself.
All I have to do is change the assignee here.
I'll give this to Stephanie. I'll take this myself.
And then this one goes to Lars.
Ooh, I'm sorry. Was that Greg?
Like this.
And now you'll see-- Stephanie will refresh the bug
and you'll see the robot change the assignee over
in the issue tracker.
Hannon: On the left-hand panel where it says "owner."
Lars Rasmussen: And also, most issue trackers
or bug databases lets you debate bugs--
endlessly if I recall-- inside the database.
Which is normally not the strength
of the database.
But it is the strength of Wave.
And so instead of debating them over on issue tracker,
you can debate the bug from inside Wave.
I'll just use the inline reply tool here.
And I'll say,
"That is so not my fault!"
Hannon: And I'll refresh. You can see the update there.
[applause]
Lars Rasmussen: And so now we can continue
the endless debate inside of Wave,
which would be much more efficient.
We could also build--
We haven't done this in the sample here--
that if someone wanted to go make a comment
over on issue tracker,
the robot would see that and update the wave as well.
And just like we did a search through Twitter
into a-a wave,
we could also have the robot start a new wave of bugs
and just pull in all of the bugs assigned to you
so that you could track them from within a wave.
It's remarkable--thank you-- how much more effective
this sort of thing makes you.
Okay. That's extensions for you.
You guys feeling--
Hannon: And I think that's two of our Ps.
Lars Rasmussen: Those are two Ps.
Are you guys feeling inspired yet?
Good. Yeah. Thank you. [applause]
Thank you.
Okay, let's talk a little bit about the protocols
and algorithms, um, underlying Wave.
So we want Wave, as Stephanie said in the beginning,
to be an open system.
Obviously, it's an enormous reason
behind the success of email that it's an open protocol.
Anyone can build an email system.
Anyone can email with each other
regardless of where they got their accounts from.
We want Wave to work the same way.
And so we've designed the algorithms--
we've designed the protocol to, um, uh, to support
what we call "federation."
Which means that any organization
could build their own Wave system,
give accounts to their users even in competition with Google,
and then the system will still ensure
that we can share waves with each other
across these boundaries.
And we want to-- we want to first show you
how that's going to look.
And then we'll talk a little bit
about how far along we are with that.
So let me--so this is very much work in progress.
Everything we've shown you is work in progress.
I'm going to sign in to, um, a different version
of the system that sits inside our corporate network
that has an open port on it for this sort of federation.
And we're going to imagine two separate wave systems.
One is the one Google has built
that you've been looking at all morning.
The other one is from Acme Wave,
which you'll see over on Stephanie's screen.
They have built a separate system.
They're actually giving out accounts
in competition with Google.
You'll realize that their client looks very similar to ours.
That's because we're intending to open source
the lion's share of the code that we used to build our system
so that organizations can get started quickly.
And that's how Acme Wave built their system.
So I'll start a wave over on my account here.
And I will say "Project.
You want to work with me on that thing?"
And then I will add-- what's your account
over on Acme Wave?
Hannon: It's Stephanie. Lars Rasmussen: Stephanie.
Stephanie on Acme Wave.
So Stephanie momentarily has her account--
Hannon: Actually, it's Steph. Lars Rasmussen: There we go.
Hannon: Sorry.
Lars Rasmussen: Stephanie is now a user
over on Acme Wave.
And I'm going to add her to the wave.
Hannon: So I'm going to open up the wave.
And he says, "You want to work with me on that thing?"
And I said, "I think the guys over at Initech can help too."
Lars Rasmussen: [laughs] And so...
And so even though Steph and I have accounts
on different wave systems,
you still get that live
character by character interaction.
The way it works is that from our two clients,
these fine-grained operations
travel to our respective servers,
then it crosses over and goes back up to our client.
And all of the liveness and concurrency control
and live--um, sorry, and real-time resolution
of conflicts happen in an algorithm
that supports this sort of federation.
Let's bring a third wave system into the system.
So we have a couple of friends, Peter and Milton,
that work for a company called Initech.
They have chosen to run their own wave server
in their server closet.
These guys didn't take our code.
Milton is the kind of engineer who prefers building stuff
from scratch.
Hannon: I'm not sure I want to show this, Lars.
Lars Rasmussen: Oh, come on. You show it.
I'm going to add Peter and I'm going to add Milton.
Why don't you want me to show it?
Hannon: I'm afraid this crowd might like their UI
better than ours and it would break my heart.
Lars Rasmussen: Don't break her heart.
[cheers and applause]
Do you have the wave? Do you have the wave?
Hannon: No, 'cause-- Lars Rasmussen: Hmm?
Hannon: Just make another edit.
So now I have the wave.
Lars Rasmussen: So she opens-- Hannon: And if I go into it...
[cheers and applause]
Lars Rasmussen: Thank you.
Hannon: Now I want to show you an important principle
of--an important feature of the protocol.
So I go back to Acme Wave
and I'm going to make a private reply
just like you saw earlier in the demo.
But I'm going to add everyone except Lars.
So I'll say, "What do you think of that Google guy?"
So I'll add all of my friends Peter and Milton.
Even though this wave is owned at Google
and there's copies on Acme Wave and Initech servers,
this private reply is never seen by Google
and cannot be discovered by Lars in any way.
In fact, if Peter and Milton made a private reply
between themselves,
that wave would never leave their server closet.
[applause]
Lars Rasmussen: Thank you.
Hannon: And I just want to go back over to Milton
for a second.
You can see the private reply came in there as well.
Lars Rasmussen: Okay, so let me just say this,
um, federation...
that was hard.
So we're building this thing
with live concurrent editing, and chatting,
and instant messaging, and email, and pictures,
and all that stuff.
And then we throw federation into the mix,
which vastly complicates things.
It would be so much easier, frankly,
from an engineering point of view.
If we could just keep this proprietary,
then we'd control all the servers,
we'd control all the update schedules,
and so on.
But we think it's worth the effort--
and we hope you guys will help us with this.
We think the world will be a much better place
if this is an open system that everyone can build
wave services with it.
And so--thank you.
[applause]
Thank you.
[applause]
And so let me tell you, um, where we're at with it.
So later today, there's a web site--
I'll show you the URL later-- that's going to launch,
which will have-- it's a very early draft
of this protocol.
It'll have, I think, four whitepapers
describing how the system works.
It's going to have, of course,
a public discussion forum
so that we can start debating how this hopefully bright future
of Wave will look.
And then like I said, later,
we're going to open source the lion's share of our code,
which will serve both as a reference implementation
of the protocol,
but also essentially a production ready system
like you saw Acme Wave do.
I'm obviously vastly simplifying it here.
But essentially, you could take that code,
you could put it on top of your own database,
and you would have a simple wave server
and you would be up and running.
Okay. So that's federation.
[laughs]
Hannon: I'm excited about our next demo.
Lars Rasmussen: The next demo is very, very nice.
This is something, um, to end off our demo with.
It's something, uh, a friend of ours
on the Google research team has been building
over the past month.
I saw it myself the first time just a few days ago.
Um, and it blew me away.
So, um, let's see.
I'm going to make sure I'm on the right system here.
I'm back on the sandbox.
So again, we've been doing this demo
on a system where we'll get you guys accounts.
Now, Stephanie is going to log into, um, an account
of one of our colleagues, Alexi.
And then I'm going to start a new wave.
I want to make sure you guys can see
what we're typing.
I'm making this a little bigger like this.
Do you make your font bigger there, Steph?
Hannon: Yeah, I was going to wait
till you started the wave.
Lars Rasmussen: And then I'll start a new wave here.
And I'll add Alexi, one of our colleagues.
And then I'll add my all-time favorite robot
called Rosy.
Yes.
So, um, Alexi is from France.
His English is not terribly good.
Hannon: Aww!
Lars Rasmussen: For the purposes of this demo.
[laughter]
And Rosy is a robot that very kindly translates
what I'm typing.
"Hello, world!"
[applause]
"What do you think
"of this demo--
of this demo?"
And now Alexi's typing in France.
And I get to see him saying, "Ah, yes...
since new--we are in can--use--used--"
Translates word by word, character by character
as he's typing.
Rosy speaks, I believe, 40 languages.
She can translate between any pair of them.
Um, she's quite the thing.
Okay. That finishes our demo.
Oh, thank you.
[cheers and applause] Thank you. Thank you.
Thank you. Thank you. Thank you.
Thank you.
Thank you. Thank you. Thank you. Thank you.
[cheers and applause] Thank you. Thank you.
Hannon: I think they like it. Lars Rasmussen: They like it.
You guys like it? Okay. Thank you.
Hannon: Thank you. Wow. Thank you. [laughs]
[cheers and applause] Lars Rasmussen: Thank you.
Thank you. [whistling and cheers]
Hannon: They have a lot of skills.
[applause]
I think... Lars Rasmussen: Thank you.
Hannon: If they really liked it...
[man shouting indistinctly]
If you guys--you guys really liked it,
you could do a wave.
Lars Rasmussen: So, so, so-- Hannon: Anyone?
It's time to do the wave. Lars Rasmussen: So--
So, um, what do you guys think?
Okay. [laughs]
So just-- Hannon: Thank you for filming.
Lars Rasmussen: Just to summarize,
um, what we like to think we've built here
is really quite a simple communication object
called a wave.
And we've showed how you can use it
for quite a lot of different types
of communication and collaboration.
We showed you how plain vanilla email-type conversations
could be done.
We showed you how instant messaging conversations
could be done.
We showed you how easy it is to share photos
and other rich media types with it.
We introduced a platform that we're hoping you guys
will pick up
that will let you build things like blogging sites,
discussion groups, uh, letting your users
discuss images on your web site.
With the editing functionality,
you can see you can build Wiki-like sites
with that as well.
We showed you how you can use waves
to collaboratively edit documents.
We showed you a rich set of extension APIs
that could let you build everything from games,
through collaborative applications inside a wave,
through integrations with other communication systems.
We showed you Twitter.
We're hoping you guys will build gateways
from Wave to email, to Facebook,
to instant messaging, and so on.
We showed you how you can use these extension APIs
to also integrate waves into work flows.
Whew. Okay.
And now...
Hannon: Just going to bring up...
Lars Rasmussen: For the administrativia
at the end,
I want to-- I want to just point out--
I forgot that earlier
that we have three breakout sessions
that I don't believe has been in the program so far.
Um, the first one at noon is about, um, the API.
If you can only come to one of our breakout sessions,
please make it that one.
The next one is a little run-through
of some of the more exciting pieces of technology
under the hood.
We're going to show you from the top of the--
top of the stack how our amazing spell-checker works,
how the rich text editor in the browser works,
and the algorithms that we used underneath
to do all the concurrency, control,
and conflict resolution and so on.
And then at 2:30,
one of our client team tech leads
are going to explain how we build
the web application with the Google Web Toolkit,
why we love it so much,
and what some other future plans are.
We also have in Room B4
from noon till 4:30 office hours
where you guys can come talk to the team in blue here.
They love talking.
And then I wanted to show you,
um, three important URLs here.
So for starters, wave.google.com
is going to be the home of Google Wave
when we launch it later in the year.
If you go there now or when the site goes live
in a little bit,
um, there is a sign-up form there
where you can sign up for notifications
when we launch it.
There's also going to be a beautifully edited video
of today's keynote.
Um, the API site is going to go live...
man: Already live.
Lars Rasmussen: The API site is already live.
No wonder I couldn't-- couldn't get a connection
to my mobile phone before.
It's at code.google.com/apis/wave.
It's got the API. It's got the documentation.
It's got the code samples we showed before.
Actually, I should just mention really quickly
the bug--the--the issue tracker integration
we showed at the end,
we have to cheat ever slow slightly
by using, uh, using an internal API
to the issue tracker.
I think they're working really hard
making APIs available.
So that particular sample is not going to be there
for--for a wee while.
Lastly, at waveprotocol.org,
you'll find the protocol draft,
the whitepapers, the discussion forum,
and so on if you guys are interested
in helping us, um, build that wave
to be an open system.
Hannon: You should tell them about the email.
Lars Rasmussen: Yes.
And the way you're going to get an account
is you'll receive an email later today
that explains where you can go and sign up
for an account,
which you will get shortly.
Okay. So, look, the last thing I want to say,
um, you can probably imagine it felt kind of nice
that you guys seemed to like what we built.
Um, one of the-- one of the best times
in my professional life
was after we launched Google Maps back in 2005
and developers started doing all kinds of crazy things
with Google Maps.
I hope some of you are here.
This was even before we had an API on Maps.
We scrambled to put an API on Maps.
And it's, uh, it's-- it's become very popular
and it's a huge driving force of success.
We learned a very important lesson
that--that you guys, developers,
are incredibly important to the success
of the kind of products that we build.
And so I can't wait to see what you guys
are gonna come up with.
Um, please, please, please, check it out.
Build cool stuff. Surprise us.
I just can't wait to see what you come up with.
Thank you very much.
[cheers and applause]