Software

ATARI

(Retro)² = ZX81 Emulator für Atari ST

2

Eine E-Mail von meinem Blogger-Kollegen Oli – ein gleichgesinnter Atari-ST-Fan und ebenfalls Programmierer – nehme ich heute zum Anlass, einen kleinen Softwarearchäologie-Report zu verfassen. Er sprach mich auf einen alten ZX81-Emulator an; ein Emulator für den Atari ST, den ich seit bestimmt 20 Jahren nicht mehr gesehen habe, und mit dem ich einige der interessantesten Erinnerungen aus meiner Kindheit verbinde. Den Artikel schreibe ich freilich aus der Sicht von jemandem, der das Programm als Kind verwendet hat, und nicht etwa von jemandem, der professionell damit umgehen kann.

zx81 1

ZX81 Emulator: Ein sehr kreatives Tastaturlayout

Ich erinnere mich noch sehr gut an dieses kleine aber großartige PD-Programm von Christoph Zwerschke, das zum ersten Mal im Oktober 1990 auf der Beilagediskette des TOS-Magazins veröffentlicht wurde. Ich war kaum sieben Jahre alt und hatte schon ganz grob begriffen, was ein Emulator ist. Dieser hier emulierte einen Sinclair ZX81 – ein kleiner Homecomputer aus England (von dem namensgebenden Erfinder Sir Clive Sinclair), der zum Zeitpunkt meiner Geburt bereits veraltet und Anfang der 90er praktisch museumsreif war. Wenn man den Emulator startet, bekommt man einen Begrüßungsbildschirm zu sehen, und dann nur noch ein Eingabefenster. Das war schon damals nicht unbedingt besonders einladend, wenn man grafische Benutzeroberflächen (wie TOS) gewohnt war, aber ich kannte zum Glück den GFA-BASIC-Interpreter, und der sah ähnlich spartanisch aus. Keine Ahnung, wie ich darauf gekommen bin (vielleicht habe ich ja wirklich die README-Datei gelesen), aber mit der Eingabe von LOAD “” offenbarte sich mir eine fantastische Welt primitiver BASIC-Spiele, und das war für mich in dem Alter das Beste an dem Emulator.

Mein Vater schüttelte den Kopf als er diese äußerst altbackene Klötzchengrafik sah, und er wunderte sich, wie ich damit soviel Spaß haben konnte, wo der ST doch so tolle hochauflösende Monochromspiele und knallbunte Farbspiele hatte. Möglicherweise war das der Moment, in dem ich endgültig erkannte, dass Spielspaß praktisch nichts mit Grafik zu tun hatte, und mit Sound schon gar nicht, denn den gab es sowieso nicht: Der ZX81-Emulator blieb immer stumm. Keine Frage, ich liebte mein Highway Patrol 2, mein Cadaver, und mein Double Dragon, und all die anderen tollen Spiele, die ich in meiner Diskettenbox hatte, aber der ZX81-Emulator löste mit seiner merkwürdigen Schwarz-Weiß-Zeichensatz-Grafik eine wirklich kaum zu beschreibende Faszination bei mir aus.

zx81 2

3D-Monster-Labyrinth: Vor dieser Kreatur habe ich mich gefürchtet

Eine ganze Menge Spiele lagen dem Emulator bei, alle in Form von (kaum lesbaren) BASIC-Quellcodes. Mit dem Befehl RUN wurde das geladene Programm gestartet. Das waren ganz unterschiedliche Spiele: Night Driver, eine schwierige Rennsimulation, oder Varianten von Hangman und Centipede gab es, außerdem mit Hamurabi ein zahlenlastiges Resourcen-Management-Spiel, das ich kaum verstand. In Olympiade musste man abwechselnd die Tasten 5 und 8 drücken, damit der eigene Läufer immer schneller wurde, und mit der Taste 0 konnte man dann abspringen (beim Weitsprung). Viele Stunden Spaß hatte ich mit Mazogs, dessen Omikron-Äquivalent Maziacs ich schon kannte – ein Labyrinth voller Riesenspinnen, in dem man eine Schatztruhe finden musste. Daneben gab es mit Star Trek ein aufwändiges Weltraumspiel mit Handlung, an dem ich mich immer wieder versucht habe, obwohl ich noch etwas zu jung war, um die Rätsel zu verstehen.

Es gab noch diverse Programme, die etwa Schaltpläne generierten, oder einen Biorhythmus berechneten. Das hat mich damals aber alles nicht so interessiert. Spannend war noch das Spiel Animals, eine Umsetzung von “20 Questions”. Ohne die Theorie hinter Binärbäumen zu kennen, hatte ich natürlich Schwierigkeiten mir vorzustellen, wie der Computer am Ende praktisch jedes Tier erraten kann. Das mit Abstand gruseligste Spiel war das 3D-Monster-Labyrinth. Der Spieler musste ein zufällig generiertes Labyrinth in der Ich-Perspektive durchlaufen, während am anderen Ende des Labyrinths ein Monster umherirrt, das seinerseits den Spieler sucht. Ich kann bis heute nicht sagen ob das Monster sich in Echtzeit bewegt, oder doch nur rundenbasiert, aber ihm versehentlich zu begegnen, hat mich immer wieder erschreckt. Es war auf jeden Fall ein tolles Beispiel für ein sehr simples Spiel mit Suchtfaktor, das im besten Fall zweckmäßige Grafik und absolut keinen Ton hatte. Also entweder war ich schon damals wirklich verloren, oder diese Spiele hatten einfach einen gewissen Reiz.

zx81 3

Star Trek: Klötzchenwelten mussten mit Hilfe des Ziffernblock erforscht werden

Kaum zu glauben, aber wahr: Christoph Zwerschke, der Entwickler des ZX81 Emulator, ist sogar noch mit einer eigenen Webseite im Internet vertreten (letzte Änderung allerdings im März 2001!), und er bietet dort die letzten Versionen seiner alten ST-Programme an, darunter natürlich auch dieser wunderbare Emulator. Extra für ein paar Screenshots habe ich daher den ST-Emulator angeworfen, um nach über 20 Jahren den ZX81-Emulator anzuwerfen, um dessen grobpixelige Spiele mal wieder anzuwerfen und digital abzulichten. Quasi eine kleine Emulatorception. Oder Retro im Quadrat. Und tatsächlich, ich konnte mich noch an so manches Bedienungsdetail erinnern. Und mit der HELP-Taste kann man sich ja im Notfall noch das Tastaturlayout einblenden lassen. Vielleicht spiele ich nochmal kurz eine Runde 3D-Monster-Labyrinth. Retroflash in 3 … 2 … 1 …

Windows

Not so monthly rant: Die wertlose Windows-Dateisuche

4

Lange habe ich mich nicht mehr so sehr über etwas geärgert wie die Windows-Dateisuche. Aus einem bestimmten Ordner mit sehr vielen unterschiedlichen Dateien wollte ich anhand eines entsprechenden Namensmusters einige davon in einen anderen Ordner verschieben. Nichts leichter als das, dachte ich mir, denn die Windows-Suche unterstützt ja schließlich Wildcards (“*” und “?”), und auf den Kopf gefallen bin ich zum Glück auch nicht. Die erwartete Trefferliste lieferte mir die Suchfunktion in Nullkommanix. Mittels Ausschneiden und Einfügen waren mehrere hundert Dateien blitzschnell an den neuen Ort verschoben.

Durch Zufall fiel mir eine Datei ins Auge, die in dem neuen Ordner aber definitiv nichts verloren hatte. Hat die Windows-Suche sich da ein wenig vertan? Konnte ja eigentlich kaum sein. Vielleicht habe ich beim Markieren der Dateien irgendetwas verkehrt gemacht? Auch unwahrscheinlich. Um sicherzugehen, machte ich den Verschiebevorgang rückgängig und führte die Suche erneut aus. Wieder wollte ich die gefundenen Dateien verschieben. Und wieder waren Dateien dabei, die nicht auf das Namensmuster zutreffen konnten. Spinnt Windows oder versagt hier der Faktor Mensch? Ich beschloss also, den Test zu machen:

windowssuche

Was für ein unbrauchbarer Dreck ist das denn bitte? Die Windows-Dateisuchfunktion ist völlig wertlos! Sie hält sich nicht an das Pattern, das ich eingegeben habe, und spuckt neben den richtigen auch falsche Treffer aus. Die Klammern werden einfach ignoriert, so als hätte ich sie nur aus Spaß eingegeben. Meine Recherche im weltweiten Netz bestätigt meine Vermutung: Microsoft hält nichts von Konventionen, sondern bastelt lieber wieder irgendeinen eigenbrötlerischen Schrott zusammen, den man als professioneller Nutzer nicht vernünftig verwenden kann. Das “Escapen” der Klammern mit Backslashes oder Punkten bringt leider nichts, Windows scheint meine Eingabe nur als grobe Empfehlung zu betrachten. Was richtige Suchergebnisse sind, muss ich offenbar gänzlich dem Betriebssystem überlassen. Die Suchfunktion genügt meinen Ansprüchen hier leider absolut nicht. Bevor ich mir die Microsoft’sche Syntax zur Dateisuche anlerne, sofern eine solche überhaupt existiert, nehme ich lieber ein ordentliches Third Party Tool, mit dem man arbeiten kann.

Beinahe hätte ich meine Dateien unbewusst falsch sortiert. Na danke, Microsoft, ihr verdammten Trolle. Wer weiß wie oft ich darauf bislang schon hereingefallen bin ohne es zu merken. Wie schwer kann es sein, eine Suchfunktion mit Wildcards richtig zu implementieren. Ich verlange ja gar nicht, dass hier reguläre Ausdrücke ausgewertet werden, aber eine simple Suchfunktion, die keinen Mist baut, wäre mir WIRKLICH wichtig. Echt mal.

So habe ich nun in meiner Verzweiflung einige – wie sich herausstellte – ebenfalls ziemlich nutzlose Tools heruntergeladen, die meine Erwartungen nicht erfüllen können, darunter “Everything”, “Snowbird”, “Locate32″ und “UltraSearch”. Entweder ließ sich die Suche nur auf (langwierig) vorindizierte Festplatten anwenden (und ich wollte nicht drei Stunden auf mein Suchergebnis warten müssen), oder die Suche ließ sich überhaupt nicht auf Verzeichnisse, sondern im Fall von “Everything” nur auf ALLES anwenden, oder die Suche kannte keine Wildcards, was ich bei einem Dateisuch-Tool als übles Versäumnis betrachte. Nun habe ich schließlich den “FreeCommander” ausprobiert. Der hat alle gewünschten Dateien problemlos gefunden, mit exakt demselben Suchmuster, wie ich es zuvor dem Windows Explorer vorgesetzt hatte – und zwar im Gegensatz dazu fehlerfrei.

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.

Tools

Abschied von Opera

0

Mein erster Internetbrowser war der Internet Explorer 3 oder 4, zwischenzeitlich wechselte ich auch für eine Weile zum Netscape Navigator, aber den IE verteidigte ich viele Jahre gegen Kritiker, die ihn für unbrauchbar hielten. Bis er mir im Jahr 2003 ein Rootkit installierte. Jemand im IRC sendete mir einen Link zu einer JPG-Datei – ein Spaßbild – wie ich sie schon tausend Mal zuvor im Browser geöffnet hatte. Doch diesmal verbarg sich dahinter ein Script für einen geplanten Pufferüberlauf im Windows Media Player, das der IE nur zu bereitwillig ausführte, obwohl die Endung die falsche war. Seitdem weiß ich, der IE ist nicht einfach nur unbrauchbar, sondern gefährlich. Erst nach mehreren Tagen, als ich gerade eine Weile nicht am Rechner war, sah ich aus den Augenwinkeln wie sich auf dem Bildschirm irgendwelche Fenster öffneten, per Fernsteuerung Befehle ausgeführt wurden, merkwürdige Fehlermeldungen erschienen und verschwanden direkt wieder. Ich musste augenblicklich die Internetverbindung trennen, mein Betriebssystem neu aufsetzen. Nie wieder Internet Explorer.

In der Not bot mir der alternative Browser Opera die Möglichkeit, mich im Netz wieder halbwegs sicher zu fühlen. Umgewöhnt hatte ich mich innerhalb kürzester Zeit, schon bald fragte ich mich, wie ich es so lange ohne Opera aushalten konnte. Die Mausgesten waren sogar so praktisch, dass ich heute gar nicht mehr ohne sie arbeiten wollte. Opera war der Browser, der Tabbed Browsing salonfähig machte, und erst einige Jahre später wurde das in den Konkurrenten Firefox, IE, Safari usw. kopiert. Opera brachte seinen eigenen E-Mail-Client mit, später sogar seinen eigenen Torrent-Client. Der eingebaute Downloadmanager war fantastisch. In den regelmäßigen JavaScript-Performancemessungen war Opera lange Zeit der Spitzenreiter, und mit jeder weiteren Optimierung der Presto-Engine wurde der Browser wieder ein bisschen schneller. Die ganze Welt wechselte in den Folgejahren zu Firefox oder Chrome, und Opera kam nie auch nur über 3% Marktanteil hinaus. Er führte ein Nischendasein, obwohl er mehr verdient hatte.

operatabs

70 offene Tabs in Opera? Kein Problem

Ich blieb gerne bei Opera. Viele Male fand ich mich deshalb in sinnlosen Diskussionen über den besseren Browser wieder. An den Hochschulen und in Firmen ist Firefox längst vorinstalliert. Warum sollte noch jemand sowas wie Opera verwenden? Tja, warum eigentlich nicht, wenn er doch sehr gut funktioniert, und etwa dem Firefox in nichts nachsteht? Geringe Marktanteile sind kein Argument gegen einen Browser, eher noch eines dafür, jedenfalls musste ich mir nie Gedanken über Firefox-Trojaner machen. Friedliche Koexistenz scheint ohnehin ein fremdartiges Konzept zu sein.

Dass ich ein Tab-Messie bin, hat mir Opera nie krumm genommen. 30, 50, oder gar 70 Tabs gleichzeitig geöffnet, sogar gruppiert nach Kategorie, das alles war nie ein Problem. Hin und wieder ein kleiner Absturz, aber was macht das schon. Das passiert Firefox auch. Dass er mit dieser Masse an Tabs 3 GB Arbeitsspeicher frisst – geschenkt. Doch seit 2011 wurden die Probleme häufiger. Ich musste mit Slowdowns auf so manchen scriptüberfrachteten Webseiten kämpfen. Manchmal ruckelte alles unerträglich, manchmal reagierte er überhaupt nicht mehr. Manchmal registrierte er keine Mausklicks mehr, manchmal zeigte er mir einfach keine Bilder mehr an. Ständig musste ich ihn neustarten. Man hatte den Eindruck, Opera wurde langsam altersschwach. Vielleicht entwickelte sich das Netz aber auch einfach an Opera vorbei. Ich hielt meinem kränkelnden, tapferen Browser die Treue. Die schwierigen Webseiten konnte ich ja trotzdem im Firefox oder in Chrome laden.

2013 war kein gutes Jahr für ihn. Die opera-eigene, aufwändig entwickelte Presto-Engine wurde verworfen, der neue Opera-Browser sollte nur noch ein billiger Chrome-Klon ohne Funktionen werden. Diesen Weg würde ich nicht mitgehen, denn dann könnte ich ja gleich auf Chrome wechseln. So blieb ich bei der vorerst letzten “alten” Version 12.16. Jedenfalls bis ich einen wirklich ärgerlichen Bug entdeckte, als ich Startpage.com als neue Standardsuchmaschine einrichten wollte: Opera speichert die Einstellung einfach nicht, weil Startpage nicht auf seiner internen Suchmaschinen-Whitelist steht. Ein Downgrade auf Version 12.15 “löste” das Problem zunächst. Nun kam den Opera-Entwicklern kürzlich der Heartbleed-Bug in die Quere, so dass man sich entschied, ein finales Update 12.17 für die Fans der alten Version zu veröffentlichen. Diesem Update überließ ich die Entscheidung, ob ich bei Opera bleiben sollte. Voraussetzung war lediglich, dass ich als Standardsuchmaschine wieder einrichten durfte was ich wollte. Nach dem Update stellte sich leider heraus, dass der Bug nicht behoben worden war.

Danke, Opera, dafür dass du mir 11 Jahre lang ein Fenster zur Welt des Internet geöffnet hast, dass du mir darin soviel gezeigt hast, und dass du mir ein bedeutendes Maß für Sicherheit im Netz warst. Nach 11 Jahren ist es an der Zeit, das sinkende Schiff zu verlassen. Heute habe ich Opera zum ersten Mal deinstalliert, und als Nachfolger nach all der Zeit nun primär den Firefox gewählt. Bisher läuft er tatsächlich sparsamer. Interessanterweise hat das Löschen der Opera-Benutzerdaten auf der Festplatte (150.598 Dateien) stolze 3,3 GB Speicher freigegeben.

Firefox ist für mich leider erst benutzbar geworden, seit ich jede Menge Addons etwa für Mausgesten, eine geordnete Tab-Baumstruktur, Schnellstart-Customization, ein vernünftiges Session-Management, Entwicklertools und Werbeblocker installiert habe, aber das war zu erwarten. Glücklicherweise gibt es mehr als genug davon. Ich werde mich eine Weile umgewöhnen müssen, aber vielleicht vermisse ich meinen Opera schon bald kaum noch. Vielleicht werde ich eine Kerze für ihn anzünden.

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

nach oben