Artikel in der Kategorie 'Softwareentwicklung'

Nord/LB = Fail/LB?

Was man nicht machen sollte:

  1. Kunde meldet sich zum Onlinebanking an.
  2. Kunde klickt bissel rum und klickt dann auf Kontakt.
  3. Kunde schreibt eine lange Nachricht ins Kontaktformular und braucht eine Weile dafür.
  4. Kunde klickt auf “Weiter”.
  5. Kunde wird wegen Inaktivität ausgeloggt(!) und die komplette Nachricht ist weg!!!

Wer programmiert so einen Scheiß? Es ist ja schön und gut, wenn man als Schutz nach 10min ausgeloggt wird, aber dabei eine Kontaktnachricht verwerfen?

Natürlich war Murphy wieder im Spiel und ich hatte die Nachricht nicht in der Zwischenablage gesichert. -_-’

Firefox 3.6 stürzt permament ab – YSlow schuld – Update

Gestern hatte ich das Problem, dass nach einem Update mein Firefox effektiv permanent abgestürzt ist. Im “safe mode” lief er problemlos, also musste wohl irgendein Addon die Ursache sein. Da ich nicht motiviert war, jedes Addons einzeln zu testen, bin ich halt erstmal im “safe mode” weitergesurft.

Heute war die Ursache, dank dem Firefoxnutzer Carlos, schnell gefunden: Das Addon YSlow für Firebug hat einen Bug. Ohne YSlow läuft alles wunderbar und so drigend braucht man YSlow ja nicht.

Für diejenigen, die es nicht wissen: YSlow (von Yahoo) überprüft die “Geschwindigkeit” von Webseiten mittels eines kleinen Kriterienkataloges und gibt Tips zur Verbesserung. Halt ein nützliches Helferlein.

Update: Mit der Version 2.0.6 von YSlow, die es seit heute gibt, wurde der Fehler behoben. Zumindest ist mein Firefox noch nicht wieder abgestürzt. ;)

YSlow v2

Soeben hat mich mein freundlicher Browser darauf hingewiesen, dass mal wieder eine Pluginaktualisierung ansteht. Bei dem üblichen Kontrollblick stellte ich mit Verwunderung fest, dass das die beliebte Firebug-Erweiterung-Erweitertung YSlow auf Version 2.x aktualisiert wurde. Dies hat mich dann doch neugierig gemacht, so dass ich die neue Version gleich installiert und getestet habe.

YSlow ist eine Erweiterung von Yahoo für Firebug und bietet Werkzeuge zum Analysieren und Optimieren der Webseitengeschwindigkeit. Dazu führt es eine Reihe von Tests durch, die dann je nach Abschneiden von A (gut) bis F (schlecht) benotet werden.

Mit der Version 2 haben die Yahooentwickler eine Reihe von durchdachten Neuerungen hinzugefügt:

  • Zunächst einmal wurde der Regelsatz um 9 neue Regeln erweitert, die sich zum Teil um AJAX drehen, aber auch kleinere Elemente wie ein cachebares Favicon beachten.
  • Weiterhin kann man nun sich eigene Regelsätze definieren und so Punkte, die die eigene Seite nicht betreffen (wie der Einsatz eines Content Delivery Networks), aus der Bewertung nehmen.
  • Zur Optimierung von Bildern wurde das Tool smush.it in YSlow integriert.

Alles in allem ein paar sehr schöne und durchdachte Erweiterungen. Auf den folgenden zwei Screens sieht man die überarbeitete Oberfläche und den Unterschied durch das Verändern der Regelsätze:

Direkt eine Note besser abgeschnitten… ;)

Natürlich sollte man wissen, was man tut und nicht einfach die Tests so anpassen, bis man gut abschneidet. Alles in allem halte ich YSlow für ein sehr gutes Werkzeug, um seine Webseiten zu kontrollieren. Vieles sollte selbstverständlich sein, aber man übersieht ja immer irgendwas.

Empfehlung!

Magenta-Out

Was man so alles nicht mitbekommt und erst am nächsten Tag im Radio hört:

Ursache für den Netzwerkausfall bei T-Mobile erkannt

T-Mobile hatte heute einen bundesweiten Ausfall im Mobilfunknetz. Betroffen waren Sprach- und SMS-Dienste. Die Ursache der heutigen Störung im Mobilfunkbetrieb von T-Mobile ist erkannt. Grund war ein Softwarefehler im sogenannten Home Location Register (HLR). Das HLR ist dafür verantwortlich, eine Verbindung zwischen Mobilfunkstation und der zugehörigen Mobilfunknummer herzustellen.

Nach einem Zurücksetzen des Systems sind seit ca. 19:00 Uhr die ersten Teile des Netzes wieder verfügbar. Das kann vereinzelt zu einer Überlast im Netz führen. Wir gehen davon aus, dass es noch einige Stunden dauern kann, bis das T-Mobile-Netz wieder in gewohnter Qualität für unsere Kunden zur Verfügung steht. “Wir bedauern diesen Vorfall und möchten uns bei unseren Kunden für die entstandenen Unannehmlichkeiten entschuldigen”, sagte Günther Ottendorfer, Geschäftsführer Technik von T-Mobile Deutschland.

(via Computerbase)

Wieder mal also eine Softwarepanne einer großen deutschen Firma. Irgendwie kommt mir “Maut” und “Toll Collect” in den Sinn. Wer steckt doch gleich zu 45% in Toll Collect? ;)

Zurück zum Thema: Gestern ging also für knapp 40 Mio. Mobiltelefonierer das Netz aus… also so grob jeder zweite Deutsche war “handylos”. Wäre für mich nun keine Tragödie, aber nicht jeder wird das so gelassen genommen haben. Da bekleckert sich die Telekom nicht gerade mit Ruhm. Nun läuft ja wohl alles wieder in geordneten Bahnen. Schön finde ich ja die angebliche zitierte Lösung des Problems: Zurücksetzen! Doch was wurde da wie zurückgesetzt? Ich kenne keine Bugs, die sich durch Zurücksetzen beeindrucken lassen. Naja… Server neubooten ist immer eine gute Lösung. ^^

Mal abwarten, ob es da noch Details geben wird. Spontan konnte ich noch nichts Aktuelles finden…

Frühjahrsputz im Web – IE6 muss weg

Im Laufe der nächsten Monate, könnte etwas wirklich Unerwartetes geschehen. Während der IE8 im März den RTM-Status erreicht, IE7 seit gefühlten Ewigkeiten sogar über Windows-Autoupdate vertrieben wird, ist sein Urahn die Version 6 leider Gottes noch weiter verbreitet als es jedem Webdesigner lieb ist. Während im deutschen Raum sich neuere Versionen oder alternative Browser schon stark verbreitet haben, sieht es in anderen Ländern recht schlimm aus:

Bei gibt es den gleichen Inhalt mit zwei verschiedenen Domains: Eine .de-Domain, die primär von Deutschen, Österreichern und Schweizern besucht wird und eine .net-Domain, die primär von Franzosen, Belgiern und den restlichen internationalen Besuchern genutzt wird.

Zum Vergleich:

  • .net – Auf einen IE6 Nutzer kommen 1,5 IE7 Nutzer und zwei FF-Nutzer
  • .de – Auf einen IE6 Nutzer kommen 1,5 IE7 Nutzer und vier FF-Nutzer

Klingt nicht viel, aber wenn man 20% mit 40% vergleicht, klingt das schon ziemlich anders.

Dass der IE6 ein Dorn im Auge jedes Webdesigners ist, ist allgemein bekannt.  Bei seinem Alter ist das auch kein Wunder… er ist z.B. älter als Windows XP, Google AdSense oder 24 (die inzw. bei der 7. Staffel sind). Mangelnde Unterstützung für aktuelle Standards oder einfaches wie transparente PNGs machen Anpassungen für Webseiten zu Odysseen und eine Verschwendung von Zeit, die produktiver genutzt werden könnte.

Nun hat die norwegische Seite FINN.no damit begonnen, ihren Besucher, die den IE6 nutzen, einen Hinweis zu zeigen, dass sie doch bitte ein Upgrade oder einen Wechsel durchführen sollen. Gleichzeigt rufen sie andere Webseiten auf, es ihnen gleich zu tun. Was geschieht mit so einer Aktion natürlich? Sie breitet sich wie ein Lauffeuer im Netz aus:

Links:

Endlich mal eine Aktion, die meines Erachtens wirklich Sinn macht. Bleibt nur zu hoffen, dass der große Knackpunkt – Firmen-PCs – auch geknackt wird. :)

Ich für meinen Teil werde sehen, wie ich die Aktion unterstützen kann.

1234567890

Irgendwie hab ich das hier gar nicht mitbekommen. :|

clone $object

Manchmal sind es ja die Kleinigkeiten die einen sehr verwirren können. So wechselte bei T³ beim Bestätigen einer Turnierabsage das Sprachinterface zur Hälfte auf Französisch und auch die entsprechenden Mails gingen nicht in Deutsch raus. Etwas Debugging später ergab sich die relativ einfache Lösung: Mit dem lang fälligen Serverupdate habe ich auch endlich PHP4 auf PHP5 aktualisiert. Da PHP5 eine ausgebaute Unterstützung für objektorientierte Programmierung erhalten hat, hat der alte Code, der die verschiedenen Sprachcontainer verwaltet nicht mehr korrekt funktioniert. Nun wurden nämlich (wie es ja auch sein sollte) die Verweise kopiert und nicht mehr die Objekte. Mit ein paar hinzugefügten “clone $object” läuft nun alles wieder rund.

Wie gesagt… die Kleinigkeiten, die einen echt verwirren können. ;)

chkrootkit false positive

Um ein halbes Auge auf meinen Server zu haben, läuft das kleine Programm chkrootkit einmal am Tag über die Platte und sucht nach suspekten Dateien etc. Nun bekomm ich deswegen einmal am Tag einen Hinweis, dass die suspekte Datei “/lib/init/rw/.ramfs” vorliegt. Dummerweise ist die Datei alles andere als suspekt und gehört dahin. Nun streiten sich die zuständigen Parteien darüber, wer nun den “Fehler” gemacht hat und der Bug wird von A nach B und zurück geschoben. Als “Endnutzer” kann man da nichts machen, außer genervt sein oder selbst Hand anlegen (Danke für den Patch!).

Dem Spam auf der Spur (Seltsames via tomogames.com)

Aktuell habe ich ein kleines größeres Spamproblem. Über den leider noch nicht ausreichend gesicherten Kontaktmailer von T³ wurden eine Reihe von Werbemails an registrierte Nutzer verschickt. Das Kontaktformular dient zum Schutz der Emailadressen der Nutzer. Leider kann er sich nicht um den Inhalt kümmern.

So kam es nun, dass seit ein paar Tagen der Mailer für Spam missbraucht wurde. Unter verschiedenen Namen wurde folgender Mailtext verschickt:

Hi,
ein guter Kollege von mir hat einen neuen Online-Shop aufgemacht für Warhammer Fantasy und 40k (Tomogames.com)
Ich will ihm helfen, dass der Shop bekannt wird.
Er gibt bis zu 25% Rabatt auf alles!

hf Death Master

Absender wechselt kreativ mit thematisch passenden Namen und einer nameNummer@(gmx|yahoo).(de|net) Mailadresse. Die Webseite weist dabei ein paar Sachen auf, die etwas fragwürdige Dinge aufzeigt:

  • Technische Realisierung durch eine undurchsichtige Firma in Paraguay (ICI srl.)
  • Bezahlung nur via Vorkasse oder Paypal (was da auch nicht sicher ist)
  • “Erlaubnis zur E-Mail-Werbung” in den Datenschutzbestimmungen (Standardfloskel)
  • Jegliche Spuren und Suchanfragen führen zu einer Reihe mir suspekter Webseiten bzw. Forenthemen zu Spam

Inhaber der Seite ist laut Impressum:

Tomogames-Vertrieb Deutschland
Ralf Banf
Oskar Schlemmer Ring 8
67657 Kaiserslautern

Wenn man nun nach Herrn Banf aus Kaiserslautern sucht, stößt man auf folgende Seiten:

  • Div. Einträge in Branchenbücher als Werbeagentur mit der Domain wab.de, die aber auf eine “Erotik”seite names firstXplanet zeigt
  • kl-portilo.de/PORTILOkonzept.de – Angebliches Affiliatehandling für die Umwelt (Inhaberin: Gabriele Banf)
  • venusgalerie.de – Erotikwebservice (Inhaber: iMedia Internet Entertainment von Hrn. Banf, Jugendschutzbeauftrage: Fr. Banf)
  • wir-leben-jetzt.com – Noch ein Onlineshop der iMedia Internet Entertainment
  • virtualsurfcity.de – Mischung aus firstXplanet und diesmal firstXerotik
  • etc.

Sucht man nun nach dem verantwortlichen admin-c, so stößt man auf den Herren Jürgen Vogel aus Paraguay mit der Mailadresse info@6mem.com. Die Domain 6mem.com zeigt dabei interessanterweise wieder auf firstXplanet. Auch wird die Firma des tech-c (ICI srl. auch aus Paraguay, Geschäftsführer Kurt Vogel) im Impressum von tomogames.com als technischer Betreuer genannt.

Dies alles lies sich nach 1-2h Recherche herausfinden. Ich habe nun mal die entsprechenden Abuse-Stellen angeschrieben und auf die Situation hingewiesen. Allzuviel erhoff ich mir davon nicht. Einzig das Versenden der Bulkmails könnte eventuell ein Ansatzpunkt sein, da dies meist einen Verstoß der AGBs des ISP bedeutet.

Ich werde berichten, was sich da so tut…

C# – Umbiegen von DTDs

Beim Arbeiten an einem C#-Projekt und XML-Dateien stand ich mal wieder vor einem Problem, bei dem ich von einer einfachen Lösungen ausgegangen war… was natürlich nicht der Fall ist.

Folgende Situation:

Das Programm erlaubt es dem Nutzer aktuelle Daten in XML-Dateien zu speichern und natürlich auch wieder zu laden. Um die Kontrollarbeit beim Laden zu erleichtern, gibt es immer eine aktuelle Dokumentypdefinition (DTD), die der XML-Datei zugewiesen wird. Die DTD mittels

DTD-Definition in XML
  1. <!DOCTYPE Wurzelelement SYSTEM "datei.dtd">

lokal verlinkt. Dies führt aber zu dem Problem, dass das Programm beim Öffnen der XML-Datei die DTD auch immer am gleichen Ort erwartet. Dies ist natürlich problematisch sobald der Nutzer seine Datei irgendwo nach Belieben speichern möchte. Den absoluten Ort der DTD anzugeben, ist aber auch keine Lösung, da es dann natürlich beim Dateiaustausch oder Ähnlichem zu Problemen kommt.

Die Lösung liegt also darin, den Zugriff auf die DTD auf einen zentralen Ort umzubiegen. Nach reichlich Recherchearbeit und Experimentieren habe ich zwei mögliche Lösungen erarbeitet, die an der gleichen Stelle ansetzen. Das Suchen und Lesen der DTD übernimmt bei C#, wenn man wie ich mit XmlReader arbeitet, ein (abstrakter) XmlResolver. Also habe ich mir einen eigenen XmlResolver von der konkreten Klasse XmlUrlResolver abgeleitet und dort die zuständige Methode GetEntity() überschrieben. Es wird nun jeweils via Regex überprüft, ob eine DTD-Datei gesucht wird (Der Name wird in der Variablen file gespeichert…). Wenn dies der Fall ist, wird der Zugriff geändert:

Variante 1 – DTD liegt in einem Unterverzeichnis des Programmverzeichnis:
Hierbei wird der lokale Suchort auf den zentralen Ort umgebogen und der Get-Aufruf dann einfach an die Basisklasse weitergereicht:

Umbiegen des DTD-Verzeichnisses
  1. string pathToExe = Assembly.GetExecutingAssembly().Location;
  2. pathToExe = pathToexe.Substring(0,pathToExe.IndexOf("name.exe"));
  3. Uri newUri = new Uri(pathToExe + "Unterverzeichnis\\" + file);
  4. return base.GetEntity(newUri, role, ofObjectToReturn);

Die Parameter role und ofObjectToReturn werden einfach so übernommen, da sich da ja nichts ändert.

Variante 2 – DTD liegt als “Embedded Resource” vor:
Hierbei können wir uns das “reale” Speichern der DTD sparen und verminden so Fehlerquellen, wie Nutzer die DTDs löschen oder Ähnliches. Dazu wird nicht der Dateiort auf der Festplatte umgebogen, sondern wir lesen die DTD aus dem Speicher:

Zugriff auf eingebettete DTD
  1. StreamReader r = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("namespace.Resources." + file));
  2. return r.BaseStream;

Wichtig dabei ist, dass man auf die korrekte Schreibweise der Resourcen achtet. Sonst findet er da nichts und man wundert sich, warum es nicht geht ( ;) ).Dies und auch ob die Datei richtig eingebettet wurde kann man einfach über die Methode GetManifestResourceNames() überprüfen.

Wie bereits geschrieben, habe ich mir das eindeutig einfacher vorgestellt, aber nun ist’s ja doch endlich geschafft. Vielleicht kann das jemandem mit einem ähnlichen Problem ja helfen oder vielleicht hat jemand ja noch eine bessere Lösung. :)

Nächste Seite »