Reguläre Ausdrücke online testen

Reguläre Ausdrücke sind mächtig. Wenn man einen solchen Ausdruck entwickelt z.B. um eine Zeichenkette zu extrahieren, ist es enorm hilfreich das ganze zeitnah zu debuggen. Mit der Webseite regexr.com gibt es dafür einen Dienst mit welchem eigene reguläre Ausdrücke schnell überprüft und getestet werden können. Dabei wird der Ausdruck auf der Seite eingegeben und anschließend gegen den angegebenen Text überprüft.

regexr.com

regexr.com

Daneben bietet der Dienst eine Reihe von Zusatzfunktionalitäten, wie die von Nutzern befüllte Bibliothek von regulären Ausdrücken für bestimmte Funktionalitäten. Der Quelltext des Dienstes ist auf GitHub zu finden – er ist unter der MIT-Lizenz lizenziert und damit freie Software.

Maven Enforcer Plugin temporär deaktivieren

Für das Build-Management-Tool Maven gibt es eine große Anzahl an Plugins mit welchen die Funktionalität von Maven erweitert werden kann. Eines dieses Plugins ist das Maven Enforcer Plugin. Dieses Plugin überprüft, ob die Abhängigkeiten zwischen JDK, Bibliotheken und vielem mehr gegeben sind. Ist dies nicht der Fall, wird der Kompiliervorgang abgebrochen. Möchte man diese Überprüfung temporär deaktivieren muss die Kommandozeile um den Parameter -D enforcer.fail=false erweitert werden:

mvn clean compile -D enforcer.fail=false

Damit wird die Funktionalität des Enforcer Plugins für den Vorgang deaktiviert. Mittelfristig sollen natürlich die Abhängigkeiten korrigiert werden, sodass der Vorgang mit aktiviertem Plugin erfolgreich durchlaufen werden kann.

sleep 31536000

Vor einigen Tagen schaute ich mir die Tasks unter einer Mac OS X Installation genauer an. Stutzig wurde ich bei einem Task in der Aktivitätsanzeige welcher folgenden Befehl ausführte:

sleep 31536000

Wenn man kurz nachrechnet wird man feststellen das dieser Sleep-Befehl einer Wartezeit von einem Jahr entspricht. Damit stellt sich die Frage was es mit diesem Befehl auf sich hat. Wenn man sich anschaut, wer für den Sleep-Befehl zuständig ist wird man feststellen das der GPG Agent diesen Befehl abgesetzt hat. Hintergrund für dieses Verhalten ist, das es nach Aussage der Entwickler keine einfachere Möglichkeit gibt ein Skript beim Herunterfahren des Systems auszuführen. Der entsprechende Commit im Repository erklärt das Verhalten genauer.

Git und „multiple stage entries“

Wenn man längere Zeit mit Git arbeitet, wird einem die eine oder andere seltenere Fehlermeldung über den Weg laufen. Eine dieser Fehlermeldungen ist:

fatal: multiple stage entries for merged file 'DBAdapter.cs'

Hintergrund bei diesem Problem ist das der Index, welcher die Änderungen und Dateien enthält mit welchem der nächste Commit erstellt wird, für eine Datei mehrere Einträge vorhält; was per Definition nicht der Fall sein sollte. Der Workaround für diese Problem besteht darin, den Index (bzw. die sogenannte Staging area) zu löschen, die Dateien erneut hinzuzufügen und das ganze mit einem Commit in Stein gießen:

rm .git/index
git add -A
git commit -a

Anschließend kann das Git-Repository wieder ohne Probleme genutzt werden.

Spaß mit dem Domain Name System

Wenn man einen Server betreibt oder bei IT-Problemen zur Stelle ist wird man früher oder später mit dem Domain Name System, kurz DNS zu tun haben. Das DNS löst dabei Namen wie z.B. die Domain seeseekey.net zur passenden IP-Adresse (im aktuellen Fall: 138.201.85.250) auf. Unter Linux und Mac OS X gibt es für die Abfrage von DNS-Servern das Tool dig. Der domain information groper kann dabei im einfachsten Fall so genutzt werden:

dig seeseekey.net

Damit werden die DNS-Informationen der Domain ermittelt und ausgegeben. Die Anfrage richtet sich dabei an den lokalen DNS-Server. Möchte man die Informationen von einem anderen Server abrufen, so ist dies mit dig ebenfalls möglich:

dig @213.133.98.98 seeseekey.net

Die IP-Adresse 213.133.98.98 ist die Adresse des DNS Servers, welcher für die Abfrage genutzt wird. Die Antwort sieht für den Fall von seeseekey.net so aus:

; <<>> DiG 9.10.3-P4-Ubuntu <<>> seeseekey.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15428
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;seeseekey.net.                 IN      A

;; ANSWER SECTION:
seeseekey.net.          59795   IN      A       138.201.85.250

;; AUTHORITY SECTION:
seeseekey.net.          59795   IN      NS      robotns3.second-ns.com.
seeseekey.net.          59795   IN      NS      ns1.first-ns.de.
seeseekey.net.          59795   IN      NS      robotns2.second-ns.de.

;; Query time: 3 msec
;; SERVER: 213.133.98.98#53(213.133.98.98)
;; WHEN: Tue Aug 30 09:12:35 CEST 2016
;; MSG SIZE  rcvd: 156