Why proprietary software sucks

Ich hatte gerade das seltene Erlebnis eines Rechner Freezes unter Linux. Das passiert normalerweise nie. Selbst wenn es mal etwas wirklich nicht mehr gehen sollte, kommt man immer noch auf ein virtuelles Terminal und kann das System wieder zum Laufen bringen.
Diesmal nicht. Der Rechner war tot. Das hat mich wirklich gefreut, da ja nun mein RAID rekunstruiert werden muss, etc. Nun was hatte ich gemacht: ich hatte GoogleEarth benutzt! Da benutzt man einmal proprietäre Software und was passiert? Der ganze Rechner friert ein.
Nun gut nach dem Neustart hab ich mir gedacht ich installier mal die neueste Version von GoogleEarth. Da GoogleEarth ja keine Pakete anbietet, wollte ich mit make-googleearth-package mir wie zuvor auch ein Paket erstellen, um eine saubere Installation zu bekommen. Nun was ist? Make-googleearth-package teilt mir mit, dass es die Version nicht kennt, man aber trotzdem ein Paket erstellen kann. Kein Problem machen wir. Installiert. Alt+F2 und googleearth eingegeben. Was passiert? Nichts! Also über Konsole und siehe da:

Failed to load “/lib32/libIGGfx.so” because “/lib32/libIGGfx.so: cannot open shared object file: No such file or directory”

Tja man hat ja ein amd64 Betriebssystem. Ist ja kein Problem, alle Anwendungen sind portiert. Nichts da. Proprietäre Software wird doch nicht portiert. Und wo bekomme ich jetzt die Lib her? Es ist mir scheiß egal. Jetzt gibt es halt kein GoogleEarth. Liebe Leute von Google: ihr benutzt Qt für GoogleEarth. Es ist überhaupt kein Problem mal eben GoogleEarth für amd64 zu übersetzen. Es wird doch irgendjemanden in euere Firma geben, der amd64 verwendet und das bauen kann! Generell solltet ihr euch überlegen ausschließlich unter amd64 zu bauen – dort kann man auch i386 ohne Crosscompiler bauen.
Ach und noch was? Warum linkt ihr eigentlich statisch gegen Qt? Warum muss in GoogleEarth die komplette Qt Bibliothek mitgeliefert werden, obwohl sie sich auf meinem Rechner befindet? Warum sieht GoogleEarth wie ein Fremdkörper aus, obwohl meine komplette Desktop-Umgebung in Qt geschrieben ist? Warum muss ich mich manuell eine neue GoogleEarth Version installieren, wenn Qt einen Fehler hat und bei mir in der Paketverwaltung bereits aktualisiert wurde?
Fragen nichts als Fragen. Und die einzige Antwort ist: lasst die Finger weg von proprietärer Software. Das gefährdet die Systemsicherheit.

Und jetzt reichts. Als nächstes wird über Adobe Flash sich beschwert 😉

Lineare Algebra

Ja man glaubt es kaum: ich habe heute mein “Mathematik für Informatiker” Buch vorgeholt und nachgelesen wie man Matrizen multipliziert. Hätte ja nicht gedacht, dass ich in dem Bereich mal was programmiere…

Wie kam es dazu? Mein Würfel hat mittlerweile Caps erhalten. Das Problem ist, dass man die Caps in der richtigen Reihenfolge zeichnen muss, weil sie sonst entweder Arbeitsflächen überdecken oder von welchen überdeckt werden. Für den Normalfall nicht kompliziert: wenn die Hälfte der Desktops gezeichnet ist, müssen die Caps gezeichnet werden.

Nun ist es aber auch möglich den Würfel vertikal zu rotieren und das ändert alles. Jetzt müssen die Caps vor bzw. nach dem Zeichnen des Würfels gezeichnet werden, falls der Würfel so weit geneigt ist, dass die hintere Wand höher ist als die vordere.

Und nun wird es kompliziert. Ich dachte ja ich komme mit Dreicksmathematik daran. Geschicktes Einsetzen von Winkeln mit Sinus, etc. Nach mehreren Stunden hab ich es aufgegeben und erkannt, dass es nicht anders geht. Mir wurde klar ich muss die Y-Werte ausrechnen und miteinander vergleichen.

Nun wie macht das OpenGL? Es gibt zwei Matrizen: die Modelview und die Projection Matrix. Die Modelview enthält sämtliche aktuellen Transformationen, die Projection die perspektivische Verzerrung. Also muss man die Koordinaten mit der Modelview Matrix multiplizieren (hier brauchte ich mein Buch), diese dann noch einmal mit der Projection Matrix. Nun hat man tolle Werte, die man nach bestimmten Regeln dividieren muss um schlussendlich den Viewport darauf zu multiplizieren und hier ist der y-Wert. Das ganze kann man gleich vier mal machen um alle Werte zu erhalten.

So und nach einem Tag Programmieren, an dem ich eigentlich Lernen wollte, habe ich nun einen schönen Würfel mit Cube Caps:

Zylinder

So das waren jetzt einige Stunden Arbeit, aber nachdem ich gerade festgestellt habe, dass sin() und cos() die Werte in Bogenmaß und nicht in Grad wollen, habe ich nun meinen Würfel in einen Zylinder umgewandelt.

Das Ganze ist komplizierter als es auf den ersten Blick aussehen mag. Zuerst muss man die Fenster in viele kleine Quadrate aufteilen, damit ein Fenster durch mehr als nur vier Vertizes beschrieben wird. Nun kommt ein Shader zum Einsatz, der jeden Vertex verändert. Und zwar wird der Z-Wert des Vertex so verändert, dass er auf dem Kreis liegt. Dafür ist natürlich ein bißchen Mathematik nötig und wer mich kennt, weiß dass Sinus und Kosinus noch nie zu meinen Freunden gehörten 😉 Daher ist der Code aktuell auch nur Proof of Concept und wird auch in einen eigenen Effekt ausgelagert.

Was vier Zeilen Code doch ausmachen können

Ich habe lange darüber gegrübelt und mich gewundert warum mein Würfel bei n>4 Arbeitsflächen nicht korrekt gezeichnet wird. Gestern Abend hab ich mir des Problems mal angenommen (Dank der vertikalen Rotationsmöglichkeit konnte ich den Bug endlich genau betrachten) und nach etwa einer Stunde herumprobieren hatte ich eine Lösung für n<8 Arbeitsflächen. Heute hab ich dann noch einmal Zeit investiert und hab das Problem lösen können. Nun wird die geometrische Figur für allgemein n Arbeitsflächen korrekt aufgespannt. So wie im folgenden Screenshot für die maximale Anzahl von 20 Arbeitsflächen (nicht, dass der Effekt dann benutzbar wäre). 20 Desktops

Richtig überrascht hat mich dann der Blick in den Diff. Nur vier Zeilen Code wurden verändert. Tja manchmal reicht wenig um viel zu erreichen. Andererseits hab ich somit knapp eine halbe Stunde pro Zeile gebraucht 😉
Die Rotation funktioniert für n<>4 jedoch immer noch nicht korrekt 🙁

Skydome

Nur damit ihr nicht denkt ich hätte heute vergessen einen neuen Screenshot zu zeigen 😉
Hab mich heute mal an dem Skydome Support versucht. Wie man sehen kann mit Erfolg. Leider gibt es aber noch keine GUI zum Konfigurieren des Hintergrundbildes – man muss noch die Konfig Datei bearbeiten. Plasma hat einen sehr schönen Dialog zum Auswählen eines Hintergrundbildes. Den würde ich auch ganz gerne verwenden, befindet sich aber noch nicht in den KDE Libs. Mal schauen was sich machen lässt.

So hier der Screenshot:

Hoch und runter

Ich war heute mal richtig fleißig und es lief gut, daher gibt es jetzt schon wieder einen Screenshot 😀
Vertical and horizontal rotation
Wie man sieht, kann man jetzt um eine weitere Achse rotieren. Mit den Cursor-Tasten Hoch und Runter kann man den Würfel jeweils um 90° nach oben oder nach unten drehen. Nicht, dass man das wirklich bräuchte, aber Compiz hat’s auch 😉
Obwohl ich es zuerst nicht so implementieren wollte, kann man den Würfel gleichzeitig nach links/rechts und oben/unten drehen. Die Animationen beeinflussen sich gegenseitig zum Glück nicht. Auf dem Screenshot kann man jetzt auch die Spiegelung besser erkennen. Und man sieht auch, dass da noch nicht alles stimmt 😉

Spiegelung

Und mal wieder ein neuer Screenshot:
Cube with reflection
Ich weiß es ist schwer zu erkennen, aber der Würfel wird nun gespiegelt. Das erfreuliche ist, dass es keinerlei Auswirkungen auf die Performance hat. Auch neu ist, dass man nun eine eigene Hintergrundfarbe festlegen kann. Das hat mir mal wieder die Stärken von C++ und der KDE API gezeigt. Im Qt-Designer einfach nur einen KColorButton eingefügt, in der Config Klasse bei Speichern und Laden den Wert ausgelesen, im Effekt auch Auslesen und als ClearColor definieren. Wenige Zeilen Code und tolle Auswirkung. So macht programmieren Spaß 😉

Linus’ Law nr 76

Don’t claim to have a config option, if you don’t actually have the UI to change it[1]

Um behaupten zu können, dass der Cube konfigurierbar ist, habe ich heute den passenden Dialog geschrieben. Noch ist es nicht viel, aber alle Optionen funktionieren bereits. Ein neues Feature hat dabei auch noch Einzug gehalten: Der Name der aktuell ausgewählten Arbeitsfläche wird angezeigt – natürlich auch ausschaltbar.

Cube Konfiguration

[1]: https://lists.linux-foundation.org/pipermail/desktop_architects/2007-February/002338.html

Rotation

Nachdem ich diese Woche eine Klausur geschrieben hatte, kann ich mich nun wieder voll auf meinen Würfel konzentrieren. Der Würfel wird nun anders gezeichnet. Bisher wurde jede Seite zuerst als Texture gespeichert und danach auf den Würfel angebracht. Dies hab ich nun ausgeschaltet: jede Seite wird direkt gerendert. Das hat den Vorteil, dass es auch auf älterer Hardware läuft und bedeutend schneller ist (nun ca. 25-30 FPS). Aber die Änderung hat auch ein paar Nachteile. So funktioniert das herumklappen der Fenster um die Würfelecken zur Zeit nicht mehr. Leider hab ich aktuell noch keine Idee, wie man dies lösen kann…

Nun hab ich auch begonnen die Rotation zu implementieren. Funktioniert bereits für den Spezialfall von 4 Arbeitsflächen – dem klassischen Würfel. Mit den Cursor Tasten kann der Würfel nach links und rechts rotiert werden; über die Tasten 1-4 (oder größer) kann direkt zu der gewählten Arbeitsfläche rotiert werden und der Effekt wird dann beendet. Selbstverständlich sucht der Effekt den schnellsten Weg zum Rotieren.

Rotierter Würfel
Das neue Standardhintergrundbild von KDE 4.1 ist meines Erachtens nach sehr gelungen.

Das ewige gehupe – oder warum mich die EM solangsam annervt

Wie einige wohl wissen, wohne ich in der Mannheimer Innenstadt. Wie allgemein auch bekannt ist, gibt es in Mannheim sehr viele Mitbürger, die aus anderen europäischen Ländern stammen oder aus Ländern, die man bei bestimmten Wettbewerben zu Europa dazu zählt. Wie auch bekannt, findet zur Zeit solch ein bestimmter Wettbewerb, die Euro 2008, statt.

Nachdem sich die Vorrunde nun zu Ende neigt, beginnen die Spiele um 20:45 Uhr. Also enden sie gegen 22:40 Uhr mit der obligatorischen Nachspielzeit. Der ideale Zeitpunkt um die Autos zu besteigen in die Innenstadt zu fahren und kräftig auf die Hupe zu drücken. Man hat auch Ausdauer: eine halbe Stunde? eine Stunde? zwei Stunden? Alles kein Problem. Interessiert es mich, dass es in Mannheim auch Menschen gibt, die um 01:00 Uhr Nachts schlafen und nicht gehupe hören wollen? Vielleicht, aber unsere Mannschaft hat doch gewonnen!

Angefangen hat alles mit dem Spiel Schweiz gegen Türkei. In der Nachspielzeit erzielen die Türken den Siegtreffer: das ist ein Nationalereignis: “Ja wir haben einen Sieg”. Hat man zu dem Zeitpunkt schon etwas erreicht? Nein – ein Sieg im zweiten Spiel, noch nicht für das Viertelfinale qualifiziert. Trotzdem das muss gefeiert werden.

Dank des italienischen Unentschieden und der deutschen Niederlage hatte man in Mannheim erst mal wieder Ruhe. Bis, nun ja, bis die Türken wieder spielten. Sie lagen bereits 2:0 zurück gegen stark spielende Tschechen. Man freute sich auf eine ruhige Nacht… und was passiert: der tschechische Torwart greift daneben und die Türkei dreht das Spiel und qualifiziert sich für das Viertelfinale. An dem Punkt etwas erreicht? Den Titel gewonnen? Trotzdem ein Grund zu feiern – wieder eine schlaflose Nacht.

Nächster Abend: Deutschland gegen Österreich. Deutschland spielt schlecht, schwach. Das Highlight der Rausschmiss der Trainer auf die Tribüne. Deutschland gewinnt und qualifiziert sich auch für das Viertelfinale. Stellt das Erreichen des Viertelfinales wirklich ein für Deutschland bereits angemessenes Ziel da? Ist alles unter Erreichen (falls Deutschland nicht weiter kommt) des Finales nicht eine Niederlage? Gibt es also einen Grund zu hupen? Dennoch – man muss ja zeigen, dass die deutsche Bevölkerung mit den Türken es aufnehmen kann. Die Herausforderung wurde angenommen – auch wenn beim Lautstärkeduell klar die Türken (noch) vorne sind.

Dienstag: Man freut sich – heute gibt es für keine Minorität einen Grund zu feiern. Holland wird schön brav verlieren (sind ja sicher Gruppensieger) und Italien und Frankreich fahren nach Hause. Tja Rechnung geht nicht auf: Holland gewinnt, Italien gewinnt. Italien qualifiziert sich ebenfalls für das Viertelfinale. Ist das Erreichen des Viertelfinales wirklich ein Grund zu feiern, wenn man von Holland abgeschlachtet wurde (im ersten Spiel) und man amtierender Weltmeister ist? Offensichtlich ja: es wurde wieder gehupt.

Heute: ja heute: Es spielt Griechenland, Spanien, Rußland und Schweden. Meine Hoffnung liegt darin, dass die Minoritäten zu klein sind um mich wach zu halten…

Und die Zukunft: Morgen spielt Deutschland. Übermorgen die Türkei. Hoffnung: der türkische Torwart ist gesperrt – er war gegen Tschechien klar der beste Mann. Ja die Hoffnung stirbt zu Letzt. Liebe Kroaten schmeißt die Türken raus – ich möchte schlafen. Am Sonntag spielt Italien gegen Spanien. Auch hier gibt es Hoffnung – überzeugen konnte ja Italien bei dieser EM noch nicht.

Zum Glück ist am Dienstag – am Tag vor einer Klausur – spielfrei. Da werde ich also schlafen können. Und dann nur noch drei Partien… Es gibt Hoffnung auf ruhige Nächte – und wenn Deutschland gewinnt: dann muss ich auch nicht schlafen 😉