Prof. Dr. Detlef Stern

Zettelstore 0.12

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

Was gibt es an relevanten Änderungen im nun 27. Release?

Für einen normalen Nutzer gibt es eher wenig sichtbare Änderungen. So sind alle Metadaten, deren Namen auf „-date“ oder „-time“ endet, automatisch vom Typ „Zeitstempel“, also eine Zeitangabe. Zusätzlich wurde das Metadatum „expire“ definiert, das angibt, wann der Inhalt eines Zettels nicht mehr als gültig angesehen wird. Damit könnte man z.B. DSGVO-relevante Zettel identifizieren und ggf. löschen. Ein weiteres Metadatum kann einen übergeordneten Zettel spezifizieren („superior“), ensprechend wird „subordinate“ vom Zettelstore automatisch berechnet. In der Web-Oberfläche gibt es ggf. einen Abschnitt, wo Verweise auf diese Zettel angezeigt werden.

Ja, Web-Oberfläche. Hier gab es die größte Änderung, allerdings nicht unmittelbar einsehbar. Für alle Seiten der Web-Oberfläche werden sog. Templates genutzt, welche die Struktur der jeweiligen Seite vorgeben. Die Templates selbst sind als (mitgelieferte) Zettel abgelegt und können ggf. angepasst werden. Ursprünglich hatte ich die Templates so definiert, wie sie von der Programmiersprache Go unterstützt wurden. Der Zettelstore ist ja aktuell in Go programmiert. Würde sich das ändern, so müsste ich die von Go bereitgestellten Funktionalitäten nachbauen, will ich nicht die Templates ändern. Deshalb wechselte ich vor mehr als zwei Jahren mit Version 0.0.9 auf Mustache, das in vielen Programmiersprachen verfügbar ist. Damit war ich zunächst zufrieden, bis ich vor einigen Monaten den generierten HTML-Code automatisiert überprüfte und viele Verletzungen des HTML5-Standards feststellte. Hauptproblem: Mustache berücksichtigt nicht die innere Struktur von HTML, sondern behandelt alles als unstrukturierte Ansammlung von Zeichen (aka Zeichenkette). In der Version 0.11 habe ich alles bis auf die Templates umgestellt, um gültiges HTML generieren zu lassen, jetzt waren die Templates selbst an der Reihe. Wer also die Templates modifiziert hat, muss bei einem Update diese Änderungen zurücknehmen, um sie dann in die neuen Templates neu zu integrieren. So viele Nutzer sollten das aber nicht sein.

Technisch gesehen sind die neuen Templates nichts anderes als symbolische Ausdrücke, wie man sie von LISP-Sprachen her kennen könnte. Und ja, nun enthält der Zettelstore einen Interpreter einer LISP-ähnlichen Sprache. Wie weit dieser weiter ausgebaut werden wird lasse ich mal offen. Ein EMACS wird der Zettelstore sicher nicht, höchstens ein HyperCard für Nerds.

Da symbolische Ausdrücke nun an viel mehr Stellen verwendet werden, habe ich die „sexpr-Kodierung“ von Zetteln in „sz-Kodierung“ umbenannt. Auch das ist eine inkompatible Änderung, die höchstens Nutzer des Zettel Presenter. Langfristig wird die „JSON-Kodierung“ von Zetteln und API-Aufrufen wegfallen und auch die durch symbolische Ausdrücke mit der „data-Kodierung“ ersetzt. Dies gilt schon jetzt für die Authentifizierung mittels der API.

Der in der letzten Version eingeführte PICK-Operator bei Suchen hat eine leicht geänderte Bedeutung erhalten. Bisher wählte dieser aus einer Ergebnismenge eine Anzahl an Zettel zufällig aus und gab diese auch in einer zufälligen Reihenfolge zurück. Nun wählt er nur zufällige Zettel aus, behält aber die Reihenfolge bei. Das erleichtert das Arbeiten mit dem Zettelkontext über den Suchoperator CONTEXT Zettel-ID. Die Operatoren RANDOM und LIMIT erhalten so ihre früheren Bedeutungen zurück.

Ja, der Zettelkontext ist nun Teil einer Suchabfrage und kein eigener API-Aufruf mehr. Damit lässt sich die Suche zum Beispiel bis zu einer bestimmten Verknüpfungstiefe eines bestimmten Zettels beschränken.

Ebenso wurden Suchoperatoren = und : konsistenter umgesetzt. = bedeutet nun immer Gleichheit, während : immer ein dem Typ des Metadatum passender Vergleich ist. So bedeutet title=Zettelstore, dass nur Zettel ausgewählt werden, die genau diesen Titel besitzen. Dagegen bedeutet title:Zettelstore, dass Zettel ausgewählt werden, die den Begriff „Zettelstore“ im Titel enthalten.

Ansonsten wurde, wie üblich, viele kleine Fehlerchen beseitigt.

Kleiner Fun-Fact: in diesem Release ist die Programmdatei des Zettelstore so klein, wie seit Version 0.1 nicht mehr. Dies geht größtenteils auf das Konto der neuen Templates. Dabei sind die Templates selbst nur um ca. 4 % kleiner geworden. Dafür konnte der gesamte Programmcode um Mustache herum entfernt werden und es ergaben sich weitere Vereinfachungen durch das neue, einheitliche Modell der HTML-Generierung. Hier sprechen wir von einer Reduktion von 10–15 %.

Was plane ich für die nächste Version? JSON wird perspektivisch aus der API entfernt. Wer die API mittels des Zettelstore-Clients nutzt sollte keine Umstellungsprobleme haben, da ich diesen entsprechend gleich mit anpasse. Ohne JSON erwarte ich, dass die Programmdatei wieder etwas kleiner wird.

Ich erwarte die eine oder andere interne Optimierung, evtl. eine weiter Benutzerolle. Denn sollte es Zettel mit Programmcode in meiner LISP-Sprache geben, dann könnte das die bisherigen „experts“ überfordern. Der Zettelstore soll zwar etwas nerdig bleiben, aber dennoch für unerfahrende Nutzer sicher bleiben.

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