Warum man in Software etwas mehr Fehlerbehandlung braucht als beim Ausbleiben von Daten nach einem Timeout einfach die Antwort als »leer« zu verstehen (na, in Perl gehäckselt?) und diese leere Antwort für die Weiterbearbeitung zu benutzen, hat uns 1&1 in einem hübschen Fail gezeigt. Immerhin, dafür sind sie bill ähm… nicht so teuer, da kann man ja auch mal offline sein, weil an Fehlerbehandlung und Robustheit gespart wurde.
Nachtrag: Und damits so richtig rund wird, ergänzt man den Fail einfach um Kundendienst aus der Hölle…
Anonymous am 27.9.2011 um 19:21
welcher hoster oder isp wäre gegen software-fehler gefeit…
Nachtwächter am 27.9.2011 um 19:28
Keiner.
Aber Software, die im Fehlerfall auf den tollsten möglichen Default runterfällt und alle Einstellungen auf NULL setzt, statt zum Beispiel einfach nix zu tun und damit den Schaden klein zu halten… aua!
Ich hoffe, dass man bei Kernkraftwerken anders vorgeht. Sonst steht da so etwas wie »Wenn kein Messergebnis aus dem Reaktor kommt, dann fahre die Steuerstäbe heraus und schalte die Kühlung ab« im Programm… *grusel!*
fritz the cat am 27.9.2011 um 19:56
versteh ich nicht – wer hat das programmiert? bzw. welche programmiersprache schmeisst da nicht gleich bei nem timeout nen error??? perl macht das echt so?
fritz the cat am 27.9.2011 um 20:00
und was soll das überhaupt – netzwerkeinstellungen ohne grund (evtl. sogar automatisch) zu überschreiben? scheinbar waren die einstellungen ja vorher ok.
Nachtwächter am 27.9.2011 um 20:04
Ob es Perl ist… das ist eine reine Mutmaßung von mir. Dort werden nicht initialisierte Variablen bei ihrer ersten Verwendung entweder zum Integer 0 oder zu einem Leerstring. Wenn eine Query über eine DBI-Connection fehlschlägt, denn bleiben die ganzen gebundenen Variablen uninitialisiert. Sicher, es wird auch $DBI->err (oder in gleicher Weise auch die Komponente err in der Instanz des Handles) gesetzt, so dass der Fehler abfangbar ist, aber ich habe genug Quelltext von optimistischen Programmierern gesehen, die nicht damit rechnen, dass ein Netzwerk mal ausfällt oder ein Datenbankserver mal unter Last steht und es zum Timeout kommt…
Dass die bei 1&1 PHP für ihre administrativen Skripten benutzen (das hat nämlich neben vielen weiteren Schwächen in Hinblick auf nichtinitialisierte Variablen genau die gleiche Macke), nee, das will ich nicht wirklich glauben. Obwohl…
Jede andere mir bekannte Skriptsprache schmeißt eine Exception, wenn man nicht initialisierte Variablen ausliest. Und das ist gut so, denn es ist beinahe immer ein Fehler. Und wenn es ausnahmsweise gehen soll, muss man die Variable eben vorher initialisieren – das hat den Vorteil, dass es auch beim Lesen des Quelltextes etwas klarer wird.
Disclaimer: Ich mag Perl. Aber man sollte schon wissen, welche Tücken es hat…
fritz the cat am 27.9.2011 um 20:20
jo, selbst javascript macht das imo.
aber ich meinte eher ne exception oder nen fehlercode wenn die verbindung zu datenbank abbricht und das passiert ja bei einem timeout. kann doch ned angehen, dass da nen gültiges recordset zurückkommt.
fritz the cat am 27.9.2011 um 20:44
ah sehe gerade du hast da noch das wenn ein query fehlschlägt hinzugefügt.
genau das meinte ich… wer programmiert sowas (also eher nicht? »optimistisch« ist da doch ein euphemismus für dummheit oder blutiger anfänger
Nachtwächter am 28.9.2011 um 02:11
»Optimistic programming« habe ich das jedenfalls immer genannt, um allzu böse Wörter für die Meisterwerke gewisser weniger sorgfältiger Menschen zu vermeiden…