
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. SprungTatsache 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):
- Offene Lizenz: Fügt 1 Kiwi hinzu
(Dies ist auch ein Ausschlusskriterium)
- Bildunterstützung : Fügt 1 Kiwi hinzu

- Tabellenunterstützung : Fügt 1 Kiwi hinzu

- Listenunterstützung: Fügt 1 Kiwi hinzu

- Mathe- Unterstützung: Fügt 1 Kiwi hinzu

- Unterstützung für die Zusammenarbeit in Echtzeit : Fügt 1 Kiwi hinzu

- Verfügbare Serverkomponenten : 1 Kiwi

- Remote-Cursor- und Highlight-Unterstützung: 1 Kiwi
(d. h. Sie können die Cursor anderer Benutzer sehen)
- Offline arbeiten : 1 Kiwi
(es ist ziemlich schwer zu bestimmen)
- Produktionserfahrung: 1 Kiwi

- 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), QuelleBeginnen 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 AtlassianVor 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 EditorLeider 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 EditorEndgü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 EditorSchließ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
- Anamnese-infundierte Daten: Kausalbäume und operative CRDTs
- Lehren aus dem Erstellen eines Echtzeit-Texteditors
- Beispiel für eine HTML-Textverarbeitung
- Co-Editing in ProseMirror