Ich habe es vorhin in einem Podcast gehört, die Wikipedia bezieht sich dummerweise genau auf diesen. Google kennt aber noch einige Berichte darüber: offenbar war der 11. April 1954 der langweiligste Tag des Jahrhunderts. Keine spannenden Nachrichten weit und breit. Die Zeitung des 12. April würde mich mal interessieren…
Shellskripte mit variabler Schlafzeit
Ich glaube ich erwähnte es schon: eines meiner Steckenpferde bei der Arbeit ist das Monitoring, also die Überwachung von Rechnern. Bei bestimmten Überwachungen bietet es sich an, den überwachten Rechner seine Messwerte selbst schicken zu lassen. Oft heißt es „es reicht wenn wir den Wert alle fünf Minuten kriegen“, also bietet sich ein Cronjob mit einem geschickt platzierten „*/5“ an.
Nachteil dabei: unter Umständen wird das Monitoring genau alle fünf Minuten zeitgleich mit hunderten Werten von hunderten Rechnern beworfen.
Um das zu entzerren habe ich mir was formschönes ausgedacht:
1 |
sleep $((0x$(echo "$HOSTNAME$0$@" | md5sum | cut -c1-4) % 300)) |
Diese Zeile bewirkt am Anfang eines Skriptes, dass vor der Ausführung eine variable Zeit gewartet wird. Das charmante daran: die Zeit ist abhängig vom Hostnamen, dem Skriptnamen und den Parametern die dem Skript übergeben werden. Es ist keine wirklich zufällige Zeit, das heißt dass man sich darauf verlassen kann dass das Skript ziemlich genau alle fünf Minuten einen Wert ausgibt.
Oh, falls das cut irritiert: wenn ich die hexadezimale Prüfsumme einfach mit $((0x…)) dezimal mache kommt da unter Umständen ein negativer Wert raus. Meine sleep-Version unterstützt leider keine Zeitreisen…
Hat jemand einen Vorschlag wie ich das noch eleganter hinkriegen würde?
EDIT: Vielleicht ist diese Variante noch schöner. Man umgeht mit Awk den ‚bashismus‘ mit dem Modulo, dafür spart man sich aber auch den Aufruf von cut.
1 |
sleep $(echo "$HOSTNAME$0$@" | md5sum | awk '{sub(/./,"");print $1 % 300}') |
Ein /24 um Mucky zu beleidigen
Falls Ihr mal ein /24 übrig haben solltet und dringend wen beschimpfen müsst:
for d in {0..255}; do dig +short -x 202.78.246.${d}; done
… und mir sagen manche Leute ich hätte zu viel Zeit…
Klingonisches Bier
Wired berichtet dass eine amerikanische Brauerei ‚klingonischen Warnog‘ verkauft, also praktisch klingonisches Bier. Warum das Zeug aber nach Banane und Nelke schmecken soll und nicht nach Pflaume — Pflaumensaft ist ein Getränk für Krieger — kann ich nicht nachvollziehen…
Unix-Kreationismus
Ich musste breit grinsen als ich diesen Text sah:
„I am a Unix Creationist. I believe the world was created on January 1, 1970 and as prophesized, will end on January 19, 2038″
Noch breiter wurde das Grinsen in den Kommentaren. Interessant dass die am lautesten schreien die am wenigsten verstehen was gesagt wurde.
Huch!
Debian ist frei genug böses zu tun
Seltsame Situation: in der Lizenz einer Software (JSON-Modul für PHP) steht die — wie ich finde völlig okaye — Klausel:
The Software shall be used for Good, not Evil.
Das schränkt tatsächlich die Verwendbarkeit der Software in einigen Situationen ein. Also gilt die Lizenz nicht als frei, was dann einige Distributionen dazu bringt das entsprechende Paket rauszuwerfen.
Programmiersprachen — Wat?
Vielen Dank an ft, der mir diesen Lightning Talk in die Kommentare zu meinem Beitrag über Javascript und dynamische Typisierung gelegt hat. Der verdient es, mit einem eigenen Link verewigt zu werden.
Dynamische Typisierung
Ich persönlich mag ja Skriptsprachen. Wenn es irgendwie geht greife ich gerne zu Python, wenn es sein muss skripte ich aber auch in Perl oder PHP. Sprachen mit P halt.
Ein Problem das ‚richtige Programmierer‘ immer wieder mit Skriptsprachen haben ist, dass die in der Regel dynamisch typisiert sind. Man muss halt nicht explizit sagen was in einer Variable stehen darf, man benutzt sie einfach.
Gerade bin ich auf ein erschreckendes Beispiel gestoßen das zeigt dass dynamische Variablen tatsächlich böse schlecht implementiert sein können. Ich war noch nie ein Freund von Javascript, aber…
rschaten% js
js> 5+2
7
js> 5-2
3
js> "5"+2
"52"
js> "5"-2
3
Schaurig, oder?
Glücklicherweise machen andere Sprachen das besser:
rschaten% python
Python 3.3.2 (default, Sep 6 2013, 09:30:10)
[GCC 4.8.1 20130725 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 5+2
7
>>> 5-2
3
>>> "5"+2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly
>>> "5"-2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'str' and 'int'
Dass die Fehlermeldung sich hier zwischen + und – unterscheidet liegt daran dass der Operator + in Python auch für die Konkatenierung von Strings verwendet wird. Mein Vertrauen in Python besteht weiterhin…
Skeuomorphismus
Gerade las ich etwas über skeuomorphe Simulation von Brettspielen — verstand es aber erst nachdem ich in der Wikipedia nachgeschlagen hatte:
Skeuomorphismus (aus dem Altgriechischen σκεῦος Behälter, Werkzeug und μοÏφή Gestalt) ist eine Stilrichtung hauptsächlich im Design, bei der Objekte in ihrer Gestaltung ein anderes Material oder eine Form eines älteren, vertrauten Gegenstandes nachahmen, ohne dass diese durch ihre Funktion begründet ist.
Lässt sich wohl am Besten mit ‚Imitation‘ übersetzen. In Bezug auf Gegenstände etwa das ‚Holz‘ am Atari 2600, in der oben genannten Simulation wird nicht nur die Spielsituation an sich dargestellt, da sollen sich auch Spielfiguren möglichst realistisch verhalten. Software ist dann Skeuomorph wenn die Benutzeroberfläche versucht, real existierende Gegenstände nachzubilden.