In den letzten Tagen habe ich nach längerer Pause mal wieder ausgiebig mit Nagios gespielt. Bei einer ausgiebigen Umstellung meines Netzes habe ich vor einer Weile den alten Nagios nach /dev/null verschoben, seitdem gab es Blindflug.

Soweit alles prima, allerdings bin ich an einer Stelle hängen geblieben: dem Drucker. Klar kann man einen Laserjet mit Netzwerkkarte problemlos überwachen, problematisch ist nur dass mein Drucker nur alle paar Wochen mal benutzt wird. Dazwischen ist der natürlich ausgeschaltet.

Das Problem: Wenn ich den Drucker ausschalte werden weiter alle Parameter (Tonerstand, Papiervorrat, Nachrichten…) geprüft, was natürlich nur zu Fehlern oder Nonsens führt. Besser fände ich wenn die Parameter den alten Zustand beibehalten würden, und lediglich das Gerät als ausgeschaltet gemeldet wird. Offenbar kann man das so aber nicht konfigurieren. Zumindest habe ich das nicht gefunden, für sachdienliche Hinweise wäre ich dankbar.

Ich habe vorhin mal ein wenig gescriptet, mit diesem Stück Shell geht es dann doch:

#!/bin/sh
host=$1
shift
command=$@
CACHEFILE=/tmp/check_cached.dat
if ping -c 1 $host > /dev/null; then
  # $host is online, fetch fresh data
  output=$(eval $command)
  returncode=$?
  # escape command and remove old entry from cache file
  ecommand=$(echo $command | sed -e "s_/_\/_g")
  sed -i "/^$ecommand;/d" $CACHEFILE
  # append command with fresh values to cache file
  echo "$command;$returncode;$output" >> $CACHEFILE
else
  # $host is offline, fetch data from cache file
  output="cached: $(sed -ne "s#^$command;[0-9];(.*)$#1#p" $CACHEFILE)"
  returncode=$(sed -ne "s#^$command;([0-9]).*$#1#p" $CACHEFILE)
fi
echo "$output"
exit $returncode

Ich habe das unter dem Namen check_cached.sh gespeichert. Jetzt musste ich nur noch das Kommando ändern mit dem der Drucker kontrolliert wird:

define command{
  command_name check_snmp_printer
  command_line /usr/local/nagios/plugins/check_snmp_printer '$HOSTADDRESS$' '$ARG1$' '$ARG2$' '$ARG3$'
}

Daraus mache ich folgendes:

define command{
  command_name check_snmp_printer
  command_line /usr/local/nagios/plugins/check_cached.sh '$HOSTADDRESS$' "/usr/local/nagios/plugins/check_snmp_printer '$HOSTADDRESS$' '$ARG1$' '$ARG2$' '$ARG3$'"
}

Alle Services die check_snmp_printer benutzen sind ab sofort gecached. Rein theoretisch sollte das auch mit allen anderen Checks funktionieren, ich habe das aber selbst mit diesem bis jetzt nur oberflächlich getestet, ich übernehme (natürlich) keine Verantwortung für alles was mit dem Skript oder wegen des Skriptes passiert. :-)

Fragen und Vorschläge fühlen sich hier in den Kommentaren wohl. :-)

Oh, und eine Frage kann ich im Voraus beantworten: Nein, eigentlich brauche ich kein so dickes Netzwerkmanagement in meinem Heim-Netz. Grund für die Bastelei ist Spaß an der Sache, und nachdem ich in letzter Zeit mit einem teuren kommerziellen System arbeiten muss will ich mir zu Hause einfach nochmal klar machen dass man mit der freien Lösung auch das meiste — wenn nicht alles — hinkriegt. :-D

Nachtrag: Momentan stört mich das nicht, aber wer das im großen Stil einsetzen will sollte vielleicht noch was einbauen das dafür sorgt dass auch etwas sinnvolles passiert wenn der Host offline ist, aber noch keine Daten dafür im Cache liegen…

Eigentlich hätte ich ja gerne ein echtes Chumby. Wer es nicht kennt: das ist ein niedliches — wenngleich ziemlich nutzloses — Gadget das im Prinzip nicht viel mehr macht als kleine Flash-Widgets darzustellen. Welche das sind bestimmt man selber, die Auswahl umfasst ein paar hundert. Dieses hier hat mich letztlich überzeugt. :-)

Dummerweise kostet ein Chumby — in relation zum Nutzen, der wie gesagt gegen Null geht — ziemlich viel. Wenn man sich ansieht was das für Hardware ist, und was man damit machen kann ist der Preis OK, vor allem wenn man sich ansieht wie offen das ganze technisch gestaltet ist. Nur habe ich vor ein paar Wochen mein Gadget-Budget in ein Nokia N800 investiert…

Gerade stelle ich fest dass ich darüber noch nichts geschrieben habe. Hole ich die Tage mal nach, ich bin begeistert von dem Ding.

Gestern habe ich meinen Plan, eine Applikation für das Nokia zu schreiben die sich wie ein Chumby verhält, konkret in Angriff genommen. Dazu habe ich mir noch einmal angesehen wie das virtuelle Chumby funktioniert das man sich kostenlos klicken kann, und woher das seine Channel-Informationen kriegt. Mit dem Wissen bin ich nochmal bei Tante Google vorbei, und die hat mir gezeigt dass es so eine Applikation tatsächlich schon gibt: dieser Thread beschreibt sie, hier sind die Pakete, hier noch eine benötigte Bibliothek.

Nett. Verdammt nah an dem was ich machen wollte. Mal sehen, noch schicker wäre es wenn so eine Applikation sich die Widgets nach lokal ziehen würde, damit das dann auch offline geht. Macht bei denen keinen Sinn die Live-Inhalte aus dem Netz ziehen, aber der oben genannte sabbernde Mops oder die verschiedenen Uhren würden sich ganz gut als Bildschirmschoner machen… Also doch noch Entwicklungspotential. :-)

Vorbereitung: apt-get install filters

Dann für einen Überblick:

for i in b1ff chef cockney eleet fudd kenny kraut pirate spammer upside-down; do echo $i; echo "Far out in the uncharted backwaters of the unfashionable end of the western spiral arm of the Galaxy lies a small unregarded yellow sun." | $i; echo; done

b1ff
FAR OUT 1N THE UNCHARTED BACKW8RZ UV THE UNFASHIONABLE END UV THE WESTURN SP1RAL ARM UV THE GALAXY LEIZ A SMAL UNREGARDED YELOW SUN.

chef
Fer oooot in zee uncherted beckveters ooff zee unffesheeuneble-a ind ooff zee vestern speerel erm ooff zee Gelexy leees a smell unregerded yelloo soon.
Bork Bork Bork!

cockney
Far out in the bloody uncharted backwaters of the unfashionable end of the flinkin‘ western spiral arm of the Galaxy lies a small unregarded yellow sun.

eleet
f4r 0ut 1n th3 unch4rt3d b4ckw4t3r5 0f th3 unf45h10n4bl3 3nd 0f th3 w35t3rn 5p1r4l 4rm 0f th3 g4l4xy l135 4 5m4ll unr3g4rd3d y3ll0w 5un.

fudd
Faw out in de unchawted backwatews of de unfashionabwe end of de westewn spiwaw awm of de Gawaxy wies a smaww unwegawded yewwow sun, uh-hah-hah-hah.

kenny
Mpfmmmpff ppffmffmp mffppp fmpmfpmpp fmfpppmmfmfpmmmpfffmpmppmpm mmpmmmmmfpmpfppmmmfmpmpppfffmm ppfmpf fmpmfpmpp fmfpppmpfmmmfmmmfpmffppfpppmmmmmppmfmpp mpppppmpm ppfmpf fmpmfpmpp fppmppfmmfmpmpppffppp fmmpfmmffpffmmmpmf mmmpffppm ppfmpf fmpmfpmpp Mfmmmmpmfmmmfpfffm pmfmffmppfmm mmm fmmppmmmmpmfpmf fmfppppffmppmfmmmmpffmpmmppmpm ffmmpppmfpmfppffpp fmmfmfppp.

kraut
Far out in ze uncharted backwaters uff de unfaschionable end uff de vestern spiral arm uff de Galaxy lies a small unregarded yellow sun.

pirate
Far out in th‘ uncharted backwaters o‘ th‘ unfashionable end o‘ th‘ western spiral arm o‘ th‘ Galaxy lies a small unregarded yellow sun, by Blackbeard’s sword.

spammer
Dear Friend, Far
out in the uncharted backwaters of the unfashionable end of the western spiral arm of the Galaxy lies a small unregarded
yellow sun.

This is a one time e-mail!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To be removed from this mailing list send an email and put in the subject the word „remove“.
8D4A20728CC8670635C16C332F1AC2F2A6BF10F91546EECE6641A5F2EAD63C76003F62F2B
6074CB9FC2FDC32EEC1B603FE5BFF77248701E2BE4AB7DA342C4AF5E1E929FB8D08915635103D

upside-down
‚uns mo77ah papje6ajun 77ews e sa!7 hxe7e6 ayf jo wje 7ej!ds ujafsam ayf jo pua a7qeuo!ysejun ayf jo sjafem>|)eq pafjey)un ayf u! fno jej

Den letzten finde ich besonders witzig, auch wenn man da im Vorteil ist wenn man keinen Röhrenmonitor mehr hat: das liest man kopfüber… :-)

Windows-UptimeGerade habe ich zufällig diesen Screenshot wiedergefunden, den ich vor gut einem Monat mal auf einem Windows-Server gesichert habe. Ab sofort muss ich mir wohl abgewöhnen, Windows als instabil zu bezeichnen… Allerdings frage ich mich, wer die Kiste vor 58.494 Jahren installiert haben mag… :-D

Ich sitze hier meistens an einem Thinkpad mit englischer Tastatur. Normalerweise ist das echt praktisch, ich hab mich dran gewöhnt. Wenn ich aber zum Beispiel was in den Blog schreibe mache ich das üblicherweise doch unter Verwendung von Umlauten. Bis Gestern habe ich mich nicht wirklich darum gekümmert wie das komfortabel geht, habe mir ziemlich billig beholfen.

Ich löte zur Zeit wieder mal an einer Tastatur rum. Das aktuelle Modell verfügt über eine eigene Compose-Taste (die auch so beschriftet ist). Das hat mich neugierig gemacht und zu etwas gebracht das ich schon lange hätte herausfinden sollen: wie man eine Tastatur bedient. :-)

Mit einer Compose-Taste kann man Zeichen schreiben die man auf der Tastatur nicht sieht. Umlaute zum Beispiel. Wenn ich [Compose][„][a] drücke (also drei Tasten nacheinander, nicht gleichzeitig) kommt ein kleines ‚ä‘ dabei raus. Mit [Compose][o][c] gibt es das allseits beliebte Copyright-Zeichen: ©.

Unter Linux ist Compose per Default auf [Shift+AltGr] untergebracht. Also sollte man einfach [Shift+AltGr][s][s] drücken können und ein ‚ß‘ erhalten. Wer es komfortabler mag baut in seine Shell-Konfiguration folgende Zeile ein, damit erhält die Caps-Lock-Taste endlich eine sinnvolle Funktion:

xmodmap -e "remove Lock = Caps_Lock" -e "keycode 0x42 = Multi_key"

So sorgt man erst dafür dass die Taste nicht mehr ‚lockt‘ (entfernt also quasi die Feststellfunktion) und belegt sie dann mit dem Symbol ‚Multi_Key‘, und das steht für die Compose-Taste. Alternativ kann man das auch in seine ~/.Xmodmap einbauen, wenn man sowas pflegt. Jetzt sollte [CapsLock][‚][e] zu einem é führen.

Zumindest in grafischen Programmen (Firefox & Co.) hat das bei mir auch auf Anhieb geklappt. Für das Terminal-Fenster habe ich eine Weile gesucht, und noch keine wirklich befriedigende Lösung gefunden, da meine ersten Versuche blöde Nebeneffekte hatten. Ich verwende urxvt und bin damit eigentlich ganz zufrieden. Ob man darin Zeichen komponieren kann hängt offenbar von den locale-Einstellungen ab. Bei mir sind die bislang nicht gesetzt, stehen also wenn ich einfach ‚locale‘ ausführe alle auf POSIX. Wenn ich zum Beispiel LC_ALL auf de_DE setze kann ich komponieren, habe aber auch deutsche Manual-Pages. Letzteres will ich nicht. Wenn ich LC_ALL auf en_US stelle klappt beides, ich habe aber noch nicht rausgefunden ob das an anderer Stelle was zum Haken bringt. Und welche Auswirkungen hier de_DE.iso885915@euro oder de_DE.utf8 haben kann ich mir nur dunkel vorstellen. Hab mich halt noch nie damit beschäftigt. Das kommt dann Heute Abend — wenn mir hier niemand mit einem Tip zuvorkommt… *mitzaunpfahlrumfuchtel* ;-)

Wo kann ich nachlesen was alles passiert wenn ich beispielsweise nur LC_CTYPE auf en_US setze? Ich habe zwischendurch kaputtformatierte Man-Pages gesehen, und nach Konsumierung der locale-Manpage könnte ich mir vorstellen dass es daran lag. Allerdings habe ich auch echt unstrukturiert getestet, kann sein dass ich mich täusche…

Oh, noch eine interessante Sache die ich nebenbei gefunden (aber auch noch nicht ausprobiert) habe: wenn ich diesen Eintrag im Kubuntu-Wiki richtig verstehe kann man sich sogar eigene ‚Kompositionen‘ bauen. Also so dass man mit [Compose][b][t][w] wirklich ‚by the way‘ schreibt. Das will alles noch ausprobiert werden…

HP-42S mit Original-SkinOK, als ‚Fortgeschrittenen‘ würde ich mich im Bereich Mathematik nicht sehen. Absolut nicht. Ich kann nicht mal mehr schriftlich multiplizieren, geschweige denn dividieren. Aber dafür weiß ich wie man einen Taschenrechner bedient. Dachte ich… :-)

Bislang habe ich auf dem Computer immer gcalctool benutzt. Das ist übersichtlich und kann eigentlich alles was man so dauernd braucht. Zufällig habe ich vor ein paar Tagen einen Emulator für einen real existierenden Taschenrechner gefunden. Emulator? Für einen verdammten Taschenrechner?!? Ja, genau. Free42 heißt das dann.

Bei dem Vorbild handelt es sich um das Modell HP-42S, das wurde 1988 von Hewlett Packard vorgestellt und — ich glaube — bis 1994 gebaut. Das Ding findet man natürlich im Taschenrechner-Museum von HP, aber auch in der Wikipedia. Ein programmierbarer Taschenrechner, Umgekehrte polnische Notation, etwa 600 eingebaute Funktionen und 7200 Bytes Platz für eigene Programme. Ich weiß nicht warum, aber das hat mich irgendwie fasziniert. Und nicht nur mich: bei Online-Versteigerungen wird das Ding offenbar teilweise mit über 200 Euro gehandelt. Das ist deutlich mehr als der originale Verkaufspreis vor 15 Jahren, als man das noch im Laden kriegen konnte. Der lag soweit ich weiß bei 130 Dollar.

HP-42S PlatzsparenderWie sieht jetzt so ein Taschenrechner-Programm aus? Was kann man damit machen? Man kann damit eine ganze Menge tun, wie man schnell sieht wenn man sich ansieht was es an Beispielen im Netz gibt. Ich habe mir mal das Alternative Manual durchgelesen und losgespielt. Ein Beispiel muss her…

Das erste was ich benutzt habe ist die Solver-Funktion. Dabei programmiert man eine Funktion mit mehreren Unbekannten (z. B. das Ohmsche Gesetz: U=R*I) die man umgestellt hat so dass 0 rauskommt (also U-R*i=0). Dann kann man die Variablen der Reihe nach mit Werten belegen und den unbekannten berechnen lassen. Man gibt also Spannung und Strom an die für eine LED benötigt werden und kriegt direkt den Widerstand, ohne selbst zu rechnen. Oder Man gibt den gewünschten Strom und den Widerstand an und bekommt die Spannung an der das betrieben werden muss. Nett, aber trivial. Ein komplizierteres Beispiel muss her…

Die Aufgabenstellung habe ich aus einem Podcast ueber Leonhard Euler, allerdings habe ich als Laie wohl was falsch verstanden. Wahrscheinlich ging es um die Euler-Mascheroni-Konstante oder um das Basel-Problem, mein Programm ist vermutlich total uninteressant. Trotzdem taugt es als Beispiel. Die Aufgabe besteht darin, die Kehrwerte von ganzen Zahlen zu addieren. Also 1/1 + 1/2 + 1/3 + 1/4 und so weiter. Mittlerweile weiß ich, dass man das auch mit Logarithmen berechnen kann, aber wie angedeutet würde ich da von alleine nicht drauf kommen.

LBL "EULER"
STO 01
0
STO 02
RCL 01
LBL A
1/x
STO+ 02
RCL 01
1
-
STO 01
x>0?
GTO A
RCL 02

Das Programm arbeitet wie folgt:

  • aktuellen Wert des X-Registers (also die letzte eingegebene Zahl) in Speicher 01 sichern
  • 0 in Speicher 02 schreiben
  • Speicher 01 wieder herstellen
  • Sprungmarke A setzen
  • von der wiederhergestellten Zahl den Kehrwert bilden und zu Speicher 02 addieren
  • Speicher 01 wieder herstellen
  • 1 subtrahieren und den neuen Wert wieder in 01 speichern
  • wenn der Wert groesser 0 ist, nach A springen
  • ansonsten das Ergebnis aus Speicher 02 anzeigen

Also quasi folgendes, nur halt im Taschenrechner (und nicht nur fuer 100):

perl -e "$j=0;for($i=1;$i<=100;$i++){$j+=1/$i};print$j;

In einer Tabellenkalkulation habe ich das auch mal gemacht um die Werte zu kontrollieren, aber da kann man das (ohne wirklich zu programmieren) nur bis knapp ueber 60.000 machen, weil dann die Tabelle am Ende ist. Das Ergebnis fuer 999.999.999 ist 21,3004815013 (da hat der Taschenrechner aber auch eine Weile drauf rumgekaut).

Ich bin einfach mal weiter fasziniert, vielleicht konnte ich ja irgendwen anstecken… ;-)

Das erinnert mich daran warum ich die Sprache C nach Möglichkeit nur auf Mikrocontrollern benutze:

rschaten% cat array.c
#include <stdio .h>
int main(int argc, char **args) {
  char *string = "abc";
  printf("%c %c %cn", string[0], string[1], string[2]);
  printf("%c %c %cn", 0[string], 1[string], 2[string]);
  return 0;
}

rschaten% gcc -o array array.c

rschaten% ./array
a b c
a b c

rschaten%

Das habe ich aus dem Unix Haters Handbook, ich hätte nicht gedacht dass das wirklich funktioniert…