Patchmanagement mit Git

Eine zentrale Aufgabe in der Softwareentwicklung ist der Umgang mit Änderungen. Das betrifft zum einen die Entwicklung der Quellcodebasis insgesamt, also die “klassische” Versionskontrolle. Zum anderen ist aber auch der Weg dahin wichtig, also die Entwicklung eines Patches. Gerade bei größeren, insbesondere strukturellen, Änderungen kann man leicht den Überblick verlieren. Das gilt umso mehr, wenn sich während der Entwicklung eines Patches die Sourcecodebasis ändert und es somit zu Konflikten kommt, die dann zu beheben sind. Mit diesem Teilaspekt, also dem (lokalen) Patchmanagement, befasst sich dieser Artikel.

Wenn man sich damit begnügt, zusammengehörende Änderungen in einem “großen Klumpen” zu verwalten, eignen sich lokale Branches in Git, einem verteilten Versionskontrollsystem, hierfür sehr gut. Damit hat man auch die Historie der lokalen Änderungen parat und kann sie bei Bedarf wieder hervorholen. Aber größere Änderungen werden schnell unübersichtlich, wenn man sie nicht in handliche Teile aufteilt. So könnte man beispielsweise eine Änderung in 1. das Bereitstellen einer Schnittstelle und 2. Änderungen in darauf aufbauendem Code, die auf diese Schnittstelle zugreifen, aufteilen.

Auch der Übergang von der lokalen Entwicklung in das zentrale Versionskontrollsystem wird dadurch erleichtert. Die ganze lokale Entwicklungshistorie mit allen Irrungen und Wirrungen will man gar nicht auf alle Ewigkeit für alle sichtbar machen. Die Änderung dort aber nur als Ganzes zu sehen, ist aber auch nicht detailliert genug. Zum einen weiß man nicht mehr, welche Änderung (einer bestimmten Zeile beispielsweise) für welchen Teilaspekt zuständig ist. Zum anderen bleibt bei Problemen mit dem neuen Code nur, die Änderung als Ganzes zurückzunehmen. Anders sieht es hingegen aus, wenn man sauber getrennte, auf einander aufbauende, aber jeweils für sich baubare und lauffähige Änderungen hat. Unter Berücksichtigung der Abhängigkeiten kann man diese dann, ggf. auch (teil)automatisiert, wieder zurücknehmen. Auch die Begutachtung (Review) von Quellcodeänderungen wird durch die Strukturierung erleichtert.

Nachdem die Vorteile einer entsprechenden Lösung nun hoffentlich einleuchten, möchte ich zu entsprechenden Werkzeugen kommen. Mercurial Queues setzt auf dem verteilten Versionskontrollsystem Mercurial auf. Dieses finde ich persönlich nicht sonderlich benutzerfreundlich, ich arbeite lieber mit Git. Außerdem hat Mercurial Queues den Nachteil, dass die einzelnen Patches nicht versioniert sind (es ist wohl irgendwie möglich, aber nur sehr umständlich). Bei der Suche nach einer Lösung, die zum einen die Versionierung von Patches erlaubt, und zum anderen gut mit Git integriert ist, bin ich schließlich auf topgit gestoßen. Das Prinzip von topgit ist schnell erklärt: Es arbeitet mit ganz normalen Git-Branches (jeder Teil des Patches ist ein eigener Branch), erfasst aber die Abhängigkeiten zwischen diesen. Wenn man Änderungen im zentralen Sourcecode oder in einem grundlegenden Teil des Patches hat, kann man diese mit einem Befehl schnell durch alle “Ebenen” des Patches durchziehen.

Fazit: topgit ist zwar noch recht jung und nicht vollständig ausgereift (so kann man beispielsweise Abhängigkeiten eines Branches zu einem anderen hinzufügen, nicht aber wieder löschen), die gute Integration mit Git macht das aber wieder wett. Da ganz normale Git-Branches incl. Historie verwendet werden, ist auch das Risiko durch irgendwelche Bugs gering: Zur Not kann man mit den Branches auch mit Git-Bordmitteln noch etwas anfangen. Insofern eine klare Empfehlung, es lohnt sich!

Disconnected by “local choice”

Da mein Fritz-WLAN-Stick nur äußerst unzuverlässig funktionierte, habe ich in der neuen Wohnung meinen PC zunächst per Ethernet an den DSL-Router angeschlossen. Da ein Kabel nicht lang genug war, brauchte es dafür zwei Kabel, und einen Switch im Flur. Klar, dass das keine Dauerlösung sein konnte.

Also habe ich mir eine WLAN-Karte bestellt, die hoffentlich unter Linux vernünftig funktioniert. Insbesondere sollte es 802.11n sein. Die Wahl fiel schließlich auf die ASUS PCE-N15. Also Karte eingebaut. lspci etc. fanden die Karte. Scannen nach verfügbaren Netzwerken funktionierte auch. Aber es kam keine Verbindung zustande, weder mit wicd noch auf der Kommandozeile (manueller Aufruf von wpa_supplicant bzw. Einträge in /etc/network/interfaces und Aufruf von ifup). An alle möglichen Problemquellen habe ich gedacht: regulatory domain (Funkkanalauswahl), Fehler im Treiber, nicht geladene Firmware, fehlerhafte Konfiguration des wpa_supplicant …

Dann fiel mir in der dmesg-Ausgabe diese Meldung auf:

deauthenticating from ... by local choice (reason=3)

Google führte auch wieder zu diversen Endlos-Diskussionen ohne klares Fehlerbild. Dann aber fand ich diesen Kommentar in einem Ubuntu-Bug:

I found the source of my problem: network-manager had been re-installed on upgrade (I had previously uninstalled it) and it is somehow preventing ifup from working. “apt-get remove network-manager” fixed the issue for me – ifup works.

Und in der Tat war es bei mir dasselbe Problem: Durch das Upgrade auf Ubuntu 13.04 wenige Tage zuvor war der gammelige network-manager wieder auf meinem System gelandet. Und dem gefiel es offenbar nicht, dass andere Programme irgendein WLAN-Interface (für das der network-manager ganz sicher nicht explizit konfiguriert war) verbanden. Also hat er diese Verbindungen gleich wieder beendet.

Deinstalliert (apt-get remove network-manager), jetzt funktioniert erstmal alles halbwegs (sobald mein DSL wieder zuverlässig geht, muss ich mal schauen, ob die Geschwindigkeit stimmt. iwconfig behauptet 300 MBit/s, die Fritz-Box hingegen nur 5 MBit/s. Absichtlich kommt dieser Schrott jedenfalls nicht nochmal auf mein System. Und beim nächsten Upgrade weiß ich dann gleich, was ich gleich wieder runterschmeißen muss.

Einkommens- und Verbrauchsstichprobe

Ich habe gerade vom Landesbetrieb für Statistik und Kommunikationstechnologie Niedersachsen (LSKN) den Fragebogen für den Mikrozensus bekommen (auf eigenen Wunsch, ich lasse mich ja nicht von einer ehrenamtlichen Erhebungsbeauftragten “interviewen”, am besten noch in meiner Wohnung …

In dem Umschlag war auch ein Werbeflyer (siehe LSKN) für die Einkommens- und Verbrauchsstichprobe (EVS) bekommen. Die EVS ist unter anderem Grundlage für die Arbeitslosengeld-2-Regelsätze. Aber wie wird sie ermittelt?

Den dritten Erhebungsteil der Einkommens- und Verbrauchsstichprobe (EVS) bildet das Haushaltsbuch, in dem die teilnehmenden Haushalte drei Monate lang (Quartalsanschreibung) alle ihre Einnahmen und Ausgaben registrieren. Dabei erfolgt eine zeitliche Gleichverteilung der Anschreibung, das heißt jeweils ein Viertel aller an der Einkommens- und Verbrauchsstichprobe (EVS) teilnehmenden Haushalte schreibt je ein Quartal des Berichtsjahres an.

Den abschließenden Erhebungsteil stellt das Feinaufzeichnungsheft für Nahrungsmittel, Getränke und Tabakwaren dar. Jeder fünfte an der Einkommens- und Verbrauchsstichprobe (EVS) beteiligte Haushalt listet dabei jeweils einen Monat lang detailliert alle Ausgaben für Speisen und Getränke nach Mengen und Preisen auf.

Hört sich nach einem ziemlichen Aufwand an. Auch die 80 €, die es dafür gibt, machen diesen Aufwand eher nicht wett. Also ziemlich blöd, wenn die einen dazu verpflichten … Aber halt:

Eine gesetzliche Verpflichtung zur Teilnahme besteht nicht, das heißt, alle Haushalte nehmen auf freiwilliger Basis an der Einkommens- und Verbrauchsstichprobe (EVS) teil.

Es mag ja sein, dass die Stichprobe “nach den Quotierungsmerkmalen Haushaltstyp, soziale Stellung –der Haupteinkommensperson und Haushaltsnettoeinkommen” repräsentativ ist. Sie ist aber ganz offenkundig nicht repräsentativ in Bezug auf die Bereitschaft, dermaßen genau Buch zu führen. Dieser selection bias dürfte den Durchschnitt der erfassten Ausgaben für bestimmte, vor allem für eher billige, Produkte massiv nach unten verfälschen. Und wie gesagt, diese Statistik ist Basis für die Alg2-Regelsätze …

Meine Mail an Marcell D’Avis

Hier ohne weiteren Kommentar meine Mail an Marcell D’Avis, den (ehemaligen?) “Leiter Kundenzufriedenheit” bei 1&1. Spricht für sich …

Sehr geehrter Herr D’Avis,

ich wende mich an Sie, weil bei der Bestellung meines DSL-Anschlusses
auf Seite von 1&1 soviel schiefgelaufen ist, dass ich mittlerweile
erhebliche Zweifel habe, dass ich von 1&1 noch einen DSL-Anschluss
bekommen werde, ohne dass es noch weiteren Stress dieser Art gibt.

Meine Kundennummer bei Ihnen ist die [...]. Ich schildere im
Folgenden den groben zeitlichen Ablauf und gehe davon aus, dass sie die
entsprechenden internen Abläufe bei Ihnen im Hause anhand meiner
Kundennummer nachvollziehen können. Gleichzeitig lege ich dabei dar, was
meines Erachtens an den entsprechenden Stellen in Ihren
Geschäftsprozessen zu verbessern ist. Meines Wissens hat die 1&1 Telecom
GmbH kein zertifiziertes Qualitätsmanagement-System; vielleicht haben
Sie aber dennoch einen internen Prozess, über den sie solche
Verbesserungen umsetzen können.

Anfang Oktober 2012 entschied ich mich für einen DSL-Anschluss von 1&1.
Ein zusätzlicher, aber nicht von Anfang ausschlaggebender
Entscheidungsfaktor war dabei, dass es VDSL 50000 zum gleichen Preis wie
normales DSL 16000 geben sollte.

Zunächst wollte ich den Anschluss online bestellen. Die dort erfragten
Daten über den Anschluss des Vormieters hatte ich aber noch nicht parat,
so dass ich mich entschied, den Anschluss doch telefonisch zu bestellen.
Dies tat ich am Abend des 11. Oktober 2012.

Kurz darauf erhielt ich eine automatische Bestelleingangsbestätigung.
Aus dieser ging aber nicht ansatzweise hervor, was ich eigentlich
bestellt hatte. Verbesserungsvorschlag: In dieser Bestätigungsmail
sollten die vom Callcenter-Agenten im System erfassten Daten vollständig
aufgelistet werden, so dass ich als Kunde diese auf Korrektheit und
Vollständigkeit prüfen kann.

Am 15. Oktober 2012 erhielt ich schließlich eine Mail betreffend die
Erfassung der Vorbesitzerdaten. Diese beantwortete ich unverzüglich mit
Namen und Rufnummer des Vorbesitzers. Übrigens handelte es sich dabei
auch um einen 1&1-DSL-Anschluss, der zu diesem Zeitpunkt auch noch
geschaltet war.

Einige Stunden später erhielt ich eine Bestelleingangsbestätigung.
Hierzu ist anzumerken, dass der HomeServer 50.000+ nicht als solcher,
sondern als “1&1 HomeServer 50.000 (7390)” aufgeführt war. Negativ ist
hierzu anzumerken, dass auch diese Bestätigungsmail weder die
Installationsanschrift noch den Preis enthielt. Was soll das für eine
“Bestätigung” sein, die wesentliche Vertragsbestandteile nicht enthält?

Einige Tage später fiel mir ein, dass ich bei der telefonischen
Bestelleinnahme nicht nach einer alternativen Lieferanschrift gefragt
wurde. Online wird danach gefragt. Ich würde es für sehr angebracht
halten, auch bei der telefonischen Bestellannahme standardmäßig danach
zu fragen, insbesondere dann, wenn der Kunde angibt, an der
Installationsanschrift des Anschlusses erst noch einzuziehen.

Ich bat also per Mail um eine Änderung der Versandanschrift auf meinen
Arbeitsplatz (c/o [...], [...]). Am
19. Oktober bekam ich dann eine Bestätigungsmail. Erst jetzt fällt mir
darin der folgende fatale Satz auf: “Die Kundendaten zu Ihrer
Kundennummer [...] haben wir am 19.10.2012 angepasst.” Es wurde also
offenbar zu diesem Zeitpunkt schon nicht nur die Lieferanschrift,
sondern auch die Installationsanschrift geändert.

Dann hörte ich (bis auf ein bisschen Hin und Her bezüglich des Versandes
der Handy-SIM-Karten) erst einmal gar nichts mehr von Ihnen.

Anfang November fragte ich dann telefonisch nach. Ich wurde dann darüber
informiert, dass im CRM-System ein Hinweis stand, dass der Kunde (also
ich) sich beim Technik-Team melden soll (irgendeine 02xx-Festnetznummer
…). Das tat ich und erfuhr den Grund für die Verzögerung: VDSL sei
doch nicht möglich (an welcher Anschrift jetzt eigentlich?). Ehrlich
gesagt finde ich es a) eine Unverschämtheit, dass ich darüber nicht
einfach sofort informiert wurde und b) ein Armutszeugnis, dass dieser
vermutlich nicht so seltene Fall in Ihren Prozessen nicht von vornherein
berücksichtigt wird. Ich habe mich dann einverstanden erklärt, das
normale DSL 16.000 zu nehmen. Mein Gesprächspartner sagte mir übrigens,
dass ich auf VDSL umsteigen könnte, sobald das technisch möglich ist.
Wieviel ist diese Zusicherung eigentlich wert? Im Zweifel hätte man mir
vermutlich gesagt, dass ein Produktwechsel erst nach Ende der
Mindestvertragslaufzeit möglich ist, richtig?

Ich bekam dann erneut eine Anfrage betreffend Vorbesitzerdaten, die ich
sofort mit denselben Informationen wie beim ersten Mal beantwortete,
sowie die gleiche vollkommen inhaltsleere Bestelleingangsbestätigung
(insbesondere ohne bestelltes Produkt, Preis oder
Installationsanschrift). Am 8. November wurde mir dann der
Schaltungstermin für gestern, 22. November 2012, mitgeteilt.

Es schien also endlich alles gut zu laufen. Das Paket mit der Hardware
traf auch irgendwann ein, ebenso eine Rechnung für die Hardware. Leider
kam mir dann für den 22. November 2012 eine Beerdigung dazwischen (Sie
brauchen mir jetzt kein Beileid aussprechen, Sie kennen weder mich noch
kannten Sie meine Tante). Ich fand Gott sei Dank eine Nachbarin, die für
mich auf den Telekom-Techniker warten konnte. Gestern um 10:30 Uhr
erhielt ich dann einen Anruf Ihres Kundendienstes betreffend den
bevorstehenden Technikertermin. Ihr Kundendienstmitarbeiter holte dann
den Techniker mit in der Leitung. Nach dem ersten Satz war schon alles
klar: “Ich stehe hier vor dem Podbi-Park, welchen Eingang muss ich denn
nehmen?”. Der Techniker wollte also einen DSL-Anschluss an meinem
Arbeitsplatz in einer Gewerbeimmobilie in der Innenstadt von Hannover
schalten. Dass das mit den Vorbesitzerdaten nicht ansatzweise
zusammenpassen konnte, war — natürlich — vorher auch noch niemandem
aufgefallen. Natürlich wurde der Techniker-Einsatz jetzt abgebrochen,
denn Hannover-List und Hannover-Kleefeld sind zwei vollkommen
verschiedene Vermittlungsstellen. Dummerweise wartete jetzt auch meine
Nachbarin vergeblich auf den Techniker, denn ich hatte leider keine
Möglichkeit, sie zu informieren. Danach sprach ich noch kurz mit Ihrem
Kundendienstmitarbeiter. Ergebnis: Ich sollte schon wieder irgendwo
anrufen und die Details der Schaltung klären, damit ich dann ganz bald
und jetzt auch wirklich meinen Anschluss bekomme.

Ich hoffe, Sie haben Verständnis dafür, dass ich nach diesen Vorfällen
absolut kein Interesse mehr an einem DSL-Anschluss von 1&1 habe.
Vielleicht helfen Ihnen meine Schilderungen dennoch, die Qualität Ihrer
Produkte zu verbessern.

Mit freundlichen Grüßen,

Jens Müller

Stand der Technik oder bleeding edge?

An der Fakultät für Informatik des KIT ist ein Vortrag zum Thema “How Do Professional Developers Comprehend Software?” angekündigt. Insgesamt möchte ich das gar nicht beurteilen, aber über einen Satz bin ich gestolpert:

Overall, our results show a gap between program comprehension research and practice as we did not observe any use of state of the art comprehension tools and developers seem to be unaware of them.

Das offenbart ein sehr merkwürdiges Verständnis des Begriffes “Stand der Technik”. Wenn niemand das einsetzt und niemand das kennt, ist es offenbar nicht Stand der Technik. Über die Gründe kann man spekulieren. Vermutlich ist das Zeugs, an dem der Vortragende vermutlich forscht und das er nun zum Stand der Technik erklären möchte, dafür einfach noch nicht ausgereift genug, und wird es möglicherweise auch nie sein. Im besten Falle könnte man es dann als bleeding edge bezeichnen, im schlechtesten Fall geht es, wie so oft bei akademischen Lösungen, an den eigentlichen Problemen in der Praxis meilenweit vorbei.

Makler und Vermieter

Wie vielleicht einige schon mitbekommen haben, arbeite ich jetzt in Hannover. Demnächst werde ich meine Karlsruher Wohnung dann auch endgültig aufgeben.

Meinen Vermieter hatte ich schon vor der Kündigung per Mail informiert, dass ich “gegen Jahresende” ausziehe. Darauf gab es erstmal gar keine Reaktion. Ende August habe ich dann fristgerecht zu Ende November gekündigt. In dem Schreiben habe ich dann auch mitgeteilt, dass ich die Wohnung demnächst aufräumen werde (vor einem Monat auch geschehen) und Besichtigungen gerne auch in meiner Abwesenheit geschehen können. Darauf bekam ich dann auf meine Mail (siehe oben) auch eine Antwort, mit Nachfragen, was von der Küche und an sonstigen Sachen in der Wohnung bleiben würde. Er (der Vermieter) würde demnächst den gleichen Makler beauftragen, über den auch ich damals die Wohnung gemietet habe. Soweit ok. Aber dann passierte erstmal nix. Diese Woche meldete sich dann der Makler. Ob ich denn Freitag Zeit für eine Besichtigung hätte. Ähm, nein. Ich würde zwar am Wochenende nach Karlsruhe kommen, aber erst abends. Dann vielleicht Samstag. Ähm, nein. Auch wenn ich in Karlsruhe bin, würde ich nur ungern jetzt schon mein Wochenende für irgendwelche Besichtigungen verplanen. Er könne das aber auch gerne ohne mich machen, die Wohnung sei auch halbwegs aufgeräumt (sie ist sogar ziemlich sehr aufgeräumt, hatte ich gar nicht mehr in Erinnerung). Hmm, ja, aber er habe gar keinen Schlüssel. Also habe ich ihm mitgeteilt, dass aber der Vermieter einen habe. OK, dann würde er da mal Kontakt aufnehmen.

Meine Güte, reden die Leute auch irgendwie miteinander? Wenn ich dem Vermieter mitteile, dass er Besichtigungen gerne ohne mich durchführen kann, ist es doch nicht völlig abwegig, dass er das auch dem Makler mitteilt. Und der Makler hat offenbar schon einen ersten Interessenten, war aber noch nicht (für Fotos beispielsweise!) in der Wohnung. Der Vermieter anscheinend auch nicht – dabei wäre es ja nicht völlig abwegig, den Quasi-Leerstand für eine Besichtigung und eventuell notwendige Instandhaltungsarbeiten zu nutzen.

Die Haltung sowohl von Vermieter als auch Makler scheint hier aber eher “Gebt mir das Geld und lasst mich in Ruhe.” zu sein :-/

Internal Server Error beim MDN

Ich hatte mich über Interpunktionsfehler im Mozilla-Entwicklerhandbuch des Mozilla Developer Networks (MDN) geärgert. Allerdings nur so geringfügig. Aus gutem Grund.

Als ich das kurz in einem IRC-Channel von Mozilla anmerkte, kam die Frage, ob ich schon einen Bug angelegt hätte. Nein, denn: Es hat mich nur geringfügig geändert, und sowas unterbricht immer den Arbeitsfluss. Aber wo schonmal die Frage kam, bin ich es halt doch angegangen.

MDN ist ein Wiki. Ich war mir ziemlich sicher, mich dort schonmal angemeldet zu haben. Ein Passwort war im Firefox aber nicht (mehr) gespeichert. Egal, also anmelden. MDN benutzt inzwischen “Persona”. Das hieß früher mal “BrowserID”, ist aber nicht ansatzweise browserbasiert. Es ist irgendwie eine Alternative zu OpenID und SAML SSO, ohne das einem erklärt wird, warum man sich für Single Sign On nochmal wieder ein Konto anlegen soll. Dort hatte ich mich eigentlich auch schonmal angemeldet. Aber vermutlich war das, als es noch nicht Persona hieß. Also hab ich dort eine E-Mail-Adresse registriert. Mit der bin ich dann zurück zu MDN. Dort sollte ich einen Benutzernamen angeben. “tessarakt” gibt es schon. Aha, habe ich also doch schon ein Konto. Weiter unten konnte man sich dann zuschicken lassen, welche E-Mail-Adresse mit dem Konto verbunden ist. Also angeklickt. Ergebnis:

Persona hilft natürlich auch nicht beim tatsächlichen Verwalten mehrere Identitäten. Es ist nur die zigste Neuimplementierung von etwas, was es schon längst gibt, ohne über die eigentlichen Probleme auch nur nachzudenken.

Jedenfalls war die zuerst angegebene Adresse offenbar nicht die, die zu dem MDN-Konto gehörte. Als ich die zweite bei Persona angab, behauptete die/der/das:

Wir haben gerade eine E-Mail an diese Adresse verschickt! Wenn Sie wirklich noch eine senden möchten, warten Sie ein oder zwei Minuten und versuchen Sie es dann erneut.

Nein, habt ihr nicht. Und einige Minuten später ging es immer noch nicht.

Fazit: Durch diverse Umstellungen lief das ganze natürlich nicht reibungslos “mal eben schnell”. Und bei Mozilla ist man offenbar damit beschäftigt, “lustige” Bildchen zu produzieren, um 500er-Fehler zu illustrieren, als dafür zu sorgen, dass die gar nicht erst auftreten. Mit sowas vertreibt man leicht die Leute, die man eigentlich bräuchte …

Entwicklungs-Mozilla vom Produktiv-Mozilla trennen

(UPDATE unten)

Ich wollte mal wieder einen Mozilla (in diesem Fall: Thunderbird) bauen, um damit ein wenig rumzuspielen.

Im Prinzip ist das relativ unkompliziert. Die entsprechende Seite im MDN findet man allerdings nur, wenn man weiß, dass es so etwas doch wohl geben muss (MDN-Startseite > Themen – Mozilla > über Mozilla Entwickler-Guide ins Entwicklerhandbuch > “Mit dem Mozilla Quellcode arbeiten”. Dort ist dann gleich der erste Link nicht verfügbar. Also auf Englisch umstellen. Unter “Getting the code from the Mercurial repository” findet man die ausführliche Build-Anleitung schonmal nicht. Über “Bugs for Newcomers” bin ich dann hierhin gelangt. Dort ist dann schließlich ein Link auf “Simple Thunderbird build”. Gut strukturiert geht anders.) Wenn man das gefunden hat, kann man den Code auschecken (ich habe comm-beta genommen und den Code dann lokal gleich in ein Git-Repository gepackt) und die Build-Optionen setzen:

Meine .mozconfig sieht so aus:

ac_add_options --enable-debug
mk_add_options MOZ_MAKE_FLAGS="-j4"
ac_add_options --enable-application=mail
ac_add_options --enable-trace-malloc

ac_add_options --enable-calendar

Dann wollte ich aber endlich mal (bzw. mal wieder, ich hatte in die Richtung schonmal recherchiert) das Problem lösen, dass der Development-Build natürlich ein anderes Profilverzeichnis als das produktive ~/.thunderbird nutzen soll, und sich auch problemlos gleichzeitig mit der Produktivversion starten lassen soll. Mozillen sind da leider etwas eigen … Der Channel #maildev auf irc.mozilla.org war leider wenig hilfreich: Ich solle doch einfach ein weiteres Profil (im gleichen Profilverzeichnis) anlegen und mit --no-remote starten. Ja toll, dann muss ich IIRC die Produktivversion aber ebenfalls mit --no-remote starten und das Profil explizit auswählen. Eine kurze Suche brachte zutage, dass bei Debian die Profile unter ~/.mozilla-thunderbird liegen. Also habe ich dort ins Source-Archiv reingeschaut und herausgefunden, dass das Profilverzeichnis normalerweise aus dem Anwendungsnamen ermittelt wird und die entsprechenden Variablen in application.ini gesetzt werden. Ich habe dann einfach in mail/app/application.ini eine Minimal-Änderung vorgenommen:

@@ -4,7 +4,7 @@

#filter substitution
[App]
-Name=Thunderbird
+Name=ThunderbirdDev
Version=@APP_VERSION@
BuildID=@GRE_BUILDID@
#ifdef MOZ_SOURCE_REPO

Am Namen des Executables hat das zwar nichts geändert, und am Fenstertitel auch nicht. Aber der gebaute Thunderbird lässt sich jetzt problemlos gleichzeitig mit dem “normalen” starten und schreibt seine Config nach ~/.thunderbirddev. Die Feinheiten des Build Engineerings sind mir ja ansonsten ziemlich egal.

UPDATE: Die gerade genannten Änderungen haben ab September 2013 plötzlich nicht mehr geholfen. Stattdessen (bzw. zusätzlich) habe ich nun die Einträge in mail/confvars.sh geändert.

AeroFS

Neulich hatte ich überlegt, wie ich meine computerübergreifende Dokumentenablage am besten organisieren könnte. Eine Idee dazu war dann ein verteiltes Peer-to-Peer-Dateisystem. In den Kommentaren hatte ich dazu schon einiges gefunden.

Und eine Lösung kommt dem, was ich will, ziemlich nahe: AeroFS, entwickelt von einem Start-Up in Kalifornien. Dafür, dass das noch eine early beta ist, funktioniert es erstaunlich gut. Ich habe es jetzt auf drei Computern im Einsatz, und der Sync funktioniert letztendlich auch, wenn immer nur zwei davon gleichzeitig im Einsatz sind.

Meine Hauptkritikpunkte:

  • Es kann keine Symlinks, auch nicht innerhalb einer Bibliothek. Wie man das unter Windows umsetzt, ist mir letztlich egal, aber es sollte zumindest zwischen Linux-Systemen funktionieren.
  • Im Statusfenster sind ständig irgendwelche Metadatentransfers zu sehen, auch wenn sich nichts ändert. Das ist etwas verwirrend.
  • Man bekommt keine sinnvolle Rückmeldung über den Status der automatischen Synchronisierung. Das macht die Entscheidung, ob man den mobilen Computer jetzt abschalten und mitnehmen kann, etwas schwierig.
  • Synchronisierungsprobleme (beispielsweise Konflikte oder auf einer Plattform nicht zulässige Dateinamen) werden zwar angezeigt, diese Meldungen sind aber sehr versteckt.

Insgesamt erscheint mir der Ansatz aber vielversprechend. Hoffen wir, dass die weiterhin handwerklich saubere Arbeit abliefern, dann wird das schon.

Dokumentenablage

Ich denke gerade darüber nach, wie ich meine Dokumentenablage vernünftig organisiere. Zuerst einmal betrifft das die Ablage beispielsweise von Schreiben. Bisher habe ich dafür einen Ordner “korrespondenz”, aber nur auf meinem PC zu Hause. Nun hätte ich sowas aber auch gerne synchronisiert. Ich könnte es mit rsync, unison oder Ähnlichem probieren. Aber dafür muss man dann ja die zu synchronisierenden Rechner manuell abgleichen. Oder gibt es da auch etwas, was das automatisch anstößt, sobald die sich sehen können? Und klappt das auch mit mehr als zwei Rechnern zuverlässig? Das nächste, woran ich dann gedacht habe, ist ein Versionsverwaltungssystem. Allerdings frage ich mich zum Einen, ob das nicht Overkill ist. Und ich müsste dann mal vom altmodischen SVN weg und am Besten Git ausprobieren. Benutzt das jemand für solche Zwecke? Und eine History ist ja praktisch – allerdings könnte sie bei großen Binärdateien eher hinderlich sein. In der Uni ist mir sowas relativ egal, aber wenn ich den Speicherplatz selbst bereitstellen und bezahlen muss … Benutzt jemand SVN oder Git für so einen Zweck? Irgendwelche Idee, was man mit Binärdateien oder generierten Dateien am besten macht? Jedes Mal ein neues PDF einchecken, wenn man ein Komma ergänzt hat, ist ja auch nicht das Wahre … Ebenso bei Formaten wie ODT oder ODS …

Oder wären vielleicht verteilte Dateisysteme eine Alternative? Gibt es da mittlerweile etwas Ordentliches? Als ich vor Jahren mal geschaut hatte, sah das alles ziemlich kompliziert zu konfigurieren aus … Ideal wäre da eine Lösung, die automatisch ein Overlaynetzwerk aufbaut und darüber verschlüsselt kommuniziert.

Und die Sache ist halt, dass für manche Dateien Versionierung nützlich wäre, für andere aber Overkill. Das zu kombinieren, stelle ich mir irgendwie schwierig vor …

Und was damit noch gar nicht gelöst ist, ist die Metadatenverwaltung (Beispiel: Wann wurde ein Brief abgeschickt, worauf ist er eine Antwort, etc.) und Verwaltungsfunktionen wie Wiedervorlage etc.

Ich freue mich über sämtliche Ideen zu diesem Thema …

Pseudomedizin bei der Techniker Krankenkasse

Dass die Krankenkassen in gewissem Umfang Hokuspokus wie Homöopathie bezahlen, war mir ja durchaus bekannt. Aber was dann in Ausgabe 1/2012 von TK aktuell stand, hat mich dann doch erstaunt.

Im Artikel “TK baut Leistungen weiter aus” heißt es auf Seite 6/7:

Der TK-Verwaltungsrat hat eine neue Leistung zu den alternativen Heilmethoden beschlossen. So übernimmt die TK als erste Krankenkasse ab 2012 die Kosten für nicht verschreibungspflichtige aber apothekenpflichtige Arzneimittel der besonderen Therapierichtungen Antroposophie, Homöopathie und Phytotherapie (Pflanzenheilkunde).

Danach werden noch bestimmte Ausschlüsse genannt sowie die Erstattung (bis 100 € pro Jahr und Versichertem) erläutert.

Auf Seite 24 (“Wissen”) heißt es in einem Kasten “Alternative Heilmethoden” mit einem Vermerk “NEU”:

Homöopathie Immer mehr Menschen setzen auf Homöopathie. Weil sie möglichst schonend und angepasst an ihre besondere Konstitution behandelt werden möchten. Bei der TK ist diese Leistung inklusive. Bundesweit übernimmt die TK die Kosten für homöopathische Beratung bei besonders qualifizierten Ärzten. Dabei wird, basierend auf der individuellen Krankengeschichte und einer ungefähr 60 Minuten dauernden Erstanamnese, ein umfassender Therapieplan entwickelt. Auch Folgegespräche gehören dazu. Neu: Auch die Kosten für homöopathische Medikamente werden ab 2012 bis zu einem bestimmten Betrag im Jahr von der TK übernommen (siehe auch S. 6/7).

Daran stören mich einige Sachen:

  • Normale Menschen müssen nicht verschreibungspflichtige Medikamente selbst bezahlen. Eine Ausnahme gibt es jetzt für abergläubische Menschen, die gerne unwirksame Medikamente nehmen: Nur solche werden auch bezahlt, wenn sie nicht verschreibungspflichtig sind.
  • Die wirre Lehre Rudolf Steiners (bekannt auch durch Waldorfschulen und Demeter-Biohöfe) wird geadelt, indem man sie als “Therapierichtung” anerkennt.
  • Offenbar verblödet die Mitgliederschaft der TK immer mehr, wenn immer mehr davon auf Homöopathie setzen. Ich setze lieber auf Medizin. Wenn die nicht nötig ist, liegt kein Fall für die Solidargemeinschaft vor.
  • Es wird suggeriert (nicht behauptet, wohlgemerkt!), Homöopathie sei “möglichst schonend und angepasst an ihre [=der Patienten] besondere Konstitution”. Solchen Unsinn, verlautbart von meiner Krankenkasse, möchte ich nicht mit meinen Beiträgen finanzieren. Eigentlich finanzieren das übrigens nicht nur die Mitglieder der TK, sondern alle Mitglieder der GKV über den Gesundheitsfonds!
  • Es ist ja schön, wenn Ärzte die Möglichkeit bekommen, sich intensiv mit den Patienten zu befassen. Aber warum wird das nur bezahlt, wenn der fragliche Arzt ein besonders qualifizierter esoterischer Spinner ist?

Ich frage mich ernsthaft, ob solche Regelungen von Rechts wegen Bestand haben können. Hier ein paar einschlägige Vorschriften:

§ 12 Abs. 1 SGB V, Wirtschaftlichkeitsgebot:

(1) Die Leistungen müssen ausreichend, zweckmäßig und wirtschaftlich sein; sie dürfen das Maß des Notwendigen nicht überschreiten. Leistungen, die nicht notwendig oder unwirtschaftlich sind, können Versicherte nicht beanspruchen, dürfen die Leistungserbringer nicht bewirken und die Krankenkassen nicht bewilligen.

§31 Abs. 1 S. 1 SGB V, Arznei- und Verbandmittel:

Versicherte haben Anspruch auf Versorgung mit apothekenpflichtigen Arzneimitteln, soweit die Arzneimittel nicht nach § 34 oder durch Richtlinien nach § 92 Abs. 1 Satz 2 Nr. 6 ausgeschlossen sind [...].

§ 34 SGB V Abs. 1 S. 1, Ausgeschlossene Arznei-, Heil- und Hilfsmittel

Nicht verschreibungspflichtige Arzneimittel sind von der Versorgung nach § 31 ausgeschlossen.

Da frage ich mich schon sehr, wie die TK auf die Idee kommt, diese Arzneimittel bezahlen zu dürfen. Das reißt auch der sehr allgemein gehaltene § 2 Abs. 1 SGB V wieder raus:

Die Krankenkassen stellen den Versicherten die im Dritten Kapitel genannten Leistungen unter Beachtung des Wirtschaftlichkeitsgebots (§ 12) zur Verfügung, soweit diese Leistungen nicht der Eigenverantwortung der Versicherten zugerechnet werden. Behandlungsmethoden, Arznei- und Heilmittel der besonderen Therapierichtungen sind nicht ausgeschlossen. Qualität und Wirksamkeit der Leistungen haben dem allgemein anerkannten Stand der medizinischen Erkenntnisse zu entsprechen und den medizinischen Fortschritt zu berücksichtigen.

Dass die Qualität und Wirksamkeit von Homöopathie und Steiner-Esoterik nicht dem allgemein anerkannten Stand der medizinischen Erkenntnisse entspricht ist eh klar. Geschenkt, das sieht man vermutlich nicht so eng. Aber ich sehe nirgendwo, dass diese Arzneimittel von dem Ausschluss der Erstattung nicht verschreibungspflichtiger Arzneimittel ausgenommen sind.

Ich werde jetzt bei der TK nachfragen und dann ggf. die Aufsichtsbehörde informieren.

Kalender synchronisieren mit freier Software

Nachdem ich mir jetzt einen virtuellen Server gemietet habe, dachte ich, es wäre doch eine gute Idee, der Abhängigkeit von Google zu entfliehen und meinen Kalender selbst zu hosten.

DAViCal läuft inzwischen auch (mit SSL und CACert-Zertifikat, auf einem name-based virtual host, was dank client name indication auch mit SSL geht, und vom DNS abgesehen auch unabhängig von diesem seltsamen Plesk Power Panel). Auch einen iCalendar-Export meines Google-Kalenders habe ich schon erfolgreich importieren können.

Vor dem Umstieg frage ich mich jetzt allerdings noch, wie da die Synchronisation mit verschiedenen Endgeräten aussieht. Ein paar Erwägungen:

  • Meinen privaten Kalender selbst zwischen Lightning-Instanzen zu synchronisieren, ist wohl problemlos.
  • Im Gegensatz zum Google-Kalender dürfte jetzt auch erstmals die Synchronisation von Tasks funktionieren.
  • Aber wie sieht es mit der Android-Synchronisation aus? Muss man dafür tatsächlich irgendwelche Fremdapps installieren, die dann vermutlich weniger reibungslos funktionieren als die eingebaute Synchronisation mit Google?
  • Bisher konnte ich ICS-Feeds im Google-Kalender (im Web) hinzufügen. In Lightning sind die dann leider nicht automatisch aufgetaucht, aber auf dem Android-Smartphone. Gibt es eine Möglichkeit, solche “Kalender-Abos” interoperabel und standardbasiert zu synchronisieren?

Scheduling wäre ein weiterer Punkt, den ich mal ausprobieren müsste …

Schneeschuhwanderung

Auf dem Neujahrstreff des Lauftreff Karlsruhe Mitte Januar wurde ich das erste Mal auf eine Schneeschuhwanderung aufmerksam, die Petra Guntau für den LT zum Freundschaftspreis angeboten hat. Interessant hörte sich das schon an, aber zu dem Zeitpunkt war das Wetter ja noch nicht wirklich abzusehen. Statt mich also gleich in die Liste einzutragen, habe ich erstmal gewartet, bis die entsprechenden Infos über den Verteiler kamen – das war dann Anfang der Woche der Fall. Da war es ja schon klirrend kalt, und ich hatte gerade richtig Lust auf Winter – also habe ich mich angemeldet.

Zum Glück hatte ich schon ausreichend wintertaugliche Klamotten für eine letztendlich ausgefallene Yushan-Tour vor knapp zwei Jahren angeschafft. An den Beinen waren die entsprechenden zwei Lagen (recht dünne lange Thermo-Unterhose und ebenfalls recht dünne Wanderhose) ausreichend, aber die vier Lagen am Oberkörper (ein Lauf-Funktionsunterhemd, ein Thermounterhemd, eine Winter-Laufjacke, und eine Winterregenjacke mit Fleece-Einsatz für 21,75 € von C&A) waren gerade so ausreichend. Schon interessant, ich hatte für die Beine noch eine lange Laufhose eingepackt, falls es zu kalt wird, und war eher davon ausgegangen, dass es am Oberkörper deutlich zu warm wird.

Die Wanderung führte vom Skihang in Unterstmatt hoch zum Hornisgrinde-Plateau und nach kurzer Rast auf geringfügig anderem Weg wieder herunter. Der Schnee war zwar nicht von allerbester Qualität, aber trotzdem genug, um Schneeschuhe zumindest mal auszuprobieren. Und es war richtig schön kalt. Die Mütze ist mir dank Brille immer wieder verrutscht, aber mit Kapuze war es dann halbwegs auszuhalten. Wichtig ist es jedenfalls, in Bewegung zu bleiben. Wenn wir irgendwo angehalten haben, wurde es recht schnell ziemlich kalt.

Insgesamt eine wunderschöne Tour mit traumhaftem sonnigen Wetter bei ca. -15 °C … Am Abend war ich ersteinmal hundemüde, und jetzt habe ich ordentlich Muskelkater am vorderen Schienbeinmuskel. Die Schneeschuhtouren bei Petra kann ich nur empfehlen. Zum Einstieg wohl am besten erstmal eine kurze Tour, aber es gibt auch mehrtägige Touren.

Hier erstmal ein “Symbolfoto”, sobald ich ein Foto mit mir selbst bekomme, ergänze ich es.

Leckere Speck-Champignon-Sahne-Sauce

Bei der Bayern-Aktionswoche von Lidl hatte ich auch eine Packung Semmelknödel (gekühlt, also schon mit Flüssigkeit, nicht im Kochbeutel oder so) gekauft. Darauf war ein ganz nett aussehendes Rezept für eine Speck-Champignon-Sahne-Sauce:

125 Gramm Bacon, eine gewürfelte Zwiebel und 200 g geschnittene Champignons anbraten (zweckmäßigerweise wohl so lange, bis die Champignons deutlich an Volumen verloren haben und insgesamt die Flüssigkeit weitgehend weg ist). Das Ganze dann mit 50 ml Weißwein ablöschen und wieder einkochen lassen. Darauf dann 250 ml Sahne (was ist das eigentlich für eine Unsitte, in Rezepten Sahne mit der Mengenangabe “ml” aufzuführen? Und 250 davon begegnen einem auch immer wieder – die übliche Packungsgröße sind aber 200 Gramm) und fünf Minuten köcheln lassen.

Parallel dazu zogen die Knödel 10 Minuten lang in heißer Fleischbrühe. Die Sauce war ziemlich lecker – bloß die Knödel waren nicht allzu toll (ziemlich hart und klunschig). Ich werde es bei Gelegenheit nochmal mit solchen aus dem Kochbeutel ausprobieren. Spätzle könnten auch ganz gut passen.

Die Absurdität des Parkraummarktes

Ein großes Thema in der Stadtplanung etc. ist ja der angebliche Parkraummangel in den Städten, insbesondere den innenstadtnahen Bezirken. Das hat zu zweifachem Gegensteuern geführt:

  • Die Gemeinden können für Neubauten Stellplatznachweise verlangen und tun das in der Regel auch. Die Anforderung ist wohl in der Regel, jedenfalls im Geschosswohnungsbau, dass ein Stellplatz pro Wohneinheit vorhanden ist. Alternativ sind manchmal auch Ausgleichszahlungen des Bauherrn an die Gemeinde möglich.
  • Bauträger gegen wegen des vermeintlichen Parkraummangels davon aus, dass Wohnungen ohne zugehörigen Stellplatz sich nicht vernünftig absetzen lassen. Ebenso gehen Käufer, die die Wohnung hauptsächlich als Geldanlage sehen, davon aus, dass sie sich ohne Verfügbarkeit eines Stellplatzes schlechter vermieten bzw. ggf. irgendwann in der Zukunft schlechter verkaufen lässt.

All diese Leute nutzen aber weder die Wohnung noch den zugehörigen Stellplatz. Und das führt dann dazu, dass die Erwägungen tatsächlich auf dem skizzierten, abstrakten Niveau bleiben. Das führt dann zu folgendem:

  • Der Gemeinde ist es vollkommen egal, wie der Stellplatz aussieht. Jedenfalls macht sie keine weiteren Vorgaben.
  • Dem Bauträger ist es ebenfalls egal, wie der Stellplatz aussieht. Er will aber möglichst viel daran verdienen.
  • Der Käufer der Wohnung interessiert sich ebenfalls nicht sonderlich dafür. Er muss aber eh einen Stellplatz abnehmen, und möchte nicht allzu viel dafür ausgeben.

Das Ergebnis ist dann eine Tiefgarage, bei denen es ein paar “Luxus”parkplätze gibt, die überwiegende Mehrzahl aber die gesetzlich und nach irgendwelchen Normen vorgesehenen Mindestmaße hat. Besonders hervorzuheben sind sog. Doppelparker, zum beispielweise der hier.

Sowas haben wir auch hier in der Tiefgarage, und ich war gezwungen, einen entsprechenden Stellplatz mitzumieten. Am Anfang konnte ich den untervermieten, jetzt zahle ich seit über einem halben Jahr 30 € im Monat für einen Stellplatz, den ich nicht nutze. Nun will ich mir ein Auto anschaffen (günstig von einem Verwandten …) – und muss feststellen, dass es in diesen Doppelparker nicht reinpasst. Ich werde also 30 € im Monat für einen Stellplatz, den ich nicht nutze, bezahlen müssen, außerdem 30 € im Jahr für eine Bewohnerparkerlaubnis, und obendrein ist das Auto dann dem Wetter ausgesetzt, mit dem Ergebnis eines erhöhten Verschleißes. Dem Augenschein nach sind übrigens deutlich über die Hälfte der Stellplätze in den Doppelparkern nicht benutzt. Interessant wäre es, mal zu beobachten, wie viele dauerhaft nicht benutzt werden.

Im Ergebnis ist jedenfalls festzuhalten: Es wird für viel Geld eine Tiefgarage gebaut. Statt dort komfortabel nutzbare Parkplätze einzurichten, werden aufgrund regulatorischer Zwänge und einem irrationalen Verhalten der relevanten Marktteilnehmer doppelt so viele Parkplätze eingerichtet, die dafür gar nicht mehr nutzbar sind. Also eine Investitionsruine.

Bloß: Wie kommt es dazu eigentlich?

  • Wurde die Nachfrage an Stellplätzen überschätzt?
  • War es vielleicht vor 10 Jahren wirklich noch nicht absehbar, dass viele Autos gar nicht in die damals installierten Parksysteme passen?
  • Haben die Beteiligten vielleicht einfach versucht, ihren Gewinn zu maximieren, ohne ausreichend nachzudenken?

Oder was könnten sonst die Gründe sein, die zu so einem absurden Ergebnis führen? Und wie kann man da gegensteuern?

Patch-Queue – wie organisieren?

Ich habe in letzter Zeit angefangen, Patches für ein Open-Source-Projekt (Boost, konkret die Graph Library) zu erstellen. Da ich selbst dort keine Commit-Rechte habe, bin ich darauf angewiesen, dass Entwickler mit solchen Rechten meine Änderungen für mich einchecken. Und da die auch nicht 24h verfügbar sind, dauert es eine Weile, bis die Sachen eingecheckt sind. Ich will aber ggf. mit Folgeänderungen weitermachen, die die vom ersten Patch geänderten Stellen nochmals ändern. Und da geht dann schnell das Chaos los :-(

Bevor jetzt gleich tolle Tipps kommen, dass das mit diesem oder jenem Versionsverwaltungssystem ja alles ganz einfach geht: Das Chaos dürfte zuallererstmal dadurch verursacht sein, dass ich gar nicht so recht weiß, was ich von einer Lösung erwarte. Der erste Schritt ist also eine saubere Anforderungsanalyse:

  • Diff gegen noch nicht eingecheckte Patches: Ich möchte sehen, welche Änderungen sich in meiner working copy befinden, die über die bereits erzeugten (aber noch nicht eingecheckten) Patches hinausgehen. Die Differenz zum Trunk reicht also nicht.
  • Status von Patches: Ich muss Patches als erledigt markieren können, wenn sie eingecheckt sind.
  • Zusammenfassen von Patches: Wenn ich Patches noch nicht eingesendet habe (oder ggf. auch dann noch), will ich mehrere Patches zu einem großen zusammenfassen können.
  • Selektives Anwenden von Patches: Ich will leicht meine/eine Working Copy auf einen Stand bringen können, der den Trunk (oder eine bestimmte Revision) und nur bestimmte Patches enthält. Das ist beispielsweise nötig, um zu prüfen, dass die voneinander unabhängig sind.
  • Unterstützung bei der Erstellung von Patches: Optimal (aber auch optional und eher nice-to-have) wäre, aus den lokalen Änderungen in der lokalen working copy gegenüber dem Trunk (ggf. zuzüglich einer Auswahl von Patches) einen Patch erstellen zu können – aber nicht mit sämtlichen Änderungen, sondern Auswahlmöglichkeiten bezüglich der Dateien und der einzelnen Änderungen darin. Das geht aber zur Not auch manuell, ggf. mit Nachbearbeiten.

Hat jemand eine Idee, wie man diese Funktionalität am besten umsetzt? Gibt es für so etwas fertige Tools? Ist es vielleicht mit bestimmten Versionsverwaltungssystemen besonders einfach? Git wird ja ständig für alles Mögliche in höchsten Tönen gelobt. Nutzt es vielleicht auch hier? Wenn ja, wie lassen sich obige Anforderungen auf die Begrifflichkeiten von Git (oder einem anderen System) abbilden?

Boost, LEDA und meine wiederhergestellte Ehre

Neulich, als ich gerade Urlaub hatte, standen bei mir im Büro zwei Studenten, die einen Fehler in meiner Boost-Implementierung entdeckt haben wollten (wie mir danach mein Büromitbewohner berichtete). Zumindest habe ich mich gefreut, dass den Code jemand benutzen wollte. Allerdings haben die beiden sich dann nicht mehr gemeldet. Über Umwege erfuhr ich dann am Wochenende, was der Fehler ist: Es fehlt in leda_graph.hpp eine spitze Klammer:

[sourcecode language="cpp"] template <class vtype, class etype, class PropertyTag, class Key>
inline
typename boost::property_traits<
typename boost::property_map<leda::GRAPH<vtype, etype>,PropertyTag>::const_type
::value_type
get(PropertyTag p, const leda::GRAPH<vtype, etype>& g, const Key& key) {
return get(get(p, g), key);
}[/sourcecode]

Es hat also nicht nur jemand diese Templates auf bisher ungetestete Art und Weise verwendet – das hier knallt schon, wenn man leda_graph.hpp nur einbindet … Dass ich diesen Fehler verursacht haben sollte, erschien mir etwas unplausibel – denn ich habe den Header ja damals benutzt, und mein Programm kompilierte. Also habe ich mir die SVN-Historie angeschaut.

[sourcecode]————————————————————————
r36836 | dgregor | 2007-01-29 20:29:06 +0100 (Mo, 29. Jan 2007) | 2 Zeilen

Improvements to LEDA adaptors, from Jens Mueller[/sourcecode]

[sourcecode]
@@ -528,11 +884,11 @@
inline
typename boost::property_traits<
typename boost::property_map<leda::GRAPH<vtype, etype>,PropertyTag>::const_type
- >::value_type
+::value_type
get(PropertyTag p, const leda::GRAPH<vtype, etype>& g, const Key& key) {
return get(get(p, g), key);
}
[/sourcecode]

Die ersten Indizien sprachen aber gegen mich: In dem Checkin meines Patches von Douglas Gregor wurde auch das > entfernt. Trotzdem: Irgendwie konnte das doch nicht sein. Also habe ich die Mail herausgesucht, mit der ich den Patch eingereicht habe. Anscheinend habe ich damals den Programmcode im Body der Mail verschickt, statt als Anhang. Klar, mit der Policy von Boost, die Zeilen auf lesbare Länge zu begrenzen, hat das ja auch wunderbar funktioniert. Allerdings wurde dabei offenbar ein > als gequoteter Text interpretiert. Douglas hat dann einfach den Text in eine Datei kopiert und das fehlende > nicht bemerkt. Jens nix schuld, meine Ehre ist wiederhergestellt. Und da es keine automatisierten Tests für die LEDA-Bindings gibt (dafür bräuchte man ja eine LEDA-Installation, und die gab es damals nur gegen Geld), ist das niemandem aufgefallen. Viel irritierender finde ich aber, dass den Fehler vier Jahre lang niemand bemerkt hat :-(

Naja, jedenfalls wurde mir damals angeboten, Maintainer der LEDA-Bindings zu werden. Inzwischen gibt es eine kostenlose Version der LEDA-Bibliothek. Insofern eine gute Gelegenheit, auf das Angebot zurückzukommen. Anscheinend hat sich auch niemand um die Datei gekümmert, und sogar Verbesserungsvorschläge mit fertigen Patches wurden nicht bearbeitet. Vielleicht würde es sich ja lohnen, die wieder hervorzukramen …

TV-Out mit Nvidia unter Linux?

Ich würde gerne mal TV-Out so einrichten, dass es komfortabel benutzbar ist. Die Anleitungen, die man dazu im Netz so findet, haben mich bisher nicht weiter gebracht.

Im Moment benutze ich den Binär-Treiber von Nvidia nebst passendem Kernel-Modul. Damit ist es offenbar nicht möglich, Bildschirme zur Laufzeit dynamisch hinzuzufügen. Wenn ich mit nvidia-settings den Monitor am HDMI-Ausgang erkennen lasse und hinzufüge, schreibt der das in die xorg.conf, und ich muss den X-Server neu starten, bevor die Änderung aktiv ist. Der TV-Bildschirm ist dann virtuell gesehen rechts vom Hauptbildschirm, der Mauszeiger erscheint also auf dem TV, wenn ich ihn über den rechten Bildschirmrand bewege. Ein X-Neustart ist auch erforderlich, wenn ich den zweiten Monitor entfernen will. Und den aktiviert zu lassen, ist durchaus ungünstig: Dann verschwindet der Mauszeiger nämlich plötzlich, wenn man ihn an den rechten Rand bewegt.

Eigentlich ist dieser Modus mit der erweiterten Arbeitsfläche auch nur sinnvoll, wenn man zwei (gleich hohe) Bildschirme nebeneinander stehen hat. Ich kann mir jedenfalls kein sinnvolles Szenario vorstellen, in dem ich eine solche kombinierte Arbeitsfläche aus normalem Computerbildschirm und TV benutzen würde. Mit meinem Windows-Notebook benutze ich sowas auch nur ganz selten: Wenn ich auf dem Beamer mit meinem Notebook irgendetwas statisches zeigen muss und gleichzeitig Sachen nachschauen muss, die nicht für alle sichtbar auf dem Beamer erscheinen sollen. Aber für Präsentationen benutze ich entweder getrennte Displays (wenn das entsprechende Programm einen Präsentationsmodus hat, in dem es auf dem zweiten Display eine Vollbilddarstellung ausgibt), oder ansonsten halt auf dem zweiten Display eine Kopie des ersten Displays (wobei in dem Fall aber auch die Auflösung des Primärbildschirms an das entsprechende Seitenverhältnis angepasst wird). Unter Windows funktioniert das jedenfalls auf dem Notebook wunderbar mit einer extra markierten Taste (Fn-F7 müsste es sein). Bei TV-Out sind die Usecases ähnlich, nur dass es nicht um Präsentationen, sondern um Videos geht. Übrigens funktioniert seit Ubuntu 11.04 Audioausgabe über HDMI endlich ohne Gefrickel (will sagen, man kann diesen Ausgang im Mixer auswählen, bei Pulseaudio auch für jede Anwendung einzeln).

Was ich mir jetzt wünschen würde, ist:

  • Der Fernseher ist als gesonderter Bildschirm verfügbar. Am besten wäre es natürlich noch, wenn man das auf einfache Weise ein- und ausschalten könnte.
  • Ich kann Programme wie mplayer oder vlc unkompliziert so starten, dass sie das Bild als Vollbild aufs TV schieben, und auch den Ton über TV ausgeben.
  • Ich kann den Firefox Videos im Vollbildmodus (ob nun nativ über HTML5 oder mit dem Flashplugin) auf dem TV ausgeben lassen, nebst zugehörigem Ton.

Ist das möglich, bzw. wenn ja, wie? Ein paar runtergebrochene Fragen fallen mir schon ein:

  • Die RandR-Erweiterung ist ja dafür da, Displays dynamisch zu konfigurieren. Funktioniert die mit dem Binärtreiber von Nvidia? Die Antwort nach dem Lesen eines Eintrags im Ubuntu-Wiki scheint mir vielleicht zu sein.
  • Alternativ dazu: Läuft Nouveau inzwischen stabil? Unterstützt der RandR? Und wenn ja: wie stelle ich unter Ubuntu um von nvidia auf nouveau?
  • Welchen Support haben Desktop-Umgebungen und gebräuchliche Anwendungen für den Umgang mit sekundären Displays und Audio-Ausgängen?

Vielleicht komme ich ja jetzt mit dem Problem endlich mal weiter. Als nächstes wären dann noch einige weitere Sachen zu lösen … Beispielsweise: Ist mein Kabelanschluss defekt, oder liegt der schlechte Digitalempfang der Privatsender nur an einem minderwertigen Kabel? Wie steuere ich einen Videoplayer geeignet fern?

Tipps bei der Anschaffung eines Kleiderschranks

Nachdem ich an meinem Kleiderschrank einiges umgestalten und umräumen möchte, weil ich mit dem aktuellen Zustand nicht komplett zufrieden bin, und ich mich auch mit einem Kollegen, der vor einem Umzug und der Anschaffung eines neuen Schrankes steht, über das Thema gesprochen habe, möchte ich hier einige methodische Tipps für Anschaffung und Einrichtung eines Kleiderschranks zusammenstellen. Ich selbst habe von IKEA den PAX mit UGGDAL-Schiebetüren. Daher werde ich im Folgenden öfter mal auf meine (auch negativen) Erfahrungen damit eingehen.

Größe: Wenn nicht gerade der Platz in der Wohnung äußerst knapp ist, spricht meines Erachtens nichts dagegen, den Schrank großzügig zu dimensionieren. Zwei Meter Breite sind meines Erachtens auch für eine Person nicht übertrieben. Von der Höhe sollte der Schrank bis knapp unter die Decke gehen. 237 cm ist beispielsweise das, was IKEA im Sortiment hat. Der einzige vernünftige Grund, warum man einen Schrank nicht zur Decke reichen sollte, ist, dass man noch etwas drauflegen möchte. Das (beispielsweise Bettwäsche, einen Schlafsack, oder ähnliche Sachen, an die man selten ran muss), kann man dann aber auch in den Schrank nach ganz oben legen. Dort sieht es weniger plünnig aus und staubt nicht zu.

Türen: Prinzipiell gibt es hier die Wahl zwischen normalen Klapptüren und Schiebetüren. Sicher gibt es auch noch exotischere Varianten, aber auf die werde ich hier nicht eingehen. Schiebetüren haben den Vorteil, dass sie weniger Platz verbrauchen und einfach “cool” sind. Bei IKEA gibt es verschiedene Glasschiebetüren, die halbwegs spiegeln (wenn man sie regelmäßig putzt). Was mir erst später aufgefallen ist, ist, wie sehr auch bei der recht dunklen UGGDAL der Schrankinhalt durchscheint. Bei beiden Türarten sollte man wohl das Öffnungs- und Schließverhalten genau prüfen. Bei Klapptüren kommen ggf. Druckluftdämpfer in Frage. Schiebetüren haben den Nachteil, dass man sie beim Öffnen manuell anstoßen und bremsen muss – oder gibt es (zumindest für das zielgenaue Bremsen) auch schon praktisches Zubehör? Ein weiterer Nachteil bei Schiebetüren ist, dass man nur eine Seite des Schrankes gleichzeitig öffnen kann (was die Aufteilung des Schrankinhaltes noch wichtiger macht, dazu unten mehr). Und wenn man Schubladen hat, muss man die Schiebetür komplett öffnen (siehe oben …), um die Schublade herausziehen zu können. Fazit: Schiebetüren sind zwar nett und erscheinen auf den ersten Blick als Nonplusultra. Aber sie haben einige nicht ganz offensichtliche unpraktische Seiten. Ein Tipp von einer Bekannten war übrigens noch, komplett verspiegelte Türen zu nehmen – damit spart man sich einen gesonderten Spiegel.

Horizontale Aufteilung: Bei der horizontalen Aufteilung sollte man darauf achten, dass man bei üblichen Abläufen nicht ständig zwischen beiden Schrankteilen hin- und herwechseln muss (insbesondere bei Schiebetüren, siehe oben). Beispielsweise wird man wohl nicht jeden Morgen eine frische Hose oder einen frischen Pullover anziehen. Aber Unterwäsche, Socken und T-Shirts sollten sich schon im selben Schrankteil befinden. Ähnliches gilt beispielsweise für Sportsachen – Handtücher, Bademantel und Badehose sollten im gleichen Teil sein.

Vertikale Aufteilung: Auf einer Seite braucht es eine Stange, an die man Kleiderbügel hängen kann. Die sollte in eine Höhe, in der man (gerade noch) bequem rankommt. Wenn es mehrere Nutzer gibt, sollten die natürlich alle noch rankommen. Darüber kommt dann einfach ein Brett. Das ist die Höhe, wo man ohne Stuhl, Leiter o.ä. nicht mehr rankommt. Es ergibt sich also ein Fach, dass ideal für selten genutzte Gegenstände geeignet ist, beispielsweise zusätzliche Bettwäsche, Schlafsack o.ä. (je nach Verfügbarkeit von sonstigem Stauraum also durchaus für Sachen, die jetzt nicht typisch für einen Kleiderschrank sind). Aus Symmetriegründen macht man das Gleiche dann einfach auch auf der anderen Schrankseite. Unter Kleiderstange sollte ausreichend Platz zum Aufhängen auch längerer Kleidungsstücke (beispielsweise eines Bademantels oder auch eines Abendkleides sein). Und wenn man sich entscheidet, beispielsweise einen Bademantel unten doch aufliegen zu lassen, sollte dort zumindest eine horizontale Abtrennung zum nächsten “Fach” hin. Aktuell hängt mein Bademantel in eine Schublade hinein, das nervt tierisch. Dafür verbraucht man vertikal schon ziemlich viel Platz – im Grunde bleibt auf der Seite dann nur unten ein Fach, für das man sich schon ziemlich bücken muss und das damit auch eher für selten genutzte Gegenstände taugt. Auf der anderen Seite wird die Aufteilung dann zwingend etwas kleinteiliger …

Kleinräumigere Aufteilung: Natürlich kann nicht jedes Kleidungsstück ein eigenes Fach bekommen. Aber die Aufteilung sollte schon so kleinräumig sein, dass nur so viele Sachen reinpassen, dass man nicht den Überblick verliert. Eine Schublade in kompletter Schrankhälftenbreite ist da schon eher zu groß. Und ohne Unterteilung geraten die Sachen zwangsläufig durcheinander. Ich habe beispielsweise eine Schublade mit “Sportsachen”. Dort sind dann hauptsächlich die verschiedensten Laufklamotten (Socken, Unterwäsche, Shirts, Hosen, Oberteile …), die natürlich vollkommen durcheinander sind. Hier muss ich dringend nachbessern. Insgesamt unterschätzt man jedenfalls leicht, wieviele verschiedene Kleidungsstücke man hat. Und eine wichtige Erkenntnis ist, dass es nicht nur auf die Liegefläche (also einfache Bretter) ankommt – die muss vielmehr ausreichend unterteilt sein, außerdem muss man sie einsehen können. Bretter im 10cm-Abstand sind also beispielsweise ziemlich ungünstig – da bildet sich “hinten” zwangsläufig Chaos.

Ich hoffe, dass diese Tipps anderen helfen, ein paar Fehler zu vermeiden, die ich gemacht habe :-) Viel Spaß beim Wohnen!

Equalismus auf der Openmind – mehr Gelassenheit, bitte

Auf der #om11 wurden zu Beginn (nach der Keynote) Themen für Gesprächsrunden gesammelt (ich habe nach der Lektüredem Überfliegen des Wikipedia-Artikels gerade so meine Zweifel, ob es sich dabei tatsächlich um ein Barcamp handelte …).

Ein Vorschlag kam von Julia ‘laprintemps’ Schramm und betraf mal wieder das Genderthema (oder, wie Julia es etwas flapsig ausdrückte, “genderpopender” …) – allerdings unter dem Schlagwort “Equalismus”, um die Abneigungen zu vermeiden, die der Begriff “Feminismus” oft provoziert. Oder, wie es das Pad (missing link intended) dazu formuliert:

Equalismus. Also die Emanzipation und Entdiskriminierung des Einzelnen bei Beibehaltung aller individuellen Merkmale, die sich Mensch selber zuschreiben möchte.

Ehrlich gesagt verstehe ich das immer noch nur so ansatzweise – mir ist noch nicht wirklich klar, wovon sich der Einzelne emanzipieren soll, bzw. Diskriminierung aufgrund welcher Merkmale (oder zugeschriebenen Merkmale) abgebaut werden soll. Dass tradierte Geschlechterrollen dazugehören, ist sowas klar, aber was noch?

Jedenfalls hat mich an diesem Thema angesprochen, dass die Vorbehalte gegen das Thema “Feminismus” ernstgenommen wurden und ein ernsthafter Anlauf unternommen wurde, auf die Kritiker zuzugehen. Also hab ich bei dem Thema mein +1 gemacht und bin dann auch hingegangen. Der Raum war ziemlich voll, und hat auch zusätzliche Stühle bekommen. Im folgenden vermische ich Zusammenfassungen von Inhalten, die laut Mitschrift im Pad Teil der Diskussion waren, mit meiner persönlichen Stellungnahme dazu. Es soll eigentlich ein MP3 geben, aber wo das ist, weiß ich nicht. Insofern von meiner Seite keine Gewähr dafür, dass der Diskussionsverlauf richtig gewichtet oder auch nur richtig wiedergegeben ist.

Einig waren sich die Anwesenden, dass es in der Piratenpartei ein Problem in Bezug auf das Thema Gender gibt. Eins der Probleme mit Feminismus ist, dass der als ungerechtfertigter Vorwurf empfunden wird, Frauen zu diskriminieren und schlecht zu behandeln.

Die Diskussion drehte sich dann dahin, dass Diskriminierung nicht nur aufgrund des Geschlechts stattfindet. Eine Beobachtung war, dass “während man darüber spricht, dass Menschen über Sprachverhalten ausgeschlossen werden, man Menschen über Sprachverhalten auschließt”. Folgerung: Wir müssen allgemein am innerparteilichen Umgang arbeiten und auch Leuten Beteiligungsmöglichkeiten bieten, die bei diesen Strukturen nicht mithalten können (meine Formulierung).

Bis hierhin habe ich einiges mitnehmen und nachvollziehen können. Danke!

Heute las ich dann den Beitrag “Wir sind das Problem (#Genderdebatte)” im Blog “Wider die Windmühlen”. Darin wird begrüßt, dass die Runde zwar viele Teilnehmer hatte, aber kritisiert, dass es zu keinen konkreten Ergebnissen kam. Weiter wird kritisiert, dass die Diskussion von ein paar wenigen Leuten dominiert wurde. Festgestellt wird, dass Ausschlussmechanismen wirken, und dass jeder einzelne an diesem Problem beteiligt ist. Darauf folgt dann die Kritik, dass es “am Eingeständnis der eigenen persönlichen Mitverantwortung mangelt” und keiner die Frage “Was kann ich tun?” stellt. Immerhin wird in einer Randnotiz angemerkt “Es gab allerdings Ausnahmen, die auf der Session z.B. ihr Redeverhalten auf Veranstaltungen kritisch reflektierten”. Damit ändert dieser Beitrag auch schon. Und ich finde diese Folgerungen zu vorschnell. Was ist denn hier die Erwartungshaltung? Dass sich Leute, die sich mit diesen Themen nie vorher bewusst beschäftigt haben, ihre “eigene persönliche Mitverantwortung” sowohl zunächst erkennen als auch dann auch noch eingestehen (Mea culpa, mea maxima culpa!, oder wie?) und am besten noch die Frage “Was kann ich tun?” nicht nur stellen, sondern auch noch beantworten. So eine Erwartung wäre überzogen, zumal für eine nur gut einstündige Gesprächsrunde. Eine realistische Erwartung ist, dass ein guter Teil der Teilnehmer Denkanstöße mitgenommen hat, und zumindest in Bezug auf mich war das auch der Fall. Geduld ist wichtig, und ein wenig Gelassenheit.