運用変換ライブラリ?


102

複数のユーザー間でテキストをリアルタイムで同期できるライブラリを探しています(Googleドキュメント)。

私は自分のニーズに合っていると思われる運用変革に遭遇しました。そうは言っても、私はOTの要点は理解していますが、数学やOTの実装については理解していません。

したがって、テキスト領域にフックして変換を生成し、それらの変換を別のクライアントに適用できるようにするドラッグアンドドロップJavascriptライブラリがあるかどうか疑問に思いました。

(Etherpadのソースを入手しましたが、それから頭や尾を作成することはできません。EtherpadのOT実装で活用する方法を誰かが指摘できれば、それも素晴らしいことです!)


Firepadと呼ばれるFirebaseを利用した協調テキストエディター-firepad.ioコードをチェックしてインスピレーションを得てくださいgithub.com/FirebaseExtended/firepad
Tharanga Hewavithana

回答:


57

Google WaveのOT実装の一部はオープンソースであると思います(さらに多くの部分が登場します)。

これがあなたが探しているものかどうかはわかりませんが、OTの代替は差分同期です:


6
Diff-Match-Patchと、Neil Frasierによる差分同期のペーパー(neil.fraser.name/writing/sync)を組み合わせることで、トリックが実現しました!私を正しい方向に向けてくれてありがとう。
gamers2000、2014年

私が理解していることから、Diff-Match-Patch、および拡張により、MobWriteは(後者は前者を使用するため)テキストのみをサポートし、バイナリの変更はサポートしません。ただし、HTMLフォーム要素とのコラボレーションのデモがあり、プレーンテキストのみをサポートしていないことを示しています。
gamers2000 2011

この回答以来、「そしてもっと多くのパーツが来る」という良いニュースはありますか?
バーティー

3
実際、Google-Diff-Match-Patchは、DSのNeil Fraserドキュメント(neil.fraser.name/writing/sync(OT)を読むことができる違いを理解するために、差分同期である操作変換の代替方法を実装することを目的としていますこのドキュメントでは、イベントパッシングとして参照されています)。これらは2つの非常に異なる方法です。
ベンジャ

5
これは古いですが、気にした場合には、私がopensourcedいるgithub.com/benjamine/JsonDiffPatchそれが長い文字列のためにニールさんのDiff-マッチパッチを使用していますが、それはarbritrary JSは、グラフオブジェクトのために働く
ベンジャ

44

EX-Waveのエンジニアのひとつは、今という名前の共同編集アルゴリズムと呼ばれるShareJSのCoffeeScriptの実装、リリースしましたShareDBを


1
ShareJSは、MobWriteがGoogleのDiffおよびPatchを使用して行うよりも、おそらくよりシンプルで優れたドキュメントであり、より再利用可能です。
ルークスタンレー

33

私が見つけた解決策を要約します。

  • 運用変革:例

    • Google Wave OT。このアプローチは、いわゆる木星アプローチに基づいています。
    • ShareJs。Google Wave OTと同じOTアルゴリズムに基づいています。
    • Coweb-jsoe。COT-p2pメッセージ伝播もサポートする非常に洗練されたOTアプローチに基づいています。
    • OpenCoweb。多くの同様の問題に対して本格的なフレームワークを提供するために、OpenCoweb-jsoeを活用しています。
    • OT.jsは、ShareJの操作タイプに基づいています。
    • DriveSDK。グラフでのコラボレーションなど、さまざまなことができる非常に興味深いAPI。
    • SwellRTはApache Waveのフォークです。統合され、リッチテキストをサポートします。
  • 差分同期:

    • Neil FraserのDiff-Match-Patch。
    • MobWriteは、Diff-Match-Patchアルゴリズムを利用します。
  • CRDT(可換複製データタイプ):

    • 共有型の実装を可能にする多くの異なるCRDTアルゴリズムがあります。一部のCRDTはP2Pメッセージ伝播で機能し、一部はクライアントサーバーモデルに依存しています
    • Yjsを使用すると、任意のデータ型(RichText、Array、Hash Maps、..拡張可能)を共有できます。オフラインサポートおよびP2P通信プロトコルのサポート(XMPP、Websocket、およびWebRTCのモジュールがあります)
    • SwarmJSクライアントサーバーはオフラインサポート付きのデータベースを共有しました。Reactでうまく機能します
    • Woot Woot CRDTのアン実装
    • CRDT別のCRDT実装
    • 自動マージ

Google Drive APIはDSではなくOTを使用します。developers.google.com/drive/realtime/conflict-resolution
Mathias Bak




4

共有の可変状態を確実に同期するという複雑さのため、この問題に対するターンキーまたは「ドラッグアンドドロップ」ソリューションは実際には存在しませんでした。dmonadの応答はまともなまとめであり、利用可能なソリューションのより最新の概要をこちらに投稿しました

この質問はかなり古いですが、Convergence(免責事項:私は創設者です)が最もターンキーなソリューションを提供し、データ同期だけでなく、コラボレーティブUXの構築に役立つ他のAPIのホストも提供します。 これは、要求したものを正確に示すです。複数のクライアント間でのテキストフィールドの同期です。

それ以外の場合、ShareDBは多くの人々のニーズに適合する優れたオープンソースソリューションです。



2

jsクライアントライブラリ(Strophe.js)を使用すると、無料のXMPPサーバー(jabber.orgなど)をクライアント側のOTライブラリ(JSOTTEST)とともに使用して、完全なクライアントサーバーシステムを構築できます。

コードを修正する時間があるときに、デモのクライアント/サーバーチャットシステムのsrcを送信します。


1
ほぼ2年前、「デモのsrcを提出します...」と書いています。そのデモを終えたことがありますか?
Bryan Oakley 2013

申し訳ありませんが...公開デモをリリースする時間がありませんでした!ただし、Bosh lib for phpを使用するのは非常に簡単です。さようなら
user981836

2

Npmには、node.js用の素晴らしいotライブラリがあります。

  • https://npmjs.org/package/ot-codemirrorおよびace組み込みのアダプター、ならびにクライアントおよびサーバーの実装
  • https://npmjs.org/package/changesets-ノードとブラウザで使用できるプレーンなotライブラリ。送信したり、相互に変換したり、ドキュメントに適用したりできる「変更セット」(基本的にdiff)を構築できます

1

Cedanetの人たちと話すことができます。Cedaはクローズドソースであり、彼らのWebサイトで利用できる無料の試用版はありません。私はCedaの開発に携わっており、商用プロジェクトで引き続き使用しているので、この道を進んでいただければフィードバックやアドバイスを提供できるかもしれません。



1

オペレーショナルトランスフォーメーションとバージョニングを組み合わせたコラボレートエディターを構築しています。これにより、オフラインとオンラインの両方のコラボレーションをサポートできます。昨日、オープンソーススタックの一部として独自のOTライブラリをリリースしました。

http://interior.substance.io/modules/operator.html

バージョニング用のライブラリも提供しました。

http://interior.substance.io/modules/chronicle.html


1

私は、OT制御層を実装する小さなunixy(1つのことを行い、うまく実行する)ライブラリを作成しました。これにより、さまざまなOTタイプをプラグインできます(すべてのshareJS準拠タイプをサポートします)。これは、shareJSに似ていますが、意見が少なく、より抽象的です。

https://github.com/marcelklehr/gulf

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.