12/03/2015

PixPart, 3D Particles

PixPart ist der vorläufige Name meiner JavaScript Engine für Partikel im dreidimensionalen Raum, die mit Pixeln in die Canvas gezeichnet werden. Etwas unglücklich erklärt und vorläufig deshalb, weil die Engine, bzw. das ganze Projekt noch sehr am Anfang steht.
Der aktuelle Stand erlaubt aber eine kleine Demo und genau die möchte ich euch nicht vorenthalten.
Per Klick (einfach auf die untere Fläche mit dem Gesicht klicken) könnt ihr zwischen verschiedenen Modellen hin und her switchen und mit „Open Controls“ gibt es noch ein paar Einstellungsmöglichkeiten um die Anzeige zu justieren.

   
Seit dem wir Zugriff auf die Pixel der Canvas haben ist das Canvas Element noch einmal ein ganzes Stück interessanter geworden. Denn, die „Pixel manipulation with canvas“ ist unglaublich schnell. In ersten Tests konnte ich 200000 Partikel über die Canvas „huschen“ lassen und hatte immer noch satte 60 FPS!
Seb Lee-Delisle hatte dazu bereits 2012 einen sehr schönen Artikel geschrieben.
Als ich vor kurzem wieder über den Artikel gestolpert bin war er meine Inspiration für die PixPart Engine. In seinem Artikel erklärt Seb auch sehr schön und vor allem auch für Anfänger verständlich, wie er die 3D Koordinaten in 2D Koordinaten umrechnet und diese dann in die Canvas zeichnet. Hier und da ist der Code aus den Beispielen nicht optimal, aber insgesamt sehr gut lesbar und verständlich. Zum Einstieg in die Thematik Partikel, Canvas und 3D also besonders lesenswert. Cheers Seb!

Für meine Engine habe ich aber die setPixel und getPixel Funktionen anders geschrieben und vor allem das „clearRect“ zum löschen der Canvas weggelassen und durch eine deutlich schnellere Lösung ersetzt. Die Rotationen habe ich mit Hilfe einer stark modifizierten Matrix4 und Vector3 Klasse aus der three.js Engine von Mr.doob realisiert. Beide Klassen zusammen sind jetzt nur noch 10KB schwer. Vor allem aber kann man mit Hilfe der Matrix Klasse viel komplexere Berechnungen durchführen als das in Sebs Beispielen der Fall ist. Lediglich die Berechnung von 3D in 2D Koordinaten hab ich nicht wirklich abgeändert. Aber die Berechnung mit FOV hat ja auch nicht der Seb erfunden. Ich glaub ich hatte diesen
Trick mit FOV schon zu Flash5 Zeiten bei Keith Peters gesehen.
Ich will jetzt aber noch gar nicht zu viele technische Details verraten, da das ganze Projekt noch ganz am Anfang steht und sich noch vieles ändern kann. 

Demnächst dann habe ich hoffentlich mehr zu berichten. Bis dahin viel Spaß mit der Demo.
Und noch ein kleiner Tipp zum Schluss. Um noch mehr Perfomance rauszukitzeln und besonders wenn ihr im Fullscreen-Modus seid, schaltet am besten unter
„Open Controls“ Multiply“ aus und Clear ImageData“ ein.

11/12/2015

CircletPreloader jQuery Plugin

CircletPreloader ist ein kleines jQuery Plugin das dafür da ist kreisförmige Ladeanimationen anzuzeigen die den Ladezustand diverser HTML DOM Elemente in Prozent abbilden.
Ziel war es mit möglichst wenig KB auszukommen, bei gleichzeitiger Flexibilität was die Möglichkeiten bei der Darstellung der Ladeanimationen angeht. Die minifizierte JavaScript-Datei ist lediglich 2,74KB schwer und kommt ohne andere und/oder externe JavaScript-Bibliotheken aus. Man kann CircletPreloader auch ohne jQuery einsetzen und ist somit komplett unabhängig. Über diverse Parameter lassen sich die Ladeanimationen in großem Umfang individualisieren.
Zur Darstellung der Ladeanimationen wird das HTML5 Canvas Element eingesetzt. Die einzelnen Elemente bestehen dabei aus Vektorgrafiken die „on-the-fly“ gezeichnet werden. Dadurch können die Ladeanimationen ohne Qualitätsverluste auf jede beliebige Größe skaliert werden.

Durch einen Klick auf die folgende Fläche könnt ihr eine Preview starten und eine kleine Auswahl an möglichen Ladeanimationen sehen.



Unterstützte Browser:Firefox 3.0+, Safari 4.0+, Chrome 7+, IE9+, Opera 9+
Bzw. alle Browser die mit dem Canvas Element umgehen können.
Oder schaut einfach auf „Can I use“ nach.

Und so geht’s/How to use:

 
Einfach die JavaScript-Datei „jquery.circletpreloader.min.js“ im head der HTML-Seite einbinden. Falls  jQuery ebenfalls mit im Einsatz ist das Plugin dann darunter einbinden.

Ohne jQuery:

 

Mit jQuery:


 
 

Für den Fall das wir CircletPreloader in einem div mit der id='myDiv' anzeigen wollen, sähe das wie folgt aus:

Ohne jQuery:
var loader  = new CircletPreloader( document.getElementById( 'myDiv' ) );
Mit jQuery:
$( '#myDiv' ).circletPreloader();

Hiermit wird CircletPreloader mit default settings erzeugt. Wollt ihr CircletPreloader individualisieren, dann müsst ihr noch ein Object mit entsprechenden Properties übergeben. Dazu aber später mehr.
Jetzt geht’s erst einmal darum CircletPreloader mit Informationen zum Ladestand z.B. von einem Bild zu versorgen. Oder anders ausgedrückt, CircletPreloader zum Leben zu erwecken. Fügt dazu den folgenden Code in den progressHandler eures Preloader Scripts ein:

Ohne jQuery (einfach auf die von euch erzeugte Variable/Instanz zugreifen):
loader.setProgress( percent );//percent value 0.00 – 1.00
Mit jQuery:
$( '#myDiv' ).circletPreloader( { progress: percent } );//percent value 0.00 – 1.00

Fertig. Mehr ist nicht nötig!

Wie gesagt, ihr könnt und solltet euren CircletPreloader natürlich anpassen. Dazu müsst ihr einfach ein Object mit diversen Properties übergeben wenn ihr die Ladeanimation erzeugt:

Ohne jQuery:
var loader  = new CircletPreloader( document.getElementById( 'myDiv', loaderProperties ) );
Mit jQuery:
$( '#myDiv' ).circletPreloader( loaderProperties );

„loaderProperties“ ist ein einfaches Object.
var loaderProperties = {};
CircletPreloader arbeitet mit zwei unterschiedlichen Methoden beim Zeichnen.
Zum einen wäre da: 

CircletPreloader.MODE_STROKE 
Mit dieser Methode erzeugt man Ladeanimationen wie diese:
 

 









Und zum anderen:
CircletPreloader.MODE_FILL
 
Mit der man Ladeanimationen wie diese hier erzeugen kann:











Für
CircletPreloader.MODE_STROKE
stehe folgende Properties zur Verfügung:
var loaderProperties = {
    mode : CircletPreloader.MODE_STROKE,
    diameterExternal : 40,/*Durchmesser*/
    clockwise : true,/*Richtung*/
    angle : 1.5,/*Start/End-Position Value 0-2*/
    colorExternal : '#000',/*Farbe außen*/
    colorCircle : '#ccc',/*Farbe innen*/
    lineWidthOuter : 9,/*Line width außen*/
    lineWidthInner : 3/*Line width innen*/
};

Und für
CircletPreloader.MODE_STROKE
stehe folgende Properties zur Verfügung:
var loaderProperties = {
    mode : CircletPreloader.MODE_FILL,
    diameterExternal : 100,/*
Durchmesser*/
    diameterCircle : 90,/*
Durchmesser*/
    diameterInternal : 80,/*
Durchmesser*/

    clockwise : true,/*Richtung*/
    angle : 1.5,/*Start/End-Position
Value 0-2*/
    colorExternal : '#000',/*Farbe außen*/
    colorCircle : '#f00',/*Farbe außen*/
    colorInternal : '#000'/*Farbe außen*/
};


Wenn ihr CircletPreloader wieder entfernen wollt, z.B. wenn der Ladevorgang beendet ist, dann steht euch die Methode "die" zur Verfügung. Diese ruft ihr wie folgt auf:

Ohne jQuery: 
loader.die();
Mit jQuery:
$( '#
myDiv' ).circletPreloader( { die: true } );

Viel Spaß mit CircletPreloader.
Die minifizierte JavaScript-Datei könnt ihr HIER herunterladen.

Download Source


11/14/2014

Rockwool Planungshelfer App

Endlich ist es soweit. Die neue ROCKWOOL Planungshelfer App ist für iOS und Android erschienen. Nach Gem Pile (ein Ein-Mann-Privatprojekt) ist das meine zweite Smartphone und Tablet App, an der ich (als Programmierer und Entwickler) mitwirken durfte. Und im Gegensatz zu Gem Pile gibt’s die Rockwool Planungshelfer App nicht nur im Google play Store für Android Devices, sondern auch für iOS im Apple App Store über iTunes. Infos zur App und die aktuelle Pressemitteilung bekommt ihr auf der offiziellen ROCKWOOL Webseite.
Umgesetzt wurde die App im Auftrag der DEUTSCHE ROCKWOOL MINERALWOLL GMBH &CO. OHG von anyMOTION GRAPHICS Agentur und Produktion für Neue Medien GmbH.

Hier noch einmal die beiden Links zum (kostenlosen) Download:
https://play.google.com/store/apps/details?id=air.de.rockwool.planungshelfer
https://itunes.apple.com/us/app/planungshelfer-rohrleitungen/id932306628?l=de&ls=1&mt=8

11/10/2014

Grunt, getting started. Part 1


Im folgenden Beitrag (Teil 1 meines Tutorials) geht es um Grunt, oder genauer gesagt, um dass Einrichten von Grunt unter Windows. Dazu gehören auch Node.js und Git.
Kurz ein paar Worte zu Grunt selbst. Grunt ist ein JavaScript Taskrunner. Einmal für ein Projekt eingerichtet, kann euch Grunt sehr viel Arbeit abnehmen. Dazu müsst ihr einfach nur ein Gruntfile anlegen und dort dann festlegen, welche Tasks Grunt für euch abarbeiten soll. Grunt bietet euch dafür eine Vielzahl an nützlichen Plugins. Unter anderem gibt es Plugins zum minifizieren von HTML, CSS und JS Dateien, zum kompremieren von Bildern, zum kompilieren von SASS/LESS zu CSS oder CoffeeScript zu JavaScript und noch sehr viel mehr.
In dem Gruntfile legt ihr dann, wie schon gesagt, nur noch fest, welche Plugins/Tasks alle zum Einsatz kommen sollen und konfiguriert diese. Wenn ihr Grunt nun startet, werden diese Tasks in der von euch vorgegeben Reihenfolge abgearbeitet.

Ihr könnt so also ganze Arbeitsabläufe automatisieren! Das ist nicht nur super praktisch, sondern spart euch Zeit, schont eure Nerven und kann zudem auch eure Fehlerqoute verringern.

In diesem Beitrag soll es erst einmal nur um die Installation gehen. Die fand ich als Anfänger in diesem Bereich nämlich schon ziemlich tricky! Ich kann natürlich nicht garantieren, dass der hier aufgezeigte Weg der beste ist, oder bei jedem funktioniert, aber auf meinem Windows 8 Rechner läuft alles nach Wunsch.
Um Grunt nutzen zu können müsst ihr euch zunächst Node.js installieren. Geht dazu einfach auf die offizielle Webseite und klickt auf „INSTALL“. Ihr erhaltet eine Datei und führt diese aus. Folgt den Installationsanweisungen und nehmt als Verzeichnis am besten das vorgeschlagene Standardverzeichnis, dann sollten auch alle Pfade hier im Beitrag so für euch passen.
Habt ihr Node.js installiert wird es auch schon spannend. Ihr müsst nämlich eine Path-Systemvariable einrichten, wenn ihr nicht mit der Node-Konsole arbeiten wollt.
Path ist die Systemvariable, die Windows verwendet, um über die Befehlszeile, bzw. die Konsole, nach ausführbaren Dateien zu suchen. In diesem Fall die node.exe. Öffnet ihr die Windows Konsole (Windowstaste + R, cmd.exe eingeben und „OK“ klicken) ohne diesen Schritt, dann könnt ihr Befehle für Node (in diesem Fall einfach mal „npm list -g“) zwar eingeben, aber ihr werdet die folgende Fehlermeldung erhalten: „Der Befehl npm ist entweder falsch geschrieben oder konnte nicht gefunden werden.“.

Und genau deshalb brauchen wir die Path-Systemvariable. Und so geht’s (Unter Windows 8):
  • Schritt 1: Den Mauszeiger in die rechte obere Ecke des Bildschirms ziehen und auf die Lupe klicken.
  • Schritt 2: Dort im Eingabefeld „Systemsteuerung“ eingeben und anklicken.
  • Schritt 3: Im geöffneten Fenster auf „System“ klicken und dort dann links auf „Erweiterte Systemeinstellungen“.
  • Schritt 4: Im Fenster „Systemeigenschaften“ dann den Reiter „Erweitert“ auswählen und auf „Umgebungsvariablen“ klicken.
  • Schritt 5: Nun unter „Systemvariablen“ nach „Path“ suchen und auswählen, im Anschluss dann auf „Bearbeiten…“ klicken. Im Feld „Wert der Variablen“ müsst ihr nun folgendes eingeben:
    C:\Program Files\nodejs\
    Steht im Feld  „Wert der Variablen“ bereits etwas eingetragen, dann schreibt ihr ans Ende einfach ein Semikolon und danach dann C:\Program Files\nodejs\
    Existiert noch gar keine Path-Systemvariable, dann klickt ihr einfach auf „Neu…“, tragt bei „Name der Variablen“ das Wort „Path“ ein und unten dann wie schon beschrieben C:\Program Files\nodejs\
     
Hier gibt es zum Thema Systemvariable auch für andere Windows Versionen eine ausführliche Schritt-für-Schritt-Anleitung.

Öffnet nun erneut die Konsole und gebt zum Testen noch einmal npm list -g ein. Wenn ihr alles richtig gemacht habt, dann sollte nun keine Fehlermeldung mehr erscheinen, sondern eine ziemlich lange Liste und ihr könnt nun die nächsten Schritte der Grunt Installation angehen.
Falls nicht eh schon vorhanden, müsst ihr euch nun auch noch Git installieren. Geht dazu einfach auf die Webseite und zieht euch das neueste Release. Nun öffnet ihr die exe und folgt wieder den Installationsanweisungen. Auch hier würde ich das vorgeschlagene Verzeichnis wählen. Im Fenster „Select Components“ müsst ihr darauf achten, dass „Git Bash Here“ und „Git GUI Here“ ausgewählt sind. Beendet nun die Installation. Jetzt sollte auf eurem Desktop ein neues Icon erscheinen mit dem Namen „Git Bash“.
Für andere Programme (z.B. PhpStorm von JetBrains) macht es Sinn Git, genauso wie zuvor auch schon Node.js, global verfügbar zu machen. Dazu müsst ihr wieder die Path-Systemvariable bearbeiten. Dieses mal unterscheidet sich lediglich Schritt 5 zur Prozedur von vorhin. Ihr fügt nun folgendes zur Path-Systemvariable hinzu:
;C:\Program Files (x86)\Git\bin;C:\Program Files (x86)\Git\cmd
Das war es auch schon. Hier gibt es dazu noch eine schöne Kurzanleitung.

Jetzt können wir den folgenden Prozess entweder über die Windows Konsole (Wenn ihr die Path-Systemvariable angepasst habt), oder natürlich auch die Git Bash Konsole erledigen. Entscheidet euch nun für eine Konsole und startet diese. Schaut jetzt noch mal nach, ob euer npm (Node Packaged Modules) auch auf dem neuesten Stand ist. Gebt dazu einfach folgendes ein in die Konsole:
npm update -g npm
Nun müsst ihr nur noch:
npm install -g grunt-cli
eingeben und die Installation vom
Grunt command line interface ist auch schon abgeschlossen.
Für weitere Infos zu dem Thema schaut am besten auch mal hier vorbei. Wenn ihr euch fragt, wieso -g (global) und nicht lokal, dann bitte hier mal reinschauen.

Jetzt habt ihr Grunt, Node.js und Git erfolgreich (global) auf eurem Windows System installiert!

In Teil 2 wird es darum gehen, Grunt lokal bei einem Projekt zu installieren und anzuwenden. Wir werden ein „Hallo Welt“ Projekt anlegen, ein „Gruntfile.js“ erstellen, Tasks (grunt-browser-sync, grunt-contrib-watch und grunt-sass) definieren und die nötigen Plugins mit npm installieren. Dazu schauen wir uns die „package.json“ näher an, bzw. werden eine „package.json“ erstellen.
Beispielhaft werden wir als Editor
PhpStorm von JetBrains einsetzen, wobei natürlich jeder selbst entscheiden kann welchen Editor er einsetzen möchte. Wenn ihr dem Link folgt, könnt ihr eine 30 Tage Testversion laden. 

Update: Bei der Installationsanweisung für Grunt gab es noch einen kleinen, aber entscheidenen Fehler! Dank dem Kommentar von Johannes ist mir der Fehler aufgefallen und gefixt.
Dieses Tutorial habe ich (auch als Folge des Fehlers) nun in zwei Bereiche gegliedert. Teil 1 dieses Tutorials befasst sich ausschließlich mit der globalen Installation von Grunt, Node.js und Git und in Teil 2 wird Grunt dann projektbezogen
lokal installiert und angewandt werden.

Hier noch ergänzend zur Thematik
JS Taskrunner ein sehr schöner Link, der sich mit dem Thema beschäftigt und neben Grunt auch noch andere Taskrunner vorstellt. Mit Hilfe von Beispielen wird verglichen und Unterschiede aufgezeigt. Wer sich für das Thema interessiert, sollte hier mal einen Blick drauf werfen.

10/21/2014

Shumway


Total verrückt! Als ich davon gelesen habe konnte ich es kaum glauben. Aber das irrwitzige Unterfangen ist tatsächlich schon ertaunlich weit fortgeschritten.
Mit Shumway wurde ein Renderer für das SWF-Dateiformat geschrieben, der ohne Flash Player Plugin in der Lage ist, Flash Inhalte darzustellen. Das Ganze ist im Moment nur ein Experiment, aber immerhin stehen dahinter "Mozilla Research" und eine eigene Community, die sich mit der Entwicklung beschäftigt. 

Ob Shumway wirklich Sinn macht bleibt abzuwarten, aber interessant ist das Thema in jedem Fall. Hier geht´s zur offiziellen Seite und weitere Informationen gibt´s hier.