# ACE (Java-Texteditor)

ACE – a collaborative editor ist ein kollaborativer Echtzeit-Texteditor.

## Einführung

ACE ermöglicht es mehreren Personen, ein Textdokument gemeinsam, das heißt zur gleichen Zeit, zu bearbeiten (Mehrautorenschaft). Jede Person arbeitet mit dem ACE-Editor an einem eigenen Computer. Dabei sind alle Teilnehmer über ein Netzwerk (LAN, Internet) verbunden und sehen jederzeit den gleichen Dokumentinhalt. Wenn jemand der Gruppe eine Änderung im Dokument vornimmt (zum Beispiel schreibt diese das Wort „Unterschrift“ am Ende des Dokumentes), wird dies in Echtzeit und synchron allen anderen Benutzern angezeigt. Jeder Benutzer hat dadurch den Überblick über die Änderungen im Dokument und kann nachvollziehen, wer was wo im Dokument editiert hat. Dies wird unterstützt durch unterschiedliche Text-Hintergrundfarben für jeden Teilnehmer einer Editier-Sitzung (vergleiche Grafik).
ACE erkennt alle Benutzer im lokalen Subnetz automatisch (vergleiche Bonjour-Technik). Die gewünschten Dokumente können zum gemeinsamen Editieren veröffentlicht werden. Der Besitzer des Dokumentes kann dann die Benutzer zum Editieren einladen.
ACE wird als freie Software auch im Quelltext unter den Bedingungen der GNU General Public License (GPL) verbreitet. Er läuft auf der Java-Laufzeitumgebung, die für alle bekannten Betriebssystemen wie Windows oder diverse Unix-Derivate (Linux, MacOS, …) zur Verfügung steht.

## Beispiel

Benutzer Steve editiert zusammen mit Scott und Bill ein Dokument namens Collaboration.txt. Steve ist der Besitzer des Dokumentes. In dem „Participants“-Fenster oben rechts sieht Steve, welche Benutzer miteditieren und deren Hintergrundfarbe. So erkennt er genau, wer was geschrieben hat. Steves Hintergrundfarbe ist blau. Wenn nun der Benutzer Bill etwas schreibt, kann Steve gleichzeitig mitlesen, was Bill editiert, indem er seinen Cursor beobachtet. Im „Users“-Fenster unten rechts werden alle bekannten Benutzer im selben Subnetz automatisch aufgelistet. Es ist aber auch möglich, mit einem Benutzer übers Internet zusammenzuarbeiten. Im „Browse“-Fenster unten links werden alle öffentliche Dokumente angezeigt, also Dokumente, die von anderen Benutzern zum gemeinsamen Editieren freigegeben worden sind. Steve kann nun auf eines dieser Dokumente klicken, und wenn der Besitzer des Dokumentes einverstanden ist, können sie gemeinsam das Dokument editieren.

## Anwendungsmöglichkeiten

ACE ermöglicht zum Beispiel folgende Funktionalität:
* ein gemeinsames Brainstorming mehrerer Personen,
* gemeinsames Notizenschreiben an einer Konferenz,
* kollaboratives Schreiben von Programmcode (XP),
* erzieherische Zwecke (für Schulen, zum Beispiel zwei Schüler schreiben gemeinsam einen Essay).
Ein interessanter Anwendungsfall von ACE ist die Benutzung zu Lernzwecken an Schulen. Zum Beispiel können Gruppen von zwei bis drei Schülern zusammen einen Essay schreiben. Dabei trainieren sie sich gegenseitig, die Schriftsprache besser zu lernen respektive anzuwenden. Zum einen lernen die Schüler zu schreiben und zum anderen erleben sie eine spielerische Anwendung des Computers.
LaTeX-Nutzern ermöglicht ACE als Bestandteil des freien Online-LaTeX-Editors ShareLaTeX das gemeinsame Schreiben von Dokumenten – einschließlich Vorschau und PDF-Download. Auch RStudio, eine Web-Oberfläche für die statistische Programmiersprache R, nutzt ACE.
Weitere Projekte, die ACE verwenden, sind zum Beispiel Etherpad und OwnCloud.

## Technik

Ein kollaboratives Echtzeit-Editiersystem wie zum Beispiel ACE hat folgende Anforderungen:
* Echtzeit: Die Antwortzeiten für den lokalen Benutzer müssen gleich sein wie bei einem normalen Editor und die Latenzzeit (unter anderem abhängig von der Bandbreite des Netzwerkes) für die anderen Teilnehmer muss klein sein.
* Verteilt: Kollaborierende Benutzer arbeiten meist auf physikalisch unterschiedlichen Rechnern. Daher handelt es sich um ein verteiltes System.
* Uneingeschränkt: Mehrere Benutzer können gleichzeitig und unabhängig voneinander das Dokument editieren, damit soll ein intuitives Arbeiten wie bei einem normalen Editor ermöglicht werden.
Ein kollaboratives Editiersystem kann aus n Instanzen bestehen, das entspricht einfach n Benutzern, welche das System auf ihrem Rechner laufen haben und welche durch ein Netzwerk miteinander verbunden sind. Die größte Herausforderung bei einem kollaborativen Editiersystem ist die Konsistenz eines Dokumentes, denn wenn die Dokument-Replikate divergieren würden, wären diese nicht mehr identisch und somit das Editiersystem als solches nutzlos.
Ein kollaboratives Editiersystem muss folgende Eigenschaften haben, damit es als konsistent gilt:
* Konvergenz: Sobald alle Instanzen des Systems die gleiche Menge von Operationen (zum Beispiel Einfügen, Löschen) ausgeführt haben, müssen die Dokument-Replikate auf allen Instanzen identisch sein.
* Kausalität: Das ist die Eigenschaft, welche garantiert, dass eine Menge von Operationen auf allen Instanzen des Systems in der gleichen Reihenfolge ausgeführt werden.
* Umsetzung der Benutzerabsicht: Garantiert, dass die Ausführung einer Operation (zum Beispiel Einfügen, Löschen) auf allen Instanzen des Systems die gleiche Auswirkung hat (zum Beispiel Löschen des Buchstabens w an drittletzter Stelle im Dokument: Das System löscht den Buchstaben w am Ende des Dokumentes auf jeder Instanz, auch wenn sich dessen Position in der Zwischenzeit verändert hat).
Um diese Konsistenz-Eigenschaft zu erreichen, gibt es Konsistenz-Algorithmen. Solche Algorithmen bestehen aus zwei Teilen: Dem Concurrency-Control-Algorithmus und den Operational-Transformation-Funktionen. Diese beiden Mechanismen stammen aus dem Forschungsgebiet des Computer Supported Cooperative Work, kurz CSCW.