03
Random number generator
Es ist schon spannend wie man sich so die Karten legen kann und das monatelang nicht findet. Ich habe für das Monitoring mit Icinga2 einen interface check in c++ geschrieben der alle möglichen Dinge pollt. D.h. nicht nur die Standard ifAdminStatus oder ifOperStatus sondern auch ifIn/OutPackets, Bytes, Errors, Discards etc. Dann gibt es Schwellwerte die überwacht werden. Zusätzlich polle ich noch die optischen Pegel der SFPs d.h. rxPower, txPower, Current und Temperature.
Das ganze fliesst dann über eine Influxdb in ein Grafana um es sich ansprechend ansehen zu können.
Leider hatte ich seit dem Umzug von einer VM auf richtige Hardware das Problem das immer wieder sporadisch Messwerte fehlten oder auch auch mal kaputt waren d.h. eindeutig falsche Messwerte. Die Fehlermeldungen die ich jedoch sah war "SNMP Timeout" als wenn das Gerät nicht antworten würde.
Also mit tcpdump mal nachgesehen und nein - Es werden alle requests beantwortet. Nach einer Schleife mit der SNMP library snmp++, in der das timeout handling auch noch kaputt war, war ich noch ratloser als vorher.
Bis ich heute mal debug logging eingebaut habe und feststellte das zu dem Zeitpunkt wenn die SNMP Timeouts auftreten alle Requests für das Device eine identische RequestID haben.
Die RequestID wird typischerweise dafür verwendet, das das Target retransmits erkennen kann. D.h. sollte es einen SNMP Request bekommen wird die Antwort erzeugt und diese Antwort zusammen mit der RequestID in einen cache gepackt. Sollte dann ein transmit kommen wird der request mit der Antwort aus dem cache beantwortet um ein paar CPU cycles zu sparen.
Wenn jetzt natürlich unterschiedliche Interfaces und EntitySensors gepollt werden, und alle mit einer identischen RequestID, dann kommen natürlich willkürliche Antworten zurück, je nachdem welcher Request zuerst bearbeitet wurde.
Wenn die Anzahl der Variable bindings aber nicht passt wird jedoch natürlich die Antwort verworfen. Wenn jedoch die Antwort passt d.h. es ist auch Interface oder auch ein EntitySensor werden die Daten durcheinandergewürfelt. TengigabitEthernet0/0/1/0 daten tauchen dann auf TengigabitEthernet0/2/3/2 auf ... Das alles absolut unvorhersagbar und willkürlich.
Des Rätsels Lösung war, das der random number generator initialisiert werden muss. In Wirklichkeit ist das ja nur ein "Pseudo Random Number Generator" PRNG. Dieser erzeugt für ein Seed immer dieselbe Reihe an Zufallszahlen.
Wenn man den Random Number Generator jetzt mit "time(0)" initialisiert, kommt natürlich für alle Prozesse die in derselben Sekunde gestartet werden identische Zufallszahlen bei raus. Es fehlt an Entropie.
Der schnelle fix ist ein
std::srand(std::time(0)^getpid());
gewesen. Der nimmt dann nicht nur die Zeit sondern ein XOR zwischen Zeit und Process ID. Immer noch nicht optimal, aber zumindest fixed es das Problem das zeitgleich gestartete Prozesse identische Zufallszahlen verwenden.
Cognitive Load
Sehr spannender und eigentlich offensichtlicher Artikel zur Softwareentwicklung. Der Titel finde ich bringt es aber ganz besonders auf den Punkt.
Wenn Funktionen oder Methoden beim ersten Blick nicht offenbaren was ihr Zweck oder Sinn ist, macht der Softwareentwickler einen Fehler. Die Struktur ist falsch oder die Abstraktion ist zu komplex oder das Problem ist falsch zerlegt.
Writing good code: how to reduce the cognitive load of your code
Die Antwort auf den Rest
Das nächste Jahr bin ich dann mal die Antwort nach dem Leben, dem Universum und dem ganzen Rest, und natürlich mit Handtuch.
git fix - read later
Nur um es mal zu verlinken - Muss ich mir bei gelegenheit im Detail ansehen und auch mal ausprobieren.
WWW::Mechanize
Nach einer halben Stunde rumhampeln mit LWP::UserAgent
,
HTTP::Request
, HTML::TreeBuilder
um die Anmeldeseite von
Roundcube auseinanderzudröseln um das Monitoring um
die Cross-Site-Scripting protection drumherum hinzubekommen
Stolpere ich über WWW::Mechanize
.... Nach 11 Zeilen Fertig.
Es kann so einfach sein - Noch ein bischen Nagios::Plugin
drumherum und fertig ist der Check ...
my $mech=WWW::Mechanize->new();
$mech->get($np->opts->uri);
my $r=$mech->submit_form(
form_number => 1,
fields => {
_user => $np->opts->username,
_pass => $np->opts->password
}
);
if ($mech->status() ne 200) {
[ ... ]
Lektüre zur Nacht
MISRA C++:2008 Guidelines for the use of the C++ language in critical systems
220 Seiten
Bye bye SixXS
Lang lang ist es her das wir uns über SixXS mit IPv6 versorgen mussten. Jetzt da IPv6 überall verfügbar ist hust brauchen wir SixXS nicht mehr.
Dear Florian Lohoff,
TL/DR: SixXS is shutting down on 2017-06-06 (in ~10 weeks).
In 1999, Jeroen and I started SixXS, a project which aimed to provide IPv6 connectivity to users who wanted to learn about the network protocol and gain experience operating IPv6 networks. Our vision was to facilitate migration to IPv6 in content and access providers. [ ... ]
Veränderung
Digitale Identitäten entsorgen
Man muss schon aufpassen in welcher Reihenfolge man Accounts in diversen Social Media und Plattformen löscht. Facebook Account ist so mit das letzte was man löschen sollte ist mir dann mal aufgefallen. Da hängen noch 23 dinge dran die man dann nicht mehr los wird. Gut das man den nochmal schnell aktivieren kann. Es sollte jetzt aber so einiges meiner Digitalen Identität weg sein.
Digitale Archaeologie
Für die alten mediaWaysler unter euch die noch Schmalbandeinwahl mitgemacht haben. Es gab - ich wollte sagen - gibt immer noch das Neptun Frontent um dinge in den LDAP Einzutragen. Ich habe da noch dinge in meinem Password Safe gefunden und das ist alles scheinbar noch aktiv. Nicht die Schmalbandeinwahl - aber das Frontend.
Stichworte: leonardo, mwdsltest, Toyota, WinShuttle
Geht zurück bis in die frühen 2000er Jahre ... Das Frontend ist zwar komplett obsolete aber das hat in 10 Jahren keiner gemerkt, daher läuft das immer noch.
Tinyhouse 1
Programmer Competency
Eine sehr spannende Matrix um sich selber in seinen Fähigkeiten mal einzuschätzen. Was fehlt mir selber als Softwareentwickler.
Es gibt auch eine Kritik in den Kommentaren die ich teilweise für Berechtigt halte. Bestimmte Bücher zu lesen ist nicht unbedingt ein Qualitätsmerkmal. Und "The mythical man month" ist ja auch nicht unbedingt Softwareentwicklung sondern eher Arbeitsorganisation und Informationsmanagement - Nichts desto trotz eine spannende Lektüre.
blog.rfc822.org
So - Nach ein paar Jahren der Konservierung von Altdaten habe ich heute mein altes Blog mal entsorgt - blog.rfc822.org ist mal dann weg.
Fahrradsaison
Targeted Ads
Das ist echt spannend was da so läuft. Vorletzte Woche habe ich einen Tag in der Maschinenbaufirma eines Kumpels verbracht. Mein Telefon war nicht in den WLANs dort eingebucht. Trotzdem bekommen ich jetzt Werbung für Automatisierungstechnik.
Mittagspause
Unfalldaten Gütersloh 2016
Die Unfalldaten für den Kreis Gütersloh für 2016 sind da. Ich habe die ersten beiden Städte extrahiert und als Karte produziert.
Hier sind die Karten für Gütersloh und Rheda-Wiedenbrück.
Schiffsmeldungen
Weil ich es gerade hier erwähnt habe. Ein schöner Film mit Kevin Spacey im wunderschönen Neufundland.
Vergrab es und erzähl es keinem
Zerstörung von Festplatten
Ein Artikel auf Golem zum zerstören von Festplatten hat mich fragend hinterlassen? Warum nicht verschlüsseln und bei Bedarf nur das irgendwo Zentral gelagerte Key Material zerstören?
D.h. ich habe ein off-site system das die Keys der jeweiligen Block Storage Volumes hat und bei Bedarf den Systemen zur Verfügung stellt.
Dieses System muss gestoppt werden, und die Systeme die eine run-time Kopie des key materials halten im Speicher müssen abgeschaltet werden.
D.h. das iLO, iDrac, IPMI muss angewiesen werden das System abzuschalten - Nicht nur resetten - Das löscht den Speicher nicht, sondern abschalten. Wenn dann die Behörden mehrere Minuten brauchen an das System zu kommen helfen auch Kühlverfahren um das DRAM zu retten nicht mehr. Damit wäre ein System geschaffen was eine mehr oder minder beliebige Menge an Systemen, Disk Volumes oder Systemen innerhalb von 60 Sekunden unerreichbar macht.