Google Wave: Under the hood
Translations of this material:
- into Russian: Google Wave: Под капотом. Translation complete.
-
Submitted for translation by ruguevara 08.07.2009
Published 2 years, 6 months ago.
Text
Hannon: Welcome.
Thank you for coming
to our session,
Google Wave: Under the Hood.
We hope you enjoyed
the demo this morning
And we're really excited
to tell you
about the technology
that makes this all possible.
We have four amazing engineers
coming up here to talk to you
starting with David Wang,
then Alex Mah,
then Dan Danilatos,
then Casey Whitelaw.
They're going to show you
those algorithms and technology
that make the real time
collaboration possible.
They're going to talk
about the extensibility
of our editor,
and--and how we built it,
and what's special about it.
And finally, you saw
our spell checker this morning.
And, um, Casey will come
and talk about,
uh, the technology
and--and what makes that
possible.
And we just really, really
appreciate you being here
and for all your interest
and excitement
about Google Wave.
I just want to remind you
before I turn it over to them
that you can give feedback
at haveasecond--
haveasec--sorry--
haveasec.com/io--
feedback about this sessions,
any of the other Wave sessions,
and we really look forward
to hearing from you.
So here's David.
Wang: Thank you,
Stephanie.
All right.
So by now
you're probably thinking
what are Waves in terms
of a technology perspective?
Waves are essentially
hosted XML documents.
Um, they can be used
to represent rich text content
and system data as well.
Waves also support
live collaboration,
which you've seen
in Lars' demos.
And that means being able
to look at the same Wave
on multiple clients.
And in one client,
being able to type.
And on the other clients,
being able to see those typing
coming out
character by character
and in real time as well.
Wave is also a robust
and extendable platform
which allows you to build
extensions on top.
And I hope that you visited
the, uh, Extensions talk
previously.
Okay. So in this talk,
we'll first talk
about concurrency control,
which makes the live,
collaborative editing possible.
And then we'll talk
about the editor,
which actually allows you
to input and display
the live characters.
And at the very end
of the talk,
uh, we'll tell you
about our cool spelling agent,
um, which is enabled
by this web technology.
All right,
so let me start off
by talking
about concurrency control.
So some of you guys
who's, um, familiar
with concurrent editors,
the real--you'll realize
there's actually a number
of concurrent editors
on a--um, out there already.
There's, uh, EtherPad
and there's Subetha Edit.
They support live,
concurrent editing,
but they don't support
rich text.
There are other
rich text editors
like Google Documents.
But it doesn't really support
live and concurrent editing.
For Google Wave,
we wanted both.
And so we looked
to this technology
called Operational
Transformation.
And our starting point
was the paper called
"High-Latency,
Low-Bandwith Windowing
in the Jupiter
Collaboration System."
Two of these two--
um, two of the four authors,
uh, Mike--uh, Michael Dixon
and John Lamping,
actually worked for Google
and they've been very helpful
to us in the early establishment
of our concurrency control.
So how does Operational
Transformation work?
So let me explain it
through a very simple example.
Imagine there is
a client and server
who wants to concurrently modify
a single piece of text ABCDE.
Now imagine the client
wants to delete character four.
Uh, in this case,
um, you want to delete D.
So the client deletes
the character
and sends the operation
on the wire.
And the client
is now at a state ABCE.
Now the client sends
an operational wire
because it's much cheaper
than sending the entire document
on the wire.
Um, the server,
on the other hand,
wants to actually delete
character two.
So it goes ahead
and deletes it.
Ends up in a state A, C,
uh, D and E.
And now those two operations
cross on the wire.
If the server goes
and naively executes
the client operation
"delete character four,"
the server ends up
in a state A, C and D.
It didn't actually perform
the correct operation
at the end of the day
because it deleted
© Google Inc.. License: Creative Commons
