Donnerstag, 16. Juni 2016

Unix Befehle

Eine Liste von eher unbekannten Unix Befehlen und Ihre Anwendung

paste

paste kann als Join eingesetzt werden. Dabei werden die einzelnen Zeilen zu einer Zeile zusammengefügt. Als Trenner wird TAB eingesetzt. Alternativ können Trenner mit Hilfe des Parameters -d angegeben werden.

Beispiel:

ls -1 | paste -s 

comm

Vergleicht zwei sortierte Dateien Zeile für Zeile. Sind die Zeilen in beiden Dateien enthalten, werden sie in der dritten Spalte ausgegeben. Sind sie nur in der ersten Datei enthalten, werden sie in der ersten Spalte ausgegeben. Zeilen, die nur in der zweiten Datei enthalten sind, landen in der zweiten Spalte.
Mittels Parametern kann man die Ausgabe der Spalten unterdrücken.

Beispiel:

$ cat 1
a
b
c

tmp$ cat 2
b
c
d

$ comm 1 2
a
		b
		c
	d

column

Der column Befehl erstellt eine Tabelle aus dem Input. Dies kann z.B. verwendet werden, um eine einfache CSV Datei auf dem Bildschirm darzustellen.

Manchmal nützlich

factor

Zerlegt eine Zahl in ihre Primfaktoren

$ factor 666
666: 2 3 3 37

numfmt

Formatiert eine Zahl in SI oder IEC Einheiten und umgekehrt

$ echo 1000000 | numfmt --to=iec
977K
$ echo 1M | numfmt --from=iec
1048576

Dienstag, 7. Juni 2016

Java Fallen

Auch in Java gibt es ein paar Fallstricke, die man kennen muss, um nicht über sie zu stolpern.

Integer Caching

Eine relativ bekannte Sache betrifft das automatische Caching von Integer Werten. Hier werden per Default (JLS7 5.1.7) die Werte zwischen -128 und +127 gecached, so dass zum Beispiel ein Integer.valueOf(10) immer das gleiche Objekt zurückliefert. Die führt dazu, dass folgendes gilt:

Integer.valueOf(10) == Integer.valueOf(10); // true
Integer.valueOf(1000) == Integer.valueOf(1000); // false

Weniger bekannt ist, dass nur der untere Wert fix ist. Der obere Wert lässt sich über die Property java.lang.Integer.IntegerCache.high einstellen.

Double equals behavior

In der Dokumentation ist es zwar vermerkt, aber wer liest schon Dokumentation?

Für einige Grenzfälle verhält sich die equals Methode der Klasse Double anders, als der Vergleichsoperator == des double Typs.

So gilt für NaN (Not A Number) Werte:

Double.NaN == Double.NaN; // false
Double.NaN.equals(Double.NaN); // true

Weiterhin gilt für die vorzeichenbehaftete 0:

+0.0 == -0.0; // true
Double.valueOf(+0.0).equals(Double.valueOf(-0.0)); // false 

Montag, 6. Juni 2016

MacOS: Terminal Output ins Clipboard

Als langjähriger Unix Benutzer verwende ich gerne auch in MacOS ein Terminal, um mir meine Arbeit zu erleichtern. Kurze Ergebnisse lassen sich auch leicht per Copy&Paste in eine andere Applikation tragen. Was aber, wenn das Ergebnis mehr als ein paar Zeilen lang ist? Hier kann man das Ergebnis mittels des Befehls pbcopy in das Clipboard übernehmen. Zum Beispiel:

find . -name "*.java" | pbcopy