Bretzn vorgestellt

Der Bretzn Qt Creator PluginSoftwareentwicklung ist eine nicht ganz triviale Sache. Erstmal muss man natürlich programmieren können — das ist der spassige Teil. Hat man dann allerdings etwas Cooles geschrieben, muss man noch dafür sorgen, dass es irgendwie zum Anwender kommt, und dort in’s System integriert wird. Dass heisst für Linux, dass man Pakete braucht, und ein Repositorium um diese bereit zu stellen. In Zukunft kann man hier auch an Appstores denken, hierzu allerdings später mehr. Um also einerseits dafür zu sorgen, dass die Software installiert werden kann, andererseits aber auch dass die Entwicklung und Bereitstellung für Entwickler attraktiv ist — und damit das Angebot an Software vergrössert — sollte der Prozess so einfach wie möglich sein.

Vom Code zum Paket

In den letzten Monaten haben wir bei open-slx daran gearbeitet, den Prozess vom funktionierenden Code zu installierbaren Paketen zu vereinfachen. Wir haben uns also mit Nokia und h i v e 01 zusammengesetzt, und einen Plugin für Qt Creator entwickelt, der es einfach, fast trivial, macht, Code zum openSUSE (oder MeeGo) Buildservice hochzuladen, dort zu übersetzen, und als Paket bereitzustellen. Hierzu haben wir libattica erweitert, eine Bibliothek, die die Open Collaboration Services in einer API in Qt Stil anbietet. Auf diesen API Erweiterungen baut ein Plugin auf, der es möglich macht, mit ein paar Mausklicks Software zu paketieren, und dann über die Repos die am OBS hängen anzubieten. (Dies hat zwei Vorteile: RPM Spec-Dateien werden automatisch erstellt (das passiert auf dem OCS Server, der die Kommunikation mit dem OBS relayt), und die Software kann vom OBS für verschiedene CPU Architekturen und Betriebssysteme paketiert werden, was die ganze Arbeit erspart, Entwicklungsumgebungen für allerlei unterstützte Systeme vorzuhalten.

Im Video kann man sehen, wie das funktioniert. Es werden einige Metadaten eingegeben, Accounts eingestellt, und der Code wird hochgeladen. Danach kann man einfach den Buildjobs für verschiedene "Targets" anstossen, sodass das Paket dann z.B. für openSUSE 11.3 auf einem 64 Bit Intel System läuft. Der Prozess verläuft dann grösstenteils in der "Cloud", d.h. auf dem OCS und OBS Servern. Auf dem Client braucht man ausser der eigenen "normalen" Entwicklungsumgebung nur den Qt Creator Plugin zu installieren, d.h. keine chroot oder virtuelle Maschinenen aufzusetzen, oder ähnlich arbeitsaufwändige Dinge.

Im Laden

Prototype AppstoreEs stellt sich die Frage, warum dies über OCS passieren muss, und warum man nicht direkt mit dem Buildservice über die REST API oder Werkzeuge wie "osc" kommuniziert. Die OCS Schnittstelle bringt einerseits Appstore Integration, andererseits auch soziale Features, und in Zukunft vermutlich auch ein Abrechnungssystem (die Plattform soll ja auch attraktiv für solche sein, die für ihre Programme Geld verlangen möchten). Im Appstore Sprint, der kürzlich in Nürnberg stattfand, wurden einige Fragen zur Clientseite besprochen, und ein erster Prototyp entwickelt. Der Ansatz hier ist deutlich: Im Gegensatz zu ‘traditionellen Paketmanagern’ gibt’s hier auch eine soziale Komponente: Benutzer können Software kommentieren und bewerten. Ausserdem ist die Benutzeroberfläche ansprechender gestaltet und bietet Screenshots und möglicherweise Screencasts. Benutzer können Benachrichtigungen bei neuen Veröffentlichungen oder Updates abonnieren.

Mehr Informationen hierzu könnt ihr auf den folgenden Seiten finden:

Das Web, scheibchenweise

Das Web-Scheibchen Widget ist in Plasma (in kdeplasma-addons, noch bis zum Git-Umzug am Wochenende) seit 4.4 enthalten. Ein Web-Scheibchen ist ein Teil einer Website auf dem Desktop. Das kann hilfreich sein, wenn man einen Ausschnitt einer Website im Auge behalten will, allerdings dafür aber keinen kompletten Browser starten will.

Richard Moore und ich haben das Webslice Applet auf der Akademy 2009 in Akademy geplant, richmoore hat dann einen Prototypen geschrieben, den ich in ein einfaches Plasma Widget umgesetzt habe. Seit dem ersten Release zusammen mit 4.4 hat sich allerdings wenig dran getan. Es funktioniert im Prinzip recht einfach: Wir laden eine Website in einem Webkit Widget (auf der Plasma Canvas), blenden die Scrollbalken aus, scrollen an die richtige Stelle (zur Geometrie einzelner Element kann man Webkit befragen) und zoomen soweit ein oder aus, dass der Ausschnitt in’s Widget passt. Das funktionierte so recht gut, allerdings blieben zwei Probleme: Das Vergrössern bzw. Verkleinern des Widgets war viel zu langsam, und dadurch nicht flüssig genug, und die Auswahl des Ausschnitts war alles andere als intuitiv — man musste den richtigen CSS2 Selector eingeben, diesen also erst aus dem Quellcode der Website puhlen.

Gestern abend habe ich eine Reihe Änderungen eingepflegt, die hier deutliche Verbesserung bringen. Nach Review auf der plasma-devel Mailingliste habe ich diese Änderungen auch in den 4.6 Zweig committet, d.h. dass sie mit 4.6.1 in ca. einem Monat zur Verfügung stehen werden. (Oder ihr besorgt euch den Code aus KDE’s SVN bzw. Git, unter kdeplasma-addons/applets/webslice.) Schau’n wir mal, was ich so geändert habe…

Performance

3 Web-Scheibchen mit verschiedenen Ausschnitten von mehreren Seiten Vor allem das Vergrössern und Verkleinern des Widgets machte eigentlich kaum Spass. Das Web-Scheibchen Widget benutzt eine Webkit View, und zeigt die Seite an einer bestimmten Position an, mit einem zur Plasmoidgrösse passendem Zoomfaktor. Soweit, so gut. Dem Performanceproblem lag zugrunde, dass das Widget während dem Andern seiner Grösse so viele Resize Events abfing, dass es mit dem Zoomen und Positionieren nicht nachkam, und diese sich aufstauten. Dem habe ich Abhilfe verschafft erstmal die Codepfade, die zum diesen “resize events” führen aufgeräumt habe, sodass dieser Vorgang nur stattfindet, wenn es wirklich nötig ist. Dann habe ich mittels eines QTimers verschiedene, schnell aufeinanderfolgende Events zusammengefasst. Beim Zoomen des Widgets war auch noch so Einiges drin, wenn man die Backingstore zeitweise einfriert, und das komplette Neurendern der Seite dann um einige Millisekunden verzögert. Zusammen damit habe ich auch die Seitenverhältnisse flexibler gemacht, diese waren vorher fest eingestellt. (Man kann in Plasma immmer noch unabhängig von den Seitenverhältnissen verkleinern/vergrössern, indem man die CTRL Taste gedrückt hält.) Das erste Problem ist also gründlich gefixt.

Verbesserte Anwenderfreundlichkeit

Während der Konfiguration schaltet das Web-Scheibchen Widget in den Übersichtsmodus Nächster Punkt: Ergonomie. Wie schon erwähnt, schränkt das notwendige extrahieren von CSS2 Selektoren aus Webseiten-Quellcode die Zielgruppe des Widgets gelinde gesagt etwas ein. (Eigentlich sind die recht einfach, was aber nicht heisst, dass ich es auch meinem “Resident non-Geek” zumuten würde — ich hab’s probiert und empfing einen recht leeren Blick als Dank). Ich habe einige Zeit drüber nachgedacht, wie man sowas elegant umsetzen kann. Erstmal wollen wir Quellcode-lesen während des Setup vermeiden, es sollte einfach sein, den gewünschten Ausschnitt auszuwählen, und das Feedback für den Anwender sollte so direkt wie möglich sein. Erster Streich: Die Eingabezeile für das CSS Element hat sich verwandelt in eine editierbare Combobox, über deren Dropdown-Menü man jetzt Elemente auswählen kann. Zweiter Streich: Die URL Eingabezeile hat einen Reload-Knopf zum Nachbarn bekommen, mit dem man eine neue Seite in die Voransicht laden kann (damit werden auch die Elemente in der Combobox erneuert). Dritter Streich: Das Widget zeigt jetzt während der Konfiguration eine Übersicht der ganzen Seite an, und markiert das gerade ausgewählte Element. (Mann kan, wie in allen Comboboxen dann auch mit Maus bzw. Pfeiltasten durch die Liste navigieren, gleichzeitig sieht man im Widget welcher Ausschnitt sich hinter dem kryptischen Namen des Elements (#myid, zum Beispiel) verbirgt. Sobald man bestätigt, zeigt das Widget dann den Ausschnitt passend gezoomt an.

Alles in allem nicht ganz so triviale Änderungen. Da das Widget allerdings bisher kaum benutzbar war, die Änderungen sich recht einfach ohne Änderungen an den Übersetzungen vornehmen liessen, und das Risiko auf Regressions in anderen Teilen sehr gering war, habe ich die Änderungen auch in den 4.6 Zweig eingepflegt. Damit werden sie mit 4.6.1 nächten Monat, und mit openSUSE im März mitgeliefert, und wir somit vielleicht dem ein oder anderen Anwender eine Freude bereiten können.

Hier und da gibt’s natürlich noch Verbesserungsmöglichkeiten. So kann ein erklärender Tooltip hier und da sicherlich nicht schaden, flexiblere Grössenoptionen, wie Proportion, Originalgrösse der Seite (interessant für “flüssige Layouts”), zum Beispiel. Ich habe dafür erstmal sinnvolle Voreinstellungen gewählt, abhängig vom Feedback auf’s jetzige Featureset sehen wir dann mal weiter.

4 Minuten Hobbychirurgie

Abschliessend noch unsere Mitmach-Runde im Mitmach-Web 2.0! Wir haben einen netten Mechanismus, mit dem man kinderleicht eigene Web-Scheibchen-Widgets erstellen kann. Dazu kopiert ihr einfach eine bereits existierende Web-Scheibchen .desktop Datei. Dateinamen ändern (wir wollen ja nichts anderes überschreiben), Namen, Kommentar, ev. auch Übersetzungen updaten (oder einfach löschen, falls nicht nötig), Autor, etc, Einträge die man nicht versteht, einfach drin lassen, auf jeden Fall aber die Plasma Library und Mimetype Einträge. Fügt dann eine Zeile wie diese hinzu, um das Web-Scheibchen auf das Element mit id=”myid” im Tag von der Frontpage von mysite.org läd:

 X-Plasma-Args=http://mysite.org,#myid

Diese Datei muss man dann nur noch nach ~/.kde(4)/share/kde4/services/, kbuildsycoca4 ausführen, um die Plugins und Metadaten auf den neusten Stand zu bringen, und das Widget über den Widget Explorer zur Plasma Arbeitsfläche oder dem Netbook hinzufügen.

Eine mögliche Entwicklungsrichtung für die Zukunft wäre dann, diese selbsterstellten Web-Scheibchen über opendesktop.org mit anderen zu teilen, quasi “Social Desktop für Web-Metzger“…

4.6.0 ist da!

Vor ein paar Minuten habe ich die auf den grossen Releaseknopf gedrückt, und damit 4.6.0 öffentlich gemacht. Pakete für allerlei Betriebssysteme sollten recht schnell verfügbar werden, für openSUSE könnt ihr diese dann im Factory Repository finden, also wärmt schon mal Eure zypper auf.4.6.0 Released

4.6 ist ein recht dickes Release, es gibt viele neue Features, einige davon sehr sichtbar, andere weniger auffällig. Das Mobile Profile macht’s zum Beispiel einfacher, KDE Frameworks in mobiles Apps zu verwenden, die neuen Aktivitäten bringen die Möglichkeit, Programme und Fenster in Kontexte zu gruppieren und so einfacher zwischen verschiedenen Aufgaben, die man zu erledigen hat umzuschalten. Schaut doch einfach mal in die Ankündigungen für die Plasma Workspaces, die KDE Programme und die Entwicklerplattform.

Solides 4.6: Neuerungen in der KDE Hardwareverwaltung

In KDE Plasma 4.6, dass im Januar erscheinen wird, sind so einige Sachen, die den Bereich Hardwaremanagement verbessern. In diesem kurzen Artikel highlighte ich zwei davon: Netzwerk und Powermanagement.

Energieverwaltung

Netzwerkkarten Details im Networkmanager PlasmoidHier haben die meisten Änderungen unter der Haube stattgefunden. KDE’s Hardware Abstraktionsschicht Solid kommt jetzt gänzlich ohne HAL aus und baut auf die U* Familie, die aus UDev, UPower und UDisks besteht. Eine Änderung in Solid ist, dass jetzt mehrere Backends gleichzeitig ihre Arbeit machen können, was auch notwendig ist, da das monolithische HAL durch die modulareren U* Komponenten ersetzt wurde. Für Applikationsentwickler ändert sich allerdings nichts, alle Solid Funktionen funktionieren nach wie vor, nur benutzen jetzt im Hintergrund einen anderen Mechanismus um ihre Arbeit zu machen.

Eine weitere Änderung hat das Solid Team in mit PowerDevil2 eingeführt. PowerDevil ist ein kleiner Daemon (eigentlich ein Plugin für den KDED) der verschiedene Energiesparfunktionen bereitstellt, wie z.B. das Suspenden der Maschine und Energiesparprofile. PowerDevil2, der in 4.6 neu ist, ist modular aufgebaut und kann mit eigenen Aktionen erweitert werden. So können Benutzer das Verhalten der Energiesparfunktionen komplett selber bestimmen, und sind nicht mehr von hardcodierten Funktionen die mitgeliefert werden abhängig. Diese Action Plugins integrieren sich nahtlos in die Profileinstellungen, wie man auf dem Screenshot sehen kann. Das Batterie Plasmoid, über das auch andere Energieverwaltungsfunktionen, wie z.B. Suspend und Hibernate verfügbar sind glänzt im 4.6 Releasezyklus vor allem durch Bugfixes. So habe ich diese Woche noch 4 Patches, die Aurelien bereits in den Trunk Zweig eingeplegt hatte auf das bereits abgezweigte 4.6 Branch zurückportiert.

Für 4.7 plane ich, erweiterte Informationen über den Energieverbrauch und Zustand der Akku(s) hinzuzufügen, ich habe mit der Entwicklung davon bereits begonnen. Dazu allerdings mehr zu einem späteren Zeitpunkt, jetzt liegt erstmal der Fokus auf Plasma 4.6, und danach darauf, das openSUSE 11.4 Release rund zu gestalten.

Netzwerkverwaltung

Energieverwaltungs EinstellungenopenSUSE liefert im 11.4 Release, das auf KDE 4.6 aufbaut das neue Netzwerk Management Widget mit, ein Plasmoid dass es erlaubt Netzwerkverbindungen aufzubauen. Im Hintergrund baut es dabei auf den bekannten NetworkManager auf. Um die Jahreswende sind hier vor allem noch VPN Funktionen hinzugekommen, dank einiger freundlicher Entwickler, die mir Patches zusandten. (Ich selber benutze kein VPN, bin daher auch auf die Mitarbeit anderer angewiesen.)
Ansonsten unterstützt das neue Applet Wifi und Ethernetverbindungen sehr gut, ist aber auch für’s mobile Internet bereits gerüstet. Die Integration des Modemmanagers ist bereits weit fortgeschritten, und sollte funktionieren. (Auch hier kann ich’s nicht selber testen, falls es hakt bitte Bugreports einstellen. Wer drahtlose Netzwerke benutzt, die ihre SSID nicht broadcasten, d.h. die "unsichtbar" sind, hat im Moment leider noch Pech, die Unterstützung für diese Netzwerke ist noch nicht komplett. Man kann sich aber behelfen, indem man (als root) "iwlist wlan0 scanning essid <MYSSID>" ausführt. Danach ist das Netzwerk in Plasma sichtbar, und man kann sich damit verbinden. (Dieser Vorgang ist nur einmal nötig, da das Netz nun in Zukunft direkt erkannt wird.) Visuell bin ich mit dem Netzwerkeinstellungsplasmoid schon recht zufrieden, d.h. im Grossen und Ganzen tut es das, was es sollte. Es gibt noch einige Sachen, die ich kurzfristig beheben möchte, so kann es vorkommen, dass die Liste auf der rechten Seite leer ist, d.h. keine vorkonfigurierten Verbindungen zur Verfügung stehen. In dem Falle sollte man drahtlose Netzwerke in der Nähe sehen. Meinerseits liegt der Fokus hier also vor allem auf Polishing und Bugfixing, sodass es nicht nur cool aussieht, sondern auch so reibungslos und unauffällig wie möglich funktioniert. Es sind allerdings auch nette Features wie Unterstützungen für "system connections", die dann auch aktiv bleiben, wenn man ausloggt.