Java-Bibliothek für HBCI

Wer elektronisch auf Konten zugreifen möchte, kann hierfür das Homebanking Computer Interface, kurz HBCI, bzw. FinTS nutzen. Soll die Nutzung der Schnittstelle in einer Anwendung passieren, wird eine Bibliothek zur Nutzung des Protokolls benötigt. Für die Entwicklung unter Java bietet sich hierbei die Bibliothek hbci4java an.

hbci4java auf GitHub

hbci4java unterstützt die neuen, durch die Richtlinie PSD2 geforderten, Mechanismen, sodass der Zugriff auf Konten auch nach der Umsetzung der Richtlinie möglich ist. Der Quelltext der Bibliothek ist auf GitHub zu finden. Lizenziert ist die Bibliothek unter der LGPL in Version 2.1. Damit ist die Bibliothek freie Software.

Maps mittels GSON deserialisieren

GSON ist eine von Google entwickelte Java-Bibliothek, welche ursprünglich für den internen Gebrauch bei Google gedacht war. Mit dieser ist, neben vielen anderen Dingen, unter anderem die Serialisierung von Java-Objekten in JSON möglich. Gegeben sei für ein kleines Beispiel die Klasse FooObject:

public class FooObject {

    private int id;
    private String key;
    private String value;

    public FooObject(int id, String key, String value) {
        this.id = id;
        this.key = key;
        this.value = value;
    }

    public int getId() {
        return id;
    }

    public String getKey() {
        return key;
    }

    public String getValue() {
        return value;
    }
}

Die Klasse besteht aus drei internen Variablen, welche eine Id, einen Key und einen Value halten. Daneben existieren ein Konstruktor und drei Getter-Methoden für die Rückgabe der internen Variablen. Mithilfe von GSON kann eine Instanz der Klasse einfach zu JSON serialisiert werden:

Gson gson = new Gson();
FooObject fooObject = new FooObject(1, "keyA", "valueA");
String jsonFooObject = gson.toJson(fooObject);

Heraus kommt bei dieser Serialisierung folgendes JSON-Objekt:

{
   "id":1,
   "key":"keyA",
   "value":"valueA"
}

Auch die Deserialisierung des Objektes mittels GSON ist kein Problem:

fooObject = gson.fromJson(jsonFooObject, FooObject.class);

Interessanter und komplizierter wird es, wenn Maps mittels GSON serialisiert werden sollen:

Map values = new HashMap<>();
values.put("A", new FooObject(1, "keyA", "valueA"));
values.put("B", new FooObject(2, "keyB", "valueB"));
values.put("C", new FooObject(3, "keyC", "valueC"));

Die Serialisierung gestaltet sich noch einfach:

String json = gson.toJson(values);

Bei der Deserialisierung mittels:

Map map = gson.fromJson(json, Map.class);

erhält der Nutzer allerdings eine LinkedTreeMap. Auf die Werte der Map kann durchaus zugegriffen werden:

String value = map.get("A").get("key");

Allerdings schlägt die Umwandlung in ein Objekt vom Typ FooObject fehl:

FooObject fooObjectB = map.get("A");

Stattdessen erhält der Nutzer eine ClassCastException:

Exception in thread "main" java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to org.example.console.FooObject

Damit der Cast gelingt muss bei der Deserialisierung der Map anders gearbeitet werden:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;

...

Type type = new TypeToken>(){}.getType();
Map map = gson.fromJson(json, type);

Damit kann die Map mit dem FooObject normal genutzt werden. Mithilfe des TypeTokens kann ein generischer Typ repräsentiert und somit für die Deserialisierung mittels GSON eingesetzt werden.

Bibliothek zum Einlesen von MediaWiki-Dump-Dateien

Für ein Projekt war ich auf der Suche nach einer Java-Bibliothek um die Dumps einer MediaWiki-Installation auszuwerten. Fündig geworden bin ich bei der Bibliothek WikiXMLJ, welche allerdings mittlerweile einige Jahre auf dem Buckel hat. Auf Basis dieser Bibliothek habe ich die Bibliothek mediawikixml erstellt. Um die Bibliothek zu nutzen, muss im ersten Schritt eine neue Paketquelle in der pom.xml definiert werden.

<repositories>
 <repository>
 	<id>github</id>
 	<url>https://maven.pkg.github.com/seeseekey/mediawikixml</url>
 </repository>
</repositories>

Anschließend kann die Abhängigkeit eingebunden werden:

<dependency>
    <groupId>net.seeseekey</groupId>
    <artifactId>mediawikixml</artifactId>
    <version>1.0.1</version>
</dependency>

Damit kann die Bibliothek zur Auswertung von MediaWiki-Dumps genutzt werden:

WikiXMLParser wikiXMLParser = WikiXMLParserFactory.getParser("dump-current.xml");

try {

    wikiXMLParser.setPageCallback(new PageCallbackHandler() {
        public void process(WikiPage page) {
            System.out.println(page.getId());
            System.out.println(page.getRevisionId());
            System.out.println(page.getTimestamp());
            System.out.println(page.getTitle());
            System.out.println(page.getWikiText());
        }
    });

    wikiXMLParser.parse();
} catch (Exception e) {
    e.printStackTrace();
}

Für jede MediaWiki-Seite wird unter anderem die ID, die Revision, der Timestamp, der Titel und der eigentliche Inhalt der Seite geparst. Die Bibliothek setzt mindestens Java 8 voraus. Zu finden ist das Repository mit der Bibliothek auf GitHub. Die Bibliothek ist unter der Apache License in Version 2 lizenziert und damit freie Software.

iOS-Bibliothek zur Darstellung von TMX-Dateien

Mit dem freien Mapeditor Tiled, gibt es ein sehr mächtiges Werkzeug für die Erstellung und Bearbeitung von Karten. Nachdem eine Karte erstellt wurde und diese im TMX-Format gesichert wurde, soll die Karte in den meisten Fällen genutzt werden. Für die unterschiedlichen Systeme existieren eine Reihe von Bibliotheken zur Nutzung und Darstellung von TMX-Karten.

Ein Demo zur Darstellung einer TMX-Karte im Simulator

Unter iOS und für die Nutzung mittels Swift eignet sich die Bibliothek SKTiled, welche auf GitHub zu finden ist. Mit SKTiled können die unterschiedlichen Varianten von TMX-Dateien, wie isometrische oder rechteckige Maps angezeigt werden. Neben den normalen Tiles, werden auch animierte Tiles in der Anzeige unterstützt. Die Bibliothek funktioniert unter iOS, tvOS und macOS. Lizenziert ist die Bibliothek unter der MIT-Lizenz und damit freie Software.

Deeplearning4j

Bibliotheken für die Entwicklung von Deep Learning-Anwendungen bzw. zur Nutzung von maschinellem Lernen, sind meistens für Python verfügbar. Entsprechende Bibliotheken für Java sind dagegen spärlich gesät. Eine dieser Bibliotheken für Java ist Deeplearning4j. Neben der klassischen Kost, wie der Unterstützung unterschiedlicher neuronaler Netze, verfügt Deeplearning4j über eine Schnittstelle zu Python, mit deren Hilfe die entsprechenden Bibliotheken aus der Python-Welt angebunden werden können.

deeplearning4j.org

Der Quelltext der Bibliothek ist auf GitHub zu finden. Lizenziert ist die Bibliothek unter der Apache License in der Version 2 und damit freie Software. Die offizielle Projektseite kann unter deeplearning4j.org besucht werden.