seeseekey.net - Invictus Deus Ex Machina

Vor einigen Tagen begegneten mir einige Dateien, deren Inhalts größtenteils aus der Zeichenfolge EF BF BD EF BF BD EF BF BD (hexadizimal) bestand. Eigentlich sollte in den entsprechenden Dateien binäre Daten enthalten sein. Damit stellte sich nun die Frage: Was war passiert?

EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD

Auf den ersten Blick sah das ganze so aus, als ob ein Großteil der Datei durch Datenmüll ersetzt wurde. Schaut man sich die Zeichenfolge allerdings genauer an, so wird man feststellen das sich die Folge EF BF BD immer und immer wieder wiederholt. Bei dieser Zeichenfolge handelt es sich um die hexadezimale Schreibweise des Unicode-Zeichens für den Replacement Character welcher meist durch eine Raute mit einem Fragezeichen (�) dargestellt wird.

Eindeutiger wäre das Problem gewesen, wenn die erzeugten Dateien mit der Zeichenfolge EF BB BF begonnen hätte. Dabei handelt es sich um das Byte Order Mark für eine UTF-8 kodierte Datei. Damit wäre gleich klar geworden, das die enthaltenen Daten nicht zu einer Datei mit binären Inhalten passen. Doch wie sind diese Dateien nun entstanden? Der Ursprung der Dateien ist in einer Java-Applikation zu finden, welche diese Dateien erstellt. Diese kopierte die Daten von A nach B, im Quelltext (man ignoriere das fehlende try with resources) könnte das so ausgesehen haben:

FileInputStream fileInputStream  = new FileInputStream("binary.dat");
FileWriter fileWriter = new FileWriter("binary-copied.dat");

int byteData;

while ((byteData = fileInputStream.read()) != -1) {
    fileWriter.write(byteData);
}

fileInputStream.close();
fileWriter.close();

Hier wird ein FileInputStream geöffnet und dieser Stück für Stück mit einem FileWriter in die Zieldatei geschrieben. Genau an dieser Stelle entsteht das Problem – der FileWriter ist nämlich ein zeichenbasierter Writer, das bedeutet das sämtliche Zeichen, die mit diesem geschrieben werden, kodiert werden. Wenn nun bei dieser Kodierung ein Zeichen gefunden wird, welches nicht im Unicode abgebildet werden kann, so erhält dieses Zeichen den Wert EF BF BD – besagter Replacement Character. Damit ist dann auch erklärt warum die binären Dateien hauptsächlich nur noch aus diesen Zeichen bestanden. Die echten Daten wurden beim Kopiervorgang größtenteils schlicht und ergreifend in den Replacement Character konvertiert, da sich für diese Daten keine Entsprechung im Unicode fand.

Den freien Suchserver Elasticsearch kann man, wie das Wort Suchserver es dezent andeutet, als Server betreiben. Allerdings ist es manchmal nicht gewünscht einen dedizierter Server zu betreiben. In einem solchen Fall kann man den Elasticsearch-Server in eine Java-Applikation einbetten. Der sicherlich häufigste Fall für eine solche Einbettung ist dabei die Nutzung zu Testzwecken (z.B. Unit-Tests zum Test der Suchergebnisse). Im ersten Schritt sollte in das Java-Projekt die entsprechende Abhängigkeit zum Projekt hinzugefügt werden. In diesem Beispiel wird dabei auf einem auf Maven basierenden Projekt ausgegangen – in diesem muss die pom.xml entsprechend erweitert werden:

<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>2.3.4</version>
</dependency>

Damit wurde Elasticsearch dem Projekt hinzugefügt. Nun muss der eigentliche Server im Java-Projekt gestartet werden. Dafür werden nur wenige Zeilen Quellcode benötigt:

Settings.Builder elasticsearchSettings = Settings.settingsBuilder()
    .put("http.enabled", "true")
    .put("path.data", "data")
    .put("path.home", "home");

Node node = nodeBuilder()
    .local(true)
    .settings(elasticsearchSettings.build())
    .node();

In diesem Beispiel werden im ersten Schritt die Einstellungen für Elasticsearch definiert. Dabei wird unter anderem der HTTP-Modus aktiviert. Wenn dieser deaktiviert ist, ist die Kommunikation per HTTP nicht mehr möglich. Stattdessen kann dann nur noch die Kommunikation über das Transport-Interface genutzt werden. Dieses Interface wird im Normalfall für die interne Kommunikationen zwischen einzelnen Elasticsearch-Clustern genutzt – allerdings ist eine Nutzung mit dem Elasticsearch-Java-Client ebenfalls möglich. Mit dem aktivierten Modus, ist die Entwicklung einfacher (z.B. für den Einsatz von Analyse-Tools) und die Konfiguration näher an der Praxis. Standardmäßig horcht der Elasticsearch-Server dabei auf dem Port 9200 – in diesem Beispiel wäre er über die URL:

http://localhost:9200

erreichbar. Nachdem die Einstellungen angelegt wurden, werden diese dem NodeBuilder übergeben, welcher schlussendlich den Elasticsearch-Server hochfährt. Nachdem dieser hochgefahren wurde, kann die Nutzung des selben beginnen.

In den letzten Tagen war ich unter anderem damit beschäftigt einen Fehler in einem WordPress-Theme bzw. einer dort eingebauten Funktionalität zu finden. Sehr hilfreich hat sich dabei das WordPress Plugin Debug Bar bei der Fehlersuche erwiesen.

Preis: Kostenlos

Es integriert sich in die Admin Bar und bietet in der Basiskonfiguration einige Funktionalität, wie z.B. einen Query Editor. Neben dem eigentlichen Debug Bar-Plugin gibt es noch eine Reihe von weiteren Plugins, welche die Funktionalität der Debug Bar zusätzlich erweitern – so das man mit diesem Plugin viele Anwendungsfälle abdecken kann.

Bei WADL handelt es sich um die Web Application Description Language – eine Sprache mit der hauptsächlich REST-Services beschrieben werden. Auch wenn WADL in den letzten Jahren nicht mehr wirklich zum heißen Eisen gehört, wird es dennoch ab und an genutzt.

Ein WADL-Beispiel von Oracle.

Ein WADL-Beispiel von Oracle.

Möchte man eine solche WADL validieren, so kann man diese mit einem XML-Validator gegen das WADL-Schema validieren. Möglich ist dies z.B. mit folgendem Online-XML-Validator. Nachdem die zu überprüfende WADL im Validator eingetragen wurde, gibt man die URL:

https://www.w3.org/Submission/wadl/wadl.xsd

als Schema-URL an. Anschließend kann die XML-Datei gegen das XSD-Schema validiert werden.

Wenn man Let’s Encrypt Zertifikate erzeugt, so landen diese im Ordner /etc/letsencrypt/. Die Rechte sind dabei so gewählt das nicht privilegierte Prozesse auf diese Zertifikate nicht zugreifen können. Läuft nun z.B. ein Server mit solchen Rechten, so kann er das Zertifikat nicht ohne weiteres nutzen. Um diesem Umstand zu beseitigen sollte eine neue Nutzergruppe angelegt werden:

groupadd tls-certificates

Dieser Gruppe wird nun der Nutzer hinzugefügt, welcher den Serverdienst betreibt:

usermod -a -G tls-certificates git

Damit wird der Nutzer git der Gruppe tls-certificates hinzugefügt. Nun müssen nach der Zertifikatsgenerierung die Berechtigungen angepasst werden:

#!/bin/sh
service gogs stop
letsencrypt renew --agree-tos
chgrp -R tls-certificates /etc/letsencrypt
chmod -R g=rX /etc/letsencrypt
service gogs start

In diesem Skript wird im ersten Schritt der Service gestoppt. Anschließend werden neue Zertifikate erzeugt und die Berechtigungen angepasst. Damit kann die Gruppe tls-certificates auf die Zertifikate zugreifen. Danach wird der Service wieder gestartet, was nun dank Zugriff auf die Zertifikate ohne Probleme funktioniert.

Da ich im Moment vermehrt Schach spiele und ich einige Partien nachvollziehen wollte, habe ich ein Partieformular entworfen, welches ich hier ebenfalls zum Download bereitstellen möchte. In einem solchen Formular kann die Schachpartie notiert werden. Daneben finden wichtige Informationen wie die Namen der Spieler und ähnliches Platz auf dem Formular.

Die Rückseite des Formulars

Die Rückseite des Formulars

Während das eigentliche Formular die Vorderseite einnimmt, befindet sich auf der Rückseite, neben Platz für Notizen, eine Erklärung der Schachnotation, so das auch Einsteiger ohne Umschweife mit der Notation des Spieles beginnen können. Dabei wird die gebräuchliche algebraischen Notation mit samt ihrer Schreibweisen erklärt. Die Kürzel der Figuren und Anhänge werden dabei ebenso erklärt.

Möchte man bestimmte Seiten innerhalb eines WordPress umleiten, so gibt es neben der Möglichkeit dies über den Server zu tun, eine Reihe von Plugins. Für einen Einsteiger könnte die verwendete Syntax der meisten Plugins teilweise zu kompliziert (man denke nur an reguläre Ausdrücke und ähnliches) sein.

Simple 301 Redirects

Simple 301 Redirects

Einfacher kann diese Aufgabe mit dem WordPress-Plugin Simple 301 Redirects erledigt werden. Mit Hilfe des Plugins können einfach Umleitungen angelegt werden. Dabei werden Wildcards durch das *-Zeichen unterstützt und sind somit auch dem Einsteiger nutzbar. Das Plugin ist freie Software und unter der GPL2 (und neuer) lizenziert.

Preis: Kostenlos

In einer MySQL-Datenbank ändert man selten viele Daten auf einmal. Allerdings kommt dies trotz allem ab und an vor. Ein solcher Anwendungsfall wäre z.B. die Änderung einer Zeichenkette innerhalb einer Tabelle. Für MySQL gibt es hierfür die SQL-Funktion REPLACE, welche dies ermöglicht. Im Beispiel könnte das so aussehen:

UPDATE names SET forename = REPLACE(forename, 'Anja', 'Anne')

In diesem Beispiel wird in der Tabelle names das Feld forename bearbeitet. Dabei wird jedes Auftreten von Anja durch Anne ersetzt.

Mit Hilfe des Befehls dd ist es unter Linux und vielen anderen unixoiden Systemen möglich, eine Festplatte mit Nullen zu überschreiben. Ist die Festplatte dabei z.B. als sda im System registriert, so funktioniert das Überschreiben mit folgendem Befehl:

dd if=/dev/zero of=/dev/sda

Je nach Festplattengröße kann der Vorgang dabei durchaus einige Stunden in Anspruch nehmen.

Die letzten Stunden habe ich damit verbracht das Spiel To the Moon von Freebird Games zu spielen. Es handelt sich dabei um eine Art Rollenspiel, wobei es mehr interaktive Geschichte als Rollenspiel ist. Die Geschichte spielt im Amerika der Zukunft und handelt von einer Firma bzw. einer Agentur, welche die Erinnerungen von Menschen manipuliert. In dem Spiel wird die Agentur von einem sterbenskranken Mann beauftragt seine Erinnerungen so zu manipulieren, das dieser zum Mond geflogen ist. Der Mann weiß allerdings nicht warum er das Bedürfnis hat zum Mond zu fliegen und so versuchen die beiden Mitarbeiter der Agentur Dr. Rosalene und Dr. Watts herauszufinden, was es mit dem Wunsch auf sich hat. Sie reisen dabei von jüngeren zu immer älteren Erinnerungen auf dem Weg zur Lösung des Rätsels.

To the Moon

To the Moon

Das Spiel wirft dabei philosophische Fragen zum Wesen von Erinnerungen und der Frage ob man diese verändern darf auf. Dies wird besonders im letzten Drittel des Spieles mehr als deutlich. Trotz des teilweise doch recht ernstens Themas verliert das Spiel seinen Humor nicht, was an den beiden Hauptcharakteren – Mitarbeitern der Sigmund Corp. – liegt. So werden an vielen Stellen Anspielungen auf Serien, Filme und ähnliches untergebracht – unter anderem wird der Frage nachgegangen wie man einen Flügel in die TARDIS bekommt.

Preis: 7,99 €

Die Spielzeit von To the Moon beträgt etwa vier bis sechs Stunden. Neben dem eigentlichen Hauptspiel, existieren noch zwei kleinere DLCs mit einer Dauer von je zwanzig Minuten. Im Gegensatz zum Hauptspiel, welches in mehreren Sprachen, darunter auch Deutsch vorliegt, sind die DLC leider nur in Englisch (zumindest in der Steam-Variante, es gibt Übersetzungen zum herunterladen) vorhanden. Technisch wurde das Spiel mit dem RPG Maker XP realisiert. Das Spiel ist dabei für Mac OS X, Linux und Windows verfügbar. Mittlerweile befindet sich ein Nachfolger – genannt Episode 2 – in der Entwicklung welcher Ende 2016 bzw. Anfang 2017 erscheinen soll – in diesem soll es um einen neuen Patienten gehen.