Skip to content

nanoc-dejure 1.2 released

Mein Nanoc-Filter für die juristische Vernetzungsfunktion von dejure.org steht nun in der Version 1.2 zur Verfügung und ist damit - endlich - auch mit der aktuellen Nanoc-Version 4.x kompatibel.

"nanoc-dejure 1.2 released" vollständig lesen

Externe Datenquellen für nanoc

Bereits vor gut zwei Jahren hatte ich berichtet, wie man nanoc mit einer (MySQL-)Datenbank als Datenquelle betreiben kann, und auf die entsprechende Dokumentation verwiesen. Schon damals hatte ich angemerkt, dass sich in dem dort gezeigten Weg möglicherweise ein Zwischenschritt einsparen lässt. Dies habe ich dann mittlerweile auch erfolgreich getestet.

"Externe Datenquellen für nanoc" vollständig lesen

Release-Prozess für FAQs

Die Überschrift klingt etwas bombastischer, als der Inhalt es ist …

Seit etlichen Jahren nutze ich git zur Verwaltung sowohl meiner Software als auch für die von mir betreuten FAQs. Da lag es nahe, auch die Veröffentlichung neuer Fassungen derselben (“Releases”) nach Möglichkeit zu automatisieren. Für Software bedeutet das, die einzelnen Bestandteile in einen Tarball zu packen, vielleicht Readme-Dateien zu erstellen, usw.; für FAQs ist ggf. zur reinen Textfassung eine HTML-Fassung zu erstellen, was sich insbesondere anbietet, wenn die Textfassung bereits aus Markdown besteht. :-)

"Release-Prozess für FAQs" vollständig lesen

nanoc-dejure 1.0 released

Drei Wochen nach der ersten Fassung meines nanoc-Filters für die juristische Vernetzungsfunktion von dejure.org kann ich nun die Version 1.0 präsentieren.

"nanoc-dejure 1.0 released" vollständig lesen

nanoc commands

Vergangene Woche schrieb ich über Aliase für Git - und heute möchte ich etwas ähnliches für nanoc vorstellen.

nanoc ermöglicht es nämlich, eigene Kommandos in Form von Ruby-Scripts zu definieren, die dann in commands/ gespeichert werden und - bspw. als commands/COMMAND.rb - mit nanoc COMMAND ausgeführt werden. Die Dokumentation hat unter der Überschrift “Writing commands” ein Beispiel dazu und verweist ansonsten auf die Dokumentation von Cri, dem dafür verwendeten Framework.

"nanoc commands" vollständig lesen

Workflow für die Erstellung und Pflege von Webseiten

Ich stelle die von mir betriebenen Webseiten, die nicht auf interaktive Funktionen angewiesen sind, Stück für Stück auf statisch generierte Seiten um, zuletzt meine Homepage. Dabei setze ich auf einen Workflow, der nanoc als static site generator und git als Versionsverwaltungssystem umfasst und dafür sorgt, dass Änderungen der Seiten automatisch eingespielt werden.

"Workflow für die Erstellung und Pflege von Webseiten" vollständig lesen

Vernetzungsfunktion von dejure.org als nanoc-Filter

Das - kostenlose - juristische Informationsportal dejure.org bietet nach eigenen Angaben 90% der am häufigsten zitierten deutschen (Bundes-)Gesetze, insgesamt rund 300 an der Zahl, und dazu vor allem eine umfassende Literaturdatenbank mit Urteilen, Anmerkungen und Querverweisen an. Ist ein Gesetz nicht verfügbar, wird der Nutzer auf den entsprechenden Eintrag in der umfassenden Sammlung des deutschen Bundesrechts bei buzer.de - einem weiteren kostenlosen juristischen Informationsdienst - weitergeleitet.

"Vernetzungsfunktion von dejure.org als nanoc-Filter" vollständig lesen

Bootstrap mit nanoc

Unter anderem für den Relaunch meiner Homepage habe ich mich damit beschäftigt, wie ich das CSS-Framework Bootstrap am besten mit nanoc, meinem bevorzugten static site generator, zur Anwendung bringen kann.

"Bootstrap mit nanoc" vollständig lesen

nanoc 4.0.0 beta 1

Bereits mehrfach hatte ich über nanoc berichtet, dessen Entwicklung nunmehr wieder mit Elan fortschreitet.

Seit einigen Tagen gibt es die erste Beta-Version von nanoc 4.0 mit bereits teilweise angepasster Dokumentation - und obwohl dieses Release eigentlich keine neuen Features enthalten, sondern nur den Code für zukünftige Veränderungen vorbereiten soll, gibt es einige Neuigkeiten zu vermelden:

  • In den Rules können nunmehr erweiterte Platzhalterzeichen (Globs) verwendet werden. Gab es bisher nur die Möglichkeit, * und + zu verwenden, bspw. in der Form /projects/*/, gibt es in nanoc 4.0 neue Möglichkeiten wie * contra ** oder Zeichensätze wie [abcdefg] oder auch Auswahllisten wie {foo,bar}. Vermutlich wird das der neue Default.

  • Von manchem lange erwartet gibt es in der neuen Version zwei verschiedene Formate für Items, also einzelne Quelltextdateien: full format (neu) und stripped format.

"nanoc 4.0.0 beta 1" vollständig lesen

nanoc und MySQL

Ein static site generator wie bspw. nanoc erzeugt, wie der Name schon sagt, im wesentlichen statische Seiten ohne - zumindest serverseitige - dynamische Elemente, oder schlicht: HTML-Dateien. Dennoch ist es möglich, solchen Webpräsenzen eine begrenze “Dynamik” zu verleihen, und dies nicht nur durch Einbindung von Drittanbieter-Diensten wie bspw. der Kommentar- und Diskussionsplattform Disqus - soll sich der Inhalt einer oder mehrerer Seiten ändern, müssen sie eben neu generiert werden.

Üblicherweise wird die Neugenerierung immer dann (manuell) veranlasst, wenn eine neue Seite oder ein neuer Beitrag (in einem statisch generierten Blog) verfasst oder ein bestehendes Quelldokument verändert worden ist. Jedoch kann eine Neugenerierung der Seiten auch angestoßen durch externe Ereignisse erfolgen. Man könnte bspw. immer dann, wenn ein neuer Beitrag eines bestimmten Accounts auf Twitter veröffentlicht wird, diesen Tweet in die Webseiten einbinden und dann die dadurch veränderten Seiten neu generieren - oder, bspw., einen RSS-Feed regelmäßig (täglich, stündlich, …) auslesen und bei einer Änderung die betreffenden Seiten der (eigentlich statischen) Webpräsenz neu generieren und auf diese Weise einen Newsticker einbinden, der allerdings nicht in Echtzeit “tickt”. Sehr häufig ist eine solche Echtzeit-Aktualisierung aber auch gar nicht nötig, weil sich Änderungen ohnehin nur in größeren Zeitabständen ergeben und es unschädlich ist, wenn sie mit einer gewissen Verzögerung angezeigt werden. So bindet bspw. der CCCS in seinen durch nanoc erzeugten Webseiten die Tweets des Accounts @cccs ebenso ein wie eine Übersicht der Blogbeiträge von Aktiven des Vereins. Die entsprechenden Daten werden in regelmäßigen Abständen ausgelesen, danach werden dann - wenn erforderlich - die betreffenden Webseiten neu erzeugt.

Die Dynamik lässt sich aber noch deutlich weiter treiben.

"nanoc und MySQL" vollständig lesen

nanoc: Auswahl des Templates via YAML

Nicht selten lassen sich die meisten Seiten einer Webpräsenz aus demselben Template erzeugen, wohingegen einige Ausnahmefälle einer Sonderbehandlung bedürfen - bspw. die Startseite oder landing page, die oft anders gestaltet ist als der Rest der Webseiten, und sei es nur, dass sie keine oder andere Navigations-Elemente aufweist oder mehrspaltig statt einspaltig (oder umgekehrt) dargestellt werden soll.

Mag es bei der Verwendung von nanoc für eine singuläre Ausnahme noch sinnvoll sein, sie explizit in die - bereits erläuterte - Rules-Datei aufzunehmen, gibt es für diese Aufgabenstellung eine sehr einfache Lösung: ein abweichendes Template kann nämlich im YAML-Metadatenblock jeder Seite angegeben werden.

Sollen nun die Webseiten einer Präsenz normalerweise das Template namens default verwenden, die Startseite aber das Template startpage, so erhält die Quellcode-Datei der Startseite einen entsprechenden Eintrag in ihre YAML-Metadaten, bspw. template: startpage, und die Rules-Datei erhält dann im compile-Block an der passenden Stelle - statt layout 'default' - die Anweisung layout item[:template] || 'default'.

Man kann auch - wie es der CCCS tut - die Variante “gar kein Template” direkt mit aufnehmen:

  1. if item[:template]!=‘none’
  2.   layout item[:template] || ‘default’
  3. end

nanoc-Rules "passthrough" und "ignore"

Ich nutze mittlerweile für eine ganze Reihe (meist eher einfacher) Webpräsenzen den static site generator nanoc. nanoc, geschrieben in Ruby, erzeugt anhand vorgegebener Regeln aus einer Verzeichnisstruktur mit Quellcode-Dateien in verschiedenen denkbaren Formaten und Seiten-Templates unter Anwendung von Filtern und ggf. ergänzenden (in Ruby geschriebenen) Modulen eine (grundsätzlich) statische, d.h. aus einzelnen HTML-Dateien bestehende, Website. Man kann sich das beispielsweise an den Webseiten des CCCS ansehen.

"nanoc-Rules "passthrough" und "ignore"" vollständig lesen

Installation von nanoc unter Windwows 7

Über nanoc, einen Generator für statische Webseiten, hatte ich hier im Blog bereits berichtet. Bislang nutze ich ihn auf verschiedenen Linux-Maschinen ohne Probleme, wollte ihn aber nunmehr auch auf meinem Laptop unter Windows 7 installieren, um auch ohne Netzanbindung das eine oder andere ausprobieren zu können.

Installationsanleitung

Ausgehend von einer über Google gefundenen Anleitung gestaltet sich die grundsätzliche Installation unter Windows überraschend einfach und problemlos:

  • Zunächst benötigt man Ruby - dankenswerterweise gibt es dafür einen Windows-Installer zum Download. Empfohlen wird derzeit Ruby 1.9.3.

    • Bei der Installation sollten die Optionen Add Ruby executables to your PATH und Associate .rb and .rbw files with this Ruby installation ausgewählt werden. Ggf. wird ein Reboot erforderlich.
    • Testen lässt sich die Installation bspw. durch den Aufruf des interaktiven Interpreters mit irb (verlassen wird er mit quit) und durch den Aufruf von gem --version, um zu testen, ob auch der Paketmanager RubyGems installiert und lauffähig ist.
  • nanoc selbst wird dann einfach vermittels gem install nanoc installiert. Das funktionierte bei mir erfreulicherweise ohne jedes Problem; auch der Aufruf war sofort möglich.

  • Die Installation von Win32::Console verbessert ggf. die Darstellung und kann ebenso einfach mit gem install win32console erfolgen.

  • Fehlt zum Abschluss noch ein integrierter Webserver, falls man einen solchen nicht bereits zur Verfügung hat: gem install adsf ermöglicht es, die generierte Webpräsenz mittels nanoc view unter http::/localhost:3000 anzuschauen.

  • Nutzt man weitere Filter und Funktionen wie kramdown oder ähnliches, sind die entsprechenden Gems nachzuinstallieren. Gebräuchlich mag bspw. gem install kramdown haml rubypants sein.

So weit, so gut. Endlich mal ein Fall, wo die Installation eher “unixoider” Software unter Windows ohne größere Probleme funktioniert, könnte man denken.

Und dann kam LESS.

"Installation von nanoc unter Windwows 7" vollständig lesen

Generatoren für statische Websites

Ganz früher bestand eine Homepage, bestanden Webseiten allgemein im wesentlichen aus HTML-Dokumenten. Auf dem Weg zum Web 2.0 kamen zunächst CGI-Scripts für bestimmte Anwendungen auf; insbesondere aber mit der Verbreitung von PHP wurden Webseiten deutlich interaktiver. Blogs, Gästebücher, Kontaktformulare wären anders auch kaum vorstellbar. Nicht immer aber ist Interaktivität wirklich erforderlich. Manche eigentlich statische Seite wird nur deshalb dynamisch via PHP - oder auf vergleichbare Weise - erzeugt, weil es so bequem ist, die Erstellung einer Navigation und der Grundstruktur der Seiten zu automatisieren und Änderungen nur an einer Stelle vornehmen zu müssen. Das kann durch Installation eines CMS - oder eines dafür “zweckentfremdeten” Blogs oder Wikis - erfolgen; man kann auch wie ich schlicht die bisherigen HTML-Dokumente durch PHP-Scripts ersetzen, die im wesentlichen nichts anderes tun als vorgefertigte Funktionen für die Generierung des Seitengerüsts und der Navigation aufzurufen und ansonsten praktisch nur aus HTML bestehen. Meistens wäre es aber eigentlich gar nicht erforderlich, die Webseiten für jeden Aufruf neu zu generieren, weil sie sich nicht oder doch nur selten ändern. Ausreichend wäre es vielmehr, die Erstellung der an und für sich statischen Seiten aus Vorlagen - Templates - zu automatisieren und dabei ggf. auch automatisch die nötige Navigation zu erstellen.

Das leisten - in verschiedensten Variationen - static site generators, also Scripts oder Programmpakete, die man mit Schablonen (Templates) und Inhalten füttert und die daraus - ergänzt um eigene Programmschnipsel - die fertige Website erstellen. Vorteilhaft daran ist, dass die Webpräsenz im wesentlichen aus statischen HTML-Seiten bestehen kann, nur dort durch Scripts ergänzt, wo das auch tatsächlich für Interaktivität notwendig ist. Auf dem Webserver wird die Last deutlich verringert, weil nicht für jeden Seitenaufruf ein PHP-Interpreter gestartet werden muss; auch bestehen weniger Angriffsmöglichkeiten, weil kein ausführbarer Code mehr “live” auf dem Webserver laufen muss. Eine gewisse Interaktivität lässt sich auch durch tägliche, halbtägliche oder sogar stündliche Neuerzeugung der Webseiten erreichen; das macht für ein Forum oder auch ein Blog mit Kommentaren sicher wenig Sinn, aber wenn “nur” ein RSS-Feed oder die aktuellsten Tweets eingeblendet werden sollen, reicht das oft aus. Zudem lassen sich bspw. Kommentare auch durch externe Systeme wie Disqus vermittels Javascript einbinden.

Das Angebot an solchen Generatoren ist - wie bei Blogs, Wikis, CMS, Bugtrackern usw. - einigermaßen unüberschaubar geworden, wie man einer beliebigen Liste von Static Site Generators entnehmen kann. Gute Erfahrungen habe ich mit nanoc gemacht, mit dem auch der CCCS seine Website generiert; Jekyll wird bspw. bei GitHub genutzt, um dort Webseiten - direkt aus Git heraus - zu generieren. Der einzige Nachteil bei beiden ist ggf., dass sie in Ruby geschrieben sind und daher eigene Scripts und Erweiterungen sinnvollerweise ebenfalls in dieser Sprache zu halten sind. :-)

Das Grundprinzip ist bei allen Generatoren immer dasselbe: Es wird ein Grundgerüst für die Seiten in Form eines oder mehrerer Templates aufgebaut, gerne in HTML 5 und “responsive”, die dabei Platzhalter oder sogar entsprechend fortgeschrittenere Funktionen enthalten. Das Design erfolgt über CSS, wobei auch CSS-Präprozessoren wie LESS oder SASS zur Anwendung kommen können. Die einzelnen Webseiten schließlich können als HTML-Dokumente, aber besser noch in einfacheren Auszeichnungssprachen wie MarkDown, Textile, Asciidoc usw. angelegt werden. Dann gibt es in der Regel noch eine Konfigurationsdatei, aus der sich ergibt, wie die einzelnen Bausteine - Templates, CSS, Seiteninhalte - “bearbeitet” und zusammengefügt werden sollen. Aus diesen Anweisungen und Bausteinen generiert der Site Generator dann statische HTML-Dokumente (oder auch PHP-Scripts, oder Dokumente, die Javascript enthalten, oder …). In der Regel sind dabei eine Vielzahl von Filtern zur Interpretation von Markdown, LESS und Co. bereits enthalten; die eigenen Seiten und Designs lassen sich daher quasi aus einem Baukasten zusammensetzen, zumal als Basis für das Grundgerüst der Seiten auf Systeme wie Bootstrap oder HTML5 Boilerplate zurückgegriffen werden kann, die eigene Schriftarten, Icons und/oder Javascript direkt mitbringen oder zumindest entsprechende Anregungen enthalten. Mit verhältnismäßig wenig Aufwand lassen sich so die eigenen Inhalte hübsch, technisch modern und auf den verschiedensten Geräten vom Smartphone über das Tablet bis zum Laptop oder großen Desktopbildschirm ansehnlich darstellen.

Wenn man möchte, kann man auch die Quelldokumente in einem Versionsverwaltungssystem wie Git verwalten und bei jeder Änderung daraus automatisch eine neue Version der Webseiten erzeugen. Auf diese Weise ist ein Blogbeitrag, aber auch eine neue Seite der eigenen Homepage schnell in Markdown geschrieben, mit einem Vorspann - mit den notwendigen Informationen wie Titel, Autor, Erstellungsdatum, Typ pp., bspw. in YAML - versehen und im Git-Repository gespeichert; daraus erzeugt dann der Generator automatisch die neue Seite und passt - gleichfalls automatisch - alle davon betroffenen anderen Seiten (Inhaltsverzeichnis/Sitemap, Navigation, RSS-Feed, …) an und erzeugt sie, soweit nötig, neu.

Ich finde das sehr praktisch für alle Anwendungsfälle, die keine “Webapplikation” darstellen, sondern im wesentlichen statische Inhalte enthalten, die sich nicht minütlich oder stündlich, sondern eher täglich, wöchentlich oder auch nur alle Jubeljahre einmal ändern. Durchaus lässt sich aber auch ein Blog so betreiben, wenn man denn die interaktiven Elemente wie Kommentare pp. “outsourced”, bspw. an Anbieter wie Disqus. Mit ausreichend Zeit - ja, genau da liegt der Knackpunkt … :-) - plane ich, zumindest einige der von mir betreuten Webseiten in der Zukunft entsprechend umzustellen.

tweetbackcheck