Über dieses Blog...

»Wenn ich einmal alt bin, werde ich nur nörgeln — das wird ein Spaß!«

Tipps und Tricks, aber auch Kritik - breit gefächert von Technik bis hin zum Design, manchmal (oder immer öfter) auch Politik.

Momentaner Fokus: Android/Java, CalDAV

Feeds

Interessant gefunden? Mitlesen? Vollständige Beiträge per Feed.

RSS-Feed RSS 2, Atom

Zur Weiterverarbeitung oder zum Einbauen für Ihre Homepage: CSV, JavaScript

Durchsuchen

Tipp: AND & && OR | || XOR - ! NOT ( )

Archiv

Einträge im September 2010
MoDiMiDoFrSaSo
12345
6789101112
13141516171819
20212223242526
27282930
Beiträge im Archiv zeigen

Java und die Abwärtskompatibilität

Dass ältere Programme mit neueren Dateien Probleme haben, ist ja nichts neues; und jede Programmversion bringt häufig eigene Dateiformate mit. Bestes Beispiel sind Photoshop, MS Office und andere. Dann gibt's noch das Phänomen, dass neue Programme die Dateien ihrer Vorgänger nicht mehr lesen können — im Regelfall kennt man das von Word, das sogar bei gleicher Version auf unterschiedlichen Rechnern Probleme gibt.

Nun gibt es ja auch dieses tolle Java. Gibt sich als fortschrittlich, als ziemlich sauber, objektorientiert, und was weiß ich nicht alles. Plattformkompatibel soll es sein, und auch Abwärtskompatiblität hat es sich auf die Fahnen geschrieben. Sprich: Programmcode, den man ursprünglich mal mit 1.4 (oder ähnlich) entwickelt hat, sollte auch durch den aktuellen 1.6-er Compiler laufen. Nun ergibt sich allerdings folgendes Problem:

Test.java:14: cannot find symbol
symbol : constructor A()
location: class A
public B() {
^
1 error

Was ist hier passiert? Ein Blick auf den Code lässt uns rätseln, wenn wir nicht wissen, was hier klammheimlich (wurde sicher irgendwo angekündigt, aber wer liest das schon…) irgendwo in 1.6 eingeschmuggelt wurde:

public class Test {
    public static void main(String args[]) {
        B b = new B();
    }
}

class A {
    public A(int a) {
        System.out.println(„Hallo“);
    }
}

class B extends A {
    public B() {
        System.out.println(„Neu“);
    }
}

Der Javacompiler scheint also das explizite Weglassen (oder unabsichtliche Vergessen) von super(); automatisch nachholen zu wollen. Dumm nur, dass in diesem Fall kein Konstruktor A() existiert, sondern nur A(int). Da der Compiler keine Zahlen erfindet und andererseits (hier) keinen Default-Konstruktor anlegt, muss das logischerweise zu einem Fehler führen.

Und schon ist die Abwärtskompatibilität im Eimer. Aber was macht das schon — wer mit Java bastelt, muss sich sowieso an einiges gewöhnen. Vom Swing-Kaugummi rede ich jetzt gar nicht, das gibt sonst wieder böse Worte von den Java-Fans. Dass Java immer etwas anders implementiert ist als in anderen Sprachen, daran muss man sich auch gewöhnen. Bestes Beispiel hier: s.subString(1, 3). Das gibt nicht etwa drei Zeichen ab dem zweiten Zeichen des Strings beginnend (C++, VB, PHP, Perl, JavaScript (wobei substring() mit substr() von Java identisch ist), SQL) — sondern zwei Zeichen. Auch dass der Garbage Collector selbst nach dem Aufruf von System.gc() nur „möglicherweise“ läuft, kann man mit ein bisschen Mitdenken ausbügeln (Destruktor? Ach, nachher mal…) Dass array.length und string.length() unterschiedlich mit den Klammern dahinter umgehen, ist historisch bedingt. Dass Calendar.get(Calendar.DAY_OF_MONTH)) bei 1 beginnt und Calendar.get(Calendar.MONTH)) bei 0, muss man auch nur wissen, um es zu beachten. Und die Versionsnummern sind uns eh völlig wurscht.

Hatte ich schon mal erwähnt, dass ich Java mag? Nein? Ich weiß warum.

Protokolle und die Implementation in Wordpress

Nachdem ich hin und wieder mich über die nicht funktionierenden Trackbacks zu verschiedenen Blogs gewundert hatte, bin ich über einen sehr interessanten Thread gestolpert.

Trackbacks are nothing but HTTP requests with certain things in them. The standard simply states that if the HTTP request is sent that includes various items like title, excerpt… see http://www.sixapart.com/pronet/docs/trackback_spec.

Well Wordpress doesn't detect this, not sure why. Insteaad what they do is check if the trackback data contains „tb=1“ and if so they then process like a trackback. If not they process like a page request and send you the whole page instead of the trackback response.

Wer also Probleme hat, Trackbacks abzusetzen, sollte seine Implementation anpassen. Für Drupal steht in Thread eine Lösung, für andere Blogsysteme sollte eine Suche nach „excerpt“ als Stichwort helfen — dann hat man die entsprechende Datei in der Regel ebenfalls gefunden.

Ich weiß schon, warum ich WordPress nicht mag :) Von der deutschen WordPress-Startseite ein kleines Zitat mit Hervorhebungen:

WordPress ist ein zeitgemässes Weblog-System zum Veröffentlichen persönlicher Beiträge — den Schwerpunkt bilden Ästhetik, Webstandards und Benutzerfreundlichkeit.

Und hiermit mal wieder der Tipp: Was alle haben, funktioniert meistens nicht so, wie's sollte. Das trifft auf Wordpress ebenso zu wie auf Windows, auf die CSU/CDU, auf die GEZ (Liste beliebig verlängerbar).

Ich pinge einfach mal einen Blogeintrag an, vielleicht kümmert sich ja jemand drum… Immerhin funktioniert's jetzt.

Alle Nachrichten finden Sie im Archiv.

Jetzt registrieren und mitmachen!