Ich sehe mir immer mal wieder gerne esoterische Programmiersprachen an. Lustig, auf was für Ideen Leute kommen — einfach nur weil es geht. :-)

Die meisten Sprachen haben eine vergleichsweise einfache Grammatik (es sei denn sie legen es speziell darauf an eben keine einfache Grammatik zu haben). Bei fast allen werden die Quelltexte in ASCII-Notation verfasst. Nennenswerte Ausnahmen sind Piet (da liegen die Quelltexte als GIF vor) und neuerdings vielleicht noch Emojicode. Aber selbst wenn es kein ASCII ist: es sind Dateien.

Jetzt habe ich von Folders gehört. Bei der Sprache liegen Quelltexte nicht mehr als Dateien vor, sondern als Ordner. Und damit die Ordner nicht so aus der Reihe tanzen haben sie griffige Namen bekommen: so heißt die Entsprechung für if jetzt New Folder, und aus print wird Setup. Der Datentyp für Integers heißt Vacation photos, der für Texte ist Img

Eingängig, oder? Und das beste: Quelltexte haben eine Länge von Null Bytes (nur halt eine komplexe Verzeichnisstruktur). Wer schreibt jetzt einen Flugsimulator? :-D

Traditionell bewege ich mich viel in der Shell, und da habe ich es oft mit verschiedenen Datenformaten zu tun die ich lesen oder schreiben möchte. Lesen ist mittlerweile vergleichsweise einfach: jq für JSON, XMLStarlet für XML.

Wie man sinnvoll XML generiert weiss ich noch nicht, aber vor ein paar Tagen hat Jan-Piet Mens ein Tool veröffentlicht mit dem man sauber JSON generieren kann: jo (hier bei Github).

Ausprobiert habe ich das noch nicht, aber die Beschreibung sieht sehr vielversprechend aus. Gerade in Verbindung mit dem Monitoring-Tool meiner Wahl — Zabbix — hätte ich mit so einem Tool im Werkzeugkasten einiges deutlich eleganter schreiben können…

Was stimmt hier nicht?

Was stimmt hier nicht?

Dies ist ein weiteres altes Projekt, entstanden etwa um 2004. Ich hatte das auf der alten Schatenseite, und damit es nicht komplett verloren geht stelle ich es hier nochmal kurz vor.

Damals konnte ich einen Commodore C64 der Mülltonne entreissen. Die ganz alte Bauform, in Fachkreisen auch liebevoll Brotkiste genannt. Leider war das Ding nicht mehr einzuschalten, und da ich eh keine Commodore-Vergangenheit habe tat es mir auch nur ein bisschen leid das Teil zu zerlegen.

Leider hatte ich zu der Zeit noch keine Ahnung von Mikrocontrollern, ansonsten hätte ich versucht die Tastatur funktionstüchtig zu halten. So ging das nicht, dementsprechend ist sie dem Dremel zum Opfer gefallen um Platz für Kühlkörper und Speicher frei zu machen. Schade. :-(

Eingebaut habe ich dann ein VIA EPIA M10000b, somit lief der C64 mit einer Taktfrequenz von 1GHz. Dazu kamen 256MB RAM, eine 2,5″-Platte mit 20GB, ein CD-Laufwerk aus einem Notebook und ein externes Netzteil.

Der C64-PC

Der C64-PC

So ausgestattet hing das Ding damals an meinem Fernseher. Hauptsächlich als Daddelkiste. Wirklich oft ist er dann aber ehrlich gesagt nicht mehr zum Einsatz gekommen…

Heutzutage würde man das anders angehen. In dem Gehäuse würde sich ein Raspberry gut machen. Der braucht wesentlich weniger Platz, also könnte man sogar die Funktion der Tastatur erhalten. Und mit Retropie als Distribution wäre das 80er-Jahre-Feeling fast authentisch… :-D

Siehe auch…

Eine alte Weisheit besagt folgendes:

Wenn man erstmal einen Hammer in der Hand hat sieht alles aus wie ein Nagel.

Wenn man also halbwegs mit dem gängigen Unix-Werkzeugkasten (grep, cut, sed und awk) umgehen kann ist man geneigt diese Tools immer einzusetzen wenn Informationen aus Dateien zu extrahieren sind. Damit auf strukturierte Daten loszugehen ist allerdings nicht nur fehlerträchtig sondern auch alles andere als elegant.

Vor längerer Zeit habe ich hier mal auf jq hingewiesen. Das ist die Lösung wenn man in seiner Eigenschaft als Shell-Skript Daten aus JSON-Datensätzen braucht, mittlerweile konnte ich da schon einige Male drauf zurück greifen.

Jetzt habe ich was vergleichbares für XML-Daten gesucht, und wie es aussieht ist XMLStarlet das Werkzeug der Wahl (Disclaimer: ich habe nicht lange gesucht, NOCH bin ich für Gegenvorschläge offen ;-) ).

Erste Anwendung ist wieder, einen ungetrübten Blick auf das gewählte Dokument zu werfen. Mein Feed ist ein insofern ein schlechtes Beispiel als dass der Code ziemlich sauber formatiert ist, aber der Trick wird klar (die Sache mit dem Backslash am Zeilenende setze ich mal voraus):

Als nächstes interessieren mich vielleicht die Titel der letzten Artikel. Dazu selektiere ich alles was auf den XPath //rss/channel/item matched, und lasse mir jeweils den Wert von title ausgeben. Gefolgt von einem Zeilenumbruch:

Aber wann habe ich denn meinen letzten Artikel veröffentlicht? Dazu matche ich nur auf das erste Element und lasse mir davon das pubDate geben, zur besseren Lesbarkeit wieder gefolgt von einem Zeilenumbruch:

Abschließend wüsste ich gerne noch worum es in meinem letzten Artikel ging. Auch das können wir formschön aus dem Feed extrahieren, allerdings wird das Kommando natürlich entsprechend unübersichtlicher. Wir matchen wieder auf das erste Item, lassen uns den Titel und einen Zeilenumbruch geben. Dann matchen wir innerhalb des Items (!) auf category. Dem Inhalt dieser Felder stellen wir jeweils einen Spiegelstrich voran, die Zeile beenden wir wieder mit dem Zeilenumbruch. So sieht das Kommando dann fertig aus:

Das Netz hält einige Artikel mit Beispielen parat, aber genau wie dieser Text kratzen die nur an der Oberfläche. XMLStarlet ist sicher ein Spielzeug mit dem man sich bei Gelegenheit mal länger auseinandersetzen sollte. Zumindest macht es den Standard-Werkzeugkasten im Umgang mit XML-Daten absolut obsolet.