USB-Stick plötzlich nur noch lesbar

Ich habe seit Anfang des Jahres viele Fotos mit meiner Kamera gemacht. Meistens ging es mir darum, meiner weit entfernten Familie über Facebook meine neue Umgebung zu zeigen. Bevor ich die Fotos hochlade, bearbeite ich sie kurz mit Gimp. Ich habe noch kein Bild aufgenommen, bei dem das Nachschärfen keine Verbesserung gebracht hat.

Gimp kann man auf allen gängigen Betriebssystemen installieren. Seitdem meine Windows-Festplatte den Geist aufgegeben hat, bearbeite ich jedoch alle meine Bilder unter Ubuntu. Ich habe einen MacBook, aber das Bearbeiten von Bildern ist damit ein Graus. Den MacBook habe ich von meiner alten Arbeitsstelle übergangsweise geliehen bekommen, um Nachfragen über Programm#1 zu beantworten, bis ein Nachfolger gefunden wird. Ich hasse ja Mac. Der MacBook kommt jedoch häufig zum Einsatz, weil mein Ubuntu-Rechner nicht WLAN-fähig ist. Ich benutze immer noch mein Handy als Hotspot.

Was ich also mit meinen Fotos mache:

  1. sie aus der Kamera-Karte zum Ubuntu-Rechner kopieren,
  2. sie dort mit GIMP bearbeiten,
  3. sie nach Bearbeitung auf einem USB-Stick kopieren,
  4. sie vom Stick zum MacBook kopieren, und anschließend
  5. sie auf sozialen Medien hochladen.

Nun der Hacken: Plötzlich hat Ubuntu behauptet, ich könnte nichts auf USB-Sticks kopieren, weil alle schreibgeschützt wären. Das stimmt gar nicht, auf dem Mac kann ich alles drauf schreiben, was ich will. Warum es plötzlich alle meine USB-Sticks betrifft, weiß ich nicht. Vielleicht mag es Ubuntu nicht, wenn die Sticks auf so vielen Betriebssystemen benutzt werden. Mac hinterlässt auf Sticks jede Menge Müll in Form versteckter Dateien. Formattieren konnte das Problem nicht beheben: Weil die Sticks angeblich schreibgeschützt sind, kann Ubuntu sie nicht formattieren. Auf dem MacBook formattieren habe ich nicht probiert. Ich habe zuerst nach einer nicht so radikalen Lösung gesucht. Die habe ich hier gefunden.

Mit dem befehl lsblk kann man sich im Terminal alle verbundenen Laufwerke anzeigen lassen. Das Ergebnis sah bei mir so aus (der Nutzername wurde durch user ersetzt):

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931,5G 0 disk
├─sda1 8:1 0 100M 0 part
├─sda2 8:2 0 292,9G 0 part
├─sda3 8:3 0 345,6G 0 part
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 97,7G 0 part
sdb 8:16 0 1,8T 0 disk
├─sdb1 8:17 0 15,9G 0 part
│ └─cryptswap1 252:0 0 15,9G 0 crypt [SWAP]
├─sdb2 8:18 0 1K 0 part
├─sdb5 8:21 0 77,7G 0 part /
└─sdb6 8:22 0 1,7T 0 part /home
sdc 8:32 1 3,8G 0 disk
└─sdc1 8:33 1 3,8G 0 part /media/user/kamera_karte
sdd 8:48 1 57,7G 0 disk
└─sdd1 8:49 1 57,7G 0 part /media/user/usb_stick
sr0 11:0 1 649,5M 0 rom /media/user/LARIAN_DIV3
sr1 11:1 1 1024M 0 rom

wodurch ich erfahren habe, dass mein Stick, mit dem Pfad /media/user/usb_stick, den internen Namen sdd1 trägt. Das kann sich immer ändern, daher ist dieser erster Schritt wichtig.

Als zweiter Schritt hebt man mit dem Befehl sudo hdparm -r0 /dev/sdd1 den Schreibschutz auf. Was dieser Befehl raus spuckt:

/dev/sdd1:
setting readonly to 0 (off)
readonly = 0 (off)

Es scheint also ohne Problem zu klappen, aber das Kopieren von Dateien lief bei mir in Nautilus mit der Maus immer noch nicht.

Es könnte sein, dass einige Sektoren auf dem Stick beschädigt sind. Das prüft man mit dem Befehl sudo fsck /dev/sdd1 und repariert es wenn nötig mit dem interaktiven Output:

fsck from util-linux 2.27.1
fsck.fat 3.0.28 (2015-05-16)
0x41: Dirty bit is set. Fs was not properly unmounted and some data may be corrupt.
1) Remove dirty bit
2) No action
? 1
There are differences between boot sector and its backup.
This is mostly harmless. Differences: (offset:original/backup)
3:53/4d, 4:59/53, 5:53/57, 6:4c/49, 7:49/4e, 8:4e/34, 9:55/2e, 10:58/31
, 91:fc/33, 92:31/c9, 93:c9/8e, 94:8e/d1, 95:d1/bc, 96:bc/f8, 97:76/7b

[Geschnitten weil es sonst zu lang wird]

, 501:00/4f, 502:00/4f, 503:00/54, 504:fe/20, 505:02/53, 506:b2/59
, 507:3e/53, 508:18/00, 509:37/00
1) Copy original to backup
2) Copy backup to original
3) No action
? 3
/System Volume Information
Has a large number of bad entries. (85/93)
Drop directory ? (y/n) y
Reclaimed 2 unused clusters (65536 bytes).
Free cluster summary wrong (1810971 vs. really 1810973)
1) Correct
2) Don't correct
? 1
Perform changes ? (y/n) y
/dev/sdd1: 998 files, 78197/1889170 clusters

Es waren also ganz schön viele Fehler, die ich entfernt habe. Das Kopieren von Dateien auf dem Stick klappte danach im Nautilus immer noch nicht und erfolgte nur durch den Terminal:

cp -r ~/Pictures/20180408 /media/user/usb_stick/

zum Beispiel, wo ich das ganze Verzeichnis 20180408 mit vielen Bildern drin rekursiv auf dem Stick kopiere.

Damit ist das Problem leider nicht für immer gelöst, weil Ubuntu bei der nächsten Benutzung vom Stick wieder behauptet, der Schreibschutz wäre aktiv. Vermutlich ist es ein Zeichen, dass die Sticks alt werden und irgendwann gar nicht mehr zu benutzen sind.

Advertisements

Immer noch keinen Vertrag

Letzte Woche hatte ich mein zweites Vorstellungsgespräch bei München. Ich fürchte, so einen guten Eindruck habe ich nicht hinterlassen.

Als erstes habe ich es geschafft, trotz sorgfältiger Planung zu spät anzukommen. Den Ort kannte ich schon ungefähr, da ich mehrmals am Forschungszentrum war, aber das Institut selbst lag an einer noch unbekannten Stelle. Ich war eigentlich sehr früh angekommen. Der Pförtner am Eingang vom Gelände hatte mir erklärt, wo das Gebäude zu finden war, aber ich habe mich trotzdem verlaufen. Links, über die Brücke, dann dem Weg entlang durch die Wiese… Keine Wegbeschilderung und unauffällige Gebäudenummerierung, es musste schief gehen. Als mir klar wurde, dass ich nicht pünktlich ankommen konnte, habe ich den Gruppenleiter angerufen. Der ist dann mit dem Fahrrad durchs Gelände gefahren, bis er mich gefunden hat. Ich war zu weit weg gelaufen, der „Weg durch die Wiese“ war nicht mal zwei Meter lang und direkt vor dem Gebäude. Die Bezeichnung „Wiese“ war recht übertrieben. Ich hatte mir eine viel größere Fläche vorgestellt.

Der Vortrag lief gut, aber mich hat es irritiert, dass ich mehrmals wegen Fragen unterbrochen wurde. Gut, warum nicht. Es wurde mir nur vorher in der Einladung mitgeteilt, dass ich zwanzig Minuten Zeit hätte, und so konnte ich gar nicht mehr wissen, wie lange ich noch reden sollte. Eigentlich hat keiner auf die Uhr geschaut. Danach sind alle weg gegangen, außer der Gruppenleiter, der alleine mit mir reden wollte. Ich war gar nicht darauf gefasst, was danach geschah. Ich dachte, wir unterhalten uns. Nicht wirklich. Er hatte sich Übungen ausgedacht, die ich dann ohne Vorbereitung lösen musste. Über Datendarstellung, Zahlenpräzision… Viele theoretische Fragen, die ich nie gelernt habe. Damit musste ich mich bis jetzt nicht auseinander setzen. Ich bin halt von der Ausbildung her Physikerin, Programmierung habe ich durch Praxis gelernt. Ich dachte, es wäre von vorne rein klar, durch meine Bewerbungsunterlagen und spätestens im Laufe des Vortrages, dass ich eher mit Frontend-Entwicklung zu tun habe und keine wissenschaftlichen Algorithmen selbst entwickle. Das war dem Gruppenleiter anscheinend nicht offensichtlich, und er sah definitiv nicht zufrieden aus. Inzwischen habe ich mich über die gefragten Themen informiert, aber es zählt nicht mehr.

Was soll’s, nach einem ausführlichen und interessanten Gespräch mit einem Mitarbeiter der Gruppe, der sich mit einer ähnlichen Aufgabe wie ich beschäftigt, bin ich zur Firma gefahren. Der Arbeitsvertrag lag bereit vor. Ich habe ihn in zweifachen Ausführung unterschrieben, sowie der Vertreter vom CEO. Der CEO selbst war abwesend, seine Unterschrift fehlte noch. Mit wurde versichert, dass er, sobald er am Montag zurück kommt, den Vertrag unterschreiben würde. Ich würde eine PDF Datei davon bekommen, und meine Kopie vom Vertrag würde mir per Post zugeschickt. Ob ich nun meinen Arbeitgeber informieren könnte? Klar, meinte der Vertreter. Mein zukünftiger Chef, den ich schon bei der Tagung letzte Woche getroffen hatte, hat mich dann mit breitem Grinsen empfangen und einem Teil des Teams vorgestellt. Er hat mir mit Begeisterung erzählt, was ich alles zu tun hätte, wenn ich in Januar anfange.

Nun, heute ist Mittwoch. Und bis jetzt habe ich immer noch keinen Vertrag bekommen, weder per Post noch elektronisch. Nicht mal eine Email, um mich über die Verspätung zu informieren. Ich mache mir Sorgen. Natürlich habe ich letzte Woche meinen Chef sofort informiert, da der Vertreter vom CEO so zuversichtlich war. Da ich doch nicht die Verlängerung von meinem Vertrag unterschreibe, wird sich einiges in dem Betriebsablauf ab Januar ändern. Je früher mein Chef Bescheid weiß, desto besser. Mein Chef hat wiederum die Personalabteilung darüber informiert, dass der neue Arbeitsvertrag nicht mehr benötigt wird. Ich habe also meinen aktuellen Job hingeschmissen, und habe immer noch nichts in der Händen, um meine neue Anstellung ab Januar zu beweisen. Scheiße.

Gestern kam ein neuer Vermittlungsvorschlag der Arbeitsagentur. Wenigstens nicht so absurd wie beim letzten Mal, auch wenn meine Chancen als wissenschaftliche Referentin sehr gering sind. Meine bisherige Bewerbungen auf solchen Stellen sind immer ohne angegebenen Grund abgelehnt worden.

Windows aus der VirtualBox

Ich weiß nicht, was ich für einen Mist gebaut haben muss, aber gestern konnte ich plötzlich Windows 7 nicht mehr starten. Der Mainboard-Bildschirm erschien beim Hochfahren vom Rechner wie gewöhnt, danach hatte ich den schwarzen Bildschirm mit der Meldung, „Windows wird gestartet“, und dann wurde der Bildschirm ganz schwarz, mit dem Mauskursor in der Mitte, und dann passierte nichts. Gar nichts. Selbst nach zehn Minuten. Mir blieb nichts anderes übrig, als den Power-Knopf so lange zu drücken, bis der Rechner aus ging.

Beim nächsten Hochfahren ging es genau so. Und beim Nächsten. Irgendwann bekam ich die Auswahl zwischen normalem Start oder Starthilfe. Der abgesicherte Modus war komischerweise nicht vorhanden. Die Starthilfe wurde gewählt, aber sie konnte das Problem nicht beheben und alles, was man danach machen konnte war, den Rechner ausschalten zu lassen. Toll. Die Systemwiederherstellung, die ich vor einem Monat gemacht hatte, konnte ich also nicht nochmal durchführen.

Was ich noch machen konnte war, bevor Windows tut, als ob es hochfahren würde, die F11-Taste so lange zu drücken, bis ich ins Bootmenü komme. Von dort aus kann ich die Festplatte, wo Ubuntu installiert ist, auswählen, und Ubuntu starten. Ich denke, es war damals eine geniale Überlegung von mir, Ubuntu grundsätzlich auf eine neue, getrennte Festplatte zu installieren, obwohl die Windows-Festplatte noch viel Platz hat. Ubuntu funktioniert immer noch einwandfrei, und ich kann problemlos auf die Windows-Partitionen zugreifen und die Dateien lesen — selbst die vom Ehemann, die unter seinem Konto liegen und auf die ich unter Windows keine Leseberechtigung habe. Also scheint die Festplatte noch in Ordnung zu sein. Vielleicht ist der Boot Master Record beschädigt, und ich könnte versuchen, ihn mit dieser Anleitung wieder in Ordnung zu bringen. Vorausgesetzt, ich schaffe es, eine minimale Windows-Version mit Terminal zum Laufen zu bringen. Es erschien mir als eher unwahrscheinlich.

„Brauche ich wirklich Windows?“ habe ich mich gefragt. Ich benutze es nur noch, weil meine Lieblingsspiele auf Linux-Systemen nicht laufen. Ich gebe zu, ab und zu spiele ich immer noch sehr gerne super altmodische Spiele wie Baldur’s Gate, Neverwinter Nights oder Divine Divinity zum Beispiel. Alle mindestens fünfzehn Jahre alt, aber heutzutage findet man keine Rollenspiele mit solchen vielfältigen Geschichten mehr — sagte vor kurzem noch selbst der junge HiWi, der in unserer Gruppe arbeitet. Und wenn Diablo I nicht so schlecht mit den heutigen Grafikkarten aussehen würde, würde ich es auch noch spielen. Nachdem ich eine Sicherheitskopie von Spielständen auf der Ubuntu-Festplatte gemacht habe, habe ich mich mit virtuellen Maschinen auseinandergesetzt. Fertig bin ich noch nicht. Was ich bis jetzt gemacht habe, mit Hilfe dieser tollen YouTube-Anleitung (auf Englisch):

  • VirtualBox auf Ubuntu installiert: sudo apt-get install virtualbox (Version 5.0.40, nicht so aktuell wie die aktuellste Version auf https://www.virtualbox.org/wiki/Downloads).
  • VirtualBox Extension Pack für die VirtualBox Version 5.0.40 installiert (wenn man die aktuellste Version aufs Versehen installiert, bekommt man eine Fehlermeldung).
  • Eine geeignete ISO Datei für meine Windows-Version heruntergeladen. Die Installations-CD hatte ich zwar immer noch, aber ich fand es bequemer so. Dafür braucht man auch einen Lizenz-Schlüssel, den man beim Kauf vom Windows bekommen hat. Es liegt bei mir schon fünf Jahre her, ein Wunder, dass ich den Schlüssel trotz zwei Umzüge noch finden konnte.
  • Windows 7 in der VirtualBox gemäß der YouTube-Anleitung installiert, mit der Ausnahme, dass ich meinen Lizenz-Schlüssel eingegeben habe. Windows habe ich auf Englisch installiert, also sollte man für deutsche Versionen eventuell die Begriffe unten übersetzen. Da ich acht Prozessoren habe, habe ich vier davon Windows gegeben (unter „Settings“). Ich habe ebenfalls die Hälfte vom Speicher für Windows frei gegeben, und den ganzen Video-Speicher erlaubt. Man muss aufpassen, dass dem Host-Betriebssystem (Ubuntu) genug Ressourcen zu Verfügung stehen, um weiter laufen zu können. Sonst habe ich die automatisch ausgewählten Einstellungen benutzt.
  • Den Extension-Pack braucht man, um das Windows-Fenster maximieren zu können, sonst hat man ein Minifenster, mit dem man unmöglich spielen kann. Dafür muss man Windows in der VirtualBox im abgesicherten Modus starten können, und es funktioniert beim Drücken der F8-Taste beim Hochfahren nicht. Was man dafür machen muss (die vorgeschlagene Vorgehensweise auf der YouTube-Anleitung ab 12:07 hat bei mir nicht geklappt):
    • sich in Windows einloggen,
    • „Start“ klicken, dann im Suchfeld „run“ eingeben und die Eingabetaste betätigen,
    • im dadurch neu geöffneten Fenster, „msconfig“ eingeben,
    • im dadurch neu geöffneten Fenster, zum „Boot“-Tab wechseln und das Häkchen bei „Safe Boot“ unter „Boot options“ setzen,
    • „Apply“ klicken und Neustart zulassen,
    • dann, weiter wie in der YouTube-Anleitung ab 12:39 machen.
  • Die wichtigen Windows-Updates installieren.

Damit habe ich den Großteil von meinem sonnigen Sonntagnachmittag verbracht. Was mir noch fehlt:

  • die Auflösung vom Bildschirm richtig einstellen, vermutlich fehlt mir der Treiber der Grafikkarte,
  • Zugriff zu den externen Laufwerken (DVD…) bekommen,
  • Spiele installieren und testen, ob ich damit zufrieden bin.

Wenn alles klappt, mache ich die Windows-Festplatte platt und benutze nur noch Ubuntu und Windows in der virtuellen Maschine.

Blöde Tastenkombination im Terminal

Ich arbeite heute von zu Hause aus. Unter Ubuntu ist es einfach, mich auf meinem Rechner bei der Arbeit einzuloggen und dort zu programmieren.

Beim Programmieren benutze ich einen Texteditor. Am liebsten arbeite ich mit Emacs. Ich habe diesen Texteditor im Studium kennen gelernt, es ist schon zwanzig Jahre her. Man gibt emacs im Terminal ein, und prompt erscheint ein Fenster, in dem man Texte bearbeiten kann. Emacs ist in der Lage, die Syntax von vielen Programmiersprachen zu erkennen, und hebt manche Wörter farblich hervor, je nach dem, welchen Zweck sie in der Sprache erfüllen. Es ist für mich praktisch, wenn ich einen Variablennamen benutzen will und nicht weiß, dass es sich dabei um einen schon vergebenen Namen für eine Funktion handelt, zum Beispiel.

In all den Jahren habe ich viele Tastenkombinationen für Emacs verinnerlicht. Es ist so viel schneller, damit Funktionen auszuführen, als wenn ich mit der Maus vom Menü aus irgendeinen Eintrag suchen und klicken soll. Zum Beispiel gibt man Strg+K ein, um den Rest einer Zeile rechts vom Kursor zu löschen, oder Strg+S, um nach einem bestimmten Text zu suchen. Im Gegenteil zu allen anderen gängigen Programmen speichert Strg+S in Emacs nicht den Text, den man gerade auf hat. Zum Speichern muss man Strg+X gefolgt von Strg+S drücken. Mit Strg+X gefolgt von Strg+C verlässt man Emacs. Es klingt erstmals ganz furchtbar, aber man kann sich recht schnell daran gewönnen.

Heute arbeite ich von zu Hause aus. Da benutze ich nicht Emacs zum Programmieren. Das Erstellen einer graphischen Oberfläche dauert ewig, weil ich nicht direkt von meinem Rechner aus im Netzwerk von meinem Institut bin, und alle Änderungen brauchen auch ewig, um angezeigt zu werden. Ich benutze besser vi. Mit vi kann man ohne erkennbare Zeitverzögerung arbeiten. Ich habe lange vi ignoriert, weil es nicht so bequem wie Emacs ist. Gibt man vi gefolgt von einer Textdatei im Terminal ein, öffnet sich die Datei im Texteditor direkt im Terminal selbst. Mit der Maus kann man da gar nichts machen (manchmal geht scrollen, aber es gibt nicht mal einen seitlichen Balken dafür). Man startet vi immer im Kommando-Modus, und muss zuerst i tippen, um zum Editor-Modus zu wechseln. Erst dann kann man den Text editieren. Zum Speichern, Textsuchen usw. muss man zurück zum Kommando-Modus, indem man die ESC Taste drückt. Speichern geht dann mit :q (gefolgt von der Eingabetaste) in der Kommandozeile, speichern und vi verlassen mit :wq (write and quit).

Und so kommt es, wenn man sonst immer mit Emacs arbeitet, dass man in vi steht und als Automatismus zum Speichern Strg+X, Strg+S eintippt. So schafft man es, den Terminal komplett einzufrieren. Alles, was man danach eintippen mag, erscheint nicht mehr, wird aber trotzdem wahrgenommen. Als ich meinen Fehler gemerkt habe, habe ich zuerst ESC gedrückt und :wq eingegeben. Keine Änderung im Terminal. Beim Googeln bin ich darauf gekommen, Strg+Q einzutippen, und der Terminal wurde wieder belebt. Da ich vorher :wq eingetippt hatte, hatte ich schon vi verlassen. Unter Ubuntu auf meinem persönlichen Rechner habe ich vim installiert, eine Variante von vi, die ein bisschen cleverer ist und einen warnt. Beim Eintippen von Strg+X, Strg+C erscheint unten in der Kommandozeile die Nachricht: Type :quit<Enter> to exit Vim. Den Terminal muss man vorher natürlich trotzdem wieder beleben.

Strg+X friert den Terminal nur solange, bis man eine Taste drückt. Strg+S friert den komplett ein. Ich frage mich, warum jemand so ein komisches Verhalten bei diesen Tastenkombinationen im Terminal programmiert hat.

Krankschreibung verlängert

Ich hatte es anders gehofft, aber es war doch zu erwarten, da ich mit meinem Arm immer noch nicht viel anfangen kann.

Was ich mir gewünscht hatte war, dass mein Arzt sich die CD von den CT-Ergebnissen anschaut, wie am Montag versprochen. Das hat er nicht hingekriegt. Der Bericht der Radiologie-Praxis ist auch nicht eingetroffen.

Der Arzt ist auf die Schnelle zu seiner Sekretärin gegangen, um die CD zu lesen. Sie wird mit einem Java-basierten Programm geliefert, um die Bilder zu sehen. Java war auf dem Rechner der Sekretärin nicht aktualisiert, und das Programm konnte nicht gestartet werden. Eine Internetverbindung hat der Rechner wegen Datenschutz nicht. Die benötigte Java-Version war zwar auf der CD vorhanden, aber die Sekretärin hat sich geweigert, sie zu installieren. Oder sie hat nicht verstanden, was sie gerade angeklickt hatte. „So viel Technik, das ist furchtbar“, meinte der Arzt. Ich denke nicht zum ersten Mal, ich könnte die Praxis wechseln. Aber er bietet jeden Tag Sprechstunden ohne Termine an, und ist so bequem nur auf der anderen Straßenseite. Ich brauche nicht mal zehn Minuten zu Fuß (die Ampel dauert am längsten).

Der Arzt hat also ohne weitere Informationen meine Krankschreibung verlängert und mir Krankengymnastik verordnet. Es gefällt mir gar nicht.

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 alte 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 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.

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 Platform 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 Programmierungsplatform 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.

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.

Endlich ist die Woche vorbei

Äh? Es ist erst Montag!

Ich meine die vierte Woche des online Kurses vom openHPI zum Thema Parallelprogrammierung. Montagabends ist die Frist für die Hausaufgabe. Wie immer habe ich sehr wenig Zeit gehabt, mir die Vorlesungen täglich anzuhören, was mit dem Release meines Programmes und das Wochenende mit Martin zu erklären ist.

Letzte Woche ging’s um Beschleuniger. Eigentlich ein spannendes Thema, aber die Vorlesungen wurden von einem neuen Dozenten vorgetragen. Tja. Beim ersten Teil hatte ich schon keine Lust mehr, an dem Kurs teilzunehmen. Meine Schmerzgrenze ist erreicht. Mehr Pausen und Ähms pro Minute ertrage ich nicht. Ich habe häufig den Eindruck bekommen, der Dozent würde den Inhalt der Folien mit den Zuhörern gleichzeitig entdecken. Bei der dritten Vorlesung bin ich gestern Abend eingeschlafen. Obwohl es noch nicht mal 22:00 war und ich extra am Rechnertisch saß, statt mir wie sonst die Vorlesungen im Bett auf dem Laptop anzuhören. Sie mir nochmal anzuschauen kam nicht in Frage. Mitten in der vierten Vorlesung habe ich heute den Rechner verlassen und mich um mein Abendessen gekümmert – was mich nicht daran gehindert hat, mit ein bisschen Nachdenken volle Punkte beim Selbsttest zu bekommen. Die Hausaufgabe habe ich ohne Begeisterung und ohne große Mühe gemacht. Kein Bock mehr.

Wie kann man Vorlesungen solcher schlechten Qualität auf eine Lernplattform hochladen, wenn man sie im Prinzip mehrmals aufnehmen und verbessern könnte? Zum Glück kriegen wir diese Woche den ersten Dozenten wieder. Sonst würde ich es nicht mehr aushalten.

Parallelprogrammierung

Die Meldung kommt ein bisschen spät, aber wer sich für dieses Thema interessiert, kann sich noch für den kostenlosen online Kurs beim openHPI anmelden. Die erste Woche ist fast abgelaufen, der Termin für die erste Hausaufgabe ist heute Abend. Man sollte für den Kurs mit einer Programmiersprache vertraut sein, was vor allem bedeutet, wissen, wie man programmiert, und Englisch beherrschen, da der Kurs diesmal nicht auf Deutsch statt findet.

Ich hätte es selbst fast vergessen, obwohl ich schon seit einigen Wochen darauf warte. Nachdem Martin mich gestern Abend von der Berlinade zurück nach Hause gefahren hat, habe ich mir die erste Hälfte der Vorlesungen letzter Woche angehört. Wie ich nach meinem ersten Kurs bei ihnen über Datenmanagement mit SQL erwartet hatte, ist der Stoff der ersten Woche wirklich nicht wild, das kann man schnell erledigen. Es geht darum, Vokabel fest zu legen und die Motivation hinter Parallelprogrammierung zu lernen. Das (empirisch festgelegte) mooresche Gesetz kannte ich schon, dazu kommen die ganzen physikalischen Beschränkungen für die immer effizientere Durchführung von Programmen, wie die Leistung- oder Speicherbarrieren (von mir frei übersetzt, keine Ahnung, ob es auf Deutsch wirklich so heißt).

Ich bin gespannt auf die kommenden Wochen.