in Programmierung

Stadtplan: ShareIt, TU und Fehlerfixes

Heute wurde wieder mal ein Update eingespielt. Das Update ist diesmal sogar für die normalsterblichen auf der Oberfläche erkennbar. Zu den vielen Erneuerungen und Änderungen zählen der „TU Ilmenau“- und der „Share It“-Button. Außerdem wurden einige Fehler behoben, die TU wurde als Plugin fast vollständig ausgelagert und ich hab den Stadtplan mit Google verbunden. Aber eins nach dem anderen.

TU-Plugin

Der Stadtplan war bisher darauf programmiert, dass er auch für andere Gemeinden einsetzbar wäre. Nur die Gebäude- und Raumübersicht der TU-Ilmenau war sehr Ortsspezifisch. Um auch weiterhin gewährleisten zu können, den Stadtplan mal für Bielefeld (na, wer versteht den Witz?) anzubieten, habe ich ein rudimentäres Plugin-System entwickelt, dass sicherlich von Plugin zu Plugin mitwachsen wird.

Der Vorteil liegt auf der Hand: Je nach Gemeinde können individuelle Anpassungen gemacht werden, ohne das dabei tiefer in den Hauptquellcode eingegriffen werden muss. Es gibt also einen Basis-Quellcode, den man dann auch bei allen Gemeinden aktuell halten kann und gemeindespezifische Plugins (die man aber auch aktuell halten muss ;)).

Share It

Die zweite sichtbare Neuerung ist der „Share It“-Button. Hier konnte man früher nur den aktuellen QR-Code abrufen. Zu meinem Erstaunen haben dies bereits Besucher der Seite genutzt! Jedoch wird der Hauptteil der Nutzer des Stadtplans nix mit einem QR-Code anfangen können oder wollen. Viel interessanter ist es da doch einen Perma-Link zu erzeugen, den man rumschicken kann, um Fundstücke (oder -orte) anderen Mitzuteilen. Außerdem habe ich auch (etwas halbherzig) an all die Leute gedacht, die jede Kleinigkeit in Sozialen Netzwerken herausposaunen wollen.

Der „Soziale Netzwerke“-Link spricht eine noch sehr junge Technologie im Netz an. Diese Technologie nennt sich Web Intents. Die Idee dahinter ist, dass der Webseitenbetreiber nicht mehr die Schnittstellen zu anderen Applikationen im Netz zur Verfügung stellen muss, sonders dies der Browser tut. Um bei meiner Seite zu bleiben: Ich habe nicht mehr zig Buttons unterschiedlicher Netzwerke, damit man meine Seite liken kann, sondern habe nur noch einen. Der Nutzer, der den Button drückt bekommt nur mitgeteilt: Hier ist eine URL und die will ich teilen/liken/sharen/plusen. Der Browser des individuellen Nutzers hat nun intern alle Schnittstellen zu den gewünschten Netzwerken des Nutzers installiert und dieser wählt nur noch aus, wohin die Reise gehen soll.

Der Vorteil für mich als Programmierer: Ich will und kann (rechtlich gesehen) die Javascript-Bibliotheken aller Sozialen Netzwerke nicht in meiner Seite einbauen. Außerdem muss ich bereits eine Auswahl treffen, welche Netzwerke ich mit meiner Seite verbinden will. So hat meine Seite keine direkte Verbindung zu den sozialen Netzwerken und der Nutzer kann selber entscheiden, über welches Netz es weiter gehen soll.

Das Ganze ist also tierisch interessant für paranoide Menschen, wie mich. Leider steckt die Technologie noch in den Kinderschuhen. Es gibt eine rudimentäre Implementation in Google Chrome (v19+). Außerdem habe ich ein Javascript eingebunden, dass Firefox (v3+) und Internet Explorer (v8+) unterstützt. Letztere beiden sind aber ein Witz, da es bisher nicht wirklich möglich ist, Schnittstellen zu den bekannten sozialen Netzwerken zu implementieren. Aber was nicht ist kann ja noch werden :D.

Achja, und noch ein Code-Schnipsel und eine Warnung.

[cc lang=’javascript‘]
$(‚#sociallink‘).click(function(){
var intent = new Intent(„http://webintents.org/share“, „text/uri-list“, sociallink);
window.navigator.startActivity(intent);
});
[/cc]

Dieser Code ist eine Verbindung aus WebIntents und JQuery. Es erzeugt eine Funktion, die beim Klick auf den Link (id=sociallink) ausgeführt wird. Dabei wird das WebIntent aufgerufen und ihm der Link zur aktuellen Seite übergeben, der sich in der JavaScript-Variable [cci lang=“javascript“]sociallink[/cci] versteckt. Wichtig bei diesem Link ist, dass er keine ‚&‘ enthält. Natürlich könnte man das alles mit einer URL-Codierung erschlagen, nur leider codiert zumindest das Twitter-Plugin bei Chrome die unds nicht, aber dafür die Prozentzeichen, was den gesamten Link zerstört. Ich habe daher eine Schnittstelle zur API von goo.gl eingebaut, die jeden Sozialen Link kürzt und an das Share-Modul nur die gekürzte Variante herausgibt. Und da das so gut funktionierte, gibt es auch den PermaLink nochmal als ShortLink von Google ;).

Auf die Technologie WebIntents bin ich übrigens auf Grund eines Artikels im aktuellen Screen-Guide gekommen. Die Zeitung ist für (ernsthafte) Webprojekt-Entwickler, die schon n bissl was können, sehr zu empfehlen.

Sonstiges

Neben den offensichtlichen Neuerungen ist auch wieder etwas im Hintergrund passiert. Ich habe meine JavaScript-Kenntnisse mittlerweile auf einen Stand, den ich mal vorsichtig fortgeschrittener Anfänger nennen würde. Das ist bereits eine weite Strecke für mich, zumal ich mich vor drei Jahren noch als Profi-Totalverweigerer gesehen habe.

Da meine JS-Kenntnisse nun immer wieder etwas zunehmen vermag ich es auch den Quellcode hin und wieder zu optimieren. Diesmal ist vor allem ein größerer Teil des Quellcodes durch einen neuen , viel kleineren Teil ersetzt worden. Solche Aktionen steigern auch die Wartbarkeit, da man nicht mehr die Fehler an zehn Stellen fixen muss, sondern nur noch an drei.

Beim Nutzer kommen diese Code-Optimierungen nur marginal an. Viele Seiten optimieren ihren Code ja wegen der Ladezeit. Aber da beim Stadtplan neben den paar Zeilen HTML und JS auch noch MegaByteweise die Kartenkacheln geladen werden, sollte die Performancesteigerung marginal sein. Einzig am Verhalten des Browsers auf schwachen Maschinen könnte man es merken, da er nun weniger JS-Funktionen im Speicher generieren muss. Vor einigen Jahren hätte das viel ausgemacht, aber mittlerweile optimieren die Browserriesen ihre Programme, um immer mehr, immer schneller und immer besser JavaScript auszuführen.

Und als Beruhigung für die Mitarbeiter(INNEN) der Stadtverwaltung: Ich habe diesmal die Endversion ausführlich mit dem mir zur Verfügung stehenden „Internet Explorer 8“ getestet. Und mit dem Firefox. Und dem Chrome. Nur in Lynx scheint es noch einen Bug zu geben :P.