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.

Telemetrie im Visual Studio Code deaktivieren

Visual Studio Code ist ein beliebter Quelltext-Editor welcher von Microsoft entwickelt wurde und unter der MIT-Lizenz lizenziert wurde und damit freie Software ist. Allerdings hat der Editor einige Features, welche im Zusammenhang mit Datensparsamkeit und Datenschutz eher suboptimal sind. Einer dieser Features ist die Telemetrieübertragung, welche dazu dient Informationen über die Nutzung von Visual Studio Code zu sammeln. Glücklicherweise kann diese Übertragung deaktiviert werden.

Die Telemetrie-Einstellungen im Visual Studio Code

Dazu müssen die Einstellungen geöffnet werden und dort nach der Zeichenkette telemetry.enableTelemetry gesucht werden. Anschließend findet sich dort eine Checkbox mit der die Telemetrieübertragung deaktiviert werden kann.

Feinstaub selber messen

Feinstaub wirkt in den Medien im Moment wie die ultimative Geißel des Menschheit. Problematisch an Feinstaub ist dass dieser nicht sichtbar ist und entsprechend tief in die Lunge vordringt. Da wäre es natürlich interessant zu erfahren, wie viel Feinstaub sich vor der eigenen Wohnung oder dem eigenen Haus befindet. Um dies zu messen wird ein entsprechendes Messgerät benötigt. Mit dem Bau eines solchen Messgerätes beschäftigt sich die Webseite luftdaten.info.

luftdaten.info

Neben einer Bauanleitung findet sich auf der Webseite weitere Informationen rund um das Projekt, z.B. um auf die API zur Abfrage der Daten zuzugreifen. Betrieben wird das Projekt vom OK Lab Stuttgart, welches zur Code for Germany Initiative gehört. Die Daten des fertigen Sensors können an luftdaten.info übertragen werden oder nur lokal genutzt werden. Quelltexte der verwendeten Soft- und Firmware sind auf GitHub zu finden. Lizenziert ist die Software unter der GPL in Version 3 und somit freie Software.

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.

Spring Projekte einfach anlegen

Das Anlegen eines Projektes mit dem Spring-Framework (bzw. unter Zuhilfenahme von Spring Boot) kann von Hand erfolgen. Einfacher ist es den Spring Initializr zu nutzen. Über das Webinterface kann die Art der Projektes, die gewünschte Sprache und Spring Boot-Version definiert werden. Anschließend können gewünschte Abhängigkeiten ausgewählt und das Projekt generiert und heruntergeladen werden.

Mit dem Spring Initializr können Projekte schnell angelegt werden

Eine Instanz des Projektes ist unter start.spring.io zu finden. Der Quelltext des Projekts ist auf GitHub hinterlegt. Lizenziert ist Spring Initializr unter Apache License in der Version 2 und damit freie Software.