Freitexteditoren für die Zusammenarbeit



Viele Jahre lang war ich von diesem Juckreiz heimgesucht - ich habe versucht, den „perfekten“ Texteditor für die Zusammenarbeit zu finden. Aber nicht irgendein Texteditor, der die Zusammenarbeit unterstützt, oh nein, meine Aufgabe ist es, offene Texteditoren mit Gruppenarbeit in Echtzeit zu finden (zumindest zu suchen) (d. H. Nicht nur einfachen Text, sondern auch strukturierter Inhalt). Daher liegt der Schwerpunkt dieses Artikels auf einer Nischenkategorie von Open Source-Tools und den Technologien, auf denen sie ausgeführt werden. Wenn Ihre Interessen breiter sind, können Sie auf diese ständig aktualisierte Liste von Redakteuren verweisen.

Also. Ich bin viele Male von einer Klippe gesprungen und in ein fast endloses Meer von Echtzeit-Kollaborationsprogrammen getaucht. Wenn ich nach unten fliege, diesen belebenden Tauchgang auf den Grund des Pools, weiß ich es bereits gut. Normalerweise beginnt es mit einer anfänglichen Aufregung und Überraschung ( Sprung ) in neuen Technologien und Forschungen auf niedriger Ebene, dann kommt ein Gefühl der Überlastung und der Wunsch aufzutauchen ( hey, hier ziemlich tief ) und den angewandten Teil zu erforschen, und dann die Zeit, in der meine Gedanken am besten mit dem Satz beschrieben werden: "Bin ich wirklich so dumm dafür?" (sehr wahrscheinlich), da normalerweise die Dokumentation, die Demo und der Code nicht ganz übereinstimmen oder keinen Sinn ergeben, die Kollaborationskomponente auf dem Server nicht gestartet wird und es Grenzsituationen gibt, in denen mehr als zwei Benutzer dasselbe Wort eingeben und ... alles endet ( aufgetaucht, nach Luft schnappend ).

Danach ist es schwierig, das Thema noch einmal anzusprechen. Die nächste Phase ist eine Art Gedankenwinter in einer Übung, die auf Unwetter wartet, wenn ich den halbfertigen Code normalerweise monatelang oder jahrelang arbeiten lasse. Bis wir uns wieder sehen, ein konfliktfrei replizierter Datentyp!


Abb. 1. Sprung

Tatsache ist, dass ich 2017 so begeistert von den Aussichten eines Algorithmus (einer Art CRDT ) war, der in einem Forschungsartikel beschrieben wurde, dass ich mehrere Tage damit verbracht habe, ihn in JavaScript zu implementieren, nur um herauszufinden, dass es in dem wissenschaftlichen Artikel eine Grenzsituation gibt, für die Es wird keine Lösung angegeben (na ja ... aber vielleicht trotzdem?). Zu diesem Zeitpunkt wandte ich mich an den Autor, erhielt jedoch keine Antwort und stellte fest, dass diese spezielle Grenzsituation von einem anderen Team in einem ähnlichen Algorithmus berücksichtigt wurde, aber zum Teufel, aufgrund dieser Feinheiten in der Implementierung könnte ich sie möglicherweise auf Lisp ... SO übertragen STOP! Was ist hier los? Natürlich möchte ich keinen neuen Algorithmus aus der Forschungsarbeit einführen und seine Probleme beheben! Was mache ich, wie bin ich hierher gekommen? Lass uns zurückspulen!

Was ich (und wahrscheinlich auch Sie, lieber Leser) wirklich brauche, ist ein Plug-and-Play-Editor, ein fertiges Produkt . Dies löst das Problem der Zusammenarbeit in Echtzeit. Auf diese Weise können mehrere verbundene Benutzer im Abstand von mehreren tausend Kilometern ein strukturiertes Dokument bearbeiten, indem sie Tasten auf Tastaturen drücken und die Änderungen des anderen auf ihren Bildschirmen anzeigen. Das ist alles. Die Redakteure sind jedoch schwierig ... und ich konnte ein solches Tool einfach nicht finden.

Bisher.

Das Jahr 2019 ist gekommen (der Juckreiz ist mit Gewalt zurückgekehrt ), und diesmal erschien nicht nur der magische Herausgeber, sondern sogar zwei Bewerber für die Erfüllung der lang erwarteten Spezifikation. Anfangs wollte ich mit Ihnen über das Feld fliegen und fast alle Texteditoren für die Zusammenarbeit auflisten, aber es scheint nicht viel Wert zu schaffen . Konzentrieren wir uns stattdessen auf zwei Editoren, die so werden können.

Es gibt jedoch zwei Editoren, und Sie müssen eine Auswahl treffen - es wäre schön, objektiv zu überlegen, welcher wirklich besser geeignet ist. Ich biete ein zutiefst wissenschaftliches Klassifizierungssystem mit den folgenden Kategorien an (wobei Kiwi als Standardeinheit des Guten verwendet wird):

  1. Offene Lizenz: Fügt 1 Kiwi hinzu (Dies ist auch ein Ausschlusskriterium)
  2. Bildunterstützung : Fügt 1 Kiwi hinzu
  3. Tabellenunterstützung : Fügt 1 Kiwi hinzu
  4. Listenunterstützung: Fügt 1 Kiwi hinzu
  5. Mathe- Unterstützung: Fügt 1 Kiwi hinzu
  6. Unterstützung für die Zusammenarbeit in Echtzeit : Fügt 1 Kiwi hinzu
  7. Verfügbare Serverkomponenten : 1 Kiwi
  8. Remote-Cursor- und Highlight-Unterstützung: 1 Kiwi (d. h. Sie können die Cursor anderer Benutzer sehen)
  9. Offline arbeiten : 1 Kiwi (es ist ziemlich schwer zu bestimmen)
  10. Produktionserfahrung: 1 Kiwi
  11. Mobiler Support: 1 Kiwi

Mit einem solchen Bewertungssystem kann der Editor maximal 11 Kiwi-Einheiten von Gut erhalten. Fangen wir an!

Ckeditor 5



Abbildung 2. CKEditor 5-Schnittstelle (eine der möglichen Optionen), Quelle

Beginnen wir mit CKEditor 5, der neuesten Version einer großen Anzahl hochwertiger Editoren . Er ist wunderschön. Ich weiß, ich weiß, dass dies kein Kriterium ist, und es spielt keine Rolle (und wir sind uns vielleicht nicht einmal einig), aber ich musste nur über seine Schönheit sagen. Dieser Editor benötigt also viel Kiwi: Er ist unter der GPL lizenziert ( einige Erläuterungen zu den Einschränkungen hier ), (+1), unterstützt Bilder, Tabellen, Listen (+3), Mathematik wird vom Plugin (+1) unterstützt und unterstützt auch die Zusammenarbeit in Echtzeit Zeit mit dem gelöschten Cursor und Auswahl (+2). Die Entwickler von CKEditor haben einen erstaunlichen, detaillierten Blog-Beitrag darüber geschrieben, wie sie ihn mithilfe operativer Transformationen entwickelt haben.

Ich konnte jedoch nicht die erforderliche Serverimplementierung für die Zusammenarbeit in Echtzeit finden, und in der gesamten Dokumentation wird der obligatorische Bedarf an Cloud-Service und (kostenpflichtiger) Komponente angegeben, selbst in Projekten, die mit der GPL kompatibel sind.

Der Grad der Offline-Unterstützung ist schwer zu bestimmen , scheint jedoch nicht vollständig zu sein (z. B. kann der Editor einer kurz unterbrochenen Verbindung standhalten, jedoch nicht mehrere Tage lang offline arbeiten). Wahrscheinlich eine halbe Kiwi? Gleiches gilt für den mobilen Support, es wird auch an vollem Support gearbeitet (+0,5). Und im letzten Moment wird CKEditor sicherlich in der Produktion verwendet, aber ich konnte keine Liste der darauf basierenden Produkte finden (+0,5).

Ein guter Editor, aber das Fehlen eines erschwinglichen Open-Source-Servers für die Zusammenarbeit ist wirklich bedrückend.

Volle Bewertung: 8.5 / 11

Atlaskit Editor



Abb. 3. Atlaskit Editor von Atlassian

Vor etwa einem Jahr brachte Atlassian das Open-Source-System Atlaskit Design auf den Markt , und viele Extras wurden mitgeliefert , darunter ein vollwertiger, gebrauchsfertiger Editor, der auf ProseMirror basiert. Ich habe bereits das Gefühl, dass dies der Editor sein könnte, den wir gesucht haben! Laut vielen wird es unter der Apache 2.0-Lizenz als sehr zulässige Open Source-Lizenz (+1 Kiwi) veröffentlicht. Es unterstützt nicht nur Bilder, Tabellen und Listen, sondern auch außergewöhnlich gut (+3 Kiwi)! Die Implementierung der Tabellen, die für die meisten Redakteure sehr mangelhaft ist, ist hier hervorragend:


Abb. 4. Verwalten von Tabellen im Atlaskit Editor

Leider wird Mathematik nicht unterstützt, aber der Editor selbst basiert auf ProseMirror, sodass es kein Problem sein sollte, eine vorhandene Lösung (+0,5) hinzuzufügen. Es unterstützt definitiv die Zusammenarbeit in Echtzeit mit Remote-Cursorn und -Auswahlen (+2). Dies ist eines der besten UI-Beispiele für die Unterstützung, die ich je gesehen habe (z. B. werden Remote-Cursor abgedunkelt, wenn sie sich mit Ihren eigenen und anderen wichtigen Implementierungsdetails überschneiden ) Darüber hinaus scheint die Offline-Unterstützung nach meinen Tests sehr solide zu sein (+1) - dies ist wahrscheinlich auf den Ansatz der „zentralen Kompetenz“ zurückzuführen, den ProseMirror für die Zusammenarbeit verwendet . Wow, wir haben schon 7,5 Kiwi und viele weitere Punkte! Mach weiter!

Leider sind wir hier mit einer harten Realität konfrontiert. Wie bei CKEditor steht keine serverseitige Implementierung für die Zusammenarbeit in Echtzeit zur Verfügung. Faule Leute. Großer Mist. Ich frage mich, ob dies behoben werden kann? ..

In jedem Fall ist alles andere das Qiwi wert, wenn Sie weiterhin nach den Kriterien absteigen: Es wird definitiv in der Produktion verwendet (Millionen von Benutzern) und hat mobile Unterstützung (+2). Gerade als ich den Gewinner bekannt geben wollte (insgesamt 9,5 Kiwi) und diesen Beitrag veröffentlichen wollte, kam etwas anderes auf. Es stellt sich heraus, dass die im Editor und in vielen anderen Atlaskit-Komponenten verwendeten Logos und Abzeichen unter der sehr restriktiven ADG-Lizenz lizenziert sind, die besagt, dass Sie sie nicht außerhalb des Atlassian-Universums verwenden können. Dieselben Symbole sind jedoch weit verbreitet und eng in den Editor integriert. Major Mist Nummer zwei, und ich nehme ihnen die Kiwi ab. Wir sind zu 8.5 zurückgekehrt, und wenn Sie zählen, sehen Sie, dass das Ergebnis jetzt dasselbe ist. Und er ist endgültig.

Wenn Sie mit diesen Symbolen etwas anfangen könnten ...

Ich dachte, dass es nach all den jüngsten Fortschritten bei Online-Texteditoren sehr traurig wäre, bei zwei großartigen Editoren mit erstaunlichen Funktionen zu bleiben, die Sie in Open Source-Projekten immer noch nicht verwenden können - entweder aufgrund von Lizenzproblemen, fehlenden zugänglichen Bausteinen oder beide.

Daher habe ich zuerst die Serverseite entwickelt (basierend auf PostgreSQL, PubSweet Framework und REST / WebSockets-Mix). Der Code ist hier verfügbar. Es ist recht einfach, aber es macht seine Arbeit und stellt die Persistenz von Dokumenten und des Kommunikationskanals in Echtzeit sicher. Überraschenderweise konnte ich dank der riesigen ProseMirror-Community herausfinden, wie alles funktionieren sollte, ohne eine genaue Schnittstellenspezifikation (+1 Kiwi) zu haben.

Und dann habe ich die vom Editor verwendeten Symbole durch die Symbole aus dem Federset ersetzt . Insbesondere mussten drei Pakete ersetzt werden. Da die ADG-Lizenz unter anderem jegliche abgeleitete Arbeit verbietet, mussten diese Pakete von Grund auf neu erstellt werden. Wahrscheinlich gingen deshalb einige Funktionen verloren, hauptsächlich im Hinblick auf die Zugänglichkeit für Menschen mit Behinderungen, aber es wurde eine gute offene Basis für die weitere Entwicklung geschaffen. In einigen Fällen gibt es beispielsweise keine besseren Alternativen für die Symbole . Wenn Sie also zu diesem Projekt beitragen möchten, ist hier das erste Problem (+1 Kiwi)!

All dies bedeutet, dass wir jetzt nur noch ein halbes Qiwi vom perfekten Ergebnis entfernt sind (aber wir werden wahrscheinlich in der Lage sein, mit Mathematik fertig zu werden). Was geschah, war das, woran ich nicht glaubte, als ich diese Reise begann. Dies bedeutet auch, dass wir in diesem Kampf einen klaren Sieger haben und Atlaskit Editor dank der vielfältigen, offenen und hilfreichen ProseMirror-Community letztendlich gewonnen hat . Anweisungen zum Starten finden Sie in der Projektdokumentation . Ich glaube, wenn Sie ein neues Projekt starten und die Möglichkeit einer Zusammenarbeit in Echtzeit in Betracht ziehen, ist dies trotz aller Einschränkungen ein großartiger Ausgangspunkt.


Abb. 5. Demonstrieren Sie die Bearbeitungsfunktionen in Echtzeit im Atlaskit Editor

Endgültiges (korrigiertes) Ergebnis: 10.5 / 11

Lobende Erwähnung


Es gibt zwei Editoren, die ich erwähnen möchte, obwohl sie derzeit keine vorgefertigte Lösung für die Zusammenarbeit in Echtzeit haben, aber beide basieren auf Bibliotheken, die diese Funktionalität unterstützen. Vielleicht haben beide Pläne.


Abb. 6. Wachseditor (ProseMirror-basiertes Textverarbeitungsprogramm)

Das erste ist Wachs (benannt nach alten Wachstabletten) von der Coko Foundation. Dieses Textverarbeitungsprogramm wurde zuerst in der Substanzbibliothek ( Repository ) erstellt und jetzt für ProseMirror ( Repository ) neu erstellt. Es ist ausschließlich mit Funktionalität gepackt. Dies sind nicht genau die Funktionen, für die wir Kiwi geben, aber dennoch sind sie ausgezeichnete Funktionen. Wachs wurde ursprünglich zum Setzen von Büchern entwickelt. Es unterstützt Notizen (nummerierte Anmerkungen, die in Büchern häufig vorkommen), Änderungsverlauf, Suchen und Ersetzen, Ornamente und andere. Vielleicht Orangen dafür geben ? In diesem Fall erhält Wax 4 Kiwis (offene Lizenz, Bilder, Listen, Verwendung in der Produktion) und ein paar Orangen, möglicherweise vier. . Das ist viel Obst!

Textur



Abb. 7. Textur, substanzbasierter Editor

Schließlich haben wir Texture , einen sehr spezifischen, professionellen (aber Open Source) Editor zum Erstellen wissenschaftlicher Inhalte im JATS-Format (XML-Standard für Zeitschriftenartikel). Wenn Sie das Zählen von Früchten üben, werden uns mit ziemlicher Sicherheit die Finger ausgehen: eine offene Lizenz, Tabellen, Bilder, umfassende Unterstützung für Mathematik, Links und Querverweise, Listen, Unterstützung für Metadaten, die Liste geht weiter! Ich wiederhole, sowohl Wax als auch Texture sind wunderbare Editoren , und das einzige, was sie von der maximalen Menge an Kiwi abhält, ist das Fehlen von Echtzeit-Co-Editing-Funktionen, denen dieser Artikel gewidmet ist.

Fazit


Wenn Sie ein System erstellen, in dem die kollaborative Bearbeitung in Echtzeit eine Schlüsselkomponente darstellt, haben Sie den richtigen Zeitpunkt ausgewählt. Letztes Jahr ist die Landschaft gereift, und jetzt sind hier fast offene Plug-and-Play-Lösungen erschienen. Vielleicht haben wir mit Ihrer Hilfe genau in einem Jahr eine ganze Reihe offener Projekte. Und vielleicht, nur möglich, werden wir auch Werkzeuge verwenden, die auf diesen offenen Schichten aufbauen, ohne es zu wissen.

Weiterführende Literatur


  1. Anamnese-infundierte Daten: Kausalbäume und operative CRDTs
  2. Lehren aus dem Erstellen eines Echtzeit-Texteditors
  3. Beispiel für eine HTML-Textverarbeitung
  4. Co-Editing in ProseMirror

Source: https://habr.com/ru/post/de451204/


All Articles