Donnerstag, 26. März 2009

Kaffee Klatsch

Großartigen Lesestoff für all diejenigen, die mit Softwareentwicklung zu tun haben. Kaffee Klatsch heißt das Magazin rund um das Thema Softwareentwicklung. Das Magazin kann kostenlos als PDF abonniert werden. Ansonsten einfach mal einen Blick in das Online Archiv werfen.

Link:
Kaffee Klatsch - Das Magazin rund um Software-Entwicklung

Mittwoch, 25. März 2009

Remote JBoss Client Development

Will man mit einem JBoss Client auf eine entfernte JBoss Applikation zugreifen, kann man das wunderbar mit ein paar SSH-Tunnel und einem Loopback Netzwerkinterface machen.

Zunächst die TCP Tunnel (local->remote) 1098 und 1099 sowie 4443 und 4444 zum JBoss Server aufbauen. Testen am besten per Telnet auf die Ports. Leider ist das nur die halbe Miete, weil die IP der Maschine, wo der JBoss läuft, noch nicht erreichbar ist. Das lässt sich aber umgehen, in dem man einen Loopback Netzwerkinterface einrichtet, das die IP der JBoss Maschine auf den localhost, wo die Tunnel auf Verbindung warten, weiterreicht.

Für Windows bietet sich die Kombination von Putty und dem Microsoft Loopback Adapter an, den man einfach als Netzwerkkarte einbinden kann.

Links:
Einrichten des Loopbackadapters: http://support.microsoft.com/kb/839013
Einrichten von Putty Tunnel: http://realprogrammers.com/how_to/set_up_an_ssh_tunnel_with_putty.html

Samstag, 7. März 2009

Niemals mit den Datentypen Float oder Double Geldbeträge berechnen!

Was für Tücken die Berechnung von Geldbeträgen mit Fließkommazahlen hat, erklärt Markus Kühle in einem sehr anschaulichen Beispiel, das es auch nicht an Unterhaltungswert mangeln lässt.

javathreads.de

Freitag, 6. März 2009

Bildinhalte erkennen

Bildinhalte von Computern erkennen zu lassen entbehrt nicht einer gewissen Faszination. Die Gesichtserkennung ist seit Jahren ein nicht enden wollendes Thema. Sehr interessant dazu ist OpenCV. Das Projekt vereint eine Vielzahl von Algorithmen und zeichnet sich durch gute Performance aus. Ein JNI zu den C/C++ Bibliotheken gibt mit dem Java OpenCV MatchTemplate oder dem Face Detection Library for Processing (PC) Projekt.

Zum Thema gibt es außerdem noch die Java API Face Recognition, die den Eigenfaces Algorithmus für die Gesichtserkennung einsetzt.

Weitere Infos zum Thema im Linux Magazin.

Links:
OpenCV Wiki
OpenCV Download

[Update]

Ebenfalls eine sehenswerte Java Implementierung ist The Face Annotation Interface (faint). http://faint.sourceforge.net/


[Update 2]

Sonntag, 1. März 2009

Versteckte Schätze

Egal in welches Gebiet man sich vorwagt, es gibt für eigentlich alles eine mehr oder weniger gut geeignete Java API. Es ist nur nicht immer ganz einfach eine passende zu finden. Zum Manipulieren von EXIF Bilddaten bin ich vor einiger Zeit auf die Sanselan API gestoßen. Ganz zufrieden war ich damit jedoch nie. Mangelnde Dokumentation, komplizierte Bedienung und die kontinuierliche Verweigerung, die in Jpeg EXIF eingebettete Thumbnails zu laden, waren einige Eigenheiten, die mir nicht gefallen haben. Durch Zufall ist mir gestern eine gut verteckte API in die Finger geraten, die durch Einfacheit besticht, die Thumbails lädt und die EXIV Daten auch wieder zurückschreiben kann. Eine Dokumentation existiert zwar scheinbar nicht, aber die API ist nahezu selbsterklärend. Gefunden habe ich dieses Goldstück im Java Image Manager (Jim) Projekt - einem Bildverwaltungsprogramm, das auf den ersten Blick mit einer ehr gewöhnungsbedürftigen Oberfläche und wenig Funktionsumfang daherkommt. Ein Blick ins Innere hat sich dafür umso mehr gelohnt. Die jim-io.jar, die mit dem Programm mitkommt, enthält so ziemlich alles, was ich von einer solchen API erwarten würde und auch der Sourcecode ist wieder mit dabei. Bleibt nur noch zu hoffen, dass sich keine schwerwiegenden Bugs finden, die mir die Freude über diesen Fund wieder nehmen. Hier noch ein paar Codefragmente zum Umgang mit jim-io.


    public Metadata readMetadata(File imageFile) throws MetadataException {
final JpegReader reader = new JpegReader();
final Metadata metadata = reader.readImage(imageFile);
final Iterator directoryIterator = metadata.getDirectoryIterator();

while (directoryIterator.hasNext()) {
Directory directory = directoryIterator.next();
if(directory instanceof ThumbnailTiffDirectory) {
byte[] thumbnailData = ((ThumbnailTiffDirectory)directory).getThumbnailData();
}
System.out.println(directory.getName());
Iterator tagIterator = directory.getTagIterator();
while (tagIterator.hasNext()) {
Tag tag = tagIterator.next();
System.out.println(tag.getTagName() + "="+ tag.getDescription());

}
}
return metadata;
}

public void updateMetadataTag(Tag tag, Object value) {
tag.update(value);
}

public void writeMetadata(Metadata metadata, File output) throws JpegProcessingException {
JpegWriter writer = new JpegWriter();
writer.writeImage(metadata, output);
}

Update Die Library entstammt eigentlich aus dem Metadata Extractor Projekt. Dank der Refactorisierungsmöglichkeiten moderner IDEs war das allerdings nicht mehr wirklich ersichtlich.

Update 2
Ergänzende Links zum Thema Exifdaten:
http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html
http://commons.wikimedia.org/wiki/Commons:Manipulation_von_Metadaten