Holpriger Start: Star Trek Discovery

Leute, ich muss jetzt mal ein bisschen motzen. Als Science-Fiction-Fan habe ich ein natürlich auch gewisses Faible für Star Trek, wie man vielleicht vermuten kann. Aber abgesehen davon, dass ich ein paar Worte Klingonisch kann, würde ich mich jetzt nicht gerade als Hardcore-Trekkie bezeichnen, der auswendig jedes Spezialdetail und alle Hintergründe zu jeder Episode aufsagen kann, in Spocks Uniform spazieren geht und zuhause Film-Requisiten hortet. Und doch kommt mir altem 90er-Jahre Fernsehkind beim Schauen der Next Generation Folgen immer noch Gänsehaut beim Intro und es stellt sich das vertraute Star-Trek-Feeling ein. Star Trek: Discovery LogoBei der neuen Star-Trek-Serie Discovery knüpft in den ersten beiden Folgen einzig die hervorragend gespielte Capt. Georgiou - "Die Sternenflotte schießt nicht zuerst!" - daran an, der Rest ist leider im Wesentlichen ein ziemlich beliebiges Weltraumgeballer. Und ich gehe hier natürlich davon aus, dass die Zielgruppe schon in erster Linie die Fans sind, denn für alle anderen fehlt komplett eine notwendige Einleitung, warum da so viele komische Kreaturen auf dem Schiff der Menschen sind, was überhaupt die Sternenflotte ist, wer die Klingonen sind und warum wir die nicht einfach über den Haufen schießen. Die zugegeben beeindruckende Bildgewalt vermag dann aber auch für die Fans nicht die vielen kleinen und großen Ungereimtheiten zu überdecken: Warum hat ein Sternenflottenschiff schon 10 Jahre vor Kirks rustikaler NCC-1701 Enterprise schicke Holo-Kommunikatoren und überall modern glänzende Touchscreens? Oder warum hat die erste Offizierin, die bei Vulkaniern aufwuchs, so viel emotionale Selbstkontrolle wie ein gereizter Klingone? Oh, und wo wir gerade bei Klingonen sind, warum zum Geier hat man das Erscheinungsbild der Klingonen so abartig verändert? Sollen diese kahlen Hallowen-Fratzen ein blöder Witz sein? toDuj 'oS rol - Ein Bart ist ein Symbol des Mutes, heißt es bei den Klingonen! Na wenigstens sprechen sie untereinander viel Klingonisch. Da kommen die Fans dann doch wieder etwas auf ihre Kosten. Ihren Anführer, T’Kuvma, würde ich jedoch gerne zum Logopäden schicken. Solange, bis er nicht mehr minutenlang. Jedes. Verdammte. Wort. Einzeln. In. Seinen. Fehlenden. Bart. Nuschelt. Ehrlich Leute, das klingt doch mehr nach Schlaganfall als nach Kriegsfürst! Ok, was haben wir sonst noch?
  • Ein phantasieloses Intro, das genauso gut ein Werbeclip für irgendein ein CAD-Tool sein könnte. Laaangweiliiig!
  • Kurios: das namensgebende Raumschiff taucht in den ersten beiden Folgen kein einziges Mal auf / wird nicht mal erwähnt.
  • Eine sich ewig hinziehende Eröffnungssequenz auf einem Wüstenplaneten, die rein überhaupt gar nichts mit der späteren Handlung zu tun hat. Wozu?
  • Bat'leths, die nicht wie Bat'leths aussehen. Hättet ihr doch nur jemanden gefragt!
  • Ein Sternenflottenschiff (USS Shenzhou), dessen Brücke nicht auf Deck 1 ist sondern unten an der Untertassensektion hängt. What!?
  • Ein Computer der Gefängniszelle des Schiffs, der sich überreden lässt dich freizulassen, wenn du nur genug jammerst. Ja, ernsthaft.
  • Jede Menge nervige Lens Flares in den Weltraum-Szenen.
  • Und, und, und ...
Discovery Werbeplakat
Ein großes Werbebanner im Stuttgarter Hauptbahnhof zeigt die neuen ... oh fuck ... also die neuen ... NEIN! Nein sorry, aber das sind einfach keine Klingonen! Vergesst es! Fertig, aus.
Kurz und milde gesagt: bis jetzt bleibt die neue Serie noch gaaaanz weit hinter den Erwartungen zurück und wirft mal eben alles über den Haufen, was Star Trek ausmacht. Gerade was die Integration in die bisherigen Filme betrifft, hat Star Wars mit Rouge One vorgemacht, wie der Übergang zwischen alt und neu viel bruchfreier und eleganter zu bewerkstelligen ist. Mal schauen, wie das weiter geht und ob Discovery dafür vielleicht doch noch an anderer Stelle punkten kann.

Warum man fremdem Code nicht trauen darf

main():
  1. int a = 0;
  2. printf("Der Wert von Variable 'a' ist %d.\n", a);
  3. BoeseFunktion(4711);
  4. a = 1;
  5. printf("Der Wert von Variable 'a' ist jetzt %d.\n", a);
Was meint ihr, gelingt es mir als Programmierer von BoeseFunktion() dass die Ausgabe in der zweiten Zeile Der Wert von Variable 'a' ist jetzt 0. lautet? Selbst wenn 'a' nur lokal der Main-Funktion bekannt ist? Ich sage ja:
BoeseFunktion():
  1. void BoeseFunktion(int tmp) {
  2.   int* pointer;
  3.   pointer = &tmp - 1;
  4.   *pointer = *pointer + 8;
  5. }
Das funktioniert eigentlich ganz einfach. Mit pointer = &tmp - 1; hole mich mir einen Zeiger auf den ersten Funktionsparameter und reduziere die Adresse um 1. Auf x86-Systemen bin ich nun an der Rücksprungadresse von BoeseFunktion() auf dem Stack. So sieht das im Speicher aus: Stack Und mit *pointer = *pointer + 8; erhöhe ich anschließend die Rücksprungadresse um 8 Byte, was gerade soviel ist um das a = 1; in main() zu überspringen. Solches Gehacke mit Pointer-Arithmetik ist natürlich sowieso pfui. Aber was uns dieses Beispiel eigentlich lehren soll ist, dass man fremden Funktionen nicht trauen soll. Es könnte schließlich sein, dass ich sie geschrieben habe... 😉

Schadensabwehr

Aber wie bekommt man nun das Problem in den Griff, dass Fremdcode, den man in so gut wie jedem Projekt findet, unbeabsichtigt oder beabsichtigt Unfug anstellt und Daten oder die Programmausführung beeinträchtigt? Da gibt es mehrere Möglichkeiten. Unter anderem:
  • Logische Programmablaufkontrolle Man stelle sich vor, jede eigene Funktion meldet sich bei ihrem Aufruf an einer zentralen Instanz mit einem eindeutigen Key. Die zentrale Instanz überprüft dann anhand einer Tabelle ob es in Ordnung ist, dass Funktion3 nun auf Funktion2 folgt oder nicht. Bringt fremder Code - zum Beispiel eine defekte DLL - den Ablauf durcheinander so wird dies schnell aufgedeckt. Voraussetzung für ein solches System ist natürlich eine deterministische Reihenfolge der Funktionsaufrufe.
  • Datenredundanz Zuerst einmal sollten alle Daten, die irgendwie wichtig sind, redundant vorliegen; am besten redundant-invers. Das heißt, es gibt nicht eine Variable 'a', sondern z.B. 'unsigned char u8VentilSollwert' und 'unsigned char u8VentilSollwertInvers'. Das hat nicht nur einen eingängigeren Namen als 'a' sondern informiert uns auch gleich noch über das Präfix u8, dass es eine unsigned 8-Bit-Variable ist mit Wertebereich von 0..255. In der einen steht dann z.B. 1 (binär 0000 0001) und in der anderen das Gegenteil, also 254 (1111 1110). Vor Verwendung wird jedes Mal geprüft, ob die beiden Variablen noch Bit-invers sind und falls nicht mit Fehlermeldung abgebrochen.
  • Datensicherung Wenn die Daten umfangreicher sind, gibt es die Möglichkeit sie mit einer Checksumme zu sichern. Wird die Checksumme oder die Daten beschädigt, so fällt dies auf, sobald man die Checksumme nachrechnet und mit dem Prüfwert vergleicht.

Dach fertig

Bitumen ist ein widerliches Zeug. Erst recht, wenn man in der Mitagshitze mit einer wackeligen Leiter auf einem steilen Dach klebrige Schindeln aufnagelt. Das Dach zu decken hat mich dann auch ganze zwei Tage Zeit und etliche Liter Schweiß gekostet. Ich hoffe, es hält jetzt auch eine Weile. Die empfohlene Dachneigung habe ich hier ja nicht unbedingt.
Hexenhaus
Und nun ist auch der Zweck der kleinen Holzschindeln klar.

Kettensägenmassaker, bunte Fenster und zauberhafte Details

Meine arme kleine 1600W-Spielzeugkettensäge musste sehr über ihr Können hinauswachsen, als ich letztens einen Baumstamm der Länge nach halbiert habe. Warum mach ich so was Beklopptes? Weil eine schnöde Plastikregenrinne keinesfalls einem Hexenhaus angemessen wäre. Da muss etwas uriges her, und wenn es noch so aufwändig wird. Und natürlich mit einem möglichst sinnlos verdreht und verwinkeltem Abflussrohr:
Hexenhaus
Mit im Bild: aktuelle Innenansicht, Türklopfer (eBay) und märchenhafte Gardinen für das Oberstübchen.
Meine bessere Hälfte hat sich inzwischen mit den Ausmaßen, die dieses Projekt räumlich und finanziell annimmt, arrangiert und bastelt fleißig bei der Inneneinrichtung mit:
Spinnenkissen
Die Arbeitsteilung ist bei uns offensichtlich eher klassisch, aber irgendwann bringe ich mir auch noch Nähen bei...
Das Spinnenfenster ist endlich auch fertig geworden:
Spinnenfenster
Die Laterne ist übrigens vom Flohmarkt und ein Kunstwerk für sich allein.
Sieht von Innen sogar noch besser aus:
Spinnenfenster
"Villa Spinnenbein", wie Kind #2 die Hütte taufte, macht ihrem Namen zunehmend alle Ehre.
Was von Innen ebenfalls so gut aussieht wie erhofft, ist das nun verglaste Erkerfenster:
Buntglasfenster
Schade nur, dass mir die Scheibe unten links gerissen ist :-(
Ich habe lange mit mir gerungen, ob 14 € (!) pro einzelner (!!) Glasscheibe es wert sind; aber sie sind es. Und wenn ich Sonntags keinen Krach machen darf, dann male ich eben etwas zur Entspannung. Wie z.B. 200 kleine Holzschindeln:
Holzschindeln
Und ob Cypax jetzt einen kleinen Sonnenstich hat und 20m² Dach mit einer Handvoll fitzeliger Mini-Plättchen eindecken will oder was er sonst damit vor hat, das erfahrt ihr beim nächsten Mal...