transform etherpad operational

Biblioteca de Transformación Operacional?



etherpad operational (14)

Bibliotecas OT

Dentro del proyecto HWIOS websocket, he utilizado con éxito un combo de ambos (py-infinote en el lado del servidor, jinfinote en el lado del cliente) para sincronizar los estados del documento.

Estoy buscando una biblioteca que me permita sincronizar texto en tiempo real entre varios usuarios (al estilo de Google Docs).

Me encontré con la Transformación operativa, que parece ajustarse a mis necesidades. Habiendo dicho eso, entiendo la esencia de OT, pero no las matemáticas ni la implementación de OT.

Por lo tanto, me preguntaba si había una biblioteca de JavaScript drag''n''drop que se conectara a un área de texto, generara las transformaciones y luego me permitiera aplicar esas transformaciones a otro cliente.

(Obtuve el origen de Etherpad, pero no puedo entenderlo. Si alguien pudiera señalar cómo aprovechar la implementación OT de Etherpad, ¡también será genial!)


Con un js client lib (Strophe.js) puede usar un servidor XMPP gratuito (como jabber.org) junto con mi OT lib (JSOTTEST) del lado del cliente para construir un sistema completo de cliente-servidor.

Presentaré el src de un sistema demo de chat cliente-servidor cuando tenga tiempo para revisar el código.



Creo que etherpad.org con etherpad lite es superior a otras soluciones.


Creo que partes de la implementación de OT de Google Wave son de código abierto (y están llegando más partes).

No estoy seguro si esto es lo que está buscando, pero una alternativa a OT es la Sincronización Diferencial :



He escrito una pequeña biblioteca unixy (haz una sola cosa y hazlo bien) que implementa una capa de control OT, lo que te permite conectar diferentes tipos OT (admite todos los tipos compatibles con shareJS). Es similar a shareJS pero menos obstinado y más abstracto.

https://github.com/marcelklehr/gulf



Las soluciones llave en mano o "arrastrar y soltar" a este problema no han existido realmente debido a la complejidad de sincronizar confiablemente el estado mutable compartido. La respuesta de dmonad es un resumen decente, y publiqué aquí una descripción más actualizada de las soluciones disponibles.

Esta pregunta es bastante antigua, pero Convergence (exención de responsabilidad: soy un fundador) ofrece la solución más completa disponible, que proporciona no solo la sincronización de datos, sino también una serie de otras API útiles para construir un UX colaborativo. Aquí hay un ejemplo que muestra exactamente lo que solicitó: sincronización de un campo de texto entre múltiples clientes.

De lo contrario, ShareDB es una gran solución de código abierto que se adapta a las necesidades de muchas personas.


Npm tiene algunas buenas bibliotecas ot para node.js:

  • https://npmjs.org/package/ot - adaptadores para codemirror y as integrados, así como una implementación de cliente y servidor
  • https://npmjs.org/package/changesets - plain ot library utilizable en el nodo y el navegador; le permite crear ''conjuntos de cambios'' (esencialmente diffs) que puede enviar, transformar entre sí y aplicar en un documento

Podrías hablar con los chicos de Cedanet . Aunque Ceda es de fuente cerrada y no hay prueba gratuita disponible en su sitio web. He estado involucrado en el desarrollo de Ceda y continúo trabajando con él en proyectos comerciales, por lo que podría proporcionar algunos comentarios / consejos si se dirige hacia este camino.


Resumiré las soluciones que encontré.

  • Transformación operacional: Ej.

    • Google Wave OT. El enfoque se basa en el llamado enfoque de Júpiter.
    • ShareJs. Basado en el mismo algoritmo OT que Google Wave OT.
    • Coweb-jsoe. Basado en COT: un enfoque OT muy sofisticado que también admite la propagación de mensajes p2p.
    • OpenCoweb. Aprovecha OpenCoweb-jsoe para proporcionar un Framework completo para muchos problemas similares.
    • OT.js se basa en los tipos de operación de ShareJs.
    • DriveSDK. Una API muy interesante que puede hacer muchas cosas, por ejemplo, colaboración en gráficos.
    • SwellRT es un Tenedor de Apache Wave. Está federado y admite texto enriquecido.
  • Sincronización diferencial:

    • Diff-Match-Patch de Neil Fraser.
    • MobWrite aprovecha el algoritmo Diff-Match-Patch.
  • CRDT (tipo de datos CRDT conmutativos):

    • Hay muchos algoritmos CRDT diferentes que permiten la implementación de tipos compartidos. Algunos CRDT funcionan con la propagación de mensajes P2P, algunos se basan en modelos cliente-servidor
    • Yjs permite compartir tipos de datos arbitrarios (RichText, Array, Hash Maps, ... extensible). Soporte y soporte fuera de línea para protocolos de comunicación P2P (hay módulos para XMPP, Websockets y WebRTC)
    • SwarmJS datos compartida de servidor de cliente SwarmJS con soporte fuera de línea. Funciona bien con React
    • Woot Una implementación de Woot CRDT
    • CRDT Otra implementación de CRDT

Uno de los ex ingenieros de Wave ha lanzado una implementación de Coffeescript de su algoritmo de edición colaborativa llamado ShareJS, ahora llamado ShareDB .