25. Dezember 2004

o2 Mobil Portal Stichproben

23.12.2004: Schlagzeile: "Putin vereidigt Yukos Übernahme". 5 mal die gleiche Information + 2 Bilder von Putin. Und wieder 2 zusätzliche Sätze auf der dritten Seite.

25.12.2004: Schlagzeile: "Weihnachtsbotschaft des Papstes von Sorge geprägt". 5 mal die gleiche Information + 2 Bilder vom Papst. Und wieder 2 zusätzliche Sätze auf der dritten Seite.

Wir wollen nicht vorschnell urteilen, aber eine gewisse Regelmässigkeit ist zu erkennen.

20. Dezember 2004

Applikationen sind auf Windows instabiler, als auf Linux

Warum? Weil Windows besser ist. Nochmal: Windows ist besser, deshalb sind Applikationen in der Praxis instabiler.

Windows bietet unendlich viele Systemkomponenten. Viele Dienste, die man im taeglichen Programmierleben braucht, bietet Windows als API. Das faengt an beim XML Parser, ueber HTTP mit Caching, URL-Behandlung, Embedded Browser, Verschluesselung, bis zu Sicherheitsdiensten und vielen anderen mehr. Als Programmierer bin ich froh, das alles nutzen zu koennen. Warum selbst implementieren, wenn das Betriebssystem das alles bietet? Auf Linux gibt es das alles nicht. Zumindest nicht als System-APIs. Natuerlich gibt es XML-Parser, Verschluesselung, HTTP-Libraries und Browser zum Einbetten. Aber man muss sie sich meistens im Netz beschaffen, selbst nochmals wrappen, moeglicherweise selbst kompilieren und dann dazulinken. Sehr muehsam, wenn man viel braucht, weil diese Komponenten auf Linux (oder Open Source) im allgemeinen eben aus verschiedenen Haenden kommen. Alle mit eigenen Coding Conventions und Interface Conventions.

Bei meinen Windows Anwendungen linke ich gegen LIBs, und benutzt werden dann vom Betriebssystem bereitgestellte DLLs. Bei Linux linke ich die libXX.a oder lege die Shared Libraries dazu. Meine-Windows Anwendungen haben damit Laufzeitabhaengigkeiten vom System. Meine Linux-Anwendungen sind selbst-konsistent. Jetzt kommt eine neue Betriebssystem Version oder (schlimmer) eine Bugfix Release (auch Service Pack genannt). Dann fliegen mir die Installationen der Kunden um die Ohren, und zwar fast nur die Windows Installationen.

Das kommt so: angenommen es gibt bei jedem Systemdienst, den ich verwende eine 0,1 % Wahrscheinlichkeit, dass sich die Semantik einer Schnittstelle, oder das Verhalten oder Abhaengigkeiten geaendert haben. Ich verwende 20 solcher Systemdienste. Ich habe 20 Kunden. Das ganze ueber 5 Jahre bei 8 Systemupdates pro Jahr plus 8 "signifikanten" Konfigurationsaenderungen des Kunden intern. Macht zusammen 30 Notsituationen in denen betriebskritische Dienste beim Kunden nicht laufen. Diese addieren sich zu den ueblichen Bugs, die es eh schon gibt und die erst bei "ungewoehnlicher" Bedienung auftreten. Bei jedem Kunden also zusaetzlich 1-2 mal. Fuer mich bedeutet das alle 2 Monate Emergency-Debugging am Livesystem waehrend der Betrieb eines Kunden steht.

Manchmal wuensche ich mir, Windows waere nicht so gut und ich wuerde alle Dienste wie auf Linux selbst einbinden muessen. Auf jeden Fall sollte man auch bei Windows statisch binden.

_happy_coding_

12. Dezember 2004

Wie schlecht kann ein Nachrichtenportal sein?

Meinen Handyvertrag habe ich bei o2. Heute habe ich mir mal das o2 Portal angesehen und ich bin entsetzt. Nehmen wir mal den Nachrichtenteil. Angenommen ich will schnell mal die aktuellen Headlines lesen. Dann passiert folgendes: GPRS Service starten, Startseite kommt,
da steht: "Müntefering kündigt gedrosseltes Reformtempo an". Bild von Müntefering. OK, ich will mehr, klicke auf die Headline. Seite kommt, da steht: Überschrift: "Müntefering kündigt gedrosseltes Reformtempo an". Text: "SPD-Chef Franz Müntefering hat angekündigt, dass Rot-Grün das Reformtempo gedrosseltes Reformtempo im kommenden Jahr drosseln wird, mehr...". User klickt "mehr...". Seite kommt, da steht: Überschrift: "Müntefering kündigt gedrosseltes Reformtempo an". Bild von Müntefering. Text: "SPD-Chef Franz Müntefering hat angekündigt, dass Rot-Grün das Reformtempo gedrosseltes Reformtempo im kommenden Jahr drosseln wird." und dann tatsächlich noch 2 ganze weitere Sätze.

Kann es sein, dass ich jetzt 5 mal den gleichen Satz gelesen habe? Nach der Überschrift musste ich 2 mal klicken und warten, noch 4 mal das gleiche zu lesen, um endlich 2 zusätzliche Sätze zu bekommen.

Soll ich noch was zu den Ladezeiten sagen? GPRS ist nicht langsam. Aber man kann es langsam machen. Bei jeder Seite werden die verdammten o2-Portal Buttons als Bilder wieder geladen. Von Caching keine Spur. Beim BACK zur vorherigen Seite werden alle Buttons wieder geladen. Von Caching keine Spur. Wegen den unsäglichen Menubildern, die nichts mit dem Content zu tun haben, lädt jede Seite 15 Sekunden. 5 davon mit drehender Weltkugel, dann ist 10 Sekunden lang das Bild eingefroren und die Displaybeleuchting geht auch noch aus, wie toll. Man sieht nichtmal, wenn es fertig ist.

Ich wollte mobil Nachrichten lesen. Ich wollte GPRS Traffic erzeugen und bezahlen. Aber nicht so. o2 belastet meine Trafficrechnung mit unnötigen Menubildchen, lässt mich warten und ich darf immer wieder das gleiche lesen. Das war kein Einzelfall. Gestern war es genauso. Anderer Ort, andere Headline, der gleiche Nerv.

Natürlich ist manches davon ein Zusammenspiel von Handy-Browser und Portal. Warum benutzt mein Nokia 6220 keinen Cache? Warum berücksichtigt das Portal das nicht? Aber der größte Teil ist die Schuld von o2. Es geht besser. Ich habe für EPlus iMode Content debuggt. Ich weiss wovon ich rede.

_happy_coding_

5. Dezember 2004

Immer anstaendig bleiben

Immer wieder kommt es vor, das mal mal eben so nen Code schreibt, um was zu testen, mal eben schnell was kleines zu fixen und was herzuscripten. In solchen Faellen ist man doch immer versucht das mal eben schnell hinzuschreiben ohne auf Formatierung, korrekte Namensgebung, Fehlermeldungen usw. zu achten. Man return-ed mal eben wo es so passt und laesst die Fehlerbehandlung grad mal weg. Die ruestet man ja spaeter nach, falls der Code was dauerhaftes wird. Dann kann man auch gleich alles noch mal richtig benennen. "Ich mach das jetzt mal und wenns laeuft mach ich die Fehlerbehandlung". Pfui.

Das bringts nicht, weil...
1. Wir sind nicht dumm und oft laeuft der Code tatsaechlich.
2. Der meiste hingesketchte Code wird doch nie mehr weggeschmissen sondern weiterentwickelt und wird irgendwann produktiv.
3. Es ist echt uncool spaeter nochmal ueber den Code zu gehen und Fehlerbehandlung nachzuruesten. Dann muss man sich nochmal in alles genau hineindenken. Was fuer eine Zeitverschwendung.
4. Code lebt laenger als man denkt. Was total nervt sind Provisorien, die einem Jahre lang peinlich sind.
5. Ordentlicher Code ist stabiler als unordentlicher. Das gilt auch fuer Testcode.

Nur mittelgute Programmierer, die sowieso viel Code wegwerfen und ueber vieles nochmal drueber gehen muessen, damit es geht, koennen sich das erlauben. Gute Programmierer haben gar keine Zeit dafuer. Die programmieren es gleich richtig, ordentlich und anstaendig.

_happy_coding_

3. Dezember 2004

Das ist die perfekte Quelle, der perfekte Tag

Gestern war noch alles finster: Ein Videoserver, der im ::free so gnadenlos abraucht, dass sogar der Debugger (MSVC) beendet und kein Land in Sicht. Der Videoserver benutzt ffmpeg, das leider nicht im MSVC kompiliert. Deshalb mit cygwin kompilieren, dann LIB generieren aus einem zusammengeschusterten DEF file und .so in DLL umbenennen. Geht, ist aber nicht toll. Vor allem benutzt die DLL dann offensichtlich das cygwin Memory Management, dass unabhaenging ist vom VC++ Memory Management. 1. es braucht die cygwin1.dll und 2. das Memory Management kollidiert in manchen ffmpeg Funktionen. Das geht besser:

Wenn man ffmpeg fuer ein Windows MSVC Projekt will, dann kompiliert man ffmpeg mit MinGW. configure --enable-shared erzeugt anstandslos LIB und DLL fuer avformat und avcodec. Der grosse Vorteil: die DLLs brauchen keine cygwin Runtime, sondern verwenden die MSVC runtime, toll.

Wie installiert man MinGW: Bei mir ist schon Cygwin drauf. Das wird empfohlen, denn dann hat man alle Entwicklungstools einschliesslich make. Dann MinGW-3.1.0-1.exe, danach MSYS-1.0.10.exe. Der heutige ffmpeg CVS-snapshot kompiliert uebrigens nicht mit MinGW. Ich verwende deshalb ffmpeg-0.4.9-pre1.

Und deshalb habe ich heute die perfekte Quelle: MSVC mit ffmpeg.

Nachtrag (01.12.2005): ffmpeg-0.4.9-pre1 hat in Spezialfällen Thread-Synchronisationsprobleme. Die Probleme bei der CVS Version wurden inzwischen behoben. Deshalb verwenden wir jetzt wieder die CVS Version.

_happy_coding_

Neulich auf www.lluna.de

Wolfspelz betreibt Muessiggang und liesst Spiegel Online. Da kommt Kreiz, der Wolfspelz kennt. Sie reden ueber Radeon 9800 usw., gehen dann wieder zusammen auf www.LLuna.de. Dort treffen sie Tine, die Shooter spielt (weiss Wolfspelz, weil er sie vorher schonmal getroffen hat). Wolfspelz stellt Tine und Kreiz vor, weil Kreiz auch ein grosser Shooter-Liebhaber ist. Die beiden reden was Shooter-Spieler halt so reden aus Sicht des Strategie- und Rollenspielers Wolfspelz. Dann gehen sie gemeinsam die Homepages ihrer jeweiligen Clans anschauen.

Toll, wenn die eigene Software Leute mit gleichen Interessen zusammenfuehrt.

(Ja, Muessiggang wird mit ue und ss geschrieben, wenn der Autor Softwarekuenstler ist und eine englishe Tastatur hat. Da liegt das "{" eben naeher, als das "ü")

_happy_coding_