Warum nicht einen Keil?

Ich habe vorhin einige Änderungen am Cube committed. Die Innenwinkel werden nun in Abhängigkeiten der verwendeten Arbeitsflächen errechnet und auch die Texturzugriffe werden errechnet. Dies gibt uns einige weitere Möglichkeiten: wir sind nicht mehr auf einen Würfel beschränkt. So kann man nun auch mit 3 Arbeitsflächen einen Keil erstellen:
Keil

Mehr als 4 Seiten funktioniert leider noch nicht. Bei 5 Seiten treffen sich die zwei hinteren Flächen noch nicht. Aber das wird schon 😉

Ach ja wie man im Screenshot sehen kann ist die Performance nicht gerade die Beste. Das muss ich auch noch in Griff bekommen. Ist aber gerade nicht Prio A nachdem ich am Samstag die FPS Rate vervier bis fünfacht habe.

Wir haben einen Würfel

Heute habe ich meinen bisherigen Stand meines Summer of Code Projektes in das SVN Repository hochgeladen. Wer sich dafür interessiert: ich habe einen Branch angelegt: branches/work/soc-kwin-cube.
Die Quellcode Dateien finden sich in effects/cube.h und effects/cube.cpp. Aktuell ist der Code natürlich noch nicht wirklich gut. So werden nur vier Arbeitsflächen unterstützt und Rotation funktioniert auch noch nicht. Trotzdem kann ich schon einen Screenshot präsentieren:
Wie man sieht werden bereits Fenster um die Ecken herumgeklappt. Das ich dies so früh schon zeigen kann, freut mich besonders.

Arora: Ein neuer Browser entsteht

In Qt 4.4 wurde die von KHTML abstammende Rendering-Engine WebKit integriert. Um diese richtig ausprobieren zu können, hat Trolltech einen Demo-Browser geschrieben. Dieser ist nun die Grundlage für einen neuen Browser: Arora
Hier die Highlights:

  • Steht unter der GPLv2
  • Benutzt WebKit als Rendering-Engine
  • Plattformunabhängig, da auf Qt aufbauen
  • Anpassung an das System, da auf Qt aufbauend
  • Komplett neue Möglichkeiten für Webseite Entwickler, da QWidgets in die Webseite integriert werden können

Der Browser befindet sich noch unter starker Entwicklung, so gibt es zum Beispiel noch keine Unterstützung für Netscape Plugins, aber das wird. Abgesehen davon kann man das Fehlen von Flash durchaus als Feature bezeichnen 😀

Ich finde die Entwicklung sehr interessant. Wer mich kennt, weiß ja, dass ich Mozilla Firefox aus verschiedenen Gründen ablehne und Konqueror verwende. Firefox entwickelt sich in eine Richtung, die ich für einen quelloffenen Browser nicht gut heißen kann. Insbesondere die IceWeasel Geschichte ist für mich ein Grund diesen Browser nicht zu verwenden.

Ich halte sehr viel von der WebKit Engine und hätte gerne einen darauf aufbauenden Browser. Leider befindet sich der WebKit KPart für Konqueror noch in Entwicklung, wird jedoch im Rahmen eines Google Summer of Code Projekts vorangebracht.

Ein neuer wirklich schneller und freier Browser könnte noch einmal richtig Belebung in den Browser Markt bringen. Mögliche Unterstützer für so einen Qt/WebKit Browser gibt es natürlich genügend: Nokia (Besitzer von Trolltech) und Apple (Initiatoren des WebKit Projekts) zum Beispiel.

Natürlich geht das Ganze nicht ohne Screenshot:

Man sieht sehr schön, dass dieser Browser sich in die Oberfläche integriert und kein Fremdkörper ist.

Mehr Infos findet man auch in diesem Blog Eintrag: Arora, a WebKit browser in Qt

Irgendwie macht es mich ja schon stolz…

… dass in der Release Note zur Beta 1 mein CoverSwitch Effekt benannt und bebildert ist. Und dass Golem auch einen Screenshot davon abgebildet hat. Vielen Dank sebas. Das ist das beste Feedback, das man einem neuen Entwickler geben kann.

Nun noch zu was Technischem: Im Golem Forum hab ich natürlich sofort einen Troll-Post gelesen, in dem sich darüber beschwert wurde, dass CoverSwitch kein Antialiasing verwendet. Eigentlich würde ich solche Posts ignorieren, aber es ist ja was dran. Natürlich wäre es kein Problem Antialiasing einzuschalten und natürlich hatte ich das auch ausprobiert. Jedoch führt das zu einigen Problemen:

  1. der Effekt soll alte Karten ja nicht außer Gefecht setzen. Leider gibt es keinen API Aufruf kannstDuBlendingSchnell(). Somit würden besonders alte Intel Karten bei vielen Fenstern nicht mehr in der Lage sein den Effekt darzustellen.
  2. Antialiasing würde auf alles angewendet – also auch auf Schrift und auf Farbverläufe (wovon es in Oxygen sehr viele gibt). Das führt dann natürlich dazu, dass dann alles wie verschwommen aussieht. Ich hätte das ganze jetzt natürlich gerne mit einem Screenshot bewiesen, jedoch weigert sich CoverSwitch die Fenster zu zeichnen, sobald ich Antialiasing einschalte. Das sind nur drei Zeilen Code und werden an anderen Stellen selbstverständlich verwendet.

Mein erstes KDE-Event

Heute hab ich zum ersten Mal die KDE auf einer Messe unterstützt und zwar auf der OpenExpo in Karlsruhe. Hat mir sehr gut gefallen, hat Spaß gemacht und ich konnte zum ersten Mal ein paar KDE/Amarok Leute kennen lernen 😉 Wirklich alle sehr nett.

Und so wie es läuft wurde man auch gleich ins kalte Wasser geschmissen und ich durfte beim Vortrag die Effekte von KWin vorführen.

Schade, dass ich morgen nicht noch einmal hingehen kann (letzte Vorlesung vor Klausur) und auch nicht auf den Linuxtag kann.

Da freut man sich schon auf das nächste Event 🙂

Lichtmodelle

Ich höre zur Zeit die Vorlesung Computergraphik II, in der nun Shader programmiert werden. Heute habe ich eine beeindruckende Übungsaufgabe gelöst. Letzte Woche hatten wir das Gouraud Shading als Vertex-Shader implementiert. Also für jeden Vertex wird die Farbe berechnet abhängig von der Lichtquelle. Dies bezeichnet man auch als “Per-Vertex-Lighting”.

Nun sollten wir das Modell erweitern. Die Berechnung der Farbe sollte nicht mehr pro Vertex, sondern pro Pixel berechnet werden. Es sollte das Phong Shading implementiert werden. Dies ist natürlich bedeutend aufwändiger. Aber das Ergebnis rechtfertigt den Aufwand:

Links sehen wir das Gouraud-Shading, rechts das Phong-Shading. Wie man erkennt sind die Hightlights auf den Objekten bedeutend genauer im Phong-Shading. Auch die grüne Grundfläche wird im Gouraud-Shading praktisch überhaupt nicht beleuchtet.

Noch eindrucksvoller kann man das Ganze in diesem Vergleich erkennen:

Das Highlight am Rand sieht im Phong-Shading viel natürlicher aus.

Nun diese Aufgabe zeigt, dass man mit relativ wenig Aufwand die Bildqualität doch massiv verbessern kann und dass es sich durchaus lohnt in die Grafik zu investieren.

Antifeature

Wie Heise heute berichtete wird der Sender ProSieben erneut ein Kopierschutzsignal in sein digitales Fernsehprogramm einfließen lassen. Es wird also nicht möglich sein mit einem digitalen Recoder eine Sendung aufzuzeichnen und später anzusehen. Daher entfällt die Möglichkeit mittels Timeshift die Werbung zu überspringen. Aus Sicht des Senders sicherlich verständlich, schließlich basiert das Geschäftsmodell auf der Werbung. Ja man könnte sogar sagen, dass jede werbefreie Sendeminute dem Unternehmen Verlust einbringt.

Was mich eher stört ist die Tatsache, dass in die Festplattenrecorder ein Antifeature eingebaut wurde. Ein Feature, dass dem Anwender keinen Nutzen sondern einen Nachteil bringt. Schaut man über dasselbe Gerät das Fernsehsignal direkt an, so funktioniert dies einwandfrei. Es sollte ja nun kein Problem sein das digitale Signal auf eine Festplatte zu speichern und erneut abzuspielen. Nein dafür gibt es das Antifeature. Die Hersteller haben extra etwas eingebaut, damit, wenn der Sender ein Kopierschutzsignal mitsendet, die Aufzeichnung praktisch zerstört wird. Wie bei allen sogenannten Digital Restriction Management Lösungen frage ich mich warum der Verbraucher dies akzeptiert. Jedem Laien muss doch klar sein, dass wenn man das Signal empfangen und anschauen kann, man es auch speichern können muss. Warum rufen nicht die Zuschauer bei ProSieben an und beschweren sich?

Tja ich bin von dem Antifeature nicht betroffen. Der Festplattenrecoder, den ich einsetze, ist ein VDR. Eine Quelloffene Lösung, in der – selbst wenn jemand ein Antifeature implementieren würde – solche Nutzergängelungen nicht überleben können. Eine Lösung, die noch viel mehr kann als alle verfügbaren Festplattenrecorder. Nicht nur, dass sich diese Software nicht für das Antifeature interessiert, nein es schneidet mir sogar die Werbung automatisch raus, so dass man sie einfach überspringen kann. Mit wenigen Tastendrücken, wird aus der Aufzeichnung eine DVD erstellt und direkt gebrannt. Was will man mehr? Ach ja: live streaming. Aufzeichnen und gleichzeitig anderes Programm anschauen. DVDs abspielen, MP3 hören, etc etc.

Leute überlistet doch einfach die “Content Mafia”. Verwendet Quelloffene Lösungen und ihr könnt nicht mehr gegängelt werden. Denn Quelloffenheit bedeutet fasst immer auch Freiheit. Freiheit die Software dafür einzusetzen, wofür man sie einsetzen will. Die Freiheit fehlende Features zu implementieren oder Antifeatures zu entfernen. Die Freiheit die Software weiterzugeben.

Schlüssel auf USB-Stick für verschlüsselte Root-Partition

In diesem Artikel möchte ich mal ein kleines How-To schreiben wie ich meine Festplatte über einen Schlüssel auf einem USB-Key während des Bootens entschlüssele. Den Schlüssel für die verschlüsselte Festplatte auf einem USB-Key zu haben hat natürlich Vor- und Nachteile. Natürlich ist es eine Gefährdung für die Sicherheit, da jeder, der an den Stick drankommt auch an den Schlüssel kommt. Wenn man es schafft diese Gefahr zu reduzieren, bietet der Schlüssel einige Vorteile in der Bequemlichkeit. Man muss kein Passwort eintippen und die Festplatte wird “automatisch” entsperrt. Außerdem kommt man über einen Hardware-Keylogger nicht an das Passwort heran (jedoch ist das eher theoretischer Natur).

Ich setze nun folgendes Voraus: Es ist bereits eine verschlüsselte Partition über Cryptsetup angelegt und einer der Keyslots ist mit einem in einer Datei gespeicherten Schlüssel gefüllt. Außerdem ist der Boot-Vorgang so eingerichtet, dass von einer verschlüsselten Root-Partition gestartet wird.

Nun sollte man als erstes den USB-Stick als ext2 formatieren. Das hat zwei Vorteile: 1. man braucht keine Treiber für fat in die initrd integrieren. 2. sollte jemand mal aus Versehen an den Stick kommen, funktioniert er nicht unter Windows 😉
An der Stelle könnte man sich auch gleich die UUID des USB-Keys ausgeben lassen.

So nun kommen wir zum Kernstück des ganzen Vorhabens. Wir schreiben ein Skript welches das Passwort aus einer Datei auf dem USB-Stick liest und Cryptsetup zuführt. Cryptsetup unterstützt einen solchen Mode: es kann ein Skript angegeben werden, welches das Passwort zufüttert. Dabei ist es wichtig, dass JEDE Ausgabe des Skripts an Cryptsetup weitergegeben wird. Deshalb muss man alle Ausgaben auf stderr umleiten.
Mein Skript:

#!/bin/sh
modprobe usb-storage 1>&2
sleep 5
mkdir /usb 1>2&
mount -t ext2 /dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /usb 1>2&
sleep 5
cat /usb/root.key
umount /usb 1>2&

Wir sehen, dass Skript lädt als erstes das Treiber-Modul für USB-Sticks. Danach geben wir über den sleep dem System Zeit den Stick zu erkennen. Nun erzeugen wir den Mountpoint und binden den Stick ein. Erneut geben wir dem System etwas Zeit (hier kann man natürlich etwas herumspielen und die Zeit verkürzen). Nun geben wir einfach den Inhalt des gespeicherten Schlüssels aus und unmounten den Stick wieder. Beim Starten wird uns das ganze dann durch eine Success-Meldung angezeigt. An dieser Stelle kann man den Stick auch ohne Probleme wieder abziehen.

Nun müssen wir noch dem Cryptsetup mitteilen, dass wir ein Skript verwenden wollen. Dazu bearbeiten wir /etc/crypttab:

# target name|source device|key file|options
root /dev/vg1/vol1 none luks,retry=1,cipher=aes-cbc-essiv:sha256,keyscript=/path/to/keyscript

Wir sehen, dass entscheidende ist, dass bei “key file” “none” angegeben ist und bei den Optionen ein “keyscript=/path/to/keyscript” hinzukommt. Wenn man nun eine neue initrd erstellt, wird das Skript mit eingearbeitet.

Nun fehlt noch eins: die initrd braucht auch sämtliche Module um den USB-Stick überhaupt einbinden zu können. Sonst hat man ein Henne-Ei Problem. Der Treiber für den USB-Stick liegt im verschlüsselten System und um das System zu entschlüsseln, braucht man den Treiber. Dazu bearbeitet man die Datei /etc/initramfs-tools/modules. Hier müssen alle Module aufgelistet werden, die man braucht um den USB-Stick einzubinden. Da ich jetzt nicht genau weiß, welche es zwingen sind, gib ich mal meine komplette Datei an:

aes-x86_64
dm-crypt
dm-mod
sha256
sd_mod
usb_storage
usb-storage
ehci_hcd
ohci_hcd

Wenn ich jetzt nichts wichtiges vergessen habe, sollte man nun die initrd neue erzeugen können. Dies macht man über:
update-initramfs -u
Wichtig: erst mal nur die initrd für den aktuellen Kernel bearbeiten. Falls etwas nicht klappt, möchte man ja zumindest noch mit einem alten Kernel ein startfähiges System haben 😉

Nun ist der Zeitpunkt das ganze auszuprobieren. Reboot 🙂

Martin ist zu dumm…

… auf Worpress 2.5 upzugraden 🙁
Ich hab wp-content anstatt vom backup ins neue WordPress, vom neuen ins backup kopiert. Daher fehlen nun einige Bilder, etc. Ich hoffe noch ein altes Backup zu finden und werde in Zukunft auch das WordPress Verzeichnis in mein Backup Skript miteinschließen 😉

Also hier läuft jetzt auch WordPress 2.5. Fehler, die sich nicht aus obigem erklären, bitte melden.

Was passiert…

… wenn man Student bei Google Summer of Code ist?

Das Postfach explodiert 😉
Mailaufkommen
Ich hab nicht schlecht gestaunt, als ich heute morgen 300 ungelesene und unsortierte Mails in meinem Postfach entdeckt hatte. Es existiert eine Mailinglist, in der sich jeder Student vorstellen soll. Tja auf Grund von Zeitverschiebung konnte ich das nicht rechtzeitig reduzieren. Ich erwarte nun noch weitere 400 Mails.