Prof. Dr. Detlef Stern

Zettelstore 0.8

Die gute Nachricht für alle Nutzer des Zettelstore: Version 0.8 ist verfügbar. Dies gilt auch für die Bibliothek, um auf den Zettelstore zuzugreifen (a.k.a Zettelstore Client.

Was gibt es neues?

Nicht so viel.

Hauptsächlich habe ich die in Version 0.7 angekündigten Abkündigungen umgesetzt. Schlagworte (a.k.a Tags) können nun nur noch in den Metadaten angegeben werden, nicht mehr im Inhalt eines Zettels. Das hat intern vieles vereinfacht. Den API-Endpunkt /m gibt es nicht mehr. Dessen Funktionalität wurde in Version 0.7 durch die Queries bereitgestellt. URL Query-Parameter, die mit einem Unterstrich beginnen, wurden entfernt.

Im Zuge dieser Änderungen gibt es nun einen neuen API-Endpunkt /q, mit dem Queries auch per API ausgeführt werden können. Der Endpunkt /z ist nun de facto nur ein Alias für /q, da /q mehr Möglichkeiten bietet.

Wer nutzt eigentlich die API (und nicht nur das Web-Interface)? Mich interessieren eure Anwendungsfälle.

Sicherheit

Ich habe viele kleine Dinge integriert, die es schwerer machen sollen, einen Zettelstore unsicher zu betreiben. Natürlich gibt es keine absolute Sicherheit. Ebenso kann ein versierter Betreiber den Zettelstore unsicher betreiben.

Zunächst habe ich die Möglichkeit eingeschränkt, dass in Zetteln gespeichertes HTML ausgegeben wird. In HTML kann potentiell JavaScript eingebettet werden, das wiederum mehr oder minder beliebige Aktionen ausführen kann. Das ist besonders relevant, wenn man den Inhalt nicht selbst geschrieben sondern irgendwoher kopiert hat.

Schon immer wird der HTML-Code nicht ausgegeben, wenn dieser bestimmte Inhalte hat, z.B. ein <script>-Tag. Sollte es in Zukunft weitere Möglichkeiten geben, wie JavaScript in HTML eingebettet werden kann, dann hilft das wenig. Der Zettelstore soll langlebig sein.

Es gibt aktuell drei Arten, wie man HTML-Inhalte in den Zettelstore bringt. Am einfachsten über einen Zettel mit Syntax „html“. Was viele nicht wissen (oder gerne ignorieren): jeder HTML-Inhalt ist zugleich auch Markdown-Inhalt (genauer: das, was im HTML-<body>-Tag steht). Also sind Markdown-Zettel ähnlich vulnerabel. Und auch in Zettelmarkup ist es potentiell möglich, HTML anzugeben: über das Konzept der Inline-Zettel. Ein Inline-Zettel kann wiederum als Syntax „html“ oder „markdown“ / „md“ haben (oder selbst wieder „zmk“ und dieser Inline-Zettel enthält selbst wieder Inline-Zettel …).

Um die HTML-Ausgabe dieser drei Arten steuern zu können, gibt es die Konfigurationsvariable insecure-html. Ist sie nicht gesetzt, wird kein HTML-Inhalt ausgegeben. Ansonsten gibt es die Werte „html“, „markdown“ und „zettelmarkup„, welche sukzessive HTML-Inhalte erlauben.

Darüber hinaus werden nun im Zettelmarkup jene Entities ignoriert, welche schon in HTML nicht erlaubt sind, z.B. &#1;. Damit könnte man sich sonst das Leben unnötig schwer machen.

Zusätzlich warnt der Zettelstore, wenn auch externe Computer auf ihn zugreifen könnten, aber keine Authentifizierung aktiviert ist.

Arbeiten mit Zetteln

Bisher ist es möglich, einen bestehenden Zettel zu kopieren oder von einem bestehenden Zettel einen Folgezettel zu erstellen. Je nachdem, wie man sich verzettelt (also seinen Wissenstransferprozess gestaltet) sind beide Möglichkeiten nützlich.

Nun ist es zusätzlich möglich, eine neue Version eines bestehenden Zettels zu erstellen. Die neue Version erhält eine neue Identifikation, verweist auf das Original (wie ein Folgezettel), enthält aber den Inhalt des Originalzettels (wie eine Kopie). Das ist hilfreich, wenn man veraltete Inhalte nicht löschen möchte.

Bilder aus dem in Version 0.7 eingeführten Asset-Verzeichnis können nun mittels Transklusion in einen Zettel eingebettet werden.

Felerchen

Die Schlagwortwolke (a.k.a Tag Cloud) wird gebildet, indem das Schlagwort je nach Anzahl der Zettel, die dieses Schlagwort angeben, größer oder kleiner als andere Schlagworte angezeigt werden. Den Algorithmus zur Größenanpassung habe ich geändert. Zumindest in meinem Zettelstore erkenne ich relevante Schlagworte nun besser.

Wurde eine Zetteldatei manuell aus dem entsprechenden Verzeichnis gelöscht, so hat der Zettelstore dies zu häufig nicht erkannt. In der Folge gab es eine recht heftige Fehlermeldung, die nur durch einen „Reload„ behoben werden konnte, oder durch einen Neustart des Zettelstores. Durch eine Korrektur konnte ich diesen Fehler nicht mehr reproduzieren, auf allen unterstützten Betriebssystemen. Ausschließen lässt sich dieses Verhalten prinzipiell nicht (nämlich wenn das Betriebssystem nicht mitteilt, dass eine Datei gelöscht wurde), es wird aber nun wesentlich seltener auftreten.

Kleinigkeiten

Der RSS-Feed enthält nun auch Kategorien, auf Basis der Schlagworte der Zettel. Und es gibt einen rudimentären Atom-Feed, falls jemand einen RSS-Reader nutzt, der RSS 2.0 nicht unterstützt.

Und sonst?

Die nächste Version 0.9 ist schon in Arbeit. Obwohl, so richtig auch nicht. Ich habe begonnen, den Quelltext weitergehend und automatisiert zu testen. Dabei habe ich kleinere Unschönheiten entdeckt. Etwa, wenn man im Zettelmarkup 5000-mal das Zeichen [ hintereinander angegeben hat, dann dauerte es bis zu einer Minute, bis die Web-Oberfläche den Zettel darstellte. Wer will, kann das ja mal in Version 0.8 ausprobieren.

Ich überlege, dass man in der Web-Oberfläche auch Bilder hochladen kann. Bisher muss man die Dateien direkt ins Dateiverzeichnis der Zettel kopieren und den Namen als gültige Zettelidentifikation angeben. Besonders wenn man seinen Zettelstore auf einem separaten Computer betreibt ist das sonst etwas nervig.

Tja, und dann hatte sich ein Nutzer des Zettelstores sehr positiv über die SVG-Integration geäußert. Danke für das Feedback, unbekannte „Wühlratte“. Das hat mich bestärkt, auch in Zukunft auf (relativ) zukunftssichere Dateiformate zu setzen, wie eben SVG.

Zugleich denke ich darüber nach, ob ich das in Version 0.7 frisch eingeführte pikchr wirklich im Zettelstore belassen soll. De facto ist es ein Frontend zu SVG. Pikchr ist nicht unmittelbar zu verstehen, d.h. man bräuchte den Zettelstore, um Zettel mit der Syntax „pikchr“ zu verstehen (oder das Originalprogramm). Und beim oben angesprochenen automatisierten ist mir zudem die frag-würdige Qualität der Portierung des Originalprogramms nach Go aufgefallen. Dahinter steckt eine recht aufwändige Werkzeugkette, die ich auf Dauer pflegen müsste.

Aktuell verwende ich Pikchr bei mir in genau zwei Zetteln. Alternativ könnte man das Orginalprogramm nutzen und das resultierende SVG in einen Zettel kopieren. Fertig. Eventuell könnte man auch den Pikchr-Code in einen eigenen Zettel kopieren und beide Zettel miteinander verknüpfen.

Es gibt auch so viele andere wunderbare Software, um SVG zu erzeugen. Ob nun Inkscape, https://app.diagrams.net/ oder andere.

Vielleicht so: in Version 0.9 wird es kein Pikchr geben, es sei denn, jemand gibt mir rechtzeitig einen guten Grund, es im Zettelstore zu belassen.

Und sonst? (2)

Zwar kann der Zettelstore schon jetzt als (einfache) Blogging-Engine verwendet werden (und er wird so verwendet). Spätestens seit die SM-Welt dank eines reichen Menschens in Bewegung gekommen ist, denke ich über eine Client-Software für den Zettelstore nach, die sich besser in die Blogosphäre integrieren kann, inklusive IndieWeb-Integration.

Auch das Thema Zettel Mail ist noch aktuell. Etwas zeitlich entfernter auch eine bessere Oberfläche, inklusive „Schreibtisch-Funktion“.

Offenbar konsolidiert sich der Zettelstore langsam und es bilden sich weitere Einsatzmöglichkeiten.

Still digging.

Aber vielleicht kommt noch eine Anregung aus dem Kreis der Nutzer oder Interessierten dazu …