Archiv für Januar 2008

DOM mit JavaScript

Freitag, 18. Januar 2008

Die beiden CSS-Aufgaben sind mittlerweile korrigiert. Einmal 19 und einmal 20 von jeweils 20 Punkten. Der eine Punkt fehlt, weil ich bei der Berechnung der Gesamthöhe des div-Blocks den Außenabstand nicht mit berechnet hatte. Hm, gut zu wissen …

Beim nächsten Kapitel geht es darum, das Dokument mittels JavaScript zu verändern. Bei der ersten JavaScript-Einsendeaufgabe muss ein dargestelltes Bild auf Knopfdruck vergrößert bzw. verkleinert werden. Beim Klick auf den dritten Button soll wieder die Originalgröße verwendet werden. Vor einer Stunde war ich im Prinzip schon fertig (und auch ziemlich müde). Aber ich wollte es dann trotz Müdigkeit noch abgeben. Aber das kostet ja auch immer noch etwas Zeit. Hier noch einen Kommentar dazu, alles etwas besser formatieren. Nochmal validieren, usw. Da kommt dann glatt nochmal ne Stunde zusammen.

CSS Aufgabe 2/2

Dienstag, 15. Januar 2008

Die zweite CSS-Aufgabe hab ich nun auch gelöst. Alles nochmal validiert mit dem W3C-Validator die Konventionen für die Abgabe überprüft (alles in ein Verzeichnis, das die Aufgabennummer als Namen trägt, die Haupt-HTML-Datei muss index.html heißen, Verzeichnis zippen) und abgegeben.

Dabei bin ich auch auf IEs4Linux gestoßen, ein Installationsskript, mit dem man gleich mehrere Internet Explorer Versionen auf einmal inklusive Flash-Plugin unter Linux (mit Wine) installieren kann. Echt praktisch. Das Skript brauchte ca. 3 Minuten, um alles runterzuladen und zu installieren. Anschließend waren vier neue Icons auf meinem Desktop (IE 5.0, 5.5, 6.0 und 7.0). Wobei die 7.0 noch als Beta ausgewiesen wird. Gerade die 7er Version ist ein bisschen langsam, aber das ganze ist ja auch nur dazu gedacht, selbst erstellte HTML-Seiten damit zu testen.

Damit hab ich nun endlich das Kapitel CSS abgeschlossen. Als nächstes steht JavaScript an, aber für heute reicht es erstmal.

CSS-Aufgabe 1/2

Montag, 14. Januar 2008

Ok, so schwierig war es ja gar nicht. Die erste der beiden CSS-Einsendeaufgaben hab ich jetzt fertig. Ein vorgegebenes Layout mit Navigations-, Logo- und Inhaltsbereich soll mittels float nachgebaut werden. Man darf sich dabei nicht beim Zusammenrechnen der Gesamtbreiten und -höhen verzählen, dann ist es relativ straight-forward.

Bei der zweiten Aufgabe soll ein ähnliches Layout mittels absoluter Positionierung erstellt werden. Das heb ich mir dann für morgen auf.

Mein Mathe-Kurs hat sich auch wieder angefunden. Es war tatsächlich so, dass versehentlich die normale Ablauffrist eingeschaltet war. Aber das wurde ja schnell behoben.

Ok, dann kann ich jetzt also mit Fug und Recht behaupten, dass ich wieder dabei bin ;-)

CSS float

Montag, 14. Januar 2008

Naja, so langsam komme ich wieder rein. Hab mir gestern das Buch zu Web-Programmierung hingelegt. Aber es hat eine Weile gedauert. Und statt ins Buch zu schauen, hab ich mich mal – ganz unverbindlich ;-) – bei W3L eingeloggt. Mir ist erst nach ein paar Minuten aufgefallen (als ich überlegte, ob ich nun mit Mathe oder mit Web-Programmierung wieder beginnen sollte), dass der Mathe-Kurs gar nicht mehr vorhanden war. Naja, Cait meinte, das wäre ihr auch schon mal passiert. Wenn Nicht-Studenten den Kurs buchen, dann haben die eine Zeitbeschränkung. Vielleicht ist hier bloß vergessen worden, die Zeitbeschränkung aufzuheben.
Also hab ich dann wieder mit Web-Programmierung angefangen und mir nochmal das letzte CSS-Kapitel über absolute und float-Positionierung durchgelesen. Zumindest hab ich jetzt nach einigem Rumprobieren halbwegs die Funktionsweise von float verstanden. Die beste Voraussetzung um die Einsendeaufgaben zu CSS zu bearbeiten. Damit werde ich heute abend anfangen.

Das große Loch

Samstag, 12. Januar 2008

Die Gefahr bei mir ist immer groß, dass ich im Urlaub in ein großes Loch der Unstrukturiertheit falle, aus dem ich nur schwer wieder herausfinde. Mal abschalten, sich wieder mal intensiver um die Freundin und die Katzen kümmern muss ja auch mal sein. Sicherlich. Aber ich find dann den Weg zurück immer so schlecht.

Da ich ja jetzt nun schon wieder seit einer Woche arbeiten darf *grmpf*, sollte ich nun auch mal wieder mit dem Studium weiter machen. Das wird höchste Zeit.

Mal was ganz anderes

Samstag, 12. Januar 2008

Naja, so anders dann doch nicht. Aber nach den Strapazen sowohl im Studium als auch im Job, hab ich meinem Wissensdurst einfach mal freien Lauf gelassen und mich mit Python und Webanwendungen mit Python beschäftigt. Das ist bei mir so. Wenn mich erstmal etwas gepackt hat, dann lass ich da nicht los. Das ist eine meiner Stärken – schon oft hab ich dann später von den Dingen profitiert, die ich einfach mal so aus Spaß ausprobiert hab – und genau so eine Schwäche, weil es mich auch davon abhält, die Sachen anzugehen, die gerade anstehen. Jetzt zum Beispiel weitermachen mit Web-Programmierung oder Mathe.

Python ist zwar nicht Bestandteil des Moduls Web-Programmierung, aber sich damit zu beschäftigen ist ja auch nicht völlig fachfremd. Daher hab ich meinem inneren Drang nachgegeben und mich etwas intensiver mit der Sprache und den Frameworks auseinandergesetzt.

Bei mir in der Firma wird vor allem mit Java (serverseitig und interne GUIs) und Delphi (Client- und Stand-alone-Anwendungen) gearbeitet. Die Kompetenz von uns Entwicklern liegt also eindeutig auf diesen beiden Sprachen, was dazu führt, dass auch kleine interne Tools wie Datenkonvertierung, Transformation von HTML-Seiten etc. damit erledigt werden. Dabei hatte ich aber schon immer das Gefühl, dass das manchmal alles viel zu umständlich und langwierig ist.

Delphi (wobei ich hier nur von der Win32-Version rede) ist z.B. ein hervorragendes Tool, um schnell eine GUI zusammen zu klicken und bietet unheimlich viele ausgefeilte GUI-Komponenten mit denen man Eindruck schinden kann. Aber wenn man die Standard-Bibliothek von Java gewohnt ist, fühlt man sich in Delphi immer ein bisschen behindert.

Java hat nicht nur eine große Standard-Bibliothek sondern auch noch eine riesige Auswahl an Open-Source-Bibliotheken (siehe z.B. Apache), die einem das Programmiererleben erheblich erleichtern können. In Java tendiert man meiner Meinung nach immer ein bisschen dazu, die Sache erst zu verkomplizieren, indem man noch eine weitere Zwischenschicht einbaut, das Problem noch einmal kapselt, etc. bis man dann an einem Punkt ankommt, wo alles zusammengenommen wieder alles vereinfacht wird. Mit Spring z.B. kann das dann auch sehr elegant sein und richtig Spaß machen, wenn man das einmal verstanden hat.

Um Daten in Textdateien zu SQL-Scripten zu konvertieren oder ein paar Anker in HTML-Dateien einzufügen erscheint mir diese Herangehensweise aber etwas zu schwerfällig.

Als ich also genau vor der Aufgabe stand, einen Haufen HTML-Dateien (dabei handelte es sich um ein von einer Webagentur nach HTML konvertiertes Fachbuch) so aufzubereiten, dass sie in unser Client-Server-Produkt integriert werden konnten, arbeitete ich mich ein wenig in Perl ein. Im Endeffekt waren nur ein Dutzend reguläre Ausdrücke enthalten, die ein paar Ersetzungen vornahmen, wie Anker oder Links einfügen, und ein Inhaltsverzeichnis als Suchgrundlage erzeugten. Alles andere war von der Agentur schon super gelöst. Das Ergebnis war ein Perl-Skript mit ca. 100 bis 200 Zeilen.

Allerdings konnte ich mich nie so richtig mit der Perl-Syntax anfreunden. Ein tieferes Verständnis dieser Sprache blieb mir verwehrt, was dazu führte, dass ich bei der nächsten Auflage des gleichen Fachbuchs, doch wieder zu Java griff. Diesmal waren die Voraussetzungen nicht so gut. Die HTML-Dateien waren ohne Sinn und Verstand mit Framemaker generiert, ein Großteil der Tabellen und Bildunterschriften fehlte völlig und musste manuell nachgetragen werden. Das Layout war auch entsprechend katastrophal und eine Aufteilung der Kapitel in kleinere Seiten musste auch noch gemacht werden. Zu jedem Kapitel gab es nur eine große HTML-Datei. Der einzige Vorteil: Durch die automatisierte Generierung wurden immer wieder die gleichen Konstrukte erzeugt, die dann leicht durch ein Programm erkannt und angepasst werden konnten.

Leider musste ich feststellen, dass mich mein mangelndes Perl-Verständnis daran hinderte, meine Vorstellungen in dieser Sprache zu realisieren. Ich konnte mich einfach nicht in Perl ausdrücken und war in der Zwickmühle. Entweder meine Perl-Kenntnisse “on-the-fly” erweitern und hoffen, dass es schon werden wird ohne mich zu verzetteln oder Java zu nehmen (hier konnte ich meine Gedanken ausdrücken) und nach entsprechenden Bibliotheken zu suchen, die zur Problemlösung effektiv beitragen konnten. Unter entsprechendem Zeitdruck entschied ich mich für die Java-Version. Neben der eingebauten Unterstüztung für reguläre Ausdrücke gibt es mit Jakarta ORO auch Unterstützung für Perl-kompatible reguläre Ausdrücke. Und mit NekoHTML hatte ich einen HTML-Parser, der auch mit nicht so korrektem HTML klar kam und vor allem keine automatischen “Verbesserungen” am HTML-Code vornahm. Zum Schluss hatte ich ein recht komplexes Transformationsprogramm, dass in mehreren Durchläufen aus den exportierten Framemaker-HTML-Dateien inklusive manueller Ergänzungen meine gesplitteten und aufbereiteten Ergebnis-HTML-Dateien erzeugte.

Das gleiche Programm wurde zwar später nochmal von zwei Studenten für ein ähnliches Projekt angepasst, aber im Prinzip war es ein Wegwerfprogramm.

Ein Wegwerfprogramm, das meinem Gefühl nach an vielen Stellen zu umständlich war (vom Code her). Aber ich wusste nicht, wie ich es in Java besser, sprich einfacher, hätte formulieren können.

In der Zeit danach beschäftigte ich mich immer wieder ein wenig mit diversen Script-Sprachen wie Ruby, Groovy oder Python. Ruby vor allem wegen Rails. Groovy wegen der Nähe zu Java und Grails und Python, weil ich schon immer wissen wollte, was für einen Sinn es hat, in einer Programmiersprache die Einrücktiefe zu einem wesentlichen Bestandteil der Syntax zu machen.

Nur bei Python hat es bisher Klick gemacht. Schon bei meinen ersten ganz einfachen Skripten fühlte es sich irgendwie “richtig” an. So einfach und doch so mächtig. Also setzte ich Python auch für einige winzige Aufgaben auf Arbeit ein, las ein paar Tutorials. Das Buch Python – Essential Reference half mir, dann noch etwas tiefer einzusteigen.

Mittlerweile bin ich ein richtiger Python-Fan geworden.