EBCMS

vorhergehende Artikel in: Linux Markup
25.07.2022

Ich habe nach einer Möglichkeit gesucht, meine eigene Webseite zu gestalten. Nach einiger Überlegung und ein paar Versuchen mußte ich feststellen, daß ich mich mit keiner der ausprobierten Varianten glücklich fühlte - also ran ans Zeichenbrett und was eigenes geschaffen!

Inspirieren ließ ich mich von dieser Webseite, unter der das schöne Motto prangt: "Proudly made without PHP, Java, Perl, MySQL and Postgres" Das fasst hevorragend zusammen, was auch mich umtrieb. Nur - HTML von Hand schreiben ist etwas, das ich noch nie gerne getan habe. Dazu kommt noch, daß es dort keine (mir bekannte) vernünftige Form von include gibt. Das bedeutet, daß wenn sich das Menü ändert, jede einzelne Seite wieder angefasst werden muss. Das hatte ich in der Anfangszeit unserer ehemaligen Firma schon einmal und habe mir damals geschworen: "Nie wieder!"

Daher erinnerte ich mich an etwas, das ich ganz am Anfang meiner Berufsausbildung kennenlernen durfte: Damals - es war kurz nach der Wende - war alles, was fortschrittliche EDV war, noch neu für uns: die Abteilung, in der ich lernte, hatte einen PC und darauf war eine Textverarbeitung installiert. Wie sie hieß, weiß ich heute nicht mehr - ich weiß nur noch, daß es dort sogenannte "Punkt-Befehle" gab. Aus heutiger Sicht würde man das Markup nennen. Marketingsprech wäre wahrscheinlich "Domain-Specific-Language"

Also entschloß ich mich zu folgender Lösung: Die Artikel werden in einfachen Textdateien geschrieben - sie dürfen HTML-Markup enthalten, müssen aber nicht. Es existiert eine Handvoll Punkt-Befehle, die die Struktur des Dokuments definieren. Dazu existiert ein Programm, das diese Dokumente einliest und über Velocity-Templates die HTML-Seiten erzeugt. Die HTML-Seiten werden als letzter Teil des Erzeugungsprozesses schließlich mit den Bildern, CSS- und JavaScript-Dateien und sonstigen Ressourcen in ein Verzeichnis geschrieben, das ohne weitere Änderungen direkt auf einen HTTP-Server kopiert werden kann.

Das, was dabei herausgekommen ist, sehen Sie gerade vor sich. Das System unterstützt das Taggen der Artikel, eine zeitliche Übersicht nach Monaten oder Kalenderwochen und eine Gruppierung der Artikel nach Tags. Es existiert die Möglichkeit, Artikel als zukünftig zu markieren - damit tauchen nur Titel und Abstrakt in der Webseite auf, der Inhalt bleibt noch verborgen.

Aktualisierung vom 28. Juni 2013

Die neueste Version der Anwendung erlaubt es, Artikel hierarchisch zu gliedern - sie müssen nicht mehr als Dateien alle in demselben Verzeichnis liegen. Es ist jetzt möglich, die Artikel in Verzeichnissen zu ordnen, um so einen besseren Überblick zu behalten. Diese Sortierung wirkt sich nicht auf die resultierende Webseite aus - dort werden die Artikel weiterhin lediglich nach ihrem Datum und ihren Tags organisiert.

Als neue Punkt-Befehle wurden zwei Erweiterungen implementiert: einerseits ist es nun möglich geworden, Dateien zu includieren - das bedeutet, daß man nach dem entsprechenden Befehl einen Dateinamen relativ zu dem Verzeichnis des Artikels, der die Direktive enthält angibt. Dann wird diese Direktive im Ergebnis unterdrückt und statt dessen der Inhalt der referenzierten Datei eingefügt. Das funktioniert auch hierarchisch (Artikel1 includiert Artikel2, der wiederum includiert Artikel3 ...) Weiterhin wurde eine neue Direktive geschaffen, die verhindert daß der Artikel, in dem sie auftaucht, Teil der Webseite wird.

Aktualisierung vom 6. Juli 2013

Eine weitere Änderung ist die Definition von Fußnoten: Fußnoten werden durch einen Punktbefehl eingeleitet. Der Rest der jeweiligen Zeile ist dann der Text der Fußnote. Fußnoten werden im Text durch Links dargestellt, ihr Text wird am Artikelende in einer Definitionsliste zusammengefasst. Die Links im Text verweisen auf den jeweiligen Punkt in der Liste.

Aktualisierung vom 16. Juli 2013

Eine erste Version des Anwenderhandbuches wurde fertiggestellt.

Aktualisierung vom 24. August 2013

Die Infrastruktur des Systems wurde um Templateparameter erweitert. Der Name des ersten dieser Parameter lautet $today$ - er dient dazu, das Datum von Aktualisierungen nicht mehr von Hand eintragen zu müssen. Er bewirkt, daß das System automatisch bei der ersten Erzeugung des resultierenden HTML-Dokuments das dann aktuelle Datum einsetzt. Die Ersetzung findet in den Ursprungsdateien statt. Nach einem Durchlauf zur Erzeugung der Webseite sind also die Templateparameter aus den Ursprungsdateien verschwunden. Die Ersetzung findet nur dann statt, wenn der Templateparameter nicht allein auf einer Zeile steht.

Aktualisierung vom 19. Oktober 2013

Das System wurde ein wenig angepasst: Da die Seite jetzt schon seit einiger Zeit online ist, wurde es nötig, sie ein wenig zu restrukturieren: Es wurde ein konfigurierbarer Parameter eingeführt, der bestimmt, wie viele Wochenkategorien erzeugt werden. Ist die Anzahl der zurückliegenden Wochen höher, wird am unteren Ende des Wochenmenüs ein Link eingefügt, der zu der Monatsübersicht führt, die die nächste, im Menü nicht mehr angezeigte Woche enthält.

Aktualisierung vom 3. November 2013

Weitere Platzhalter für das Datum der Aktualisierung sind $plusoneweek$ und $plustendays$ - ebenfalls in Dollarzeichen eingeschlossen. Diese werden entsprechend durch ein Datum ersetzt, das eine Woche beziehungsweise 10 Tage nach dem Erstellungsdatum liegt. Die Besonderheit dieser beiden Platzhalter ist, daß sie so lange nicht ersetzt werden, wie die Direktive .future noch im Artikel steht. Logisch lässt sich das damit begründen, daß ja das Erstellungsdatum noch unbekannt ist und daher auch der Zeitpunkt eine woche oder 10 Tage danach unbekannt sein muß.

Aktualisierung vom 22. Dezember 2013

Das Format der Artikel wurde umgestellt: Es existieren nunmehr zwei verschiedene Datumsangaben. PUBLISHED drückt den ersten Veröffentlichungszeitpunkt aus, während CREATED für den Verfassungszeitpunkt steht. Die Liste der in der Zukunft zu veröffentlichenden Artikel ("Upcoming") wird anhand von CREATED sortiert. Die Datumsangabe CREATED wird, falls noch nicht vorhanden auf das Datum von PUBLISHED gesetzt. Ist auch PUBLISHED nicht gesetzt, wird CREATED auf das aktuelle Datum gesetzt und der Artikel als in der Zukunft zu veröffentlichen markiert (.FUTURE).

Aktualisierung vom 30. Dezember 2013

Das System hat eine neue Direktive bekommen: Speziell für Artikel, die Linksammlungen darstellen wurde die Direktive .collectedlink eingeführt. Diese Direktive steht allein auf einer Zeile. Die nachfolgenden Zeilen werden als erklärender Text für den Link interpretiert. Die Definition eines Link ist abgeschlossen, sobald eine Zeile gelesen wird, die mit http beginnt: der Inhalt einer solchen Zeile wird als Ziel des Links interpretiert.

Links, die auf diese Weise definiert werden, werden nicht im Fließtext der erzeugten Seite integriert, sondern stehen zum Zeitpunkt der Expansion des Templates für Artikel als Collection (Liste) zur Verfügung, so daß sie gemeinschaftlich formatiert werden können.

Aktualisierung vom 30. Januar 2014

Seit der letzten Aktualisierung ist es möglich, einen Artikel in mehrere Seiten aufzuteilen. Das wird mit der neuen Direktive .PAGE erreicht.

Zwischen den einzelnen Direktiven für Seitenumbrüche dürfen alle Direktiven stehen, die in den Artikeln auch sonst erlaubt sind. Folgende Direktiven bilden eine Ausnahme - sie sind nur einmal im Dokument erlaubt und beziehen sich immer auf den Artikel als Ganzes:

  • .TAGS
  • .CREATED
  • .PUBLISHED
  • .FUTURE
  • .HIDDEN
  • .URL

Aktualisierung vom 1. Juli 2014

Das System wurde um eine Unterstützung für mathematische Formeln erweitert:

Dazu fügt man einfach den betreffenden TeX-Code zwischen .FORMULA und .FORMULAEND ein (nur die Mathematik, ohne Dokumentenstruktur) - Beispiel:

 .formula
 E=mc^2
 .formulaend

Aktualisierung vom 20. Oktober 2014

Artikel zeigen jetzt auch in der Übersicht alle Tags - dazu existiert ein Icon, das bei Mouse-over alle Tags zeigt. Diese Tags kann der Nutzer anklicken und wird daraufhin zur Übersicht aller Artikel, die mit diesem Tag versehen sind, geleitet

Aktualisierung vom 22. Dezember 2014

Artikel haben jetzt sprechende URLs

Aktualisierung vom 3. Februar 2016

Das CMS bietet jetzt unter der URL /news.html aggregierte RSS-News von spezifizierbaren Quellen an: Zur Zeit ist ein Zeitraum von drei Wochen eingestellt; ältere News-Items tauchen nicht mehr auf.

Aktualisierung vom 4. Oktober 2018

Einigen aufmerksamen Lesern wird es aufgefallen sein - ich habe die interne Datenstruktur ein wenig durchforstet und konnte als Ergebnis dessen die Seiten noch ein wenig anreichern:
  1. Für jedes Tag ist nun sofort erkennbar, wie vieel Artikel sich mit dem jeweilgen Thema beschäftigen (ok, das war wohl eher für mein Ego...)
  2. Jeder Artikel gibt ab sofort darüber Auskunft, welche anderen Artikel zu ihm verlinken - das Ganze natürlich navigierbar und die Artikel sind nach ihrem Erscheinungsdatum geordnet - der Neueste steht in der Liste ganz oben!

Aktualisierung vom 5. September 2019

Es ist jetzt möglich, im Text einer Seite Markdown-ähnliches Markup zu erzeugen - so kann man durch Einschließen des Textes in entsprechende Marker erreichen, dass der eingeschlossene Text *fett* , _kursiv_ oder `mit fester Zeichenbreite` dargestellt wird. Das sind die voreingestellten Stile - erreicht wird diese Wirkung durch die Definition von drei Klassen im CSS, die der Autor beliebig anpassen kann - die hier gezeigten Auswirkungen sind die Voreinstellung. Die Klassen und ihre Standardeinstellungen heißen
mdbold
{font-weight: bold;}
mdcode
{font-family: monospace;}
mditalics
{font-style: italic;}

Aktualisierung vom 14. März 2021

Ein Feature-Update wurde fertiggestellt, das die Flexibilität des Autors in den Mittelpunkt stellt:

Man kann in Artikeln nunmehr Ankerpunkte definieren, die es erlauben, per .link nicht mehr nur auf andere Artikel zu verweisen, sondern auf Ankerpunkte darin - damit ist es möglich, noch zielgenauere Querverweise zu etablieren.

Man kann in Artikeln nunmehr auch custom CSS und Javascript-Ressourcen angeben. Damit kann ein Autor Aussehen und Verhalten einzelner Artikel anpassen. Als erste Demonstration wurde die Integration von asciinema-Screencasts gewählt - damit ist es nun möglich, etwa durch Integration der folgenden Zeilen

.css resources/asciinema/asciinema-player.css
.js resources/asciinema/asciinema-player.js

asciinema-Player wie folgt in Artikel einzubinden:

<asciinema-player src="resources/asciinema/demo.js"></asciinema-player>

Aktualisierung vom 14. März 2021

Das System unterstützt nun die Nummerierung von TeX-Formeln:

Dazu ist der Start der Formel um den Vorgänger der gewünschten Nummer zu ergänzen. .formula 12 ergibt also:

Aktualisierung vom 4. November 2021

Die Dokumentation ist nun online als Open Source via Gitlab verfügbar.

Aktualisierung vom 25. Juli 2022

Nun wird für HTML-Output auch Syntax highlighting unterstützt - ganz ohne JavaScript: Statt dessen wird zur Erstellungszeit Pygments benutzt, um das benötigte Markup zu erzeugen!

Anwenderhandbuch (PDF)
Anwenderhandbuch (EPUB)

Artikel, die hierher verlinken

Static Site Generator für Docbook

15.03.2022

Mein eigener Static Site Generator hat jetzt einen Modus, der es gestattet, die Inhalte nicht nur als HTML-Seiten für die Publikation mittels eines HTTP-Servers zu erzeugen, sondern auch als Docbook zur Erzeugung eines PDF-Dokumentes oder E-Book im Format EPUB.

EBCMS threaded und mit mehr Markdown-Unterstützung

11.01.2022

Mein eigener Static Site Generator hat in den letzten Wochen einige größere Umbauten erfahren

CI/CD Pipelines für DocBook-Dokumentationen

28.12.2021

Nachdem ich neulich die Handbücher für die Anwendungen dWb+ und EBCMS sowie für das Framework dmcc, das beispielsweise im Aviator und auch in dWb+ zum Einsatz kommt auf Gitlab veröffentlicht habe, habe ich entsprechende CI/CD Pipelines eingerichtet, die dafür sorgen, dass die aktuelle Version der jeweiligen Handbücher immer als PDF und EPUB abgerufen werden kann.

Asciinema in Markdown

20.12.2021

Mein Static Site Generator kann ja bereits seit einiger Zeit mit Asciinema-Dateien umgehen und diese einbinden - ich war aber auf der Suche, diese Einbindung auch in Gitlab und/oder Github nutzen zu können...

Dokumentation wird Open Source

04.11.2021

Ich habe im Zuge der Aktualisierung der Dokumentation für meinen Static Site Generator dessen Dokumentation wie auch die für dWb+ und Aviator unter der bekannten Lizenz als Open Source auf Gitlab zur Verfügung gestellt.

Rendern von TeX-Formeln

27.09.2020

Mein selbst geschriebenes CMS bietet schon länger die Möglichkeit, TeX-Formeln zu Illustrationszwecken zu rendern und in Artikel einzubinden. Nachdem ich in einem meiner Projekte die Möglichkeit in GitLab eingebaut habe, habe ich nun beschlossen, die zugrundeliegende Technik etwas zu verfeinern.

Sitemap mittels Graphviz

06.07.2019

Ich habe mein System zur Erzeugung der Webseite um die Erstellung einer Sitemap als Graph erweitert

Änderungen im Datumsformat von Java - schon wieder!

25.02.2018

Ich habe bereits über einen Bug in Java9 berichtet, der mich ziemlich überrascht hat. Wer aber beschreibt meine Überraschung, dass der Bug, der mich beim Umstieg von Java7 auf Java8 bereits angespuckt hat, wieder Speichel gesammelt hat?

Änderungen im Datumsformat von Java

17.09.2017

Zwischen Java7 und Java8 haben sich einige Dinge geändert - viele davon wurden beschrieben und diskutiert. Ich bin heute an einer völlig unerwarteten Stelle von einer solchen Änderung angespuckt worden, die mich zunächst mal sprachlos machte:

Ant erweitern mittels Javascript

15.02.2015

Wie man Ant einfach erweitern kann, ohne wirklich Erweiterungen erstellen zu müssen...

Reader Mode enabled

18.08.2013

Seit ich das Offline Content Management System, mit dem diese Website verwaltet wird so weit hatte, daß ich zum ersten Mal die Ergebnisse im Browser betrachten konnte, saß ein Stachel in meinem Fleisch: auf Android konnte ich nicht in den Reader Mode schalten. Das habe ich nun geändert.

Alle Artikel rss Wochenübersicht Monatsübersicht Github Repositories Gitlab Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Zugriff auf Maps ohne Cast in Java

    22.11.2017

    Collections im Zusammenspiel mit Generics erlauben es, ohne Cast auf Elemente gleichen Typs typsicher zuzugreifen - was aber wenn man typsicher auf Elemente unterschiedlicher Typen in einer Collection zugreifen möchte, ohne zu casten? Hier die Vorstellung einer möglichen Antwort

    Weiterlesen...

Neueste Artikel

  • Nerd-Dictation Tests

    Ich habe vor einiger Zeit schon einmal mit Spracherkennung experimentiert und war damals enttäuscht - vielleicht aber auch deshalb, weil ich nur mäßig motiviert war und mich deshalb bereits früh abschrecken ließ, als nicht alles sofort so funktioniert hat wie ich es wollte. Nun habe ich das Thema nochmals aufgegriffen...

    Weiterlesen...
  • Struktur von PKIs re: Archivzeitstempel

    Hier nochmal eine Beleuchtung der Organisation einer Public Key Infrastructure (PKI) von einem (von mir) bisher nicht betrachteten Blickwinkel

    Weiterlesen...
  • Security QA mit Kotlin-Bibliotheken und Java

    Über die Probleme und Herausforderungen beim Unit-Testen im Security-Umfeld mit Kotlin-Bibliotheken...

    Weiterlesen...

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muß damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen GitHub-Repositories findet man hier.