dWing — die Welt ist nicht gerecht

sign in

Tagesrückblick 2010-08-11

Ich habe gestern den ganzen Tag mit node.js und MongoDB herum gespielt. Leider gibt es keine Standardbibliothek für MongoDB unter node. Es gibt einige Projekte, die leider sehr unterschiedliche APIs haben, manche basieren nur auf Node, für andere muss man selbst ein C++ Modul übersetzen.

Das aktivste Projekt scheint node-mongodb-native zu sein, auf das man zusätzlich Mongoose aufsetzen kann, was einerseits die asynchrone auf Callbacks basierte Natur der API versteckt und außerdem eine super Schnittstelle zur Modellierung bietet.

Das große Problem dabei ist, dass die Bibliothek über einen Socket mit MongoDB kommuniziert und dabei BSON (Binäres JSON) benutzt wird. Dieses muss leider im Treiber geparst werden, was sehr langsam ist. Die Leistung bricht sauber ein und der node Prozess ist völlig ausgelastet, der Mongo Server stattdessen wird absolut nicht ausgelastet.

Zum Glück arbeitet der Entwickler des Treibers daran das BSON parsing in nativen Code auszulagern. Dann muss ich zwar trotzdem mich mit dem Übersetzen des Codes herumschlagen aber ich hoffe das es damit dann schnell gehen wird.


Auch an einer anderen Stelle ist mir das schlechte Packetmanagement aufgefallen. Es gibt die Möglichkeit die Ausgabe mit gzip zu komprimieren. Dazu kann das compress Modul verwendet werden. Naja, nun gibt es aber mehrere compress Module die den selben Namen tragen aber eine völlig unterschiedliche API zur Verfügung stellen. Sehr verwirrend. Aktuell wird ein Fallback verwendet der in einem Kind Prozess das gzip Programm ausführt. Funktioniert, ist aber sicherlich weniger performant als ein direkt auf die gzip Bibliothek zugreifendes Modul. Aber dann gibt es wieder das Problem dass man den Code in C selbst übersetzen muss.


Alles in allem scheint mir node.js bisher eine Art Spielwiese zu sein die noch stabilisiert werden muss, vor allem benötigt es eine offizielle Modulbörse wo der Umgang mit Modulen in C und die große Duplizierung die es aktuell gibt gelöst werden muss. Im Prinzip ist node bisher eh noch keine stabile (Version 1.0) Software, also kann man diese Probleme noch verkraften. Für Datenbankschnittstellen fehlt es auch an offiziell abgesegneten Modulen. Möglicherweise könnte man die Schuld aber den MongoDB Entwicklern in die Schuhe schieben, die eine Offizielle Schnittstelle für CommonJS pflegen sollen. Ich frage mich aber wie man implementierungsübergreifende native Module anbieten will. Schließlich gibt es mehrere Implementierungen für CommonJS, nodejs ist nur eine davon. Es gibt also noch viele Probleme zu lösen in der CommonJS Welt.

Namen ändern

Nun habe ich endlich eine lange überfällige Funktion in dWing eingebaut. Es ist nun möglich seinen Namen zu ändern. Vor allem für die ganzen Google und Yahoo Nutzer ist dies sehr gut, denn diese Dienste unterstützen nicht den Austausch von Nutzerdaten wie Name bei der Anmeldung.

Diesbezüglich habe ich auch probiert von der veralteten OpenID Simple Registration Erweiterung auf Attribute Exchange umzusteigen, nur um festzustellen, das keiner der Provider, nicht einmal MyOpenID diese Erweiterung unterstützen. Oder aber ich habe etwas falsch gemacht, kann natürlich auch sein.

Für OpenID habe ich auch ein sehr interessantes Widget gefunden, das es sicherlich wert ist ausprobiert zu werden.


Als ich also gestern mal wieder an dWing gearbeitet habe ist mir aufgefallen wie unbequem es doch ist damit zu arbeiten, und das es vielleicht viel besser wäre wieder einmal von null anzufangen. Möglicherweise sogar mit einem ganz anderen Technologiestapel als den altbekannten PHP und MySQL.

Ich habe also intensiv in die Richtung serverseitiges Javascript und NoSQL Datenbanken recherchiert. Node.JS und ExpressJS scheinen sehr interessante Lösungen zu sein. Zusammen mit einer Template Sprache wie Embedded JS, die ich in einer abgespeckten Version schon ein paar mal eingesetzt habe bietet dies sicher eine gute Kombination. Mit serverseitigen JS und Templates die am Server und am Client gleich sind kann man sicherlich schneller zu einem konsistenteren Ergebnis kommen.

Node basiert auf der V8 Engine aus Chrome, ich weiß also nicht genau wie viele der erweiterten Funktionen von Spidermonkey wie beispielsweise Array Comprehension oder Generators es unterstützt. Als Mozilla Entwickler würde es mich auch sehr interessieren, wie sich Jägermonkey in so einem Einsatzgebiet schlagen würde. Bisher ist allerdings ExpressJS sehr schnell. Mit keepalive Anfragen ergibt es über 5000 Anfragen die Sekunde für ein Hallo Welt Skript. PHP kommt auf vielleicht 2000. Hinter einem Lighttpd Proxy ohne keepalive kommt es immerhin noch auf etwas über 2000, also in etwa PHP Niveau. Ich denke aber, dass sich mit der Performance mehr ausgeht, denn die JS Engines haben bessere JIT Compiler und deren Performance wird auch ständig weiter verfeinert.

Wenn man eine andere Syntax mag kann man auch CoffeeScript benutzen. Dies ist eine etwas einfachere Syntax, die zu JS compiliert wird und ebenfalls Funktionen wie Array Comprehension unterstützt.

Als Datenbanklösung könnte sich MongoDB anbieten. Eine Dokumenten- und JSON-basierte Datenbanklösung wäre sicherlich sehr interessant auszuprobieren. Allerdings schweben mir einige Dinge vor von denen ich keine Ahnung habe wie diese damit zu lösen wären.

Für die Arbeit mit CSS finde ich Sass sehr interessant, macht die Arbeit in manchen Situationen sicherlich einfacher. Haml ist auch eine interessante Möglichkeit für Templates, allerdings gefällt mir die Syntax nicht ganz so sehr, und meine sehr alten Erfahrungen mit Smarty haben bewiesen, das es doch sehr viel sinnvoller ist eine echte Programmiersprache in den Templates zu haben.


Alles in allem sehr interessante Projekte die ich gerne mal ausprobieren würde, möglicherweise zuerst in TinderboxPushlog bevor ich mich daran wage aus meinem PHP dWing ein JS dWing zu machen.

xvlcwk

Seit inzwischen mehr als einem Monat lerne ich Zehnfingerschreiben auf einem auf Ergonomie und Schnelligkeit optimierten Tastaturlayout. Soweit läuft es ganz gut, ich habe schon seit geraumer Zeit mein Linux komplett darauf umgestellt.

Nach über 27 Stunden Schreibtrainer und etlicher Zeit im echten Betrieb bin ich jetzt bereits bei ungefähr 240-300 Zeichen die Minute je nach Text mit Neo 2. Mein bestes Ergebnis mit Qwertz waren 390 Zeichen die Minute. Soweit also ganz gut.

Die Tastatur hat auch eine eigene Ebene direkt für Sonderzeichen und Klammern die man fürs programmieren braucht, noch habe ich aber nicht sehr viel damit programmiert und es fällt mir noch recht schwer.

Soweit bin ich ganz zufrieden, ich bin gespannt wann ich meine Bestzeit mit Qwertz überbieten kann.

Arpad alleine in Kanada, letzter Tag

In der Früh den Mietwagen zurückgebracht, danach noch einmal nach Vancouver Downtown gefahren. Ich habe einige Zeit im Stanley Park verbracht, entspannt und gelesen. Ich war im Aquarium mitten im Stanley Park und habe dort eine Delfin-Show erlebt, aber leider keine Fotos gemacht. Die Tiere faszinieren mich sehr. Danach war ich noch etwas in der Stadt, habe einen Haarschnitt und eine Rasur bekommen. Danach habe ich per glücklichem Zufall ein Mädchen aus Augsburg wieder getroffen die ich einige Tage zuvor in Banff getroffen habe. Ich werde weiterhin mit ihr in Kontakt bleiben.

Eine weitere Bilanz die ich nach diesem Urlaub ziehen kann ist, das ich möglicherweise etwas meinen Geiz überwunden habe. Man muss aber auch sagen, das es hier mit Kreditkarte sehr einfach ist haufenweise Geld loszuwerden ohne dies zu merken. Ich denke aber das ich mir auch wieder was gönnen kann sobald ich wieder in Deutschland bin.

Ich kann es kaum erwarten bis ich nach meinem Flugmarathon über eine Zwischenlandung und zwei mal umsteigen endlich in Rumänien ankomme und einen Tag später mal wieder gejetlagt auf die Hochzeit meines Cousins gehen kann. Wobei dort der Jetlag vielleicht von Vorteil ist, denn bei der Hochzeit wird sicherlich bis tief in die Nacht gefeiert.

Das Wochenende drauf werde ich zum ersten mal seitdem ich ein Erinnerungsvermögen habe meinen Vater treffen, also praktisch zum ersten mal. Ich bin auch darauf sehr gespannt.

Arpad alleine in Kanada, vorletzter Tag

Bin nun wieder im Umkreis von Vancouver angekommen, habe die Zeit mit einem Besuch im Zoo verbracht. Also für die 22$ Eintritt gabs zumindest eine Show mit Raubvögeln. Ansonsten hat mir der Zoo nicht so sehr gefallen wie beispielsweise der Schönbrunner.

Ich habe auch noch ein Foto von einem aus Sperrholzplatten bestehenden Haus machen können, sehr energieeffiziente Bauweise kann ich mir vorstellen. Ebenfalls scheint in ganz Kanada das Motorbremsen verboten zu sein. Also entweder haben die hier einen Schuss oder die verstehen unter Motorbremsen was anderes als wir.

Morgen werde ich den Mietwagen zurückbringen und den Rest des Tages in Vancouver verbringen. Ich hoffe ich finde einen Friseursalon zum Haare und Bart schneiden. Vielleicht werde ich auch noch etwas einkaufen, vielleicht Schuhe, mal sehen. Ansonsten gemütlich im Stanley Park lesen oder dergleichen.

Den Abend werde ich wohl am Flughafen durchmachen denn der Flug geht in der Früh kurz vor acht, ich denke nicht das sich da noch eine Übernachtung lohnt.


older posts