Plötzlich läuft Qwt nicht mehr

Schon wieder Stress mit dem Mac. Ich arbeite momentan wieder intensiv an Programm #1, und habe mich bis jetzt auf einer Linux-Maschine in unserem experimentellen Raum darum gekümmert. Da mein Zimmerkollege heute nicht da ist, wollte ich mal in Ruhe im Büro arbeiten. Auf dem iMac, den ich von Uschi geerbt habe. Mac hasse ich immer noch, aber es sollte für meine Zwecke heute reichen.

Also, neueste Dateien rüber kopiert und Programm #1 gestartet. Programm #1 ist mit Python und PyQt4 geschrieben, mit Qwt5 für die Darstellung von Graphen. Inzwischen weiß ich, dass diese Teile am besten mit homebrew zu installieren sind, und bin ohne große Probleme von Maverick zu Yosemite zu El Capitan gewechselt.

Heute beim Starten von Programm #1 klappte es plötzlich nicht mehr. Da hatte ich eine mir noch unbekannte Fehlermeldung beim Importieren von Qwt5, direkt am Anfang vom Programm:

RuntimeError: the sip module implements API v11.0 to v11.3 but the PyQt4.Qwt5.Qwt module requires API v10.1

Blöd geschaut. An meinen Installationen hatte ich ewig nichts mehr geändert, warum sollte es auf einmal nicht funktionieren? Homebrew hatte ich natürlich immer wieder mit brew update && brew upgrade aktualisiert, das war’s sonst. Wenn ich ehrlich bin, weiß ich eigentlich nicht mehr, wann ich zum letzten Mal Programm #1 auf dem iMac erfolgreich benutzt habe.

Erste Google-Ergebnisse haben den Hinweis geliefert, dass ich vielleicht konkurrierende SIP oder Qt oder sonst was Versionen habe. Tatsächlich gab es vom SIP mehrere Versionen, aber eine neue Installation hat das Problem nicht gelöst. Ich habe also in homebrew alles deinstalliert und der Reihe nach reinstalliert:

brew uninstall --force pyqwt
brew uninstall --force pyqt
brew uninstall --force sip
brew install sip
brew unlink sip && brew link sip
brew install pyqt
brew unlink pyqt && brew link pyqt
brew install pyqwt
brew unlink pyqwt && brew link pyqwt

Das war jedenfalls der Plan. Bei PyQt hatte ich schon die Meldung

==> Caveats
Phonon support is broken

Keine Ahnung, was damit gemeint war. Ich habe es ignoriert, da das Verlinken danach geklappt hat. Beim Installieren von Qwt5 ging es nicht mehr so gut. Nach make und install kam die neue Fehlermeldung:

/usr/local/Cellar/sip/4.18.1/include/sip.h:32:10: fatal error: 'Python.h' file not found

Erneut gegoogelt. Bei stackoverflow hatte jemand mal vorgeschlagen, vorher

export C_INCLUDE_PATH=/System/Library/Frameworks/Python.framework/Headers

anzugeben. Ich habe trotzdem die Fehlermeldung bekommen und konnte Qwt5 nicht installieren. Bei mir war Python.h auch unter dem selben Pfad zu finden. Die Fehlermeldung bezog sich auf einen Aufruf von der Datei innerhalb von /usr/local/Cellar/sip/4.18.1/include/sip.h. Ich habe einfach ausprobiert, für alle Dateien unter /System/Library/Frameworks/Python.framework/Headers einen symbolischen Link unter /usr/local/Cellar/sip/4.18.1/include zu setzen:

sudo ln -s /System/Library/Frameworks/Python.framework/Headers/*.h /usr/local/Cellar/sip/4.18.1/include/

Und danach ging’s! brew install pyqwt lief erfolgreich, und Programm #1 kann wieder benutzt werden. Es hat mir aber zwei Stunden gekostet. Und auf dem Laptop, auf dem ebenfalls El Capitan installiert ist, habe ich das Problem gar nicht erst bekommen. Ein Rätsel, warum es aufgetreten ist.


Dieser Beitrag ist ursprünglich auf Meckereien & Co. erschienen.

Erschöpft

Müde mit Migräne. Kurz vor fünf habe ich eingesehen, dass es keinen Zweck hatte, länger bei der Arbeit zu bleiben. Ich konnte nur noch gähnen. Ich bin mit dem Fahrrad nach Hause gefahren, da ich morgen früh anfangen muss und mit dem Fahrrad schneller als mit der Tram bin. Ich bin langsam gefahren und habe jede Bodenunebenheit auf der Straße gespürt. Jedes Mal hat es einen stechenden Schmerz in der linken Schläfe ausgelöst, bis zum Auge.

Ich habe mir diese Woche nicht genug Schlaf gegönnt. Es war schon stressig, da wir seit dem Wochenende mit Martin viele Möbel-Läden besucht haben, um uns Küchen für die neue Wohnung anzuschauen. Zeitverschwendung. Wenn in Läden Preise stehen, beziehen sie sich nie auf das, was man ausgestellt sieht, sondern auf das Foto auf dem Plakat. Man kann sich so keine Vorstellung vom Endpreis machen. Wir sollten mit einem Plan der Küche kommen und sagen, was wir uns als Material und Geräte vorstellen, und einen Preisvorschlag erstellen lassen. Meine Mami sagt, dafür sollte man pro Laden gut anderthalb Stunden planen.

Heute Morgen bin ich von Martin’s Wohnung aus mit dem Fahrrad zur Arbeit gefahren. Ich hatte es seit fast drei Wochen nicht mehr gemacht. Ich habe anderthalb Stunden gebraucht. Mir ging’s zuerst gut, dachte ich, aber danach habe ich mich doch müde gefühlt. Kaffees und Schokoriegel haben nicht geholfen. Gegen 14:00 habe ich die ersten Anzeichen von einem Kopfschmerz wahrgenommen und Paracetamol geschluckt. Ohne Wirkung.

Bei der Arbeit ging es sowieso seit dem Morgen schleppend. Ich habe viel Zeit damit verbracht, Google-Suchen über Qwt5 und PyQt4 zu machen. Ich habe Daten, die mein Vorgänger in meinem Programm in einigen Plots dargestellt hatte. Ganz einfache x:y Daten. Die Darstellung sollte aber 1/x2:y sein, mit den Werten für x auf der x-Achse, nicht für 1/x2. Ein Kopfzerbrechen. Ich habe den Eindruck bekommen, dass QwtScaleEngine gebraucht wird. Was QwtScaleEngine macht, ist aber, zwischen linearer und logarithmischer Darstellung zu wechseln, mehr nicht. Ich müsste eine neue Funktion definieren, um eine eigene Darstellung mit 1/x2 zu kreieren. Es würde QwtScaleTransformation involvieren. Wie, ist mir nicht ganz klar, so spärlich die Qwt-Dokumentation ist. Dort ist nichts erklärt, es gibt nur eine Auflistung von allen Klassen und Attributen. Keine Ahnung, wie man sie benutzen soll. Ich habe sowieso nur die Dokumentation für die Version 6.1.1 gefunden, und ich arbeite mit einer älteren Version, bei der QwtPowerTransform nicht existiert. Ein Beispiel für eine personalisierte Skalierung habe ich gefunden, mit vielen neuen Klassen zu definieren, was mir zu aufwendig war. Eine einfache Lösung des Problems scheint es nicht zu geben. Kein Wunder, dass mein Vorgänger stattdessen

myengine = self.ui.qwtPlot.axisScaleEngine(Qwt.QwtPlot.xBottom)

Qwt.QwtScaleEngine.setAttribute(myengine, Qwt.QwtScaleEngine.Inverted)

benutzt hat. Das löst das Problem leider nicht wirklich.

Ich habe meine Suche aufgegeben, als Uschi nachmittags zu mir kam und meinte, er würde meine Daten über die Download-Statistik vom Programm, die ich ihm gestern geliefert hatte, für merkwürdig halten und ich sollte sie überprüfen, bevor er sie in seinem Vortrag morgen benutzt. Seit der Freigabe in Februar hat sich die Anzahl der Nutzer verdoppelt. Es kam ihm suspekt vor, weil wir bei jedem Download eine automatische Email bekommen, da die Nutzer ein Registrierungsformular ausfüllen müssen, und er hätte nicht so viele in seinem Postfach. Ich habe meine Zahlen geprüft, was mir eine Stunde gekostet hat, und dasselbe Ergebnis wie gestern bekommen. Das mache ich anhand einer Mailing-Liste, die per Hand gepflegt werden muss. Wir hatten unsere IT-Abteilung gefragt, die Email-Adressen der Nutzer automatisch in der Liste zu speichern, aber „es geht nicht“. Ich muss regelmäßig alle Emails öffnen und prüfen, ob die Adresse schon in der Liste ist, bevor ich eine neue einfüge (wenn ich Updates ankündige, laden die Nutzer das Programm erneut herunter).

Es hat meine Stimmung nicht verbessert, dass Kate mich immer wieder zwischendurch mit idiotischen Fragen belästigt. Heute wollte sie wissen, wie man mit PowerPoint unter Linux PDF-Dateien erzeugen kann. Seufzer. Wie häufig habe ich ihr schon gesagt, dass es unter Linux kein PowerPoint gibt? „Ach nee, mit OpenOffice“, korrigierte sie sich dann. Wir haben eigentlich LibreOffice, aber diese Feinheit habe ich nicht mehr erwähnt. Programm selber geöffnet, unter „File“ geschaut, und da war, mittig, nicht zu übersehen, die Zeile „Export as PDF“. Hätte sie bloss die Menü-Punkte gelesen, hätte sie die Frage nicht stellen müssen. Promovierte blöde Kühe gibt es wohl.

Ich wollte eigentlich heute Abend mit dem Vortrag anfangen, den ich nächste Woche bei einer Tagung halten soll. Mit der Migräne wird es heute nichts mehr.


Dieser Beitrag ist ursprünglich auf Meckereien & Co. erschienen.

Dienstag

Mir geht’s schon viel besser. Das hätte ich nach heute Nacht nicht erwartet. Mit Kopfschmerz gegen elf ins Bett, um halb drei aus irgendeinem Grund wieder wach. Unruhig. Ständig gewälzt. Um halb sechs habe ich noch den Wecker geschaut. Um sieben hat er mich plötzlich aus einem heißen lesbischen Traum gerissen. Am frühen Morgen nach langer Schlaflosigkeit sind meine Träume immer sehr merkwürdig.

Als ich auf dem Weg zur Arbeit in die Straßenbahn eingestiegen bin, war Winfried auch drin. Er wohnt ein bisschen weiter weg auf der gleichen Linie. Wir haben uns während der Fahrt über die Entwicklung meines Projektes unterhalten. Wenn Uschi nicht da ist, übernimmt er ja seine Funktion als Chef. Ich habe wieder im Büro meiner Kollegen gesessen und versucht, mein Programm auf einer frischen Installation von openSUSE 13.1 zum Laufen zu bringen. Vergeblich. Qwt5 kann nicht gefunden werden, obwohl ich alle Pakete installiert habe. Google hat mich im Stich gelassen. Die Kaffeemaschine hat erneut gestreikt. Martin war wegen eines Termins den ganzen Vormittag nicht da. Er ist kurz vor der Mittagspause angekommen. Mittags waren wir nicht alleine. Ich bin dafür mit ihm nachmittags im Labor geblieben, aber natürlich ging’s primär um die Arbeit. Keine süße Zärtlichkeit wie am Wochenende. Um fünf war er schon weg, um zum Sport zu gehen. Mist.

Nach weiteren erfolglosen Versuchen mit Qwt5 bin ich zum Fitness-Studio gegangen. Mein Training lief super. Zwei Stunden, wie immer. Ich werde beim nächsten Mal das gleiche machen, aber es wird danach wieder Zeit, einige Gewichte zu erhöhen, damit es anstrengend genug bleibt. Ich habe fast die 70kg verlassen. Das Gewicht hatte ich ewig nicht mehr erreicht, obwohl ich nicht besonders auf meine Ernährung aufpasse. Döner-Box mit Pommes gibt’s relativ häufig. Selbst als ich vor drei oder vier Jahren täglich trainiert hatte, vor meinem Ischias-Problem, war ich nie unter 74kg gekommen. Ich muss zum Arzt gehen, um meinen Zustand prüfen zu lassen. Ich habe seit dem Sommer zu schnell abgenommen, und ich erinnere mich an mein Diploma-Jahr, als ich wegen der ganzen Paukerei super dünn geworden war und den Sommer danach mit Eisen- und Magnesium-Tabletten verbringen musste, weil erhebliche Mängel durch eine Blutspende zufällig ans Tageslicht gekommen waren.

Aber jetzt fühle ich mich toll. Das Training hat Spaß gemacht. Mein Ischias verhält sich fast wieder, als ob nie etwas gewesen wäre. Morgen gibt’s ein enges Kleid mit Pumps. Vielleicht kann ich Martin überzeugen, etwas am Abend zu unternehmen. Ohne dass meine (deutlich ältere) Kollegin Mieke es mitbekommt. Ich mag es nicht, wie sie sich manchmal mit ihm verhält, vor allem, da sie sich vor kurzem von ihrem Mann getrennt hat. Als ich das letzte Mal mit Martin zum Weihnachtsmarkt verabredet war, hatte sie es irgendwie erfahren und wollte sich einmischen. Etwas hatte sie doch im letzten Moment daran gehindert. Es war ein bisschen der Grund, warum ich zum Labor mit ihm heute Nachmittag gegangen bin, da er zum ersten Mal dort arbeitet und sie ihn vorher einweisen musste. Ich habe selber nie im Labor etwas gemacht, ich konnte dadurch meine Absicht gut tarnen. Vielleicht bilde ich mir nur etwas ein. Mit mir verhält sie sich auch überfreundlich.


Dieser Beitrag ist ursprünglich auf Meckereien & Co. erschienen.