Stoppt die Vorratsdatenspeicherung! Jetzt klicken & handeln!Willst du auch bei der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien:

Archiv für JavaScript

Strategien für browserunabhängiges JavaScript

Heute hat mich eine Kollegin gefragt wie Sie Ihre tollen selbst entwickelten JavaScript Funktionen am besten browserunabhängig machen kann, da Sie diese nur im Internet Explorer entwickelt hatte… Komischerweise ist aus meiner Antwort, mal wieder, ein halber Roman geworden und deshalb habe ich mich dazu entschieden den Inhalt nach dem Absenden nicht einfach ins Datennirwana abzuschieben sondern in meinem Blog zu veröffentlichen.

Hier die verschiedenen Strategien, die mir spontan eingefallen sind, um das eigene Script browserunabhängig zu machen:
  1. Browserweiche
    Eine einfache aber auch unflexible Lösung ist es eine Browserweiche einzurichten, wodurch der Besucher, je nach Browser, auf eine speziell angepasste Seite geleitet wird. Früher wurde diese Methode sehr oft angewendet, heute allerdings ist es aus Gründen der Barrierefreiheit, Suchmaschinenoptimierung und diversen anderen Gründen nicht unbedingt beliebt. Zudem verursacht die Variante einen großen Mehraufwand, da bei Updates alle browserspezifischen Seiten angepasst werden müssen.
    Fazit: Einfach einzurichten und zu testen aber schränkt Besucher ein und macht die Wartung der Seiten kompliziert.
  2. Verzweigungen nutzen
    Bei dieser Methode wird der Browsertyp in einer Variable abgespeichert, wodurch dann im weiteren Verlauf des eigenen Skripts einfache Abfragen eingebaut werden können um die für den jeweiligen Browser benötigte Funktion zu starten — z.B.: Fazit: Relativ einfach umzusetzen. Könnte nur mit der Zeit kompliziert und verwirrend werden, außerdem es kann sein das sich der Code in den browserspezifischen Bereichen unnötigerweise wiederholt.
  3. Einheitliche Grundfunktionen nutzen
    Mittlerweile haben die meisten Browserhersteller ja endlich gemerkt das es irgendwie schlauer ist Ihre JavaScript Implementierungen dem Standard anzupassen. Daher währe es prinzipiell möglich nur diese einheitlichen Funktionen zu nutzen und somit das eigene Skript browserunabhängig zu machen. Aber das wäre ja schon fast ein bisschen zu einfach, denn in der Realität gibt es doch diverse kleine Unterschiede zwischen den JavaScript Implementierungen wodurch ich bezweifele das diese Methode für größere Projekte erfolgreich sein wird.
    Fazit: Gut zu warten und Standardkonform, aber nicht alle JavaScript Implementierungen halten sich an den Standard…
  4. Grundfunktionen auslagern
    Für diese Variante sucht man sich die browserabhängigen „low-level“ Funktionen die man verwenden will zusammen und kopiert diese dann in eine eigene Datei. Der Trick dabei ist das man dieses ausgelagerte „Grundgerüst“, auf dem später alle Funktionen aufbauen, einfach für jeden Browser kopiert und dann jeweils an seine Eigenheiten anpasst. Zum Schuss muss dann nur noch das eigentliche Skript so angepasst werden das über eine Browsererkennung entschieden wird welche der ausgelagerten Bibliotheken (z.B. lib_opera.js, lib_firefox.js, etc.) geladen werden soll.
    Diese Methode kann man natürlich auch mit der vorherigen kombinieren so das man nur eine Datei erhält und jeweils in den Grundfunktionen zwischen dem Browser unterscheidet.
    Fazit: Anfänglich etwas mehr Arbeit um die Grundfunktionen zu erarbeiten und für alle Browser anzupassen, aber später sind die Projekte leichter zu warten und die Änderungen müssen nur an einer Stelle durchgeführt werden.
  5. Vorhandene Bibliotheken nutzen
    Natürlich sind die hier erwähnten Ideen hier nicht neu, daher gab es schon einige schlaue Leute die so eine Basisbibliothek, wie oben erwähnt, entwickelt haben. Da gibt es einige ziemlich gute die auch kostenlos zur Verfügung gestellt werden — also warum das Rad neu erfinden?

    Meine Favoriten sind übrigens: Prototype oder jQuery.

    Fazit: Keine eigene Arbeit notwendig aber man muss sich in die Bibliothek einlernen und eventuell kann es mit der Lizenz (z.B. bei kommerzieller Nutzung) Probleme geben.
Ich hab zwar leider keine super tolle Universallösung für euch aber ich hoffe dieser Überblick hat euch weitergeholfen ?

Codeschnipsel reloaded

Screenshot Nach dem meine Codeschnipsel Sammlung nun schon seid fast 2 Jahren online ist und schon etwas verstaubt wirkte, habe ich es nun endlich fertig gebracht dem Projekt, durch eine Komplett-Erneuerung, einen frischen Glanz zu verpassen.

Unter anderem habe ich den alten Projektnamen “Codedump” (dump = Abladeplatz, Depot, Grube, Halde, etc.) nun durch den etwas positiver klingenden Namen “Snippet-Archiv” ersetzt.

Das war natürlich nicht alles — neue Funktionalitäten gibt es auch noch:
  • Wenn man nun einen Quelltext anklickt erscheint eine Textbox wodurch man sehr schnell und sauber den Code kopieren kann. (Ich liebe Copy&Paste :-) )
  • Die Kommentarfunktion ist jetzt auch überarbeitet und kommt nun nicht mehr von dem fremden Dienst js-kit.com, der mir etwas zu unübersichtlich war, sondern liegt auf meinem Server. So kann man jetzt zu jedem Snippet einen Kommentar hinterlassen, wodurch das ganze Projekt schon etwas mehr in die Richtung Web 2.0 geht ;-)
  • Nach dem die letzte Version meines selbst gebastelten Projektes etwas unflexibel war und ich z.B. keine C# Snippets hinzufügen konnte, geht das nun ohne Probleme. Das heißt in Zukunft werden noch viele neue Snippets folgen…
Leider bin ich aber noch nicht dazu gekommen das Projekt multilingual aufzubauen (bzw. ich war zu faul dazu *g*). Aber ich denke, dass die meisten Programmierer sowieso mit Englisch klar kommen werden und auch sollten ;-)

Die vorhandenen PHP Klassen werde ich demnächst auch noch ausbauen, wobei ich allerdings noch nicht genau weiß ob ich die Kategorie nicht auf meine Hauptseite verlagern soll. Mal sehn…

So dann noch viel Spaß beim Stöbern in meinen Code-Snippets!

Metalmap - Mashup Projekt zum freien Download!

Da ich momentan und in Zukunft wohl leider keine Zeit mehr haben werde mein Metalmap Projekt fortzuführen stelle ich den Quelltext davon zur kostenlosen und freien Verfügung, bevor das Projekt noch staub ansetzt :-)

Bei dem Projekt handelt es sich um eine Weltkarte auf der die Gründungsorte (mehr oder weniger) bekannter Metal-Bands als Punkte eingezeichnet sind. Außerdem kann man über eine Liste auf der rechten Seite die Bands nach verschiedenen Kriterien sortieren (z.B. nach Herkunftsland). Da ich persönlich ehr auf lautstarke Musik stehe, habe ich mich auf Metal-Bands beschränkt, allerdings kann ja, je nach Geschmack, das Prinzip auf andere Musikstile übernommen werden.

Vielleicht will ja jemand da draußen die Idee adoptieren? — oder in einer anderen Weise weiterführen, denn ich denke die Idee hat auf jeden Fall noch Potential, da ich bis jetzt auch noch kein ähnliches Projekt gesehen habe.

Die Datenbank und den Programmcode stelle ich unter der Creative Commons Attribution 2.0 License zur Verfügung. Das bedeutet kommerzielle und private Nutzung sind erlaubt, die einzige Bedingung ist ein Hinweis auf meine Vorarbeit :-)


Online testen

Ihr könnt euch das Projekt noch eine Weile online anschauen bis ich es endgültig offline nehme.


Von der Idee zum Prototyp

Zu der Idee für dieses Projekt gelangte ich so: Eines Tages war ich mal wieder in den endlosen Weiten des Metal-Archives unterwegs und suchte nach einer Band die mir mein Kumpel empfohlen hatte. Nachdem ich ca. 10 Bands mit dem selben Namen durchgeklickt hatte (oh man  — können sich die Bands keine indivduelleren Namen überlegen *tz tz*) war ich bei dem richtigen Eintrag. Und was mich sehr freut ist, dass im Gegensatz zu dem Design und der Bedienbarkeit, die Metal-Archives Seite mit Ihren Detailinformationen zu den Bands glänzt. Denn da findet man (fast) immer welche Genre die Band abdeckt, woher Sie kommt, welche Mitglieder dabei sind und wann Sie gegründet wurde.
Und genau in diesem Moment, als ich in meinen Gedanken versunken auf den Monitor starrte, hatte ich die Idee diese interessanten Daten auf eine übersichtliche und schicke Weise zu visualisieren. Nach weiteren Überlegungen kam ich zu dem Schluss dass es interessant wäre die Gründungsorte der Bands auf einer Weltkarte zu sehen. Und da ich zu dem Zeitpunkt sowieso mal Testweise ein Projekt mit der Google Maps API umsetzen wollte kam mir das sehr gelegen :-)

Während ich dann am ersten Prototyp (JavaScript + PHP + Google Maps API) bastelte, hatte ich noch die Idee  zusätzlich eine Liste aller Bands rechts neben der Karte anzuzeigen in der man die Bands auch nach anderen Kriterien (z.B. Genre, Gründungsjahr, …) sortieren kann.

Leider habe ich es dann nicht mehr geschafft das Hinzufügen neuer Bands zu automatisieren, so dass ich um die entsprechenden Koordination (Latitude und Longitude) zu bekommen jeweils auf den Bandseiten die Adresse heraussuchen musste. Diese habe dann mit der Hilfe eines Kartendienstes wie z.B. multimap.com in die benötigten Koordinaten umgewandelt und dann mit den anderen Band-Daten in einer entsprechenden Datei abgespeichert.


Mögliche Erweiterungen…

Jetzt, während ich diesen Blog-Eintrag zusammentrage sind mir noch ein paar Ideen eingefallen die man in das Projekt integrieren könnte:

  • Es wäre bestimmt schick wenn auf der Karte Verbindungen zwischen den Bands sehen könnte (z.B. durch Linien zwischen den Punkten). Denn viele Musiker wechseln ja manchmal die Band und verbinden somit zwei Bands miteinander.

  • Auch cool wäre es wenn die Punkte je nach Genre eine andere Farbe oder ein anderes Symbol hätten. So könnte man sehen woher z.B. die meisten Melodic oder Black Metal Bands herkommen und ob es da Zusammenhänge zwischen dem Gründungsort und der Genre gibt.

  • Eine Idee die ich schon kurz nach dem Projektstart hatte war es, nach dem gleichen Prinzip eine Festival-Map zu machen auf der man sehen kann wo und wann bestimmte Festivals (wie z.B. Rock am Ring oder so) stattfinden. Denn meistens sagen einem die Orte ja nicht wirklich viel, aber auf einer Karte weiß man gleich wo ungefähr das ist.

  • Noch eine weitere Idee: Man könnte den Besucher anhand einer Zeitleiste die Bands nach Ihrem Gründungsjahr selektieren lassen. Wenn der Besucher dann den Schieberegler der Zeitleiste hin und her zieht, sieht er auf der Karte die Bands erscheinen oder verschwinden.

  • Noch mehr Daten zu jeder Band währen natürlich auch sehr schick z.B. Bandlogo, Bandbild, Bandmitglieder, …

Screenshots

Hier noch zwei Bilder für die Phantasielosen unter euch ;-)
 


Schlusswort

Oh, das ist jetzt doch ein etwas längerer Blog-Artikel geworden ;-)
Ach… — was man alles machen könnte wenn man nur genug Zeit hätte… aber ich hoffe sehr das jemand das Projekt weiterführt und daraus vielleicht etwas großes macht. So jetzt aber genug der Worte, den Download-Link findet Ihr einen Absatz weiter unten.


Download

Download - Komplettes Projekt (PHP & JavaScript)
88 KB - ZIP-Datei

Update 01.09.2007:
Das Metalmap Projekt ist endgültig offline, den Quellcode könnt Ihr allerdings weiterhin downloaden.


Test everything!

Gestern habe ich wieder ein neues Tool online gestellt.

Test everything! Mit Test everything könnt Ihr eine belibige Webseite sehr einfach mit diversen Webtools (HTML validators, SEO tools, Social services, Web proxies, …) testen ohne diese immer wieder suchen zu müssen. Im Prinzip funktioniert mein Tool wie eine große Bookmarklet-Sammlung :-)

Von der Idee zur technischen Umsetzung…

Auf die Idee zu diesem kleinen Hilfsmittel kam ich als ich mal wieder ein bestimmtes Tool gesucht habe um meine Webseite damit zu prüfen und ich es nicht gefunden habe. Nach einer kurzen Google suche habe ich nichts vergleichbares gefunden und deshalb hab ich mich dazu entschlossen “schnell mal” selber sowas zu entwickeln.

Als ich den ersten Prototypen, den ich anfangs FAMW (“Fast access to many websites”) nannte, entwickelt hatte kam mir die Idee einen schicken JavaScript Effekt (Pagination Slide Pattern) den ich letztens entdeckt hatte dafür zu verwenden.

Test everything!

Und nachdem ich mir verschiedene existierende “Slide Transition”-Skripts (Carousel Component, flickrshow.com, DHTML Shifter) angeschaut hatte hab ich mich dazu entschlossen das Beispiel von thinkvitamin.com als Vorlage zu nehmen um meinen Slide-Effekt zu erzeugen. Das Beispiel basiert auf einem nicht sehr großem und sehr übersichtlichen JavaScript das auf der Yahoo! UI Bibliothek (YUI) aufbaut.

Test everything! Nach mehreren Stunden rumprobieren und basteln hatte ich dann endlich den Quelltext so umgestellt und erweitert das er das tat was ich wollte. Danach verbrachte ich noch mehrere Stunden damit ein einfaches Design zu basteln und die Funktionalität rein zu bringen. Dabei hatte ich noch weitere Ideen wie z.B. das öffnen der ausgewählten Tools in einem Framset, automatische Bookmarklet erzeugung und die Unterstützung für Webservices die einen POST-Request erfordern ;-)

So nun aber genug geschrieben, schaut es euch doch einfach mal an und lasst mir ggf. ein Feedback zukommen :-)