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. 
. 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 …