Die Diplomarbeit als Video

Geht nicht? Doch! Mit Hilfe des Visualisierungstool Gource (Open Source) lassen sich von SCMs wie Git oder Subversion sehr ansprechende Visualisierungen erzeugen. Es gibt auch einen netten Link, wie man das unter Mac OSX ans Laufen bekommt (man braucht dafür MacPorts).

Merke: Verwende in (Hibernate) Mappings keinen Spaltennamen wie “primary”. Denn wird er nicht überschrieben – etwa über die @Column-Annotation – kann es zu gar nicht lustigen Problemen in der DB  führen, auch HSQLDB. Versteckt irgendwo in der Tracelog.

Hintergrund: Ist natürlich ein SQL-Schlüsselwort.

Diplomarbeit – Quo vadis?

Unsere betreuende Professorin der FH Köln bietet eine Weiterentwicklung/Fortführung unserer Diplomarbeit an, vor allem hinsichtlich Erweiterungen der graphischen Darstellung (andere Graphen, neue Graphen) sowie neue Arten von “Mustern”. Bei Interesse einfach bei ihr melden.

Unabhängig davon habe ich selber damit angefangen, das Projekt nach zubauen neu zubauen. Das Projekt steckt allerdings noch in den “anfänglichen Anfängen” ;) und konkurriert daher noch nicht wirklich als Fork o.ä. Voraussichtlich wird die Neuentwicklung auch zunächst nur zum Sammeln & Analysieren sein, und die Daten entsprechend exportieren können, damit es mit dem vorhandenen Programm kompatibel ist. Aber wie gesagt, noch ist da nichts zu sehen.

HTML5 & Forms

Als Ergänzung zu meinem XForms-Vortrag in der FH, hier ein paar nette Details zu den Neuerungen von HTML5/Forms. Jaja, was für eine Überaschung. Okay, nach dem Tod von XHTML2 (und demnach die Integration von XForms in XHTML) auch wieder nicht…

Ganz allgemein scheint Dive Into HTML5 aber auch empfehlenswert zu sein, wenn auch noch in Arbeit. Nett gemacht.

Eine URL mit Parameter richtig escapen – für Flash(vars)

Aufgabe: Es muss via Flashvar eine URL an ein Flash übergeben werden, welches diese dann aufrufen und die Daten nutzen soll.

Problem: Die Flashvars bestehen auf einer Aneinanderreihung von {key}={value} Parametern (verknüpft mit dem “&”). Dabei muss {value} komplett urlencodiert sein. Also die *gesamte* URL als solche. Das Flash wiederum liest den Parameter ein, decodiert(!) den entsprechenden Flashvar-Parametern und führt ihn dann aus. Dazu kommt, dass die Javascript-Funktionen escape() u.a. nicht *ausreichend genug* sind, um alle Zeichen zu kodieren. Tests mit “*” oder “+” führen schweren Fehlern, bzw. zu veränderten Parametern.

Lösung:

Das erste Geheimnis ist simpel, aber wichtig. Die Kodierung muss *zweimal* angewendet werden. Das erste Mal für jeden Parameter der eigentlichen URL (ich gehe mal davon aus, das die Parameterschlüssel immer gültig gewählt sind) und das zweite Mal für die gesamte URL. Damit erhält das Flash nach der ersten Rückumwandlung der Flashvar immer noch eine URL, wo alle Inhalte kodiert sind.

Das zweite Geheimnis ist nicht ganz so trivial, allerdings gibt es auch hierzu Lösungen. Im Internet findet sich eine nette Gegenüberstellung der Methoden escape, encodeURI und encodeURIComponent. Kurzes Fazit: escape < encodeURIComponent. Aber auch letztere wandelt einige Zeichen nicht um, die bei der Verwendung mit Flash Probleme machen. Diese Zeichen (~!*()’) und das + müssen daher noch händisch kodiert werden.

function escapeAdvanced(s) {
	var r = encodeURIComponent(s);

	var replacements = {
		'~': '%7E',
		'+': '%2B',
		'!': '%21',
		'*': '%2A',
		'(': '%28',
		')': '%29',
		"'": '%27'
	};

	for (s in replacements) {
		if (replacements.hasOwnProperty(s)) {
			r = r.replace(s, replacements[s]);
		}
	}

	return r;
}

Für schönere Lösungen bin ich jederzeit offen ;)

Update: Mit UTF8 hat das ganze allerdings Probleme; wäre ja auch zu schön gewesen.

Auszeichnung mit dem Innovationspreis (Update)

Just for note: Im Rahmen unserer Diplomarbeit sind mein Kommilitone und ich gestern Abend auf der Weihnachtsfeier der Firma Opitz Consulting mit dem “Innovationspreis für Informatik (3. Platz)” ausgezeichnet worden.

Weitere Informationen

Presse:

Ups, verrechnet.

In einer Javaanwendung habe ich vor einigen Tagen einen Faxpaus zum Besten gegeben, da muss man auch erstmal drauf kommen. Nicht eindeutig identifizierbare – sprich primitiven künstlichen Primärschlüssel – Entitäten mussten in eine Ausgabestruktur (JSON/XML) umgewandelt werden. Da nach aussen diese Entitäten aber einen – künstlichen – Schlüssel brauchen, habe ich entsprechend ein Konstrukt gebaut. In abgewandelter Form (natürlich im Original nicht mit System.out, aber es passt der Einfachheithalber genau):

System.out.print(entity1.getId() + '_' + entity2.getId());

wobei die Methode getId() jeweils ein primitives long zurückgibt. Und weil ich ja so sparsam bin, nutze ich auch nur ein Characterzeichen als Seperator. Jaja.. War eine äußerst sparsame Angelegenheit, die dazu führte, das ich heute wie verzweifelt gesucht habe, wieso denn kein String, sondern ein (hoher) numerischer Wert ausgegeben wird. Arg!

Für diejenigen, die diese Anekdote bis hierhin nicht verstanden haben: Macht nichts, scheinbar kein Programmierer :) Die Lösung: Ein Characterzeichen ist natürlich kein String, d.h. Java wird nicht automatisch daraus einen String erstellen. Dementspreched steht dort eine Formel a la “long + int + long”, und dies ist irgendwas, nur nicht das gewünschte.

Tomcat Webapp Deployment/Build

Im Zuge eins kommenden Artikels/Howto über Webapp Deployment/Build suche ich noch bestehende Lösungen, gerne auch Scripts a la Ant. Auf letzterem basiert auch meine bisherige Vorgehensweise..

Update: Inkl. dem Buildprozess.

Große ZIP-Datei verschicken – eine Google-Odyssee

Ein ehemaliger Kommilitone wollte ein paar Dinge geschickt haben; gesagt, getan: 36 20 Megabyte. Seltsamerweise wollte das Mac-like Drag ‘n’ Drop des Verzeichnisses nicht. Die Fehlermeldung, das “googlemail.com” nur 34 Megabyte zulässt, veranlasste mich daher, etwas aufzuräumen. :) Aber auch die 20 Megabyte wollten nicht, diesmal ohne weitere Erklärung. Auch ein anderer GoogleMail-Account wollte nicht.

Okay, also über das Webinterface (Nervstufe 1). Im Safari wählte ich die Datei und schrieb den kleinen Satz und drückte “Senden” — und da fiel mir auf, das die Mail gar keinen Anhang hatte? Also, nochmal “Neue Mail”, Datei wählen.. und nix. Kein Anhang.

Okay, also über den Firefox (Nervstufe 2). Die letzten Schritte wiederholt, und er lud auch brav die Datei mit Fortschrittsbalken hoch, nur um mir dann bei gefühlten 99, 999999999999999% (will heißen: die letzten 5 % haben mindestens 10x so lange wie die vorherigen 95% gebraucht) mitzuteilen, dass das Archiv wegen einer ausführbaren Datei nicht akzeptiert wird. Was? Hä? :)

Okay, prüfen wir die verf… Dateien (Nervstufe 3). Nun habe ich jede Datei geprüft, aber leider außer gefährlichen PDFs, sensiblen PNGs und potenziell terroristischen JPGs nur eine wirklich – naja, *hüstel* – nennenswerte Datei in irgendeinem Unterordner finden können: dateiname.chm. Warum auch immer. Umbenannt, wieder das Spielchen von vorne, keine Veränderung, Archiv immer noch illegal. (Nervfaktor 4).

Schlussendlich habe ich danach das Archiv.zip in Archiv.zip.itsonlyafuckingzipfile umbenannt und hochgeladen (via Mail).. und alles war wunderbar.

Emoij auf dem iPhone

Siehe: http://www.waterworld.com.hk/en/spell_number_easter_egg

(die alte Zeichenfolge funktioniert nicht mehr).