Freie Schachplattform

Die Möglichkeiten Schach zu Spielen sind im Internet fast unbegrenzt. Mit Lichess gibt es seit 2010 eine freie Schachplattform, auf der gegen den Computer und andere Menschen Schach gespielt werden kann. Neben dem gewöhnlichen Schach werden viele andere Varianten wie Crazyhouse, Horde oder Räuberschach unterstützt. Für gespielte Spiele bietet die Plattform umfangreiche Analysemöglichkeiten an.

Lichess ermöglicht unterschiedliche Spielmodi

Finanziert wird das werbefreie Lichess durch Spenden. Neben der Webseite existieren Apps für iOS und Android.

lichess (legacy)
Preis: Kostenlos
lichess • Online Chess
Preis: Kostenlos

Auch Spieler wie der aktuelle Weltmeister Magnus Carlsen nutzen Lichess. Die Software hinter Lichess ist auf GitHub zu finden. Lizenziert ist das Ganze unter unterschiedlichen freien Lizenzen und damit freie Software.

Datenbank ausprobieren leicht gemacht

Manchmal steht man vor dem Problem das eine Datenbank-Abfrage konstruiert werden soll, aber gerade keine Datenbank zur Hand ist. Auch für pädagogische Zwecke soll nicht gleich mit Kanonen auf Spatzen geschossen werden. Stattdessen bietet sich der Dienst SQL Fiddle an. SQL Fiddle selbst beschreibt sich wie folgt:

A tool for easy online testing and sharing of database problems and their solutions.

Im Dienst kann eine Datenbank definiert werden und diesen anschließend mit Werten befüllt werden. Nach der erfolgten Definition wird das Schema erzeugt und anschließend kann die Datenbank mit Abfragen getestet werden. Technisch wird bei jeder Schemageneration eine neue Datenbank erzeugt und für jede Abfrage wird eine Transaktion erzeugt, welche nach der Abfrage wieder zurückgerollt wird. Dadurch befindet sich die Datenbank immer in dem definierten Status.

Mit SQL Fiddle können Datenbankabfragen schnell getestet werden

Der Quelltext des Projektes ist auf GitHub zu finden. Er ist unter der MIT-Lizenz lizenziert und somit freie Software. Zu finden ist der Dienst unter sqlfiddle.com.

One font to rule them all

Viele Fonts decken einen gewissen Teil der Unicode-Zeichen ab. Wenn sich ein Zeichen im Text befindet, welches nicht dargestellt werden kann, so erscheint stattdessen das Zeichen �. Dieses Zeichen in der Umgangssprache Tofu genannt ist der Platzhalter für Zeichen, die in der Schriftart nicht enthalten sind. Beim Zeichen selber handelt es sich um das Notdef-Zeichen. Allerdings existiert mittlerweile ein Font, dessen erklärtes Ziel es ist keine Notdef-Zeichen mehr zuzulassen. Der Name des Fonts, Noto, steht für No More Tofu und stellt das Ziel des Fonts dar.

Unterschiedlichste Schriftsysteme werden unterstützt

Mittlerweile hat das Projekt einige Jahre Entwicklung hinter sich. 2011 gestartet werden über 64.000 Zeichen unterstützt, was in etwa die Hälfte der im Unicode definierten Zeichen ist. Dies schlägt sich allerdings in der Größe des Fonts nieder; im Moment belegt dieser knapp 1,5 Gibibyte auf der Festplatte. Deshalb ist er in unterschiedliche Dateien, mit den jeweiligen Schriftfamilien, aufgeteilt. Neben den unterschiedlichen Zeichen finden sich unterschiedliche Schnitte (wie z.B. Fett, Kursiv) im Font. Heruntergeladen kann der Font über die Projektseite von Google. Daneben kann die Entwicklung auf GitHub verfolgt werden. Lizenziert ist Noto unter der SIL Open Font License und damit freie Software.

LoadingCache der Guava-Bibliothek nutzen

Für Java existiert eine Bibliothek mit dem Namen Guava. Diese, von Google entwickelte, Bibliothek bietet gewisse Basisfunktionalitäten, welche vom Java-Framework nicht abgedeckt werden. Eine dieser Funktionalitäten ist der LoadingCache. Bei diesem handelt es sich um einen Cache, welcher dazu genutzt werden kann die Ergebnisse zeitintensiver Operationen zwischenzuspeichern. Daneben verfügt er über die Informationen wie er die entsprechenden Daten bezogen werden. Um Guava zu nutzen muss die Bibliothek z.B. mittels Maven eingebunden werden. Dazu muss die pom.xml-Datei um eine Abhängigkeit erweitert werden:

<dependency>
	<groupId>com.google.guava</groupId>
	<artifactId>guava</artifactId>
	<version>27.0-jre</version>
</dependency>

Anschließend kann Guava in dem betreffenden Projekt genutzt werden. In diesem Beispiel soll der Cache dazu dienen Anfragen an einen Webservice zu cachen. Der Webservice liefert Daten zurück, welche in einem Objekt vom Typ BookData gespeichert werden:

class BookData {

	public final String title;
	public final String description;
	public final double price;

	public BookData(String title, String description, double price) {
		this.title = title;
		this.description = description;
		this.price = price;
	}
}

Innerhalb der Anwendung übernimmt die Methode getBookData die Aufgabe, diese Daten vom Webservice zu beziehen:

public BookData getBookData(String isbn) {
	return bookdataService.getData(isbn);
}

Der LoadingCache von Guava ist technisch betrachtet eine Map. Bei der Initialisierung ist dies ersichtlich:

LoadingCache<String, BookData> books = CacheBuilder.newBuilder()
		.maximumSize(1000)
		.expireAfterWrite(7, TimeUnit.DAYS)
		.build(
				new CacheLoader<String, BookData>() {
					public BookData load(String isbn) {
						return getBookData(isbn);
					}
				});

Beim Anlegen des Cache können unterschiedliche Parameter wie die maximale Größe, die Zeit ab der ein Eintrag erneuert wird und der CacheLoader definiert werden. Der CacheLoader implementiert die Methode load, welche die entsprechenden Daten vom Webservice bezieht. Nachdem der LoadingCache definiert ist, kann die Map normal genutzt werden:

BookData bookData = books.get("9783736889842");

Im Hintergrund wird der Wert, wenn vorhanden, aus dem Cache bezogen. Ist dies nicht der Fall wird stattdessen der CacheLoader genutzt, welcher in diesem Beispiel einen Request an den Webservice sendet und das Ergebnis wieder im Cache hinterlegt. Der LoadingCache selber beschränkt sich auf die Laufzeit der Applikation und wird nicht persistiert.

Achievements aus der Zukunft

Achievements sind eine relativ neumodische Erfindung. Für ältere Spiele aus der 8 oder 16 Bit Ära existieren solche Achievements in den meisten Fällen nicht. Das bedeutet natürlich nicht, dass dies auf ewig so bleiben muss. Mit Retro Achievments hat sich eine Community gebildet, welche genau dieses Ziel erfolgt. Technisch gesehen werden dabei Bedingungen definiert, welche während des Spiels überprüft werden. So könnte ein Achievement für Sim City auf dem SNES überprüfen ob die Einwohnerzahl über einem bestimmten Wert liegt und ein entsprechenden Achievement freischalten.

Der Profilbildschirm von Retro Achievements

Unterstützung für die Retro Achievments findet sich in vielen Emulatoren, wie z.B. der Recalbox, welche intern RetroArch nutzt. Andere für die Retro Achievments nutzbare Emulatoren sind nur für Windows verfügbar. Zu finden ist das Projekt unter retroachievements.org. Das Projekt bzw. dessen Quellen sind auf GitHub zu finden. Die einzelnen Repositories sind unter freien Lizenzen wie der GPL lizenziert.