Prof. Dr. Detlef Stern

Zettelstore 0.13

Die gute Nachricht für alle Nutzer des Zettelstore: Version 0.13 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 28. Release?

Die Abfragemöglichkeiten wurden erheblich erweitert. Zum einen betrifft dies das Umfeld des Suchoperators CONTEXT. Musste in Version 0.12 anschließend eine Zettelkennung angegeben werden, können es nun auch mehrere sein, aber vor dem CONTEXT. Statt CONTEXT sind nun auch andere Direktiven erlaubt. IDENT erlaubt, dass eine nachfolgende Suche auf die angegebenen Zettel beschränkt ist. ITEMS ermitteln auf Basis die Zettel jene, die dort explizit aufgelistet sind. Damit wird zugleich den API-Endpunkt /o/{ID} ersetzt, dessen Funktionalität damit auch für die Web-Oberfläche zugänglich gemacht wird. UNLINKED ermittelt alle Zettel, die zwar die Titel der angegebenen Zettel haben, aber auf diese nicht verweisen. Hiermit wird analog der API-Endpunkt /u/{ID} ersetzt. Alle Direktiven ermitteln auf Basis der angegebenen Zettel weitere, so dass nicht nur eine Direktive angegeben werden kann.

Nach den Direktiven werden bei einer Abfrage die Suchparameter angegeben. Auch hier gab es Änderungen. Die früheren Präfix-/Suffix-Operatoren < und > wurden durch [ und ] ersetzt. Damit ist es nun möglich die Operatoren < und > als „kleiner“ und „größer“ zu interpretieren. Entsprechend bedeutet ein !< ein „nicht kleiner“ bzw. „größer oder gleich“ (!> analog). Damit können nun auch Bereichsabfragen gestaltet werden.

Für die Web-Oberfläche gab es kleinere Änderungen. Schlagworte müssen im Formular nicht mehr mit einem # beginnen. Dieses Zeichen wird ggf. automatisch ergänzt. Für die in der Version 0.12 eingeführten Metadaten superior und subordinate gibt es nun eine Aktion „child“, um einen untergeordneten Zettel anzulegen. Das Metadatum folge-role wird in der Rollenangabe eines Zettels interpretiert und dargestellt. Die Ergebnisse einer Abfrage können auch in anderen, von der API erlaubten Formaten angezeigt werden.

In der Log-Ausgabe wird der Ort einer möglichen Konfigurationsdatei angegeben. Dies ist gerade dann wichtig, wenn man mit mehreren Dateien experimentiert.

Die folgenreichste Änderung wurde in API vorgenommen. Alle Aufrufe sind im seit Version 0.11 eingeführten „data“-Kodierung möglich. Diese sind nichts anderes als symbolische Ausdrücke (s-expressions). Ab der kommenden Version sind keine API-Aufrufe in der „JSON“-Kodierung mehr möglich. Wer den Zettelstore-Client nutzt, muss nichts umstellen. Wer ihn nicht verwendet, der schon.

Die eine oder der andere wird sich wundern, weshalb der Zettelstore ein so populäres Format wie JSON nicht mehr nutzt. Wer sich intensiver mit Datenformaten beschäftigt hat, wird sich erinnern, dass vor nicht zu langer Zeit andere Formate populär waren. XML ist nur ein Beispiel. Zwar mag es gut Gründe geben, weshalb sich die Popularität von JSON nicht zu sehr ändern muss, aber wer kann sich sicher sein. Da Langlebigkeit ein Entwurfskriterium des Zettelstore ist, kommt hier nur ein Format in Frage, dass schon länger existent ist. Und wer will, kann sich noch immer einen Adapter von/nach JSON schreiben. Der andere Grund liegt in der Implementierungsspreche des Zettelstore begründet. Es gibt mindestens eine Implementierungen von Go, welche die JSON-Bibliotheken nicht unterstützen. Ich möchte nicht ausschließen, den Zettelstore auch auf deren Ablaufumgebungen ausführen zu können, namentlich bestimmte eingebettete Systeme und WASM.

Eine weitere Änderung würde nicht diejenigen betreffen, die am Quelltext des Zettelstore und der davon abhängigen Produkte arbeiten wollen. Aus guten Gründen nutze ich Fossil zur Verwaltung des Quelltextes. Damit andere mittels Git auch darauf zugreifen können, spiegele ich die in Fossil gespeicherten Informationen nach GitHub. Durch einen zusätzlichen Mechanismus gaukel ich potentiellen Nutzen vor, alles sei unter https://zettelstore.de/ via Git zugänglich. Da das für den Zettelstore selbst, dessen Client und der Zusatzsoftware, wie Zettel Presenter, gilt, macht es die Handhabung beim Entwickeln etwas zäher. Zumal der Programmcode für die symbolischen Ausdrücke und für SxHTML wiederum von Git verwaltet wurden.

Nun habe ich alles nativ auf Fossil umgestellt. Wer den Quellcode in seine eigene Software importieren möchte, muss Fossil installieren. Sonst geht es nicht. Für mich hat es das Arbeiten, nach einigem Herumprobieren, erleichtert. Warum musste ich herumprobieren? Anders als die meisten bisherigen Programmiersprachen nutzt Go explizit Git. Will man ein externes Paket nutzen und importieren, ist der Default-Mechanismus Git. Die Abhängigkeit zu bestimmten Git-Diensten, wie GitHub, GitLab ist explizit in die Standardwerkzeuge einprogrammiert. Fossil (und alle anderen Verwaltungssoftware) ist da nur zweite Wahl, mit weniger Möglichkeiten. Das gilt schon, wenn man seinen mit Git verwalteten Programmcode selbst hosten möchte. All das ist schade. Aber für mich ist Fossil das wesentlich angemessenere Werkzeug, besonders im Vergleich zu Git.

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

Was plane ich für die nächste Version? JSON wird aus der API entfernt. Die Hoffnung, durch das nicht mehr genutzte JSON-Paket die ausführbare Zettelstore-Datei kleiner werden zu lassen, hat sich erfüllt. Die Entwicklungsversion, die später zur Version 0.14 werden wird, ist locker ein knappes Viertelgigabyte kleiner geworden.

Etwas mehr hat interessanterweise die gerade frisch herausgekommene Go-Version 1.21 gebracht. Hiermit wurden die ausführbaren Dateien nochmal um etwas mehr als ein halbes Gigabyte kleiner.

Möglicherweise verbessere ich die Dauer von Suchabfragen, indem für die meisten Fälle nicht mehr die relevanten Dateien gelesen werden müssen. So gut wie alles wird ohnehin im Suchindex gespeichert, der im Hauptspeicher abgelegt ist.

Ansonsten plane ich Schlagwortzettel (Zettel, die Schlagworte beschreiben), abkürzbare Zeitstempel für einfachere Suchanfragen und rollenspezifische Templates für die Web-Oberfläche.

Die neue Version wird es auf jeden Fall im September 2023 geben, da sie Basis für eine meiner Lehrveranstaltungen sein wird. Sprich: all das hier angesprochene kann sich auch auf eine spätere Version verschieben.

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