Just because it's:

Archive for the ‘Longer articles’ Category

WebGL: My First Impressions

Wednesday, February 10th, 2010

Lately I spend some hours for a research on WebGL. It’s quite amazing in which ways internet technologies have evolved. I still remember times, when it was nearly impossible to render any graphics using JavaScript only. Nowadays it’s one of the minor difficulties since we have technologies like SVG or Canvas. Even after animated realtime graphics are nothing special anymore, there’s a new player in town: WebGL.

3d computer graphics in web applications seem to be still a topic thats is heavily associated with technologies like flash, shockwave or other plugin based platforms. This may become history soon. At least if the development of WebGL browsers will proceed as it currently does. If you already use a WebGL enabled browser and had a look at one of the several examples as they appear constantly on http://learningwebgl.com/, then you will figure out quickly what I’m talking about.

shadertoyBeside the usual operations we are familiar with from nearly any 3D engine, the most Important part on WebGL seems to me that we are able to use vertex and fragment shaders in the usual native way. While the whole application code is written with JavaScript, the shader programs will be implemented in a C style shader code. In the end nothing special for OpenGL veterans. But hey! Exactly that’s the point! If you’ve ever developed your personal, most awesome shader ever, there’s the possibility to reuse or partly use them for WebGL. There’s an amazing experiment written by Inigo Quilez about this shader topic. It’s called Shadertoy (don’t forget to use a WebGL enabled browser). The Shadertoy website, currently offers you about 28 sample shaders of different kinds. All are looking very pretty and all are native shader programs, which are executed on the graphics accelerator. Hardware acceleration for Webapps: Just great!

The basic possibilities offered by this technology may end into enourmous impacts for webstandards. You already may have recognized the Flash Gordon Project of Tobias Schneider. His approach is to implement an open source flash runtime, written in JavaScript. Imagine this implementation, using the powers of GL rendering. Or ways better: a new runtime plattform using WebGL as rendering layer.

Enough of nerdy enthusiastic day dreaming. There are still some difficulties with WebGL. At first of course, the minor density of WebGL enabled browsers out there in userland. But there’s a silverline on the horizon: last September Mozilla announced to implement WebGL in future versions of Firefox. The current nightly builds yet implement it, but it’s disabled by default. So it’s just a matter of time, when WebGL will be available easily by default.

Screen shot 2010-02-10 at 18.10.27 Second flaw: It is quite uncomfortable to keep track of all matrix transformations by yourself. Bare WebGL won’t do that job for you. Many examples on the internet (including the Learning WebGL lessons) implement their own helper functions for identity loading, by encapsuling Sylvester (vector and matrix math for JavaScript) routines. That’s a common but never the less hacky way to fix the problem. And even creating simple basic shapes still produces a lot of code. Many shaders are embedded directly into HTML code, like it is well know from CSS or JavaScript embedding. That feels pretty ugly, when you’ve a complex WebGL application in mind.

In my opinion, the best solution for this case is WebGLU by Benjamin DeLillo. This library is a set of frequently high usefull routines for developing your very own WebGL application. You can load externalized Shader code, enjoy the ease of a camera and many more fine features.

So if you are interested into WebGL now, you should have a look at Learning WebGL. It’s in my opinion one of the best and most up to date resources on the net. If you are interested in the papers and basics of the new standard, it’s the best to search The Khronos Group website for further information.

If you’ve any other interesting news or resources for WebGL, please leave a comment or message me on any of the known ways.

Double Release Party

Thursday, January 14th, 2010

Abakia Project Showcase

Okay, everybody stay calm now, there’s no reason to panic: I got a new showcase! Yes, it’s a brand new one. Please… ladies and gentlemen, please! Let’s behave like well civilized people. There’s enough for every single one of you.

After my last showcase went broken some months ago, I promised to myself to create new one next (actually THIS) year. You may see the results at http://www.abakia.de/showcase/. I made heavy use of native flash features, as well as of my interactive framework called Monosodium.

Monosodium Flash Framework

So actually this is also a double release party. When I started developing ActionScript Flash in 2008, I also began to collect often used chunks of code and glued them to build a giant tar ball of death. No, that’s not what the framework is actually made of. In late 2009 I throw away the prototype and started to create a better version of the old framework library collection… frankenstein monster.

The rewrite resulted in a lightweight and easy to use flash framework, for creating view based interactive flash apps. There’s probably nothing ground shaking with this framework but it’s my very personal 2 cent and “thank you” to the flash community itself. The project is still lacking some documentation. But I’m working on that as I continue integrating features and refactoring the code. Yes, the framework is still under heavy development. You know the game’s name: commit early, commit often and listen to the audience.
So if you’re interested in the framework, please give me some feedback on that.

Special thanks goes out to Sebastian Deutsch (9elements), for supporting me while developing Monosodium in the early stages.

Von Liebesbriefen und Kopfgeldjägern

Sunday, August 10th, 2008

Viele von euch sind vermutlich wie ich auch bei Xing. Ich weiss nicht ob es nur mir so geht, aber sowohl die Kopfgeldjäger als auch die jung dynamisch sportlichen Startup Guys (ja, genau die mit dem unverwechselbaren Zahnpastalächeln) lieben mein Postfach. Beim lesen der Nachrichten stellt man schnell fest, dass fast alle Zuschriften einem ähnlichem Schema folgen. Wie nervig!

Ließt man sich die Zuschriften allerdings mit ein wenig bereitschaft zu humor und sarkasmus durch, entdeckt man unter Umständen doch die ein oder andere Passage, die einen zum schmunzeln bringen kann.

Deshalb hier ein paar Zitate aus freier Wildbahn, inklusive persönlicher Anmerkungen. Ich gehe davon aus, dass die Absender der Nachrichten, in diesem Fall gerne auf die korrekte Zitierung mit persönlicher Namensnennung verzichten. ;-)

Der Unkonventionelle

“Hi, wir kennen uns zwar noch nicht, aber ich schreibe Dich einfach mal proaktiv an, hoffe das ist okay.”

Ungefähr so beginnen auch 90% der E-Mails, die in meinem Spam Ordner liegen. Dabei sieht der junge Herr auf dem Foto garnicht aus wie ein nigereanischer Königssohn, Internet-Apotheker oder eines dieser heißen Luder, die mich regelmäßig auf einen völlig diskreten und selbstverständlich unverbindlichen Webcam Chat einladen. Also die Luder… nicht die Apotheker!

Nicht schlecht, wie er die Leute mich persönlich “proaktiv” und “einfach mal” so anschreibt. Diese persönliche Note wird nochmal durch eine Prise unkonventionalität betont, da er z.B. das Subjekt “ich” im dritten Nebensatz weglässt (um eine Doppelung mir dem Subjekt aus dem zweiten Nebensatz zu vermeiden) und direkt mit dem “Du” einsteigt. Im Internet darf man das ja.

Aber um die änfägliche Illusion des individuellen Anschreibens von einer auf ganze zwei Sekunden zu steigern, empfehle ich doch zumindest den Vornamen mit in die Anrede aufzunehmen. Sonst merkt doch jeder, dass das nur kopiert und eingefügt wurde. Der nächste hier hat das schon raus:

Der Anspruchsvolle

“Hallo Dennis,
ich habe mir erlaubt, Dich direkt anzuschreiben. Auch wenn wir uns nicht kennen.”

Geht doch! Aber trotzdem heftig, was die sich alle rausnehmen. Leute nicht kennen, aber dennoch einfach mal Kontakt knüpfen. Am Ende wohlmöglich auch noch Networking betreiben. Wo kämen wir denn da hin?

“Zur Erweiterung unseres Teams suchen wir deshalb dringend nach guten
Software-Entwicklern. Falls das etwas für Dich ist oder Du
irgendjemand kennst: Freunde, Bekannte, Studienfreunde, ehemalig
Kollegen, Freunde von Freunden, Verwandte und Nachbarn: über jeden
Tipp würde ich mich sehr freuen.”

Ob das was für mich wäre weiss ich nicht. Aber zumindest kenne ich die da oben alle! Mensch was für ein Glück, Sie suchen ja genau mich! Da sag nochmal jemand, man müsse konkrete Qualifikationen mitbringen. Blödsinn! Die richtigen Leute muss man kennen. Und ich kenne Sie alle!

Achja, einen Tip habe ich auch gleich noch: mit logischen Verknüpften Bedingungen immer vorsichtig umgehen. Ausserdem darf man auch nach elliptischen Sätzen normale Punkte setzen. ;-)

Die Interessierte

“[...] wir sind auf Ihr interessantes Profil in xing gestoßen und würden sehr gerne mit Ihnen in Kontakt treten.”

Psst, bitte nicht so laut! Sonst wird mein uninteressantes Zweitprofil noch eifersüchtig. Sie wissen doch wie das ist. Tun sie mir doch einen persönlichen gefallen und melden sie sich nochmal auf dem anderen. Sonst bekommt das irgendwann noch Depressionen oder sowas.

Der Glückliche

[...] zufällig bin ich gestern auf Ihr Xing-Profil gestoßen, das mir besonders hinsichtlich Ihrer ausgewiesenen Programmier-Kenntnisse (Ruby on Rails) positiv aufgefallen ist.

Sie und ich! Wir beide, sind einfach für einander bestimmt! Wenn das mal kein Zeichen war. Und das wo sie doch vermutlich gerade (natürlich total zufällig) einen Ruby on Rails Entwickler suchen. Aber da man sich ja nicht immer auf das Schicksal verlassen kann, empfehle ich das nächste mal dann doch lieber die Xing Profisuche. Da kann man sogar Profile nach Fähigkeiten und Standorten durchsuchen. Ganz ehrlich!

Der Neue

Unsere Wunschkonstellation wäre eine Festanstellung mit marktüblichen Gehältern und einer Unternehmensbeteiligung.

Subtext: “Eine Nachricht um ihn zu finden, gering zu bezahlen und beteiligt zu binden!” – So oder zumindest so ähnliche kann man es auch formulieren. Es handelt sich im übrigen um ein Startup Unternehmen (Surprise!), dass gerade mal 6 Monate existiert. Arbeite gut und arbeite hart! Denn je besser und härter du arbeitest, desto größer wird nämlich der Wert deiner Beteiligung. Wenn wir nach der ersten Finanzierungsrunde allerdings wie viele andere Startups drauf gehen sollten, hast du ja immernoch dein marktübliches Gehalt bekommen.

Der Konkrete

“Bitte senden Sie uns Ihre aussagekräftigen Bewerbungsunterlagen an x@y.z. Im darauf folgenden Gespräch würden wir Ihnen gerne Ihre Möglichkeiten und Entwicklungsperspektiven bei XYZ vorstellen.”

Tut mir sehr leid. Ich habe im Moment nurnoch die weniger aussagekräftigen Unterlagen auf Vorrat. Auch wenn ich mich damit wohl soeben als Bewerber für den Entwicklerjob disqualifiziert habe, könnten Sie mich mit den weniger aussagekräftigen Unterlagen doch bestimmt wo anders unterbringen Oder?

Wie wäre denn mit Sportlerkommentaren, im Marketing, oder sogar in der Politik? Das wäre Klasse!

Fazit

Im Grunde genommen bin ich echt froh, dass es sowas wie Xing gibt. Leider finden tatsächlich nur wenig wirklich interessante Angebote Ihren weg in mein Postfach. Meistens handelt es sich um Massenware von der Stange und dient eher dazu, die Karteikästen und Konten der Vermittlerunternehmen zu füllen. Nichts desto trotz, kann man beim durchforsten dieser Nachrichten seinen Spass haben. ;-)

AGI mit Python

Friday, July 6th, 2007

Das Asterisk Gateway Interface (kurz AGI) ist die Schnittstelle der Asterisk Software Telefonanlage. AGI bietet nahezu jeder Programmiersprache die Möglichkeit mit dem Telefon-Server zu interagieren. Das Prinzip ist in etwa mit dem des Namensvetter Common Gateway Interface (CGI) bei Webservern zu vergleichen. Ein Request auf ein bestimmtes Dokument bzw. Telefonnummer erreicht den Server. Dann wird ein externer Interpreter gestartet, der ein Programm ausführt und dem Server das Ergebnis des Programmlaufs mitteilt.

Im Gegensatz zu CGI ist AGI von Natur aus auf ein kontinuierliche Verbindung ausgelegt. Das bedeutet, dass wenn eine neue Telefonsitzung angenommen wird, stehtig Daten rein und raus gehen können ohne die Verbindung zwischenzeitlich zu unterbrechen. Wohingegen CGI für paketbasierte Kommunikation entworfen wurde, und normalerweise nur einmal zu Beginn der Anfrage, Daten über die Umgebungsvariablen übergeben bekommt.

Wie bereits erwähnt, kann man AGI mit nahezu jeder Sprache ansprechen. Warum ist das so? Ganz einfach: AGI kommuniziert über die drei heiligen Datenkanäle STDIN, STDOUT und STDERR und nutzt im “Protokoll” Plaintext Befehle. Da praktisch jede Programmiersprache im PC bereich zumindest zwei dieser Kanäle unterstützen sollte um irgendwie existenzberechtigt zu sein, ist man bei der Wahl der Sprache ziemlich frei.

In meinem Fall habe ich mich für Python entschieden. Es gibt eine Menge freier AGI Bibliotheken für Python. Leider mangelt es wie so häufig an der API Dokumentation und/oder guten Beispielen. Aufgrund der einfachen Umgangs mit AGI und wegen des gewissen Lerneffekts, ist es auch eigentlich kein Problem sich direkt selbst mit dem Server zu unterhalten. Mit wenigen Zeilen Code lässt sich ein funktionierendes AGI Template bauen. Auf das Listing verzichte ich an dieser Stelle aus technischen Gründen einfach mal weil das Vimcolor Plugin suckt viel besser zu kopieren ist, wenn man sich den Quelltext direkt runterladen kann.

Eingebunden wird das AGI Programm in der /etc/asterisk/extensions.conf unter einem gültigen Kontext mit dem Befehl “AGI(/path/to/script)“.

Was mir bei AGI allerdings negativ aufgefallen ist, ist die beschränkte Möglichkeit des debuggens. Zwar hat man in der Asterisk Konsole die Möglichkeit, mit dem Befehl “agi debug” in den Debug Modus zu wechseln, was einem aber in der Regel nicht sehr viel weiter hilft, wenn es hart auf hart kommt. Eines meiner Lieblingszenarien ist, wenn Asterisk nicht die nötigen Rechte zum öffnen des AGI hat. Dann bekommt man nämlich keine Fehlermeldung, sondern wird vom AGI Debugger darüber Informiert, dass das Script gestartet wurde und mit Return-Code 0 (d.h. alles in Ordnung) beendet wurde. Folgende Arbeitsweisen haben sich für mich als gutes Workaround für die AGI-Debug problematik herausgestellt:

  1. Teste/Validiere das Programm bevor du es von Asterisk ausführen lässt. In Vim für Python z.B. mit dem Befehl “! python %” oder für Ruby mit “! ruby -c %
  2. Nutze ein eigenes Logging. Output Debugging über Asterisk ist meiner Meinung nach zweckentfremdung, denn alles was man zu Asterisk schickt sollten Befehle sein. Außerdem ist es hässlich zu lesen. Stattdessen besser in ein externes Logfile schreiben und im terminal mit “tail -f $my_logfile” das Geschehen live mitverfolgen.

Anbei noch ein paar nützliche Links zum Thema: