Test der Google API

Schon seit längerem bietet Google eine API für seine Google Web Services an. Ich habe auch früher schon einmal ein kleines Programm geschrieben, dass die APIs nutzt, um Suchen durchzuführen. Heute morgen war ich auf der Suche nach einem Tool, das den PageRank berechnet. Leider war die Suche einigermassen erfolglos, da nur die Google Toolbar den PageRank berechnen kann oder darf. Ich habe die Bestimmungen noch nicht genau durchgelesen.

Da ich für meinen Java NNTP Newsreader JNews auch eine Google-Suche nach Message IDs einbauen will, teste ich nun die Google APIs. Dazu hab ich erstmal wieder ein kleines Programm erstellt, dass eine Suche durchführt, ggfs. eine Rechtschreibkorrektur vorschlägt und die Ergebnisse in einer einfachen JTextArea präsentiert. Ich werde in den nächsten Tagen noch eine Tabellenansicht der Ergebnisse hinzufügen und vielleicht eine PageRank-Kalkulation.

Java: Access Modifiers

In diesem Artikel möchte ich mich näher mit den Access Modifiers der Programmiersprache Java befassen. Bei meinen Vorbereitungen sind mir einige Fragen in die Finger gefallen, die für mich sehr schwierig zu beantworten waren. Ich möchte also versuchen, die Modifier einfach und leicht merkbar zu erklären.

Es gibt 4 verschiedene Modifiers, die den Zugriff auf Member-Variablen und -Methoden regeln:

private
default
protected
public

Die nächsten Abschnitte werden diese 4 verschiedenen Typen genauer betrachten und die Zugriffsrechte erklären.

private

Der nächste, etwas restriktivere Modifier ist private. Klassen des Top-Levels (also keine Inneren Klassen) können nicht als private deklariert werden. Eine Variable/Methode, die als private deklariert wurde, darf nur von einer Instanz der deklarierenden Klasse verwendet werden.

default

default ist kein echter Zugriffsmodifikator, es ist der Name von Klassen/Methoden/Variablen, für die kein Access Modifier angegeben ist. Die default-Eigenschaften einer Klasse sind für alle Klassen im gleichen Package verfügbar.

protected

Der Name protected bedeutet nicht, dass der Zugriff auf diese Eigenschaften sehr stark eingeschränkt ist. Die ist wohl das häufigste Missverständnis bei der Verwendung von protected. Eigenschaften, die als protected deklariert sind, sind sogar noch zugänglicher als default-Eigenschaften. Nur Variablen und Methoden können als protected deklariert werden. Eine Eigenschaft, die als protected deklariert wurde, ist für alle Klassen im gleichen Package zugänglich – genau wie default-Eigenschaften. Eine protected-Eigenschaft ist aber zusätzlich für alle Subklassen verfügbar, sogar wenn die Subklassen in einem anderen Package liegen.

public

Der offenste Access Modifier ist public. Eine Klasse/Variable/Methode, die public deklariert ist, darf in jedem Java-Programm ohne Einschränkungen benutzt werden. Ein Applet ist als public deklariert und darf somit von einem Browser instanziiert werden. Eine Applikation deklariert ihre main-Methode als public , damit diese von dem Java Runtime Environment (kurz: JRE) aufgerufen werden kann.

Links zur Vorbereitung auf JCP

Nachdem ich nun einige schöne Seiten im Internet gefunden habe, die neben Tutorials auch noch die sog. Mock Exams, also Probeprüfungen, beinhalten, ist es wohl an der Zeit, meine Links weiterzugeben:

Die Java Ranch bietet auch noch einige Foren, unter anderem auch einen Raum, um seine Prüfungsergebnisse (in Prozenz) bekanntzugeben. Ich weiß nicht genau, wofür das gut sein soll, aber dort sind auch noch gute Informationen zu finden…

Preis für JCP

Folgende Information habe ich den Seiten unter http://de.sun.com/ entnommen:

Der Preis der Prüfung CX-310-035 zum Sun-zertifizierten Java Programmierer für die Java 2 Plattform 1.4 beträgt zur Zeit 162,40EUR. Nach der offiziellen Seite von Prometric kostet das Examen 140EUR, allerdings ohne Prüfungsgebühren und andere Kosten.

Einige Testinstitute im Norden Deutschlands sind die folgenden:

GLOBAL KNOWLEDGE
HAMBURG 22763
FRIEDENSALLEE 271, 2 OG

SKILL NETWORKS GMBH
HAMBURG 22525
UWESTRASSE 12

TRIA IT-TRAINING RKK GCS GMBH
HAMBURG 22083
HAMBURGER STRASSE 181

NEW HORIZONS HAMBURG GMBH
HAMBURG 22041
WANDSBEKER KOENIGSSTR. 19-21

PEACOCK AG
HAMBURG – BAHRENFELD 22761
CAMPUS EDUCATION CENTER
ALBERT-EINSTEIN-RING 13

Diese Angaben sind natürlich ohne irgendwelche Rechtsansprüche zu verstehen. Wer ein Testcenter sucht, der sollte sich auf 2test.com registrieren und die Liste selbst durchsehen.

Vorbereitungen zum JCP Exam, Teil 2

Und schon wieder ist ein Buch angekommen: A Programmer’s Guide to Java Certification von Khalid A. Mughal und Rolf W. Rasmussen.

Es kann bei Amazon bestellt werden. Das Buch ist etwas älter, der Inhalt scheint aber ordentlich durchdacht und zusammengestellt. Nach jedem Kapitel folgen einige Fragen und eine Programmieraufgabe. Sehr löblich.

Java: Bitweises Schieben

Durch das Buch Complete Java 2 Certification Study Guide (siehe hier) aufgerüttelt, habe ich beschlossen, eine kleine Artikelserie über die Eigenheiten der Programmiersprache zu schreiben. Dies ist also der erste Artikel, der die manchmal eigenwillige Handhabung von Schiebe-Operationen verdeutlichen soll.

Die Shift-Operatoren », « sowie »> sollten in der Programmiersprache Java nicht unbeachtet und vor allem unbedarft eingesetzt werden. Die Operatoren >> und << sind aus der Sprache C/C++ direkt übernommen worden, der dritte Operator unsigned right shift >>> ist neu dazugekommen.

Bitweises Schieben ist vor allem in Echtzeit-Anwendungen und Steuerungssystemen weit verbreitet, meist bei Operationen auf I/O-Ports. Es kann auch verwendet werden, um schnelle Multiplikationen oder Divisionen mit dem Faktor 2 durchzuführen. In Java kann das bitweise Schieben durch die plattformunabhängige Representation der Zahlenwerte mit ruhigem Gewissen durchgeführt werden – wenn man sich der möglichen Fehlerquellen bewußt ist.

Grundlagen des Schiebens

Schieben ist eine sehr einfache Operation. Es wird das Bitmuster (die binäre Darstellung) einer Zahl genommen und nach rechts oder links verschoben. Der unsigned shift-Operator >>> führt aber oft zu Verwirrung.

Die Operatoren können nur auf Argumente aus integralen Typen angewendet werden, genau genommen sollten sie nur auf Argument der Typen int oder long angewendet werden. Diese Einschränkung geht auf die arithmetische Umwandlung von Operanden in Ausdrücken zurück (s.u.).

Als erster Hinweis soll folgendes Beispiel dienen:

Die Zahl 192 wird nach rechts geschoben. Dadurch rutschen ein oder mehrere Bits von links in die Darstellung hinein.

           00000000 00000000 00000000 11000000

           ?0000000 00000000 00000000 01100000

Was passiert mit den Bits, die nach rechts raus geschoben wurden? Welchen Wert nimmt das oberste Bit nun an?

Die erste Frage ist schnell beantwortet: Sie werden verworfen.

Die zweite Frage bringt eine Unterscheidung der Zahlen nach Vorzeichen mit sich. Bei positiven Zahlen oder dem Schieben ohne Vorzeichen mit »> wandern 0s (Nullen) in die Darstellung, bei negativen Zahl 1s (durch die 2-Komplement-Darstellung der binären Zahlen ist das oberste Bit bei negativen Zahl eine 1). D.h. es wird der Wert des obersten Bits (des most significant bit (MSB)) in die Darstellung geschoben.
Einfache Multiplikationen mit dem Faktor 2 können also durch ein einfaches Links-Schieben der Zahl erreicht werden. Allerding nur bis die ersten Bits dieser Zahl am linken Ende der Darstellung verworfen werden. Genau genommen sogar nur bis 1 Bit vor diese Position, da ansonsten das Vorzeichen überschrieben wird.

Wenn man also durch das Links-Schieben eine Zahl verdoppeln kann, sollte man annehmen, dass ein Rechts-Schieben die Zahl halbiert. Wenn eine 0 als MSB steht, ist diese Annahme auch richtig. Wird allerdings eine negative Zahl mit einer 1 als MSB nach links geschoben, stimmt diese Annahme nicht mehr. Wird eine negative Zahl nach rechts geschoben, so werden (nach ihrem MSB) weitere 1s in die Darstellung geschoben. So ist das arithmetische Rechts-Schieben definiert.

Kürzung des rechten Operanden

Das rechte Argument der Shift-Operatoren wird als Anzahl von Bits verstanden, um die der Wert verschoben werden soll. Um das Schieben ordentlich auszuführen, sollte dieser Wert kleiner sein als die Länge des zu schiebenden Wertes, d.h. beim Typ int sollte der rechte Wert kleiner als 32, bei long kleiner als 64 sein.

Größere Werte werden aber nicht abgelehnt, sie werden gekürzt. Der neue Wert wird durch eine Modulo-Operation durch die Länge des Bitmusters berechnet. Wird also ein int um 33 Bits verschoben (das Ergebnis wäre 0), berechnet sich die tatsächlich Anzahl von Stellen nach 33 % 32. Es wird also tatsächlich nur um 1 Bit verschoben und nicht um 33 Bits.

Arithmetische Umwandlung von Operanden

Bevor überhaupt geschoben wird, werden die Operanden umgewandelt, so dass sie zumindest vom Typ int sind. Dadurch ergeben sich Konsequenzen für den unsigned right shift-Operator für Werte kleiner als int.

Das folgende Beispiel zeigt die Berechnung für die Operation

-64 >>> 4
11000000 (Original)
11111111 11111111 11111111 11000000 (umgewandelt)
00001111 11111111 11111111 11111100 (geschoben)
11111100 (als byte)
00001100 (erwartet)

WordPress Mosquito (bug tracker)

Es gibt nun auch einen Bugtracker für WordPress und hier ist er zu finden. Die fehlende l10n wurde schon von Ihad gemeldet.

Vorbereitungen zum JCP Exam

Heute ist das erste Buch für meine Vorbereitungen zum Java Certified Programmer angekommen:
Complete JAVA2 Certification Study Guide

Das Buch kann bei Amazon bestellt werden. Beiliegend eine CD, auf der eine Test-Umgebung zur Vorbereitung auf die Examen, 4 Bonus-Prüfungen und das gesamte Buch als PDF liegen.

Update: Hier kommen noch ein paar gute Links zur Vorbereitung:

  • http://www.michael-thomas.com/tech/java/index.html
  • http://www.jchq.net/
  • http://www.examulator.com/jezam/question.jsp

Der große Crash

Ich musste schon wieder erkennen, dass Sicherungskopien einfach notwendig sind. Leider zu spät Lycos Tripod ist eine Festplatte abgeraucht und meine Internetseiten waren drauf. Gut, das Layout für www.kopis.de lag eh’ auf meinem Rechner, weil ich es erneuert habe. Aber die Datenbank ist futsch.

Auf diesem Verbund von Festplatten wurden Inhalte von Homepages gespeichert, deren Seiten- bzw.
Mitgliedernamen mit den Buchstaben C, D, I und Q beginnen. Unsere Techniker haben versucht, die Daten
von der schadhaften Festplatte zu retten und waren bisher nur teilweise erfolgreich. Die
Rettungsversuche halten an, der Hersteller wurde um Hilfe gebeten.

Gut, dies ist also – schon wieder – ein Neuanfang. Ich hoffe, diesmal ist es der Letzte. Das neue Design steht, die Grafiken und Links sind angepasst. Ich hoffe, es gefällt! Inspiriert durch SimpleBits habe ich mich hingesetzt und in durchaus langwieriger Arbeit die Buttons und den Hintergrund erstellt. Das HTML war anschliessend schnell zusammengesetzt, mit CSS kenne ich mich ja mittlerweile gut genug aus. überprüft habe ich das Layout mit Mozilla Firefox 0.9, Opera und Internet Explorer 6. Sollten jetzt noch Fehler auftauchen, meldet euch bitte, damit ich nacharbeiten kann.