Irgendwer hat beim Web-Framework Django einen Pull-Request eingereicht der als Verbesserung mitbringt dass die Komponenten in der Replikation nicht mehr Master und Slave genannt werden — weil das rassistisch ist. Das Framework scheint perfekt zu sein, wenn das ernsthaft ein Thema ist… 
Kategorie: IT
Technikbezogene Themen
XBMC, Raspberry und NUC
Seit mehr als zehn Jahren habe ich einen Rechner am Fernseher hängen der mit Linux und der Software VDR mein Videorecorder ist. Als reiner Videorecorder ist VDR kaum zu schlagen, damit bin ich immer noch sehr zufrieden. Schwächen hat er nur wenn es um die Wiedergabe anderer Medien geht: MP3 ist noch OK, aber bei Fremd-Videos hat mich die Bedienung nie überzeugt, und die Anzeige von Fotos ist prinzipbedingt zu anstrengend für meine kleine Atom-CPU.
Seit etwa einem halben Jahr hängt daneben ein Raspberry Pi, der mit XBMC eine wirklich erstklassige Medienzentrale abgibt. Ein paar Monate hatte ich den unter Xbian, zuletzt unter OpenELEC im Einsatz. Wenn ich mir ansehe was für ein Rechnerchen mir da eine sehr moderne Oberfläche und eine komfortable Wiedergabe sogar von Full-HD-Material bietet bin ich immer noch sehr beeindruckt. Das ganze bei einem echt überschaubaren Preis, und einem Stromverbrauch deutlich unter zehn Watt.
Konkurrenzlos… oder?
Letzte Woche hat ein Arbeitskollege vom Intel NUC erzählt. Genauer vom Intel NUC DN2820FYKH (bzw. DN2820FYK wenn man keinen Platz für eine Festplatte braucht). Im Stromverbrauch kaum höher als der Raspberry, dafür aber in der Rechenleistung weit überlegen. Und preiswert: ich habe für den Rechner im Paket mit 2GB RAM etwa 150 Euro bezahlt. Dafür habe ich als Mehrwert zum Raspi ein wohnzimmertaugliches Gehäuse, WLAN, einen eingebauten Empfänger für eine Infrarotfernbedienung (habe ich noch nicht getestet) und wie gesagt: deutlich mehr Leistung.
Wenn man keinen direkten Vergleich hat kann man mit dem Raspberry sehr zufrieden sein. Wenn man aber den NUC daneben stellt fällt auf dass die Bedienung von XBMC hier weitaus flüssiger läuft, es macht rundum einfach mehr Spaß. Wer sich ein nettes Medienzentrum ins Wohnzimmer stellen will sollte einen Blick auf blaupausen.net werfen, ich habe mich von dem Artikel wirklich gut informiert gefühlt.
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}') |
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… 
IPv6-Spam
Gelesen habe ich:
We are contacting you to participate in a bid for the lease of your IPv4 address space. As you know, IPv4 is in a transitional period and will soon be replaced by IPv6. We are interested in leasing IPv4 address space for cash before they become obsolete.
Verstanden habe ich:
Wir würden Dir gerne etwas für Deine Beine bieten. Wie Du weisst ist das Laufen nur eine Brückentechnologie die bald durch das Fliegen ersetzt wird. Wir haben Interesse daran, Dir — gegen Geld natürlich — die Beine abzunehmen bevor sie obsolet werden.
So weit sind wir schon, wie? 
Der warum-hab-ich-das-nicht-schon-immer-so-gemacht-Moment
Manchmal habe ich das. Heute zum Beispiel.
Ich beschäftige mich eine Weile mit einem Thema. Meistens habe ich vorher schon was davon gehört, oder darüber gelesen. Manchmal habe ich mich auch schon etwas eingelesen, oder etwas rumprobiert. Nach einer Weile des unbeholfenen Rumstocherns werden Beispiele konkret. Ich stelle mir gezielt Aufgaben, und irgendwann sind die Lösungen einfach. Es passt einfach alles, und alles ergibt einen Sinn.
In den letzten Tagen habe ich mich intensiv mit Puppet beschäftigt. In der Theorie weiß ich schon lange was es tut, und die Beschäftigung damit stand genauso lange ganz oben auf der Liste der Sachen die ich mir noch aneignen will.
Zu Recht, wie mir scheint.
Heute hatte ich mehrere ach-so-geht-das-Momente. Zusammen ergeben die dann einen veritablen warum-hab-ich-das-nicht-schon-immer-so-gemacht-Moment. 
Ich bin mir absolut darüber im klaren dass es im Puppet-Umfeld jede Menge zu entdecken gibt, und dass das sicher mit einer Menge Arbeit und bisweilen auch mit Frust verbunden ist. Aber dieser warum-hab-ich-das-nicht-schon-immer-so-gemacht-Moment erleichtert die Beschäftigung damit ungemein.
Soviel dazu. Muss weg. Manifeste verfassen… 
195 Konzertbesucher… in einer Mail
Anfang letzten Jahres habe ich ein Konzert besucht. Die Karte habe ich mir im Vorverkauf besorgt, und den hat der Veranstalter selbst abgewickelt. Dass ich als Antwort auf meine Bestellung eine — augenscheinlich manuell und individuell getippte — Mail bekommen habe in der mir zugesichert wurde dass die Karte vor der Veranstaltung an der Kasse ausliegt hat mich schon irritiert. Ein paar Monate vor der Veranstaltung hätte ich erwartet dass die mir zugeschickt würde…
Nun denn. Das Konzert hat Spaß gemacht, damit hat sich der Abend gelohnt.
Heute — fast ein Jahr später — bekam ich eine weitere Mail des Veranstalters. Nicht nur ich. Neben meiner standen noch 194 weitere Adressen auf dem Umschlag. Eine der Adressatinnen kenne ich sogar noch aus der Schule, also selbst für mich noch aus der vor-Internet-Zeit. Seit etwa 20 Jahren dürfte ich die nicht mehr gesehen haben. Jutta, falls Du dies liest: Hallo! 
Allen Gelegenheits-Rundschreibenschickern sei geraten: die eigene Adresse ins Feld für den Empfänger schreiben. Die eigentlichen Empfänger kann man dann in einem Feld mit dem Titel Blindkopie (auch BCC oder Blind Carbon Copy) auflisten. Dann sehen Empfänger nur den Absender, nicht die komplette Liste aller Adressaten. Das geht auch mit dem Thunderbird, selbst auf einem Windows 7.
Noch besser wäre es natürlich, sowas mit einem professionellen System zu machen. Das schickt die Mails dann einzeln raus.
Noch viel besser wäre es natürlich, so einen Mist gar nicht erst zu verschicken. Ich kann mich nicht daran erinnern zugestimmt zu haben dass meine Adresse dauerhaft gespeichert und sogar für den Spamversand verwendet wird. Das ist meines Wissens nicht legal, und wenn man das dem falschen schickt kann der einem deshalb böse auf die Füße treten, heutzutage…
Freie Software — ganz schön teuer
Bei der Arbeit mit einem Softwarepaket fiel die Bemerkung dass man den ganzen Mist wegwerfen und neu entwickeln sollte. Mir fiel dazu ein dass es ein Tool gibt mit dem die Entwicklungskosten für Softwareprojekte abgeschätzt werden kann: ohloh.net berücksichtigt dazu im wesentlichen die Anzahl der Quellcodezeilen, das darunterliegende COCOMO-Modell, das zwar nicht völlig aus der Luft gegriffen ist, effektiv aber wohl auch nicht viel mehr bringt als eine Glaskugel.
Trotzdem: die Zahlen die dabei rausfallen sind schon beeindruckend. Selbst wenn man nur die Anzahl der Codezeilen ansieht, nicht die daraus folgenden Kosten (die mit $55k pro Personenjahr angesetzt werden):
| Projekt | Codebase Size | Estimated Effort | Estimated Cost |
|---|---|---|---|
| Apache HTTP Server | 2.268.153 Zeilen | 645 Personenjahre | 35.476.462 Dollar |
| Apache OpenOffice | 23.105.092 Zeilen | 7361 Personenjahre | 404.853.843 Dollar |
| Gimp | 728.523 Zeilen | 201 Personenjahre | 11.034.951 Dollar |
| GNU Compiler Collection | 6.435.383 Zeilen | 1956 Personenjahre | 107.585.880 Dollar |
| Linux Kernel | 16.411.777 Zeilen | 5321 Personenjahre | 292.631.874 Dollar |
| MySQL | 12.566.154 Zeilen | 4009 Personenjahre | 220.473.614 Dollar |
| Nagios | 240.833 Zeilen | 61 Personenjahre | 3.334.334 Dollar |
| Perl | 5.422.092 Zeilen | 1664 Personenjahre | 91.502.061 Dollar |
| PHP | 2.281.573 Zeilen | 653 Personenjahre | 35.901.501 Dollar |
| Python Programming Language | 908.412 Zeilen | 251 Personenjahre | 13.822.126 Dollar |
| Samba | 1.554.832 Zeilen | 442 Personenjahre | 24.330.106 Dollar |
| Zabbix | 279.878 Zeilen | 73 Personenjahre | 4.036.481 Dollar |
Wie gesagt: alles nur Glaskugel, und sicher gibt es tausend Unwägbarkeiten wie autogenerierten Code, oder unterschiedliche Kosten für unterschiedlich qualifizierte Programmierer.
Für 300 Millionen Dollar würde ich persönlich aber durchaus anfangen einen Kernel zu schreiben… selbst wenn ich damit rechne bis zur Rente noch 30 Jahre hacken zu müssen, müsste der rechnerisch bis dahin ja nur 0,56% der Funktionalität bringen ((1 / 5321) * 30 * 100 = approx. 0.5638038)… wenn ich mir die richtigen 0,56% raussuche passt das schon… 
