Perpustakaan Transformasi Operasional?

102

Saya mencari perpustakaan yang memungkinkan saya untuk menyinkronkan teks secara real-time antara banyak pengguna (ala Google Docs).

Saya telah menemukan Transformasi Operasional, yang tampaknya sesuai dengan kebutuhan saya. Karena itu, saya mengerti inti dari PL, tetapi bukan matematika atau implementasi PL.

Jadi, saya bertanya-tanya apakah ada pustaka Javascript drag'n'drop yang akan menghubungkan ke area teks, menghasilkan transformasi, lalu mengizinkan saya menerapkan transformasi tersebut ke klien lain?

(Saya sudah mendapatkan sumber Etherpad, tetapi saya tidak bisa mengetahuinya. Jika ada yang bisa menunjukkan bagaimana memanfaatkan implementasi OT Etherpad, itu akan bagus juga!)

gamers2000
sumber
Editor teks kolaboratif yang diberdayakan oleh Firebase bernama Firepad - firepad.io Periksa kodenya untuk mendapatkan inspirasi github.com/FirebaseExtended/firepad
Tharanga Hewavithana

Jawaban:

57

Saya pikir bagian dari implementasi OT Google Wave adalah Open Source (dan lebih banyak bagian akan datang).

Saya tidak yakin apakah ini yang Anda cari, tetapi alternatif untuk OT adalah Sinkronisasi Diferensial :

Jörg W Mittag
sumber
6
Diff-Match-Patch, dikombinasikan dengan kertas Sinkronisasi Diferensial oleh Neil Frasier ( neil.fraser.name/writing/sync ) berhasil! Terima kasih banyak karena telah mengarahkan saya ke arah yang benar.
gamers2000
Dari apa yang saya pahami, Diff-Match-Patch, dan dengan ekstensi, MobWrite (karena yang terakhir menggunakan yang pertama) hanya mendukung teks, bukan perubahan biner. Namun, ada demo kolaborasi dengan elemen formulir HTML, yang menunjukkan bahwa itu tidak hanya mendukung teks biasa.
gamers2000
Ada kabar baik tentang "dan lebih banyak bagian akan datang" sejak jawaban ini?
bertie
3
Sebenarnya Google-Diff-Match-Patch bertujuan untuk menerapkan metode alternatif untuk Transformasi Operasional, yaitu Sinkronisasi Diferensial, untuk memahami perbedaannya Anda dapat membaca dokumen Neil Fraser dari DS: neil.fraser.name/writing/sync (OT dirujuk dalam dokumen ini sebagai kelulusan Peristiwa). Mereka adalah dua metode yang sangat berbeda.
Benja
5
ini sudah tua, tetapi jika Anda keberatan, saya memiliki sumber terbuka github.com/benjamine/JsonDiffPatch itu menggunakan Diff-Match-Patch Neil untuk string panjang, tetapi berfungsi untuk grafik objek js sewenang - wenang
Benja
44

Salah satu mantan insinyur Wave telah merilis implementasi Coffeescript dari algoritme pengeditan kolaboratifnya yang disebut ShareJS, sekarang bernama ShareDB .

hawkeye
sumber
1
ShareJS mungkin lebih sederhana dan lebih baik didokumentasikan dan lebih dapat digunakan kembali daripada apa yang dilakukan MobWrite dengan Diff dan Patch Google.
Luke Stanley
33

Saya akan meringkas solusi yang saya temukan.

  • Transformasi Operasional: Misalnya

    • Google Wave OT. Pendekatan tersebut didasarkan pada apa yang disebut pendekatan Jupiter.
    • ShareJs. Berdasarkan algoritma OT yang sama dengan Google Wave OT.
    • Coweb-jsoe. Berdasarkan COT - pendekatan OT yang sangat canggih yang juga mendukung propagasi pesan p2p.
    • OpenCoweb. Ini memanfaatkan OpenCoweb-jsoe untuk menyediakan Kerangka lengkap untuk banyak masalah serupa.
    • OT.js didasarkan pada jenis operasi ShareJs.
    • DriveSDK. API yang sangat menarik yang dapat melakukan banyak hal - misalnya, kolaborasi pada grafik.
    • SwellRT adalah Fork dari Apache Wave. Apakah federasi, dan mendukung teks kaya.
  • Sinkronisasi Diferensial:

    • Diff-Match-Patch dari Neil Fraser.
    • MobWrite memanfaatkan algoritma Diff-Match-Patch.
  • CRDT (Tipe Data yang Direplikasi Komutatif):

    • Ada banyak algoritme CRDT berbeda yang memungkinkan penerapan tipe bersama. Beberapa CRDT bekerja dengan penyebaran pesan P2P, beberapa bergantung pada model klien-server
    • Yjs memungkinkan Anda untuk berbagi tipe data sewenang-wenang (RichText, Array, Hash Maps, .. dapat diperpanjang). Dukungan offline dan dukungan untuk protokol komunikasi P2P (ada modul untuk XMPP, Websockets, dan WebRTC)
    • Database bersama server SwarmJS Client dengan dukungan offline. Bekerja dengan baik dengan React
    • Woot Implementasi dari Woot CRDT
    • CRDT Implementasi CRDT lainnya
    • Automerge
dmonad
sumber
Google Drive API menggunakan OT, bukan DS. developers.google.com/drive/realtime/conflict-resolution
Mathias Bak
4

Turnkey, atau solusi "seret dan lepas" untuk masalah ini belum benar-benar ada karena kerumitan sinkronisasi yang andal dari status yang bisa berubah bersama. Tanggapan dmonad adalah ringkasan yang layak, dan saya memposting ikhtisar terbaru dari solusi yang tersedia di sini .

Pertanyaan ini cukup lama, tetapi Konvergensi (penafian: Saya seorang pendiri) menyediakan solusi paling siap pakai di luar sana, tidak hanya menyediakan sinkronisasi data tetapi sejumlah API lain yang berguna untuk membangun UX kolaboratif. Berikut adalah contoh yang menunjukkan dengan tepat apa yang Anda minta: sinkronisasi bidang teks di beberapa klien.

Jika tidak, ShareDB adalah solusi sumber terbuka yang bagus yang sesuai dengan kebutuhan banyak orang.

alalonde.dll
sumber
2

Dengan lib klien js (Strophe.js) Anda dapat menggunakan server XMPP gratis (seperti jabber.org) bersama dengan lib OT sisi klien saya (JSOTTEST) untuk membangun sistem server-klien lengkap.

Saya akan mengirimkan src dari sistem obrolan klien-server demo ketika saya punya waktu untuk merevisi kodenya.

pengguna981836
sumber
1
Hampir dua tahun yang lalu Anda menulis "Saya akan mengirimkan src dari demo ...". Apakah Anda pernah menyelesaikan demo itu?
Bryan Oakley
Maaf ... tapi saya tidak punya waktu untuk merilis demo publik! Namun sangat sederhana menggunakan Bosh lib untuk php !! selamat tinggal
pengguna981836
2

Npm memiliki beberapa perpustakaan yang bagus untuk node.js:

  • https://npmjs.org/package/ot - adaptor untuk codemirror dan ace bawaan serta implementasi klien dan server
  • https://npmjs.org/package/changesets - perpustakaan biasa atau biasa dapat digunakan di node dan browser; memungkinkan Anda untuk membangun 'set perubahan' (pada dasarnya berbeda) yang dapat Anda kirim, ubah satu sama lain, dan terapkan pada dokumen
tamu
sumber
1

Anda bisa berbicara dengan orang-orang di Cedanet . Meskipun Ceda adalah sumber tertutup dan tidak ada uji coba gratis yang tersedia di situs web mereka. Saya telah terlibat dalam pengembangan Ceda dan terus bekerja dengannya dalam proyek komersial, jadi saya mungkin dapat memberikan beberapa umpan balik / saran jika Anda mengikuti jalan ini.

Daniel Paull
sumber
1

Saya pikir etherpad.org dengan etherpad lite lebih unggul daripada solusi lain.

gorn
sumber
1
Bisakah Anda membuktikan keunggulan etherpad dengan beberapa contoh?
DL Narasimhan
1

Saya telah menulis pustaka unixy kecil (melakukan satu hal dan melakukannya dengan baik) yang mengimplementasikan lapisan kontrol OT, memungkinkan Anda untuk menyambungkan berbagai jenis OT (mendukung semua jenis yang sesuai dengan shareJS). Ini mirip dengan shareJS tetapi kurang beropini dan lebih abstrak.

https://github.com/marcelklehr/gulf

Marcel Klehr
sumber