Ein Kunde ruft bei uns an und berichtet von einem Nutzer, bei dem nach der Deinstallation einer Software plötzlich Systemdateien fehlten. Er kündigt am nächsten Tag zu diesem Thema eine Telefonkonferenz an. Ein kurzer Blick in den Code offenbart furchtbares. Wenn jemand die Software nicht in den vorgeschlagenen Ortner installiert, sondern beispielsweise in den Systemordner, werden dort mit der Deinstallation alle Dateien gelöscht.
Es ist zwar noch nicht evaluiert, aber das dürfte das Problem sein. Eine mögliche Lösung: Mit dem ersten Start schreiben wir eine Datei mit den vorhandenen Dateien und Ordnern (also quasi dir /b > installed.txt). bei der Deinstallation lesen wir diese Datei aus und löschen nur die darin gelisteten Dateien einschließlich der Datei selbst. Der Ordner wird nur gelöscht, wenn er leer ist.
So geht es auf jeden Fall nicht:
private void Permission_AfterUninstall(object sender, InstallEventArgs e) { string Path_LabelFiles = Path.Combine(Application.StartupPath, @"Labels"); if (Directory.Exists(Path_LabelFiles)) { try { Directory.Delete(Path_LabelFiles, true); } catch (Exception ex) { //nope } } try { Directory.Delete(Application.StartupPath, true); } catch { } }
Seit fast drei Wochen versuchen wir bei einem Kunden Daten von einer Struktur in die andere zu Überführen. Für die Abfragen zeichnet sich mein Kollege verantwortlich. Darüber habe ich mich auch an anderer Stelle schon mal aufgeregt. Über das lange Wochenende haben wir einen neuen Versuch gestartet. Mal abgesehen davon, dass die Abfragen noch mal langsamer wurden, was bei fast 50 Millionen Datensätzen nicht so gut ist, traten plötzlich jede Menge Fehler auf. Da kriege ich echt Plaque. Das muss man doch vorher mal testen. Ich kann doch nicht bei einer Laufzeit von zehn Stunden darauf hoffen, dass alles gut geht. Löschen, Ändern und Neustarten ist hier auf jeden Fall keine Lösung.
Heute im Code eines Werkzeugs gefunden, welches die Performance eines Clients im Netzwerk des Kunden überwachen soll. Die Methode führt ein ping zu einem angegebenen Server an. Aber ob doPing ein guter Name für die Funktion ist wage ich mal in Frage zu stellen.
In meiner Kinderzeit gab es diverse Witze mit Verballhornungen von Begriffen/Sprachen und ich meine damals war die Frage „Wie heißt der Chinesische Sportminister?“ mit „Do Ping“ zu beantworten. Von dieser Sorte gab es ja noch mehr. Zum Beispiel: „Wie heißt der chinesische Verkehrsminister?“ „Um Lei Tung“.
Das Bild, welches die Bevölkerung von Informatikern hat, sieht ja oft so aus: dickliche Nerds sitzen die ganze Nacht in Kellerräumen und Hacken auf die Tastatur ein. Umgeben von Pizzakartons und leeren Dosen von Energydrinks bewegen sie sich kaum, scheuen das Licht und die frische Luft.
Das gibt es sicher, aber ist nicht die Regel. Gestern Nacht musste ich Wartungsarbeiten an der Datenbank vornehmen. Ohne Störungen in der Fertigung auszulösen geht das leider manchmal nur in der Nacht, wenn keiner Arbeitet. Gestartet habe ich um 20:00 Uhr. Um kurz nach 2:00 Uhr bin ich ins Bett und um 6:00 Uhr habe ich ein Skript eines Kollegen abgebrochen, weil es immer noch nicht fertig war. Leider. Heute bin ich etwas durch den Wind – bin halt Nachtarbeit nicht gewohnt.
Die Laufzeit von T-SQL Skripten ist auch so eine Sache. Mit T-SQL kann man viel machen, aber leider auch viel falsch. Gestern hatten wir ein Skript, dass lief etwa 4 Minuten. Es wurde über ein Fremdschlüssel Werte aus der Datenbank ermittelt. Durch das Hinzufügen der referenzierten Tabelle und der Suche über den Primärschlüssel konnte die Laufzeit auf etwa 1:20 Minuten verringert werden. Eine weitere Steigerung brachte das Erzeugen eines fehlenden Indexes. Danach war die Laufzeit nicht mehr messbar. Aber für solche Optimierungen wird man beim Bachelorstudium scheinbar nicht ausgebildet.
Ist heute mein Freund: der Kaffeepott vom Großen – dir größte Tasse bei uns im Haus. Daraus schmeckt der Kaffee, auch wenn sie vom FCB ist…
Heute während eines Versuchs beim Kunden per Communicator eine Neuerung in unserer Software vorzuführen. Entdeckt. Wer findet den Fehler?
if (mo.PanelCountConnected >= mo.PanelCountConnected) { MessageBox.MsgBox.show("MSG_NOMORE_PANELS"); return; }
Lösung nach dem Klick.