programmierung - 25.10.2010 - 9.12.2010

slimv.vim - SLIME-like Lisp and Clojure REPL inside Vim with Profiling, Hyperspec, Paredit. Ganz interessant, da deutlich leichtgewichtiger und simpler zu installieren als Slime oder VimClojure oder eine der anderen dicken Lösungen. Und man kann einfach aus Vim heraus Common Lisp oder Clojure programmieren. Ist zwar derzeit nur im "rumspielen und gucken" Modus, aber klingt durchaus interessant.

Chromium Blog: A New Crankshaft for V8. Und damit wird JavaScript noch ne Runde schneller. V8 ist auch die Basis für Node.Js, womit es diese Performanceverbesserung in Bälde wohl auch für den Server gibt.

pyquery: a jquery-like library for python — pyquery v0.6.1 documentation. Drin was drauf steht. Im Prinzip ein subset von dem was jQuery kann, da jQuery eigene Selektorerweiterungen hat und das hier einfach auf lxml aufsetzt (aber dafür dann vollständige css3 Selektorenunterstützung hat).

stream – Lazily-evaluated, parallelizable pipeline — stream v0.8 documentation. Interessantes kleines Modul zur einfacheren Programmierung von Berechnungsketten mit Iteratoren. Macht Sourcecode deutlich kompakter für passende Anwendungsfälle (z.B. Transformationen und Selektionen von Massendaten). Geblogmarkt, da ich sowas diverse male selber adhoc innerhalb Projekten implementiert habe.

About - pyconditions - About the module - Project Hosting on Google Code. Noch eine andere Implementierung von Common Lisp Conditions in Python.

Python Package Index : withrestart 0.2.6. Klingt ganz interessant - die interaktiven Restarts von Common Lisp sind oft sehr praktisch, gerade bei interaktivem Arbeiten.

pyclewn. Weiss noch nicht ob ich da mich reinwühlen will - ich benutze Debugger eigentlich nicht. Aber der hier ist in Vim integriert und damit direkt aus dem Editor nutzbar. Genutzt werden kann gdb und pdb (für Python).

Vim Taglist plugin manual. Ein weiterer wichtiger Baustein um mit dem MacVim richtig arbeiten zu können. Empfehlenswert sich auch mit brew install ctags das exuberant-ctags zu installieren, wenn man richtige Sprachen benutzen will (wie z.B. Python).

Vim autocomplete, Django and virtualenv | rosemanblog. Besonders die Integration von VirtualEnv und MacVim ist hilfreich, weil sonst Omnicomplete nicht sauber mit VirtualEnv zusammenarbeitet, da es nix von den dort liegenden Modulen weiss. Übrigens ist das Installieren von MacVim mit Homebrew trivial ...

chrisdickinson's wilson. Einen noch vor dem Mittagessen, denn das Framework orientiert sich stark an Django, und da ich ja Django-Fan bin, ist das sicherlich einen eigenen Link wert.

Modules - node. Viele Module für Node.js, mehr als ich auf die Schnelle durchgucken kann (oder will), also erstmal nur als for-future-perusal weggeblogmarkt.

persistence.js: An Asynchronous Javascript ORM for HTML5/Gears. Weil man ja dann doch immer mal Daten speichern will, hier ein Link auf eine Client-Side ORM Lib für JavaScript. Schaut ganz ok aus und könnte vielleicht auch für die Serverseite benutzt werden. (hab noch einen anderen Link dafür gefunden, der explizit Node.js mit MySQL unterstützt).

Express - node web framework. Gut, wenn man mit Node.js einfach mal schnell kleine Webservices bauen will. Ich finde das passt gerade gut zu Node.js Installationen und jQuery auf der Client-Seite. Im Moment drängelt sich JavaScript bei mir in viele Nischen, in denen vorher Python beheimatet war. Nicht zuletzt weil JavaScript tatsächlich eine gar nicht mal so üble Sprache ist.

Socket.IO ist eine kleine JavaScript Library, die Socket-Kommunikation vom Browser unterstützt und dabei verschiedenste Techniken anwenden kann und die beste verfügbare automatisch auswählt. Dadurch also auch über verschiedene Browser und Browsergenerationen funktioniert.

agr / ropevim / source – Bitbucket. Auch für das andere Tool, das mich an Spyder interessiert hat, gibt es eine Vim-Integration: Rope. Ein Refactoring Tool für Python Code. Bei einer genügend großen Codebasis nicht ganz uninteressant.

spyderlib - Project Hosting on Google Code. Guck ich mir gerade an, ist ein ziemlich interessantes Python Editor Teil mit vielen IDE Funktionen. Da es selber in Python geschrieben ist, integrieren sich diverse Python Tools sehr gut (Rope, Flake, PyLint).

Komodo Edit is a Free Open Source Editor for Perl, Python, Tcl, PHP, Ruby & Javascript. Sollte ich mir mal angucken, da TextWrangler kein Folding hat, BBEdit meiner Meinung nach einfach zu teuer ist und TextMate eine zu bescheidene Python-Folding-Unterstützung hat. Und wenn das Teil brauchbar unter den verschiedenen Systemen läuft, hätte ich endlich wieder einen einheitlichen GUI Editor (ja, ich weiß, vim ist auch überall verfügbar, aber die GUI Version macht mir einfach keinen Spaß).

Update: äh, hallo, ActiveState? Ich verstehe ja, dass ihr eure "günstige" IDE (Sonderangebot! Nur 330 $) an den Mann bringen wollt, aber wenigstens den Source-Outline hätte Komodo Edit doch wohl verdient gehabt, oder?

Python Package Index : lupa 0.18. Bringt LuaJIT2 und Python zusammen, so dass man von Python auf Lua-Scripte zugreifen kann, die dann von LuaJIT kompiliert werden.

Weil ich gerade von Lua geschrieben habe: probablycorey's wax liefert eine Objective-C Bridget zu Lua, speziell für iOS Geräte. Also iPhone oder iPad Apps mit Lua schreiben.

Have tracing JIT compilers won? | Lambda the Ultimate. Spannende Diskussion in der auch Mike Pall (LUAJit), Brendan Eich (Mozilla JägerMonkey) mitdiskutieren (und speziell LUAJit ist derzeit ja King of the Mountains was Performance angeht). PyPy wird auch zwischendurch erwähnt, allerdings noch auf einem deutlich älteren Stand - die neue 1.4 zeigt schon deutlich besser was mit PyPy machbar ist.

PyPy Status Blog: PyPy 1.4: Ouroboros in practice. Und damit ist PyPy jetzt auch bei der JIT in 64bit angekommen. Ausserdem funktioniert VirtualEnv jetzt problemlos, wenn man eine aktuelle Version installiert. Und schnell ist es auch immer noch.

IKVM.NET Home Page liefert eine Java VM in .NET - man soll damit sogar so verrückte Sachen machen können, wie z.B. Scala 2.8 auf .NET laufen zu lassen.

MacRuby » An Introduction to GCD with MacRuby. Grand Central Dispatch ist einer der cooleren Techniken die von Apple in der letzten Zeit auf OS Ebene gekommen sind. Und MacRuby hat da direkte Unterstützung für. Sehr interessant (auch wenns natürlich dann nur in der OSX Welt funktioniert).

Als Gedankenstütze geblogmarkt: Zach's Journal - Making a small Lisp project with quickproject and Quicklisp. Einfach weil ich sonst quickproject und ähnliches eh wieder vergesse. Mit Clozure CL 1.6 tuts auch Quicklisp recht vollständig (speziell ist cl-fad funktionsfähig und daher kann man einen grösseren Stapel von Paketen endlich zum Fliegen kriegen). So langsam kriegt Zach einen Stapel von Tools zusammen für Common Lisp, mit dem es dann doch wieder Spaß macht damit rumzuspielen. Auch wenn ich warscheinlich nie der große Emacs-Fan werde, egal wie sehr andere auf das Teil für Lisp schwören.

Higher Order Javascript liefert viele Denkansätze über JavaScript Programmierung (und CoffeeScript) und wie man funktionale Programmierung sinnvoll in JavaScript nutzen kann. Schließlich ist JavaScript eine durchaus mächtige Sprache mit interessanten Abstraktionen, die man ruhig mal nutzen kann.

Backbone.js ist ein interessantes Projekt, welches eine echte Backbone-Struktur für komplexere JavaScript Projekte liefert. Es implementiert Model/View/Controller Struktur für JavaScript und liefert eine Reihe von Collection-Klassen mit entsprechenden APIs mit. Was es nicht liefert, ist ein dicker Stapel UI-Kram oder die 1001ste Implementierung von DOM Navigation oder ähnliches - es sollte also gut zusammen mit Sachen wie jQuery harmonieren, denn es liefert eigentlich nur die Grundstruktur auf der man aufbauen kann, wenn man nicht mehr alles im DOM speichern will. Es gibt allerdings schon ein paar Überlappungen, zum Beispiel bei Events - die werden ja auch von jQuery zur Verfügung gestellt, allerdings sind sie hier nicht an DOM-Knoten gebunden, sondern an beliebige Objekte.

Datejs - An open-source JavaScript Date Library - macht einen guten Eindruck, so für die diversen Formatparsereien und Kalenderbezogenen Geschichten.

Pixie Scheme III. Für das iPad. Zum Rumdoodlen vielleicht nicht ganz uninteressant (sofern es auch brauchbare Integration in das iOS API hat).

How I build-in Tumblr in my Drupal install ist schon sehr nah an dem dran was ich mit Tumblr auf meiner Homepage machen will. Jetzt muss ich nur noch ein minimales Widget schreiben und den Code da reinfummeln und statt auf die regulären Postings nur auf die Fotos gehen. und ich hab wieder Tumblr-Fotos auf der Homepage.

Update: wer rechts guckt kann die Tumblr Fotos wieder sehen. Also auf der Homepage. Klappt ganz gut und frisst keine Zeit mehr. Irgendwann pack ich das Plugin das ich da gebaut habe mal zusammen, im Moment ist es noch etwas roh.

API | Tumblr - weil ich vielleicht ja doch noch etwas mehr damit machen will als im vorigen PHP Beispiel benutzt wurde.

Display photos from Tumblr (using JSON method) ist PHP, aber das sollte ich eigentlich leicht auf JavaScript umbauen können und dann nur client-seitig laufen lassen.

hyphenator könnte ich mir mal angucken, denn dann läuft die Silbentrennung einfach mit JavaScript auf dem Browser. Ist ja sowieso nur interessant für die Webseiten selber, Feed-Reader müssen eh selber rendern.

Update: jau, sieht gut aus. Jetzt kann ich mir meine Homepage wieder angucken, ohne Pickel zu bekommen, und die Integration war mit dem custom package builder von denen sehr simpel - ein paar Checkboxen durchgehen, eine optimierte Download-Version der Library bauen und diese im Head des Blogs einbinden. Als Klasse hab ich einfach entry-content genommen, dadurch werden alle Beiträge (und nur die) mit Silbentrennung versorgt. Und da Client-seitig, betrifft es weder den Feed noch irgendwelche anderen internen Wege.

pyfpdf liefert PDF Generierung ohne Abhängigkeiten von anderen Paketen. Allerdings steht da vorne ein "ported from PHP" dran. Aber wen das nicht abschreckt und wer einfache Ausgaben in PDF produzieren will, ist damit vielleicht garnicht so schlecht bedient.

Processing.js v1.0 Released und es ist immer noch ein echt nettes Spielzeug. Jetzt ist es von den Features auch fast gleichauf mit dem großen Processing.

F# in MonoDevelop and cross-platform web sites & screencasts | Blog | TomasP.Net hat eine Menge Informationen über F# unter Mono auf Linux und OSX.

JQTreeTable benutzt zwar nicht DataTables, aber ist trotzdem ganz interessant, denn es liefert eine Finder-ähnlichen Tabellendarstellung für hierarchische Daten.

JLOUIS Ramblings: On Erlang, State and Crashes erklärt gut was es mit dem "in case of error, crash" Mantra von Erlang so wirklich auf sich hat - nämlich den Aufbau einer Anwendung als Schichten von Supervisor Prozessen und Error Handlern. Wesentlich daran ist eben die Struktur der Anwendung - einfach nur crashen reicht nicht, die Architektur muss auch darauf vorbereitet sein.

atomo - sehr interessante Sprache, sehr flexibel und kompakt. Bin drüber gestolpert weil jemand dazu einen Mongrel2 Adapter gebaut hat. Interessant an atomo ist für mich vor allem, dass es mal wieder eine neue Sprache mit Prototyping basierender Objektorientierung ist. Eine Sache die viel zu selten ausprobiert wird (andere Sprachen aus dem Bereich sind Slate, Self, Io, Newtonscript und JavaScript).

Interessant ebenfalls: atomo ist in Haskell eingebettet und bietet daher eine dynamische Scripting-Sprache für Haskell-Umgebungen und natürlich eine gute Integration in die Haskell Welt. Sowas gabs schon mal mit einem der ersten Perl6 Prototypen, der ja auch in Haskell gebaut wurden (Pugs).

Kilim - beim Stöbern in den Orc Dokumentationen drüber gestolpert, eine microthread-Lib für Java.

Orc Language - bisher nichts davon gelesen, aber sieht recht interessant aus. Kern ist Cor, eine funktionale Sprache ohne Seiteneffekte und darauf aufbauend dann Orc, die zur Orchestrierung von Services in verteilten Systemen dient. Das ganze in einer recht ansprechenden, kompakten Syntax auf der JVM. Könnte man sich durchaus mal als Alternative zu Scala und Clojure angucken, Java wird dabei als externer Service integriert, dadurch können recht einfach verteilte Systeme gebaut werden, bei denen Teile eben in Java implementiert sind. Erinnert in vielen Punkten stark an die Ideen von Erlang (generell von einem verteilten System ausgehen, aber trotzdem Teile lokal aus Performancegründen halten), wobei ich die Syntax deutlich angenehmer finde. Und mit der JVM eine deutlich weiter verbreitete VM als bei Erlangs BEAM.

Twisted Orchestration Language in Launchpad - und jemand hat die Orc-Kombinatoren nach Python portiert, unter Benutzung von Twisted. Allerdings finde ich persönlich Twisted eher eklig zu programmieren, aber wers mag ...

Tornado Web Server Documentation - muss mir doch mal Tornado näher angucken. Hab jetzt für ein Nebenprojekt einen Webservice mit web.py gebaut, was erschreckend simpel (und schmutzig) ging. Tornado baut auf einem sehr ähnlichen Konzept auf, schmeisst Django-ähnliche Templates in den Mix und bietet gleich noch einen guten asynchronen Server und Unterstützung für asynchrone sockets und http requests. Könnte gerade für Webservices eine gute Alternative sein, die wenig Resourcen braucht.

Oracle cooks up free and premium JVMs - und Oracle beginnt mit dem Versuch des Cash-in auf Java. Wenn es klappt, könnte Java bald in ähnlicher Situation wie .NET sein: die freien Implementierungen hängen hinter dem Umfang der kommerziellen hinterher. Was das für alternative Sprachen auf der JVM bedeutet, muss sich erst zeigen - aber sicherlich wird es für einige Probleme sorgen. Allerdings ist die JVM-Welt groß genug und mit genügend Alternativen ausgestattet, und Oracle ist nicht Microsoft. Von daher könnte das ganze auch bloß wieder ein Sturm im Wasserglas sein und allenfalls die typischen Oracle-Opfer betreffen.

Eventlet Networking Library - muss ich mir mal näher angucken, das monkey-Patching von Standardbibliotheken um diese trivial in einer asynchronen Umgebung zu nutzen sieht sehr interessant aus.

Links

rfc1437 | Content-type: matter-transport/sentient-life-form - Tendenzen stark in Richtung "wegschmeissen mit Archiv und neu anfangen" mit leichten Optionen zu "wegschmeissen, statisches Archiv und vielleicht einen Teil in die neue Plattform schaufeln wenn ich Zeit finde". Der Link zeigt wo ich im Moment rumspiele. Wordpress mit ein paar kleinen Plugins und einer nginx caching Front.

Bitrot

Hat mich jetzt auch voll erwischt. Meine alte Blog-Software wird wohl nicht unverändert überleben können. Alte Python-Version (2.3), altes (sehr altes) Django (0.91), alter PsycoPG Treiber (1.0), altes PostgreSQL (7.4) und das alles auf einer alten Debian (eine wilde Mischung verschiedenster Versionen mit Backports und eigenen Programmen und mehreren gescheiterten Upgrade-Versuchen). Argh.

Tja, ich schwanke noch zwischen "umprogrammieren" und "wegschmeißen". Letzteres hätte den Charme, dass ich den ganzen Müll nicht mehr mit mir rumschleppe. Und ehrlich, so viel interessantes hat sich auf meinem Blog eh nie abgespielt. Vielleicht kann ich ja vorher einen wget Mirror anlegen und mir den ganzen Kram irgendwo statisch hinkippen, so als Archiv.

Neuschreiben hat natürlich auch eine Menge Charme, aber die tausenden von alten Einträgen (über 4000 Artikel und über 4000 Links, dazu fast 200 Bilder) aus 8 Jahren (erster Eintrag am 3.11.2002) bloggen zu konvertieren klingt nicht wie Spaß. Und vermutlich sind tausende der Links eh völlig veraltet und hinfällig.

Keine Ahnung was ich mache, vielleicht versuch ich erstmal die Metaeule auf die neue Kiste zu bringen, da hab ich ja "nur" das Problem, dass es PHP4 nicht mehr im Ubuntu Repository für die 10.04 gibt und ich daher die Eule zwangsweise auf PHP5 bringen muss (und das mit Code der auf Wordpress 1.5 aufbaut - ich muss wirklich bekloppt sein).

Oder ich versuch die Installation einer gammelalten Debian mit den damals eingesetzten Paketen - die Kiste läuft eh nicht in der Front, sondern hinter anderen Maschinen, das Hack-Risiko ist an der Stelle ja dann doch eher gering. Die Metaeule hat natürlich auch ein paar Tausend Beiträge im Archiv (nur 8291, ist ja fast nix), aber wenn ich die alte Software weiter am Laufen halten kann (Security-Patches sind da einige im Laufe der Zeit reingelaufen, von daher kann die eigentlich ruhig weiter vor sich hin wurschteln), bräuchte ich die ja nicht zwingend anpacken.

Irgendwie war das mit dem Internet auch so eine richtig blöde Idee ...

Twisted Orchestration Language in Launchpad - und jemand hat die Orc-Kombinatoren nach Python portiert, unter Benutzung von Twisted. Allerdings finde ich persönlich Twisted eher eklig zu programmieren, aber wers mag ...

Kilim - beim Stöbern in den Orc Dokumentationen drüber gestolpert, eine microthread-Lib für Java.

Orc Language - bisher nichts davon gelesen, aber sieht recht interessant aus. Kern ist Cor, eine funktionale Sprache ohne Seiteneffekte und darauf aufbauend dann Orc, die zur Orchestrierung von Services in verteilten Systemen dient. Das ganze in einer recht ansprechenden, kompakten Syntax auf der JVM. Könnte man sich durchaus mal als Alternative zu Scala und Clojure angucken, Java wird dabei als externer Service integriert, dadurch können recht einfach verteilte Systeme gebaut werden, bei denen Teile eben in Java implementiert sind. Erinnert in vielen Punkten stark an die Ideen von Erlang (generell von einem verteilten System ausgehen, aber trotzdem Teile lokal aus Performancegründen halten), wobei ich die Syntax deutlich angenehmer finde. Und mit der JVM eine deutlich weiter verbreitete VM als bei Erlangs BEAM.

Interactive Fabrication » Beautiful Modeler - wow, das ist ausgesprochen cool.

Tornado Web Server Documentation - muss mir doch mal Tornado näher angucken. Hab jetzt für ein Nebenprojekt einen Webservice mit web.py gebaut, was erschreckend simpel (und schmutzig) ging. Tornado baut auf einem sehr ähnlichen Konzept auf, schmeisst Django-ähnliche Templates in den Mix und bietet gleich noch einen guten asynchronen Server und Unterstützung für asynchrone sockets und http requests. Könnte gerade für Webservices eine gute Alternative sein, die wenig Resourcen braucht.

Fat Cat Software - iPhoto Library Manager - da ich so blöd war ein Photobuch auf einem anderen Mac als üblich zu machen (naja, der übliche war halt ständig belegt), muss ich mir jetzt wohl das hier mal angucken um zu schauen ob ich meine Bücher zusammenmergen kann auf eine einzelne Maschine. Schon blöd, dass Apple bei iPhoto keinerlei Merge-Funktion anbietet. Gerade mit einem Notebook und einem Desktop hat man ja doch recht schnell getrennte Libraries. Würde Lightroom Bücherdruck unterstützen wär ich ja eh schon längst weg von iPhoto. Alles irgendwie nicht so ganz befriedigend.

The V4Z80P – A Z80 Based Laptop @ Retroleum - da baut einer nicht nur seinen eigenen Computer mit eigenem System, es ist auch noch gleich ein Laptop. Oder sowas ähnliches jedenfalls.

Oracle cooks up free and premium JVMs - und Oracle beginnt mit dem Versuch des Cash-in auf Java. Wenn es klappt, könnte Java bald in ähnlicher Situation wie .NET sein: die freien Implementierungen hängen hinter dem Umfang der kommerziellen hinterher. Was das für alternative Sprachen auf der JVM bedeutet, muss sich erst zeigen - aber sicherlich wird es für einige Probleme sorgen. Allerdings ist die JVM-Welt groß genug und mit genügend Alternativen ausgestattet, und Oracle ist nicht Microsoft. Von daher könnte das ganze auch bloß wieder ein Sturm im Wasserglas sein und allenfalls die typischen Oracle-Opfer betreffen.

Kunsthalle Bielefeld: Der Westfälische Expressionismus - ich glaub ich hab tatsächlich mal einen Grund nach Bielefeld zu fahren.

Mediathek für Mac OS X - muss ich mir mal angucken. Schliesslich ist ja die Archivierung dank dämlicher Privatsenderhansel (und Politikern, die sich zu deren Erfüllungsgehilfen gemacht haben) heutzutage Sache der Zuschauer.

Panasonic DMC-GF2 Preview: 1. Introduction: Digital Photography Review - ich hasse dich, Panasonic. Jetzt will ich das niedliche kleine GF2+14mm Kit haben. Menno. Erst Apple mit dem MacBook Air und jetzt Panasonic, alle wollen nur mein Geld.

Eventlet Networking Library - muss ich mir mal näher angucken, das monkey-Patching von Standardbibliotheken um diese trivial in einer asynchronen Umgebung zu nutzen sieht sehr interessant aus.

don’t look » columnManager - interessantes jQuery Plugin welches effizientes Spalten ein/ausblenden für Tabellen ermöglicht. Wenn man das mit dem DataTable Plugin verheiraten könnte, wäre es eine sehr praktische Sache.

John Resig - Simple JavaScript Inheritance - sehr nettes Pattern mit dem man Klassenbasierte Vererbung mit JavaScript simulieren kann (für die Situationen, wo diese Struktur mehr Sinn macht als das normale Prototypensystem von JavaScript).

jQuery column cell selector - bramstein.com - noch ein jQuery Plugin, dieses liefert einen praktischen Pseudo-Selektor für Spalten in einer Tabelle um dann mit JavaScript dort Änderungen vorzunehmen.

Inform 7 - mitlerweile ist Inform in eine englisch-ähnliche Sprache zur Erstellung von interaktiver Fiktion geworden. Und hat eine GUI für den Mac bekommen mit dem man die diversen Story-Wege analysieren und testen kann. Irgendwie schon beeindruckend, was da alles entstanden ist, nur für Textadventures.

Coffee on the Keyboard » Bleach, HTML sanitizer and auto-linker - Library von Mozilla die white-list basiertes HTML Cleaning anbietet. Die Mozilla-Leute wissen meistens was sie tun, von daher könnte diese Bibliothek tatsächlich brauchbar sein.