Hibiscus 2.6.11 und Jameica 2.6.2

Ich habe soeben die neuen Versionen von Jameica (2.6.2) und Hibiscus (2.6.11) veröffentlicht. Im Wiki findet ihr alle Änderungen im Detail. In Hibiscus ist es im Wesentlichen der Support für SEPA Purpose-Codes, die bessere Integration alternativer Backends (wie etwa Scripting) und viele kleinere Bugfixes. Jameica unterstützt jetzt Monitor mit hohen Auflösungen (HighDPI) besser und enthält die im Laufe der letzten 11 Monate gesammelten kleineren Bugfixes und Erweiterungen.

Die neue Hibiscus-Version kann wie gehabt per Online-Update installiert werden. Es ist immer noch kompatibel zu Jameica 2.6.0+. Ein Update auf Jameica 2.6.2 ist also nicht erforderlich, wenn ihr keine der im Wiki genannten Änderungen benötigt.

PS: Eine ganz wichtige Sache noch: Ich habe den alten IZV-Zahlungsverkehr abgeklemmt und in einen neuen Menu-Punkt "Archiv" (oben im Menu unter "Hibiscus") verschoben. Man kann die alten Überweisungen und Lastschriften mit Kontonummer und BLZ dort zwar zu Archiv-Zwecken noch einsehen - aber keine neuen Aufträge mehr erfassen. Verwendet hierfür bitte nur noch die neuen SEPA-Aufträge.

Frohe Weihnachten ;)

Java: URL#equals() ist gefährlich

java.net.URL implementiert equals(Object). Also was liegt näher, als URLs damit zu vergleichen? Gefährlich.
  public static void main(String[] args) throws Exception
  {
    URL u1 = new URL("http://www.willuhn.de");
    URL u2 = new URL("http://www.jameica.org");
    
    System.out.println(u1.equals(u2));
  }
Ausgabe:
true
Die beiden URLs verweisen zwar per DNS auf die selbe IP. Per VirtualHost-Konfiguration werden jedoch unterschiedliche Webseiten angezeigt. Weder ist die URL identisch, noch der Inhalt der Webseite. Dennoch liefert der Vergleich "true". Wegen gleichem Protokoll, Port und Pfad sowie gleicher IP. Im Javadoc findet sich hierzu auch:
Two URL objects are equal if they have the same protocol, reference equivalent hosts, have the same port number on the host, and the same file and fragment of the file.
Two hosts are considered equivalent if both host names can be resolved into the same IP addresses [...]
Note: The defined behavior for equals is known to be inconsistent with virtual hosting in HTTP.
Im letzten Satz findet sich auch ein entsprechender Hinweis, den man schnell überlesen kann.

Hinzu kommt noch, dass java.net.URLStreamHandler (übernimmt den eigentlichen Vergleich in der "equals"-Methode) für das DNS-Resolve InetAddress.getByName(host) verwendet. Welches so implementiert ist:
return InetAddress.getAllByName(host)[0];
Da wird also pauschal die erste gefundene IP-Adresse zu dem Host geliefert. Hat man nun aber eine Lastverteilung per DNS Round Robin für die Domain eingerichtet, dann ist der Rückgabewert von "equals" noch nicht mal deterministisch. Je nachdem, welche IP gerade zufällig zurückkommt, liefert der Vergleich manchmal true und manchmal false.

Beim Vergleich typischer HTTP-URLs von Webseiten ist es daher meiner Meinung nach sicherer, einfach einen String-Vergleich zu machen. Das ist zwar auch nicht 100%-ig sicher, dafür aber aber pragmatischer, schneller (weil kein DNS-Lookup nötig ist) und nicht so tückisch.

Hibiscus: Beta-Phase für 2.6.11

Die SEPA Purpose-Codes sind eingebaut und inzwischen im Nightly-Build verfügbar. Damit ist alles drin, was ich mir für das nächste Release vorgenommen hatte. Das heisst, die Nightly-Builds sind jetzt quasi die Beta-Versionen. Wenn in den nächsten ~2 Wochen nicht katastrophales passiert, wird die nächste Version.

Eclipse: Class-Dateien in "Open Resource" ausblenden

Heute mal something completely different. Wer in Eclipse regelmäßig den Shortcut <CTRL><SHIFT><R> für "Open Resource" verwendet, der war sicher auch schon genervt, dass dort im Such-Ergebnis gern mal Dateien auftauchen, die da nichts zu suchen haben. Allen voran class-Files. Oder noch fieser: Properties- oder Config-Dateien aus den Build-Ordnern. Mir ist es schon regelmäßig passiert, dass ich Änderungen an so einer Datei vorgenommen habe, mich dann wunderte, warum die nicht wirksam wurde, sicherheitshalber noch ein "Project»Clean..." machte. Um dann festzustellen, dass ich versehentlich die Properties-Datei aus dem Build-Ordner geändert habe - die beim Rebuild natürlich überbügelt wird.

Das lässt sich abstellen. Man kann unerwünschte Ressourcen in dem Such-Dialog ausblenden: Erst im Dialog selbst oben die Option "Show Derived Resources" deaktivieren (ist meist eh schon deaktiviert).


Anschließend aber noch die Properties der auszuschließenden Ordner öffnen (per Rechtsklick) und dort das Attribut "Derived" aktivieren, um Eclipse bekannt zu machen, dass der Ordner generierte oder kopierte Dateien enthält.

Gefunden - natürlich - bei Stackoverflow.

PS: In der Ergebnis-Liste der File-Search via <CTRL><H> werden diese Dateien dann übrigens auch nicht mehr angezeigt - wirklich sehr sinnvoll.