Fortsetzung von Überraschungen (1):

  1. Das beliebte Logo des Forums hatte als Dateinamen irgendetwas in der Art von "logo-2011-01-26-12:13:14.png". Das ist vielleicht etwas länger als ideal, aber sonst nicht weiter schlimm.
    Das stimmt. Fast. Nämlich für fast alle Browser. Opera hingegen mochte das Logo nicht anzeigen. Warum? Offenbar hat Opera Schwierigkeiten mit Doppelpunkten in den Namen von PNG-Dateien (?). Die "image::Vorname_Nachname_Schlüsselwörter.jpg"-Konstruktion, die bei der Ausgabe von großen Bildern verwendet wird, funktioniert hingegen.
    Muß ich das verstehen?
  2. Das Forum benutzt an einer Stelle ein Datenbankfeld vom Typ "bytea" zur Ablage von Binärdaten (komprimierte Objektdaten für die History). Die muß man zur Übertragung an die oder von der Datenbank speziell transformieren (pg_escape_bytea, pg_unescape_bytea heißen die Funktionen).
    Nun verwendet postgres in Version 9.0 eine andere Transformation als vorher - das Zeug wird nun einfach nur als Hex-String verschickt ("\x..."). Nur... die postgres-Client-Libraries, die das Forum verwendet, sind nicht ganz auf demselben Stand, und kennen diese Transformation nicht.
    Das Format war nicht weiter schwierig zu wandeln. Nein, insofern war das ganz unproblematisch. Aber problematisch war meine erste Reaktion auf den Folgefehler: "Oh, korrupte Daten in der Datenbank". Am dritten Tag Hacken, nach der zweiten schlafarmen Nacht, sorgt das nicht wirklich für Freude. Herzinfarkt? Nein. Nervenzusammenbruch? Nicht weit davon weg.
  3. Ein paar Funktionen vom Forum gehen davon aus, daß sie mit Jpeg-Bildern zu tun haben. Aber dann und wann laden einzelne Benutzer mal Bildern hoch, die sie zwar .jpg nennen, die aber in Wirklichkeit .gif heißen sollten. Erstaunlichweise geht das an vielen Stellen gut - die Browser zeigen das offenbar richtig an.
    Nur die Funktionen, die unbedingt ein jpeg lesen wollen - beispielsweise für die Collage, oder das Auslesen von Metadaten - fallen auf die Nase.
    Was mich daran überrascht hat? Daß ein .gif im .jpg-Pelz überhaupt funktioniert.
  4. Die neue Forumsversion hat eine Fehlerseite (für das klassische "404"-Zeug, "Seite nicht gefunden"), die entweder den Besucher auf die richtige Seite leitet, oder Vorschläge für die richtige Seite anbietet, oder die Systembetreuer benachrichtigt, wenn es so aussieht, als wäre ein interner Link im Forum kaputt.
    Nun, ab und zu war letzteres der Fall. In 90% der Fälle jedoch war das einfach nur Unfug mit gefälschten Referrer-Headern.
  5. Apropos 404: So rund ein Drittel der Zugriffe auf nicht existierende Seiten kommt von Suchmaschinen - Yahoo und Google. Die greifen nicht nur auf "/o1234-text" zu, sondern genauso gerne auf "/1234-text". Nein, ich habe keine Ahnung, woher die die Links haben können. Gar keine Ahnung. Noch nicht mal ansatzweise.
  6. Benutzerdatensätze gehören nicht dem Benutzer, sondern dem System (0). Das hat nur den einen Grund, daß beim Anlegen des Benutzerdatensatzes dessen Objektnummer nicht bekannt ist - die hab' ich erst *nach* der Anlage.
    Das klingt nicht besonders schlimm? Ist es auch nicht. Bloß kann ich dann nicht einfach "o.user_id=$derzeitiger_benutzer" schreiben, sondern muß "$o.user_id=$derzeitiger_benutzer OR o.object_id=$derzeitiger_benutzer" schreiben. Das macht den Code nicht nur unleserlich, sondern ich vergesse diesen Fall auch gerne mal.
    Peinlicherweise habe ich den Fall zuletzt in einer Funktion vergessen, die feststellen soll, ob der gerade anwesende Benutzer der Eigentümer eines Objektes ist (ich bitte darum, jeglichen Kommentar über geistige Höchstleistungen zu unterlassen). Und dann habe ich den Fehler erst mal überall anders als in dieser Funktion gesucht, weil die so trivial ist, daß die gar nicht falsch sein *kann*. Haha.
  7. An 99% der relevanten Stellen erzeugt das Forum die korrekten URLs zu den Objekten (/o1234-text). An 1% der Stellen wird noch "/object.php?object_id=1234" erzeugt (intern bewirkt beides dasselbe).
    Nun ist das nicht wirklich schlimm, beides funktioniert schließlich. Aber wenn man dann mal durch die Forumslogfiles geht und die Zugriffe die Vögel-Rubrik sucht, und dann nur die erste Variante beachtet, bekommt man etwas, was einer brauchbaren Statistik nicht sehr ähnlich sieht...
  8. Die Ajax-Autocompletion (Vervollständigung von Benutzernamen und so), die im Forum verwendet wird, hat mir die letzte Zeit über ständig leere Fehlermeldungen serviert. Die Ursache war, daß ich das Ajax-Fehlerhandling überarbeitet habe und das nun schon warnt, wenn eine Abfrage abgebrochen wird - was bei der Vervollständigung normal ist, wenn der nächste Tastendruck kommt.
    Nun stellte sich die Frage: Wie erkenne ich diesen Fall eigentlich? xhr.readyState=4 und xhr.status=0, offenbar (nach einigen Experimenten). Aber laut W3C-Dokumentation erzeugen alle Arten von Netzwerkproblemen auch genau diesen Zustand... und es wäre schon nett, zwischen "der Server ist nicht erreichbar" und "Du hast gerade eine Taste gedrückt" unterscheiden zu können.
    Richtig, das geht nicht. Mir ist unwohl dabei, auf den derzeitig verfügbaren Bausteinen der EDV einen Wolkenkratzer zu bauen. Oder gar die Zukunft die Welt.
  9. Die Funktion zum Löschen von Objekten ist ja ganz nett, aber... wenn man dann irrtümlich nur den zu löschenden Kommentar, sondern den eigenen Benutzerdatensatz erwischt, ist das, wie soll ich sagen, vielleicht ein klein wenig schlechter als optimal. Ich glaube, das spricht gegen Arbeit im längst nicht ausgeschlafenem Zustand.
    Nein, es ist kein Schaden entstanden. Benutzerdaten zu löschen kann eh' nicht funktionieren. Die Fehlermeldung hat mich allerdings wieder wach gemacht.
  10. An ein paar Stellen verwende ich jqueryui - eine Javascript-Bibliothek, die bestimmte Funktionen für Benutzerinterfaces bietet. Dazu verwende ich ein Theme namens Smoothness. Mit Themes kann man jqueryui auf das lokale Design anpassen, und smoothness ist angenehm grau.
    Gestern wollte ich dann endlich mal die Textforumsübersichtsseite flicken, und habe dafür die Tab-Funktion von jqueryui verwenden wollen. Prompt erschien ein großer blauer Rahmen um die Tabs. Ganz klasse.
  11. Die Funktion zum Löschen von Objekten ist ja ganz nett, aber... wenn man dann irrtümlich nur den zu löschenden Kommentar, sondern den eigenen Benutzerdatensatz erwischt, ist das, wie soll ich sagen, vielleicht ein klein wenig schlechter als optimal. Ich glaube, das spricht gegen Arbeit im längst nicht ausgeschlafenem Zustand.
    Nein, es ist kein Schaden entstanden. Benutzerdaten zu löschen kann eh' nicht funktionieren. Ich war nur plötzlich wieder halbwegs wach.
  12. ich hab' mich immer mal wieder darüber gewundert, wie viele Leute in dem Formular, in dem sie ihre Emailadresse ändern können, statt der Emailadresse ihren Namen eintragen. Das hatte ich bisher immer auf schlechte Tage, oder auch mal auf Anflüge von Dummheit geschoben.
    Ich lag damit falsch.
    Die Formular-Ausfüllfunktion von Firefox läuft Amok, wenn ein Eingabefeld vom Typ "Passwort" in einem leeren Formular ist, und füllt dann das Passwortfeld zwar korrekt aus, trägt aber den Benutzernamen bei der Emailadresse ein. Ich kann nicht beschreiben, *wie* falsch das ist.
Das waren die Highlights aus der Umstellungsphase. Weitere Folgen kommen vielleicht noch, werden aber kürzer sein.
In den nächsten Tagen werde ich hier öfters mal etwas über neue Features schreiben. Dabei werden sicherlich mehr allgemein verständliche Themen sein.

Gruß, Uwe