Archiv für Januar 2008

1. JSP Aufgabe

Donnerstag, 31. Januar 2008

Beim Thema JSP fühle ich mich wegen der Java-Nähe wieder etwas mehr zu Hause als bei PHP. Obwohl ich sagen muss, dass mir das “nackte” JSP doch ziemlich fremd ist. Von der Arbeit her hab ich eher Erfahrung in JSF, Wicket und Velocity. Debuggen mit Eclipse und Tomcat geht natürlich auch. Wie war das eigentlich mit PHP? Ging das auch zu debuggen mit Eclipse und Aptana-Plugin? Hatte ich gar nicht ausprobiert.

Hm, das geht anscheinend nicht. Echt schade. Diesem IBM-Artikel Debugging techniques for PHP programmers nach, soll es aber schon gehen mit dem PHPeclipse Plugin. Allerdings hab ich das noch nicht ausprobiert, sondern mich doch erstmal auf die JSP-Aufgabe konzentriert und abgegeben.

GDI-1-Überlebenspack

Mittwoch, 30. Januar 2008

Da die Frage nach Tools für Grundlagen der Informatik 1 aufkam, hab ich mal mein ultimatives Grundlagen der Informatik 1 Überlebenspack zusammengestellt.

Der Umschlag

Mittwoch, 30. Januar 2008

Nichtsahnend, müde nach der Arbeit und überlegend, ob ich heute nicht doch lieber Heroes gucke als noch Aufgaben zu machen, finde ich in meinem Briefkasten einen DIN-A4-Umschlag von W3L mit verstärktem Rücken. Was da wohl drin ist? Aber erstmal sind ja die Mäuse dran. Also meine beiden Kater. Die wollen mich ja erstmal (der eine mehr, der andere weniger) ausgiebig begrüßen. Und dann natürlich ihr Abendbrot einnehmen. (Vielleicht hab ich das mit dem Begrüßen auch missverstanden ;-) )

Aber dann komme ich endlich dazu, den ominösen Umschlag zu öffnen. Enthalten ist ein Studienzertifikat zum bestandenen Modul Grundlagen der Informatik 1 farbig gedruckt auf Karton. Außerdem auf einer zweiten Seite eine Modulbeschreibung mit Inhaltsangabe. Also das sieht richtig gut aus, das freut mich, das jetzt auch offziell in den Händen zu halten. Und falls einer danach fragt (ich meine, es macht keiner, aber wenn), dann hab ich was schickes zum Vorzeigen.

Meine letzten Aufgaben über XML/XSLT und PHP sind nun auch korrigiert. Bis auf die zweite PHP-Aufgabe. Da hab ich in der Aufgabenstellung übersehen, dass für die Spaltennamen der MySQL-Tabelle Namen vorgegeben sind. Ich hab die Spalten anders benannt und bekam die Aufgabe prompt zurück. Aber ich durfte sie nochmal abgeben. Dabei hab ich auch gleich wieder etwas über die W3L-Plattform gelernt. Nämlich dass man eine schon bearbeitete Aufgabe nochmal in den Bearbeitungsmodus versetzen und nochmal eine Datei hochladen kann.

Ach und außerdem gibt es Musterlösungen. Noch eine Sache, die mir bisher nicht bewusst war. Das kommt davon, wenn man immer nur die Benachrichtigungsmails liest und nicht auf die Seite Mitteilungen zu Aufgaben. Dort sind nochmal alle Aufgabenbewertungen zu sehen und in der Spalte Lösung steht jetzt bei den bearbeiteten Aufgaben ein verlinktes ja. Der Tooltipp offenbart dann, dass man hier zur Musterlösung kommt. Von der nun angezeigten Seite sollte man sich nicht verwirren lassen (was mir aber gleich passiert ist). Wenn man sich den Seitensourcecode anguckt, dann sieht man, dass dort mehrere HTML- oder PHP-Dateien aneinander gepappt sind.

PHP geschafft

Samstag, 26. Januar 2008

Den größten Teil des Samstags hab ich nun mit PHP verbracht. Eingabefelder validiert, Daten in die MySQL-Datenbank geschrieben und wieder ausgelesen und sogar meine erste PHP-Klasse geschrieben. Zum Glück benutzen wir die aktuelle Version, die Klassen kann.

Dabei ist PHP für mich komplettes Neuland. Aber ich bin mittlerweise dazu übergegangen, den Kurstext nicht mehr von vorne bis hinten durchzugehen. In der U-Bahn lese ich ja immer vor und auch nicht so genau, wenn ich etwas nicht verstehe oder es mir zu langweilig ist, blätter ich erstmal drüber hinweg. Online nehme ich mir die Wissensbausteine vor, lese erstmal nur die Zusammenfassung und mache dann den Online-Test. Erst wenn ich hier sehe, dass ich was nicht weiß, guck ich nochmal nach. Dann setz ich mich erstmal an die Einsendeaufgaben und bearbeite die und schaue dabei nach Bedarf wieder in die jeweiligen Texte rein. Das ist im Endeffekt (momentan für Web-Programmierung) am effektivsten und den größten Teil des Stoffes arbeite ich dann eh durch (nur nicht notwendigerweise von vorne nach hinten). Für den Online-Abschluss-Test und die Online-Klausur muss ich dann sowieso alles nochmal komplett durchgehen.

Jedenfalls hab ich heute erstmal die beiden PHP-Einsendeaufgaben abgegeben. Mal sehen.

Ach ja, dann drück ich noch ganz fest die Daumen für Marc-A. und Andreas. Die beiden haben gestern bei einem Zwischentermin ihre Grundlagen der Informatik 1 Klausur geschrieben. Die Ergebnisse gibt es wohl nächste Woche.

Fast schon ein bisschen zu einfach …

Mittwoch, 23. Januar 2008

… aber das sollte ich lieber nicht zu laut sagen ;-) Einen Mangel an herausfordernden Aufgaben werde ich in Zukunft wohl nicht befürchten müssen. Ich sollte mich eher freuen. Aber das XSLT Stylesheet war wirklich sehr einfach. Es kommen ja auch noch nicht mal Attribute zu den Tags vor, nach denen man irgendwas auswählen kann. Einzig die Abfrage nach Vorhandensein des optionalen Feldes hat mich da ein bisschen getröstet. Allerdings war mir dann doch unklar, wie die Aufgabenstellung gemeint war, da die Screenshotvorgabe nur einen Datensatz darstellt und nicht mehrere. Nicht dass ich doch was völlig falsch verstanden hab und alles ganz anders und schwieriger ist. Daher hab ich zur Sicherheit nochmal nachgefragt und schicke die Lösung noch nicht ab.

XSD & XSLT

Mittwoch, 23. Januar 2008

Bei der zweiten XML-Aufgabe gibt es eine vorgebene XML-Datei sowie ein Screenshot der Ergebnisseite, so wie sie durch ein selbst zu schreibendes XSLT-Stylesheet zu erzeugen ist. Zusätzlich soll noch ein XML-Schema dafür erzeugt werden. Hier werden auch weitere Einschränkungen gemach.

Mit dem XML-Schema hab ich angefangen und bin damit auch durch. Jedenfalls lässt sich nun die XML-Datei validieren. Das XSLT zu erstellen muss ich (da es ja wieder etwas spät geworden ist) auf morgen verschieben. Aber durch die freiwillige Aufgabe, die ich vorher bearbeitet hab, bin ich hoffentlich halbwegs gerüstet. XSLT geht ja mehr in Richtung funktionale Programmierung. Ein Glück, dass ich (vor langer Zeit) in meinem früheren Studium Miranda bis zur Schmerzgrenze hatte. Das kam dort als erste Programmiersprache dran, um sicherzustellen, dass alle auf dem gleichen Level anfangen (nämlich bei Null ;-) ). Der eigentliche Sinn des ganzen erschließt sich einem erst viel später, wenn man merkt, dass Rekusion auch in prozeduralen Sprachen Sinn macht.

XML-Schema

Dienstag, 22. Januar 2008

Die beiden Tools xmllint und xmlstarlet basieren beide leider auf libxml2, der XML-Bibliothek von Gnome. So gut und featurereich diese Tools auch sind, eins können sie daher nicht: Validieren gegen ein XML-Schema (*.xsd). Aber mit xjparse, Apache Xerces und einem selbstgestrickten Shell-Skript hab ich genau das, was ich will.

Die letzten drei Einsendeaufgaben kamen gestern zurück (jeweils volle Punktzahl ;-) )

Zum XML-Schema-Bereich gibt es keine Einsendeaufgabe aber es trägt sehr zum Verständnis bei, wenn man ein bisschen damit selbst rumprobiert. Der nächste Bereich behandelt XSLT.

DTD

Montag, 21. Januar 2008

Die erste Einsendeaufgabe zu XML gibt eine XML-Datei vor, zu der man eine DTD erstellen soll, damit man damit auf Gültigkeit prüfen kann. Eclipse hat zwar XML- und DTD-Editoren, ist beim Validieren aber nicht besonders hilfreich. Und der Validator des Aptana-Plugins kommt mit lokalen DTD-Dateien nicht zurecht. Das sucht die immer im Home-Verzeichnis des Users. Im Kurs wird XMLSpy empfohlen, weil es wohl früher eine frei benutzbare Version davon gab. Jetzt gibt es allerdings nur noch eine 30-Tage-Testversion und unter Linux läuft es nur unter Wine. Deshalb wollte ich das erstmal nicht installieren.

Exchanger XML Lite scheint (zumindest vom Handbuch her) eine gute Alternative zu sein. Für nicht-kommerzielle Zwecke kann man das Programm kostenlos benutzen und die Einschränkungen gegenüber der Vollversion sind gering. Leider hab ich es unter Linux nicht zum Laufen bekommen, obwohl es in Java entwickelt wurde. Das speziele Linux-Setup schlägt wegen nicht vorhandener Abhängigkeiten fehl. Und die reine Java-Installation, die man als JAR-Datei startet, meldet Fehler und verweist für die Details auf die Log-Datei, die allerdings nirgends zu finden ist. Naja, sowas liebe ich …

Daher hab ich zum Testen erstmal xmllint und xmlstarlet verwendet. Diese Kommandozeilentools reichen völlig aus, um eine einfache Validierung vorzunehmen. xmllint kann man sogar in einem Shellmodus starten und sich dann wie in einem Dateisystem mit cd, ls und cat bewegen oder XPath-Aausdrücke auswerten. Die einfachsten Dinge sind doch manchmal die besten.

Zahlenraten in JavaScript

Samstag, 19. Januar 2008

In Hover-Effekte schrieb ich, dass ich im Kurstext nicht finden konnte, wie man per JavaScript die zugewiesene CSS-Klasse ändern kann (nämlich über element.className). Es steht aber doch drin, nur nicht im gleichen Kapitel sondern in einem davor. An solchen Dingen merke ich, dass die Online-Texte zum Nachschlagen nicht besonders gut geeignet sind. Ein Buch hat man mal schnell durchgeblättert aber auf den Online-Seiten übersehe ich dann sowas einfach. Aber wenn man zu faul ist, die drei Meter in den Flur zur Tasche mit dem Buch zu gehen …

Heute habe ich die zweite Einsendeaufgabe zu JavaScript bearbeitet: Zahlen raten. Einige vorgebene Zahlen im Bereich 1-50 sind die Gewinnzahlen und der Benutzer soll eine davon raten. Dabei soll die Eingabe validiert und entsprechende Fehlermeldungen ausgegeben werden. Das erinnert mich ein bisschen an mein erstes selbstgeschriebenes Programm, das muss gut 25 Jahre her sein. Das war auch Zahlenraten in etwas abgewandelter Form. Damals lernte ich mit meinem ersten Computer – einem gebrauchten Sinclair ZX-80 mit Folientastatur und defekter Kassettenschnittstelle – Basic. Das beste an diesem Rechner war das Handbuch, das seinen Namen wirklich verdiente und einen echten Basic-Einführungskurs enthielt. Das Handbuch der damals aufkommenden C64 Heimcomputer war dagegen echt grauenvoll. Mein Chemielehrer hatte damals einen C64, den er mal mit in die Schule brachte und mit seinem Zahlenratenspiel vorführte. Das hab ich dann gleich auf meinem eigenen Rechner nachprogrammiert. Da ich nichts abspeichern konnte, tippte ich das Programm auf der Schreibmaschine ab. Ein oder zweimal hab ich es dann sogar tatsächlich nochmal abgetippt und vorgeführt.

Naja, unabhängig davon, dass mir dabei mein Alter erschreckend bewusst wird (damals war ich etwa 12 oder 13, d.h. heute müsste ich so ungefähr 37 Jahre alt sein ;-) Zumindest gehöre ich nicht mehr zu denen, die die Lochkartenära noch selbst miterlebt haben), ist das wohl der Hauptgrund, warum mir die Aufgabe heute so viel Spaß gemacht hat.

Mit den richtigen Werkzeugen ist es aber noch besser. Im Kurs wurde auf Aptana hingewiesen. So richtig anfreunden konnte ich mich zuerst nicht damit, aber da es auch als Eclipse-Plugin verfügbar ist, hab ich es mal installiert und ausprobiert. Als besonders hilfreich stellte sich die Autovervollständigung raus. Sowohl für HTML, CSS und vor allem JavaScript ist das richtig gut gelungen. Und mit Firebug lässt sich im Firefox nicht nur JavaScript debuggen, sondern auch das von JavaScript geänderte HTML der Seite betrachten und die CSS-Wirkungsweise nachvollziehen. Richtig schick.

Im nächsten Kapitel geht es um XML. Na mal schauen.

Hover-Effekte

Freitag, 18. Januar 2008

Im JavaScript-Unterkapitel Event-Handler geht es um die verschiedenen Events, die man benutzen kann, um JavaScript-Funktionen aufzurufen. Z.B. kann man dann mit der Kombination onmouseover mit onmouseout sehr leicht Hover-Effekte erzeugen, also ein Element highlighten, wenn man mit der Maus drüber fährt.

Im Kurs wird als Beispiel ein Schwarzweiß-Foto farbig, wenn die Maus drüber steht.

Als Aufgabe soll man selber eine Tabelle erstellen, bei der die Zeilen einen Hover-Effekt haben (indem die Hintergrundfarbe gewechselt wird). Außerdem soll man durch Klicken die Zeile markieren können (mit einer anderen Hintergrundfarbe). Diese Markierung soll dann nicht wieder weggehen, wenn man mit der Maus die Zeile verlässt, erst beim nächsten mal Draufklicken. Diese Aufgabe ist allerdings keine von den zu korrigierenden Einsendeaufgaben, aber da man ja am meisten lernt, wenn man es selbst ausprobiert …

Die Tabelle zu erstellen und die CSS-Klassen war ja erstmal einfach. Für die Zeilen gibt es drei unterschiedliche Klassen: normal, highlight und selected.

Erstmal mit dem Hover-Effekt anfangen: Die Events onmouseover mit onmouseout rufen jeweils eine JavaScript-Funktion auf. Dabei soll die CSS-Klasse der Zeile auf highlight bzw. normal geändert werden. Aber wie geht das? Das stand so nicht im Wissensbaustein. Also bei SelfHTML nachgeschaut und die style-Eigenschaft gefunden. Damit kann man per JavaScript jeden einzelnen Wert entsprechend der CSS-Eigenschaft setzen. Also z.B. mit style.backgroundColor die Hintergrundfarbe. Das geht dann zwar, ist aber nicht ganz das, was ich mir vorstelle. So würde ja das Aussehen nicht zentral in einem Style-Sheet festgelegt werden sondern wäre über den ganzen JavaScript-Code verteilt. Bei sowas werd ich gleich total unruhig, weil ich mir dann vorstelle, wie nervig es wäre, in einer umfangreichen HTML-Datei alle Stellen zu finden, an der ein bestimmtes Element einen Style zugewiesen bekommt.

Einfach this.class = “highlight” funktioniert leider nicht, um die CSS-Klasse zu ändern. Ein bisschen weiter suchen also. Die Lösung ist: className statt class. Und schon geht es. Hover geht schon mal.

Das Klicken und Selektieren ist auch kein Problem. Beim Klicken einfach den momentanen Klassennamen abfragen und dann entweder auf highlight oder selected setzen (also umdrehen). Und die Hover-Methoden müssen auch angepasst werden. Wenn die CSS-Klasse gerade selected ist, dann nicht hovern und die Auswahl bleibt.

Alles in allem hab ich etwa 50 Minuten gebraucht. Angegeben waren 60 Minuten, was ein super Ergebnis ist. Bei GDI hab ich meistens doppelt so lange wie angegeben benötigt.

Morgen ist dann Formulare mit JavaScript validieren dran. Inklusive der zweiten Einsendeaufgabe für JavaScript.