Spaß

Java

Kleines Quellcode-Gruselkabinett II

14

Weil es so lustig war und ich neues Material gesammelt habe, denke ich, dass es an der Zeit ist, das Quellcode-Gruselkabinett mit einem zweiten Artikel fortzusetzen, womöglich zu beenden. Der (nicht näher definierte) Praktikant aus dem ersten Teil hat wieder zugeschlagen und hocheffizienten und extrem sinnvollen Java-Code produziert. Diese Glanzleistung moderner Softwareentwicklerkunst wollte ich denjenigen meiner Leser, die über Programmierkenntnisse (und Englischkenntnisse) verfügen, auf keinen Fall vorenthalten. Wer von Programmieren überhaupt nichts versteht, der wird an diesem Artikel wie gewohnt leider nichts finden können.

Der Praktikant ist offenbar ein großer Fan davon, toString() auf String-Objekten aufzurufen, vielleicht erhofft er sich dadurch noch stärkere Typsicherheit mit Netz und doppeltem Boden oder sowas. Jedenfalls Code wie der obige begegnet mir leider immer häufiger. Solchen Murks mache ich bei Sichtung auch sofort wieder raus.

Ebenfalls ein ständiger Begleiter in seinem Code: Die Angst, dass eine neu (=leer) angelegte Collection vielleicht doch nicht so leer ist, wie sie vorgibt zu sein. Anders kann ich mir nicht erklären, wieso der Praktikant gleich nach dem Erstellen einer leeren Collection diese leert. Womöglich hat er sich hierbei etwas gedacht, ist aber völlig unnützer Code. Ein damit sehr verwandtes Problem ist das folgende:

Aus der API-Dokumentation der oberen Methode: “The Calendar returned is based on the current time in the default time zone with the default locale.“. Der Knackpunkt ist, dass das zurückgegebene Kalender-Objekt immer bereits mit der gegenwärtigen Uhrzeit initialisiert ist. Hier (zur Sicherheit oder aus Unkenntnis) nochmals Uhrzeit und Datum zu setzen und dafür extra ein neues Date-Objekt zu erstellen, ist kompletter Unfug. Überhaupt: Wieso geht er davon aus, dass der parameterlose Konstruktor von Date() die aktuelle Uhrzeit liefert, aber bei Calendar soll selbiges System nicht funktionieren? Nett auch die Wahl des Variablennamens “actCal” für den Kalender. Er dachte wohl, “actual calendar” sei eine brauchbare Übersetzung für das, was er ausdrückten wollte. Ich lese da aber irgendwie immer nur “Aktkalender”.

Auch so ein Codekonstrukt, worüber man diskutieren sollte: die Getter-Methode für private Konstanten. Wieso nicht gleich die Konstante als public deklarieren, dann kann man sich das Rumgeeiere sparen. Bei Konstanten durchaus sinnvoll. Aber als verwandtes Problem sei angemerkt, dass der Praktikant zum Beispiel ganz gerne auch mal simple Getter-Methoden innerhalb derselben Klasse aufruft, in der sie definiert werden – anstelle der sichtbaren Variable. Kapselung schön und gut, aber damit ist doch eigentlich Kapselung von der Außenwelt gemeint. Das scheint jemand nicht so richtig verstanden zu haben.

Namenskonventionen für Methoden sind auch so ein Problem für den Praktikanten. Der Name der Methode sagt leider nichts darüber aus, was der Rückgabetyp sein könnte. Im Fall von “componentParser” ist noch nicht einmal eine Tätigkeit erkennbar. Da meldet die als Frage formulierte Methode “isActive” eine komplexe Hashmap zurück, und die etwas umständlich benannte Methode “getTheParsedSysInfoComp” liefert nicht etwa “die kompletten Systeminformationen” zurück, sondern einen Wahrheitswert – was auch immer dieser aussagen soll. Immer wieder lustig mitanzusehen sind Methodennamen, die erkennen lassen, dass sich dabei wohl jemand beim Ausdenken einen abbrechen musste, etwa “isLoadTimeFromOneSystemOverTime”.

Englisch scheint ohnehin nicht so seine ultimative Stärke zu sein, vor allem wenn die (netterweise konsequent, wenn auch unnötigerweise) im Englischen gehaltenen Kommentarzeilen nur so vor Denglisch triefen. Da wird aus “Pfade herausfiltern” schonmal “filter the path outside”, oder das weibliche Possessivpronomen “her” wird auf Systeme und _ihre_ Eigenschaften angewandt. Wenn man kein Englisch kann, sollte man vielleicht nicht unbedingt versuchen, alles immer englisch schreiben zu wollen, oder zumindest mal ein paar Vokabeln nachschlagen, bevor man in die Tasten haut.

Webfundstück

Prozentrechnen mit Lara Croft

0

Vor einigen Tagen bei Steam entdeckt: Wer JETZT Tomb Raider kauft, bekommt wahnsinnige 75% Rabatt. Also nicht jetzt, denn die Aktion war vermutlich gefühlte fünf Minuten später wieder beendet, aber hier wird einmal mehr das betont, was ich aus den ganzen Steam-Aktionen heraushöre: Spiele bei Steam sind an sich nichts wert, aber wer zum falschen Zeitpunkt kauft, zahlt eine Strafgebühr für das Verpassen des Sonderangebots. Außerdem will ich keine Werbung für die Aktion machen, daher ließ ich erst einmal ein paar Tage ins Land ziehen.

tombraiderrabatt1

Ich bin wahrscheinlich der Einzige, den es stört, dass das neueste “Tomb Raider” exakt genauso heißt wie das allererste “Tomb Raider” von Core Design. Es ist verdammt nochmal nicht das gleiche Spiel, dann soll es bitte auch nicht gleich heißen. Wie könnte man die beiden Spiele (Tomb Raider und Tomb Raider) in einer Liste unterscheiden, wenn man nicht zusätzlich in Klammern das Veröffentlichungsjahr angibt? Hier muss man aus der Kombination von Bild und Publishername darauf schließen, dass nicht der gleichnamige Spieleklassiker von 1996 gemeint ist, sondern die neueste Umsetzung der Reihe aus dem Jahr 2013. Irgendein hirnloser Marketing-Mensch hat sich wohl gedacht, dass es witzig wäre, wenn zwei Spiele aus derselben Reihe sich einen Namen teilen würden. Für Nummerierungen oder Untertitel ist Lara Croft schon zu cool geworden. Ich hasse diese unkreative Reboot-Logik, die neuerdings überall angewandt wird.

tombraiderrabatt3Nun habe ich entweder Prozentrechnung falsch verstanden, oder jemand bei Steam kann nicht rechnen. 75% Rabatt auf ein mit 19,99 Euro ausgezeichnetes Spiel, das wäre ein Endpreis von etwa 5 Euro. Die angegebenen 11,99 Euro wären aber nur ein Rabatt von 40%. Wie kommt man denn da auf 75% Rabatt? Eine Möglichkeit ist, dass der Preis bereits zuvor herabgesetzt worden sein könnte (von vielleicht 48 Euro), dann wäre der angezeigte (durchgestrichene) ursprüngliche Preis aber erstens nur verwirrend und zweitens auch nicht so eindrucksvoll, wie einfach den viel höheren Preis hinzuschreiben und diesen durchzustreichen.

So oder so, die Werbeanzeige ist falsch, die 75 kommt irgendwie nicht hin. Oder will mir jemand erklären, wo mein Denkfehler ist?

Java

Kleines Quellcode-Gruselkabinett

0

In meinem Beruf komme ich sehr oft mit den Quelltexten vieler Kollegen in Kontakt, deren Programmierwerke ich lesen, verstehen und erweitern können muss. Man gewöhnt sich daran, dass jeder irgendwo seinen eigenen Stil hat, und dass eben jener manchmal besser und manchmal schlechter lesbar ist. Auch ich habe schon Code geschrieben, auf den ich nicht stolz bin, aber man lernt ja schließlich aus Fehlern. Umso amüsanter ist es, wenn man als erfahrener Entwickler hin und wieder zu lesen bekommt, was sich ein blutiger Anfänger so aus seinen Hirnwindungen drückt.

So geschehen vor einigen Monaten, als ein unerfahrener Praktikant (nennen wir ihn im Folgenden einfach “Praktikant”) eine unbedeutende Erweiterung für ein Softwareprojekt schreiben sollte, für das ich teilweise die Verantwortung trage. Ich gehe zwar nicht näher auf die Details der Implementierung ein, aber ich habe drei kleine kuriose Codeschnipsel gesammelt, die mir in seinem Quellcode so aufgefallen sind. Das ist übrigens derselbe Praktikant, der (um mir einen Screenshot zu zeigen) eine Bilddatei in ein leeres Microsoft Word-Dokument eingefügt hat, damit er das Dokument als PDF-Datei exportieren konnte, um es mir dann per E-Mail zu schicken.

Achtung, der folgende Beitrag könnte für Nicht-Programmierer äußerst uninteressant sein.

Fangen wir mit etwas Leichtem an. Die obige, mehrfach verschachtelte Collection beweist zwar, dass der Praktikant einen sicheren Umgang mit Collections haben muss, aber diese einzeilige Ausgeburt der Hölle beweist leider auch, dass er nicht weiß, dass man im Idealfall gegen Schnittstellen programmiert, und dass er es wohl gern übertreibt. Was auch immer in diesem “Ding” gespeichert wird, es klingt jedenfalls nicht gesund.

Diese Zeile bekommt Sonderpunkte, weil ich darüber erst einen Augenblick nachdenken musste. Mal davon abgesehen, dass der Praktikant sich hier weder an die Namenskonvention für Boolean-Variablen hält, noch verstanden hat, dass eine Boolean-Variable bereits die Antwort auf die Frage ist, bestaunte ich die kreative logische Verknüpfung. Während ich mich ungläubig fragte, ob der Compiler einen “umgedrehten Ungleich-Operator” wirklich durchgehen lässt, fiel mir dann doch auf, dass das eigentlich eine Zuweisung ist, wobei dem zugewiesenen Wert (false) ein NOT vorangestellt wird (also true). Dieser “Vergleich” ergibt immer true, der IF-Block wird immer ausgeführt. Dieses Codekonstrukt ist absoluter Käse. Vielleicht wollte uns der Praktikant aber auch nur ein wenig erheitern.

Das ist der Gewinner in der Kategorie “Kreativster Schundcode”. Drei Dinge sind absolut bemerkenswert: Zunächst testet man immer mit dem Gleichheitsoperator (==) auf null, definitiv nicht mit equals. Außerdem testet man normalerweise deshalb auf null, weil man eine NullPointerException vermeiden möchte, während der Praktikant hier sogar noch selbst eine werfen will. Und überhaupt: Der Test auf null mit equals kann niemals funktionieren, denn wenn someObject tatsächlich null sein sollte, wird mit equals bereits implizit eine NullPointerException geworfen, wo versucht wird, explizit eine zu werfen. Für das Fazit lasse ich den von mir sehr geschätzten, leider kürzlich verstorbenen Harold Ramis als Dr. Egon Spengler zu Wort kommen: “Kurz, aber völlig sinnlos.”

Und dann war da noch dieser eine unwahrscheinliche “interne” Fehler der Eclipse IDE, den ich wohl versehentlich verursacht habe, als ich während eines Debugging-Durchlaufs versuchte das Workbench-Fenster horizontal zu verkleinern. Die Fehlermeldung, die schon beinahe als Realsatire durchgehen könnte, lasse ich im Folgenden einfach mal für sich selbst sprechen:

internalerror eclipse

Retro

Aus Neu mach Alt

0

Fröhliches Halloween – oder schreckliches, oder wie auch immer man bei diesem Ereignis zu sagen pflegt. Nein, leider habe ich für diese Gelegenheit keinen gruseligen Artikel vorbereitet, der zu diesem besonderen Datum passen würde. Das wäre sowieso irgendwie geheuchelt, da ich Halloween zumindest dieses Jahr nicht feiere, weder auf einer der vielen Halloween-Partys, noch würde ich als laufendes Bettlaken verkleidet die Nachbarschaft auf der Suche nach Süßigkeiten unsicher machen.

raiderAber wo ich jetzt schon so geschickt die thematische Brücke zu den Süßigkeiten geschlagen habe, will ich eine erfreuliche, wenn auch nicht allzu spektakuläre Entdeckung bekanntgeben, die mir seinerzeit wirklich den Tag “versüßt” hat. Als jemand, der die späten 80er und die frühen 90er Jahre immer in Ehren halten wird, konnte ich mein Glück kaum fassen als ich vor etwa zwei Wochen in den nächsten Discounter stolperte und dort eine ganze Box mit den berühmten “Raider”-Schokoriegeln vorfand.

Wer bis etwa 1991 nicht noch in den Windeln lag, der erinnert sich womöglich, dass Twix hierzulande unter dem Namen Raider vermarktet, und die Umbenennung im deutschen Fernsehen mit dem markigen Spruch “Raider heißt jetzt Twix, sonst ändert sich nix” bekannt gemacht wurde, der längst Einzug in die Popkultur gehalten hat, und seitdem nicht mehr allein auf Karamell-Keks-Schokoriegel angewendet wird, sondern immer dann, wenn ein Produkt seinen Namen, aber nicht den Inhalt ändert. Auch in einem meiner alten Artikel über mein Jahr 1991 erwähne ich diesen Spruch.

Selbstverständlich ist mir bewusst, dass das nicht das erste oder einzige Mal, und sicher auch nicht das letzte Mal war, dass man Twix kurzzeitig wieder zurück in Raider umbenannte um ein paar Nostalgiker aus der Reserve zu locken, aber es ist jedenfalls das erste Mal, dass ich das Vergnügen hatte. Immerhin hat es funktioniert, ich hab mir die Dinger gekauft. Und es schmeckt auch nicht anders als sonst. Die Retro-Riegel sind übrigens limitiert und die Aktion geht nur vom Zeitraum Oktober bis November 2013. Da ich die Renaissance des neuen YPS-Hefts für Erwachsene damals leider verpasst habe (bzw. keinen Händler in der Gegend gefunden habe, der die Hefte bestellt hat), kann ich froh sein, dass ich zumindest noch auf diesem Weg einen kurzen Rückblick auf meine Kindheit bekommen konnte.

So, genug über Schokoriegel gefaselt. Ich werde Halloween dieses Jahr mit einem Bier und einem Horrorfilm ausklingen lassen, damit ich mir nicht selbst vorlügen muss, mir überhaupt nichts aus heidnischen Bräuchen zu machen. Außerdem finde ich alles gut, was die Kirche ärgert.

Webfundstück

Mad Martin als Versandhändler

0

Zum Aufwärmen nach meiner Pause beginne ich mit einem weiteren Artikel für die begeisterten Thriller- und Shocker-Spieler, also die Fans der Atari-ST-Spiele von Martin Hintzen und Jürgen Verwohlt. Die angesprochene Zielgruppe wird die etwas verdutzt dreinblickende Fratze des Mad Martin aus “Shocker” und “Shocker 2″ sicherlich kennen. Als ich letztes Jahr das Privileg hatte, mit dem Entwickler Martin Hintzen ein telefonisches Interview über seine Spieleproduktionen zu führen, da verneinte er die Frage, ob es irgendeine äußerliche Ähnlichkeit zwischen ihm und Mad Martin gäbe. Leider versäumte ich es, genauer nachzuhaken, wie es zu der eigenartigen grafischen Kreation kam.

Krank dahinsiechend und zu allem Übel ganz ohne Internetzugang, völlig abgeschnitten von der Zivilisation, ließ ich mich kürzlich dazu hinreißen, in einigen uralten Jahrgängen vergilbter Computerzeitschriften zu blättern, als mir etwas höchst Interessantes ins Auge stach: In einigen Ausgaben der Zeitschrift “Computer Kontakt” lachte mich das charakteristische Gesicht von Mad Martin an – genauer gesagt in der Anzeige eines Atari-Softwareversandhandels aus Bretten, der heute bestimmt nicht mehr existiert.

diaboloversand2

Der Laden nannte sich “Diabolo-Versand” und war laut Anzeigentext offenbar der Versand mit den teuflischen Preisen. Witzigerweise liegt Bretten ja quasi hier bei mir um die Ecke. Für einen Augenblick dachte ich, dass sich da wohl jemand am Design des Mad Martin ausgetobt, ihm eine Perücke, einen Anzug, und einen festen Job im Versandhandel verpasst hatte, damit er sein Geld mit ehrlicher Arbeit verdienen konnte, und nicht mehr mit skrupelloser Weltraumtyrannei. Allerdings folgte sofort die Einsicht, dass das eher unwahrscheinlich war: Die besagten Anzeigen waren im Jahr 1987 erschienen, also bereits fünf Jahre vor der Veröffentlichung von Shocker.

diaboloversand

Wer ist also dieser Mad Martin und woher kommt er? Vielleicht werden wir es nie erfahren. Das Herumstöbern in so richtig alten Computerzeitschriften ist übrigens total interessant. Da werden aus unserer heutigen Sicht völlig veraltete Geräte und Schnee von vorgestern als der große technologische Durchbruch präsentiert, was bei mir immer eine Mischung aus Nostalgie und unfreiwilliger Komik erzeugt. Nett fand ich auch, als ich entdeckte, dass in deutscher Software Mitte der 80er Jahre der “Cancel”-Button nicht mit “Abbrechen”, sondern oft mit “IRRTUM” beschriftet war.

In der nächsten Folge dieser investigativen Dokumentarreihe sehen Sie: Mad Martin als Bäcker.

nach oben