Prof. Dr. Detlef Stern

Zettelstore 0.0.15

Nachdem ich letztens einen allgemeinen Ausblick auf ein geplantes Release 0.1 des Zettelstores gab, soll es heute um die mehr oder minder frische Version 0.0.15 gehen.

Wie letztens beschrieben stellt die Version 0.0.15 einen ersten Stabilitätspunkt dar: alle wichtigen Produktmerkmale sind so implementiert, dass spätere Erweiterungen wenigstens grob angelegt sind. Die drei wichtigsten Produktmerkmale der Version 0.0.15 sind:

  1. Transklusion
  2. Reintext-API
  3. Schlagworte im Zettelinhalt

Transklusion

Damit ist die Übernahme von (Teilen von) anderen Zetteln gemeint. Wikipedia gibt einen ersten Überblick was dies genau(er) sein soll.

In Version 0.0.15 ist Transklusion nur in Teilen möglich. Das wird sich ändern. Aktuell kann man den ersten Absatz eines anderen Zettels übernehmen. Oder den ersten Absatz nach einer Markierung / Überschrift.

Die Syntax ist identisch zum Einbetten von Bildern (wer genau überlegt, wird wissen warum):

{{Zettelidentifikation}}

{{Zettelidentifikation#Markierung}}

Also zum Beispiel:

Aktuelle Version des Zettelstore: {{00000000000001}}

Der Zettel mit der Identifikation 00000000000001 ist ein vordefinierter, unveränderlicher Zettel, der nur die aktuelle Version des Zettelstore enthält. Lässt man sich obigen Text anzeigen, so wird aktuell folgendes ausgegeben:

Aktuelle Version des Zettelstore: 0.0.15+66498fc30a

In dieser Form mag Transklusion nicht zu nützlich erscheinen. Trotzdem habe ich es schon mehrfach verwendet. Die Implementierung ist aber Ausgangspunkt für eine Reihe von Erweiterungen, z.B.:

  • Übernehmen von ganzen Zetteln, oder zumindest größeren Abschnitten,
  • Übernehmen von Metadaten fremder Zettel,
  • Übernehmen von Inhalten externer Webseiten,
  • Präzisere Selektion der zu übernehmenden Inhalte.

Auf einer technischen Ebene wird jetzt schon sichergestellt, dass es nicht zu einer übergroßen Übernahme von Inhalten kommt, analog einer XML-Bombe oder einer ZIP-Bombe. Ebenso wird verhindert, dass ein Zettel Inhalte von sich selbst übernimmt oder auch über einen Zirkelschluss mit beliebig vielen anderen Zetteln. Das wird in Zukunft besonders wichtig werden, wenn Zettel auch aus externen Quellen stammen können.

Intern wird nun zwischen eingelesenen Zetteln und ausgewerteten Zetteln unterschieden. Auch dies eine Vorbedingung für zukünftige Erweiterungen. Wer mag, kann sich beide Versionen auf der Info-Seite zu einem Zettel ansehen. Eingelesene Zettel kann man sich unter dem Endpunkt /p (für parsed), ausgewertete Zettel unter dem Endpunkt /v (für evaluated) ansehen.

Reintext-API

Um mittels externer Programme auf den Zettelstore zugreifen zu können, gibt es schon länger eine API. Wie auch bei vielen anderen Softwaresystemen basiert diese API (Application Programming Interface) auf dem Datenübertragungsmechanismus HTTP / HTTPS, das allen, die dies lesen bekannt sein sollte. Wenn nicht: einfach mal auf die URL im Browser schauen. Um die Grundstruktur der Zettel zu erhalten, und auch um allgemein strukturierte Daten zu übermitteln, wurde bisher fast ausschließlich auf einen weniger bekannten, aber trotzdem sehr häufig verwendeten Standard JSON verwendet (auch: ECMA-404).

So weit, so normal).

Damit Zettelinhalte auch ohne weiteres Analysieren verwendet werden können (z.B. ist die gesamte Web-Ansicht des Zettelstore über definierte Zettel anpassbar), gab es schon immer die Möglichkeit, Zettelinhalte ohne weitere Strukturierung zu übertragen, Reintext (Plain text) genannt. Es gab aber nur einen lesenden Zugriff.

Mit der Version 0.0.15 sind nun auch ändernde Aktionen möglich. Gut, beim Löschen oder Umbenennen von Zetteln werden keine Inhalte oder weitergehende Metadaten übertragen. Da ändert sich nichts, die JSON- und die Reintext-basierten Aufrufe unterscheiden nicht nur im Endpunkt (/j und

/z). Beim Erstellen und Ändern von Zettel können die notwendigen Daten exakt so übertragen werden, wie Zettel sowieso vom Zettelstore in Dateiverzeichnissen gespeichert sind. Das erleichtert mindestens das Experimentieren mit der API, um Zettelstore-basierende Software zu erstellen.

Darüber hinaus gibt es nun auch die Möglichkeit, sich eine Liste von Zetteln im Reintextformat auszugeben: pro Zettel steht in den ersten 14 Zeichen einer eigenen Zeile die Zettelidentifikation, ab Zeichen 16 folgt der Titel des Zettels. Wer sich ein wenig mit der Pipes-and-filters-Architektur, implementiert auf unixoiden System, auskennt, weiß, was man damit alles machen kann. Wer nicht: entweder lernen oder einfach weitergehen. Natürlich kann man die Liste von Zetteln über Selektionsmechanismen modifizieren, z.B. die Liste Zettel, auf die noch kein anderer Zettel verweist.

Schlagworte im Zettelinhalt

Auch dies ist ein eher unscheinbares Produktmerkmal, das allerdings wichtige interne Änderungen nach sich zog, die wiederum für spätere Erweiterungen relevant werden.

Bisher wurden nur Schlagworte (Tags) weiter interpretiert, wenn diese in den Metadaten unter dem Schlüsselwort tags angegeben wurde. Nun werden auch Schlagworte erkannt und weiter interpretiert, die im eigentlichen Zettelinhalt angegeben werden. Die Syntax dafür hat sich gegenüber den bisherigen Schlagworten nicht geändert:

#schlagwort

Also zum Beispiel:

... wer sich mit #Projektmanagement beschäftigt, der wird ...

Ein solches Schlagwort wird so behandelt, als wäre es in den Metadaten angegeben worden. Man kann danach genauso suchen, es wird in der Liste der Schlagworte angegeben. In der Web-Ansicht wird es als anklickbarer Link angezeigt. Dieser Link verweist auf die Liste aller Zettel mit diesem Schlagwort.

Diese Syntax besitzt einen kleinen Nachteil: manche Autoren verwenden das Zeichen #, um eine nummerierte Aufzahlung zu erreichen. Zum Beispiel:

... Element #1 bezeichnet den wichtigsten Punkt, #2 den zweitwichtigsten.

In diesem Fall werden aus Sicht des Zettelstore zwei Schlagworte definiert,

#1 und #2. Diese erscheinen auch in der Liste aller Schlagworte. Will man dies nicht, so muss das Zeichen # anders interpretiert werden. Dies erreicht man, indem man das Zeichen \ voranstellt, also:

... Element \#1 bezeichnet den wichtigsten Punkt, \#2 den zweitwichtigsten.

Wer die Verwendung von Schlagworten mag, erhält so eine weitere Möglichkeit, diese auch einmal anders anzugeben.

Ach ja, bei der Suche nach Schlagworten werden diese nun nicht mehr in Bezug auf Groß-/Kleinschreibung unterschieden. Für manche Sprachen ist das ja relevant.

Ausblick

Ich werde die Arbeit am Zettelstore insofern einstellen, als ich nun beginne, eine Software zu erstellen, welche die API des Zettelstore nutzt. Erkenntnisse dieser Tätigkeit können dazu führen, dass der Zettelstore angepasst werden muss. Damit überprüfe ich meine Arbeit an der API auf Praxistauglichkeit.

Konkret habe ich begonnen eine Software zu erstellen, die Zettel als Folien (einer Präsentation) interpretieren kann. Ein Foliensatz wird dann zu einer Web-basierten Präsentation. Für mich (und vielleicht andere Wissensarbeiter) besteht dann der Vorteil, dass meine Präsentationsunterlagen mit dem Material zu deren Erstellung verknüpft sind.

Technisch nutze ich dazu Slidy2. Damit bekomme ich zwar keine Hochglanzpräsentationen, aber wenigstens gut präsentierte Inhalte. In Vorlesungen und anderen Lehrveranstaltungen (oder zu irgendwie vergleichbaren Gelegenheiten) steht der Inhalt vor inhaltsleerem Hochglanz.

Als jemand, der Studenten Web-basierte Systeme näher bringen möchte, ist es vielleicht auch besser, Web-basierte Hilfsmittel zu verwenden. Bisher nutze ich dazu Slider, dass wiederum auf Pandoc basiert. Im Ergebnis durchaus funktionstüchtig, aber etwas fragil.

Die neue Software (noch ohne Namen) soll zum einen Zettel als Präsentation anzeigen, aber auch als Quelle für Handouts dienen. Slider generiert dazu ein LaTeX-basierte PDF-Datei. Die neue Software könnte den Studenten die Zettel der Präsentation liefern, evtl. mit erklärenden Zusatzzetteln und ebenso evtl. als HTML-Datei. Nicht jeder will und kann den Zettelstore nutzen.

Transklusion kann bei der Erstellung der Folienzettel helfen. So muss man nur an einer Stelle etwas ändern und selbst in den Folienunterlagen wird alles ohne weitere Eingriffe angepasst.

Im vergangenen Jahr haben zwei studentische Gruppen in Projektstudien hierzu schon erste Prototypen erstellt. Diese Prototypen werden zwar nicht erweitert (es sind Prototypen), aber in der gemeinsamen Arbeit mit den Studenten konnten wir inhaltliche und technische Probleme gut identifizieren.

Übrigens, die Präsentationen sollen als eine einzige HTML-Datei ausgeliefert werden, so dass während der Präsentation kein Zettelstore verfügbar sein muss.

All diese Ideen werden, so hoffe ich, den Zettelstore selbst verbessern. Auch technischen Gründen kann es deshalb zu einer Reiher von vielen, kleineren Versionen des Zettelstore kommen. Das eine oder andere interne Modul werde ich vermutlich in ein neues Projekt auslagern.

Übrigens (2): externe Software zum Zettelstore findet man unter https://zettelstore.de/contrib/.