Frühförderung im Computer-Club

Die Sendung mit der Maus veranstaltet jährlich einen "Maus-Türöffnertag", an dem Unternehmen, Vereine, Labore, usw. ihre Türen für interessierte Kinder öffnen. Und heute haben wir im Freiburger-Computerclub mitgemacht und ein buntes Programm für die Kids aufgelegt. Zu sehen gab es bei uns unter anderem 3D-Scanner, unser Elektronik-Labor, wo man LED-Figuren löten konnte und natürlich den Augmented Reality Sandkasten:
3D-Scan3D-Scan3D-Scan
Der Spaß darf aber auch nicht zu kurz kommen und darum konnte unter dem Stichwort "Retro-Gaming" der potentielle Hacker-Nachwuchs mal so richtig die Sachen zocken, die schon die Eltern gespielt haben.
3D-Scan3D-Scan
Spielhallen-Atmosphäre im Club - ob am uralten, noch rein mechanischen Flipper oder an der PlayStation 1 von 1994.
Neben dem Spielen vieler alter DOS-Klassiker konnte man am Computer aber auch selbst zum Entwickler werden - sei es per Baukastenprinzip einfache Games selbst zu erstellen oder am nostalgischen 286er wie vor 30 Jahren in QBasic die ersten Schritte im Programmieren zu üben.
3D-Scan3D-Scan
Die einen erstellen selber eigene Spiele, die anderen versuchen Papas alten Rundenrekord von damals zu brechen.
Nun mal sehen, ob vom Interesse etwas hängen bleibt und vielleicht sogar die ein oder andere technische Laufbahn angestoßen wurde.

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.