dWing — die Welt ist nicht gerecht

sign in

Form submission und EventListener

Ich bin ja interessiert an richtigem dem Standard entsprechendem Javascript. Demzufolge bin ich auch Verfechter der Meinung das man in Javascript Ereignisse mit EventHandlern behandelt, die man über element.addEventListener(eventType, eventHandler, bubbling) hinzufügt. Durch diese Methode hat man Zugriff auf die Ereigniseigenschaften und man hat auch die Möglichkeit mehrere EventHandler anzufügen und diese der Reihe nach abzuarbeiten, bzw die weitere Abarbeitung durch Ereignismethoden zu unterbinden. So Zeugs wie element.onEvent = eventHandler; oder sogar onclick="javascript: eventHandler();" lehne ich grundsätzlich ab. Ich halte es einfach für unsauberen Stil, und in der DOM Spezifikation ist so etwas auch nicht enthalten. Der richtige Weg ist es addEventListener zu benutzen.

Jetzt habe ich allerdings über zwei Stunden damit verbracht den FCKeditor in meine Testversion von dWing einzubinden. Ich habe mir also einen EventListener für das submit Ereignis des Formulars registriert um das Formular im Hintergrund per XHR zu übertragen. Hat auch super funktioniert solange bis der FCKeditor nicht eingebaut war. Außerdem wollte ich den speichern Button des FCKeditors benutzen um mich nicht selbst um einen submit Button kümmern zu müssen. Nur leider ging danach nichts mehr.

Ich dachte zuerst der FCKeditor wäre an allem schuld denn er spielt selbst mit dem submit Event umeinander um vor dem Abschicken des Formulars die Eingaben des FCKeditors in eine versteckte textarea zu kopieren. An sich sehr gut. Somit kann ich direkt den Inhalt des textarea verarbeiten ohne direkt auf FCKeditor Methoden zugreifen zu müssen.

Es funktionierte aber nicht. Wie sich aber heraus gestellt hat war nicht der FCKeditor schuld sondern Firefox. Mit einem Klick auf den speichern Button im FCKeditor ruft dieser die form.submit() Methode auf. An sich müsste das ja kein Problem sein. Ein submit Ereignis wird ausgelöst und es erscheint logisch das jeder EventHandler darüber informiert wird. Dank eines Bugs in Mozilla ist dies aber nicht der Fall.

Noch schlimmer ist, dass die Leute bei Mozilla den Fehler gar nicht beseitigen wollen. Gründe dafür sind, dass sie die Abwärtskompatibilität zu 8 Jahre alten Browsern nicht stören wollen und weil jemand der über Script die form.submit() Methode aufruft auch gleich den EventHandler aufrufen könnte. Na wunderbar.

Ich bin mal wieder sehr angepisst das ich über zwei Stunden einem Fehler nachgejagt bin den niemand ausbessern will. Ich hoffe mal dass z.b. die WHAT Arbeitsgruppe etwas dagegen unternimmt und ein einheitliches Verhalten festlegt. Dann sollte dieses Verhalten noch in einem möglichen Acid4 Test überprüft werden und vielleicht kann ich dann in 3 Jahren die ganzen Hacks aus meinem Javascript Code rauslöschen.

Nicht stutzen im Dezember: Freiheit pur

Letzten Dezember hat es irgendwo in der Mozilla Gemeinschaft begonnen, dieses Jahr geht es natürlich wieder los. Die Rede ist von NSID, oder No Shaving In December. Bei mir heißt es wohl eher Nicht Stutzen Im Dezember, denn rasieren mit Klinge tue ich mich schon seit langer Zeit nicht mehr.

Angefangen hab ich eh schon am ersten, mit einem kleinen Vorsprung, denn mit einem Haarschneider zu stutzen lässt einfach einen gemütlichen Bart übrig. Leider habe ich aber erst jetzt die Gelegenheit wahrgenommen. Ein Paar Bilder von mir die meinen Fortschritt zeigen gibt es hier zu sehen. Leider nur als Ordnerübersicht, aber ich habe es bisher noch nicht geschafft eine neue Bilderseite zu programmieren. Ich werde auch immer mal wieder wenn ich Lust habe neue Bilder machen und rauf laden.

Revolution, Evolution oder Stillstand?

Schon öfter habe ich über übertriebene Abwärtskompatibilität in Software geschimpft und Stillstand kritisiert. Jetzt bin ich selbst zum Opfer von Stillstand geworden. Jetzt wurde schon mein zweiter Patch für NSPR abgelehnt. Die Begründung sieht in etwa so aus: Der Code ist veraltet und kaum jemand kennt sich aus. Aus irgendwelchen Gründen funktioniert der Code aber man sollte ihn lieber unberührt lassen damit das so bleibt. Falls trotzdem Fehler auftreten werden diese notdürftig geflickt. Dabei waren meine Änderungen nur Codevereinfachungen und Fehlerkorrekturen. Einige Warnungen wurden beseitigt damit diese nicht mehr von wirklichen Fehlern ablenken. Und entfernen von nicht mehr benutzten Makros, was das allgemeine programmieren vereinfacht. Dadurch wäre der Einstieg von möglichen Programmierern einfacher. Aber scheinbar wollen die Entwickler nicht das neue Leute einsteigen und die Software verbessern. Schade. Ich zumindest werde mich demnächst von NSPR Code fernhalten. Aber jetzt zur Frage, was ist eigentlich NSPR? NSPR ist die NetScape Portable Runtime. Ein Relikt aus den Anfangszeiten von Mozilla. Über zehn Jahre alt. NSPR definiert Plattform unabhängige Typen wie z.b. PRBool, PRInt64 uvm. Dinge die es schon seit Jahren im C99 Standard gibt. Darüberhinaus bietet es Funktionen zur Arbeit mit Threads, Speicherverwaltung, Dateizugriffe, dynamisches Linken und Zeitmanagement. Dinge die es schon im C++ Standard gibt oder bald geben wird. Oder Dinge die z.b. in Boost enthalten sind. Mit anderen Worten: NSPR ist obsolet.

Oder doch nicht? Denn einige Compiler unterstützen selbst den fast 10 Jahre alten Standard C99 nicht vollständig. Allen voran Microsofts Visual Studio. Aber hier ist es die Aufgabe von Microsoft den Standard zu unterstützen und nicht die Aufgabe der anderen um den fehlenden Standard herumzuprogrammieren. Genauso wie es die Aufgabe des IE Teams ist, richtig programmierte Webseiten richtig anzuzeigen. Es ist nicht die Aufgabe der Webentwickler ihre Webseiten absichtlich falsch zu programmieren nur damit eine obsolete Rendering Engine diese korrekt anzeigt.

Ich bewundere Leute die sich dafür einsetzen Code sauber und modern zu halten. Und irgendwie habe ich mitleid mit Leuten die eigentlich aus einem 3*3 Problem ein 1*1 Problem machen wollten aber am Schluss trotzdem dazu genötigt werden es zu einem 4*4 Problem auszuweiten. Im Klartext: Wir nehmen an es gibt 3 verschiedene Software Projekte die alle das selbe machen. Und irgendwie müssen sie auch miteinander arbeiten. Also enthält jedes Projekt Unterstützung für die anderen beiden. Damit kann es an 9 stellen zu Problemen kommen. Inkompatibilität und dergleichen. Einige der Projekte sind schon lange tot und werden daher nicht mehr gepflegt. Aber trotzdem programmiert jeder Unterstützung dafür ein. Man könnte aufräumen indem man eine einheitliche Lösung entwickelt und jeder wäre Glücklich. Leider nicht so ganz. Denn es gibt immer noch so viel tote Software die auf andere tote Software aufgebaut ist. Also wenn man ein totes Stück ersetzen möchte muss man trotzdem dessen Platz einnehmen und das tun was die tote Software getan hat. Man fügt also eine weitere Quelle möglicher Fehler hinzu und macht es damit zu einem 4*4 Problem.

Ich selbst bin sehr dafür Software so einfach wie möglich zu halten. Deswegen programmiere ich auch an Mozilla rum und nicht an Webkit. Weil Mozilla solche revolutionären Kräfte nötiger hat. Damit der Code mehr vereinfacht wird damit es zukünftige Programmierer einfacher haben wirklich wichtige Funktionen einzubauen. Leider ist es sehr schwer, wie mein Beispiel zeigt. Und leider habe ich auch eine zu schwache Persönlichkeit um dagegen anzukämpfen. Lieber gebe ich auf als noch aktiver darum zu kämpfen das die Software erneuert wird. Aber das ist nicht nur bei Mozilla so sondern bei vielen open-source Projekten. Möglicherweise ist das der Grund warum ich beruflich unbedingt in Richtung open-source gehen will. Weil ich so vieles verbessern könnte.

Allgemein bin ich auch einer ein Revolutionär als ein Evolutionär. Ich bin der Auffassung, das Revolution zu besseren Ergebnissen führt als Evolution. Man kann vor allem eine veraltete Software immer minimalst verbessern. Aber irgendwann ist eine Grenze erreicht wo es nicht mehr sinnvoll weiter geht. Der Code ist zu kompliziert geworden. Selbst die normale Pflege wird ungemein erschwert. Es ist Zeit für komplett frisches Denken. Wenn ein komplett neues Konzept erschaffen wird, hat dieses um einiges mehr Potential, auch wenn es einiger Detailverbesserungen bedarf bis ein neues Konzept das alte überholt. Im Endeffekt ist es das dennoch wert.


Politisch bin ich auch eher Revolutionär. Stillstand wie unter der CSU Diktatur in Bayern ist sowieso schlecht. Auch diese langsame Evolution unter der großen Koalition bringt es nicht fertig das System an sich umzukrempeln und obsolete Gedanken zu verwerfen. Ein mehr revolutionäres System würde mir gefallen. Wo man Mut zu Änderung hat und nicht immer mit der Angst rumläuft die Großkonzerne oder Wohlhabenden könnten abwandern. Mit solch einer Einstellung wird es nie wirklich besser. Der Kern muss neu entwickelt werden um mehr Optimierungspotential zu ermöglichen. Genau wie bei Software.


Psychologisch ist dieses ganze Revolution oder Stillstand Thema sehr interessant. Denn in Wirklichkeit habe ich extreme Angst vor Unbekanntem und Fremdem. Ich bin nicht mal bereit neues unbekanntes Essen auszuprobieren. Ich kenne ein paar Dinge die mir schmecken und die esse ich. Neues probiere ich nicht aus. Auch im Urlaub kotzt mich die fremde Umgebung nach kürzester Zeit an. Ich will auch nicht von Zuhause wegziehen weil ich Angst vor Neuem habe. Es ist für mich auch sehr schwer neue Freundschaften zu knüpfen. Ich habe die selben Freunde seit Jahren. Auch neue Freunde seitdem ich an der FH studiere, aber das ist eine kleine Ausnahme von meiner neophoben Einstellung. Auch habe ich Angst irgendwann mal arbeiten zu gehen. Denn das ist auch etwas neues für mich. Und dann auch noch Steuern und sowas. Oh Nein!

Irgendwie ist es sehr interessant. Könnte es denn sein das meine extrem neophile Einstellung in der digitalen Welt als Kompensation meiner sehr neophoben Einstellung in der realen Welt dient?

Kleine Mozilla Statistik

Da Heute mal wieder ein paar von meinen Patches in Mozilla aufgenommen wurden habe ich ein wenig Statistik gemacht...

swatinem@swatinux-mobil:~/mozilla-central$ hg log --template "{author|email}\n" | sort | uniq -c | sort -nr
   1520 reed@reedloden.com
    721 bzbarsky@mit.edu
    573 roc+@cs.cmu.edu
    566 gal@mozilla.com
    566 bclary@bclary.com
    560 jruderman@hmc.edu
    535 dbaron@dbaron.org
    526 gavin@gavinsharp.com
    485 brendan@mozilla.org
    432 mozilla.mano@sent.com
    380 vladimir@pobox.com
    374 sdwilsh@shawnwilsher.com
[...]
     21 tglek@mozilla.com
     21 steffen.wilberg@web.de
     21 rcampbell@mozilla.com
     21 bryner@brianryner.com
     19 zweinberg@mozilla.com
     19 pekka.vanhoja
     19 arpad.borsos@googlemail.com
     18 wtc@google.com
     18 chris.double@double.co.nz
     17 wr@rosenauer.org
     17 dmandelin@mozilla.com
[...]
swatinem@swatinux-mobil:~/mozilla-central$ hg log --template "{author}\n" | wc -l
19265
swatinem@swatinux-mobil:~/mozilla-central$ hg log -r1
changeset:   1:9b2a99adc05e
user:        hg@mozilla.com
date:        Thu Mar 22 10:30:00 2007 -0700
summary:     Free the (distributed) Lizard! Automatic merge from CVS: Module mozilla: tag HG_REPO_INITIAL_IMPORT at 22 Mar 2007 10:30 PDT,
swatinem@swatinux-mobil:~/mozilla-central$ hg log -r tip
changeset:   19264:81b6a486f82e
tag:         tip
user:        Arpad Borsos <arpad.borsos@googlemail.com>
date:        Mon Sep 15 17:40:25 2008 +0200
summary:     Bug 454766 - Add suggested parentheses to layout/; r+sr=roc; (with nits by sgautherie)

Und was soll man da jetzt rauslesen? Seitdem Mozilla seit März 2007 auf Mercurial läuft wurden ~19200 Veränderungen gemacht. 19 Davon sind von mir :) Also habe ich 0.1 der gesamten Änderungen gemacht. :) Sehr gut. Würde ich jetzt noch herausfinden wann mein erster Patch war, wäre die Quote sicherlich noch höher.

Aktuelles

Lange habe ich nichts mehr in meinen Blog geschrieben, irgendwie fehlt mir die nötige Motivation. Wie mir auch für alles andere die nötige Motivation fehlt. Insbesondere auf PHP und Webprogramierung habe ich in letzter Zeit gar keine Lust. An dWing habe ich schon lange nicht mehr gebastelt. Auch habe ich nicht mit den schönen neuen CSS Features von Firefox 3.1 rumgespielt, wobei ich auf diese schon sehnsüchtig gewartet habe. border-image, :nth-child(), und bald sogar mehrere Hintergrundbilder. So langsam entwickelt es sich :)

Auch über <video> Unterstützung freue ich mich sehr, auch wenn es in meinen Tests noch nicht so richtig funktioniert hat. Auch im Acid3 Test hat Firefox 3.1 mächtig zugelegt. Auf 85 Punkte kommt er im Moment und ich hoffe das es noch mehr werden. Der Patch für SVG Animationen entwickelt sich langsam. Und die SVG Performance allgemein wurde seit der 3.1 Entwicklung sehr verbessert. Man darf also gespannt sein.

Selbst habe ich am Anfang der Ferien einen sehr kleinen Patch geschrieben, aber seitdem auch nichts gemacht. In den letzten Tagen habe ich etwas das Build System studiert und experimentiert mit SCons, aber noch ist es nicht weit genug als dass ich was vorzeigen könnte. Ich finde es sehr erschreckend wie kompliziert das aktuelle autoconf basierte System ist. Die hälfte des Codes ist nur da um mit irgendwelchen exotischen, wahrscheinlich sowieso schon seit Jahren aufgegebenen Compilern und Systemen umzugehen.

In diesem Zusammenhang sei auch das einzige erwähnt was ich an Apple mag, und zwar das sie alte Versionen von OSX sehr schnell aufgeben. OSX 10.4 war das einzige System welches länger als 2 Jahre unterstützt wurde, und wofür sogar einige Tage nach erscheinen von 10.5 noch ein Update kam. Aber inzwischen ist OSX 10.4 auch schon tot. Firefox 3 unterstützt diese Version noch, ältere aber nicht mehr. Ab und zu muss einfach der alte Ballast abgeworfen werden. Dabei muss ich auch den Entwicklern des X Servers gratulieren. Sie haben es tatsächlich geschafft zwei drittel des gesamten Codes rauszulöschen weil dieser für Kompatibilität mit irgendwelchen Systemen gesorgt hat die schon seit einiger Zeit nicht mehr funktioniert haben und der Code nur so vor sich hin verrottet ist. Auch veraltete Module wurden einfach gelöscht. Saubere Leistung, gut so :)

Apropos X, ich bin sehr gespannt auf die neue Version und die neue Version von Mesa. Mit dabei ist freie 3D Unterstützung für die Radeon Karte in meinem Desktop PC. Auch in Sachen Kernel Modesetting geht es denke ich gut vorwärts. Phoronix hatte eh davon gesprochen das letzten Monat wie Weihnachten war für ATI Karten Besitzer. Also für mich ist erst Weihnachten wenn dieser ganze Code Mainstream ist, und ich hoffe es inständig das dies noch vor Weihnachten geschehen wird. Dabei habe ich den Release von Ubuntu Intrepid im Oktober im Auge. Ich hoffe das die freien 3D Treiber für meine Radeon das halten was sie versprechen. :) Auch bin ich mal gespannt was es für verbesserungen in Gnome gibt. Und ob es Ubuntu endlich schafft Pulseaudio richtig einzubinden.

Upstart, das Initsystem von Ubuntu sollte auch bald mal in der neuen Version 0.5 erscheinen. Hoffentlich wird das mit Intrepid schon der Fall sein. Aber auch dann bringt das ganze nur was wenn die Initscripte auf Upstart portiert werden, damit der Rechner beim Hochfahren schneller und besser arbeitet. Ich hoffe auch dafür, dass diese Änderungen bald ihren Weg in den Mainstream finden.


newer posts
older posts