Schon November

Unser neuer Türkranz

Ich spüre fast den Wind, so schnell die Zeit an mir vorbei läuft. Schon November! Ich hatte so viel zu tun, dass ich mein armes Tagebuch im Stich lassen musste.

Was ich seit der Rückkehr aus dem Urlaub (und eigentlich schon im Urlaub) getrieben habe: Ganz viele Online-Kurse belegt. Im September gab’s plötzlich viele interessante Angebote, das Nerd in mir konnte sich nicht zurückhalten. Dabei habe ich mich bis jetzt nur auf zwei Plattformen für kostenlose Kurse beschränkt: openHPI und France Université Numérique (kurz: FUN). Der erste Kurs, Einführung in die Mathematik der Algorithmik, hatte es ganz schön in sich, und statt nur die versprochenen wöchentlichen 3-6 Stunden dafür zu brauchen, habe ich, trotz Physikstudiums und Doktortitels, gut fünfzehn Stunden jede Woche dran gesessen. Andere Kurse von der FUN Plattform mussten erstmal liegen bleiben, da beim openHPI jede Woche Prüfungen abgegeben werden sollten, und es bei FUN nur eine einzige Abgabefrist für alle Prüfungen nach Ende der Kurse gibt. Python 3.6 (ich habe bis jetzt hauptsächlich mit Python 2.7 programmiert), Statistik mit R (Wiederholung), Ruby, und wissenschaftliche Kurse zur persönlichen Weiterbildung im Zusammenhang mit der Arbeit… Da blieb wenig Zeit für etwas anderes. Langsam geht es besser, einige Kurse sind vorbei, und ich kann meinen Lebenslauf mit neuen Zertifikaten beschmucken.

Endlich kann ich berichten, dass unsere Küche völlig funktional ist. Fast vier Monate nach dem Umzug. Erst musste die Steckdose für den Backofen wieder zugänglich gemacht werden. Dann haben wir festgestellt, dass der Wasseranschluss, der ebenfalls zugemauert wurde, nach dessen Befreiung nicht zu unserer Möbeleinrichtung passte. Entweder die schweren Möbeln umräumen, was bei der Winzigkeit der Küche und der Empfindlichkeit des Parkettbodens sehr schwer wäre, oder unseren teuren Spülmöbel zersägen, um ihn an die Wasseranschlüssen anbringen zu können, meinte der erste Handwerker. Dass das nicht in Frage kam, brauche ich nicht zu erzählen. Ein zweiter Handwerker wurde bestellt, und es wurde doch möglich, die Anschlüsse selber an unseren Möbeln anzupassen. Seitdem müssen wir (hauptsächlich der Ehemann) nicht mehr das Geschirr in die Badewanne spülen, die Spülmaschine ist wieder im Einsatz! Der Wasserhahn leider nicht, er hatte scheinbar im Umzug gelitten und leckte. Einen neuen Hahn haben wir erst vorgestern angebracht. Wenigstens konnte ich seit ein paar Wochen endlich wieder hemmungslos kochen. Heute Abend gab’s den längst vermerkten Kürbis-Hummus. Das Einzige, was in der Küche noch nicht zufriedenstellend läuft: Warmes Wasser. Ich muss fünf Minuten lang den Hahn voll aufgedreht lassen, ohne  zu übertreiben, bevor das Wasser warm wird, wie ich heute Abend feststellen durfte. Das kann kein Dauerzustand werden.

Seit letzter Woche habe ich eine neue Beschäftigung gefunden: Jahresplaner für 2019 selber basteln, als Geschenkidee für die Nichten vom Ehemann. Meine Nichten. Nochmal danke Carrie. Die Notizbücher sind gekauft, ich habe mir ganz viele Videos auf YouTube angeschaut, wie man sowas macht, am Freitag noch mehr Material besorgt, wie Washi Tape, und angefangen, an den Monatsdeckblättern zu arbeiten.

Doch weg von den Farbstiften. Dafür habe ich, wie der Zufall es will, mein ebenfalls lange nicht mehr benutztes Wacom-Bamboo-Tablet wieder in Betrieb genommen. Batterie aufgeladen, und los ging’s. Das Ding hatte ich mir vor sechs Jahren geschenkt, und ich hatte viel Spaß damit, bis ich nach Berlin umgezogen bin. Danach hatte ich keine Zeit mehr. Irgendwie blöd. Ich meine, wie genial ist das denn, mit Strg-Z malen zu können? Ups, die Hand ist verrutscht, Strg-Z. Menno, der letzte Einfall mit der Wasserfarbe hätte nicht sein müssen, Strg-Z. Ich hatte sogar eine Taste vom Tablet mit der Tastenkombination belegt. Von Spielchen mit Ebenen ganz zu schweigen. Das hat aber mehr mit der Software zu tun, die mit dem Tablet geliefert war. ArtRage 3 Studio Pro. So intuitiv zu benutzen, viel besser, als Adobe Photoshop Elements, das ich mir auch herunterladen durfte. Ich hatte vor einigen Jahren Malkurse belegt, aber seit dem Tablet zeichne ich viel lieber digital.

Die Mieze hat auch einiges auf dem Tablet inspiriert… Daher mein Blog-Logo!

Und zunehmend denke ich daran, mir Fahrstunden zu buchen und mein MVV-Abo zu kündigen. Ich bin seit zwanzig Jahren nicht mehr selber Auto gefahren. Der miserable Zustand vom Münchner ÖPNV wird mich dazu bringen. Ein neues Auto haben wir schon geplant. Hybrid, automatisch, von Toyota. Viel umweltfreundlicher als unser aktuelles Diesel-Polo, und eine Stunde pro Tag gespart. So konkret haben wir keinen Zeitplan, aber es wird hoffentlich ziemlich bald kommen.

Ach, und was macht der Daum? Er erholt sich langsam. Sieht schon nicht mehr so übel aus.


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

Werbeanzeigen

Das Wochenende in Bildern

Das Wochenende hat mit einem Besuch beim Pasinger Viktualienmarkt angefangen, wie inzwischen jedes Wochenende. Zuerst ein leckeres Frühstück bei Banandi’s Deli[1,2]. Fantastisch leckere Brotscheiben mit Avocado-Frischkäse-Aufstrich, ein Traum, der Tag kann kaum besser anfangen. Gefrühstückt haben wir draußen. Frisch und regnerisch, aber die Terrasse ist überdacht.

Nach dem Einkauf sind wir zurück nach Hause gefahren. Mit der S-Bahn, und ich habe mich darüber geärgert, dass es schön wieder am Wochenende Fahrplanänderungen wegen Bauarbeiten gibt. Die Stammstrecke war teilweise gesperrt. Zu Hause merkt man in den Abfahrzeiten keinen Unterschied, aber in Pasing fahren die Züge fünf Minuten früher als sonst (und von einem anderen Gleis aus), weil sie direkt danach in Westkreuz aus irgendeinem schleierhaften Grund fünf Minuten stehen bleiben. Sprich: Wir haben die S8 am Gleis weg fahren gesehen und durften ganze fünfundzwanzig Minuten auf die nächste S8 warten, weil die mit fünf Minuten Verspätung angekommen ist. Dieses eine Mal wo wir ausnahmsweise S-Bahn statt Auto zum Markt gefahren sind, weil es für die Strecke „zeitlich nichts bringt“, Auto zu fahren! Wir vergeuden viel zu viel Zeit im ÖPNV.

Das Wetter war den ganzen Tag sehr naß und wir sind zu Hause geblieben. Ich habe gebacken.

Heute bin ich viel zu früh aufgewacht. Kurz nach sechs. Ich habe mich am Rechner beschäftigt, bis der Ehemann aufgestanden ist. Das Frühstück war klasse, da wir gestern noch kurz beim orientalischen Pasinger Frischemarkt[2] waren, und ich Rosenkonfitüre gekauft habe. In Berlin hatte ich vergeblich danach gesucht und ich war gestern überglücklich, welche gefunden zu haben. Auf Fladenbrot mit Salzbutter, hmm…

Da es immer noch geregnet hat, bin ich zurück zum Rechner gegangen. Ich habe mich in letzter Zeit mit vielen Online-Kursen beschäftigt. Unter anderen habe ich mir jetzt dank openHPI Kenntnisse in der Programmiersprache Ruby angeeignet. Ruby ist… Komisch. Man kann ganz schnell und kompakt Code schreiben, wofür man in anderen Sprachen mehrere Zeilen benötigen würde, aber die Denkweise liegt mir nicht. Meine Lieblingssprache wird es nicht. Ich habe heute die letzten Abschlußprüfungen geschrieben.

Nachmittags ist mir die Decke auf den Kopf gefallen. Obwohl es immer noch kalt und regnerisch war, bin ich für einen Spaziergang raus gegangen, während der Ehemann seine Unterlagen für unseren Steuerberater zusammen suchen musste. In Richtung Sankt Gilgen, an Feldern vorbei… Die Bauarbeiten an der Kreuzung am Bahnhof Neugilching dauern seit mindestens vier Monaten, und ich sehe seitdem überhaupt keinen Fortschritt. Der Ehemann ist der Meinung, dass viele Baustellen in der Gegend nicht voran kommen, weil es an Geld fehlt.

Den Spaziergang habe ich kurz gehalten, da ich feststellen musste, dass meine Regenjacke dringend neu imprägniert werden muss, und meine Hose schnell durchnässt und eisig wurde. Eigentlich hatte ich mir im Sommer einen Regenponcho für das Freiluftkino besorgt, warum bin ich nicht auf die Idee gekommen, ihn anzuziehen?

Abends habe ich wieder gekocht. Die Pastinaken-Suppe (ohne Speck), mit ein bisschen vom Schinken-Karotten-Cake von gestern. Beim Pürieren von der Suppe ist mir eine kochende Blase in dem Topf hochgekommen und hat so an der Oberfläche explodiert, dass ein Tropf auf meinem Daum gelandet ist. Das hat sau weh getan, und tut es immer noch. Jetzt habe ich eine dicke Blase.

[1] Anmerkung vom 04.10.2019: Leider hat das Café im Sommer endgültig geschlossen…

[2] Unbezahlte Werbung, da Verlinkung.


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

Eine Woche ist rum

Auf Arbeit ist noch nicht viel passiert. Scheinbar. Ich habe eine Aufgabe bekommen und lerne dabei viel. Ich muss mich jetzt mit Access und Visual Basic vertraut machen, um mehr Funktionalität in dem Programm von meinem Chef zu bringen. Sein Programm ist aber recht kompliziert geschrieben, und mein Chef selber kann teilweise nicht mehr nachvollziehen, warum der Code an manchen Stellen so aussieht. Wie gut, dass ich wenigstens vor fünf Jahren Grundlagen von Datenmanagement mit SQL gelernt hatte! Einiges ist noch gut genug in meinem Kopf erhalten, dass ich wenigstens die Datenbankabfragen verstehe.

Von lauter Aufregung habe ich am ersten Arbeitstag glatt vergessen, die Pille einzunehmen. Und das in der ersten Woche nach der Periode, was am gefährlichsten ist. Ich habe es am nächsten Tag gemerkt, als ein komisches Gefühl sich in meinem Bauch bemerkbar machte. Ich habe sie also mit etwa zwölf Stunden Verspätung eingenommen, und weiter gemacht wie geplant. Tja, ob ich jetzt schwanger werde? Nach all den Versuchen seit der Fehlgeburt, wo es nicht geklappt hat, wäre es ziemlich blöd, ausgerechnet jetzt, wo ich meine neue Stelle in der teuersten Stadt Deutschlands eingetreten habe. Hoffen wir, dass es nicht dazu kommt. Daraus lerne ich, es ist besser, die Pille morgens statt abends einzunehmen. Da hat man mehr Zeit, in so einem Fall wieder daran zu denken, statt gut sieben Stunden durch Schlaf zu verlieren. Als der Ehemann mich am Wochenende besucht hat, habe ich ihn darum gebeten, Kondome mitzubringen.

Es traf sich gut, dass er am Wochenende gekommen ist, denn es gab weitere Wohnungsbesichtigungen. Jetzt ist es mir aber zu spät, um darüber zu berichten. Morgen stehe ich früh auf, um die ganze Zeit nachzuholen, wo ich letzte Woche zu Besichtigungsterminen fahren musste.

Wir haben noch keine Wohnung, aber eins haben wir geschafft: Ein Jahresabo zum Deutschen Museum zu erwerben. Gar nicht so teuer: 52€, sogar für uns beide! Wir haben den ganzen Samstagnachmittag dort verbracht. Am Abend waren wir im Kino, und ich kann Loving Vincent[1] wärmstens empfehlen. Das Wochenende haben wir heute vor dem letzten Besichtigungstermin mit einem schönen Spaziergang an der Isar abgerundet. Was nötig war, da wir es uns auch gut gehen lassen haben. Am Freitagabend hatte ich uns einen Tisch am Jagdschlössl[1] gebucht. Ich hatte gute Kritik über ihren Fisch gelesen, und es stimmt, mein Saibling auf Kürbis-Risotto war einfach fantastisch. Nachdem der Ehemann sich heute auf dem Rückweg zum Flughafen gemacht hat, habe ich das Fitnessstudio besucht, da ich überall in Deutschland in der Kette trainieren darf. Ich war aus Zeitmangel ewig nicht mehr sportlich tätig gewesen und habe daher als Neueinstieg nicht zu viel gemacht. Vielleicht schaffe ich es, morgen zur Wassergymnastik zu gehen.

[1] Unbezahlte Werbung, da Verlinkung.


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

Abnehmprogramm

Ein kleiner Spaß für Mimeiso, da ich gerade Mittagspause mache. Wie immer beim Programmieren ist das Prüfen der Richtigkeit der Eingaben am Aufwendigsten. Für mich wenigstens.

#!/usr/bin/python
def abnehmen(gewicht, abnahme, zeit):
    """gewicht und abnahme in kg angeben
    zeit in Wochen angeben"""
    abnahme_pro_woche = abnahme/zeit
    for i in range(zeit):
        gewicht -= abnahme_pro_woche
        print "Woche " + str(i) + ": Gewicht " + str(gewicht)

if __name__ == "__main__":
    while True:
        try:
            start_gewicht = float(raw_input("Wie viel wiegst du? "))
            if start_gewicht  start_gewicht:
                print "Von dir muss am Ende noch was uebrig bleiben!"
            else:
                break
        except ValueError:
            print "Die Abnahme muss als Zahl angegeben werden"
    while True:
        try:
            wochen = int(raw_input("Wie viele Wochen soll die Abnahme dauern? "))
            if wochen < 1:
                print "Die Dauer muss positiv sein"
            else:
                break
        except ValueError:
            print "Die Dauer muss als ganze Zahl angegeben werden"
    abnehmen(start_gewicht, ziel_abnahme, wochen)
    print "Gratuliere!"

Et voilà! Vielen Dank an Steve Ferg für diesen alten Artikel über das Eingeben von Code in WordPress! Sowas habe ich ewig gesucht!

UPDATE: Jetzt wird geprüft, dass kein Unsinn wie negatives Gewicht eingegeben wird. Dadurch wird ZeroDivisionError auch vermieden.


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

Rscript und Python

Ich hatte am Anfang des Jahres bei einem MOOC über Statistik mit R mitgemacht. Es war aus reinem Interesse. Ich habe an dem Kurs in meiner freien Zeit zu Hause teilgenommen. Ich hatte vorher von R gehört, weil ein Programm, mit dem ich eine Zeit lang arbeiten musste, R benutzte, und es musste auf meinem Rechner installiert werden. Und ich dachte, wenn ich mich weg bewerben will, wäre es nicht verkehrt, Kenntnisse über R zu haben.

Ich fand R ehrlich gesagt nicht so toll. Es ist eine mächtige Programmiersprache, um statistische Rechnungen durchzuführen, keine Frage. Die Benutzung fand ich sehr gewöhnungsbedürftig. Die Namen der Funktionen sind nicht immer nachvollziehbar und ohne erkennbare Systematik vergeben worden. Ich habe den Kurs zwar bestanden, aber immer gedacht, wenn ich R brauche, ist es am einfachsten, zu googeln, als mir zu überlegen, wie etwas gemacht wird.

Gebraucht habe ich R viel schneller als gedacht. Zwei Wochen später habe ich mich im Rahmen meiner Arbeit dafür interessiert, wie man hierarchische Clusteranalysen durchführt. Mir ging es darum, experimentelle Daten von verschiedenen Proben einer Substanz miteinander zu vergleichen. R war perfekt dafür. Mit gerade vier Zeilen Code hatte ich schon das gewünschte Ergebnis in Form eines Dendogrammes, obwohl solche Analysen nicht Teil vom Kurs waren.

Das war erst der Anfang. Danach ging mir durch den Kopf, dass ich eine solche Analyse in meinem Programm #2 gut gebrauchen könnte, als zusätzliche Information, und um Entscheidungen besser treffen zu können. Ich wollte eine große Anzahl von Modellen nach Ähnlichkeit sortieren.

Während des Kurses hatten wir mit einer graphischen Oberfläche gearbeitet. R kann man aber auch aus der Kommandozeile im Terminal benutzen, wie es eigentlich ursprünglich nur ging. Da ich es innerhalb von meinem Programm aufrufen wollte, sollte ich die Befehle der Kommandozeile benutzen. Diese werden aber nur von R interpretiert, wenn man R gestartet hat. Für die, die gnuplot im Terminal schon benutzt haben: So ähnlich ist es mit R auch.

Ich wusste zuerst nicht, wie ich vorgehen sollte, bis ich über Rscript gelesen habe. Es macht genau das, was ich wollte. Wenn man die Befehle für R in einer Datei gespeichert hat, nennen wir diese Befehle.R, kann man sie mit Rscript in R durchführen lassen. So:

Rscript Befehle.R

Von Programm #2 aus, das mit Python geschrieben wurde, sieht dann die Ausführung so aus:

import subprocess
Rins = open('Befehle.R', 'r')
Rout = open('R.log', 'w')
proc = subprocess.Popen("Rscript", stdin=Rins, stdout=Rout, stderr=Rout)
proc.wait()

Es hat nicht geklappt. Eine Fehlermeldung gab es nicht, mein Programm hat getan, als ob alles super gelaufen wäre. Die Befehle wurden richtig in den Befehle.R Dateien geschrieben. Die Dendogramme, die ich in PNG Dateien speichern wollte, wurden nicht erstellt. Die Dateien R.log waren leer, so dass ich nicht mal wusste, wo das Problem lag.

Vom Terminal aus, habe ich Rscript Befehle.R ausgeführt. Das hat funktioniert. Praktikabel ist es aber nicht, weil ich eigentlich Tausenden von solchen Rechnungen machen lassen wollte, für verschiedene Teile von den Modellen, und dafür die Jobs zu einem Pool geschickt hatte, um sie mit unserem Hochleistungsrechner parallel laufen zu lassen. Es musste von meinem Programm aus laufen können.

Im Terminal habe ich Python gestartet und die Befehle eingegeben. Diesmal wurde in die R.log Datei geschrieben. Drin war eine für mich kryptische Fehlermeldung, die so endet, nachdem die Hilfe von Rscript ausgedruckt wurde:

'file' may contain spaces but not shell metacharacters
Expressions (one or more '-e ') may be used instead of 'file'
See also ?Rscript from within R

Nicht nachvollziehbar. Die Eingabedatei Befehle.R hatte doch keine Shell-Metazeichen in ihrem Namen enthalten. Am Ende habe ich den Code so geändert, und das hat geklappt:

import shlex, subprocess
Rcommand = "Rscript Befehle.R"
Rins = open('Befehle.R', 'r')
Rout = open('R.log', 'w')
proc = subprocess.Popen(shlex.split(Rcommand), stdout=Rout, stderr=Rout)
proc.wait()

Warum es bei der ersten Variante nicht funktioniert hat, weiß ich immer noch nicht. Es muss damit zusammen hängen, wie mit stdin die Eingabedatei zum Programm übergeben wird.


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

Dumm gelaufen…

In meiner Arbeitsgruppe bin ich vor allem als Programmiererin tätig. Es war für mich damals ein gewagter Schritt, die Stelle anzunehmen, da ich vorher nur mit C und Fortran gearbeitet hatte und keine Ahnung von Python hatte. Ich habe mich mit der neuen Sprache doch relativ schnell abgefunden und gelernt, wie mein Vorgänger zu programmieren, da ich an seinem Projekt weiter arbeiten musste. Inzwischen ist mir klar geworden, dass er selber Python nicht so gut beherrschte und teilweise sehr suboptimale Lösungswege benutzt hat. Die jetzt zu verbessern würde so viel Zeit kosten, dass es mir besser erscheint, das Programm komplett umzuschreiben. Aber darum geht’s heute nicht.

Ich war damals nicht nur in Python eine Anfängerin, sondern auch im Umgang mit Linux. In meinem früheren Institut hatten wir nur Windows benutzt. Ja, während meiner Diplomarbeit musste ich mit Unix arbeiten. Da waren aber schon mehr als fünfzehn Jahre vergangen. Ich konnte mich gerade noch an die Befehle cd und ls erinnern. Und tail -f, warum auch immer. Es gab vieles nachzuholen. Dazu gehört ein großer Dank an meinem IT-Kollegen.

Es war für mich also schon ein bisschen beängstigend, als Uschi mich nicht mal ein halbes Jahr nach meiner Einstellung gefragt hatte, mich um die Aktualisierung der wissenschaftlichen Programme auf unserem Server zu kümmern. „Was, im Ernst jetzt? Aber ich verstehe nur Bahnhof, ich mache sicherlich nur alles kaputt…“ habe ich in dem Moment gedacht. Uschi war scheinbar der Meinung, da ich programmiere, kann ich alles. Und: Es klappt doch. Nochmal Danke für die Hilfe an meinem IT-Kollegen.

Vor Kurzem habe ich für mein wissenschaftliches Projekt eine Software A benutzt. Sie war mit meinen Daten nicht ganz zufrieden und ist bei einem bestimmten Schritt immer wieder mit der gleichen Fehlermeldung abgestürzt. Ich habe einen Autor von A kontaktiert, der mir empfohlen hatte, die allerletzte Entwicklungsversion zu installieren. Das habe ich gemacht. Es hat sich gelohnt, das Problem wurde behoben und ich konnte weiter arbeiten. Da diese Software von vielen Personen mit verschiedenen Zugriffsrechten benutzt wird, habe ich sie mit einem begrenzten Konto getestet. Darauf hatte Uschi immer großen Wert gelegen. Es lief ohne Problem. Ich habe die Aktualisierung von A in unseren internen Dokumenten protokolliert und bin später nach Hause gegangen.

Am nächsten Tag musste ich woanders als in meinem Büro arbeiten. Am frühen Vormittag habe ich eine Email von Winfried bekommen, weil ein Programm B für die Steuerung von einem Gerät nicht mehr funktionierte. Es gab eine Python-Ausnahme, gefolgt von der Fehlermeldung error while loading shared libraries: requires glibc 2.5 or later dynamic linker env: Command not found. Die Ausnahme kam aus dem von mir aktualisierten Programm (A ist in Python geschrieben). Warum die Aktualisierung von A ein solches Problem für Software B verursachen soll, die eigentlich gar nichts mit A zu tun hat, war mir ein Rätsel.

Mein IT-Kollege hat die Ursache vom Problem schnell identifiziert und beheben können. Ich hatte beim Aktualisieren von A die Kopie der alten Version behalten, daher konnte man den Pfad in der allgemeinen .bashrc Datei einfach zurück setzen. Das Gerät konnte dadurch wieder gesteuert werden. Winfried klang in seiner Email trotzdem ziemlich geärgert, weil ich angeblich A aktualisiert und das Büro verlassen hätte, ohne mich darum zu kümmern, A vorher zu testen und die Aktualisierung zu protokollieren. Das fand ich hart, weil ich es doch alles getan hatte. Ein Blick in unseren Dokumenten hätte gereicht, um Bescheid zu wissen. Ich habe ihm geantwortet, mit Verweis auf mein für alle in der Arbeitsgruppe zugängliches Protokoll.

Bei unserem Montagsmeeting kam das Problem zur Diskussion. Inzwischen hatte Winfried eingesehen, dass ich doch alles richtig gemacht hatte. Er hat dabei Mr Keen ausdrücklich angestarrt, als er langsam betonte, dass ich kein Fehler gemacht hatte. Mr Keen hat wohl anscheinend keine Zeit verloren, um über mich zu lästern, als ich abwesend war. Dass ich ihn nicht leiden kann ist offensichtlich nicht unbegründet, obwohl ich mein Bestes tue, um es mir nicht anmerken zu lassen. Das ist äußerst schwierig.

Ich habe nach dem Meeting nochmal versucht, das Problem zu reproduzieren, um es zu verstehen. Ich habe dabei gelernt, dass der Befehl, um die Software B zu starten, nicht einfach B ist, sondern, durch ein Alias, ssh -X steuerung.pc.von.geraet; B. Beim ssh wird die .bashrc Datei ausgeführt. Drin steht der Befehl source neue_A_Version, wie von den Entwicklern von A empfohlen. Der Rechner steuerung.pc.von.geraet ist aber alt, und damit gewährleistet wird, dass B immer funktioniert, hat mein IT-Kollege beschlossen, dass keine Linux-Update drauf laufen sollen. Seit Jahren. Unter anderen ist die Bibliothek glibc 2.5 nicht installiert, die A neuerdings braucht. Wenn ich auf steuerung.pc.von.geraet den Befehl source neue_A_Version eingebe, bekomme ich die gleiche Fehlermeldung. Die ist anscheinend so gravierend, dass danach einfache Linux-Befehle nicht mehr funktionieren. Selbst beim ls kriegt man dann die Meldung Command not found.

Ob es so sinnvoll ist, eine uralte Version von einem Betriebssystem zu behalten, nur damit B läuft, obwohl B von meinem IT-Kollegen entwickelt wird, bezweifle ich stark. Vor allem, wenn wir dadurch auf die neuesten Versionen von wissenschaftlichen Programmen verzichten müssen. Eine Lösung wäre jetzt, mit Hilfe von einem Alias den Befehl A durch source neue_A_Version; A in der .bashrc Datei zu ersetzen. Da steuerung.pc.von.geraet für die Ausführung von A nie benutzt wird, sollte es klappen.


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

Ein einfacher Taschenrechner

Ich habe vor einigen Wochen an einer Schulung zum Thema „Software-Entwicklung für Wissenschaftler“ in meinem Fach teilgenommen. Die Idee kam nicht von mir sondern von Winfried. Er hatte die Ankündigung der Veranstaltung gesehen und meinte, ich sollte mich sofort einschreiben und Programm #1 vorstellen. Seit einiger Zeit ist er der Meinung, ich sollte aktiv Werbung machen und an Workshops teilnehmen. Eine gute Idee, aber wie es bei Winfried häufig der Fall ist, hat er sich bei dieser Schulung nur einige Stichwörter gemerkt und nicht wirklich dafür interessiert, worum es eigentlich ging.

Ich habe mich laut seiner Anweisung angemeldet und angekündigt, dass ich gerne ein Tutorial über Programm #1 anbieten würde. Die Antwort war „gerne, aber es geht vor allem darum, über Software-Entwicklung zu erzählen, nicht um einzelne Programme vorzustellen“. Tja. Dann zu sagen, „ach nee, mache ich doch nicht“ wäre nicht gut angekommen. Eigentlich habe ich Physik studiert. Programmieren war im Studium Nebensache, und immer für bestimmte Projekte benutzt (Monte-Carlo-Simulation eines Spin-Systems, zum Beispiel). Ich dachte eher, ich habe mehr zu lernen, als ich lehren kann. Aber gut. Ich sollte über etwas erzählen, das ich gar nicht wusste, bevor ich mit meinem Projekt angefangen habe. Die Auswahl war groß, da ich Python erst kennen gelernt habe, als ich die Stelle angenommen habe.

Ich habe mich für den Entwurf von graphischen Nutzeroberflächen mit Python und Qt4 entschieden, am Beispiel von Programm #1. So etwas habe ich noch nie vorgetragen. Es hat mir viel Stress vorbereitet, und viele Stunden zu Hause gekostet, um Videos auf YouTube darüber zu sehen und selber endlich mal zu begreifen, wie PyQt4 funktioniert. Ich habe bis jetzt im Programm immer Änderungen gemacht, und da mein Vorgänger die ganze Arbeit mit der Oberfläche geleistet hatte, habe ich nicht viel Gelegenheit gehabt, mich mit dem Thema auseinander zu setzen (und es gibt ja Qt Designer). Ich habe dann ein sehr einfaches Tutorial vorbereitet, vom leeren Fenster bis zur Verlinkung von Signalen und Aktionen. Ich dachte schon, es wäre zu trivial für die anderen Teilnehmer. Eigentlich ist es zu einem der meist gefragten Tutorials geworden. Ich war überrascht. Meine Teilnehmer waren begeistert und haben tatsächlich etwas gelernt. Ich auch.

Zum Schluss habe ich als weiterführende Übung das Basteln von einem einfachen Taschenrechner vorgeschlagen, ohne Lösung. Hier ist mein Vorschlag, leider als Bild, weil man Code hier sehr schlecht indentieren kann. Er ist nicht perfekt, vor allem ist das Benutzen von eval() sicherheitstechnisch nicht empfohlen und führt zu ungenauen Ergebnissen, wie es unten benutzt wird, aber es ging darum, zu zeigen, wie man mit Signalen arbeitet.

calculator_code


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

Pfingstmontag

Ein toller Tag heute. Und was habe ich gemacht? Zu Hause geblieben.

Heute Morgen haben wir auf der Terrasse gefrühstückt. Die Sonne war ab und zu durch dicke Wolken versteckt, aber es war trotzdem angenehm warm. Bienen haben unsere Blumenkasten besucht. Die Mischung „Bienenfreude“ war offensichtlich eine gute Wahl. Im Kasten links davon wachsen die Tomatenstauden. Nur die Hälfte hat überlebt, nachdem wir sie von den Vögeln geschützt haben müssen. Die Katze hat sich kurz zu uns gesellt, geschuppert und fand es doch besser im Wohnzimmer. Wir hatten nichts interessantes für sie auf dem Frühstückstisch.

Ich habe die Wohnung weiter geputzt. Staub gewischt. Mit der Katze gespielt. Die letzten Vorlesungen vom Kurs Java für Einsteiger gehört, da die Frist für die Abgabe der Tests verlängert wurde. Der Workshop ist nach September verschoben worden. Es gab viele technische Probleme bei der Plattform für die Übungen, die für den Kurs anscheinend neu entwickelt wurde. Den Stoff der Vorlesungen direkt in Programmieraufgaben zu bearbeiten fand ich toll. Nicht die häufigen „Leider ist ein Fehler aufgetreten“ Meldungen bei der Bewertung der Übungen. Die letzten Bonus-Aufgaben haben Spaß gemacht. Man musste eine LED-Matrix steuern, um ein bestimmtes Muster zu erzeugen. Ein schön symmetrisches Muster mit drei konzentrischen Quadraten verschiedener Größen und Farben… Beim Ausführen hat man ein Foto von der Matrix geschickt bekommen, die irgendwo in den Büros von openHPI durch eine Webcam überwacht wird. Mein Lösungsansatz hat die Symmetrie des Musters benutzt und zu einer zyklomatischen Komplexität von 6 geführt, während die „einfache“ Methode mit drei doppelten for Schleifen, die im Forum diskutiert wurde, eine zyklomatische Komplexität von 7 besitzt. Ich bin schon stolz darüber, selbst wenn es für die Bewertung nichts bringt. Insgesamt sehr zufrieden. Java gelernt, Objekte und Klassen endlich richtig verstanden. Und das hat Spaß gemacht, wenn man den Frust mit der Programmierungsplattform vergißt.

Martin hat in der Zeit eine Spazierfahrt mit dem Motorrad gemacht. Ich bin noch nie mit ihm gefahren. Die Ausrüstung fehlt mir. Und, na ja, es muss nicht sein. Eigentlich hatte ich mir vorgenommen, am Wochenende zum Fitness-Studio zu gehen. Nach der Woche auf dem Fahrrad habe ich aber Lust auf Erholung und kein Bock mehr gehabt. Gestern sind wir eh schon zum seinem Vater geradelt.

Zum Abendessen gab’s eine asiatische Rindfleischpfanne. Nun, Sojasprossen hatte ich beim Edeka nicht gefunden, als ich am Samstag dort war, dafür gab’s eine Sprossenmischung. Reis hatten wir doch nicht, ich habe den Rest von der Packung Dinkel gemacht. Und statt Chiliflocken habe ich eine rote Schotte klein geschnitten und mitgebraten. Sie war nicht so scharf. Martin war auf jeden Fall begeistert.


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

Java für Einsteiger

Morgen fängt es an, für vier Wochen. Danach kommt ein zweiwöchiger Workshop. Ich habe mir den Termin schon lange notiert. Diesmal mache ich den Kurs nicht alleine, Martin ist auch daran interessiert. Mit Java habe ich noch nie gearbeitet. Vor einigen Jahren hatte ich einen autodidaktischen Versuch gestartet, der erfolglos blieb. Vielleicht war es zu viel auf einmal. Ich kannte damals nur Fortran. C hatte ich längst vergessen, seitdem ich mit meinem (jetzt schon verstorbenen) Diplom-Vater gearbeitet habe, der nur Fortran 77 benutzen wollte. Von Objektorientierung hatte ich keine Ahnung. Zum Scheitern hat auch die Programmierumgebung einen großen Beitrag geleistet. Mit Fortran hatte ich ganz normal in einem Texteditor gearbeitet (Emacs) und in der Kommandozeile die Kompilierung gestartet. Selbst für LaTeX fand ich es mit Emacs bequemer als MikTeX zu benutzen. Mit Java kam Eclipse, und ich musste damit arbeiten, um die auf Internet gefundene Tutorials machen zu können. Ich habe es gehasst und aufgegeben. Es ist um die zehn Jahre her gewesen.

Es ist eigentlich unüblich, dass ein Kurs bei openHPI anfängt, bevor der vorherige Kurs zu Ende geht. Ich habe noch eine Woche Lernmaterial über Automated Visual Software Analytics zu bearbeiten. Es wird knapp. Wir wollten heute Abend mit Martin vor dem Fernseher entspannen. Aber da er noch eine Bewerbung fertig schreiben will (immer noch keine Aussicht auf einen neuen Job) und ewig zum Formulieren braucht, kann ich weiter lernen. Es ist sowieso sehr einfach, obwohl ich im Kurs schon eine Menge gelernt habe. Ich habe nicht den Eindruck, dass die Veranstalter sich viel bemüht haben. Die Vorlesungen sind zwar gut und verständlich vorbereitet, aber die Tests sind sehr oberflächlich, und die Hausaufgaben enthalten teilweise genau dieselben Fragen. Die Herausforderung habe ich noch nicht gefunden.


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

Zu früh wach

Das passiert zur Zeit zu häufig. Es ist Sonntag und ich bin seit 06:00 wach. Gerade fünf Stunden geschlafen. Ich habe noch eine Stunde neben Martin gelegen, bis ich eingesehen habe, dass es sinnlos ist. Ich habe die Katze gefüttert. Gestern bin ich auch so früh aufgewacht. Wenigstens war der wunderschöne Anblick draußen es wert, mit dem frischen Schnee der Nacht auf die Bäumen, durch die Straßenlampen beleuchtet.

Ich hätte gedacht, dass ich mich gestern genug angestrengt hätte, um eine gute Nacht zu verbringen. Ich habe das Gästebadezimmer endlich gründlich gereinigt. Das letzte, was noch seit dem Umzug zu tun war. Es ist klein, aber es hat zwei Stunden gedauert, bis die Kachel an den Wänden schön sauber weiß geworden sind. Nicht nur die Küche war in einem grauenhaften Zustand. Letzte Woche war ich am Samstag sogar wieder beim Fitness-Studio, nach einer sehr langen Pause. Seit dem Sommer war ich nicht mehr dort. Ich hatte mir zuerst das Knie gehauen (es knackt jetzt noch häufig, wenn ich das Bein strecke), wir waren Urlaub viel unterwegs, ich habe mir diese lästige Magen-Darm-Krankheit geholt, die über zwei Wochen gedauert hat, dann sind wir umgezogen… Und seit der Rückkehr aus den Seychellen bin ich gerade ein Mal Fahrrad gefahren, die Strecke zur Arbeit ist jetzt viel zu lang, und es ist kalt. Es wurde Zeit, wieder mit Sport anzufangen. Am letzten Sonntag war ich trotzdem schon ganz früh wach, und es passiert mir regelmäßig seit einigen Wochen.

Wahrscheinlich liegt es am Stress. Letzte Woche war besonders hart, da wir wieder unser Praktikum hatten und ich für die Organisation verantwortlich bin. Ich habe noch die Skripte bearbeitet und meine Vorlesungen umstrukturiert. Das hat sich gelohnt, die Studenten waren am Ende zufrieden. Nebenbei musste ich mich um neue Probleme bei meinem Datenauswertungsprogramm kümmern (mittlerweile habe ich ein zweites Programm entwickelt, als drittes Projekt). Aus einem mir noch unbekannten Grund bleibt es bei einem bestimmten Schritt hängen und läuft nicht weiter. Es ist nicht reproduzierbar, manchmal geht’s wieder, wenn man es noch mal versucht. Ich habe die ganze Woche mit den Studenten das Programm benutzt und kein Problem gehabt. Auf meinem Rechner habe ich den Fall nie beobachtet. Aber den Nutzern passiert es jetzt häufig, wenn sie parallel zu ihren Experimenten das Programm benutzen. Genauer gesagt seit drei Wochen, nur, am Anfang hat es mir keiner gesagt. Das komische ist, dass ich seit längerer Zeit mit Programm #2 beschäftigt war und an Programm #1 nichts geändert habe. In einem anderen Fall hat sogar ein Nutzer geschrieben, dass sein Datensatz nach einer Fehlermeldung (welche, hat er nicht geschrieben) verschwunden war. Verloren. Als ob er die Messung nie gemacht hätte. Das kann nicht sein, mein Programm enthält definitiv keinen Löschbefehl für die Daten. Ich vermute eher ein Hardware-Fehler. Ich kann mir vorstellen, dass die Fehlermeldung kam, weil das Programm plötzlich keine Daten mehr zum auswerten hatte. Mit den spärlichen Informationen, die ich von den Nutzern bekomme, komme ich auf jeden Fall nicht weiter. Ich muss unbedingt eine detaillierte Logdatei erstellen, um wenigstens die genaue Stelle des Programms zu identifizieren, die jetzt Probleme macht.

Zum Stressabbau wollten wir also heute in die Sauna gehen. Leider wird’s wohl ein anderes Mal sein müssen. Ich dachte, meine Periode wäre vorbei, aber heute morgen habe ich wieder viel Blut gemerkt. Stattdessen könnten wir im botanischen Garten spazieren gehen.


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