gchp / iota

A terminal-based text editor written in Rust
MIT License
1.63k stars 81 forks source link

Operational Transformation API? #105

Open vinipsmaker opened 9 years ago

vinipsmaker commented 9 years ago

Operational Transformation might help to implement collaborative features.

http://dl.acm.org/citation.cfm?id=66926.66963&coll=portal&dl=ACM

crespyl commented 9 years ago

That's a really interesting read! If you haven't already seen it, you might be interested in the transaction log system we're using for undo/redo support. @pythonesque had some really interesting ideas on using transaction semantics for all editing operations, which he wrote up in #52.

Do you know of any open source projects using a system like this?

vinipsmaker commented 9 years ago

Oh, I found the Google Drive/Docs links about Operational Transformation:

The Wave protocol has some extensions to the Operation Transformation algorithm. However, checking the documentation, they see more important in the context of network-facing applications: http://www.waveprotocol.org/whitepapers/operational-transform

Do you know of any open source projects using a system like this?

Google Wave is open source: http://incubator.apache.org/projects/wave.html

vinipsmaker commented 9 years ago

And here's a lib from an ex-Google wave engineer: http://sharejs.org/

The opencoweb framework also implements OT: http://opencoweb.org/ocwdocs/intro/openg.html

vinipsmaker commented 8 years ago

One of the developers behind IPFS pointed CRDT as a more general approach than Operational Transformation.

https://github.com/dominictarr/crdt

http://hal.upmc.fr/docs/00/55/55/88/PDF/techreport.pdf

pythonesque commented 8 years ago

CRDTs are a fantastic approach for some problems (assuming you can find commuting operations). There's also been very useful work on symmetric lenses: http://www.cis.upenn.edu/~bcpierce/papers/symmetric.pdf.