Posts Tagged ‘Etherpad’

Wie Etherpad Lite entstand

Diesen Montag (22.8.2011) haben wir das große Release von Etherpad Lite gefeiert. :) Aus diesem Anlass möchte ich euch ein wenig darüber erzählen, wie Etherpad Lite entstand und welche Probleme es löst.
Welche Probleme gab es bei dem alten Etherpad?
  • Der Ressourcenverbrauch: Die Java Virtual Machine, unter der Etherpad lief, verbrauchte im laufenden Betrieb ca 1 GB, manchmal auch 2 GB RAM. Für Firmen mag das vertretbar sein. Für Privatanwender, die meist nur einen kleinen vServer gemietet haben, ist das jedoch eindeutig zu viel. Besonders dramatisch fiel uns das beim Piratenpad immer wieder auf, wenn sich die gefühlte halbe Welt auf einem Pad versammelt hatte. Die CPU-Last war durchgehend auf 100%, der Server reagierte meist nicht mehr und auch mehrere CPU-Kerne brachten keine Abhilfe. Unsere einzige Möglichkeit hier einzugreifen bestand in einem Neustart. Selbst heute noch wird das Piratenpad nächtlich neu gestartet, um die Probleme von Memory Leaks und Endlosschleifen einzudämmen.
  • Etherpad war “Closed Open Source”: der Code war offen, doch niemand verstand ihn. Es war nie geplant, dass die Öffentlichkeit den Code zu Gesicht bekommt. Die Software wurde komplett undokumentiert über Nacht veröffentlicht. Es gab nicht einmal eine interne Dokumentation. Große Teile des Etherpad-Codes wurden bereits vor Veröffentlichung nicht mehr verwendet und waren Überbleibsel von vorangegangen, mittlerweile entfernten Features. Zudem finden sich angefangene, nie voll implementierte Funktionen im Code wieder. Auf Kommentare im Code wurde nahezu komplett verzichtet. Eine Debug-Möglichkeit gab es nicht. Dies machte es Entwicklern schwer bis nahezu unmöglich, in den Code einzusteigen und ihn zu verbessern.
Kurz: Etherpad war ein Monster, bei dem man als Admin froh war, wenn es lief und sich machtlos fühlte, wenn es Probleme gab. Zugleich wurde Etherpad jedoch nach der Veröffentlichung zu einem wichtigen Instrument für Meinungsfreiheit. Demonstrationen wurden darüber organisiert, Beweise von Polizeigewalt zusammengetragen, sogar die neue Verfassung von Tunesien wurde auf einem Etherpad geschrieben. Das versetzt uns in die missliche Lage, dass eine der vielleicht für die Meinungsfreiheit wichtigsten Technologien, von einer Blackbox-Monster-Software, die jeder Admin hasst, bereitgestellt wird.
Wie wurde Etherpad bis heute gezähmt?
Bei der Piratenpartei haben wir im Laufe der Zeit Methoden entwickelt, Etherpad am Laufen zu halten. Die virtuelle Maschine ist großzügig mit viel RAM ausgestattet, ein Nagios überwacht die Erreichbarkeit und schlägt bei Problemen Alarm. Das Piratenpad-Team besteht mittlerweile aus 3 Personen – sodass immer jemand da ist, der bei Problemen eingreifen kann. Mit viel Schmerz und herumprobieren ist es uns sogar gelungen, Etherpad etwas an die Anforderungen der Piraten anzupassen. Trotz allem haben wir immer wieder kurze Ausfälle, die sich aus den oben genannten Problemen ergeben. Das Piratenpad zu administrieren ist allgemein ein recht anstrengender und nervenraubender Job.
Wenn man Leuten von den Problemen mit Etherpad erzählt, kommt immer wieder nach sehr kurzer Zeit die Idee auf, Etherpad neu zu schreiben. Das Problem war bisher,  dass dies bedeuten würde, die kompletten Synchronisierungsalgorithmen neu zu schreiben. Etherpad war die wohl erste Plattform, die eine webbasierte Textbearbeitung durch mehrere Personen in Echtzeit zuließ. Das neu zu schreiben wurde immer als noch schlimmer als Etherpad zu verbessern angesehen. So blieb die Situation lange Zeit.
Wie entstand Etherpad Lite?
Alles begann, als ich den Chaosradio Express Podcast zu Node.js hörte. Felix Geißendörfer berichtete von einem schnell arbeitendem Javascript auf Serverseite, mit dem spielend einfach und extrem performant Netzwerkapplikationen geschrieben werden konnten. Dies brachte mich auf die Idee, dass es vielleicht möglich wäre, den bei Etherpad serverseitigen Javascript Code, der dort mit Rhino ausgeführt wird, auf Node.js zu portieren. Damit wären wir in der Lage die Synchronisierungsalgorithmen von Etherpad mitzunehmen und gleichzeitig von der Java-Plattform wegzukommen. Die Idee war damit geboren.
Kurz danach beendete ich meine Ausbildung und zog nach England um, um dort einen Job als “Etherpad Developer” anzufangen. Die Firma nennt sich Primary Technology und unterstützt Primary Schools mit Hard- und Software. Die Firma betreibt auch eine Etherpad-Instanz namens “Primarypad“, auf der Schüler zusammen Hausaufgaben erledigen und im Klassenzimmer gemeinsam arbeiten können. Der Leiter dieser Firma ist John McLear, der zugleich auch Vorsitzender der Etherpad Foundation ist. Primarypad kämpft mit den selben Problemen, mit denen auch das Piratenpad kämpft, auch wenn hier ein Großteil der Probleme einfach mit extrem großzügiger Hardware erschlagen wird. Als Teil meines Jobs sollte ich Etherpad verbessern und um neue Funktionen erweitern.
Ich erzählte John sowie einigen Leuten von meiner Idee, Etherpad auf Node.js zu portieren. Mir wurde erzählt, dass das Vorhaben unmöglich sei und man lieber die Zeit damit verbringen sollte, Etherpad zu verbessern. Selbst wenn es funktionieren würde, müsste man alle Funktionen neu schreiben und alle bis dahin aufgebrachte Arbeit wäre umsonst. Außerdem sei der Ressourcenverbrauch gar nicht so schlimm, wie ich ihn empfände.
In einer Woche, in der John im Urlaub war und mich ohne Aufgaben hinterlassen hatte, versuchte ich die Machbarkeit meiner Idee zu beweisen. Und tatsächlich gelang es mir, die Synchronisierungsalgorithmen von Rhino auf Node.js Javascript zu portieren und mit dem clientseitigen Etherpad zu kommunzieren. Diese Version war noch weit von dem entfernt, was Etherpad Lite heute ist. Aber es war zumindest ein Beweis, dass es machbar ist. Und das mit nur einem Bruchteil der Ressourcen und einer vereinfachten Installation.
Mein Werk wurde belächelt. Es hieß, dass es nie Augenhöhe mit Etherpad erreichen könnte, da man so viel neu schreiben müsste. Trotzdem wollte man die Arbeit nicht wegwerfen und die Einigung war schließlich, es “Etherpad Lite” zu nennen. Wir veröffentlichten es auf Github und ich arbeitete hauptsächlich am Wochenende weiter daran.
Als John mit anderen Kollegen der Firma über die Roadmap der als nächstes zu erledigenden Arbeiten sprach, fiel dort auch der Begriff Etherpad Lite. Der Fakt des geringen Ressourcenverbrauchs erschien den anderen als erstrebenswertes Ziel, denn das würde auch den enormen Hardwarebedarf und somit Kosten reduzieren. Damit wurde mir genehmigt, 3 Monate ausschließlich an Etherpad Lite zu arbeiten und es zur Produktionsreife zu entwickeln.
Mit der Zeit haben wir uns dann entschieden, Etherpad nicht einfach zu kopieren, sondern neu auszurichten. Das alte Etherpad hatte die öffentlichen Pads, die für Kunden zum Ausprobieren gedacht waren, sowie die privaten Pads die man käuflich erwerben konnte. Wir kamen zu dem Schluss, dass Etherpad mehr Sinn macht, wenn man die Technologie nicht mehr als eigenständige Applikation, sondern mehr als Plugin für andere Plattformen entwickelt. Somit wäre zum Beispiel ein Wiki mit Echtzeitbearbeitung denkbar.
Diesen Montag war es dann so weit. Nachdem ich zahlreiche Hilfe von anderen Entwicklern bekommen und die letzten 2 Wochen nahezu 7 Tage die Woche daran gearbeitet hatte, haben wir es veröffentlicht. Besonderen Dank für dieses schöne und moderne Layout möchte ich hier auch Robin Buse aussprechen. Das Feedback gibt uns Recht, dass die Idee gut und notwendig war. Die Schattenseite: In einer Woche gehe ich zurück nach Deutschland und Etherpad Lite wird vermutlich wieder ein Wochenendprojekt von mir und anderen Personen werden. Falls deine Firma also Interesse an der Open Source Weiterentwicklung von Etherpad Lite hat, dann meldet euch bitte. Ich würde mich freuen, an diesem Projekt Vollzeit weiterarbeiten zu können.

Posted: August 25th, 2011
Categories: Allgemein
Tags: , , , , ,
Comments: 6 Comments.

Etherpad Lite in einer Minute auf Windows installieren

Ich arbeite zurzeit an einem Projekt namens Etherpad Lite (mehr details dazu gibts in ein paar Tagen). Der Hauptunterschied zwischen Etherpad und Etherpad Lite ist das wir keine Java Platform mehr benutzen, sondern auf node.js aufsetzen. Dies löst auf den Schlag viele Probleme die wir mit dem alten Etherpad hatten. Eines dieser Probleme ist der Windows support. Etherpad Lite ist super einfach auf Windows zu installieren. Sprich ihr könnt jetzt ganz einfach auf euren Windows PC, in der Arbeit oder Zuhause mit anderen zusammenarbeiten. Ihr seid nicht mehr auf die Verfügbarkeit und Stabilität der großen Etherpad Dienste angewiesen, solange ihr im lokalen Netz zusammenarbeitet.

Hier die Installation:

  1. Downloade folgende Zip Datei pitapoison.de/etherpad-lite-win.zip
  2. Entpacke diese Zip Datei, z.B. mit WinRAR 
  3. Öffne den entpackten Ordner namens “etherpad-lite-win” und doppelklicke auf die Datei “start.bat”
  4. Gehe mit deinem Browser auf http://localhost:9001

Posted: August 12th, 2011
Categories: Allgemein
Tags: , , ,
Comments: 1 Comment.

Get involved with Etherpad Lite

From John McLear, on the Etherpad Mailinglist

Hey, we have been doing a bunch of PR and marketing lately in a bid to
get a good push behind Etherpad Lite when we release version 1 in
August. If you haven’t heard of Etherpad Lite then you need to read
this.

We have found that the best way to introduce people to Etherpad Lite
is to give them a beta option, in PrimaryPad’s case we are replacing
public pads with Etherpad Lite.

If you can write a blog post, a tweet, or even make some videos that
go up to youtube that would be perfect.

So why should you be interested in Etherpad Lite?

  • Cleaner/Slicker UI – easier to use
  • Less Code – easier to modify
  • Less resources required – less hardware barriers to adopt Etherpad
  • An API – easier to integrate Etherpad with other pieces of awesomeness

All of the above and we kept 99% of the core functionality.

See Etherpad lite here: http://beta.etherpad.orghttps://github.com/Pita/etherpad-lite
Details including a link to download available here: http://etherpad.org/get-involved/

Note for people heavily invested in developing Etherpad: I believe
that Etherpad lite is the natural evolutionary path of Etherpad, it
brings Etherpad to a larger audience and ergo we should find more
developers and users getting involved. I admit that we do lose some
of the hard work we have put in other the last 2 years by taking this
road and that does hurt and come at a cost, probably no more so than
the cost to Primary Technology who have paid for the majority of the
Etherpad Lite development. I expect we will make some enemies/losing
some friends by having two versions. Any input/advice is appreciated,
we need everyone’s support to take Etherpad to the next level!

Note for people working on pro democracy/humanitarian based projects:
Etherpad has become the standard for many foreign countries going
through times of conflict. These countries tend not to trust western
superpowers so often choose to host their own Collaborative editor to
draft new laws and try to find a way to settle conflicts by using
words other than weapons. At the Etherpad foundation we want to
support their struggle, we believe Etherpad Lite makes this way more
possible as you can now run the Etherpad server on a mobile phone. By
running the server on a mobile phone with hotspot mode enabled you are
able to get 4 or 5 people in a room or over the net working together
to solve a problem without any dependency or influence on third
parties. This is also key for freedom organizations and/or parties
don’t represent the status quo/majority vote. This is truly
significant from a humanitarian stand point, it is difficult to stress
our responsibility here, we shouldn’t take it lightly.

Cheers

Posted: Juli 23rd, 2011
Categories: Allgemein
Tags: , ,
Comments: No Comments.

Wie der Etherpad Timeslider funktioniert

Etherpad arbeitet mit sogenannten Changesets. Ein Changeset beschreibt die Änderungen des Textes zwischen 2 Revisionen. Der Etherpad Client erzeugt beim Schreiben jede halbe Sekunde ein Changeset und sendet es an den Server. Der Server versucht dieses Changeset auf den serverinternen Text anzuwenden. Wenn es gelingt informiert er die anderen Clients über diese Änderung, die diese dann wieder lokal anwenden können. Der Server speichert jedes einzelne Changeset in der Reihenfolge in der sie angewendet wurden, inklusive Zeit und Autor.

Die Aufgabe des Timesliders ist es nun, den Text zu einer bestimmten Revision, mit Hilfe der Changesets wieder herzustellen. Wir müssen dabei bedenken das die Summe der Changesets eine riesige Datenmenge ist und das Netzwerk, sowie die Rechenleistung des Browsers sehr begrenzt sind (zumindest wenn man zu alten Browsern kompatibel sein will). Sprich: Es muss versucht werden die Menge der zu übertragenden Daten so gering wie möglich zu halten, ebenso wie die Menge der Rechenschritte auf dem Browser, um den Text von einer Revision wiederherzustellen.

Die Lösung ist das sogennante Mergen von Changesets. Angenommen wir haben den Text von Revision 0, und wollen wissen welcher Text auf Revision 10 steht. Wir haben nun 10 Changesets die die Veränderungen zwischen diesen 10 Revisionen beschreiben. Um zu Revision 10 zu kommen müssen wir jetzt diese 10 Changesets nacheinander auf den Text von Revision 0 anwenden, um an den Text von Revison 10 zu gelangen. Das Mergen ermöglicht es uns diese 10 Changesets zu einem einzigen zusammenzufassen. Somit müssen wir nur noch 1 Changeset auf den Ursprungstext anwenden um von Revison 0 zu Revision 10 zu kommen. Etherpad speichert solche sogenannten “Rough Changesets” in 10er, 100er und 1000er Schritten. Man kann aus diesen Rough Changesets dann wieder sogenannte “Reverse Changesets” erzeugen. Mit diesen kommt mann dann mit Hilfe der Revision 10 wieder auf die Revision 0. Sie beschreiben also die Veränderungen rückwärts.

Mit den Rough Changesets die wir nun vorwärts und rückwärts haben, können wir relativ schnell zwischen den Revisionen hin und her springen. Beim Timeslider werden sie je nach Bedarf vom Server zum Client via Ajax übertragen. Ein paar dieser Changesets werden auch bereits ins HTML des Timesliders eingebettet. Ein Fehler in der Etherpad Software führte dazu das beim Laden eines Timesliders, dessen Pad mehr als 10 000 Revisionen besass, der Pad Server begann ein Rough Changeset über 10k zu berechnen. Das dauert ca 2 Minuten. In dieser Zeit wurde zudem die gesamte Datenstruktur geblockt so das keine neuen Revisionen erzeugt werden können, was zu einem Timeout bei den Clients führte.

Posted: Juni 21st, 2011
Categories: Allgemein
Tags: ,
Comments: No Comments.

Etherpad Smartphone Support

Mit Smartphone meine ich nachfolgend jegliches Android und iOS Gerät, auch Tablets.

Wäre Smartphone Support sinnvoll?

Ja definitv! Mit Etherpad werden zunehmend z.B. Demonstrationen organisiert, und hier könnte Etherpad helfen Informationen schnell mobil zu verbreiten. Zudem informieren sich allgemein immer mehr Leute über das Internet ihres Smartphones. Ich glaube nicht das jemand lange Texte damit schreiben will, aber zum lesen ist es auf jeden Fall eine gute Idee.

Wie gut ist der Support derzeit?

Mit allen Smartphones kann man derzeit das geschriebene Live verfolgen. Leider gibt es hier Probleme, da durch das iFrame in dem der Text liegt, nicht der komplette Text angezeigt wird. Zudem bricht die Verbindung über das Mobilfunknetz sehr oft ab. Tippen kann man nur unter Android. Dazu muss man kurz auf der MENU Taste bleiben, damit die Tastatur eingeblendet wird. Sehr komfortabel ist allerdings auch das nicht, da hier kein Cursor angezeigt wird und kein Text markiert werden kann. Ich hatte während den großen S21 Demonstrationen einen Einstellung aktiviert die iPhones automatisch zu dem HTML Export weiterleitet, so dass sie wenigstens alles lesen können. Ich habe die Einstellung dann wieder entfernt weil ich dazu keinerlei Feedback bekommen habe, dafür aber aber an anderen Ecken Probleme auftauchten.

Wo liegt das Problem?

Das Problem ist ein HTML Feature namens “Design Mode”. Es wurde ziemlich früh in der Geschichte von HTML als propertiäre Erweiterung hinzugefügt. Mit diesem Feature wird dem Browser erlaubt jegliches HTML Element zu editieren. Es wird von allen Desktop Browsern, sogar von IE6 unterstützt. Mit den mobilen Browsern scheint es jetzt jedoch gestorben zu sein. Ob das an am bösen Willen der Hersteller, deren  Unfähigkeit, oder einfach keiner Nachfrage liegt, weis ich jetzt nicht zu beurteilen. Es gibt derzeit einfach keinen HTML WYSIWYG Editor der gut unter mobilen Browsern funktioniert. Man könnte den Editor für mobile Geräte einfach zu einem nur Text Editor umschwenken. Diese werden von den mobilen Browsern gut unterstützt. Eine andere Möglichkeit wäre eine komplette Tastatur, inklusive Cursor und Textauswahl in Javascript zu schreiben.

Warum machst du nicht einfach eine App?

Das wäre in der Tat möglich, ist jedoch mit einem enormen Aufwand verbunden. Es gibt 2 große Probleme:
1) Alle Nachrichten die zwischen Client und Server ausgetauscht werden müssen reverse enginert und nachgestellt werden. Das wurde sogar zu einem recht großen Teil für einen Emacs Client gemacht und dieses Wissen kann wiederverwendet werden.
2) Das Dokument muss im Speicher der App genauso repräsentiert werden wie es der Client in Javascript gemacht hat. Das ist nicht so einfach wie man sich das vielleicht vorzustellen hat. Genaueres kann man hier nachlesen. Wenn sich jemand die Arbeit machen will, soll er sich an mich wenden. Allerdings sollte er SEHR viel Zeit und Geduld mitbringen

PS: Aber wir haben es schon geschaft den Etherpad Server auf einem Smartphone laufen zu lassen ;) https://github.com/Pita/etherpad-lite

Und btw, hat schonmal jemand Etherpad mit Windows Mobile getestet?

Posted: Mai 25th, 2011
Categories: Allgemein
Tags: ,
Comments: 3 Comments.

Impressum