Eine Java-Bibliothek für Feiertage: Jollyday

http://jollyday.sourceforge.net/. Beispiel von der Webseite:

    1. To get a HolidayManager instance for US holidays:

      HolidayManager m = HolidayManager.getInstance(HolidayCalendar.UNITED_STATES);
    2. To get the holidays for the state New York:
        Set<Holiday> holidays = m.getHolidays(2010, "ny");
    3. To get the holidays for New York City in the state New York:
        Set<Holiday> holidays = m.getHolidays(2010, "ny", "nyc");
    4. To get a HolidayManager instance for your own holidays:
      1. create a Holidays file i.e. Holidays_MyOwn.xml
      2. put your holiday rules into this (for examples please the XML files in the provided JAR file in the folder holidays)
      3. put your Holidays_MyOwn.xml in your applications classpath
      4. to use your holiday rules create an HolidayManager instance by calling HolidayManager m = HolidayManager.getInstance("MyOwn");
      5. call Set<Holiday> holidays = m.getHolidays(2010); to retrieve the holidays for 2010.

Welche deutschen Feiertage erfasst werden listet http://jollyday.sourceforge.net/data/de.html auf. Die Lib. steht unter der Apache Lizenz und stammt vom Deutschen Sven Diedrichsen.

Zen-Coding: Plugins für’ schnelle Schreiben von HTML/XML

http://code.google.com/p/zen-coding/. Die Idee ist, dass der Editor Ausdrücke wie

div#page>div.logo+ul#navigation>li*5>a

expandiert zu

<div id="page">
        <div class="logo"></div>
        <ul id="navigation">
                <li><a href=""></a></li>
                <li><a href=""></a></li>
                <li><a href=""></a></li>
                <li><a href=""></a></li>
                <li><a href=""></a></li>
        </ul>
</div>

Plugins gibt es für

PSP Emulator in Java (jpcsp)

Java ist langsam? Nee, denn sonst würde man keinen PSP Emulator in Java programmieren, sondern in C(++)! Doch das Projekt http://jpcsp.org/ (bzw. http://code.google.com/p/jpcsp/) zeigt wieder einmal, wie leistungsfähig Java (plus ein paar nativer Bibliotheken) ist. Die Emulation ist modernen Spielkonsolen ist schwer, da sie mit spezieller Hardware vollgestopft sind, auch wenn die Prozessoren nicht wie in moderne PCs in Gigahertz-Bereich laufen. Die PSP hat mit einem auf MIPS 4000 basierenden RISC-Prozessor und einen “Media-Engine”-Chip, die JPCSP ausgezeichnet emuliert, was an die 300 Speile ausführbar macht: http://www.emunewz.net/forum/forumdisplay.php?fid=65. Der Code greift für die Media-Low-Level-Operationen auf http://lwjgl.org/ zurück. Es steckt sonst noch nativer Anteil drin, etwa für Raw-Sockets (das sind Sockets mit allen TCP/IP-Informationen, also auch den Headern, nicht nur den Transportdaten selbst, http://www.savarese.org/software/rocksaw/) oder eine Bib. namens Xuggler, was ein Java-Wrapper für FFmpeg ist.

Wicket 1.5 jetzt raus

Siehe http://wicket.apache.org/2011/09/07/wicket-1.5-released.html.

Most notable changes

With this release the Wicket team has revised many of its internals. A short list:

  • HTML5 components added: EmailTextField, NumberTextField, UrlTextField and RangeTextField
  • New inter-component events (explained below)
  • Minimum required servlet API is servlet-api 2.5
  • All standard validators now extend Behavior to allow for client side validations
  • IBehavior has been removed and AbstractBehavior has been deprecated, you should now extend Behaviorinstead
  • Simplified the request cycle processing and made it more extensible
  • URL handling is now in one place
  • Wicket’s rendering code has been greatly simplified
  • Improved browser caching support
  • ClientSideImageMap replaces old ImageMap
  • Better support for running behind proxies with x-forwarded-for header
  • Request cycle listeners make it easier to integrate frameworks in your Wicket application
  • Consistent naming: methods with Javascript in the name have been renamed to use proper capitalization:JavaScript
  • Switching to HTTPS is as simple as configuring a new root mapper to make Wicket HTTPS aware and annotating a page with @RequireHttps

A longer list of changes and improvements can be found in our migration guide.

Open Symphony Projekt hat sich erledigt. Was sagt uns das?

Open Symphony versammelte Open-Source Projekte unter sich, wie die Apache Group, The Codehaus oder Eclipse Foundation. Nun haben sich die erfolgreichen Open Symphony-Projekte im Laufe der Zeit verselbständigt und Open Symphony selbst machte dicht:

Die verbleibenden Projekte sind auf neuen Domänen

Und andere sind auf java.net gewandert:

Die Frage leitet sich ab, ob Organisationen überhaupt noch nötig sind, da Projekt-Hosting so einfach geworden ist. Ich würde sagen, dass man diesen Trend nicht unbedingt ablesen kann. Denn WebWork ist zu Struts 2 geworden, und das ist ganz klar Apache und eben nicht solo, und Jetty geht den Weg von codehaus zu Eclipse. Was man vielleicht sehen kann, das gewissen Organisationen an Gewicht gewinnen und andere verlieren.

Besonders Eclipse hat viele Projekte angezogen. Das reine Sammeln ist aber an sich nicht Gutes, denn es sagt nicht aus, dass die Projekte eine hohe Priorität genießen und nicht mehr sterben – viele Projekte sind schon im Eclipse-System gestorben, TPTP ist ein Beispiel. Eclipse zeigt einen ganz neuen Weg im Release-Management auf, etwas, was bisher in der Software-Welt noch fehlt: Gewisse Zeitpunkte auszumachen und Software-Releases zu synchronisieren, sodass sie die Teilprojekte zusammen harmonisieren. Das ist gewinnbringend für OS-Software aber für kommerzielle Software. Nicht umsonst sind daher Zeitpunkte für Releases so wichtig. Sun war nicht für die Einhaltung dieser Zeiten bekannt, Oracle schon. Mit der Einführung der Java 7-Kandidaten kann jeder seine Software auf Java 7 vorbereiten und wenn Java 7 dann im Juli erscheint können auch alle anderen Produkte prinzipiell zeitgleich auf den Markt gehen.

Startausgaben vom embedded Jetty unterdrücken

Log-Ausgaben von Jetty sind speziell”. Wie http://docs.codehaus.org/display/JETTY/Debugging schreibt:

Jetty logging looks for a slf4j jar on the classpath. If found, slf4j is used to control logging otherwise stderr is used.

Dinge einfach nach System.err zu schreiben ist nicht so tolle und Jetty nutzt kein JUL. Daher bekommt man, wenn man slf4j nicht im Pfad hat, eine lästige Ausgabe wie diese:

2011-05-27 18:18:57.898:INFO::jetty-7.4.2.v20110526
2011-05-27 18:18:59.658:INFO::started o.e.j.w.WebAppContext{/,file:/C:/Users/Christian/Documents/My%20Dropbox/Development/TraidaWorkspace/Traida/war/},C:\Users\Christian\Documents\My Dropbox\Development\TraidaWorkspace\Traida\war
2011-05-27 18:19:00.053:INFO::Started SelectChannelConnector@0.0.0.0:8080 STARTING

Was tun, wenn man auf slf4j verzichten möchte? Es bleibt einem nichts anders übrig, als beim Starten temporär den System.err-Strom auf’s Nirwana zu lenken:

PrintStream err = System.err;
System.setErr( new PrintStream( new OutputStream() { public void write( int b ) { } } ) );
// Jetty hier starten
System.setErr( err );

Dann ist Ruhe im Karton.

Groovy 1.8 ist fertig

Die News unter http://docs.codehaus.org/display/GROOVY/Groovy+1.8+release+notes. Interessante Änderungen sind:

  • Bessere Performance bei nicht-gemischten Typen (Ganzzahlen bleiben intern int)
  • In DSLs waren Punkte, Klammern beim Zugriff auf Eigenschaften immer etwas hinderlich. In der neuen Version kann man auf sie verzichten. So steht “turn left then right” etwa für “turn(left).then(right)”. Das nennt sich Command-Chain
  • Die Parallel-Bibliothek http://gpars.codehaus.org/ ist standardmäßig mit dabei, Tutorial unter http://gpars.org/guide/index.html.
  • Closures als Argumente für Annotationen. Das macht etwa @Invariant({ number >= 0 }) möglich.
  • Neuer JSON-Builder wie XML-Builder
  • Neue AST-Transformationen für injizierte Logger, automatische toString()/equals()/hashCode()/clone()-Methode, Prüfung auf Thread-Blockierer, …
  • Diamanten-Operator wie aus Java 7

Guice 3 mit @PostConstruct = Mycila

Von Spring habe ich mich schon länger verabschiedet und bin für meine clientseitigen Programme auf Guice gewechselt. Bis auf die Tatsache das es keinen automatischen Autoscan gibt, hat mir nichts wirklich gefehlt. Guice unterstützt auch standardmäßig nicht die Common Annotions, aber bei Guice 2 hatte ich http://code.google.com/p/guiceyfruit/ im Einsatz, da das jedoch auf intern Datenstrukturen von Guice 2 zurückgriff, konnte ich nicht auf die neue Version Guice 3 migrieren. Also schmiss ich GuiceFruit raus und suchte eine Alternative. Die gibt es mit dem Projekt http://code.google.com/p/mycila/:

http://code.mycila.com/wiki/MycilaGuice

Google Guice contributions:

  • ServiceLoader plugin (enables injection into loaded services)
  • JSR250 supports improved from GuicyFruit
  • Custom Injector with more useful methods which consider the whole Injector hierarchy
  • CachedScope to cache your binding for a specific duration

Neben Mycila Guice gibt es auch noch andere tolle Dinge:

  • Mycila Event
  • Mycila JMX