python - 21.9.2010 - 30.1.2011

cfbolz / Pyrolog. Interessantes Projekt, weil das Prolog in Python geschrieben ist, aber die PyPy Toolchain für den JIT benutzt - das gibt einen schönen Einblick was mit PyPy neben Python alles möglich ist.

Sho - Microsoft Research. So ein bischen wie SciPy und Sage (dem Teil von Sage, der sich mit Datenanalyse und -visualisierung beschäftigt), nur auf IronPython und .NET aufbauend.

PyPy Status Blog: PyPy wants you! - yay! Fast-forward in PyPy gemerged! Das bedeutet bald ein 2.7 kompatibles PyPy - das Projekt sucht jetzt Contributoren, die 2.7 Features implementieren, die noch fehlen. Die nächste PyPy Version wird sehr interessant!.

Tail Call Optimization Decorator - jemand hat Python Tailrecursion beigebracht, als Dekorator. Sehr cool. Jemand anderes hat das aufgegriffen und zwei schnellere Versionen gebaut, die allerdings kleine Einschränkungen in der Nutzung haben. Und bei LTU hat auch jemand eine Version gemacht - besonders cool an der ist eigentlich nur, dass er mein lazypy Modul benutzt. Und dann hab ich noch eine super-kurze und schnelle Version gefunden, die dann allerdings falsche Ergebnisse liefert, wenn eine Funktion nicht in tailposition aufgerufen wird. Aber da man Tailcalls eh in der Regel in kompakten rekursiven Funktionen benutzt (oder zwei oder wenigen, die mutual recursion machen), sollte man das im Griff haben können.

Pyrates are cool — A wiki about python game development. Drin was drauf steht. Sicherlich nicht alle Sachen verlinkt, aber ist ja ein Wiki, und als Startpunkt für jemanden der gucken will was so alles rund um Spiele mit Python passiert vielleicht ganz interessant.

CLPython - an implementation of Python in Common Lisp. Einfach weil es zwei meiner Lieblingssprachen verheiratet und pure-Python-Libraries für Common Lisp verfügbar macht. Viellericht sieht jetzt der eine oder andere wohin meine Suche geht - den Kuchen essen und ihn behalten. CLPython ist übrigens zu Python 2.5 kompatibel, also sogar ein recht aktueller Sprachlevel (auch wenn mir sicherlich einige Sachen aus 2.6 fehlen werden, aber das ist bei PyPy nicht anders).

About Dirigible - für all die, die ein Spreadsheet in der Wolke wollen, aber nicht wie bei Google Docs mit JavaScript programmieren wollen, sondern mit Python. Als selbstgehostete Lösung fänd ich es ja richtig klasse, speziell wegen der dort beschriebenen einfachen Verknüpfung von Spreadsheets über Servergrenzen.

Emscripten: Python. Ziemlich cool, eine Crosscompilation des Standard-Python nach JavaScript mit Hilfe von Emscripten. Und damit ein volles Python 2.7 (minus vieler Libraries natürlich) im Browserfenster.

pyfilesystem - Project Hosting on Google Code. Könnte mal nützlich sein, wenn man von Python über einheitlichen Code auf verschiedene Filesystemtypen zugreifen will.

IPython as a system shell erklärt die Funktion des sh Profils für iPython. Muss ich mal mit rumspielen, denn Python als Systemshell kann schon sehr hilfreich sein.

Python Package Index : futures 2.0. Gerade drüber gestolpert, ist eines der Features neu in Python 3.2, die Referenzimplementation läuft aber auch mit Python 2.6. Macht im Prinzip sowas wie mein lazypy und lindypy (also löst die gleichen Probleme, aber auf leicht andere Art).

Alex Gaynor -- Getting the most out of tox. Müsste ich mir mal angucken - derzeit bin ich ja noch recht faul beim Erstellen von unittests für meine Projekte, in der Regel teste ich nur gegen die eine Python-Version mit der ich primär arbeite und auch bei den Abhängigkeiten nehm ich nur die, die gerade auf meiner Kiste (bzw. im virtualenv) installiert sind. Wäre mal sinnig da ein etwas umfangreicheres System für aufzubauen, einfach um etwas aussagekräftigere Testergebnisse zu haben.

coleifer/peewee at master - GitHub. Hatte ich bestimmt schon, kleiner ORM für Python der an Django angelehnt ist und mit sqlite tut. Gerade für kleine Webservices interessant, wenn man eben nicht ein großes Framework reinziehen will, sondern einfach nur den Code etwas lesbarer gestalten will. Vorsicht: unterstützt direkt keine vom Programmierer gesteuerten Transaktionen, sondern ist im Prinzip immer im Autocommit Modus. Kann man aber mit relativ wenig Handgriffen anders machen, wenn man will - einfach UpdateQuery, InsertQuery und DeleteQuery ableiten und requires_commit an den Klassen auf False setzen, und eine erweiterte execute Methode definieren, welche einen expliziten commit-Parameter nimmt.

Middleware_and_Utilities - WSGI Wiki. Wenn man mit wsgi als Basis arbeitet, ist es eine gute Idee hier zu gucken was es an WSGI Applikationen und Middleware schon so alles gibt.

Python Package Index : urlrelay 0.7.1. Webservices mit gevent als Basis brauchen URL dispatching, urlrelay scheint da eine interessante kleine WSGI-Library zu sein, die im Gegensatz zu anderen Systemen nur genau das macht und nichts anderes.

Bottle: Python Web Framework sollte ich mir auch mal als Alternative angucken zu web.py - denn in Bottle ist die App einfach eine Sammlung von Funktionen mit Routen und Mappings und nicht immer gleich eine Klasse. Ausserdem können die Funktionen für unterschiedliche Verben verschiedene Parameter haben und JSON wird direkt als Outputformat unterstützt. Für Webservices klingt das noch eine Runde schlanker als web.py - und Sieht für mich auch sauberer in der Struktur aus.

Nicholas Piël » Benchmark of Python Web Servers. Sehr interessantes Benchmarking, ich muss mir definitiv gevent angucken, die Leistung in den Tests ist schon beeindruckend. Update: nachdem ich mir gevent angeguckt habe - ich bin beeindruckt. Für Webservices muss man aufpassen: gevent.wsgi unterstützt nur GET und POST, nur gevent.pywsgi unterstützt auch PUT und DELETE.

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 ...

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.

pyflakes.vim - PyFlakes on-the-fly Python code checking : vim online. Gucke ich mir auch gerade an, denn es liefert einige interessante Tools für Python und speziell mit MacVim zusammen ist es recht gut zu benutzen.

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).

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.

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.

Blogofile - bin ich drüber gestolpert, als ich überlegt hab was ich mache. Eine der vielen statischen Blogmaschinen in Python mit Git-Integration. Könnte für kleinere Sites unter Umständen mal interessant werden (oder z.B. für ein Metablog).

Aus der Abteilung "pimp my Vim": UltimateVimPythonSetup. Ich bin ja durchaus Vim Fan, und einige der Tips da drin klingen ganz interessant. Allerdings geht mir manches dann auch ein bischen zu weit, mein Grund Vim zu benutzen ist ja gerade dass ich keine IDE will, sondern einen Editor der hauptsächlich das macht - Source editieren. Aber für den einen oder andren da draussen vielleicht trotzdem (oder gerade) interessant.

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.

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.

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.

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.

robhudson's django-debug-toolbar at master - GitHub - ok, dieses Werkzeug ist ganz offiziell hugo-approved. Schlichtweg genial, liefert genau die richtige Menge an Informationen für Django-Entwicklung und beisst sich nicht mit vorhandenen Layouts (jedenfalls bei mir hats bei Experimenten gut geklappt).

postgres 9 streaming replication and django balancer - Santana läuft zwar noch nicht mit Django 1.2, aber der Balancer für Datenbankzugriffe kombiniert mit PostgreSQL Replikation klingt nach einer netten Methode um Django-Systeme hochzuskalieren wenn die normalen Mittel mit einer Datenbank nicht mehr ausreichen. Muss mir vielleicht mal eine Spielinstallation anlegen.

Fuzzy Mathematics with FuzzPy (Part 1) | Mad Python - wenn es nicht nur um unscharfe Zahlen oder Fehlerpropagation geht, sonder auch unscharfe Mengen oder Graphen von Interesse sind, könnte dieses Modul weiterhelfen.

buckingham - Project Hosting on Google Code - interessantes Projekt das nicht nur Fehlerpropagation bei Berechnungen mitführt (hatten wir ja schon mal vor kurzem), sondern auch Einheiten berücksichtigen kann und Konvertierung zwischen Einheiten beherrscht.

Camelot - See it - eigentlich naheliegend: man nehme Python und einen ORM (hier SQLAlchemy) und mache daraus eine 4G Sprache zur Datenbankprogrammierung mit QT als Grafikoberfläche. Das ganze hier als GPL Projekt für das man auch kommerzielle Lizenzen bekommen kann, wenn man kommerzielle Programme damit erstellen will.

uncertainties Python package v1.7.0 documentation - sehr interessantes Modul für Python mit dem man Floats mit Unsicherheiten in Funktionen benutzen kann. Besonders interessant für die Situationen wo man die Fehlerpropagation in Berechnungen mitverfolgen muss (z.B. Planzahlen oder Messdaten).

santhoshtr's pypdflib at master - GitHub - könnte ich vielleicht mal brauchen, speziell da ein Sample dabei ist mit dem eingeschränktes HTML nach PDF gerendert wird.

Filtering Dropdown Lists in the Django Admin — Stereoplex - weil es immer wieder gebraucht wird und weil hier einige gute Wege beschrieben sind.

arskom's soaplib at 1_0 - GitHub - und noch eine SOAP Library. Diese kann die Services als WSGI-Applikationen bereitstellen, dadurch kann ich eigentlich das ganze Serverhandling vom Toolserver wegwerfen und durch normale WSGI-Server wie Apache mod_wsgi oder FLUP ersetzen.

pysimplesoap - Project Hosting on Google Code - da ich immer noch so ein Arbeitsprojekt offen habe meinen Toolserver zu modernisieren, das hier könnte da in Frage kommen für die Ablösung des doch arg veralteten (und seit Jahren buggy) SOAPpy.

Using the ElementTree Module to Generate SOAP Messages - und noch eine SOAP Library, diese baut auf dem netten ElementTree Parser auf. Und ist vom effbot gebaut, das lässt auch einiges erhoffen (der kann XML).

dcramer's django-sentry at master - GitHub - leider nur Django 1.2 (mein eigenes internes Framework das auf Django aufbaut ist leider derzeit nicht mit 1.2 kompatibel), aber sehr interessant um Fehlermeldungen aus Django in der Datenbank zu sammeln zwecks späterer Auswertung. Natürlich kann man auch die Fehler sich als Mail schicken lassen, das geht schon mit Bordmitteln, aber gerade wenn mehrere Leute ein System betreuen kann die Speicherung in der Datenbank deutlich bequemer sein.

README - copperhead - Project Hosting on Google Code - interessante Idee, mit Dekoratoren und Introspection in Python eine embedded Language für die Programmierung auf der GPU zu bauen. Oder um es verständlicher zu sagen: Python-Code (eingeschränkter Sprachumfang) in GPU Maschinensprache umsetzen.