Java und vorzeichenlose Typen

Zur Entwicklung von Anwendungen nutze ich im Normalfall die Programmiersprache C#. In dieser gibt es sogenannte Signed und Unsigned-Datentypen. Im Deutschen würde man dazu vorzeichenbehaftete und vorzeichenlose Typen sagen. Bei einem vorzeichenbehafteten Typ wird die Hälfte des Wertebereiches für die Darstellung negativer Zahlen und die andere Hälfte für die Darstellung positiver Zahlen genutzt. Dies führt allerdings dazu das man die Hälfte des positiven Wertebereiches einbüßt. So gibt es für den UInt32 und den Int32 unter C# bzw. der CLR folgende Wertebereiche:

UInt32    0 bis 4.294.967.295
Int32    −2.147.483.648 bis 2.147.483.647

An dieser Stelle spielen vorzeichenlose Datentypen ihre Stärke aus, da sie über einen größeren Wertebereich für positive Zahlen verfügen – bei gleichem Speicherverbrauch. So ist die Nutzung vorzeichenloser Datentypen immer dann interessant, wenn man größere positive Zahlen speichern möchte. Wenn man sich nun die Datentypen bei Java anschaut, so wird man feststellen, das es unter Java keine vorzeichenlosen Typen (mit der Ausnahme des 16 Bit großen Typs char) gibt. Möchte man nun z.B. die Werte von 0 bis 255 speichern, was bei der Verarbeitung von Daten aus bestimmten Dateiformaten vorkommt, müsste man in Java hierfür einen short (16 Bit) anstatt eines byte (8 Bit) nutzen, da selbst das byte unter Java vorzeichenbehaftet ist und nur den Bereich von -128 bis 127 abbilden kann. Möchte man diesen zusätzlichen Speicherplatz nicht hergeben, so gibt es auch unter Java eine Möglichkeit größere Werte in einem byte zu speichern:

byte unsigned = (byte)200;
int value = (int)unsigned^-256;

In der ersten Zeile wird die Zahl 200 gecastet und der Variable unsigned zugewiesen. Das Bitmuster in der Variable entspricht dann der Zahl 200. Da der Typ allerdings als vorzeichenbehaftet interpretiert wird, würde ein:

System.out.println(unsigned);

zur Ausgabe der Zahl -56 führen. Möchten wir den Wert der Variable vorzeichenlos ermitteln, muss eine XOR-Operation mit -256 ausgeführt werden, welche schließlich zum Ergebnis 200 führt.

Verbindungsausetzer der Magic Mouse beheben

Die Magic Mouse von Apple ist mittels Bluetooth an den Rechner angebunden und funkt auf einer Frequenz von 2,4 Ghz. Unter Umständen kann es passieren das diese Frequenz gestört wird. Dies kann zu Aussetzern führen, welche sich darin äußern das die Verbindung der Maus mit dem Rechner unterbrochen wird.

Eine Magic Mouse von Apple

Eine Magic Mouse von Apple

Eine Ursache für dieses Problem kann ein bestehendes WLAN sein, welches auf einem der höheren Kanäle (7 – 13) betrieben wird. In einem solchen Fall kann es hilfreich sein den Kanal des 2,4 Ghz WLANs auf einen der niedrigen Kanäle einzustellen. Dies verringert die Störungen welche zwischen dem WLAN und dem Bluetooth auftreten können.

Mittels ffmpeg Videomaterial deinterlacen

Unter Umständen kann es vorkommen, das man viele Videodateien bearbeiten muss, welche in Halbbildern vorliegen. Möchte man diese nun in progressives Material (nur Vollbilder) umkodieren, so kann das freie Tool ffmpeg sehr hilfreich sein. Auf der Konsole sieht die einfachste Variante des deinterlacing dabei so aus:

ffmpeg -i InputFile -vf yadif OutputFile

Möchte man die Datei bei dem deinterlacen gleich umkodieren, so ist dies mit ffmpeg in einem Rutsch möglich:

ffmpeg -i InputFile.mp4 -c:v libx264 -preset slow -crf 18 -c:a copy -vf yadif OutputFile.mkv

In diesem Fall wird das Eingangsvideo in H.264 umkodiert und gleichzeitig das Material deinterlaced. Je nach Video nimmt der Vorgang etliche Minuten bis Stunden in Anspruch.

MediaWiki Historie bereinigen

Wenn man Artikel in einer MediaWiki löscht, so werden diese Artikel und deren Historie weiterhin vorgehalten. Problematisch wird dies wenn man z.B. eine größere Menge an Artikeln entfernt hat. So etwas kann unter anderem im Rahmen der Spam-Bekämpfung vorkommen. Im maintenance-Ordner der MediaWiki-Installation gibt es für solche Zwecke das Skript deleteArchivedRevisions.php. Wird dieses auf der Konsole ausgeführt:

php deleteArchivedRevisions.php --delete

wird die Datenbank um historische Einträge bereinigt. Die Historie von nicht gelöschten Artikeln wird dabei beibehalten, so das wirklich nur der unnötige Ballast entfernt wird.

Zeilennummerierung unter nano aktivieren

Auf vielen unixoiden Systemen gibt es den Texteditor nano. Im Standardmodus ist die Anzeige der Zeilennummerierung unter nano deaktiviert. Möchte man dies ändern so muss der Parameter -c beim Aufruf des Editors angetragen werden:

nano -c config.cfg
nano mit aktivierter Anzeige der Zeilennummerierung

nano mit aktivierter Anzeige der Zeilennummerierung

Damit zeigt nano im unteren Bereich unter anderem die Zeilennummer an, so das man eine bestimmte Zeile bei Fehlern schnell finden kann.