Mrz 07 2012

small steps

Tag: EntwicklungPhoscur @ 20:07

Bin über den Winter weit weniger voran gekommen, wie ich gehofft hatte – Ich mache nur kleine Schritte zur Zeit.

Meist, so wie jetzt gerade beschäftigt mich mehr die Umgebung der Entwicklung, ein Buildprozess soll verschiedene Aufgaben automatisieren:

  • Erstellung der game.js für den Client (hier werden Module nach Abhängigkeiten zusammengesucht und mit CommonJS require() bereitgestellt, Client und Server haben die selbe Codebase)
  • Verkettung von CSS Dateien (HTML5 boilerplate)
  • JHint Codecheck
  • Ausführung von Tests
  • Spezialversion „production“ (Kompression von JS und CSS Dateien)

Vor allem für den ersten Punkt habe ich eine ganze Weile gesucht, habe ja letztes mal schon browserify geschrieben, mittlerweile verwende ich webmake für die Erstellung der Client Datei. SourceURL hilft dabei in der großen Datei beim Debuggen nicht die Übersicht zu verlieren. Die „production“ Version gehe ich erstmal nicht an, webmake fehlt das Feature noch und gebraucht wird das sowieso noch nicht.

Tests habe ich leider noch viel zu wenig bis gar nicht, das ist nicht gut, aber nachträglich Tests schreiben ist mühsam und unangenehm, und in einen test-driven Prozess kann ich mich leider bisher nicht einfinden.

Diese Aufgaben werden nun gesammelt von grunt bzw. einer Abwandlung (HTML5 boilderplate) zusammengefasst, die Möglichkeit alles bei Dateiänderungen automatisch auszuführen, ist auch integriert, spinnt aber noch ein wenig auf Windows, NodeJS fs.watch() ist noch nicht platformunabhängig stabil und meist wird nur der Linux funktionale Teil unterstützt.

Ich bin mittlerweile auf github aktiv, ärgere mich aber meist eher wenn ich ein Tool nicht so nutzen kann wie ich es gerne hätte, und dann erstmal mit fremdem Code beschäftigt bin, trotzdem sehr schön wie sich dort eine Community bauen lässt, viel Infrastruktur ist bereits gegeben, für OpenSource Projekte einfach umsonst : ).

Zudem steht demnächst an meine ganze Entwicklung (inkl. des Blogs) auf Englisch umzustellen. Die Community von NodeJS ist international und ich denke das ich dort vielleicht einige fähige Leute für meine Sache gewinnen kann. UGamela selbst war ja auch schon immer international, das Spanisch, Polnisch, Französisch und Deutsch in den Foren und im Code hat aber nicht zur Entwicklung beigetragen. Ich weiß noch wie ich mühsam polnische Quelltext Kommentare übersetzt habe (o.O).

Ich spiele zur Zeit gerne StarCraft II in meiner Freizeit. Herrliches Echtzeit Strategie Spiel!


Dez 12 2011

Erste Implementierungen mit NodeJS

Tag: EntwicklungPhoscur @ 18:51

NodeJS lässt sich mittlerweile sehr einfach unter Windows installieren. Das ist ein guter Fortschritt. Ich habe auch feststellen können Aptana Studio macht was ich will, kann aber auch sein, dass ich mich einfach mittlerweile dran gewöhnt habe.

Letzte Woche habe ich mal grundsätzlich ein Markup auf gesetzt, bisher sind die Widgets (Menü, Planet, Resourcen, Gebäudeliste) aber noch statisch. Ich brauche dann auch bald einen Designer, damit ich mich nicht ewig mit dem CSS rumschlagen muss. Ich möchte auch ein Touch-Interface für Smartphones, damit man das Spiel gut unterwegs spielen kann.

Als nächstes möchte ich das Interface ein bischen dynamischer gestalten. Die Ressourcenverwaltung habe ich schonmal früher geschrieben, da waren jetzt aber noch eine Änderungen notwendig. An der Ressourcenberechnung habe ich schon lange gearbeitet (Implementierungen in PHP, MySQL und JavaScript).

Über die Gebäudeliste soll man dann als nächstes bauen können.

Ich habe mir mit der async Bibliothek einen eigenen Build Prozess gebaut, der meinen Code zusammenfasst und kompressieren kann und mich ein an die asyncrone I/O und den Callback-Stil gewöhnt. Nebenbei lerne ich an der Uni in Programmierparadigmen Haskell, die funktionale Sprache überhaupt. JavaScript mischt objektorientiert und funktional. Funktionale Programmierung hat durchaus gute Seiten, obwohl der Einstieg oder Umstieg von zB. Java schwierig sein kann. Besonders in Haskell ist Code deutlich kürzer, viele Dinge lassen sich mit einem Einzeiler erledigen. Sehr gut, dass in JavaScript Funktionen erster Klasse (first-class) sind.

Ich beobachte einige NodeJS Projekte über die Mailingliste und github, und habe begonnen einige auszuprobieren. Leider nicht immer mit Erfolg. Man merkt doch noch sehr, dass NodeJS noch sehr jung ist.

Erfolgreich habe ich live.js und underscore eingebunden. Mein Buildprozess ist in der Lage Dateien zu beobachten und live.js aktualisiert ständig HTML, CSS und JavaScript, so kann man Codeänderungen direkt im Browser beobachten.

So wirklich funktioniert browserify für mich nicht, ich werde wohl bei meinem eigenen Buildprozess bleiben und Dateien manuell hinzufügen. Ich brauche aber definitv eine Implementierung für require() im Browser, da werde ich evtl. ein wenig Code übernehmen.