Ooops: Java hängt bei Zahlenkonvertierung …

Schwer zu glauben, aber Java ist auf sehr einfache Weise zum Absturz zu bringen:

class runhang {
  public static void main(String[] args) {
    System.out.println("Test:");
    double d = Double.parseDouble("2.2250738585072012e-308");
    System.out.println("Value: " + d);
 }
}

In der letzten Zeile kommt der Kontrollfluß nie an. Mehr Informationen fasst Rick Regan hier zusammen.

JCR 335: Lambda Ausdrücke für Java

JSR 335 beschreibt eine Möglichkeit, Closures über einfache Lambda-Ausdrücke zu erlauben, die sogenannte „SAM conversions“ (SAM = Single Abstract Methods) ermöglichen, wie sie zum Beispiel auch Groovy anbietet. Das erlaubt elegante und zugleich kompakte Lösungen wie in dem folgenden Beispiel:

 Collection collection = ... ;
 collection.sortBy(#{ Foo f -> f.getLastName() });

oder auch

 collection.remove(#{ Foo f -> f.isBlue() });

Nützlich wäre so ein sprachliches Mittel nicht nur für kompaktes Coding. Der Compiler kann auf diese Weise auch das Potential von Multicore-Umgebungen besser ausnutzen und Tasks auf die vorhandenen Prozessorkerne verteilen.

Google Base – Aktualisierte Lizenzbedingungen

Per Mail hat mich Google auf ein Update der „Terms of Service“ für Google Base hingewiesen. Der Text liegt auch in deutscher Sprache vor und macht deutlich, dass Daten, die der Benutzer bei Google Base einstellt, damit quasi an Google verschenkt werden:

Sie oder (wenn anwendbar) Ihre Lizenzgeber behalten alle Rechte an den von Ihnen eingestellten Inhalten. Mit dem Einstellen von Inhalten auf oder durch den Dienst gewähren Sie Google ein unentgeltliches, zeitlich nicht begrenztes und unwiderrufliches, weltweites, nicht ausschließliches, unterlizenzierbares Recht zum Vertrieb, zur Vervielfältigung, Veränderung, Darstellung sowie anderweitigen Nutzung der Inhalte in Diensten von Google. Ihre Inhalte können insbesondere in Google-Diensten als Verbesserungen oder Suchergebnisse integriert werden. Zur Klarstellung: Diese Lizenz an Google wird allein im Zusammenhang mit der Erbringung, Bewerbung und Verbesserung von Google-Diensten gewährt.

Die im letzte Satz geäußerte Klarstellung finde ich nicht wirklich beruhigend.

Eine Kündigung des Dienstes durch Google ist übrigens von heute auf morgen möglich und braucht nicht angekündigt zu werden. Ein Zugriff auf die Daten ist dann unter Umständen nicht mehr möglich:

Google kann Ihren Zugang zu Google Diensten jederzeit und ohne Angabe eines Grundes beenden, diese Nutzungsbedingungen kündigen oder Ihr Konto vorübergehend stilllegen oder auflösen (z.B., aber nicht beschränkt darauf, wenn Ihr Konto über einen bestimmten Zeitraum von inaktiv war). Im Falle der Kündigung/Beendigung wird Ihr Konto deaktiviert und es ist möglich, dass Sie auf Ihr Konto oder etwaige Dateien oder andere Inhalte in Ihrem Konto nicht mehr zugreifen können, auch wenn restliche Informationen möglicherweise in Kopie in unserem System gespeichert bleiben.

Natürlich darf ich mich nicht beschweren, wenn Google eine Gegenleistung dafür verlangt, dass mir ein solcher Dienst kostenlos zur Verfügung gestellt wird. Vor dem Hintergrund, dass diese Gegenleistung aber in einer mehr oder weniger unbeschränkten Rechteübertragung meiner Inhalte besteht, kann ich in Google Base nicht mehr sehen als eine Spielwiese, um Dinge mal auszuprobieren und zu testen.

Podcasts angehört: Closures Controversy

„To closure or not to closure?“ – das ist die große Frage. In diesem Podcast nimmt Joshua Bloch Stellung zur aktuellen Closures-Debatte in Java – insbesondere vor dem Hintergrund der BGGA-Initiative – und man merkt sehr, dass es ihm dabei um die eine Sache geht: Wie kann man die Sprache Jave in gesundem Umfang verbessern und weiter entwickeln, ohne sie dabei ihn ihrem Grundcharakter zu zerstören? Bloch legt immer wieder Wert auf die Feststellung, dass nicht alles, was machbar ist, auch gemacht werden muss. Selbstkritisch merkt er an, dass die Einführung von Generics in der Kombination mit Wildcards vielleicht auch übers Ziel hinaus geschossen ist: hier wurde ein Sprachmittel geschaffen, welches im Gegensatz zu den klassischen Java-Sprachelementen in seiner Komplexität nicht mehr einfach zu verstehen ist.

Zum Podcast: Closures Controversy

Podcasts angehört: Comparing Java Web Frameworks

Ein sehr persönlicher (und unterhaltsamer) Erfahrungsbericht von einem Entwickler, der projektbedingt mit unterschiedlichsten WebFrameworks zu tun hatte. Sehr angenehm, dass eine oberflächliche Generalabrechnung unterbleibt und jedes benannte Framework eine ehrliche und gewollt subjektive Bewertung erfährt. Eine lohnenswerte Stunde für jeden, der vor der Aufgabe steht, Frameworks zu evaluieren und der dafür erst einmal relevante Bewertungsmaßstäbe zusammenstellen muß.

Zur Sprache kommen unter anderem Struts, JSF mit MyFaces, Tapestry, Wicket, Spring MVC und GWT.

Zum Podcast: Comparing Java Webframeworks