Prof. Dr. Detlef Stern

Zettelstore 0.2

Die gute Nachricht für alle Nutzer des Zettelstore: die Version 0.2 ist verfügbar.

Ursprünglich war mein Plan, fast nur interne Verbesserungen zu programmieren, besonders rund um den ältesten Programmcode. Diesen hatte ich geschrieben, als ich anfing Go zu lernen und dabei dessen Besonderheiten auszuprobieren. Damals war ich von den Möglichkeiten angetan, wie man nebenläufige Aktivitäten programmieren kann und hatte das am Beispiel von externen Änderungen an den Zetteldateien versucht. So grob hat dieser Programmcode funktioniert, aber nicht in Grenzfällen. Was passiert zum Beispiel, wenn gleich das ganze Zettel-Verzeichnis gelöscht wird? Hint: lustige, wenig nachvollziehbare Fehlermeldungen, je nach Betriebssystem. Zusätzlich ist mir aufgefallen, mit nun etwas mehr Erfahrung in der Problemstellung und in der Go-Programmierung, wie kompliziert ich damals programmiert hatte.

Lange Rede, kurzer Sinn: den Plan habe ich erfüllt.

Allerdings fragte mich Mitte November @Queryologist auf Twitter, ob der Zettelstore denn auch Unlinked References unterstützen würde. Mein erster Gedanke war „Hä?!?“. Nach ein wenig Recherche bekam ich heraus, dass damit unverlinkte Textfragmente gemeint sind, die zugleich der Titel eines Zettels sind und so potentiell auf diesen verweisen könnten. Ich finde dieses Konzept ganz nützlich, um ggf. fehlende Verweise zwischen Zetteln identifizieren zu können.

Sprich, mit dieser Version unterstützt der Zettelstore Unlinked References, sowohl in der Web-Oberfläche als auch per API, und das sogar etwas flexibler als potentielle Alternativen.

Die Programmierung für die Unlinked References hatte den netten Nebeneffekt, einige Probleme bei Grenzfällen zu offenbaren. Dies betraf u.a. die Suche, insbesondere die gemischte Suche nach Metadaten und im Volltext. Gefixt, mitsamt wesentlich vereinfachten Programmcode.

Nebenbei wurde mir klar, dass zu viele Aktivitäten im Zettelstore sehr verborgen ablaufen. Vermutlich wollen die meisten über diese Aktivitäten auch gar nicht im Detail informiert werden. Aber wenn doch, dann fehlt dazu einiges im Zettelstore. Also schrieb ich ab Ende November eine kleine Komponente, um Aktivitäten darzustellen, eine Logging-Komponente.

Wie bekannt, wurde am 10. Dezember 2021 bekannt, dass das Logging-Framework Log4j ein riesiges Sicherheitsloch aufwies. Diese nette zeitliche Zusammenhang macht mir einmal wieder die Probleme umfangreicher Frameworks bewusst, von denen man nur eine kleine Teilmenge benötigt. Meine eigene Komponente ist bewusst minimalistisch und de facto nur für den Zettelstore nutzbar. Aber natürlich habe ich analysiert, ob meine Zeilen eine irgendwie ähnlich Schwachstelle aufweisen.

Wer den Zettelstore im Experten-Modus betreibt, bekommt die Log-Ausgaben in einem Zettel dargestellt, nicht nur auf der Konsole.

Auch Dank der Logging-Ausgaben war es für mich einfacher, meinen eigentlichen Plan der Neugestaltung des Lesens und Schreibens von Zettel-Dateien zu verfolgen. Nebenbei gab es recht viele Fehlerkorrekturen, die sich zum Glück aber (fast) nur in Grenzfällen auswirkten, etwa wenn ein Zettel im YAML-Format geschrieben werden sollte oder wenn nicht direkt klar war, welche Datei für den Zettelinhalt herangezogen werden soll.

Auch in dieser Version gab es dann doch eine inkompatible Änderung: werden Metadaten in einer eigenen Datei gespeichert, z.B. bei Bildern im PNG/GIF/JPEG-Format, dann hatte diese Datei bisher die Endung .meta. Ab dieser Version sollte diese Datei keine Dateiendung mehr besitzen. Aktuell werden aber noch Dateien mit der Endung .meta als Metadatendateien erkannt. Es wird aber eine Warnung ausgegeben (über die Logging-Komponente, natürlich).

Ab Version 0.3 werden Dateien mit der Endung .meta als Inhaltsdatei interpretiert. Ggf. fehlende Metadaten wurde schon immer interpoliert, die .meta-Datei wird dann meist als Duplikat / Kollision zur eigentlichen Inhaltsdatei angemahnt.

Zu viel Zeit mit der Umbenennung der .meta-Dateien sollte man sich nicht lassen, denn der Funktionsumfang der kommenden Version 0.3 wird recht klein sein. Neben einigen kleiner Verbesserungen, z.B. an der API, wird es möglich sein, Graphiken zu erstellen, indem man diese als Text „malt“. Diese werden dann in das SVG-Format umgeformt und angezeigt. So kann man Graphiken erstellen, die zur Not auch ohne Zettelstore interpretierbar sind. Mein eigener Anwendungsfall ist die Erstellung von Graphiken für Vorlesungsunterlagen. Eine kleine Anwendung, die aus Zetteln eine web-basierte Präsentation erstellt, gibt es ja schon prototypisch.

Aber vielleicht kommt noch eine Anregung aus dem Kreis der Nutzer dazu, vielleicht wieder via Twitter?