Gehen Sie weiter, wir haben hier alles unter Kontrolle...
Bild: Florival fr,
Nuclear power plant Fessenheim (Ausschnitt), CC BY-SA 3.0
Neues vom Pleiten-, Pech- & Pannenreaktor:
Behörde hatte Störfall im AKW-Fessenheim heruntergespielt
Dabei geht es um einen Rohrbuch im April 2014.
Damals war Wasser in Schaltschränke geflossen und der Reaktor musste heruntergefahren werden. Was die französischen Behördern und Betreiber damals verheimlicht hatten: das Herunterfahren mit Betriebsmitteln war gar nicht mehr möglich und man musste Bor in den Reaktor einleiten.
Nur so zur Info: normalerweise werden Reaktoren über Steuerstäbe und Kühlmittelpumpen kontrolliert.
Wenn das aber nicht mehr geht oder es ganz schnell sein muss - also in Notfällen - leitet man Bor in den Reaktor, um die Kernspaltung zu stoppen.
Bor kühlt, absorbiert Neutronen und "entschärft" das Uran in den Brennstäben.
Das macht man nur, wenn die Kacke so richtig am dampfen ist. Als Griff zum letzten Strohhalm, um eine Kettenreaktion zu verhindern.
Aber diese Details kommen natürlich erst jetzt, zwei Jahre später ans Licht.
Für Sicherheit und Umwelt habe keine Gefahr bestanden., hieß es damals seitens der Électricité de France.
Haltet mich für einen zynischen Pessimisten, aber diese Verlogenheit der Behörden und Betreibern (hierzulande sicherlich ebenso - macht euch da nichts vor) ist genau der Grund, warum ich non-stopp einen Geigerzähler in unserer Wohnung laufen lasse.
TICK ... TICK ... TICKTICK ... TICK ...
Wie war denn eigentlich das Wetter so, am Oster-Wochenende des Beinahe-GAUs?
[...] Regen, dahinter Übergang zu wechselnder Bewölkung und gebietsweise Schauer, die auch kräftig ausfallen können. [...] Schwacher bis mäßiger Nord- bis Westwind [...] (Quelle)
Juhu! Fallout in ganz Mitteleuropa!
Ganz nett, was man mit etwas CSS und JS heute so alles machen kann:
Bild: Screenshot (Ausschnitt) von Ocean wave simulation in WebGL von David Li.
Und mit der passenden akkustischen Untermalung steht auch den Anhängern der Prokrastination einem tiefentspannten Zeitvertrieb nichts im Wege.
Globale SVN-Revisionsnummer im Projekt - und zwar richtig!
Wenn man ein Projekt aufsetzt, dann hat man meist eine Versionsnummer im Format a.b.c.d, mit
a = Hauptversionsnummer, ändert sich eigentlich nur bei massiven Änderungen
b = zeigt an, dass neue Features hinzugekommen sind
c = zeigt an, dass etwas gepatched bzw. geupdated wurde
d = gibt den Revisionsstand der Software im Versionsverwaltungssystem an.
Bei SVN gibt es die Möglichkeit sich per Code-Kommentar eine Revisionsnummer direkt in den Quelltext schreiben zu lassen. Das sieht dann beispielsweise so aus:
Vorausgesetzt natürlich, dass die Datei die entsprechenden SVN-Keywords gesetzt hat:
So weit, so gut.
In dem Beispiel oben ist die Revisionsnummer 178. Wenn es jetzt aber noch eine zweite Datei gibt und Änderungen an dieser comitted werden, dann bleibt in main.cpp die 178 stehen.
Warum? Weil die SVN-Revisionsnummer dateibezogen ist - nicht projektbezogen!
Das ist ja jetzt nicht ganz das, was wir haben wollten.
Zum Glück, gibt es aber ein Tool, welches genau für unsere Zwecke gedacht ist: svnversion!
Um eine globale Revisionsnummer zu erhalten erstellt man eine leere Datei revision.h, checkt sie nicht in SVN ein und schreibt folgendes in die *.pro-Projektdatei eines Qt-Projekts:
PRE_TARGETDEPS += $$PWD/code/revision.h
# Obtain SVN revision
SVN_REVISION = $$system(svnversion -n)
# split into list by ':'
REVISION_LIST = $$split(SVN_REVISION,:)
# get last item of list
HEAD_REVISION = $$last(REVISION_LIST)
# remove M (modified working copy)
HEAD_REVISION = $$replace(HEAD_REVISION,M,)
# remove S (switched working copy)
HEAD_REVISION = $$replace(HEAD_REVISION,S,)
# remove P (partial working copy, from a sparse checkout)
HEAD_REVISION = $$replace(HEAD_REVISION,P,)
QMAKE_EXTRA_TARGETS += revtarget
revtarget.target = $$PWD/code/revision.h
unix {
revtarget.commands = "$$system(echo \'/* generated file - do not edit */\' > $$revtarget.target)"
Zur Erklärung:
Als erstes wird qmake mitgeteilt, dass es eine zusätzliche Abhängigkeit gibt (PRE_TARGETDEPS, Zeile 1) - nämlich besagte revision.h-Datei.
Dann werden ein paar Variablen mit den SVN-Revisionsinformationen gefüllt.
Mit dem Kommando svnversion -n (Zeile 4) erhält man die SVN-Revisionsnummer. Der Parameter -n bewirkt, dass die Ausgabe keinen Zeilenumbruch enthält.
Die Variable SVN_REVISION enthält somit die Ausgabe von svnversion, ausgehend vom Pfad, in der die Projektdatei liegt.
Wenn die lokale Arbeitskopie allerdings modifiziert, unvollständig ausgecheckt oder zu einer anderen Revision geswitched wurde, ist die Revisionsnummer nicht einfach eine Zahl, sondern nach dem Schema [abc:]xyz[M|S|P] aufgebaut, wobei xyz die Headrevision ist (für Details einfach mal in der Konsole svnversion -help eingeben).
Aus diesem Grund teilen wir die Ausgabe anhand des Trennzeichens ":" auf (Zeile 6), nehmen das letzte Element dieser Liste (Zeile 8) und entfernen alle M-, S- und P-Zeichen (Zeilen 10 - 14).
In Zeile 16 wird qmake mitgeteilt, dass es ein zusätzliches Target revtarget gibt (QMAKE_EXTRA_TARGETS), welches die, im Unterordner /code befindliche, revision.h-Datei ist und welche stets neu zu erstellen ist (Zeile 39).
Das Befüllen der revision.h erfolgt in den Zeilen 19 - 37. Zu beachten ist, dass die erste echo-Ausgabe mit einem einfachen > umgeleitet wird. Dadurch wird der der Inhalt der Datei überschrieben. Anhängen weiterer Zeilen erfolgt mit >>.
Die echo-Anweisungen für Unix müssen übrigens deshalb extra escaped werden, weil ein echo /* generated file - do not edit */ erst alle Dateien unter / auflisten würde, dann "generated file - do not edit" ausgibt und dann alle Dateien im aktuellen Verzeichnis auflistet.