Oracle Certified Associate, Java SE 7 Programmer

14

ocajpKönnen Klassen in Java „protected“ oder sogar „private“ sein? Welchen Case springt ein Switch mit einem null-String an? Ist ein statischer Konstruktor ein Konstruktor mit „static“-Modifier? Werden Methoden oder Variablen dynamisch oder statisch gebunden? Können Interfaces von mehreren anderen Interfaces erben? Kompiliert eine Klasse mit der Methode „private static void main“ und ist diese startfähig? Wer solche Details nicht weiß, braucht sich über das Thema Zertifizierung noch keine Gedanken machen. Ich mache mir bereits seit Monaten Gedanken.

Seit Anfang der Woche bin ich offiziell ein von Oracle zertifizierter Java-Programmierer – endlich! Die hierzu nötige Prüfung habe ich mit 85% bestanden. Zum Bestehen brauchte man 63% der richtigen Antworten, dieser Wert variiert je nach Schwierigkeitsgrad des Aufgabenkatalogs. In meinem Fall handelte es sich um ziemlich schwere Aufgaben. Zum Vergleich: Nur wenige Jahre zuvor waren zum Bestehen stolze 77% nötig, die Aufgaben also wesentlich einfacher. Zweieinhalb Stunden hat man Zeit, sich beinahe 90 hirnverknotende Codebeispiele durchzulesen, im Kopf zu interpretieren und dann via Multiple-Choice die richtige Antwort anzuklicken – weniger als zwei Minuten pro Aufgabe. Ansatzpunkte gibt es natürlich keine. Ein paar kümmerliche Alibi-Wissensfragen zwischen den endlosen Zeilen voller Quellcode sollen wohl beruhigend wirken. Am Ende hat mir die Zeit gerade so gereicht.

Die fast 200 Euro teure Zertifizierung (Schulungsmaßnahmen nicht eingerechnet) zum sogenannten „Oracle Certified Associate, Java SE 7 Programmer“ (kurz OCAJP) ist die erste, die man als Java-Programmierer absolvieren kann, sie ist mittlerweile Voraussetzung für sämtliche weiteren. Jetzt habe ich die Möglichkeit, mich irgendwann sogar als professioneller Java-Programmierer (OCPJP) zertifizieren zu lassen, was ich definitiv plane, aber bis dahin wartet noch sehr viel mehr an Vorbereitung und Training auf mich. Das gedruckte Zertifikat sollte in den nächsten sieben Wochen bei mir eintreffen, bis dahin kann ich mich an der PDF-Version ergötzen.

Wer sich mit dem Thema noch nie befasst hat, aber neugierig auf die Prüfung ist, sollte gewarnt sein. Die Fragen sind wirklich knallhart. Es wird nie nach den allgemeinen Dingen gefragt, die jeder Java-Programmierer beantworten kann. Es werden gezielt die Schwachstellen abgeklopft, all jene Aspekte und Grenzfälle abgeprüft, die viele eben nicht kennen. Die Prüfung spekuliert darauf, dass viele etwa den einfachen Unterschied zwischen String s = „Hallo“; und String s = new String(„Hallo“); nicht kennen, und fragt dann gerne ganz genau nach, wieviele Objekte der Garbage Collector der JVM aufräumen darf.

Ich bin voller Stolz, diese Hürde erfolgreich genommen zu haben. Der OCAJP war der nächste große Schritt, mich im Bereich Softwareentwicklung bzw. Java-Programmierung zu beweisen und zu etablieren. So ein Zertifikat kann eines Tages den Unterschied zwischen Arbeitslosengeld und Gehalt ausmachen. Oder zwischen Gehalt und Gehalt++. Das muss sich alles noch herausstellen. Bis dahin werde ich weiterhin Erfahrung sammeln und Bücher wälzen.

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.

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.

70 offene Tabs in Opera? Kein Problem

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.

Undercover in der Let’s-Play-Szene

0

Eigentlich erlaubt meine momentane Situation es mir kaum, öffentlich über meinen streng geheimen und extrem riskanten Auftrag zu sprechen, denn meine Tarnung könnte zu leicht auffliegen. Mein persönlicher Kampf gegen Let’s Plays nimmt nun eine völlig neue Dimension an. Da es mir durch meine feindseligen Trollbeiträge und Hasspredigten bisher noch nicht in nennenswertem Umfang gelungen ist, diesen korrupten Sumpf, der sich Let’s-Play-Szene schimpft, frühzeitig trockenzulegen, so dass diese widerlichen Subjekte, die auf YouTube zu unverdientem und unbegreiflich großem Ruhm gekommen sind, weiterhin ungestraft schlechte Gameplay-Videos mit langweiligem Kommentar posten können.

Meine neue Taktik ist es nun, den Feind von innen heraus zu bekämpfen, die gesamte womöglich gewaltbereite Let’s-Play-Szene heimlich zu infiltrieren und brisante Informationen über etwaige Gruppierungen und geplante Aktionen zu stehlen. „Halte deine Freunde nahe bei dir, aber deine Feinde noch näher„, so lautet ein eigentlich nur peripher passendes, aber mir im Moment als einziges einfallendes Sprichwort, dessen Sinnhaftigkeit ich nicht zu hinterfragen wage. Meine hochinvestigativen Erfahrungsberichte, die ich unter Einsatz meines eigenen wertvollen Lebens gewinnen muss, werde ich hier mit den Lesern dieses hochwertigen Weltverschwörungs-Blogs teilen.

Mit Hilfe des befreundeten Let’s Players Karurosu Sensei ließ ich mich kürzlich als V-Mann unter dem Pseudonym „Propagandalf“ in das Milieu einschleusen. So sind seit neuestem ein unbekannter Let’s Player und ein unbekannter Blogger gemeinsam mit einigen als „Honeypots“ bezeichneten Let’s-Play-Attrappen auf YouTube zu finden, in deren Verlauf sie möglichst unverdächtig das Gameplay eines beliebigen Zombie-Survival-Shooters für den PC beschreiben. Der bisher nur im Early Access verfügbare Minecraft-/DayZ-Hybrid „7 Days to Die“ erschien uns als geeignete Gelegenheit, uns in der Szene einen Namen zu machen, damit die großen Fische möglichst bald anbeißen. Aber unsere Tarnung galt es zunächst mit äußerst unkonventionellen Methoden zu perfektionieren.

Um nicht bei den falschen Leuten negativ aufzufallen, bauten wir absichtlich einige offensichtliche Fehler in die Videos ein, denn als blutige Let’s-Play-Anfänger, die wir ja vorgeben zu sein, müssen wir unsere Rolle natürlich absolut glaubwürdig spielen. So ist dann z.B. meine Stimme in den Videos vom Lautstärkepegel her etwas übersteuert, außerdem ist der Gamma-Wert falsch eingestellt, so dass man die dunklen Stellen im Video nicht mehr richtig erkennen kann, die unerträglich niedrige Bitrate macht den Rest. Noch dazu übten wir monatelang unseren Text, probten belangloses und scheinbar spontanes Geschwätz, schlechte Wortwitze und peinliches Gelächter in den dümmsten Situationen. Es ist verblüffend, wie realistisch das Ergebnis schließlich geworden ist. Ich erkannte mich selbst nicht mehr.

Exemplarisch hänge ich eines dieser für den Auftrag mühsam produzierten „Let’s Play Together Videos“ an, die alle im Channel des Kollegen gepostet werden. Im Idealfall verbreitet sich dadurch schnell die Nachricht auf den Straßen, dass zwei neue Let’s Player in der Stadt sind, die für Angebote aller Art stets offen sind. Vielleicht schnappt schon bald die Mausefalle zu. Hier auch einen Dank an Karurosu Sensei für die Unterstützung und den Aufwand bei der Produktion der Videos.

[youtube width=“620″ height=“400″]https://www.youtube.com/watch?v=SDbUuc0-_vg[/youtube]

Die bisher veröffentlichten Let’s Plays in dieser Reihe:

7 Days To Die – Erstes Spiel mit der Alpha 7.9 #01 – Let’s play together 7DTD
7 Days To Die – Ab in die Eiswelt…öh? Alpha 7.9 #02 – Let’s play together 7DTD
7 Days To Die – Barren. Eisenbarren! #03 – Let’s play together 7DTD
7 Days To Die – Home. Sweet Home! #04 – Let’s play together 7DTD

Es ist mal wieder Album-Zeit

0

deloreandynamiteMorgens gehört, abends gekauft: Auf dem Weg ins Büro wurde gestern auf Radio Sunshine Live (auf dem es genau wie bei allen anderen Radiosendern scheinbar nur genau zehn Titel gibt, die den ganzen Tag hoch- und runtergespielt werden, bis man sie irgendwann nicht mehr hören kann) überraschenderweise ein Song namens „Delorean Dynamite“ angekündigt, und der Titel ließ mich blitzartig aufhorchen. Was dann folgte, erfüllte meine äußerst großen Erwartungen, und der musikalische Geist der 80er erfüllte mein Auto für wenige Sekunden, zumindest nach klassisch-televisionärer Vorstellung der 80er.

Der norwegische Elektrokünstler Todd Terje, der mir bislang nicht bekannt war, hat erst vor wenigen Tagen sein Debütalbum veröffentlicht. Ein Album, das sich teilweise an den fantastischen Musikproduktionen von Giorgio Moroder und Jan Hammer orientiert. Es könnte sogar Spuren von Harold Faltermeyer und Jean Michel Jarre enthalten, da bin ich nicht ganz sicher. Der Name des eingangs erwähnten Songs ist Programm: Es ist eine Musik, bei der man sich am liebsten in seinen DeLorean, Lamborghini Countach oder wahlweise Ferrari Testarossa setzen, den Sunset Boulevard entlangfahren, und mit dem klobigen Autotelefon Axel Foley, Sonny Crockett oder Tony Montana anrufen möchte. Jedenfalls stelle ich mir das irgendwie so vor.

Auf dem Album mit dem pragmatischen Titel „It’s Album Time“ handelt es sich (bis auf „Johnny and Mary“) um reine Instrumentalmusik, bei einigen Titeln vielleicht mit dezentem italo-amerikanischem Einschlag, würde ich behaupten. Dafür ein konkretes Musikgenre zu nennen, fällt mir als Laie wirklich schwer. Elektro, Disco, Pop, wahrscheinlich liegt es irgendwo dazwischen. Zu meinen Favoriten gehören definitiv das coole, poppige „Delorean Dynamite“, außerdem „Inspector Norse“, „Oh Joy“ und „Strandbar“. Aber die anderen Songs mischen die Auswahl gehörig auf, und gehören auf keinen Fall minder dazu.

Die Illusion wird meistens dann durchbrochen, wenn ein Arpeggiator einsetzt bzw. allgemein Effekte, die man eher mit zeitgenössischer Elektromusik, etwa beim Beat, verbindet. Aber im positiven Sinne, denn es ist wirklich stimmig, dass die Gegenwart in Terjes Musik immer wieder kurz aufblitzt. Diesen Musiker werde ich wohl in Zukunft im Auge behalten. Kaum zu glauben, dass ich ab und an im Radio noch Musik zu hören bekomme, die ich sofort kaufen würde. Ich bin von mir selbst überrascht. Bitte mehr davon.

nach oben