Nachdem ich in der letzten Zeit doch einiges an Arbeit in die Aktualisierung von Julias Anuyoga.de Website gesteckt habe, wird umso deutlicher wie sehr meine eigene Homepage veraltet und ueberarbeitungsbeduerftig ist. Vor allen Dingen was das Mobile Responsive Design betrifft habe ich bei anuyoga.de doch einiges hinzugelernt, was ich nun endlich auch mal fuer die eigene Praesentation verwenden sollte.

Was sich hierbei mehr und mehr bezahlt macht ist die Tatsache, dass ich fuer alle von mir betreuten (oder fuer mich generierten) Seiten durchgehend Jekyll als Website-Generator einsetze: dass heisst bei entsprechend modularisierten Aufbau laesst sich fuer eine Website implementierte Funktionalitaet recht einfach auf eine andere Website uebertragen. Vor allen Dingen seit ich begonnen habe mehr und mehr Logik und Text-Transformation in Plugins zu verlagern, bekomme ich zunehmend in sich geschlossene Module, welche dann verschieb- und uebertragbar sind.

Recht schoenes Beispiel hierfuer sind die letzte Woche vorgenommenen Aenderungen zur Ueberarbeitung meines Lebenslaufes. Was mir hier ja schon seit einer langen Zeit vorschwebt ist, dass ich die biographischen Daten in einem Ausgabe-unabhaengigen Format hinterlegen kann, um auf diese Weise zu verhindern, dass ich den gleichen Text an mehreren Stellen – fuer die Website, fuer ein LaTeX-Dokument, etc. – pflegen muss. Diesem Ziel scheine ich nun ein gutes Stueck naeher gekommen zu sein:

    experience:
        - start:    2016-04-01
          title:    "Consultant"
          employer: "CGI Deutschland Ltd. & Co. KG"
          country:  Germany
          city:     Darmstadt
          description:
              - Software Engineer for the GRAS Product Processing Facility (PPF) at EUMETSAT.
              - Performance profiling of the existing C++ code base in order to determine areas in which the largest fraction of the execution time is being spend. Based on this analysis a priority list of modules has been compiled, which would have the largest impact on the overall runtime of the processor, if optimized.
              - Profiling and optimization of the algorithm code to reduce memory footprint – both in size and number of allocations - and overall runtime of the processor to stay within the timeliness requirements.
              - Transition from 32bit to 64bit platform.
              - Creation of portable develoment environment using Docker.
              - Update of build system, transitioning from GNU Autotools to CMake.

Das nette an YAML ist, dass sich er Text immer noch ganz normal lesen und ein einem einfachen Text-Editor anpassen laesst – das heisst also dass Aenderungen keine besonderen Tools erfordern und ich nun einen einzigen Datensatz habe, von welchem ich alles andere ableiten kann. Innerhalb von Jekyll geht dies recht einfach, da hier hier ein Mechanismus besteht, ueber welchen sich global Daten in die Engine (und damit auch alle Scripten und Module) importieren lassen. Die jeweiligen Ausgaben finden sich mittlerweile recht gut in der Struktur des _plugin Verzeichnisses wiedergespiegelt, da ich seit einer Weile dazu uebergegangen bin den Code (zumindest grob) nach einem MVC Schema zu organisieren.

    _plugins/work/
    ├── Work.rb
    ├── model
    │   ├── Job.rb
    │   └── Publication.rb
    ├── tests
    └── view
        ├── CV.rb
        ├── JobOpenings.rb
        ├── JobRegisters.rb
        ├── WorkExamples.rb
        └── cv.css

Kleiner Trick hierbei: wenn ich Layout Instruktionen habe, welche seitenspezifisch sind, macht es wenig Sinn damit alle restlichen Seiten zuzumuellen (was da der Fall waere wenn ich die CSS Anweisungen in das globale css oder _sass Verzeichnis lege) – das moechte ich schon lokal halten, um die Groesse der erzeugten HTML-Seiten klein zu halten. Wie sich dies erreichen laesst ist eigentlich recht simpel: in _plugins/work/view befindet sich ein minimaler Stylesheet (cv.css) welcher innerhalb der Render-Funktion des jeweiligen Plugins importiert und in das HTML eingebettet wird.

    def initialize(site, base, dir, name)
        @site       = site
        @base       = base
        @dir        = dir
        @name       = name

        self.content << get_css()
    end

    ## Read page-specific CSS from file
    def get_css (filename="cv.css")
        content = ""
        infile = File.join(@base, '_plugins/work/view', filename)
        File.open(infile) do |file|
            content << "<style>"
            while line = file.gets
                content << line
            end
            content << "</style>\n"
        end
    end

Weitere netter Nebeneffekt: all fuer eine bestimmte Funktionalitaet noetigen Dateien sind lokal innnerhalb einer in sich geschlossenen Verzeichnisstruktur, so dass ich ein Module erhalte, welches sich 1-zu-1 in eine andere Jekyll-Website verpflanzen laesst.

Gut, vieles hiervon sind Umbauarbeiten, welche hinter den Kulissen stattfinden und deren Auswirkungen auf den Seiten nur indirekt sichtbar werden. Ganz anders ist es da schon um die Homepage gestellt, welche nun endlich mal einen ueberfaelligen Makeover erhaelt. Hat mir schon sehr langer unter den Naegln gebrannt dass ausgerechnet die Eingangsseite nicht den Anspruechen eines Mobile Responsive Designs genuegt… und darueber hinaus auch noch recht unuebersichtlich gestaltet war. Dies wird sich mit der nun in Vorbereitung befindlichen Version deutlich aendern:

Screenshot new homepage

100%ig fertig ist es noch nicht aber die wesentlichen Neuerungen sind schon deutlich zu erkennen:

  • Statt der Bulletin-List gibt es nun ein Column-based Layout, in welchem (zumindest auf einem groesseren Bildschirm) die Themenbereiche der Internetseite nebeneinander praesentiert werden. Wie es sich gehoert formatiert sich die Seite bei einem kleineren Display auf ein vertikales Layout um.

  • Die einzelnen Themenbereiche erhalten nun eine eigene Farbpalette, so dass ich auf diesem Wege leicht erkennen kann, wo ich mich befinde (hier steckt noch ein ein wenig Arbeit drin, um dies auch fuer alle Seiten konsequent anzuwenden).

Wie so ueblich steckt der Teufel noch ein wenig im Detail: es gibt immer noch eine lange Liste an Kleinigkeiten, an welchen ich noch feilen werde, um das Ergebnis so gut wie moeglich aussehen zu lassen, aber fuer den Moment bin ich schon mal so weit, dass ich ein erstes Release vornehmen kann, damit die aergsten Probleme schon mal aus der Welt geschafft sind.