Seiten

Donnerstag, 30. August 2012

Gefährlicher Java7 ZeroDay Exploit

Java 7 (also Version 1.7) sollte man beim Surfen im Web wohl eher nicht verwenden. Grund dafür ist eine Sicherheitslücke, die aus dem Design der JRE hervorgeht. Mit deren Hilfe ist es einem Angreifer möglich, Schadprogramme nach Belieben auf den Rechner des Opfers zu bringen.

Die Sicherheitslücke betrifft dabei soweit bisher bekannt alle Web Browser sowie alle Betriebssysteme (mit installierter Java 7 JRE).

Dienstag, 14. August 2012

xz Kompression für schnelleren Linux Boot

Eine einfache, und doch auch recht ergiebige Methode, um den Bootvorgang unter Linux - bei mir Arch Linux - zu beschleunigen ist, das System weniger Daten von der Festplatte laden zu lassen.

Um dieses Ziel schon zu Beginn des Startvorgangs umzusetzen, ist das initramfs meist komprimiert. Dadurch wird der Flaschenhals Festplatte auf Kosten von mehr CPU Rechenzeit umgangen. Bei einer einigermaßen schnellen CPU lohnt sich das dann auch ganz gut!

Per Default wird dieses Image mittels gzip komprimiert. Das rührt vermutlich daher, dass gzip etablierter Standard in der Linux Welt ist.

xz bietet jedoch eine höhere Kompression. Natürlich auf Kosten von noch mehr CPU Rechenzeit. Wer also eine "schnelle" (bei mir ein Intel(R) Core(TM)2 Duo T9400 ... also nichts weltbewegendes) CPU hat, sollte mal versuchen, auf xz Kompression beim Booten zu setzen.

Unter Arch Linux lässt sich diese Einstellung in /etc/mkinitcpio.conf vornehmen:

# COMPRESSION
# Use this to compress the initramfs image. By default, gzip compression
# is used. Use 'cat' to create an uncompressed image.
#COMPRESSION="gzip"
#COMPRESSION="bzip2"
#COMPRESSION="lzma"
COMPRESSION="xz"
#COMPRESSION="lzop"

# COMPRESSION_OPTIONS
# Additional options for the compressor
#COMPRESSION_OPTIONS=""

Eventuell lassen sich noch weitere Verbesserungen erzielen, in dem die --extreme Option übergeben wird. Dadurch dauert die Komprimierung länger, dafür ergibt sich aber (unter Umständen) ein besserer Kompressionsgrad.

Durch obige Anpassung spare ich mir etwa eine Sekunde beim Hochfahren.

Liebe Grüße,
Daniel

networkmanager/modemmanager und Ericsson F3507g

nm-applet unter gnome3
Das Ericsson F3507g, was in meinem Thinkpad verbaut ist, funktioniert (zum Glück) eigentlich einwandfrei zusammen mit Linux bzw. dem aktuellen NetworkManager.

Die Verbindung klappt und NetworkManager kann das Modem auch aus dem Standby holen.

Nur wieder in den Standby zurückbringen, das ging bisher nicht. Der entsprechende Button (siehe Bild rechts) ließ sich natürlich anklicken, die Oberfläche suggerierte (wie im Bild) dann auch, dass das Modem aus sei, aber die zugehörige LED enttarnte den Schwindel.

Also habe ich dazu einen Bug Report geschrieben, der lange Zeit ... naja, einfach nur existierte.

Vor ein paar Tagen habe ich dann die Mail bekommen, dass mein Report ein Duplikat von einem anderen Report sei, worauf hin ich auf die Sache wieder aufmerksam geworden bin.

Also auf Aufforderung / Anleitung eines der Entwickler von Modemmanager (die dafür zuständige Komponente, bzw. das Backend) ein paar Tests durchgeführt, den möglichen Fix überprüft und bestätigt und wieder funktioniert ein Teil meines Laptops besser :)

Wer nun auch so ein Modem hat und unter dem gleichen Problem leidet, der kann Modemmanager aus dem Quelltext selbst kompilieren und hat so die Verbesserung gleich verfügbar.

Für Arch Linux habe ich hier auch gleich ein leicht modifiziertes PKGBUILD, das Original ist von modemmanager-git:
PKGBUILD

Die einzige Änderung ist in Zeile 27, und dient dazu den Branch mit dem Fix auszuwählen:
git clone -b MM_05 $_gitroot $_gitname

Liebe Grüße,
Daniel

Samstag, 4. August 2012

Quaternionen, 3D Welten (und mehr)

Ich verzweifle gerade etwas an den Umrechnungen zwischen unterschiedlichen Referenzsystemen des Quadrocopters.

Da ist zum einen das "globale" Referenzsystem, das sich im Falle das Quadrocopters z.B. gut auf eine Karte der Umgebung abbilden ließe (z.B. 10 Meter nördlich vom Startpunkt)

Auf der anderen Seite bekommen die Sensoren allerdings nur das lokale Referenzsystem des Quadrocopters mit, die Sensoren können also z.B. nur messen "Beschleunigung mit 5m/s² nach vorne".
Um dieses "nach vorne" nun in das globale Referenzsystem umzurechnen (um letztendlich die neue Lage bestimmen zu können) benötigt man die aktuelle Rotation (Orientierung) des Quadrocopters und damit der Sensoren.

Die Orientierung lässt sich hervorragend mit Quaternionen beschreiben, vor Allem lassen sich so mehrere Rotationen in eine einzige Rotation zusammenfassen.

Z.B. drehe ich mich erst um 33° um X, dann um 65° um Z, dann um 199° um Y, dann wieder 12° um X, dann nochmal 50° um Z und schließlich 20° um Y.
Wo ich jetzt bin kann ich berechnen, in dem ich jede der Rotationen nacheinander ausführe. Einfacher ist es jedoch, all diese Rotationen (in der richtigen Reihenfolge) zusammenzufassen, sodass am Ende 1 Drehung um eine Achse (a, b, c) zum gleichen Ergebnis führt.

Diese zusammengefasste Information ist in einem Quaternion gespeichert.

Will ich nun einen Vektor (z.B. den Vektor der Beschleunigung, geliefert von einer IMU) aus seinem lokalen Referenzsystem in das globale transformieren, dann muss ich "nur" das Sandwichprodukt mit dem Quaternion welches die Lage beschreibt berechnen.

Das Sandwichprodukt ist dabei:

v2 = q' * v1 * q

v1 := Vektor im lokalen System
v2 := Vektor im globalen System
q := Quaternion der aktuellen Lage
q' := konjugiertes Quaternion
* := Quaternionenmultiplikation

Klingt einfach, ist in der Praxis dann aber doch ziemliches Formelwirrwarr.

Eine Seite, die dem Ganzen einen Sinn und einen Hintergrund geben kann, ist z.B. folgende:

www.euclideanspace.com

(speziell hier, die Navigation auf der Seite ist etwas missglückt)

Mittwoch, 1. August 2012

git letzten commit rückgängig machen

Leider vergesse ich oft noch kleine Änderungen, wenn ich einen commit mache. Die sind dann natürlich nicht im commit enthalten, einen extra commit a la "Ach übrigens das fehlt noch" halte ich für Unsinnig, also muss der letzte Commit rückgängig gemacht werden:

Die Erklärung ist eine kurze Zusammenfassung / Übersetzung von dieser stackoverflow.com Antwort.

git fast forward merge rückgängig machen

Ich arbeite gerade mit git und wollte die Änderungen aus einem Branch (speziell für ein Issue) nach master übernehmen.

# On branch master
git merge ISS#NR

Hat auch soweit funktioniert, allerdings hat git ein fast forward merge daraus gemacht. D.h., die commits vom branch ISS#NR sind nun auch in master zu finden.

Da mir das nicht gefällt habe ich den merge rückgängig gemacht:

git reflog show master

Die Ausgabe sieht z.B. so aus:

##### master@{0}: merge ISS#NR: Fast-forward
##### master@{1}: commit: ....
 

Ein

git reset --keep master@{1}

hat mich dann in die Ausgangslage vor dem merge gebracht.

Einen merge mit commit (also ohne fast forward) konnte ich dann so erreichen:

git merge --no-ff ISS#NR

Vielleicht hilft es ja noch jemanden :)