HDR-Experiment, 2007

Gerade habe ich in einem Fotografie-Podcast das Wort „Clownkotze“ gehört, da komm ich nicht drüber weg. :-D

Eigentlich war das nicht mal das Thema von Wrint 1434, das kam nur kurz zur Sprache. Das Wort hatte ich vorher aber noch nie gehört.

Man kann sich denken dass damit was besonders buntes bezeichnet wird. Also nicht nur „farbig“ sondern „bunt“. Und speziell im Bereich der Fotografie scheint das despektierlich auf übertriebene HDR-Effekte angewandt zu werden.

Mit dem Thema hatte ich mich vor 15 Jahren mal etwas beschäftigt, seitdem eigentlich nur mal kurz in Form eines Kitschfilters auf dem Handy. Welches Programm ich dafür benutzt habe weiß ich gar nicht mehr. Geschrieben habe ich was über CinePaint, kann sein dass es das war. Laut EXIF-Daten habe ich offenbar ein Programm namens Qtpfsgui benutzt, das firmiert heute unter Luminance HDR. Ich erinnere mich aber dass ich für meine Bilder die 400D auf einem Stativ hatte, und dann mit ±2 eine Belichtungsreihe gemacht habe. Die drei Bilder dann durch $software gezogen, alle Regler auf 11 gestellt, et voilá: Clownkotze. :-)

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.

Heutzutage fallen an allen möglichen Stellen irgendwelche Daten im JSON-Format an. Und das ist gut so. Trägt nicht so auf wie XML, ist dafür aber flexibler — und vor allem besser definiert — als irgendwelche selbstausgedachten CSV- oder INI-Formate.

Man ist schlecht beraten, zu versuchen dermassen komplexe Formate mit Shell-Tools wie awk, sed oder grep zu Leibe zu rücken. Reguläre Ausdrücke sind eine tolle Sache, aber in dieser Situation fallen die einem früher oder später auf den Fuß. Bislang habe ich meist eine Sprache mit P bemüht: Python, Perl oder zur Not PHP. Die können JSON importieren, danach arbeitet man auf den gewohnten Datenstrukturen. Also auf Arrays und Objekten, und die kann man schön sauber nach dem durchkämmen was man sucht.

Jetzt hat aber ein neues Tool seinen Weg in meinen Werkzeugkasten gefunden: jq. weiterlesen

Zumindest scheint irgendjemand der Ansicht zu sein:

IWSS Security Event
Access to this URL is currently restricted because of its classification.
URL: http://www.fabrik-kellerkinder.de/
Content classification: Pornography

Die Kellerkinder-Seite ist eine Community von Leuten die die gleiche Party besuchen wie ich. Im Moment ist die Seite wegen einer größeren Umbau-Aktion geschlossen, aber wenn man mal bei archive.org oder Google danach sucht kann man sich ein Bild von dem angeblichen Schmuddelkram machen: Da ist einfach keiner.

Ich habe mir da nie Gedanken drüber gemacht, aber jetzt wo ich das sehe fällt mir doch ziemlich deutlich ins Auge wie gefährlich Content Classification sein kann. Ich brauche nicht viel Phantasie um mir ein Szenario auszumalen in dem ich mich beispielsweise irgendwo bewerbe, irgendjemand tippt meinen Namen in eine Suchmaschine, kommt auf die Seite und klassifiziert mich als Ferkel. Ohne auch nur gesehen zu haben was auf der Seite tatsächlich angeboten wird, denn das zeigt der Filter natürlich nicht. Oder da ich im Moment nicht vor habe mich irgendwo zu bewerben: letzte Tage habe ich auf einen ‚Request for Qualifications‘ geantwortet. Ein Kunde meines Arbeitgebers sucht Leute für einen Job, ich soll da angeboten werden. Wenn der Kunde mich hinterleuchten will wirft das womöglich ein falsches Bild auf die Firma für die ich arbeite.

Das ist beides nicht abwegig, oder?

Ich habe danach gesucht, aber keine Möglichkeit gefunden um festzustellen ob ich da von einem lokalen Admin klassifiziert wurde, oder ob das global von Trend Micro so eingestellt wurde (von denen stammt der Filter). Mein Hinweisgeber tippt aber auf die globale Variante, da das Produkt bei ihm gerade erst installiert wurde. Also habe ich eine Mail mit der Bitte um Aufklärung an Trend Micro geschrieben, ich bin gespannt ob ich da eine Antwort bekomme…

Wenn jemand einen Tip hat wie ich rausfinden kann ob das eine globale Einstellung ist, oder was ich sonst noch tun könnte: immer her damit…