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.

Was bringt Entwicklung bei Pokémon Go?

In Pokémon Go können Pokémon, wie in vielen Spielen der Reihe, entwickelt werden. Die Frage, die sich stellt, ist, ob sich die Entwicklung eines Pokémon lohnt. Die Antwort darauf ist relativ einfach: im Prinzip ja. Allerdings kommt es auf einige Feinheiten an. Pokémon können im Spiel auf zwei Arten trainiert werden, über Power-Ups und die Entwicklung.

Die Entwicklung des Pokémon erhöht die WP

Bei der Entwicklung wird die WP-Zahl um ein gutes Stück angehoben, bei einem Power-up sind es meist um die 50 Punkte um die sich der WP-Wert erhöht. Die Reihenfolge, also erst Power-Ups und dann die Entwicklung oder umgekehrt spielt hierbei keine Rolle. Allerdings sollte mit der Entwicklung gewartet werden bis ein bestimmtes Trainerlevel erreicht ist. Ab Level 30 kann bedenkenlos entwickelt werden. Daneben sollte bei der Entwicklung darauf geachtet werden, das am besten nur Pokèmon mit hohen IV-Werten entwickelt werden.

Curta – mechanisches Rechnen

Heutzutage trägt jeder Nutzer eines Smartphones einen Taschenrechner mit sich herum. Vor der Erfindung des Taschenrechners gab es bereit handliche Geräte zu Ausführung von Berechnungen. Eines dieser Geräte ist die Curta. Bei dieser handelt es sich um eine mechanische Rechenmaschine. Auch aus heutiger Sicht ist die Curta ein elegantes Gerät. Entwickelt wurde die Curta in den 1940er Jahren von Curt Herzstark, einem österreichischen Erfinder.

Curta, Michael Hicks, CC BY 2.0

Das Gerät beherrscht die vier Grundrechenarten und ist in zwei Versionen hergestellt worden, welche sich unter anderem in der Anzahl der darstellbaren Zahlen unterscheiden. Auch die Bedienung der Curta ist etwas anders, als wir es bei einem Taschenrechner gewöhnt sind:

Aktivieren Sie JavaScript um das Video zu sehen.
Video-Link: https://www.youtube.com/watch?v=o53Bp3gK0s0

Da von der Curta in etwa 140.000 Einheiten gebaut wurden, sind auch heute noch gut erhaltende Exemplare auf eBay und Co. zu finden. Die Preise bewegen sich zwischen 500 und 1600 €, je nach Modell und Zustand.

Stuff in Space

Der Weltraum, unendliche Weiten. So weit, so richtig. Im erdnahen Orbit gesellt sich im Weltraum allerdings noch eine Menge Weltraumschrott und andere Objekte dazu. Neben den Nutzlasten im Orbit, wie Satelliten, der ISS und vielen anderen Dingen, finden sich im Orbit rund um die Erde unzählige Objekte in ihren jeweiligen Umlaufbahnen.

Stuff in Space

Mit dem Projekt Stuff in Space wurden diese Objekte und ihr Orbit visualisiert. In der Visualisierung kann navigiert und die einzelnen Objekte können ausgewählt und betrachtet werden. Daneben kann nach Objekten gesucht werden. Zu finden ist das Projekt unter stuffin.space. Der Quelltext des Projektes ist auf GitHub zu finden und einem offenem Issue nach unter der MIT-Lizenz lizenziert und damit 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.