Biblioteka transformacji operacyjnej?

Szukam biblioteki, która pozwoliłaby mi synchronizować tekst w czasie rzeczywistym między wieloma użytkownikami (Ala Google Docs).

Natknąłem się na transformację operacyjną, która wydaje się odpowiadać moim potrzebom. To powiedziawszy, Rozumiem istotę OT, ale nie matematykę ani implementację OT.

Tak więc zastanawiałem się, czy istnieje Biblioteka Drag ' n ' drop Javascript, która zaczepi się do obszaru tekstowego, wygeneruje transformacje, a następnie pozwoli mi zastosować te transformacje na kolejny klient?

(zdobyłem źródło Etherpada, ale nie mogę z niego zrobić głowy ani ogonów. Jeśli ktoś mógłby wskazać, jak wykorzystać implementację Ot Etherpada, to też będzie świetnie!)

Author: dreeves, 2010-01-11

14 answers

Myślę, że część implementacji Ot Google Wave jest Open Source (a kolejne części już się pojawiają).

Nie jestem pewien, czy tego szukasz, ale alternatywą dla OT jest Synchronizacja różnicowa :

 54
Author: Jörg W Mittag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-30 16:09:39

Jeden z inżynierów Ex-Wave opublikował implementację algorytmu współpracy Coffeescript o nazwie ShareJS, obecnie o nazwie ShareDB .

 41
Author: hawkeye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-30 21:32:05

Podsumuję rozwiązania, które znalazłem.

  • Transformacja operacyjna: np.

    • Google Wave OT. Podejście to opiera się na tzw. podejściu Jowiszowym.
    • ShareJs. Oparty na tym samym algorytmie OT co Google Wave OT.
  • Coweb-jsoe. Oparte na COT - bardzo wyrafinowanym podejściu OT, które obsługuje również propagację wiadomości p2p.
  • OpenCoweb. Wykorzystuje OpenCoweb-jsoe, aby zapewnić pełnowartościowy Framework dla wielu podobnych problemów.
  • OT.js opiera się na operacjach typu ShareJs.
  • DriveSDK. Bardzo ciekawe API, które potrafi zrobić wiele rzeczy - np. współpracę na wykresach.
  • SwellRT to widelec Apache Wave. Is jest federacją i obsługuje tekst Rozszerzony.
  • Synchronizacja Różnicowa:

    • Diff-Match-Patch od Neila Frasera.
    • MobWrite wykorzystuje algorytm Diff-Match-Patch.
  • CRDT (komutacyjne dane replikowane Typ): {]}

    • Istnieje wiele różnych algorytmów CRDT, które pozwalają na implementację współdzielonych typów. Niektóre Crdt działają z propagacją komunikatów P2P, niektóre opierają się na modelach Klient-Serwer
    • YJS pozwala na współdzielenie dowolnych typów danych (RichText, Array, Hash Maps,.. możliwość rozbudowy). Wsparcie Offline i wsparcie dla protokołów komunikacyjnych P2P (istnieją moduły dla XMPP, Websockets i WebRTC)
    • SwarmJS klient serwer współdzielona baza danych z offline wsparcie. Działa dobrze z Reactem
    • Woot implementacja WOOT CRDT
    • CRDT kolejna implementacja CRDT
    • Automerge
  •  21
    Author: dmonad,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2018-07-08 20:09:48

    Biblioteki OT:

    W ramach projektu hwios websocket z powodzeniem użyłem kombinacji obu (py-infinote po stronie serwera, jinfinote po stronie klienta) do synchronizacji Stanów dokumentów.

     6
    Author: Phrearch,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2013-10-13 20:03:09

    Ot.biblioteka js https://github.com/Operational-Transformation/ot.js może być przydatny w scenariuszach dla wielu użytkowników.

     5
    Author: Jarnal,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2013-09-11 20:50:01
     4
    Author: Peter Parente,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2011-09-30 12:29:32

    "pod klucz" lub "przeciągnij i upuść" rozwiązania tego problemu tak naprawdę nie istniały ze względu na złożoność niezawodnej synchronizacji współdzielonego stanu mutowalnego. odpowiedź dmonada to porządne podsumowanie, a bardziej aktualny przegląd dostępnych rozwiązań zamieściłem tutaj.

    To pytanie jest dość stare, ale Konwergencja (zastrzeżenie: jestem założycielem) zapewnia najbardziej gotowe rozwiązanie, zapewniając nie tylko synchronizację danych, ale wiele innych interfejsów API przydatnych dla budowanie wspólnego UX. Oto przykład pokazujący dokładnie to, o co prosiłeś: synchronizację pola tekstowego między wieloma klientami.

    W Przeciwnym Razie, ShareDB jest świetnym rozwiązaniem open-source, które pasuje do potrzeb wielu ludzi.

     4
    Author: alalonde,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2018-02-26 16:51:35
     2
    Author: Ryan D. Hatch,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2011-08-11 07:22:55

    Z klientem js lib (Strofe.js) można użyć darmowego serwera XMPP (jak jabber.org) wraz z moim klientem OT lib (JSOTTEST) zbudować kompletny system klient-serwer.

    Prześlę src demo systemu czatu klient-serwer, gdy będę miał czas na poprawienie kodu.

     2
    Author: user981836,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2011-10-06 08:58:05

    Npm ma kilka ładnych bibliotek ot dla node.js:

    • https://npmjs.org/package/ot -- adaptery do wbudowanych codemirror i ace oraz implementacji klienta i serwera
    • https://npmjs.org/package/changesets -- zwykła biblioteka ot użyteczna w węźle i przeglądarce; pozwala na budowanie 'zestawów zmian' (zasadniczo diffów), które można wysyłać, przekształcać względem siebie i stosować na dokumencie
     2
    Author: guest,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2013-02-13 15:44:25

    Możesz porozmawiać z chłopakami w Cedanet . Chociaż Ceda jest zamkniętym źródłem i nie jest dostępna bezpłatna wersja próbna na ich stronie internetowej. Byłem zaangażowany w rozwój Ceda i nadal pracuję z nim w projektach komercyjnych, więc może będę w stanie dostarczyć kilka opinii/porad, jeśli pójdziesz tą drogą.

     1
    Author: Daniel Paull,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2010-07-28 09:12:28

    I thing etherpad.org z etherpad lite jest lepszy od innych rozwiązań.

     1
    Author: gorn,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2011-09-23 10:49:21

    Tworzymy współpracujący edytor, który łączy transformację operacyjną z wersjonowaniem. W ten sposób możemy wspierać zarówno offline, jak i online collab. Wczoraj wydaliśmy własną bibliotekę OT jako część naszego stosu open source.

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

    Dodaliśmy również bibliotekę do wersjonowania.

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

     1
    Author: Michael,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2013-07-10 10:59:01

    Napisałem małą bibliotekę unixy (zrób jedną rzecz i zrób to dobrze), która implementuje warstwę kontrolną OT, pozwalającą na podłączenie różnych typów OT (obsługuje wszystkie typy zgodne z shareJS). Jest podobny do shareJS, ale mniej opiniotwórczy i bardziej abstrakcyjny.

    Https://github.com/marcelklehr/gulf

     0
    Author: Marcel Klehr,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2016-04-01 20:19:42