Google Wave: Одновременное совместное редактирование

David Wang, “Google Wave: Live Collaborating Editing”, public translation into Russian from English More about this translation.

Translate into another language.

0:00:05,634 (3.5s)

Ванг: Привет. Я Дэвид. Я из команды Google Wave.

0:00:09,200 (2.0s)

Я работаю над одновременным совместным редактированием,

0:00:11,234 (2.2s)

которое вы, вероятно, видели в последнем демо.

0:00:13,434 (2.6s)

Как же мы этого добились?

0:00:16,133 (1.5s)

А добились мы этого,

0:00:17,667 (3.1s)

используя технологию, называемую операционное преобразование.

0:00:20,801 (3.3s)

Это весьма активная область научных исследований

0:00:24,167 (2.5s)

в течении последних десяти лет.

0:00:26,734 (2.8s)

И мы взяли этот алгоритм

0:00:29,534 (4.1s)

и расширили его, чтобы предоставить вам одновременное совместное редактирование,

0:00:33,667 (1.8s)

к которому вы уже так привыкли.

0:00:35,467 (1.4s)

Как это всё работает?

0:00:36,934 (1.9s)

Давайте я покажу на примере.

0:00:38,901 (3.5s)

Представьте, что у нас есть клиент...

0:00:42,467 (3.7s)

и сервер...

0:00:46,234 (3.3s)

и они стартуют в одинаковом состоянии -

0:00:49,567 (2.3s)

A,B,C, и D

0:00:54,567 (3.4s)

Теперь представьте, что клиент хочет вставить букву

0:00:57,968 (2.4s)

между C и D.

0:01:00,467 (4.9s)

И вот он вставляет, скажем, X между символами C и D.

0:01:05,434 (3.0s)

А сервер вообще-то хотел удалить символ B.

0:01:08,534 (3.7s)

И теперь он пришёл к состоянию A, C и D.

0:01:12,267 (2.2s)

Теперь, всё это происходит одновременно.

0:01:14,534 (2.0s)

И как же они сообщают о том,

0:01:16,634 (3.2s)

что сделали всё это с обеих сторон?

0:01:19,901 (2.3s)

Они пересылают действие,

0:01:22,300 (2.1s)

которое мы называем операцией, по каналу.

0:01:24,434 (8.0s)

Так, клиент посылает вставку X в позиции 0,1,2 и 3.

0:01:32,467 (3.1s)

А сервер посылает операцию

0:01:35,601 (5.5s)

удаления символа B в позици 0 и 1.

0:01:41,200 (4.1s)

Теперь, когда другая сторона получает сообщение,

0:01:45,367 (3.0s)

они могли бы слепо это выполнить, если бы захотели.

0:01:48,400 (1.4s)

Но что же произойдёт

0:01:49,834 (2.1s)

если слепо выполнить операцию?

0:01:51,934 (4.0s)

Так, если бы сервер выполнил операцию клиента,

0:01:55,934 (2.3s)

вставил "X" вслепую,

0:01:58,234 (2.5s)

получилось бы состояние A,C,D и X.

0:02:00,801 (3.0s)

но это совершенно не то, что хотел клиент.

0:02:03,801 (1.4s)

То, что нам нужно сделать,

0:02:05,300 (3.2s)

это пройти процесс, называемый преобразованием.

0:02:08,501 (1.5s)

Происходит то, что сервер

0:02:10,033 (2.1s)

берёт операцию клиента

0:02:12,200 (3.3s)

и преобразовывает её вместе со своей операцией.

0:02:15,567 (2.2s)

в результате получается новая операция,

0:02:17,801 (3.5s)

которая вставляет символ X уже в позицию 2.

0:02:21,400 (2.1s)

потому что он вычел позицию

0:02:23,534 (1.9s)

удалённого у себя символа.

0:02:25,501 (2.1s)

Теперь сервер применяет эту операцию,

0:02:27,667 (4.7s)

и получается состояние A,C,X, и D.

0:02:32,400 (1.7s)

Клиент, со своей стороны,

0:02:34,133 (2.3s)

делает точно такие же преобразования.

0:02:36,467 (2.1s)

Однако, в этом случае, получается

0:02:38,601 (4.7s)

что операция преобразовалась в точно такую же операцию.

0:02:43,334 (3.2s)

Клиент оказывается с удалённой B,

0:02:46,567 (2.0s)

c A,C,X и D.

0:02:48,667 (1.6s)

Как видно,

0:02:50,300 (2.6s)

теперь и клиент и сервер

0:02:52,968 (2.3s)

оказываются в одном и том же состоянии,

0:02:55,334 (2.9s)

несмотря на то, что они выполняли операции одновременно

0:02:58,300 (2.6s)

и в разных местах.

0:03:00,934 (2.8s)

Так почему это оживление так важно?

0:03:03,767 (1.8s)

Давайте возьмём аналогию, допустим...

0:03:05,567 (3.1s)

Представьте, вы с другом пошли в кафе,

0:03:08,734 (2.7s)

и разговаривали друг с другом.

0:03:11,467 (3.1s)

И тут вы закрываете уши и говорите -

0:03:14,601 (2.9s)

"Подожди, сперва закончи своё предложение

0:03:17,501 (2.8s)

а потом говори мне его"

0:03:20,334 (2.4s)

И это именно то, что у нас сейчас есть

0:03:22,734 (1.5s)

в мгновенных сообщениях,

0:03:24,234 (2.2s)

где кто-нибудь набирает сообщение,

0:03:26,501 (1.4s)

а вы ждёте пока он закончит.

0:03:28,000 (1.3s)

Вы ждёте, и ждёте, и ждёте.

0:03:29,367 (1.5s)

Но в действительности вы же не ждёте в кафе

0:03:30,868 (1.5s)

пока ваш друг закончит говорить,

0:03:32,467 (1.3s)

до того, как начнёте слушать его, не так ли?

0:03:33,834 (3.1s)

Это бы серьёзно нарушило течение диалога.

0:03:37,033 (3.9s)

Делая вещи живыми и одновременными,

0:03:40,934 (1.8s)

вы получаете очень оживлённый диалог,

0:03:42,767 (2.6s)

будто вы на самом деле говорите с человеком,

0:03:45,400 (2.5s)

и вы можете разговаривать очень быстро.

0:03:47,934 (3.5s)

Одна из важных вещей, которые мы сделали в Google Wave,

0:03:51,501 (4.0s)

это выбор архитектуры клиент/сервер.

0:03:55,501 (4.0s)

Это очень интересная научная область -

0:03:59,567 (5.4s)

использование полностью клиентской системы, без всяких серверов.

0:04:04,968 (3.3s)

Тем не менее, мы намеренно выбрали архитектуру клиент/сервер,

0:04:08,300 (3.2s)

потому что она позволяет обслуживать огромное количество клиентов,

0:04:11,501 (2.8s)

без усложнения системы.

0:04:14,400 (3.0s)

Представьте, например,

0:04:17,400 (2.9s)

у нас есть клиент, клиент 1,

0:04:20,300 (2.2s)

соединяется с сервером,

0:04:22,501 (4.6s)

и другой клиент соединяется с сервером.

0:04:27,167 (5.3s)

И теперь они взаимодействуют с сервером...

0:04:32,467 (2.5s)

связываясь с ним, и используя сервер

0:04:35,033 (1.6s)

как точку ретрансляции.

0:04:36,701 (1.9s)

Что вы c этого имеете?

0:04:38,634 (2.5s)

А получаете вы, во-первых,

0:04:41,200 (4.1s)

одну систему, которая содержит источник истины.

0:04:45,300 (3.5s)

И даже если все клиенты рухнут, или уйдут в оффлайн на долгое время,

0:04:48,868 (3.4s)

есть одно место, откуда вы можете забрать документ.

0:04:52,367 (2.2s)

Другой важный момент в том,

Pages: ← previous Ctrl next
1 2

© Google

Original (English): Google Wave: Live Collaborating Editing

Translation: © qmax, iBog, vadbars, nashev, Руслан Гроховецкий, Cannoneer .

translated.by crowd

Like this translation? Share it or bookmark!