Tag: javascript

201419Nov

THREE.BasicThirdPersonGame: Ein WebGL-Game-Starterkit

Für die englische Version meiner Website habe ich ein kleines WebGL-Spiel entwickelt, bei dem es sich um einfaches Jump 'n' Run-Prinzip im dreidimensionalen Raum handelt. Dabei kommen die Bibliotheken THREE.js (3D-Engine) und Cannon.js (Physik-Engine) zum Einsatz. Während der Entwicklung des Spiels ist die Idee zu einem kleinen Framework gekommen, das jetzt unter dem Namen THREE.BasicThirdPersonGame als Open Source-Projekt bereitsteht.

THREE.BasicThirdPersonGame - Game Starter Kit in THREE.js + Cannon.js

Dabei handelt es sich also um eine Basis für mögliche 3D-WebGL-Browserspiele, bei denen der Spieler aus der Perspektive der dritten Person verfolgt wird. Während THREE.js die Darstellung übernimmt, sind durch Cannon.js physikalisch korrekte Berechnungen möglich, was sich unter Anderem durch die Verwendung von Starrkörpern (Rigid bodies) auszeichnet. Eine virtuelle Spielwelt kann dank Rigid bodies mit Eigenschaften wie Gravitation, Reibung und Federung versehen werden.

Weiterlesen...
201418Nov

Karma HTMLfile Reporter: Unit Test-Ergebnisse als HTML

Mit Karma steht seit geraumer Zeit ein komfortables Node.js-Modul zur Verfügung, mit dem sich automatisiert JavaScript-Unit Tests ausführen lassen. Dabei kann auf bekannte Test-Bibliotheken wie Jasmine, Mocha oder QUnit zurückgegriffen werden. Bisher hatte ich Karma in erster Linie bei AngularJS-Projekten im Einsatz und hier leistet es ganze Arbeit. Lediglich die Ausgabe der Unit Test-Ergebnisse in der Konsole störten etwas, weshalb ich ein Karma-Reporter-Plugin geschrieben habe, mit dem sich die Ergebnisse übersichtlich auf einer HTML-Seite ausgeben lassen.

Karma HTMLfile Reporter - Unit Test-Ergebnisse als HTML

Entstanden ist schließlich der Karma HTMLfile Reporter, der mittlerweile schon ein Jahr bei GitHub bereitsteht. Dennoch könnte es für einige Entwickler interessant sein, um sich einen besseren Überblick über die ausgeführten Unit Tests zu verschaffen.

Weiterlesen...
201417Nov

CustomScrollbar: Eigene Scrollbars auf Websites nutzen

Das Thema ist zwar nicht gänzlich neu, aber aus gegebenem Anlass war es an der Zeit, eine eigene Entwicklung anzufertigen: Die Rede ist von individuellen Scrollbars auf Websites, die per CSS angepasst werden können. Bis heute gibt es keine native Möglichkeit, das Aussehen der Scrollbalken in Webbrowsern anzupassen. Zum einen sind die Scroll-Elemente in Browsern unterschiedlich implementiert (Chrome etwa kommt mit einer eigenen Lösung) und zum Anderen sind die Bedienelemente vom Betriebssystem abhängig. Natürlich gibt es bereits etliche JavaScript- oder jQuery-Lösungen für eigene Scrollbars, doch diese fallen sehr unterschiedlich aus. Ich habe daher ein kleines Skript entwickelt, das auf das eigentliche Verhalten der Browser-Scollbars zurückgreift und keine zusätzlichen Berechnungen benötigt.

CustomScrollbar - Eigene Scrollbars auf Websites nutzen

Dementsprechend bleibt das jeweilige Verhalten des Browser-Scrollings, was das Beschleunigen und Abbremsen des Scrollbalkens beinhaltet. Es wird also lediglich das native Scollbar-Element ausgeblendet und ein eigener div-Container wird darüber gelegt. Enstanden ist daraus schließlich CustomScrollbar, eine kompakte JavaScript-Lösung für die genannte Problematik.

Weiterlesen...
201405Nov

Angular 2.0: Ausblick auf die Zukunft des Frameworks

Wer ab und zu auf der offiziellen AngularJS-Website vorbeischaut, wird eventuell auch das Video "Angular 2.0 Core by Igor Minar & Tobias Bosch at ng-europe 2014" gesehen haben. Die kommende Version 2.0, die frühestens Ende 2015 erwartet wird, zeichnet sich durch eine komplette Rundumerneuerung aus: An der Template-Engine hat sich Einiges getan, Web Components werden unterstützt und der neue Core basiert schließlich auf ES6 — genauer gesagt basiert er auf AtScript, einem TypeScript-Pendant von Google. Die Keynote zu AtScript findet sich bei YouTube. Natürlich wird AngularJS 2.0 auch nach ES5 kompilieren, um jetzige Browser zu unterstützen.

AngularJS - Superheroic JavaScript MVW Framework

Auch der Einsatz des jqLite-Wrappers wird optional, da Angular 2.0 auf neue Browser-Technologien ausgelegt sein wird. Diese beinhalten moderne DOM-Methoden, Web Components, Shadow DOM, Object.observe(), ES6 und ES7. Das sind die Funktionalitäten, die Angular bereits jetzt größtenteils abgedeckt und simuliert. Mit Object.observe() etwa werden Zwei-Wege-Data-Bindings nativ möglich sein und viele weitere Bereiche werden Angular in seiner jetzigen 1.x-Form ablösen. Die Community ist hier derzeit gespalten, da sich eine Migration von 1.x auf 2.x sehr komplex gestalten wird. An die Anpassungen, die Angular-Frameworks wie Ionic vornehmen müssen, ist hier noch garnicht zu denken.
Es gibt natürlich kritische Stimmen, die die negativen Seiten des MVW-Frameworks beleuchten und auch widerlegen. Doch viele der Punkte werden in Angular 2.0 nicht mehr relevant sein, da es beispielweise kein $scope mehr geben wird. Entgegen einiger Meinungen hat die Erfahrung gezeigt, dass sich AngularJS hervorragend für größere Projekte, mobile WebApps (PhoneGap/Cordova) oder gar Desktop-Anwendungen eignet und durch eventuell notwendige Optimierungen eine solide Arbeitsweise an den Tag legt.

201429Okt

jQuery 3.0: Die nächsten Generationen des Frameworks

Unter dem Titel "jQuery 3.0: The Next Generations" wurde heute ein Blog-Eintrag von den jQuery-Entwicklern veröffentlicht, in dem eine Art Roadmap für die künftigen Versionen der Bibliothek genannt wird. Es geht dabei vor allem um die Unterstützung älterer Browser wie Internet Explorer 8, Opera 12 und Safari 5. Bisher gibt es dazu jQuery in den Varianten 1.x, wohingegen 2.x auf moderne Webbrowser ausgelegt. Die kommenden Versionen werden unter der Versionsnummer 3 geführt werden und Version 1.x wird zu "jQuery Compat 3.0", während jQuery 3.0 den Nachfolger der aktuellen Version 2.1.1 repräsentieren wird.

jQuery 3.0: The Next Generations

Nützlich ist auch die Information, dass HTML-basierte Android- und iOS-Anwendungen (also auf Basis von beispielsweise Adobe PhoneGap und Apache Cordova) mit Version 3.0.0 fahren können, da hier die Webbrowser bzw. die Browser-Engines der WebViews entsprechende Funktionalitäten aufweisen. Die kommenden 3.0-Packages wird es wie gehabt bei npm und Bower sowie auf den jQuery- und Google-CDNs geben. Entsprechend werden die Pakete dann "jquery-compat-3.0.0.js" oder "jquery-3.0.0.js" benannt sein.

201426Okt

Flux: Unidirektionaler Datenfluss mit AngularJS

Facebook macht mit seiner Flux-Architektur schon seit einiger Zeit Gebrauch von dem Prinzip des unidirektionalen Datenflusses. Grundsätzlich muss das Flux-Konzept nicht unbedingt mit Facebooks React-Framework umgesetzt werden, denn es handelt sich nur um eine Alternative zum klassischen MVC-Ansatz, die auf moderne Web-Applikationen ausgelegt ist. Bei Flux findet sich die eigentliche Business-Logik in den Stores, die die Daten aus den Views durch Dispatcher erhalten. Dieses Konstrukt lässt sich auch einfach mit AngularJS umsetzen – ein Beispiel dafür liefert dieser Beitrag, der die verschiedenen Bereiche beleuchtet.

AngularJS - Superheroic JavaScript MVW Framework

In dem Artikel greift der Entwickler Victor Savkin zudem auf ES6-Elemente wie Arrow Functions oder class zurück, um die entsprechenden Funktionalitäten umzusetzen. Auch der EventEmitter, der als Message-Bus-System fungiert, wird in dem Beitrag selbst geschrieben. Hierfür könnte aber auch auf $scope.emit zurückgegriffen werden, da AngularJS bereits von Haus aus mit einem soliden PubSub-System ausgestattet ist.
Der Beitrag dürfte dennoch interessant für Webentwickler sein, die den Flux-Ansatz einmal ohne React und JSX ausprobieren wollen. Zudem gibt der Autor Hinweise auf eine mögliche Komplexität, die sich durch Flux in einer größeren Anwendung ergeben kann.

201421Okt

Koa: Node.js-Framework für WebApps auf ES6-Basis

Wer mit Node.js unterwegs ist und eigene Web-Anwendungen oder APIs bauen möchte, wird an Express.js oder zumindest Connect nicht vorbeikommen. Die Frameworks bieten alles, was für einfache und auch komplexe Server-Anwendungen notwendig ist. Das Team hinter Express.js hat nun ein weiteres Node.js-Framework namens Koa veröffentlicht. Das Interessante daran: Es kommt fast ohne Callbacks aus und basiert auf ECMAScript 6, was mit der --harmony-Option aktiviert werden kann.

Koa - next generation web framework for node.js

In einem ersten Tutorial geben die Koa-Entwickler Einblicke in die wichtigen Konzepte von ES6, auf denen Koa aufbaut. Dazu zählen Generator-Funktion, for-of-Schleifen und auch Thunks. Die Grundidee hinter diesen Techniken besteht darin, die Ausführung des Codes schrittweise und dennoch asynchron ablaufen zulassen. Zudem können über Thunks Callback-Rückgabewerte nach außen gereicht werden, wodurch wiederum gekapselte Funktionen möglich werden, die einem Teilbereich zugeordnet sind. Man darf also gespannt sein, denn schon jetzt versprechen Thunks einen Weg aus der Node.js-Callback Hell.

UPDATE
Mittlerweile wurde auch Teil 2 des Tutorials veröffentlicht.

201418Okt

Node.js: Desktop-File-Player auf Node-Webkit-Basis

Mit dem Node-Webkit-Projekt lassen sich ähnlich wie mit Mozillas XULRunner Desktop-Anwendungen für Windows, Mac OS X und Linux erstellen und dabei mit HTML, CSS und JavaScript entwickeln. Das Node-Webkit erlaubt die Ausführung von Node.js-Skripten, wodurch schnell und einfach funktionsfähige Desktop-Apps erzeugt werden können. Mit Gravit.io steht beispielsweise ein erster Vektor-Editor zur Verfügung und mit dem Node-Webkit File Player gibt es nun ein weiteres interessantes Projekt, mit dem diverse Dateitypen wie etwa TXT, LOG, JSON, MD, MP3, MP4, PNG oder JPEG "abgespielt" werden können.

Node-Webkit File Player - A File player for your desktop

Das Projekt dürfte eine gute Inspirationsquelle für eigene Desktop-Anwendungen sein. Es basiert neben Webkit auf den bewährten Frameworks Express und AngularJS. Das Scaffolding übernimmt der Generator slush-wean und alle weiteren Infos finden sich in dem Blog-Beitrag. Der Entwickler hat noch einen weiteren Beitrag verfasst, in dem es allgemein um erste Apps mit Node-Webkit geht.