seeseekey.net - Invictus Deus Ex Machina

Vor einiger Zeit stellte ich die Software FocusWriter (als Alternative zum iaWriter) für das ablenkungsfreie Schreiben vor. Daneben gibt es weitere Alternativen – einer dieser Alternativen ist WriteMonkey. Im Gegensatz zum FocusWriter wirkt WriteMonkey aufgeräumter, was der Schreiberfahrung zu gute kommt. Außerdem unterstützt WriteMonkey Markdown und ermöglicht so das Schreiben von strukturierten Texten.

WriteMonkey im Einsatz

Im Gegensatz zum FocusWriter steht der WriteMonkey leider nicht unter einer freien Softwarelizenz; sondern wird als Freeware vertrieben. Zu finden ist WriteMonkey auf der offiziellen Seite unter writemonkey.com.

Ab und an habe ich in diesem Blog Probleme mit Spam welcher nur einige Zeichen kurz ist. Diesem Problem wollte ich durch Mindestlänge für Kommentare unter WordPress lösen. Das hilft dann nicht nur gegen Spam, sondern kurbelt auch ein wenig die Kommentarkultur an (so die wage Hoffnung).

Die Einstellungen von Yoast Comment Hacks

Da WordPress von Haus aus die Einstellung einer Mindestlänge für Kommentare nicht zulässt, bediene ich mich des Plugins Yoast Comment Hacks.

Preis: Kostenlos

In den Einstellungen des Plugins kann nach der Installation des Plugins unter anderem eine Mindestlänge für Kommentare eingestellt werden. Daneben unterstützt das Plugin noch ein Reihe von anderen Funktionen welche sich auf das Handling von Kommentaren beziehen.

Das Shellskript ist fertig und wartet auf seinen Einsatz. Wer das eigene Skript vor dem Einsatz überprüfen möchte, sollte ShellCheck ausprobieren. Bei ShellCheck handelt es sich um ein Tool zur statischen Code-Analyse von Shell-Skripten. Neben allgemeinen Skriptfehlern, weißt ShellCheck dabei auch auf andere Probleme hin und schlägt Verbesserungen vor.

ShellCheck in Aktion

Neben der Webseite, welcher unter shellcheck.net zu finden ist, kann ShellCheck auch auf der Konsole ausprobiert werden. Das Tool ist unter der GPLv3 lizenziert und damit freie Software. Der Quelltext ist auf GitHub zu finden.

Wenn unter CentOS der Dienst FirewallD aktiviert ist und man eine wie auch immer geartete Serverapplikation auf dem Server betreiben möchte, wird man feststellen das der Dienst von außen nicht zu erreichen ist. Die einfache wenn auch nicht zielführende Möglichkeit wäre es natürlich die Firewall komplett zu deaktivieren. Sinnvoller ist es hingegen den entsprechenden Port welcher benötigt wird freizuschalten. Dies geschieht dabei mit dem Kommando:

firewall-cmd --zone=public --add-port=1234/tcp --permanent

Damit wird der Port 1234, wenn er über TCP angesprochen wird, in der Zone Public freigeschaltet. Die aktiven Zonen auf dem System können dabei mittels:

firewall-cmd --get-active-zones

angezeigt werden. Die Änderung der Regel wird dabei nicht sofort übernommen. Stattdessen müssen die Einstellungen neu geladen werden:

firewall-cmd --reload

Viele Netzwerke, wie z.B. öffentliche WLAN-Zugänge lassen Verbindung ohne Authentifikation zu. Nachdem man sich mit dem Netzwerk verbunden hat, muss man sich meist auf einem sogenannten Captive Portal anmelden. Dabei handelt es sich um eine Vorschaltseite, welche einem beim Aufruf einer Webseite angezeigt wird und der Anmeldung bzw. Identifizierung dient. Bei vielen dieser Netzwerken funktioniert die Kommunikation über das DNS-Protokoll ohne weitere Probleme (trotz Captive Portal) und Authentifikation, so das man diese nutzen kann um einen Tunnel ins freie Internet zu errichten.

code.kryo.se/iodine/

Eine Lösung um einen solchen DNS Tunnel einzurichten ist iodine. Mit iodine ist es möglich IPv4-Verkehr über DNS zu tunneln. Pro DNS-Request können dabei bis zu einem Kilobyte an Daten übertragen werden, was sich positiv auf die Performance und den Durchsatz auswirkt. iodine läuft dabei auf vielen unixodien Systemen, sowie unter Windows. Lizenziert ist iodine unter der ISCL und damit freie Software. Der Quelltext ist auf GitHub zu finden.

Das Terminal ist geöffnet und ein Befehl wie:

rm -rf img*

soll abgesetzt werden. Nun stellt sich die Frage ob man diesen Befehl wirklich so ausführen möchte. Natürlich könnte es sein, das der Befehl zu weit greift, was dazu führt das man mehr löscht als einem lieb ist. Einen Ausweg aus dieser Misere bietet das in Python geschriebene Tool maybe. Installiert werden kann dieses auf der Konsole mittels:

pip install maybe

Führt man nun ein Skript mittels maybe aus:

maybe test.sh

so ermittelt maybe, welche Operationen das Skript vornehmen möchte und zeigt diese an. Nach einer Bestätigung kann der Befehl anschließend ausgeführt werden. Technisch funktioniert das ganze dabei indem der Prozess unter der Kontrolle von ptrace ausgeführt wird. Hierbei werden allerdings nur einige Systemaufrufe blockiert, so das man maybe nur mit Skripten nutzen sollte, welchen man vertraut. Der Quelltext von maybe ist auf GitHub zu finden. Lizenziert ist das Tool unter der GPL in Version 3 und damit freie Software.

Vor ein paar Tagen stand ich vor dem Problem, das ich ermitteln wollte welche Distribution auf einem Server lief. Die Kernelversion einer Linux-Distribution kann dabei einfach über:

uname -or

ermittelt werden. Als Ausgabe erhält man z.B.

3.10.0-229.el7.x86_64 GNU/Linux

Um die Distribution weiter einzugrenzen könnte man Dateien nutzen welche sich auf eine bestimmte Distribution beziehen – unter Ubuntu wäre dies die Datei lsb-release. Distributionsübergreifender funktioniert die Ermittlung derselben mit:

cat /etc/issue

Für ein Ubuntu 14.04 LTS würde die Ausgabe dabei so aussehen:

Ubuntu 14.04.03 LTS

Bei bestimmten Distribution kann es allerdings auch bei der issue-Datei passieren, das diese Datei leer ist und man somit tiefer graben muss um die Distribution zu ermitteln.

Möchte man die installierte Standard-Firewall unter Cent OS 7 deaktivieren, so muss man sich am Dienst firewalld zu schaffen machen. Dieser kann dabei mit dem Kommando:

systemctl stop firewalld

gestoppt werden. Anschließend kann der Dienst mittels:

systemctl disable firewalld

dauerhaft deaktiviert werden. Mit dem Kommando:

firewall-cmd --state

kann nun überprüft werden ob der Dienst wirklich deaktiviert wurde. Wenn dies der Fall zeigt das Kommando die Ausschrift not running an.

Wenn man unter Java eine JSON-Datei schreiben möchte, so kann man dies natürlich von Hand tun. Einfacher und effizienter ist es allerdings wenn man das ganze mit der Bibliothek GSON erledigt. Dabei handelt sich um eine von Google entwickelte Bibliothek, welche ursprünglich für den internen Gebrauch bei Google gedacht war. Mit dieser ist neben vielen anderen Dingen unter anderem auch die Serialisierung von Java-Objekten in JSON möglich. Möchte man eine JSON-Datei manuell schreiben so nutzt man den von der Bibliothek bereitgestellten JsonWriter:

JsonWriter writer = new JsonWriter(new OutputStreamWriter(new FileOutputStream(new File("test.json")), StandardCharsets.UTF_8));

writer.setIndent("  "); // definiert die Einrückung

writer.beginObject();
writer.name("test");
writer.value("123");
writer.endObject();

writer.close();

Im ersten Beispiel wird ein einfaches Objekt in eine JSON-Datei geschrieben, was in der Datei schlussendlich so aussieht:

{
  "test": "123"
}

Natürlich ist es auch möglich beliebig viele Objekte in eine Datei zu schreiben und Arrays zu nutzen:

JsonWriter writer = new JsonWriter(new OutputStreamWriter(new FileOutputStream(new File("C:\\Temp\\test.json")), StandardCharsets.UTF_8));

writer.setIndent("  "); // definiert die Einrückung

writer.beginObject();
writer.name("persons");

writer.beginArray();

writer.beginObject();
writer.name("firstname");
writer.value("Hans");
writer.name("lastname");
writer.value("Meiser");
writer.endObject();

writer.beginObject();
writer.name("firstname");
writer.value("Luna");
writer.name("lastname");
writer.value("Bottom");
writer.endObject();

writer.endArray();

writer.endObject();

writer.close();

Heraus kommt dabei eine JSON Datei welche so aussieht:

{
  "persons": [
    {
      "firstname": "Hans",
      "lastname": "Meiser"
    },
    {
      "firstname": "Luna",
      "lastname": "Bottom"
    }
  ]
}

Zu finden ist die Bibliothek auf GitHub. Lizenziert ist die GSON-Bibliothek unter der Apache Lizenz und damit freie Software.

Wenn man JSON-Dateien erzeugt, kann es passieren das man bei der Erzeugung Fehler erzeugt. Zur Überprüfung solcher JSON-Daten kann man einen Validator nutzen, wie ihn jsonlint.com zur Verfügung stellt. Dort wird der JSON-Quelltext eingefügt und kann anschließend problemlos validiert werden. Bei Fehlern in der JSON-Datei, wird angezeigt wo diese entstehen und können damit beseitigt werden.

jsonlint.com

Der Quelltext von JSONLint kann auf GitHub bezogen werden. Er ist dabei unter der MIT-Lizenz lizenziert und damit freie Software.