itch.io-Bundle-Spiele automatisiert in die Bibliothek einbinden

Auf itch.io werden unter anderem Indy-Spiele angeboten und verkauft. Vor kurzem wurde auf der Plattform das Bundle Bundle for Racial Justice and Equality verkauft. In diesem Bundle waren über eintausend Spiele enthalten. Diese Spiele tauchen allerdings nicht automatisch in der Bibliothek auf, stattdessen müssen sie auf der separaten Bundle-Seite aufgerufen werden und erscheinen erst dann in der Bibliothek.

Die Einstellungsseite des ScriptAutoRunner

Diesen Prozess von Hand für alle Spiele durchzuführen ist etwas aufwändiger, allerdings kann der Prozess mit einer Chrome-Erweiterung automatisiert werden.

Preis: Kostenlos

Nachdem der ScriptAutoRunner erfolgreich als Erweiterung installiert wurde, können die Optionen der Erweiterungen über die Extension-Verwaltung und die Erweiterungsoptionen der Erweiterung geöffnet werden. Alternativ kann einfach die direkte URL im Chrome eingegeben und aufgerufen werden:

chrome-extension://gpgjofmpmjjopcogjgdldidobhmjmdbm/options.html

Dort muss nun ein neues Skript angelegt und mit folgendem Inhalt befüllt werden:

if (!window.location.toString().includes("/bundle/download")) { 
  window.history.back(); 
} else if ($('[value="claim"]') && $('[value="claim"]')[0]) {
  $('[value="claim"]')[0].click();
} else {
    $('.next_page')[0].click()
}

Nachdem das Skript wie auf dem Bild aktiviert wurde, kann die URL des Bundles aufgerufen werden und der entsprechende Prozess beginnt. Innerhalb von einigen Minuten werden alle Detailseiten der jeweiligen Spiele aktiviert und diesen landen in der Bibliothek des eigenen itch.io-Kontos. Im Anschluss kann das entsprechende Skript wieder deaktiviert werden.

Medien unter WordPress bei Größenänderung neu berechnen

Wenn die Einstellungen für Medien unter WordPress geändert werden, so werden bestehende Bilder nicht angefasst. In bestimmten Konstellationen kann dies allerdings zu Problemen führen, z.B. bei Vorschaubildern. Deshalb ist es empfehlenswert die Bilder nach einer Änderung der Standardbildgrößen in den Einstellungen von WordPress neu zu berechnen. Hierfür existiert das Plugin Regenerate Thumbnails.

Preis: Kostenlos

Mithilfe des Plugins ist es mögliche alle Bilder in den entsprechend eingestellten Größen neu zu berechnen. Je nach Größe der Medienbibliothek kann dieser Vorgang einige Minuten bis Stunden einnehmen.

Das Plugin Regenerate Thumbnails

Der Quelltext des Plugins ist auf GitHub zu finden. Er ist unter der GPL in Version 2 lizenziert und damit freie Software.

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.