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. 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 <i>Transformers.</i> 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
<i>Confessions of a Shopaholic.</i> 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: <i>Star Wars.</i> Lars Rasmussen: Star Wave.
[laughs] Hannon: Not on purpose.
[laughs] Lars Rasmussen: <i>Confessions</i>
<i>of a Shopaholic.</i> 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 <i>Star Trek's</i> 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]
Goodness. I was absolutely blown away by this demo - and I say that as somebody who very quickly switches off and rarely watches these things all the way through, so for me to decide to spend my Friday night watching a few geeks talking about something for an hour and twenty is unprecedented.
This is without a doubt a complete rethinking of how to do email/IM/collabarorative networking. The fact that it is all done in the browser is equally as amazing - I could imagine writing a client/server system to do this, but it wouldn't be easy. Google Web Toolkit is an impressive piece of work if it allows this sort of thing to be written on top of it so the work is done by the browser.
But the real meat came late in the demo - the applications that can be written above Wave using their API that can interface with other systems, such as (as was demonstrated) twitter, or bug tracking software.
For me the most impressive thing came right at the end - translation in real-time: an app written using their API that interfaced with Google Translate and facilitated the real time translation of text. And from the sound of it it didn't take an experienced Translate developer too long to write using their API.
This was truly impressive. It wasn't a cliched Jobs demo where we were shown something mediocre that was dressed up with razzmattaz to seem to be bigger than it really was. It was a pretty poor presentation by real people who forgot what they wanted to say - but of a remarkable piece of work. This should be a world changer, and I hope that it is embraced. Though I have to wonder how much will be open sourced given that the words "lion's share" were mentioned a few times.
Wow, I'm surprised how much negativity there seems to be so far in these comments. I was going to reply to one, then I saw another, and another.
Privacy: -Build your own server, your waves are only shared with whom you communicate
Bloated: -I'm pretty sure their code was 200K?
Tries to be too much: -I think it more tries to better represent communication as a generalization. The extension api's could become an overload - but they're extensions - you have the choice to install or not install them.
I'm impressed.
Google gets it. I think this has a shot to replace email long-term, because Google realized it needs to be a protocol, not a Google-tied webservice.
This is going to revolutionize the way I ignore people on the Internet.
I can picture Steve Ballmer tossing his chairs right about now.
This is fantastic.
The only real problem that I see is the complexity. How the hell do you describe this in one sentence to a friend, or your parents, or a classmate? Sure, it's like email, but once you add in the collaboration, live feedback, etc., blog integration, etc., it becomes something quite complex for a regular person to use/understand.
But it has massive potential. If all my friends used this instead of email, instead of facebook messages, instead of instant messages, this would be an incredibly helpful tool. One example is event organizing. Somebody send out a message wondering if there is interest in going out for dinner with the group, and people collaborate on different parts of the message to decide on things like location and time.
My hopes are up.
I wish google did a better job with this presentation, though... For such a complex and innovative tool, they should have made it Jobs-like.
Haha, did you notice, when it crashes at 13:53, the error?
"Ah, curse your sudden but enevitable betrayal!" (lower left hand corner in red).
Honestly, I think semi-saddistic error messages like that are the number #1 sign of good programers. All seasoned coders are saddists :D
This is probably going to be remembered as the first Web 3.0 app.
Next week, Microsoft will announce MS Ripple, a closed source wave competitor, which, unfortunately, won't be compatible with wave, and will cost $5k per license per year.