PPA für simdock
Es gibt jetzt ein PPA für simdock. Statt Kompilieren zu müssen geht die Installation nun mit:
sudo add-apt-repository ppa:onli/simdock sudo apt-get update sudo apt-get install simdock
Ich hoffe, dass die Abhängigkeiten passen, getestet sind sie unter precise. Aber für trusty sind ein paar Abhängigkeiten bereits angepasst.
Meine PPA-Anleitung musste ich an zwei Stellen leicht korrigieren, aber ansonsten passte sie auch für ein Program mit Kompilierung.
Simdock: xcb und wnck statt Xlib
Simdock ist nicht perfekt. Ich mag immer noch, dass die Transparenz auf meinem System funktioniert und wie es die Fenster einzeln durchgeht. Aber eines der Probleme ist, dass es gelegentlich abstürzt(e), ohne jegliche Fehlermeldung. Ich habe daher nicht herausgefunden, woran das liegt. Aber ich hatte ein bisschen Code in einer xstuff.cc, den ich weder verstand noch schön fand. Dieser nutzte die Xlib - und dafür gibt es mit xcb eine Alternative, die bei Fehlern etwas seltener das Programm mitreißen sollte.
Warum überhaupt eine X-Library?
Berechtigte Frage. Simdock nutzt eigentlich wxWidgets, eine C++-Multipalttform-Library. Für die eigentliche Fenstererstellung funktioniert das auch ganz gut. Aber ein Dock muss Sachen machen, die andere Programme nicht tun müssen, die näher an der Aufgabe eines Fenstermanagers sind - beispielsweise Fenster anderer Programme aktivieren. Das kann wxWidgets nicht, oder zumindest ist es nicht so dokumentiert, dass ich es finden würde. Die xstuff.cc hatte diese Funktionen (und ein paar Helfer):
void xstuff_raiseWindow unsigned int xstuff_getWindowPID bool xstuff_resizeScreen void xstuff_set_wmspec_strut bool xstuff_setDock
Vorgehen
Man findet zu xcb viel weniger Dokumentation als ich gedacht habe, insbesondere viel weniger Codebeispiele. Was existiert ist aber wenigstens meist hilfreich. So auch MixingCalls, der Hinweis, dass man bestehenden Xlib-Code einfach mit xcb mischen kann. Genau das machte ich beim Ersetzen der xstuff_setDock
, die _NET_WM_WINDOW_TYPE
auf _NET_WM_WINDOW_TYPE_DOCK
setzen soll. Vorher sah die so aus:
/* Stolen from gnome-panel */ bool xstuff_setDock (Display * xdisplay, Window winID) { if (winID == 0) return false; if (!xdisplay) return false; Atom a[2] = { None, None }; a[0] = XInternAtom (xdisplay, "_NET_WM_WINDOW_TYPE_DOCK", FALSE); Atom a2 = XInternAtom (xdisplay, "_NET_WM_WINDOW_TYPE", FALSE); XChangeProperty (xdisplay, winID, a2, XA_ATOM, 32, PropModeReplace, (unsigned char *) a, 1); return true; }
Und danach so:
bool xstuff_setDock (Display * xdisplay, Window winID) { if (winID == 0 || !xdisplay) { return false; } xcb_connection_t *c = XGetXCBConnection(xdisplay); xcb_ewmh_connection_t EWMH; xcb_intern_atom_cookie_t *EWMHCookie = xcb_ewmh_init_atoms(c, &EWMH); if (! xcb_ewmh_init_atoms_replies(&EWMH, EWMHCookie, NULL)) { return false; } xcb_change_property(c, /* Connection to the X server */ XCB_PROP_MODE_REPLACE, /* Property mode */ winID, /* Window */ EWMH._NET_WM_WINDOW_TYPE, /* Property to change */ XCB_ATOM_ATOM, /* Type of the property */ 32, /* Format of the property (8, 16, 32) */ 1, /* Length of the data parameter */ &(EWMH._NET_WM_WINDOW_TYPE_DOCK)); /* Data */ return true; }
Es gibt hier drei Besonderheiten:
- Mit
XGetXCBConnection(xdisplay);
wird Display* von Xlib in xcb als connection benutzt. - xcb reichte nicht aus, weil das
_NET_WM_WINDOW_TYPE
nicht kennt. Man kann aber XInternAtom von Xlib benutzen. Ich habe stattdessen auf xcb_ewmh zurückgegriffen. xcb_ewmh_init_atoms_replies
ist von http://stackoverflow.com/a/13319374/2508518
Weitere Vereinfachungen
Im aktuellen Master ist die Funktion gleich verschwunden. Denn statt xcb gibt es noch eine Alternative: libwnck. Diese Lib nutzt simdock sowieso schon, und mit ihr geht das ganze so:
WnckWindow* window = wnck_window_get(winID); wnck_window_set_window_type(window, WNCK_WINDOW_DOCK);
Weil das ausreichend kurz ist, habe ich mehrere solcher Aufrufe in einer xstuff_setDefaultWindowFlags
kombiniert.
Doch auch für xcb gibt es noch Vereinfachungen, und zwar in xcb_ewmh. Dort sind einige Hilfsfunktionen definiert, mit denen Attribute leichter abgefragt und gesetzt werden können. Statt also mit xcb_get_property - ähnlich aufgebaut wie xcb_change_property - zu arbeiten, kann simdock die PID eines Fensters so erfragen:
unsigned int xstuff_getWindowPID(Window winID) { xcb_connection_t* conn = xcb_connect (NULL, NULL); xcb_ewmh_connection_t ewmh_conn; xcb_intern_atom_cookie_t* ewmh_cookie = xcb_ewmh_init_atoms(conn, &ewmh_conn); if(! xcb_ewmh_init_atoms_replies(&ewmh_conn, ewmh_cookie, NULL)) { return false; } uint32_t pid; xcb_ewmh_get_wm_pid_reply(&ewmh_conn, xcb_ewmh_get_wm_pid(&ewmh_conn, winID), &pid, NULL); xcb_disconnect(conn); return pid; }
Mit ein bisschen besserer Struktur (die connection müsste ja nicht in der Funktion erstellt werden) könnte das fast so simpel sein wie der Wnck-Weg.
Aktueller Stand
So bin ich Funktion für Funktion durch den Code gegangen und habe die Xlib durch xcb oder wnck ersetzt. Hat es was gebracht? Mir zumindest ist simdock bisher nicht mehr abgestürzt, aber das heißt natürlich noch nichts. Es wird sich mit der Zeit zeigen. Aber selbst wenn nun alles gut ist: Ich habe auch ein paar andere Ecken leicht verändert, z.B. die Größenberechnung von Icons und Programm, was auch geholfen haben könnte.
Aber ich glaube, dass schon die Codeersparnis bei weiteren Verbesserungen helfen wird. Und xcb bietet nette Möglichkeiten, Calls zum Xserver zu kombinieren, damit kann man sicher noch einiges verbessern.
pkg-config statt autoconf: Viel weniger Code
Als ich damals simdock übernommen hatte, konnte ich es zwar erweitern, Bugs fixen und das Ergebnis kompilieren, aber ich bin nie hinter das Buildsystem gestiegen. Ich bin ja kein C++-Programmierer, diese Welt war und ist mir fremd. Entsprechend wirr war das git-Repository… Ich habe durchaus versucht, das aus dem svn übernommene Chaos aufzuräumen, aber alle Dateien erschienen nötig, und da ich nach einem besonders beherzten Aufräumversuch nicht mehr Kompilieren konnte, machte ich ihn rückgängig und lies bis jetzt davon die Finger. Warum auch an einem funktionierendem System rumdoktorn, nur für die Ästhetik?
Jetzt wurde das dringend, denn unter Ubuntu 14.04 funktioniert die Kompilierung nicht mehr. Und um dort den Fehler zu finden, muss ich das Buildsystems verstehen und die Abhängigkeiten kennen. Daher habe ich das Makefile von izulu (bzw password-store) genommen und versucht, auf dessen Grundlage - ohne autoconf, ohne die herumfliegenden Installationsskripte, ohne Chaos - die Kompilierung neu einzurichten.
Hilfreich war da, dass ich inzwischen den Kompilierungsbefehl herausgefunden hatte. Doch den konnte ich ja nicht einfach ins Makefile schreiben, auf einem anderen System - 64-bit z.B. - würden die Pfade nicht passen. Das fehlende Werkzeug dafür war pkg-config, das mit pkg-config --libs --cflags Library
die Pfade und Flags für g++ erzeugen kann. Für wx kann wx-config das gleiche. Und kombiniert sieht simdocks Makefile nun so aus:
PREFIX ?= /usr DESTDIR ?= BINDIR ?= $(PREFIX)/bin APPDIR ?= $(PREFIX)/share/simdock ICONDIR ?= $(PREFIX)/share/pixmaps SRCDIR ?= src/ SHELL ?= /bin/sh CC ?= g++ CCFLAGS ?= -O2 DEPS = $(shell pkg-config --libs --cflags glib-2.0 gconf-2.0 gtk+-2.0 libwnck-1.0) DEPS += $(shell wx-config --cflags --libs) .PHONY: install uninstall all: $(CC) $(CCFLAGS) $(SRCDIR)*.cc $(DEPS) $(LDLIBS) -o simdock install: @install -d "$(DESTDIR)$(BINDIR)" "$(DESTDIR)$(APPDIR)" "$(DESTDIR)$(ICONDIR)" @install -m 0755 -v simdock "$(DESTDIR)$(BINDIR)/simdock" @install -m 0644 -v gfx/* "$(DESTDIR)$(APPDIR)/" @install -m 0644 -v gfx/simdock.png "$(DESTDIR)$(ICONDIR)/" uninstall: @rm -vf "$(DESTDIR)$(BINDIR)/simdock" "$(DESTDIR)$(APPDIR)/*" "$(DESTDIR)$(ICONDIR)/simdock.png"
Und das ist alles, ein configure gibt es nicht.
Das war eine größere und zeitraubende Aktion. Insgesamt - wobei viele der Dateien da nie reingehört hätten - konnte ich 70k Zeilen aus dem Repo entfernen, wodurch es nun von Github erstmals als C++-Projekt erkannt wird.
Hat jemand Verbesserungsvorschläge?
Nokia Asha 210
Es war Zeit für ein neues Telefon, und es ist das ungewöhnliche Asha 210 geworden.
Hintergrund
Das Veer habe ich weitergegeben und dessen Ersatz - ein Galaxy 3 (GT-I5800) - wurde einfach zu alt. Vor allem die Meldung, dass kein Speicherplatz verfügbar ist, ging mir auf den Nerv, und dass es manchmal nicht hörbar klingelte. Dazu kommt, dass ich mich auch nach gut einem Jahr nicht daran gewöhnt habe auf einem Touchdisplay zu tippen; Minuum hilft zwar, musste aber nach jedem Neustart initialisiert werden und hing dabei gerne.
Das Asha 210 ist ein aufgebohrtes Featurephone mit Qwerty-Tastatur statt Touchscreen und Dual-Sim-Unterstützung und erschien daher wie das perfekte Handy für mich. Das Betriebssystem ist Nokias S40, also weder Android noch frei, aber ich wollte jetzt einfach etwas, das funktioniert und die Grundlagen abdeckt. Wieder ein Nokia klang da ganz richtig.
Review
Alles Gute
Das Asha hat ein echtes Keyboard und es ist dadurch für mich viel angenehmer, damit Emails/SMS/Notizen zu schreiben oder auch nur eine URL einzugeben.
Ins Internet kommt man übers Wlan oder 2G, mit einem Proxy-Browser klappt das ähnlich wie beim Opera Mini - also ziemlich gut, mit optionaler Anpassung des Layouts an die Bildschirmgröße, und die Komprimierung spart sehr viel Traffic, was gerade bei meinem momentanen Tarif auch nötig ist.
Die Bauqualität ist ordentlich. Klar, es ist Plastik, aber es wirkt fest, stabil und ist doch leicht, und ich finde es hübsch - das Foto oben wird ihm nicht gerecht. Auch die Tasten des Keyboards sind einwandfrei - das Veer war noch besser, aber es ist völlig machbar, mittellange Texte zu tippen. Das Display hat eine viel bessere dpi als das Galaxy 3, wodurch alles schöner aussieht. Alle Tasten sind beleuchtet.
Und obwohl ich erst fürchtete, dass ich die beiden Sondertasten affig finden würde, sind sie letzten Endes doch praktisch. Facebook mache ich doch ab und an auf dem Handy auf, und die Kamerataste erwies sich im Urlaub und auf Feiern als hilfreich.
Da zwei Sim-Karten eingebaut werden können, kann ich gleichzeitig meine deutsche und meine französische Nummer nutzen, was ich wirklich gut finde. Trotzdem ist die Akkuleistung hervorragend. Ich weiß noch nicht genau, wieviele Tage es bei normalen Gebrauch durchhält, aber es sind definitiv mehrere - im 4-tägigen Urlaub habe ich es einmal aufgeladen, und das war nur zur Sicherheit.
Es eignet sich sehr gut als MP3-Player-Ersatz. Der Medienplayer ist völlig ok, die ID3-Tag-Erkennung hat mit meinen 4 Lieblingsalben einwandfrei geklappt, und mit bis zu 32 GB (ich hab eine 16GB-Karte drin) ist ausreichend Platz.
Auch sonst: Die Grundfunktionen sind abgedeckt. Es sind kleine Apps wie Stoppuhr/Wecker, Notizen und ein Kalender dabei, die funktionieren ganz ordentlich.
Alles Schlechte
Die eingebaute Kamere ist nicht gut. Sicher, man kann damit Fotos machen, aber sie ist nur ein kleines bisschen besser als die des Galaxy 3 und die war eigentlich furchtbar. Es reicht für den gelegentlichen Schnappschuss, aber Nokia-Qualität ist das bei weitem nicht. Wenigstens sind die Bilder gleichbleibend in mittelmäßiger Qualität, die Software springt nicht mit Fokus/Beleuchtung hin und her.
Der Browser hat nicht nur die gleichen Stärken wie Opera Mini, sondern auch die gleichen Macken: Manchmal liefert er nicht die neue Seite aus, wenn man einem Link folgt, sondern die alte nochmal. Da kommt der Proxy durcheinander. Dazu kommen neue, nämlich dass manchmal die Seite im Aufbau hängen bleibt, nur ein weißer Bildschirm erscheint.
Generell ist die Software nicht gut. Es läuft das alte S40, und daher ist alles angelehnt an die Handys von damals, mit Kästchenmenüs und geringer Anpassbarkeit der Oberfläche. Aber das ist nicht das Problem, das wusste ich vorher. Das Problem ist, dass die Software trotz des Alters verbuggt und nicht durchdacht ist:
- Das Gerät hat ja kein Touchscreen und daher steuert man den Cursor im Browser mit dem Menü-Wippschalter in der Mitte. Und weil der Zeiger pro Tick mehrere Pixel auf einmal zurücklegt, sind manche Elemente schlicht nicht anvisierbar.
- Updates für das Telefon lassen sich nicht runterladen, wenn man im Roaming ist. Aber auch im Inland-Roaming, was in Frankreich den beliebtesten Anbeiter free betrifft, bei dem auch ich bin. Weiß nicht, wie das in Deutschland aussieht, aber ich kann mir Probleme bei Eplus/Alditalk und O2/Netzclub vorstellen. Das gilt selbst dann, wenn man im Wlan ist! Um also upzudaten, musste ich alle Sim-Karten entfernen - weil ausgerechnet dieses Modell nicht von Nokias PC-Updater unterstützt wird.
- WPA2 wird unterstützt, und auch WPA/EAP, aber nur EAP-SIM. Das Einloggen per Nutzername und Passwort - Standard an allen europäischen Universitäten - wird nicht unterstützt und ist auch nicht angekündigt. Schlamperei.
- Klar, es kann kein Multitasking. Aber man hätte doch wohl trotzdem einen Mechanismus einbauen können, um Links in Emails im normalen Browser statt in einer Magersoftware aus 1995 zu öffnen?
- Der Email-Client schafft es derzeit nicht mehr, sich einzuloggen, eventuell ist das neue 50-stellige Passwort zu lang?
Natürlich gibt es auch kaum brauchbare Apps, von den Grundfunktionen abgesehen. Die Anyphone-Edition von Facebook und Whatsapp sind das Highlight und von Anfang an dabei, alles andere im Store ist bisher unbrauchbar, Youtube fehlt (und funktioniert im Browser nicht, obwohl er anfängt, das Video herunterzuladen). Was mich besonders stört ist die nichtvorhandene Karte, denn die bräuchte kein GPS um nützlich zu sein.
Das Display ist nicht schlecht, aber auch nicht wirklich gut. ~170 dpi sind nicht ausreichend, es ist zu klein (es ist eben kein Slider) und nicht hell genug, außerdem ist der Blickwinkel zu gering. Ebenso nur halb gut ist die Hintergrundbeleuchtung der Tasten: Die ist zwar praktisch und hübsch, aber auch an den Rändern der Tasten sichtbar und wirkt dadurch dreckig.
Dann noch Kleinkram: Das Kabel des mitgelieferten Ladegeräts - Nokias Stecker, kein USB, ein USB-Kabel muss extra gekauft werden - ist zu kurz. Und das Handy behauptet zwar, sich bei gestelltem Alarm selbst wecken zu können und so Akku zu sparen, das funktionierte aber nicht.
Fazit
Als Telefon ist es ok. Aber man muss es wirklich als Telefon und Textarbeiter (Email/Whatsapp/SMS) betrachten, mit dem zusätzlich gelegentlich eine Webseite abgerufen werden kann. Es ist kein Ersatz für ein Smartphone, sondern ein erweitertes Featurephone, das unter seiner veralteten Software leidet. Die 74€, die es in Deutschland auf Amazon kostet, ist es nicht wert - aber wenn es auf die 50€ fällt, die es hier kostete, ist es vielleicht eine Alternative zum alten Handy, statt Smartphone.
Aber das Asha könnte so gut sein. Nur noch moderne Software drauf packen, welche die Grundfunktionen bugfreier abdeckt, und aus dem Display einen Touchscreen machen, und das wäre ein ziemlich perfektes Handy für mich. So ist es wieder nur Übergang. Mal sehen für wie viele Jahre.