Prof. Dr. Detlef Stern

Zettelstore 0.1

So langsam nähern sich die Arbeiten am Zettelstore etwas, das ich stabil nenne. Nicht, dass der Zettelstore instabil läuft. Im Gegenteil. Etwa seit Mai 2020 nutze ich ihn täglich und seitdem gab es keinen Datenverlust. Den bisher einzig kritischen Fehler hatten einige Nutzer, die den Zettelstore unter macOS nutzen. Bei ca. 250 Zetteln hagelte es Fehlermeldungen. Grund war eine Eigenheit von macOS. Seitdem habe ich Zugriff auf ein älteres MacBook. Und vor jedem Release teste ich noch einmal zur Sicherheit mit 10.000 Zetteln.

Der Zettelstore läuft stabil.

Mit dem obigen stabil meine ich, dass die Anzahl an Features langsam an einen Punkt kommt, den ich für die Software als ausreichend erachte. Dies betrifft im Moment die eigentliche Programmierung. Natürlich wird es immer wieder Änderungen geben, auch Fehlerkorrekturen. Einzelne Features, d.h. (Produkt-) Merkmale, werden sich in der konkreten Ausgestaltung ändern. Aber demnächst scheint der Zeitpunkt erreicht, an dem es keine grundlegenden Neuerungen geben wird.

Was kann denn überhaupt der Zettelstore?

Zettel werden in Schachteln abgelegt

Der Zettelstore speichert und verwaltet Zettel an verschiedenen Orten. Die heißen (aktuell) Box. Sprich, der Zettelstore verwaltet Zettel, die in mehreren Boxen abgelegt sind. Eine solche Box kann ein Dateiverzeichnis sein, oder eine ZIP-Datei. Da der Zettelstore mittels Zettel konfiguriert wird, müssen diese speziellen Zettel mitgeliefert werden. Dafür gibt es eine interne Box. Eine weitere interne Box liefert Zettel, auf denen der Zettelstore Auskunft über seinen internen Zustand gibt. Damit die mitgelieferten Zettel durch einen Nutzer überschrieben werden können, sind die Boxen „hintereinander“ verkettet. Neue Zettel kommen, wie auch geänderte Zettel, in die erste Box. Wird ein Zettel gesucht, dann werden die Boxen nacheinander durchsucht. Ach ja, für manche Spezialfälle gibt es eine Box, welche die Zettel nur im Hauptspeicher hält. Dessen Inhalt ist bei einem Neustart natürlich nicht mehr vorhanden. Aber das will man manchmal.

Das alles läuft stabil. In Zukunft könnte eine Box vorhanden sein, die auf Zettel eines anderen Zettelstore über dessen API zugreift (zur API komme ich noch). Das Speichern von Zettel in einem Dateiverzeichnis könnte bei sehr vielen Zetteln (jenseits der 30.000) unter einigen Betriebssystemen problematisch werden.

Schachteln werden verwaltet

Wie immer, wenn es von einer Art mehrere Exemplare gibt, benötigt man einen Verwalter, neudeutsch: Manager. Der Manager des Zettelstores führt das oben beschriebene Durchsuchen nach einem Zettel durch. Er sorgt dafür, dass neue oder geänderte Zettel in die erste Box kommen. Zusätzlich führt der Manager auch komplexere Suchvorgänge aus. Man kann nach Werten in den Metadaten von Zetteln suchen. Man kann auch nach Zettelinhalten suchen. Beides lässt sich kombinieren. Damit die Volltextsuche bei vielen Zetteln nicht zu lange dauert, wird intern ein Suchindex aufgebaut und automatisch aktualisiert.

Das alles läuft stabil. In Zukunft werden die Möglichkeiten der Suche erweitert. Aktuell sind nur relativ einfache Kombinationen möglich. Ganz wie bei bekannten Suchmaschinen wird es nicht werden, aber das Arbeiten mit dem Zettelstore soll nicht wegen fehlender Möglichkeiten zum Auffinden von Zetteln scheitern.

Zettelinhalte

Die meisten Zettel enthalten Texte. Um bestimmte Textelemente besonders zu kennzeichnen, zum Beispiel um den Text kursiv zu stellen oder für eine Zwischenüberschrift, muss man Möglichkeiten vorsehen, diese Kennzeichnung auch vorzunehmen. Da die Zettel auch ohne Zettelstore gelesen werden können sollen, muss diese Kennzeichnung direkt im lesbaren Text erfolgen. Dafür werden üblicherweise Markup-Languages, also Auszeichnungssprachen verwendet. Bekannteste Sprache ist sicher HTML (einfach mal im Browser die rechte Maustaste klicken und Quelltext anzeigen auswählen). Für wissenschaftliche Texte wird häufig TeX verwendet, meistens in der Ausprägung LaTeX. Für die Wikipedia wird eine Sprache namens MediaWiki-Wikitext verwendet. In Foren wird häufig BBCode angeboten. Es gibt auch noch reST, AsciiDoc, Textile. Und es gibt hunderte von Markdown-Varianten, die wiederum HTML erweitern. Die primäre Sprache für den Zettelstore ist Zettelmarkup.

Trotzdem ist es möglich, andere Auszeichnungssprachen zu integrieren. Auch wenn ich Markdown im Kontext von langlebigen Daten für problematisch halte, gibt es Menschen, die anderer Ansicht sind. Diese können im Zettelstore CommonMark verwenden.

Auch die Verwendung von HTML, CSS oder Reintext ist möglich. Allerdings werden diese Formate vom Zettelstore nicht weiter interpretiert. Damit sind zum Beispiel automatisch erzeugte Referenzen auf Textteile, wie Überschriften, nicht möglich.

Der Zettelstore unterstützt auch Bildformate, wie GIF, JPEG, PNG oder SVG. Solche Zettel enthalten nur das jeweilige Bild, mitsamt der üblichen Metadaten. Mit Hilfe der Auszeichnungssprachen können diese Zettel dann in Textdokumente eingebettet werden.

Mit Zettelmarkup ist es zusätzlich möglich, Texte aus anderen Zetteln einzubetten. Aktuell ist diese Möglichkeit auf bestimmte Fälle eingeschränkt. Das wird sich in Zukunft ändern.

Was kommt noch? In Reintext gezeichnete Graphiken, aka ASCII-Bilder (heutzutage wohl eher: Unicode-Bilder), werden nach SVG gewandelt. Zettelmarkup wird automatisch generierte Listen bieten, zum Beispiel wenn man Suchergebnisse dynamisch in einen Zettel einbauen möchte. Eine Teilmenge von LaTeX wird der Zettelstore erkennen können. Ob PDF-Dateien wirklich unterstützt werden müssen, ist mir noch nicht klar. Das gilt auch für Ton- und Videodaten.

Zugriff von Außen

Der Zettelstore erlaubt es jetzt schon, dass externe Software auf die Dienste des Zettelstores lesend und schreibend zugreifen kann. Das Stichwort ist hier API (Application Programming Interface). Zettel können so mittels externer Software erstellt, geändert, gelesen, umbenannt und gelöscht werden. Die Suchfunktionen sind ebenso zugänglich, wie auch einfache Analysefunktionen.

Ist ein Zettelstore über das Netzwerk auch von anderen Computern aus zugänglich, so kann der Zugriff mittels einer einfachen Rechteveraltung beschränkt werden. Der Zettelstore ist eine Software für eine Person und soll auch bleiben. Trotzdem kann es sinnvoll sein, wenn man nur einer Teilmenge der Menschheit Lesezugriff gewährt

All dieses läuft soweit stabil. Änderungen wird es graduell geben, etwa wenn bestimmte Zugriffe durch weitergehende externe Software notwendig sein sollte. Ich selbst plane zwei externe Programme zu erstellen, die den Zettelstore nutzen. Das eine soll aus einer Teilmenge von Zetteln ein Blog generieren. So nach der Idee: wenn ein Tweet als Zettel aufgefasst werden kann, warum dann nicht auch ein Zettel als Tweet / Post? Das andere Programm wird aus Zetteln eine HTML-basierte Präsentation zusammenstellen. Dieses Problem haben im letzten Jahr zwei studentische Gruppen prototypisch untersucht und wir haben die Herausforderungen für diese Aufgabe (hoffentlich) gut identifiziert.

Weboberfläche

Die Weboberfläche ist, um es vorsichtig auszudrücken, etwas spartanisch. Manches ist über die Weboberfläche aktuell auch nicht möglich, etwa das Erstellen von Bildzetteln (außer SVG). Der Zettelstore lässt sich über die Weboberfläche leidlich bedienen, sogar auf mobilen Endgeräten oder mit rein text-basierten Browsern. Ein Grund für die Verbesserungsmöglichkeiten sind meine eigenen beschränkten Fähigkeiten auf diesem Gebiet. Will jemand mir helfen?

Das eine oder andere werde ich bei TiddlyWiki abschauen. Der Zettelstore soll mit einer Vielzahl von Browsern funktionieren und das auch in Zukunft. Das ist mir wichtiger, als ein modischer Schnickschnack, der in einem halben Jahr obsolet geworden ist.

Alternativ, aber recht in die Zukunft geplant, ist eine Integration mit einem Editor. Eine Möglichkeit wäre ein auf der Electron-Plattform basierendes Produkt, was evtl. sogar den Zettelstore mit installiert und für das automatische Starten sorgt. Etwas nerdiger wäre eine Vim- oder eine Emacs-Anbindung. Auch hier: wer konstruktiv helfen will, ist willkommen.

Und sonst?

Bei einem Produktmerkmal tappe ich immer noch im Dunkeln: wie wird externe Literatur verwaltet und referenziert. Von der Idee her soll der Zettelstore Zotero direkt unterstützen. Zotero, weil es ebenfalls Open-Source ist und eine gute Funktionalität bietet. Wie genau das aussehen wird, das weiß ich nicht. Konkrete Umsetzungsvorschläge?

Eine Anbindung an Pandoc sollte ursprünglich im Zettelstore realisiert werden. Das lagere ich wahrscheinlich in ein externes Programm aus, welches über die API mit einem Zettelstore kommuniziert. Dann könnte man aus Zetteln ganze Bücher generieren oder Texte aus Word/LibreOffice in Zettel umwandeln.

Fazit

Es gibt sicher noch einiges am Zettelstore zu tun. Aber alle wichtigen Produktmerkmale werden demnächst vorhanden sein. Das wird dann die Version 0.1 rechtfertigen. Aktuell ist Version 0.0.15 in Arbeit. Version 0.1 wird vermutlich auf Version 0.0.16 folgen, wenn nicht gar beide identisch sein werden.

Die Software läuft stabil und ist bei mir im täglichen Einsatz. Meine bisherige TiddlyWiki-Instanz habe ich in eine weitere Box mit ca. 2.500 Zettel konvertiert, die ich peu-a-peu aufarbeite. Ähnliches gilt auch für meine bisherigen Trello-Boards, wenn auch mit geringerer Anzahl an Zetteln.

Die Produktmerkmale ergeben sich primär aus meiner eigenen Arbeit mit der Software. Auch die monatliche #Zettelkastenrunde oder sonstige Diskussionen (und sogar Seminararbeiten) geben gute Anregungen.

Trotzdem freut es mich, dass nun alles auf eine Menge an Produktmerkmalen konvergiert. Der Zettelstore soll nicht das gleiche Schicksal wie viele andere Software erleiden: immer neue Produktmerkmale, immer fetter, aus welchen Zwängen auch immer (meist vermeintlich wirtschaftliche Zwänge). Auch wenn ich einmal mit dem Gedanken eines Zettelkastenbetriebssystems gespielt habe …