Hier mal 2 goldene Regeln für das erfolgreiche Entwickeln mit JavaScript:
- Test driven development
- Schreiben von Quellcode-Dokumentation JSDoc

Hier mal 2 goldene Regeln für das erfolgreiche Entwickeln mit JavaScript:
CSS bietet Style-Animationen an. Dabei wird der Übergang von einem Style zu einem anderen Style animiert. Die Definition dieser Animationen besteht aus 2 Komponenten:
Als nächstes zeige ich eine Beispiel-Animation anhand eines Dampfes, der aus einem Kaffeebecher kommt.
Um die Redundanz im Quellcode gering zu halten wird der CSS-Code nur für Webkit-Browser angezeigt. Den gesamten Quellcode findet man hier: CoffeeCup-CSS
Das Ergebnis besteht aus einem Hintergrundbild mit Kaffeebecher und 3 unterschiedlichen Dampfbildern. Die Dampfbilder bewegen sich zeitversetzt auf der Y-Achse von unten nach oben. Zusätzlich wird beim Start und Ende der Animation die Transparenz runtergeschraubt, damit ein FadeIn- und ein FadeOut-Effekt entsteht.
Keine Animation zu sehen? Dann probiere einen dieser Browser aus:
Den Kaffebecher (bis auf die Holz- / Kreidetafeltexturen) und den Dampf habe ich komplett in Inkscape realisiert. Der Dampf war etwas schwierig zu zeichnen, da Inkscape ein Vektorzeichentool ist und (fast) keine Pixelverarbeitung wie bei Photoshop oder GIMP unterstützt. Dabei musste ich viel mit Transparenz und Blur-Filter arbeiten. Hier steckt auch etwas Verbesserungspotenzial drin, welches man durch die Verwendung von Stockphotos vom Dampf ausnutzen kann. Die Stockfotos kriegt man zum Beispiel hier: iStockphoto
Den Sourcecode findet man hier: CoffeeCup-SVG
Die Struktur ist ziemlich einfach. Das äußere div-Element definiert den gesamten Kontainer mit dem Hintergrund (Kaffeetasse). Die inneren div-Elemente repräsentieren den Dampf.
| HTML |
1 2 3 4 5 | |
Wenn man sich den CSS-Code anschaut, dann sieht man zuerst die Keyframes, die den Style pro Schritt angeben.
| CSS3 (Webkit) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
In diesem Block wird die Animation coffee-steam-animation den Dampf-divs zugewiesen. Danach muss man nur noch die Zeitverzögerung definieren.
| CSS3 (Webkit) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
Hier der Basisstyle:
| CSS3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Die Verwendung der CSS-Animationen ist eine tolle Sache, da die Animationen nativ, deklarativ und leicht zu definieren sind. Leider werden die CSS-Animationen im IE erst ab der Version 10 unterstützt. Für die älteren Browserversionen bleibt einem nur der Einsatz von JavaScript. Dazu kann man zum Beispiel jQuery - Animate verwenden.
it’s not a database
Source:
@jrecursive
http://webapptoolkit.com/fault-tolerance_the-cloud.html
| CoffeeScript |
1 2 | |
Hier ist ein kleines Beispiel für das “globale” Abfangen von unbehandelten Fehlern in JavaScript. Das Abfangen von Fehler in JavaScript passiert über folgenden technischen Code:
| JavaScript |
1 2 3 4 5 | |
Dies hat zufolge, dass man an vielen Stellen den “technischen” Code der Fehlerbehandlung dupliziert, um unerwartete Fehler abzufangen. Jetzt könnte man sich vorstellen ein Try-Catch über die gesamte Logik an einer Stelle zu definieren und somit alle Fehler innerhalb dieses Blocks abzufangen. Dies würde auch funktionieren wenn man nur einen Einstiegspunkt für die Logik hat.
Oft ist es aber so, dass es mehrere Einstiegspunkte für Logikaufrufe gibt. Man stellt sich vor es gibt mehrere Module, die dynamisch mit entsprechenden Modularisierung-Frameworks eingebunden werden. An dieser Stelle müsste die Fehlerbehandlung für jedes Modul einzeln an mehreren Stellen definiert werden.
Um die Doppelung und die Vermischung der Geschäftslogik mit dem technischen Code zu vermeiden, bietet sich die Verwendung eines dynamischen Stellvertreters (Proxy) an.
Das untere Beispiel soll einen möglichen Ansatz für eine zentrale Fehlerbehandlung zeigen.
In der HTML-Seite ist der Anwendungskontext beschrieben. Es gibt 2 Workflows, die eine Liste mit Tasks bekommen. Die Ausführung des zweiten Tasks führt bei beiden Workflows zu einem Fehler, da die Funktion bubu() nicht definiert ist.
| HTML&JavaScript |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | |
Und so sehen die Strukturen aus. Neben der Workflow-Klasse gibt es 2 Factories, die Workflows mit und ohne Fehlerbehandlung erstellen. Die Fehlerbehandlung selbst gibt momentan nur den Fehler auf der entsprechenden Konsole aus.
| JavaScript |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | |
Hier ist ein Beispiel für dynamische Proxies in JavaScript. Ich verwende diese, um eine Zwischenschicht über den Einstiegspunkten in die Geschäftslogik zu legen.
| JavaScript |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | |
Der Vollständigkeit halber noch die Hilfsfunktionen:
| JavaScript |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | |