Image from xkcd.com.

Es ist Halbzeit. Die ersten sechs der insgesamt zwölf Wochen sind rum und auch wenn mich mein Betreuer beruhigt, dass ich gut vorankomme, bin ich mit dem Fortschritt nicht wirklich zufrieden.
Mein Ziel war es bis Weihnachten mit der Implementierung fertig zu sein, so dass ich im neuen Jahr gemütlich mit Schreiben anfangen kann.

Daraus wird aber wahrscheinlich nichts.
Zeitlich reicht es mir noch bis Februar mit der Arbeit fertig zu werden, allerdings hätte ich gerne ein oder zwei Wochen früher abgegeben, um in aller Ruhe in meine erste (fast) eigene Wohnung ziehen zu können.

Seit heute habe ich auch (endlich) meine Master Bewerbung abgegeben. Irgendwie hatte ich immer Pech und die gute Dame, die dafür zuständig ist, war krank, auf Dienstreise oder in einer Besprechung.
Immerhin konnte noch eine Fehlinformation seitens des Prüfungsamtes behoben werden. Die Note der Bachelor Arbeit muss nicht bis zum 1. März feststehen. Am 1. März sollte man spätestens die Arbeit abgegeben haben, wenn man im Sommersemester mit dem Master beginnen will.
Glück gehabt.

Aber zurück zur Bachelor Arbeit und dem großartigen Mozilla Framework/Projekt.

Langsam aber sicher finde ich mich in dem riesen Wirrwarr von Möglichkeiten, die Mozilla bietet zu Recht. Wenn man weiß wo man suchen muss, findet man oft Lösungen zu ähnlichen Problemen, die sich leicht adaptieren lassen. Teilweise genügt sogar das gute alte Copy & Paste.

Zunächst hatte ich beispielsweise etwas Kopfschmerzen als mir klar wurde, dass ich Refferer reparieren muss.
Heutzutage stehen im Source der Webseiten fast nur relative Pfade. Dagegen ist normalerweise nichts einzuwenden, für meine Zwecke ist dies allerdings höchst unerfreulich. Ich schreibe nur Quellcode in einen Iframe, welcher natürlich mit angaben a la “/style/style.css” nicht viel anfangen kann.
Es ist ja auch nicht so, als ob das Internet einem keine Lösungen anbietet, um relative Pfade in Absolute zu konvertieren. Es gibt sogar mehrere sehr gute Lösungen. Doch will ich wirklich 100 Zeilen Code schreiben nur um Links zu fixen?

Ich könnte ja auch einfach die drei Zeilen von Mozilla nehmen:

var ioService = Components.classes["@mozilla.org/network/io-service;1"]
	.getService(Components.interfaces.nsIIOService);
var baseURI = ioService.newURI(aBaseURI,null,null);
return ioService.newURI(baseURI.resolve(aURL),null,null).spec;

Ein Wenig musste der Code Schnipsel zwar noch an meine Bedürfnisse angepasst werden, dennoch konnte ich mir einen Haufen Arbeit ersparen. Danke Mozilla!

Mit den etwas kryptischen XPCOM-Services musste ich mich auch erst anfreunden (im obigen Beispiel z.B. der IOService).
Aber nachdem JavaScript meine globalen Variablen nicht so speichern wollte wie ich, habe ich einen Tag damit verschwendet eine eigene XPCOM-Komponente zu schreiben. Nur um festzustellen, dass es a) total übertrieben ist extra einen Service zu schreiben um Variablen zu speichern und b) dass es auch hierfür seit kurzem eine Alternative gibt.

Wer gerne mal den Stand des Plugins sehen will, dem hab ich hier ein kleines Video zusammengeschnitten.

Sieht höchst spektakulär aus. Ich weiß…
Nein. Das Plugin färbt nicht die angeklickten Links ein und öffnet zweimal die gleiche Seite in einem viel zu kleinen Browser.

Eigentlich passieren zwei Dinge:

(1) Der obere Browser wird später das gesamte Tab einnehmen. Die Textbox und der zweite Browser dienen nur zum Debuggen. Der untere Browser ist sozusagen die Sandbox. Dort werden später alle bösen Script ausgeführt, die Seite aktualisiert und, und, und.
Davon wird der Benutzer später aber (hoffentlich) nichts mehr mitbekommen.

(2) Das Einfärben der Links ist mein Versuch XPath zu testen.
Sobald man auf einen Link klickt, wird eine XPathExpression erstellt, welche das angeklickte Element eindeutig referenziert. Danach wird mit XPath das Element gesucht und sollte der Programmierer kein Unfug fabriziert haben, wird der Link, der geklickt wurde, rot.

Totaler Quatsch?

Ja, ein bisschen schon. Jedoch musste ich mich langsam an XPatch herantasten. Ich habe noch nie damit gearbeitet und wollte es auch tunlichst vermeiden. Allerdings ist es einfach eine richtig schicke Lösung. Vielleicht sogar die aller Schickste. (btw: …neue Rechtschreibung…juhu!) Schneller als das abgehen des DOMs ist es ohnehin.

Morgen soll die gleiche Funktion dann eine wichtige Aufgabe übernehmen. Mit Hilfe dieser Funktionalität soll in der Sandbox das Klicken von Elementen simmuliert werden. Der User klickt weiterhin im sicheren Browser. Der Klickt wirdj edoch nicht in diesem, sondern in der Sandbox ausgeführt. Das angefragte Dokument wird dann nachgeladen.

So, das war es erst mal. Ich hoffe, dass ich über die Feiertage noch ein paar Posts hinbekomme, die nichts mit der Bachelor Arbeit zu tun haben :)

Cheers,
Sebastian

Share and Enjoy:

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • Technorati
  • Print this article!
  • E-mail this story to a friend!
, , , ,
Trackback

2 comments untill now

  1. Was steht denn in deiner Bachelorthesis später tatsächlich drin? Eine Dokumentation dessen, wie du was und warum programmiert hast?
    Ich empfehle dir, jetzt mit dem Schreiben zu beginnen. Nicht weil es zeitlich sonst zu eng wird, sondern weil es viel leichter fällt, wenn man nebenher Ideen sammelt und dokumentiert und später gut nachvollziehen kann, wann wie was zustande gekommen ist. Das Schreiben sollte einen ähnlich kreativen Prozess darstellen wie das Programmieren. Ich hab auch so angefangen, dass ich am Anfang 10 Seiten hatte und da hab ich alle möglichen Spinnereien reingeschrieben, die mir während meiner Arbeit kamen. Später konnte ich drauf aufbauen, habe Sachen erweitert/ergänzt und andere rausgeschmissen. Das hat bei mir gut funktioniert.

  2. In meine Bachelorarbeit kommt praktisch eine Lösung des Problems mit allen möglichen gescheiterten Ansätzen. Die Implementation is praktisch nur ein Proof of Concept und entsteht als Nebenprodukt. (darauf wird aber auch Wert gelegt, da ne Firma das Plugin gerne benutzen würde)

    Was das Schreiben angeht, habe ich mir vorgenommen diese Woche langsam anzufangen. Ich habe ja mehr oder wenider meine Ansätze dokumentiert von daher passt das schon irgendwie :)