Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The Science of Etherpad
Search
Tim Cameron Ryan
May 14, 2012
Programming
2
64
The Science of Etherpad
How does Operational Transform work?
Tim Cameron Ryan
May 14, 2012
Tweet
Share
More Decks by Tim Cameron Ryan
See All by Tim Cameron Ryan
BayNode Meetup June 2014
tcr
1
81
Elevator redesign: Team Unibros Final Presentation
tcr
0
430
Other Decks in Programming
See All in Programming
CSC307 Lecture 14
javiergs
PRO
0
480
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
680
Swift ConcurrencyでよりSwiftyに
yuukiw00w
0
270
nuget-server - あなたが必要だったNuGetサーバー
kekyo
PRO
0
280
AI活用のコスパを最大化する方法
ochtum
0
230
AI Assistants for Your Angular Solutions
manfredsteyer
PRO
0
150
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
470
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
300
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
120
Fundamentals of Software Engineering In the Age of AI
therealdanvega
2
260
CS教育のDX AIによる育成の効率化
niftycorp
PRO
0
140
The free-lunch guide to idea circularity
hollycummins
0
270
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
140
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.9k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.4k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
560
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
150
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
Building Applications with DynamoDB
mza
96
7k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
470
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
150
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.4k
Context Engineering - Making Every Token Count
addyosmani
9
760
Transcript
THE SCIENCE OF ETHERPAD MAKING ANY DOCUMENT COLLABORATIVE, ANYWHERE
Operations
app
apple
“app” + ”le”
app Operation 1 1. insertCharacter “a” 2. insertCharacter “p” 3.
insertCharacter “p“
apple Operation 2 1. retain (skip character) 2. retain (skip
character) 3. retain (skip character) 4. insertCharacter “l” 5. insertCharacter “e“
applecore Operation 2 1. retain (skip character) 2. retain (skip
character) 3. retain (skip character) 4. retain (skip character) 5. retain (skip character) 6. insertCharacter “c” 7. insertCharacter “o“ 8. insertCharacter “r“ 9. insertCharacter “e“
Composition
appl Operation 1 1. retain (skip character) 2. retain (skip
character) 3. retain (skip character) 4. insertCharacter “l” apple Operation 2 1. retain (skip character) 2. retain (skip character) 3. retain (skip character) 4. retain (skip character) 5. insertCharacter “e”
Operation 1+2 1. retain (skip character) 2. retain (skip character)
3. retain (skip character) 4. insertCharacter “l” 5. insertCharacter “e“ appl apple
Concurrency
app app CLIENT A CLIENT B
appl appe CLIENT A CLIENT B
appl Operation A 1. retain (skip character) 2. retain (skip
character) 3. retain (skip character) 4. insertCharacter “l” appe Operation B 1. retain (skip character) 2. retain (skip character) 3. retain (skip character) 4. insertCharacter “e” CLIENT A CLIENT B
appl Operation B 1. retain (skip character) 2. retain (skip
character) 3. retain (skip character) 4. insertCharacter “e” appe Operation A 1. retain (skip character) 2. retain (skip character) 3. retain (skip character) 4. insertCharacter “l” CLIENT A CLIENT B
appel Operation B 1. retain (skip character) 2. retain (skip
character) 3. retain (skip character) 4. insertCharacter “e” apple Operation A 1. retain (skip character) 2. retain (skip character) 3. retain (skip character) 4. insertCharacter “l” CLIENT A CLIENT B
appel apple CLIENT A CLIENT B
Operational Transform
“A theoretical framework of concurrency control” that “provides a mechanism
for sanely resolving [editing] conflicts so that neither user intervention or locking become necessary.” A mechanism to “transform” two operations in conflict, resulting in two new operations which bring both clients into a common state.
app app CLIENT A CLIENT B SERVER
appl Operation A 1. retain (skip character) 2. retain (skip
character) 3. retain (skip character) 4. insertCharacter “l” CLIENT A SERVER 1 appe Operation B 1. retain (skip character) 2. retain (skip character) 3. retain (skip character) 4. insertCharacter “e” CLIENT B 2
Operation A 1. retain (skip character) 2. retain (skip character)
3. retain (skip character) 4. insertCharacter “l” SERVER TRANSFORM Operation B 1. retain (skip character) 2. retain (skip character) 3. retain (skip character) 4. insertCharacter “e” Operation B` 1. retain (skip character) 2. retain (skip character) 3. retain (skip character) 4. retain (skip character) 5. insertCharacter “e” Operation A` 1. retain (skip character) 2. retain (skip character) 3. retain (skip character) 4. insertCharacter “l” 5. retain (skip character)
appl Operation B` 1. retain (skip character) 2. retain (skip
character) 3. retain (skip character) 4. retain (skip character) 5. insertCharacter “e” CLIENT A SERVER appe Operation A` 1. retain (skip character) 2. retain (skip character) 3. retain (skip character) 4. insertCharacter “l” 5. retain (skip character) CLIENT B B` A`
apple Operation B` 1. retain (skip character) 2. retain (skip
character) 3. retain (skip character) 4. retain (skip character) 5. insertCharacter “e” CLIENT A SERVER apple Operation A` 1. retain (skip character) 2. retain (skip character) 3. retain (skip character) 4. insertCharacter “l” 5. retain (skip character) CLIENT B B` A`
apple apple CLIENT A CLIENT B
CLIENT A CLIENT B A1: retain 3, insert “l” Broadcast
A1 Apply A1` SERVER
CLIENT A CLIENT B SERVER A1: retain 3, insert “l”
B1: retain 3, insert “e” Transform A1 x B1 Apply A1` Apply B1`
CLIENT A CLIENT B SERVER A1: retain 3, insert “l”
B1: retain 3, insert “e” A2: retain 4, insert “core” Transform A1 x B1 Apply A1` Transform A2 x B1` Apply B1`` Broadcast A2 Apply A2`
CLIENT A CLIENT B SERVER A1: retain 3, insert “l”
B1: retain 3, insert “e” A2: retain 4, insert “core” Transform A1 x B1 B2: retain 4, insert “sauce” Transform B2 x A1` Apply A1`` Transform A2 x B1` Apply B1`` Transform A2` x B2` Apply A2`` Apply B2``
CLIENT A CLIENT B SERVER A1: retain 3, insert “l”
B1: retain 3, insert “e” A2: retain 4, insert “core” Transform A1 x B1 B2: retain 4, insert “sauce” Transform B2 x A1` Apply A1`` Transform A2 x B1` Apply B1`` Transform A2` x B2` Apply A2`` Apply B2``
Markup
big apple
big apple
<i>big</i> <b>apple</b>
<i>big</i> <b>apple</b>
<i>big</i> <b>apple</b> Operation 1. insertStartTag “i” 2. insertCharacter “b” 3.
insertCharacter “i” 4. insertCharacter “g” 5. insertEndTag “i” 6. insertCharacter “ ” 7. insertStartTag “b” 8. insertCharacter “a” 9. insertCharacter “p” 10. insertCharacter “p” 11. insertCharacter “l” 12. insertCharacter “e” 13. insertEndTag “b”
a big word a big word CLIENT A CLIENT B
a <b>big</b> word Operation A 1. retain 2 2. insertStartTag
“b” 3. retain 3 4. insertEndTag “b” a biiiiig word Operation B 1. retain 3 2. insertCharacters “iiii” CLIENT A CLIENT B
a <b>big</b> word Operation B` 1. retain 4 2. insertCharacters
“iiii” a biiiiig word Operation A` 1. retain 2 2. insertStartTag “b” 3. retain 5 4. insertEndTag “b” CLIENT A CLIENT B
a <b>biiiiig</b> word Operation B` 1. retain 4 2. insertCharacters
“iiii” a <b>biiiiig</b> word Operation A` 1. retain 2 2. insertStartTag “b” 3. retain 5 4. insertEndTag “b” CLIENT A CLIENT B
Preserving Intent
CLIENT A CLIENT B Desired Word1 Word2 Word3 <ol> <li>
Word4 Word5 Word6 </li> </ol> <ol> <li> Word1 Word2 Word3 Word4 </li> </ol> Word5 Word6 <ol> <li> Word1 Word2 Word3 Word4 Word5 Word6 </li> </ol>
CLIENT A CLIENT B Desired Word1 Word2 <p> Word3 Word4
Word5 Word6 </p> <h1> Word1 Word2 Word3 Word4 </h1> Word5 Word6 <h1> Word1 Word2 </h1> <p> Word3 Word4 </p> <p> Word5 Word6 </p>
CLIENT A CLIENT B Desired Word1 Word2 Word3 <i> Word4
Word5 Word6 Word7 Word8 </i> <b> Word1 Word2 Word3 Word4 Word5 </b> Word6 Word7 Word8 <b> Word1 Word2 Word3 </b> <bi> Word4 Word5 </bi> <i> Word6 Word7 Word8 </i>
• retain • deleteCharacter • deleteStartTag(tag, attrs) • deleteEndTag() •
deleteEmptyTag() • insertCharacter • insertStartTag(tag, attrs) • insertEndTag() • insertEmptyTag() • modifyAttrs(attrs) Deletion Phase Insertion Phase OPERATION ATOMS
Containers like: preserve unlike: priority Blocks like: priority unlike: priority
Styles like: preserve unlike: merge Inline <ul> <li> <ol> <blockquote> <p> <div> <h1> <h2> <h3> <pre> <b> <i> <span> <u> <s> “text” <br> DOCUMENT SCHEMA