War mir nicht bekannt, aber man kann sudo so einstellen dass es einen nach Eingabe eines falschen Passwortes… originell abweist. :-)

Wer nur die Antworten sehen möchte kann das — zumindest auf Ubuntu — so machen:

Vor gut zehn Jahren hatte ich schon mal einen ähnlichen Tipp im Blog, damit bietet dann praktisch jedes Tool in der Shell diesen… Service. :-D

Ich hatte schon öfter was über ungewöhnliche Programmiersprachen geschrieben. Zuletzt über Folders, eine Sprache die ganz ohne Dateien auskommt.

Heute habe ich zwei neue Sprachen kennengelernt. Nein, nicht gelernt. Nur erfahren dass es das gibt. Da wäre zum einen Qalb, eine Sprache in der die Quelltexte (eigentlich auch der Name, aber bei قلب hätte ich noch weniger Ideen zur Aussprache als bei der lateinischen Umschreibung) in arabischer Schrift verfasst werden. Hier gibt es alles was man braucht bei Github. :-D

Die Sprache ist aber schon älter, neuerdings gibt es — ebenfalls bei Github — eine Sprache namens Potaka (wieder eine lateinische Umschreibung, für পতাকা fehlt mir nicht nur eine Idee zur Aussprache sondern sogar die Zeichen im Font). Um die zu beherrschen sollte man bengalische Schrift entziffern können. Wer es versuchen mag: das hier sieht nach einem Spielfeld aus — genau sagen kann ich das aber nicht… ;-)

Da jemand gefragt hat: offenbar kann man in WordPress-Kommentaren ganz normale <pre>-Tags benutzen um Quelltexte in Kommentaren beizusteuern.

Und da ich hier das Crayon Syntax Highlighter Plugin installiert habe kann man sogar noch etwas Farbe ins Spiel bringen: mit <pre class="lang:sh"> sagt man zum Beispiel direkt dass es sich um ein Shell-Skript handelt. Das wird dann so dargestellt:

Will man das? Nicht notwendigerweise. Aber gerade bei längeren Skripten kann das schon hilfreich sein…

TP-Link TL-MR3020 und Fujitsu fi-4120C

TP-Link TL-MR3020 und Fujitsu fi-4120C

Ich verfolge schon lange das Ziel, eingehende Post direkt durch einen Scanner zu ziehen, um sie dann in einer Kiste verschwinden und rein elektronisch weiter verarbeiten zu können. Das mag übertrieben aufwändig klingen, aber erfahrungsgemäß kann ich in Dateien besser den Überblick behalten als in Papierstapeln. Und leider bin ich nicht ordentlich genug um Briefe sortiert abzuheften. Außerdem, selbst wenn: packe ich den Brief wegen der KFZ-Steuer zum Finanzamt oder zum Auto? Im Computer ist das ein Symlink…

Nun, um das zu realisieren habe ich schon vor längerer Zeit einen Scanner gekauft. Fujitsu fi-4120C. Altes Modell, aber immerhin ein echter Dokumentenscanner, mit Duplex und automatischem Einzelblatteinzug. Eigentlich wollte ich den mit einem Raspberry ins Netz bringen, kürzlich ist aber bei einer anderen Bastelei ein TP-Link TL-MR3020 abgefallen. Den kriegt man gebraucht schon unter 20 Euro, und in Kombination mit der freien Firmware OpenWRT ist das echt interessantes Spielzeug — das sogar Pakete enthält die meinen Scanner befeuern können.

Leider ist der Router so klein dass mit einer Standard-Installation von OpenWRT kein Platz mehr für meine Zwecke ist. Und einfach Pakete deinstallieren geht nicht, die vorinstallierten wird man nicht los. Es sei denn man baut ein eigenes Image-File…

Glücklicherweise ist das mit dem Image Generator kein Problem. In dem Paket ist alles wichtige vorcompiliert enthalten. Das stellt man sich geeignet zusammen, pflegt bei Bedarf ein paar eigene Dateien ein und fertig ist die Laube. In meinem Fall habe ich folgende Dateien angelegt, alle in einem Unterordner files unter dem entpackten OpenWRT-Paket:

  • files/etc/resolv.conf und files/etc/config/network — Konfiguration für mein Netz
  • files/etc/config/system — Hostnamen einstellen
  • files/etc/fstab — ein Laufwerk von meinem Server mounten
  • files/etc/hotplug.d/button/buttons — ruft das Scan-Skript auf
  • files/root/scan.sh — das eigentliche Scan-Skript
  • files/etc/zabbix_agentd.conf — Überwachung mit Zabbix (soviel Platz war noch frei :-) )

Das ist alles keine Raketentechnik. Zentral sind aber die beiden Dateien die mit dem Scanner zu tun haben (hätte ich auch in einer Datei machen können, finde ich so aber übersichtlicher). Zum einen ist das files/etc/hotplug.d/button/buttons, das wird vom Hotplug-Daemon gestartet sobald der Button auf dem Router gedrückt wird:

Und zum anderen das eigentliche Scan-Skript files/root/scan.sh:

Sind diese Dateien angelegt ist man nur noch einen Make-Aufruf von der eigenen Firmware entfernt:

Nach kurzer Bauzeit lag in meinem Fall unter bin/ar71xx eine Datei die ich vermutlich auch direkt aus der originalen Firmware hätte flashen können. Da ich schon OpenWRT und somit eine Shell auf dem Router hatte konnte ich das dort machen:

Die Installation beendet sich mit einem Reboot. Per Telnet komme ich direkt auf das Gerät, da es sich ja direkt in mein Netz verbinden kann (kabelgebunden, ich habe eine Steckdose an der Stelle wo der Scanner stehen soll). Und mit scanimage -L sehe ich direkt den Scanner: device `fujitsu:fi-4120Cdj:44135' is a FUJITSU fi-4120Cdj scanner. Und scannen kann ich direkt auf Knopfdruck aus dem Skript heraus.

Ich habe mir auch schon Skripte gebastelt die die Scans weiter verarbeiten. Leere Seiten rausfischen, alles gerade rücken, Texte erkennen, komprimieren und Sandwich-PDF erstellen. So habe ich jetzt einen Haufen elektronisch durchsuchbarer Dokumente. Was mir noch fehlt ist eine nette Lösung um die dann auch zu archivieren. Mit Suchfunktion und so. Bis jetzt nutze ich Alfresco, aber für zu Hause ist das zu groß und zu umständlich. Für Tipps bin ich offen!

Das einzige was ich jetzt noch zu meinem Glück fehlt ist eine Möglichkeit, herauszufinden in welchem Zustand sich der Scanner befindet. Der hat eine Taste und eine Anzeige ‚Function‘, damit könnte ich dann die weitere Verarbeitung des Scans steuern… mal sehen, vielleicht finde ich dafür auch noch was. Mit scanimage -A sehe ich dass das irgendwie implementiert ist, aber ich habe noch nicht herausgefunden wie ich es benutzen kann.

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…

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.

Gestern habe ich auf Twitter gelesen dass es im Zabbix-Share ein Modul gibt mit dem man das Monitoring-Tool meiner Wahl — Zabbix — direkt auf einen Arduino zugreifen lassen kann: Zabbuino nennt sich das.

Komischerweise habe ich letzte Woche erst überlegt wieviel Aufwand es wohl sein mag, das Zabbix-Protokoll nachzuimplementieren. Ich bastele zur Zeit wieder mal mit dem WLAN-fähigen Chip ESP8266 herum, den hatte ich hier auch schon erwähnt. Damit lassen sich prima Messwerte einsammeln, und das schreit dann nach Zabbix. Mein erster Ansatz war, Messdaten per HTTP zur Verfügung zu stellen. Die werden dann von einem Skript periodisch abgeholt und per zabbix_send eingespeist. Wesentlich eleganter wäre es natürlich, Zabbix direkt auf den Sensor zugreifen zu lassen…

Es wäre also wirklich mal einen Versuch wert, das Zabbuino-Modul in Verbindung mit einer kleinen ESP8266-Platine zu testen, die kann man auch fuer deutlich unter fünf Euro kaufen. Oder hat das schon jemand ausprobiert?

Da ich das letzte Woche aber noch nicht kannte habe ich schon einen dritten Weg eingeschlagen. Noch viel besser, wie ich finde. Das ist aber eine andere Geschichte, und die soll ein anderes Mal erzählt werden…

image

Rechnung vom 09.09.1994

Noch ein Fundstück vom Aufräumen: eine Rechnung von 1994. Zwischen Abi und Studium habe ich gearbeitet, und so konnte ich mir zu Beginn des Studiums einen neuen Computer leisten. Ein AMD DX2-80 (praktisch ein 486er) mit 4MB RAM, 420MB Platte und VGA-Grafik. Den passenden Bildschirm hatte ich noch von dem 486SX-20 den ich vorher hatte (welcher seinerseits einen XT abgelöst hatte).

Der Bolide konnte nicht nur die allgegenwärtige Kombination aus DOS und Windows 3.11 ausführen, neben einigen muss-ich-nicht-haben-Programmen gehörte auch Corel Draw 4 zum Paket. Damals habe ich da auch echt viel mit gespielt, das war auch ernsthaft kaufentscheidend.

So ausgestattet ist der Kasten dann 1995 mit mir nach Dortmund gezogen, ins Studentenwohnheim.

An der Uni wurde damals objektorientierte Programmierung in der Sprache Beta unterrichtet. Die Übungsaufgaben konnten dann im sogenannten ‚Pizza-Pool‘ erledigt werden, einem Raum voller Sun SPARCstations mit Namen wie Salami, Diavolo oder Speciale. Ging auch nur da, den Beta-Compiler gab es nämlich nur für Solaris und Linux.

Linux?

Kannte ich bis dahin noch nicht. Unix fand ich aufregend (‚gut‘ kann ich nicht behaupten, weil ich die ganze Tragweite da noch nicht überblicken konnte). Und sowas kann ich auch zu Hause benutzen?

Naja, so einfach war es nicht. Ich habe im Allkauf (Real gab es noch nicht), eine Zeitschrift gefunden (würde mich nicht wundern wenn die mir nächste Tage noch in die Hände fällt), darin waren zwei CDs: Slackware. Die Installation war damals noch ein echtes Abenteuer. Ohne eigens compilierten Kernel ging da nicht viel mehr als eine Shell. Ich habe zwei Wochen und viel Hilfe von einem SunOS-erfahrenen Kommilitonen gebraucht um X11 zu starten (die grafische Oberfläche, damals noch mit dem Window-Manager TWM).

Handbuch von SuSE 6.0

Damals war das hilfreich

So habe ich Linux damals schon faszinierend gefunden, und ich hatte auch immer eine Partition auf der Platte. Trotzdem habe ich nicht wirklich ernsthaft was damit gemacht. So richtig ging es dann erst Ende 1998 wieder los, mit einer SuSE-Distribution, 5.2 oder 5.3 müsste das gewesen sein. Da hat es dann auch nicht mehr lange gedauert bis das mit wechselnden Distributionen mein Haupt-Betriebssystem wurde, ich glaube 2000 oder 2001 habe ich mein letztes privates Windows-System ausgeschaltet. Seitdem habe ich an meine Rechner nur noch Linux und — in Spezialfällen — BSD gelassen.

Disclaimer: Ich habe nicht viel Erfahrung am Mac. Wenn ich Quatsch schreibe, bitte berichtigt mich.

Einstellungen für US-PC-Tastatur

Einstellungen für US-PC-Tastatur

Ich versuche jetzt schon seit einer ganzen Weile, mich mit den Eigenarten eines Macbooks zu arrangieren. Einer der größten Störfaktoren dabei war die Tastatur. Nicht nur weil ich sonst an US-Layout gewöhnt bin. Die alten Apple-Tastaturen (nicht die ganz alten, aber wenn ich mein Extended II anschließe muss ich befürchten daß die Putzfrau das entsorgt :-) ) haben ein brauchbares Layout aber nicht die beste Bedienung, bei den neueren hat sich ein Designer offenbar viel Mühe gegeben um die Nachteile von Laptop und Desktop zu kombinieren. Die Reaktion der Tasten ist durchaus OK, aber Form und Layout haben nicht ansatzweise was mit Ergonomie zu tun.

Nun denn: ich habe jetzt eine ordentliche Tastatur angeschlossen. Ohne Ziffernblock, dafür aber mit ordentlicher Mechanik und US-Layout.

Ab Werk kann OS X leidlich damit umgehen. Dass die Alt- und die Kommando-Taste (auch Apfel-, Windows- oder Propeller-Taste) nicht dem Mac entsprechen stört mich nicht. Wohl aber dass ich keine Power-Taste habe. Die braucht man um den Bildschirm zu sperren. Und ich würde manchmal auch gerne weiterhin Umlaute schreiben können. Unter Linux habe ich dafür die Compose-Taste, das ist perfekt. Kann der Mac das auch?

Naja, Lösung für mein Problem — und der Grund für diesen Beitrag — ist vorerst das Tool Karabiner. Das scheint sehr mächtig zu sein, aber ich finde es auch sehr unübersichtlich. Da ich jetzt schon zwei Mal rausgesucht habe wie ich meine Forderungen damit umsetzen kann habe ich die richtigen Einstellungen mal hier als Screenshot hinterlegt. Jetzt ist die Pause-Taste (rechts neben Scroll-Lock) meine Power-Taste, und in Verbindung mit Alt kann ich bei Bedarf Umlaute schreiben.