Monthly Archives: July 2008

KDE 4.1 veröffentlicht

Heute wurde ganz planmäßig KDE 4.1 veröffentlicht. Dies ist – besonders für mich – ein sehr wichtiges Release. Zum ersten Mal habe ich aktiv an einem freien Software Projekt mitgearbeitet und was mich dabei besonders freut, ist dass ich richtig tolles Feedback bekommen habe. So wird mein Effekt in der Release Note mit einenm Screenshot erwähnt und auch Aaron Seigo erwähnt es in seinem Interview über KDE 4. So was ist doch richtig tolles Feedback für einen neuen Contributor. :-D

KDE 4.1 hat natürlich sehr viele tolle neue Funktionen. Wer tatsächlich noch KDE 4.0 benutzt, sollte über einen Wechsel nachdenken. Vor allem Plasma hat sich richtig stark verbessert. Ich nutze 4.1 bereits seit etwa März/April produktiv, weil es einfach eine enorme Verbesserung ist. Ich habe übrigens nicht vor so früh im kommenden Release Zyklus auf 4.2 umzusteigen.

Mein persönliches Highlight ist – obwohl ich es nicht wirklich oft verwende – die OpenStreetMap Integration in Marble. Da freue ich mich schon richtig auf die Zukunft. Ansonsten Plasma und natürlich CoverSwitch (3D-Fenstergalerie). Eigentlich geschrieben um gut auszusehen, hat er sich bei mir zu einem der wichtigsten Werkzeuge entwickelt. Eben schnell was in einem anderen Fenster lesen -> alt+tab und direkt wieder zurück ohne Fokus-Wechsel.

Und für Windows und Mac Nutzer gibt es nun fast keine Ausrede mehr: KDE ist portiert und unterstützt die Platformen. Leider gibt es den Desktop nicht, dafür aber bereits viele Anwendungen. Die Portierung ist zwar noch nicht abgeschlossen und einiges funktioniert wohl noch nicht so richtig, dennoch ist es schon was zum ausprobieren ;-)

So ich mach mich jetzt daran einen weiteren Effekt für 4.2 zu schreiben ;-)

Hello Planet

Vegeta war so freundlich meinen Blog im ubuntuusers Planet hinzuzufügen, da dachte ich mir, ich stelle mich hier mal kurz vor.

Also ich heiße Martin Gräßlin, im Forum habe ich den Usernamen martingr. Ich bin Mitglied des Ubuntuusers Wiki-Teams und treibe mich daher im Forum Rund ums Wiki und im KDE Forum herum.

Seit Anfang des Jahres entwickel ich auch aktiv an KDE mit und im 4.1 Release wird nun auch ein bißchen Code von mir enthalten sein. Aktuell darf ich auch an einem Google Summer of Code Projekt für die KDE arbeiten. Meine meisten Artikel zur Zeit sind zu diesem kleinen Projekt ;-)

Dual Screen

Auch wenn ich es für absoluten Quatsch halte: der Würfel kann jetzt teilweise mit zwei Bildschirmen umgehen. Dabei werden zwei Arbeitsflächen so skaliert, dass sie auf einen Bildschirm passen. Ist nicht wirklich schön, aber anders geht es fast nicht. So sieht das ganze dann aus:

Die unangenehmen Sachen bei Dual Screen ist, dass es den Code richtig verunstaltet. Hatte ich mit einer größeren Änderung es endlich geschafft die perspektivische Projektion nicht mehr im Würfel zu definieren, musste ich es jetzt wieder reinnehmen, da alles perspektivisch verzerrt war. Auch die Animationen etc. funktionieren nicht mehr korrekt, bzw. müssen nun angepasst werden. Tja da muss ich durch ;-)

git

Ja es ist passiert. Ich habe auf git umgestellt. Ich hatte zuletzt einige noch nicht ins SVN eingespielte Änderungen und habe an verschiedenen Sachen gleichzeitig gearbeitet. Ohne Versionsverwaltung ein echtes Problem. Einen eigenen Branch im SVN wollte ich auch nicht mehr. Die Lösung des Problems: git

Nun kann ich auf meiner Festplatte commits vornehmen ohne auf einen externen Server angewiesen sein. Kann also weiterentwickeln an noch nicht eingespielten Bereichen und habe dennoch eine Versionierung.

Natürlich ist git noch etwas gewöhnungsbedürftig. Aber ich denke mal, dass ich mich so langsam aber sicher eh einarbeiten muss, da ich davon ausgehe, dass die KDE langfristig auch ein git verwenden wird. Mal abwarten.

Texturierte Cube Caps

So heute morgen hab ich mal wieder ein bißchen an meinem Würfel gearbeitet. Es ist nun möglich auf die Cube caps ein Bild abzubilden. Um eins klarzustellen: es wird nicht einfach möglich sein, das Bild zu wechseln. Ich werde keine Konfiguration dazu anbieten. Die Caps sind als Branding Bereich gedacht. Also für das KDE-Logo oder Kubuntu Logo oder OpenSuSE Logo. Für die Distributionen wird es einfach das Bild auszutauschen – für den Nutzer jedoch nicht. Wird aber dennoch möglich sein. Mit einem Blick in den Code wird es sofort ersichtlich.

So hier der obligatorische Screenshot (bitte entschuldigt die schlechte Qualität des Logos – ich bin zu dumm Inkscape zu bedienen):
Texturierte Cube caps

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: