English English preferred? This way, please.

Heute habe ich einen coolen neuen Trick gelernt, in dem ich das Item Preprocessing benutzen kann das Zabbix seit der Version 3.4 anbietet. Dies ist kein Zabbix-Blog, aber ich betrachte das als so nützlich — und nicht gerade intuitiv — dass ich das mal eben aufschreiben möchte.

Für alle die es nicht kennen: Zabbix ist ein quelloffenes Monitoring System, der Hersteller nennt es nicht ganz zu unrecht „Enterprise Class“. Ich nutze das nicht nur bei der Arbeit sondern auch zu Hause — nicht nur um das Fleisch in meinem Smoker zu monitoren. :-)

Meiner Meinung nach ist Zabbix wirklich stark bei allem was in Zahlen ausgedrückt werden kann. Es kann auch mit textuellen Informationen umgehen, aber nachdem ich damit ein paar kleinere Schwierigkeiten hatte versuche ich das nach Möglichkeit zu vermeiden. Zustände können in Zabbix auch numerisch dargestellt und als Ganzzahl gespeichert werden, mit dem Value Mapping kann man trotzdem gut lesbare Ausgaben erzeugen.

Heute bin ich an ein Problem gekommen das ich mit meinen üblichen Methoden erst nicht umsetzen konnte. Ein Webservice gibt mir den Status einer Applikation, die ist entweder RUNNING, STOPPING oder STOPPED. Es ist nicht schwer das in einem String-Item zu speichern, und einen Trigger anzulegen der reagiert wenn die Applikation STOPPED ist. In diesem speziellen Fall sollte ich aber einen Trigger bauen der meldet wenn der Dienst länger als eine gewisse Zeit im Status STOPPING ist, daran ist zu erkennen dass es ein Problem beim regulären Anhalten der Applikation gibt. Das war nicht trivial, da die Triggerfunktion str("STOPPING",15m) auch schon zuschlägt wenn mindestens einer der Werte in den letzten 15 Minuten „STOPPING“ war.

Item Preprocessing to the rescue!

Drei Schritte

Drei Schritte

Mit Version 3.4 hat ein Feature namens Item Preprocessing in Zabbix Einzug gehalten. Damit kann ein gemessener Wert auf verschiedene Arten weiterbehandelt werden bevor er gesichert wird. Eine der Methoden ist, durch reguläre Ausdrücke eine Art „Suchen und Ersetzen“ vorzunehmen.

Wie sich rausstellt brauchte ich dazu einen halbwegs komplexen regulären Ausdruck, aber am Ende konnte ich die Zustände des Webservices in einfache Ganzzahlen umwandeln. Bei einer Websuche habe ich etwas über „conditional replacement“ gefunden, und mit diesem großartigen Tester für reguläre Ausdrücke konnte ich diese Schönheit bauen:

Damit kann ich den String den ich mittels JSON Path aus der Ausgabe des Webservices ziehe in zwei weiteren Schritten umwandeln:

  • Erst hänge ich eine Art „Wörterbuch“ an meinen Wert: ich ersetze den kompletten Wert (.*) durch sich selbst, gefolgt von den Ersetzungswerten: \1:STOPPED=0:STOPPING=1:RUNNING=2.
  • Dann ersetze ich den regulären Ausdruck (STOPPED|STOPPING|RUNNING)(?=.*:\1=(\d)) durch den Wert der zweiten Capturing Group \2.

Auf die Weise kann ich mein Item als vorzeichenlose Ganzzahl konfigurieren, da hier nur noch die Zahlen 0, 1 oder 2 abgelegt werden müssen. Und ich kann die übliche Trigger-Funktions-Magie anwenden um zu melden wenn der Wert länger als eine gewisse Zeit bei 1 verbleibt. Ein weiterer Bonus: ich kann im Graphen des Items sehen wann der Webservice nicht im Zustand RUNNING gewesen ist, und wie lange das angehalten hat.

Vorschläge?

Ich bin ziemlich angetan davon, Werte auf diese Weise für die Weiterverarbeitung vorzubereiten. Aber ich bin auch an Meinungen interessiert: gibt es bessere Wege mit diesem Problem umzugehen? Irgendwas offensichtliches das ich übersehen habe?

Das war jetzt der fünfte Anruf den ich innerhalb von zwei Wochen vom „Microsoft Technical Support“ bekommen habe. Also: nicht wirklich von Microsoft, das ist mir klar. Ich weiß dass Microsoft sowas nicht tun würde. Sie haben sich so vorgestellt. Auf gebrochenem Englisch.

Beim ersten mal war ich perplex. „We don’t use any Microsoft software in this house, bye.“

Zwei Mal war meine Frau dran, die hat auch direkt aufgelegt. Beim letzten Mal war die Verbindung so schlecht dass ich keine Lust hatte mich darauf zu konzentrieren.

Jetzt gerade hatte ich Zeit, genug schlechte Laune und eine brauchbare Verbindung. Also habe ich mich mit dem Typen unterhalten. Hier mal ein Gedächtnisprotokoll, der Einfachheit halber direkt übersetzt:

„Hier ist der Microsoft Technical Support. Ich rufe an weil wir sehen dass Ihr Computer von Hackern angegriffen wurde. Sitzen Sie an ihrem Computer?“

„Ja.“

„Ich möchte dass Sie alle Fenster verkleinern, so dass Sie den Desktop sehen. Koennen Sie das machen?“

„Ja.“

„Jetzt möchte ich dass Sie sich auf die Tastatur konzentrieren. Unten links sehen Sie eine Taste, beschriftet mit S-T-R-G. Sehen Sie die?“

„Ja.“ (Gelogen — auf meiner US-Tastatur Steht da Ctrl. :-) )

„Daneben sehen Sie eine Taste mit vier Flecken, die stellen ein Windows-Logo dar. Sehen Sie die?“

„Ja.“

„Ich möchte dass Sie die Taste gedrückt halten und mit der anderen Hand auf R drücken.“

„OK.“

„Was ist passiert?“

„Nichts.“ (Auch gelogen, aber es ist sicher nicht das passiert was er erwartet hat.)

„Welche Tasten haben Sie gedrückt?“

„Windows und R, aber bei mir wird da nichts passieren.“ (Naja, ich benutze den Awesome Window Manager, da kann ich auf die Weise tatsächlich Kommandos starten — mache ich aber nicht für jeden. :-P )

„Bitte?“

„Ich benutze kein Windows, ich benutze gar keine Microsoft Software. Ich bin IT Professional, und ich werde mich von Leuten wie Ihnen nicht verarschen lassen. Bitte nehmen Sie meine Telefonnummer aus der Datenbank, ich will nie wieder von Ihnen angerufen werden.“ (Ich hätte fest damit gerechnet dass er auflegen würde. Stattdessen…)

„Sie wollen dass ich Sie aus der Datenbank nehme? Das kann ich machen. Dafür müssen Sie mir 200 Euro überweisen, dann werde ich nie wieder anrufen.“

„…“ (Ich war wirklich perplex ob dieser Dreistigkeit.)

„Sie bezahlen 200 Euro, ansonsten werden wir wieder anrufen.“

„Hören Sie, Sie verschwenden nicht nur meine Zeit sondern auch Ihre eigene. Ich werde nichts bezahlen.“

„Ich habe jede Menge Zeit zu verschwenden, und ich werde Sie wieder anrufen wenn Sie nicht bezahlen.“

„Ich werde nichts bezahlen. Das führt zu nichts.“

„Wir werden weiter anrufen bis Sie bezahlt haben. Und Sie werden darunter leiden.“ (Der genaue Wortlaut war „and you will suffer“ — ich bin noch nie so offen bedroht worden.)

„Lassen Sie mich überlegen was meine Optionen sind. Die Telefonnummer die ich hier sehe zu melden macht keinen Sinn, die wird gefälscht sein (fing mit 0146474 an, letzte Woche hatte ich aber auch schon so einen Anruf mit einer Vorwahl die in NRW sein dürfte). Vielleicht kann ich meinen Telefonprovider anrufen, eventuell können die das tracken.“ (Können sie nicht, fürchte ich. :-( )

„Hören Sie, Sie können sich beschweren bei wem Sie wollen. Telefonprovider, Polizei, Militär. Ist mir egal. Die werden uns nicht kriegen. Wenn Sie nicht bezahlen werden wir weiter anrufen, und Sie werden darunter leiden.“

An der Stelle ging es noch ein bisschen hin und her. Ich habe das Telefon irgendwann laut gestellt und ihn gebeten seine Drohungen für meine Familie zu wiederholen. Hat er auch gemacht. Dann habe ich mich daran erinnert dass er jede Menge Zeit zu verschwenden hat. Bitte, kann er haben. Also habe ich das Telefon zur Seite gelegt und mich mit erfreulicheren Dingen beschäftigt. Nach einer halben Minute hat er aufgelegt.

Angst habe ich nicht vor ihm, aber sowas nervt! Wenngleich ich die Dreistigkeit schon fast ein Bisschen beeindruckend finde. Ich hätte fest damit gerechnet dass er auflegt nachdem ich ihm sagte dass wir kein Windows benutzen.

Mir fällt nicht ein was man dagegen tun kann. Vorschläge?

Achtung, sicher!

Achtung, sicher!

Es ist wirklich kein schöner Anblick, und ich fühle mich jetzt auch etwas schmutzig. Fragt bitte nicht wo ich mich mit einem Windows 2003 Server in Verbindung gesetzt habe.

Fakt ist: ich habe versucht den Server mit Google in Verbindung zu bringen. Und der verwendete Internet Explorer hat mich gewarnt (!) daß ich auf einer sicheren Verbindung unterwegs bin.

Früher war nicht alles besser. Echt nicht. Das gilt für Windows doppelt…

Vorweg: Ich habe das noch nicht selbst ausprobiert, aber ich weiss dass ich mal nach sowas gesucht habe.

Viele Gruppen nutzen zur Findung von Terminen die Webseite doodle.com. Der Dienst funktioniert prima, für einige Anwendungen fände ich es aber wesentlich angebrachter einen solchen Dienst selbst zu hosten. Wenn ich mal wieder Bedarf habe werde ich auf jeden Fall einen Blick auf Dudle werfen. Die Funktionalität scheint in etwa die gleiche zu sein, und man kann es „zu Hause“ installieren. Wer das nicht mag findet bei der TU Dresden eine gehostete Version.

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… ;-)

Sommerlich warm

Sommerlich warm

Der Lüfter an meinem Taschenrechner (Lenovo Thinkpad X201, Baujahr dürfte 2010 sein) hat mich schon länger genervt. Der ist nicht sonderlich laut, lief aber praktisch durchgehend. Gestern habe ich das Ding unbeaufsichtigt liegen lassen weil es Messwerte erfassen sollte. Als ich wiederkam war es aus, nach dem Neustart stand in den Logs… naja, siehe Bild. :-(

Ich bin froh dass die Kernschmelze verhindert wurde.

Mit einer Hand habe ich nachgesehen was ein Ersatz kosten würde, mit der anderen habe ich die Tastatur abgeschraubt. Da findet man den Lüfter direkt vor sich. Auf den ersten Blick sah der ganz OK aus, ich habe ihn trotzdem mit einem Zahnstocher stillgelegt (wichtig, der wirkt sonst wie ein Dynamo und frittiert unter Umständen den Rechner) und dann großzügig Druckluft aus der Dose angewendet.

Unglaublich, wie gut das wirkt, das sollte man vielleicht regelmäßig machen. Beim nächsten Mal traue ich mich vielleicht auch die Wärmeleitpaste auszutauschen. Die Bildschirmauflösung ist nicht ganz zeitgemäß, ansonsten bin ich immer noch rundum zufrieden mit dem Notebook.

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…