12/12/2008

Gedanken und Probleme zu und mit XPath

Nota bene


Beim Lernen von XPath, bin ich (im Nachhinein gesehen) nicht sehr intelligent vorgegangen: Zunächst hatte ich im XML in a Nutshell das Kapitel angefangen durchzuarbeiten, währenddessen die XML-Spiele aufgemacht und das mitgelieferte Stylesheet (ohne große Erfahrung mit XSLT) versucht zu erweitern. Das alles hat enorm viel Zeit und Motivation verschlungen, da ich mich noch nicht auskannte und Dinge nur halb oder gar nicht lösen konnte. Nach 4h Arbeit ohne merklichen Fortschritt brachte ich einmal eine ausgeborgte DVD zurück und überlegte, wie ich weiter machen sollte.
Nach ein bisschen Gehirnakrobatik folgende nota bene an mich selbst:
"Zuerst lernen, dann trainieren und schlussendlich neues erschaffen!" bzw. "Hirn einschalten, bevor du was tust!".

Nach einer halben Stunde ging es weiter, nun mit "zuerst Kapitel lesen" und dann mit dem XPath-Tool herumspielen.

Viel Besser.

XML Technologies - WOHOO!


Von den Spielen und den XML Technologies allgemein, bin ich absolut begeistert! Eine wirklich super Idee, wie man das eLearnining-mäßig aufbereiten kann.
Der Einzige Wermutstropfen war für mich, dass mir das rot hervorgehobene Ergebnis nicht sofort ins Auge gefallen ist (v.a. bei Ergebnissen mit nur einem Knoten). Wäre toll, wenn man das noch fett machen könnte.

Ressourcen


Als Unterlage habe ich vor allem XML in a Nutshell verwendet. Bei den verschiedenen Achsen, waren aber die VO-Unterlagen (v.a. wegen den schönen Diagrammen) um einiges besser, soll heißen verständlicher.
Als dritte Quelle kann ich die Mozilla Developer Seite zu XPath empfehlen. Die bieten mit Werkzeugen, wie XPather auch nette Tools für das Offline-Arbeiten mit XPath an.

Die in den Literatur-Angaben angegebene Seite zvon.org, kann ich im Bezug auf XPath nur eingeschränkt empfehlen, da sie meiner Meinung nach einige Dinge (z.B. id()) nicht behandelt.

Workaround


Eine Schlussbemerkung zur Verwendung von id(): Diese Funktion erlaubt es einem einen Knoten mit einem Attribut, dessen Wert in der DTD als ID angegeben wurde, als Ausgangsknoten zu wählen.
Das Problem bei der Anwendung ist nun aber, dass viele XML-Prozessoren (so auch unser XML Technologies und Mozilla Firefox, der expat verwendet) keine externen DTDs auswerten und somit die id()-Funktion nicht funktioniert.
Dies umgeht man einfach, indem man die Definition des Elements mit einer ID in die innere DTD-Teilmenge verschiebt.
Am Beginn der XML-Datei steht dann also folgendes:

<!DOCTYPE benutzer SYSTEM "1.dtd" [
<!ELEMENT buch (titel, untertitel, ISBN, kapitel*)>
<!ATTLIST buch autoren IDREFS #REQUIRED>

<!ELEMENT autor (#PCDATA)>
<!ATTLIST autor gebDat NMTOKEN #REQUIRED
geschlecht (m | w) #REQUIRED
id ID #REQUIRED
>
]>

Danke Martin Honnen für den Hinweis.

12/08/2008

Fortschritt

Wir haben uns heute bei Becky zu einer Marathonsitzung von 6 Stunden getroffen. Den Großteil des Hirnschmalzes (und der Zeit) hat die signifikante Verbesserung unseren (sagen wir einmal) bis jetzt sehr bescheiden Architekturkonzepts verschlungen. Dabei war uns vor allem der Entwurf von Werner Robitza, Florian Schwarz und Milena Stefanovic sehr hilfreich.
Danke, an dieser Stelle.

Ich denke dieses kollaborative Brainstorming hat uns allen eine klarere Idee von dem vermittelt, was wir eigentlich machen wollen.
Zu guter letzt noch die Vorlage ausgefüllt und einen übergenialen Namen (mit drei Bedeutungen) gefunden: "iContact".

Auf, auf, zur Implementierung!

"If man had more of a sense of humor, things might have turned out differently."
Stanisław Lem

11/30/2008

Krank, lernen und Wikipedia

Ich bin seit Donnerstag Abend krank. Typisches Influenza-Krankheitsbild mit trockener Kehle, rinnender Nase, Kopfschmerzen, Fieber und Husten. Mittlerweile wird es schon besser; zeitweise zumindest, sodass ich das hier auch ein bisschen weiterführen kann.

Nichtsdestotrotz bleibt eigentlich keine Zeit richtig zu verschnaufen: in NTM ist ein 20-30 Seiten umfassender Aufsatz über VoIP fällig, in DBS steht auch das aktuelle Arbeitsblatt und der 4. Meilenstein an, SWA will auch seine Aufgabe zu XPath und die Projektspezifikation erledigt sehen und noch 1000 weitere nicht-Uni-bezogene, aber zeitverschlingende Dinge (wie der Entwurf eines Weihnatsfeierplakates für meine Studentenorganisaiton) wollen erledigt werden.
Mal sehen, was ich alles hinbekommen werde ;-).

Um mich (endlich) auch einmal für seine Rolle als unerschöpfliche Wissensquelle zu bedanken, habe ich der Wikimedia Foundation gespendet (und hey, der Euro ist noch immer stärker als der Dollar! 30 US$ = 23,29 € ;-):
Wikipedia Affiliate Button

Heute noch zu erledgine: XPath-Kapitel im Buch wälzen, einen Haufen Artikel zu VoIP lesen und das Plakat machen. Wenn ich all das schaffe, geb' ich mir selbst ein Bier aus ;-).

11/24/2008

A3: XML & DTD

XML in a Nutshell liegt jetzt schon seit geraumer Zeit auf meinem Schreibtisch und ist auch schon ab und an durchgeblättert und -gelesen worden. Das benötigte Wissen für diese Aufgabe, hatte ich aber noch nicht ganz beisammen. Also hieß es zunächst einmal Kapitel 3 "Dokumenttyp-Definitonen" pauken. Da ich allgemein finde, dass dieses Buch sehr brauchbar geschrieben ist, wurde ich auch diesmal nicht enttäuscht und wurde in die Tiefen der DTDs eingeführt.
Nach einem kurzen Anlesen im Lesesaal des AKH, schmökerte ich einen guten Teil zu Hause in Krems und dann einen weiteren bei der Zugfahrt heute von Krems nach Wien weg. Mit dem geeigneten Wissen ausgestattet (und ein paar gedanklichen Verränkungen, weil IMHO

<!ELEMENT name (nachname
| (vorname, ((zweiter_vorname+, nachname) | (nachname?) )
)>

für "name kann nur einen Vornamen, nur eine Nachnamen, oder einen Vornamen und einen Nachnamen, oder beides mit beliebig vielen (aber optionalem) zweitem Vornamen" ein bisschen Gehirnwindungsakrobatik bedeutet) machte ich mich daran die DTD zu schreiben.

Folgende Fragen sind mir aber übrige geblieben:

  • Was ist der Sinn und Zweck von Attributtypen?
    Gut mit NMTOKEN kann man verhindern, dass Whitespace in einem Attribut vorkommt und man kann endlich auch mit einer Ziffer beginnen, ID und IDREF erlauben es n:m-Beziehungen (*hüstel* ;-)) abzubilden (wobei mir wiederum nicht ganz aufgeht, warum ID ein XML-Name und kein Namenstoken ist, was ja nur heißt, dass Attribute mit Buchstaben, _ oder : beginnen müssen, was für IDs, die ja meistens Nummern sind, nicht so gut passt). Sogar den Typ ENTITY versteh ich ja irgendwo noch, doch bei NOTATION setzt es total aus. Oder ist einfach die Erklärung im Buch schlecht? Hmmmm ...

  • Geht das nur mir so, oder schreit förmlich jede Faser eines (möchtegern) Informatikers beim schreiben von DTDs nach XML-Schema, RelaxNG, Schematron und Co.? Ich hab' ja irgendwo einmal gehört, dass DTDs heutzutage nur mehr dazu "missbraucht" werden Entitäten zu deklariere ... Warum kann ich mir das bloß sehr gut vorstellen?

  • Sind XLink, XPointer und XInclude nicht schon wieder obsolet, da sie niemand verwendet? (falls ich falsch liege, bitte ich um Hinweise, wo sie Anwendung finden. Und ja, ich weiß dass FF [und diverse andere] XLink simple links unterstützen, aber wer setzt das ganze Ding um? Oder ist das wieder einmal so ein Konsortiumsding, wie ICCCM, mit 3 (!?) Zwischenablagen, die kein Mensch braucht?)



Das Debuggen war ein Kinderspiel! 5 Minuten und alle Bugs gefunden. So macht das Arbeiten mit dem Computer Freude :-D.

11/19/2008

What are you reading?

Once in a while I feel like reading Planet Gnome, which is always good to get an idea on what these guys are doing all the time.

While doing so once more today, I found Stormy Peter's post What are you reading? (A book meme) which states the following:
Your turn:

  1. Grab the nearest book.

  2. Open it to page 56.

  3. Find the fifth sentence.

  4. Post the text of the sentence on your blog along with these instructions.

  5. Don’t dig for your favorite book, the cool book, or the intellectual one: pick the CLOSEST.



So here's my closest book:
"Wilson (1972) provides a (now rather dated) overview of animal communication systems, and Hövelmann (1989) provides a good counterbalance for those easily swayed by the propaganda that is broadcast in this area of study."

from Language Matters by Laurie Bauer, Jamet Holmes, and Paul Warren.

The book's a introduction to linguistics. In this chapter, they talk about the origin and development of languages and the numerous (often almost ridiculous) theories surrounding it. One of them is called "bow wow" theory which states that our language developed from humans imitating animal sounds (=onomatopoeia).
The sentence is in the "Reading an References" section, hence it's unusual appearance.

(Some hints for the German-speaking reader: counterbalance - Gegengewicht, to be swayed by sth. - sich von etw. beeinflussen lassen, broadcast - hinaussenden; hier:herumerzählen)

11/14/2008

PHP-Skripten leicht gemacht

Nach kurzem Herumgefrickel auf dem almighty mit nano über SSH, bin ich auf Notepad++ und WinSCP umgestiegen. Ersterer bietet Syntaxhighlighting, Skripts und noch so vieles mehr, von dem ich gar nichts weiß, was aber sicher sehr nützlich ist.
Nach einiger Zeit ging mir der ewige Editieren-Hochladen-Reload-Kreislauf ziemlich auf die Nerven. Eine kurze Suche nach automatischen Synchronisationsmethoden genügte aber um Keep Remote Directory up to Date zu finden.



Einfach das lokale und das entfernte Verzeichnis angeben und zurücklehnen und genießen. WinSCP überwacht das angegebene Verzeichnis auf Änderungen und lädt die geänderten Dateien hoch, sobald sie Unterschiede aufweisen. Jetzt braucht man also sein lokales PHP-Skript nur mehr zu speichern und im Browser neu zu laden.
Danke, für solch ein großartiges Feature!

11/12/2008

P3: Erster Anlauf

Wir haben uns heute zusammengefunden, um zunächst einmal die Anmerkungen zu P2 zu besprechen und einzuarbeiten. Danach ging's an P3, wobei wir zunächst nur einmal ganz grob waren und die abstraktesten drei Layer identifizierten.
Ob das so gut und richtig war, wird sich noch zeigen.

Morgen geht's an PHP und die CD-Liste!

11/03/2008

Ubunt 8.10

Bei Erscheinen von Ubuntu 8.04 im April diesen Jahres, habe ich den Laptop meiner Mutter (ein schon etwas in die Tage gekommener Toshiba MX40) auf dieses umgestellt. Der Hauptgrund war vor allem der, dass das darauf installierte Windows xp SP2 trotz Neuinstallation (von einem Image, das alles auf NTFS formatierte, also kein Dual-Boot möglich) mit beängstigender Regelmäßigkeit das Einloggen mit einem BSOD verweigerte. Natürlich spielte auch die Verspieltheit, das Ausprobieren wollen und das "Linux ist doch zu was gebrauchen" eine nicht unerhebliche Rolle.

Gesagt getan, schob ich mit KNOPPIX alle wichtigen Dateien auf eine externe Festplatte, installierte 8.04 und konfigurierte mich (im Nachhinein Netto sicher 2 Tage lang) am X-Server blöd. Alles lief so einigermaßen (wenn man davon absieht, dass der Laptop immer den Netzstecker brauchte und Compiz, trotz Treiberunterstützung nie lief).

Ich als semi-geek (ja das gibt's auch ;-) verfolgte gespannt die Kernel-Entwicklung mit und war besonders über Adam Jacksons One Second X sehr erfreut.

Am Samstag (nach einer sehr amüsanten Halloween-Party) endlich in Krems heimgekommen geschwind auf 8.10 aktualisiert (was ca. 3h dauerte :o).
Am nächsten Morgen wurde ich so denn auch schon bald mit unsanften Worten aus den Federn gerissen. "Der Laptop spinnt! Was hastn schon wieder g'macht?!", tönte es links und rechts. Schuld war natürlich wieder einmal mein Liebling: der X.org X-Server. Mittlerweile als "konfigurationslos" angepriesen (xorg.conf ist deprecated!), vermutete ich schon, dass der Treiber Probleme verursachte (zumal das Anmelden zwar funktionierte, er aber nach 5 Sec. einfrierte). Geschätzte 5 Stunden verbrachte ich damit ein klein bisschen was zu ändern, zu hoffen um dann doch Elefanten heben zu müssen.

Erst als ich die Grafikkarte (Mobility Radeon 9600 a.k.a RV350) in den Ubuntu-Bug-Tracker eingab, stieß ich auf ein Bug-Report, der mich dann zu dem quirk brachte.

Wär hätte gedacht, dass ein einfaches
"AGPMode" "1"
solche Wunder bewirken kann?

Notizen an mich: NEVER CHANGE A RUNNING SYSTEM! TEST BEFORE USE! und BENUTZ DIE VERDAMMTE SUCHE!!!!

Anforderungen und Use-Case-Diagramm

Der nächste Schritt hin zu unserem Adressbuch ist die Erstellung der Anforderungen und das Zeichnen eines Use-Case-Diagramms.
Zugegebener weise war ich diesmal der, der weniger beigetragen hat. Aufgrund meines Bruders bin ich eine Stunde zu spät zu unserem Treffen in Beckys Wohnung gekommen. Da waren die funktionalen und nicht funktionalen Anforderungen schon erhoben. :-(
Nichtsdestotrotz konnte ich noch beim Erstellen des Use-Case-Diagramms helfen.

Beim Auffrischen unserer Kenntnisse und besonders bei der Unterscheidung zwischen include/uses und extends, half uns UML Use Case Diagrams: Tips and FAQ.

Ein (meiner Meinung nach sehr gutes) Buch zum Thema Anforderungen ist Exploring Requirements: Quality Before Design, welches trotz seines Alters (1989) noch gut zu gebrauchen ist (außerdem liegt es auch in der Bibliothek ;-).
Bei UML könnte ich unkreativ sein und einfach auch UML@Work angeben. Da mir dieses Buch aber leider viel zu wieder ist (mmn. schlechter Aufbau), verweise ich lieber auf Learning UML 2.0, ohne es zu kennen :D (werde aber bald stolzer Besitzer sein).

Weiter geht's mit PHP (und PHP 5. Grundlagen und Profiwissen und PHP Ge-Packt).

10/31/2008

Zebrastreifen: Ja oder Nein?


Stripes by-nc-sa von swisscan

Zebra Striping gilt unter Grafikdesignern seit langem als bewährtes Mittel Tabellen leichter lesbarer und übersichtlicher zu gestalten. Angefangen bei der Vokabel-Liste des Englischlehrbuchs der Unterstufe You&Me bis hin zur Titelliste in iTunes reichen seine Anwendungen. Dabei wird einmal nur zwischen Schwarz und Weiß alterniert, ein anderes viele verschiedene Farben verwendet und manchmal auch noch zusätzlich die Spalten eingefärbt.
Doch wie sinnvoll ist diese Technik eigentlich?

In den beiden Artikeln Zebra Striping: Does it Really Help? und Zebra Striping: More Data for the Case geht die Formulardesignerin Jessica Enders dieser Frage nach. Nicht ohne überraschendes Ergebnis ...

Viel Spass beim Lesen!

10/28/2008

Ein Beginn

Zunächst einmal ein paar Worte dazu, wie wir organisiert sind: Gleich nach der ersten Übungseinheit, habe ich uns einen Arbeitsbereich bei assembla.com eingerichtet. Ich tat dies in der Hoffnung uns einen "Arbeitsraum" zu schaffen, der uns bei der Umsetzung unseres SWA-Projektes so gut wie möglich unterstützen soll. Diese Aufgabe, hat es bis jetzt ganz gut gelöst; Dinge, wie das Ticketing-System oder Sourceverwaltung mit git machen es zusätzlich noch interessant.

Um meine Partnern (Becky und Kuki) den Einstieg zu erleichtern, hatte ich in ein, zwei Stunden die Wichtigsten Informationen zum ersten Meilenstein eingepflegt und sogar schon eine Projektidee beigesteuert. Ursprünglich nahm ich an, dass meine Kollegen, es mir gleich tun würden und ebenfalls die eine oder andere Idee einstellen würden. Leider hat das dann doch nicht so funktioniert.
Mit Becky machte ich vor der Präsentation noch den Feinschliff (sie erstellte zusätzlich noch die Präsentation) und wir waren bereit für die Abgabe.
Diese verlief leider nicht ganz so, wie ich mir das gewünscht hätte: Der LVA-Leiter teilte die Begeisterung unseres Addressbuches leider nicht in dem Umfang, wie wir. Das enttäuschte mich zunächst etwas, sein Kommentar zur Abgabe zeigte mir aber, dass wir nicht ganz so falsch liegen.

Uns ist schon klar, dass unser Projekt nicht besonders groß ist, unser Ziel war es aber zunächst eine stabile, zu gebrauchende Grundversion zu haben, die wir dann erweitern können. Solche Dinge wie eine Suche, Integration von Google Maps, Export nach hCard, Anrufe absetzen via Skype, Mitarbeiter-Gruppen und und und sind in unseren Hinterköpfen und werden auch in die Architektur mit einfließen. Und es wird sicher kein weiterer Mash-up werden ...

Da mich der Bereich Benutzerinteraktion besonders interessiert, werde ich versuchen auch hier besonders gut zu sein.

Unsere Reise zum ersten Projekt geht weiter und ich sehe gespannt in die Zukunft.