Сайт Романа ПарпалакаБлог20110517

Совместное редактирование без блокировок

17 мая 2011 года, 13:24

Рассмотрим ситуацию, когда над неким сайтом (или другим проектом) работает коллектив авторов, и подумаем над такой задачей: как обеспечить возможность совместного редактирования документов.

Если над такой возможностью вообще не задумываться, то в ситуации, когда два автора начинают редактировать один и тот же документ, правки одного из авторов скорее всего потеряются.

Эту проблему можно решать при помощи блокировок, как сделано, например, в движке DokuWiki. Когда документ открыт для редактирования одним пользователем, другим пользователям запрещено его редактировать.

Едва ли решение с блокировками можно признать удачным. Если автор начинает редактировать документ, а потом отвлекается, нужно отбирать блокировку по по истечению какого-либо времени (в DokuWiki, кажется, 15 минут), чтобы документ не остался заблокированным навечно. Тогда изменения отвлекшегося автора могут быть утеряны.

Я придумал другой метод, который собираюсь реализовать в своем движке сайтов S2. Этот метод особенно оправдан, если совместное редактирование возникает достаточно редко. Например, редактор должен внести небольшие исправления в документ, написанный автором.

В таких ситуациях вместо надоедливых сообщений о блокировках нужно просто проверять, изменялся ли документ другими пользователями в промежутке между открытием и сохранением. Если изменялся, мы не сохраняем документ, и выводим пользователю сообщение о том, что он должен открыть новую версию документа и самостоятельно перенести туда дописанные фрагменты текста.

Блокировки держат пользователя в напряжении (нельзя отвлекаться больше, чем на 15 минут) и не решают задачу совместного редактирования до конца: всё равно остается возможность возникновения конкурирующих правок. В моем методе ничто без надобности не отвлекает пользователя от его задач.

Поделиться

Конституционный суд Ctrl Радуга

Читайте также

Восстановление текстов в новой версии S2
В новой версии движка S2, которую я выпустил вчера, появилось очень важное нововведение. Теперь он умеет восстанавливать несохраненные тексты после непредвиденных ситуаций вроде зависаний или падений браузера, случайного закрытия окна и т. д.
2011
Опять про SiteX
SiteX назвали конкурентом движка блогов с названием «Явь» (правда, что он собой представляет и каковы условия его использования — неясно). Кстати, я всё еще не передумал сделать SiteX оупенсорсом.
2009

Комментарии

#1. 17 мая 2011 года, 20:12. Алик Кириллович пишет:
Для совместного редактирования документов без блокировок разработан специальный формализм «Operational transformation».

Соответствующие алгоритмы преобразуют потоки операций редактирования каждого участника, так, чтобы:
во-первых, итоговый документ сохранял консистентность (согласованность);
— а во-вторых, у каждого пользователя была актуальная версия этого документа.

См., например:
— Достаточно подробно по-русски в Википедии: http://ru.wikipedia.org/wiki/Операциональн … бразование
— Operational Transformation Frequently Asked Questions and Answers: http://www3.ntu.edu.sg/home/czsun/projects/otfaq/


OT используется во многих системах совместной работы над документами, например в Google Wave. Реализация OT в Wave интересна тем, что поддерживает редактирования не только простого текста, но и структурированный форматированных HTML-документов.

О реализации OT в системе Google Wave можно прочитать на соответствующем сайте «Google Wave Federation Protocol» (http://www.waveprotocol.org), в частности в статье «Google Wave Operational Transformation» (http://www.waveprotocol.org/whitepapers/op … -transform).
#2. 17 мая 2011 года, 20:18. Алик Кириллович пишет:
Но, хотя, конкретно в вашем случае, реализация Operational transformation м.б. стрельбой из пушек по воробьям.

Если в вашей CMS совместное редактирование возникает достаточно редко (и уж точно не в реальном времени), то, возможно, предложенная вами эвристика будет самым оптимальным и элегантным решением.
#3. 17 мая 2011 года, 21:44. пишет:
Алик, спасибо за ссылки, прочитаю.

Однако в S2 я такое делать, скорее всего, не буду. Ведь нельзя объять необъятное. Так что пусть он остается простым движком.
#4. 18 мая 2011 года, 04:24. Денис пишет:
Да и в любой системе контроля версий (svn, git) такой вопрос рассматривается и решается. Однако, думаю, это будет слишком для обычного движка. =)

Оставьте свой комментарий


Формулы на латехе: $$f(x) = x^2-\sqrt{x}$$ превратится в $$f(x) = x^2-\sqrt{x}$$.
Выделение текста: [i]курсивом[/i] или [b]жирным[/b].
Цитату оформляйте так: [q = имя автора]цитата[/q] или [q]еще цитата[/q].
Других команд или HTML-тегов здесь нет.

Записи