Erweiterung mit HSQLDB

Vor einiger Zeit (und einigen Neuinstallationen) erwähnte ich schon einmal mein Freizeitprojekt: den Java NNTP-Newsreader JNews. An diesem Newsreader arbeite ich als Usenet-Nutzer in meiner freien Zeit. In den letzten Tagen habe ich mich daran versucht, dem Projekt Datenbankunterstützung angedeihen zu lassen.

Die Datenbank hsqldb ist eine Datenbank in Java, die im Server- und Stand Alone-Modus gestartet werden kann. Der Stand Alone-Modus integriert die Datenbank in die Applikation, so dass der Benutzer sich nicht die MĂĽhe machen muss, z.B. einen riesigen MySQL-Server auf seinem Desktop aufzusetzen. Da JNews noch in einem relativ frĂĽhen Entwicklungsstadium ist, kann ich die notwendigen Ă„nderungen ohne Schwierigkeiten implementieren.

Zusätzlich bin ich von einem semi-objektorientierten Ansatz der GUI-Programmierung zum Model/View/Controller oder besser: View/Controller-Ansatz umgeschwenkt. Eine Singleton-Klasse names CoreController kontrolliert dabei die Datensätze und die Funktionalität auf der unteren Ebene, während ein Swing-GUI (aufgepeppt mit SkinLF) nur die gesammelten Daten darstellt.

Die Performanz der Datenbank-Transaktionen beschert mir allerdings noch einiges Kopfzerbrechen, denn es dauert viel zu lange, um ca. 30 000 Gruppen einzufĂĽgen. Die Auslagerung in einen Thread behebt dieses Problem nur zum Teil, allerdings kann die AusfĂĽhrungsgeschwindigkeit nicht erheblich verbessert werden. Die Gruppen mĂĽssen schliesslich ĂĽber das Internet vom NNTP-Server heruntergeladen werden. Da der Newsreader diese Daten aber nicht bei jedem Start lesen muss, sondern nur auf besonderen Befehl des Benutzers, ist die Wartezeit vertretbar.

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.

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.

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…

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.

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.

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)

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.