Frustblogging #9: SourceForge, VNC, Binäre Daten, Logik und Tastaturbelegungen

Tja, ich weiß im Moment garnicht, wo genau ich bei diesem ersten Frustblogging seit doch nun schon längerer Zeit anfangen soll. Zunächst mal hat SourceForge irgendwie bei anscheinend zufällig ausgewählten Projekten eine Umfrage zur Motivation von Open Source Programmierern gemacht. Da sind sie bei mir mit meinen seit zwei Jahren stillgelegten und nie fertig gewordenen SourceForge-Projekten natürlich genau an der richtigen Stelle gewesen.

Nun, mein Projekt war mal der Versuch, einen Ajax-X-Server zu schreiben. Entstand in der Zeit, als mein alter Laptop in Reparatur war, und ich nur einen Gemeinschaftsrechner hatte, wo ich froh war über alles, was es als Webinterface gibt, und mir dachte, möglicherweise wäre es sinnvoll, zu versuchen, einen Proxy zu schreiben, der X11 versteht und irgendwie per AJAX forwarded. Eine eigene Implementierung des X11-Protokolls habe ich allerdings schnell aufgegeben, es ist einfach viel zu groß. Mein zweiter Versuch (der auch mehr oder weniger gelang) war es, WeirdX zu benutzen, und das dort erzeugte Bild erstmal per autorefresh zu forwarden (ich habe damals noch hauptsächlich mit Java programmiert). Am Ende hab ich das Ganze dann sein lassen, ohne jemals etwas zu releasen, da ich zum Einen keine Zeit und Lust mehr hatte (und meinen Laptop wiederhatte), und es zum Anderen WeirdX und VNC-Applets gibt. Und so hätte ich dieses Projekt längst vergessen gehabt, wenn SourceForge’s Umfrage nicht zufällig dieses Projekt ausgerandomized hätte.

Nun arbeite ich momentan an einer für mich etwas größeren Sache an der Uni, doch wie das manchmal so ist, kam ich gestern nicht wirklich weiter und dachte mir, heute, zum Sonntag, erlaube ich mir – unter schlechtem Gewissen – einen Tag Pause einzulegen und mich einem privaten Projekt zu widmen. Da ich vor kurzem mit VNC unter Mac OS experimentiert habe, und wieder an mein Ajax-Projekt erinnert wurde, und mich erinnern konnte, dass das VNC-Protokoll nicht so kompliziert ist, dachte ich mir, warum versuche ich nicht mal, an dem Projekt weiterzuschreiben.

Natürlich nutze ich inzwischen hauptsächlich Common Lisp, und so dachte ich mir, nachdem ich keine entsprechende Programmbibliothek fand, ich sollte erstmal eine abstrakte Programmbibliothek für VNC schreiben. Die meisten Bibliotheken die es gibt – übrigens auch in anderen Sprachen – kümmern sich selbst um das Öffnen von Netzwerkverbindungen und das Zeichnen, z.B. gtk-vnc, und sind damit abhängig von einer konkreten Umgebung. Das ist zum Einen unter Common Lisp relativ schlecht, da die Basis-Bibliotheken sich immer wieder mal ändern (oder man sie einfach nicht benutzen will), desweiteren ist es allgemein schlecht, da man zum Beispiel wenn die Bibliothek automatisch Netzwerkverbindungen öffnet, und man sich vielleicht selbst um den Datentransport kümmern will, beispielsweise Socks-Unterstützung will oder Ähnliches, dann pech hat, oder wenn man besondere Ansprüche an die Grafik-Ausgabe hat, etc., und es ist schlichtweg in Common Lisp möglich, Bibliotheken unabhängig von solchen Dingen zu schreiben. Außerdem ist ein komplettes Ajax-Interface wohl doch etwas längeres als eine Bibliothek, mit der ich heute vielleicht hätte fertig werden können.

Also ran an den Speck, ein paar VNC-Spezifikationen durchgelesen, und angefangen, zu Programmieren. Aber wie so viele Protokolle die auf Leistung optimiert sind, ist auch VNC ein Protokoll, dass ehr viel mit binärdaten Arbeitet. Man sollte unter Anderem big- und little-endian-encodings verstehen, etc. Alles natürlich keine Unmöglichkeit mit Common Lisp, aber natürlich nicht gerade dessen Spezialität. Zuerst hantierte ich also selbst mit den binärdaten herum, doch freilich ist diese Art des Herumhantierens sehr anfällig für Bugs, außerdem, warum das Rad neu erfinden, und so empfahl man mir die Bibliothek binary-types, die jenes bereits leisten sollte. Wie üblich bei solch kleinen Projekten geht die sinnvolle Dokumentation gegen 0. Nunja, der Code ist recht übersichtlich, man hätte sicherlich herausfinden können, wie er funktioniert – wenn man Lust dazu hat. Die ich grad nicht hatte.

Also dachte ich mir, wieso nicht einfach mal C benutzen. Hatte ich unter Mac OS X bisher eh noch nicht gemacht, und sollte eigentlich einfach sein. Nun. Emacs angeschmissen. int main (void) geschrieben. Bumm. Ich hatte es nie gebraucht, deshalb nie eingerichtet: Die Alt-Taste war noch als Meta-Taste eingerichtet. Sonderzeichen, die Alt brauchen, gehen da natürlich nicht. Also die Konfigurationen durchwühlt, irgendwelche wilden Modifikationen an meiner .emacs-Datei gemacht, um wenigstens die Alt-Taste garnicht als Sondertaste zu benutzen, ESC funktioniert ja auch als Meta-Taste. Ging alles nicht. Tja. Alles für die Katz, es geht viel einfacher: Es gibt eine Option, sogar für deutsche Keybindings, im Optionsmenü. Hätt ich das mal zwei Stunden früher gewusst. Dann hätte ich vielleicht noch Lust zu Coden gehabt.

Jetzt hab ich erstmal keine mehr. Also hab ich mich zu diesem Blogpost hinreißen lassen. Vielleicht code ich ja doch noch. Im laufe des Abends locker vor mich hin. Ab Morgen muss ich dann wieder was für die Uni tun. Mei.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: