python - 1.3.2010 - 15.9.2010

home | Disco Project - gestern hatte ich schon mincemeat, disco ist ähnlich aber ausgebauter wenn das einfache Modell von mincemeat mal nicht reicht.

octopy - Project Hosting on Google Code - und noch eine kleine und einfache Implementation von mapreduce in Python.

mincemeat.py: MapReduce on Python - stupidly simple map-reduce framework. Einfach ein Python-File und minimaler Code und schon hat man einen map-reduce-cluster.

NodeBox for OpenGL | City in a Bottle - baut auf Pyglet auf und liefert eine 2D Animationsbibliothek für Python.

objgraph - Drawing Python object reference graphs - will ich mir wohl mal angucken, auch wenn ich fürchte meine Speicherstrukturen sind einfach zu wild um sie in grafische Darstellungen zu bringen (viele solche Tools gehen davon aus das alles komplexere sowieso in Objekten gekapselt ist, aber bei einem mehr funktionalen Programmieransatz werden Standarddatenstrukturen viel stärker eingesetzt). Einen Versuch wäre es aber allemal wert.

pyglet - interessante kleine Grafikbibliothek für Python. Schaut nett aus und ist multi-plattform und soll einfach zu installieren sein (keine Abhängigkeiten).

Plac - sehr nette Optionsparser für Kommnadozeilentools. Das besondere: die Parameter werden einfach aus den Funktionsdefinitionen ermittelt und das ganze funktioniert von Python 2.3 aufwärts (mit Abstrichen in der Syntax, da es bei Python 2.3 noch keine Dekoratoren gab und erst mit Python 3 Annotationen existieren). Scheint eine gute Möglichkeit zu sein Tools zu bauen die auf mehreren Python-Versionen laufen sollen (denn sonst bleibt nur getopt und das ist wirklich sehr primitiv).

Python Datastructures Backed by Redis @ Irrational Exuberance - Redis selber ist schon sehr interessant, weil es nicht einfach ein simpler Key-Value-Store ist, sondern als Value strukturierte Daten (Listen, Sets) erlaubt sind. Und mit dieser Library werden Redis Strukturen als normale Python-Datentypen erreichbar und damit die Programmierung mit Redis nochmal vereinfacht. Kombiniert mit der Replikation in Redis könnte das sehr interessant in Clusterumgebungen sein.

Paver: Easy Scripting for Software Projects - interessanter kleiner Ersatz für Make. Speziell im Zusammenhang mit Python Projekten klingt es sehr nützlich.

Pysistence - gerade mal geguckt ob es sowas gibt oder ob ich es selber schreiben sollte. Pysistence implementiert funktionale persistente Datenstrukturen für Python. Bedeutet in diesem Fall dass es keine seiteneffekte gibt, sondern dass jede Funktion darauf eine neue Version der Daten liefert, wobei gemeinsame Teilstrukturen in verschiedenen Versionen miteinander geteilt werden (um effizient damit arbeiten zu können sowohl was Laufzeit als auch Platzbedarf angeht). Muss ich mir unbedingt mal angucken, denn in vielen Fällen hat mich das fehlen vernünftiger Implementationen von funktionalen Datenstrukturen in Python gestört.

The Official web2py Book - bin zwar Djangonaut, aber hier gibts ein web2py Buch online. Und schadet ja nicht mal über den Horizont zu gucken.

Meliae python memory analysis in Launchpad - klingt sehr interessant, mal für spätere Probleme geblogmarkt, könnte bei dem einen oder anderen Problem helfen. Installation übrigens recht einfach über pip install meliae oder easy_install meliae, es ist auch auf pypi gelistet.

[Cython] ANN: Cython 0.13 released! - bei Cython (ehemals PyRex) gibts wieder ein neues Release. Und die Sprache für Python-Erweiterungen wird immer vollständiger. Damit ist die Erstellung von performance-kritischen Teilen des Codes deutlich einfacher, weil man in einer sehr Python-ähnlichen Sprache arbeiten kann.

Scribes - Simple And Powerful Text Editor for GNOME - interessantes Projekt, ein Editor der in Python erweiterbar ist. Da ich auffe Arbeit in Linux schaffe, könte ich mir das nach dem Urlaub mal angucken.

PEP 380 -- Syntax for Delegating to a Subgenerator - ein sehr interessanter Punkt zur Erweiterung von Python. So interessant, dass Guido sich vorstellen könnte diesen PEP am Moratorium vorbei schon jetzt zu implementieren. Generatoren in Python entwickeln sich für mich zu einem sehr angenehmen Sprachfeature - Code wird sehr oft deutlich kompakter und lesbarer für mich. Wenn nur endlich Django auch auf Python 3 verfügbar wäre könnte ich auch einige der dort vorhandenen Neuerungen benutzen. Python 2.7 lindert allerdings den Schmerz etwas.

saucelabs's monocle at master - GitHub - interessantes Paket zur einfacheren Programmierung von asynchronen Routinen in Python. Besonders interessant: es unterstützt neben Twisted auch Tornado.

Valued Lessons: Monads in Python (with nice syntax!) - sehr interessanter Hack, der durchaus auch praktischen Nutzen haben kann. Gefunden beim Schockwellenreiter.

Python IDE with Django support : JetBrains PyCharm - die JetBrains Leute (von denen IntelliJ ist) haben jetzt eine reine Python IDE auf der Basis von IntelliJ gebaut und die hat eine Menge interessanter Features. Müsste ich mir mal angucken, zumal die auch Unterstützung für Django und Google App Engine drin hat.

Lightweight Approach to AOP in Python - und da wir gerade bei AOP sind: gibts auch als library für Python.

jessenoller.com - PEP 3148 Accepted: “futures – execute computations asynchronously” - der PEP ist mir ein bischen zu sehr an der Java Welt orientiert, eine schlankere und mehr Python-spezifische Implementierung wäre mir lieber gewesen, aber immerhin. Besonders interessant die Überlegungen die Concurrency Sachen mal durchzugucken und neu zu sortieren.

Dropbox API - und das könnte für die nächste Zeit ein recht wichtiges Spielzeug für mich werden - eine API für Dropbox. Klar, meistens muss ich nur Files hin- und herschicken, da reicht es einfach Dropbox zu benutzen. Aber für manche Sachen wäre eine API zum Zugriff auf die Metadaten auf Dropbox durchaus interessant (eines meiner schon länger auf Halde liegenden Projekte wäre eine Umsetzung des Simpletext.ws Dienstes von Google App Engine auf einen normalen Python-Dienst mit Dropbox als Backend zum Beispiel).

Python 2.7 Release - einige gute Sachen drin, speziell die set und dictionary comprehensions mag ich - bisher habe ich mir mit Generator-comprehensions beholfen, aber gerade die dict-comprehensions sehen einfach besser und lesbarer aus. Aufgrund diverser Abhängigkeiten bin ich auf der Arbeit wohl noch auf längere Zeit an Python2 gebunden, da ist es schön, dass einige der Python3 Features auch in Python2 verfügbar werden. Allerdings bin ich einer derjenigen, die wirklich Python3 wollen - allein schon das deutlich aufgeräumtere Stringhandling mit Unicode als Default. Aber solange Django nicht auf Python3 läuft, bleib ich notgedrungen auf Python2.

jessemiller's HamlPy - muss ich mir mal angucken, eine Implementation von HAML (im Prinzip eine Kurznotation für HTML) mit Integration für Django. Gerade für die vielen kleinen internen Templates könnte das interessant sein, denn die werden von Programmierern und nicht Designern gemacht. Allerdings müsste ich mir dann erstmal angucken wie gut (oder wie schlecht) ich damit JavaScript integriert bekomme. Aber sicherlich interessant - HTML ist nicht wirklich Diff/Merge-freundlich und schlichtweg nervig zu schreiben und zu lesen.

Nicholas Piël » ZeroMQ an introduction - kurzer Überblick wie asynchrones Messaging mit ZeroMQ und Python aussieht und wie die verschiedenen Messaging-Szenarien abgebildete werden können. Sollte ich mir mal genauer angucken, denn es ist sowas wie ein deconstructed Framework für Messaging - also nur die Bausteine um ein eigenes, optimal auf das Problem zugeschnittenes, Messaginng System bauen zu können.

PyFilesystem 0.3 released - schaut interessant aus, Dateisysteme in und mit Python. Man kann FUSE Dateisysteme in Python schreiben oder einfach auch nur auf Amazon S3 oder FTP mit dem gleichen Code zugreifen.

PyPy Status Blog: A JIT for Regular Expression Matching - sowas ist der Grund, warum ich durchaus glaube, dass die Zukunft von Python PyPy heisst (oder etwas vergleichbares) und warum ich sowas wie PyPy haben will. Eine Umgebung, in der alle Sprachelemente auf eine gemeinsame Basis zurückgeführt werden, in der ich auf allen Abstraktionsebenen arbeiten kann - notfalls auch auf der Ebene der Codegenerierung. Das bietet wesentlich angenehmere Optimierungsmöglichkeiten als das Modell von CPython, wo höhere Performance ab einem Punkt nur durch C-Erweiterungen machbar ist. Allerdings komme ich auch von Lisp, wo es völlig üblich ist, von High-Level-Sprachelementen bis runter auf die Codegenerierung mit einer Sprachfamilie zu arbeiten. Meine Xerox Lisp Maschine hatte einen TCP/IP Stack in einem Subset von Interlisp geschrieben - das ist durchaus mit der Situation von PyPy und RPython vergleichbar.

nutshell — Lettuce v0.1.2 (barium release) documentation - lettuce ist cucumber für Python. cucumber ist BDD für Ruby. BDD ist behaviour driven development - zuerst schreibt man BDD stories, dann schreibt man dazu den Code und ein kleines Python-Modul, welches die Story mit dem Code verbindet. Daraus ergibt sich dann automatisch der Testcode. Sieht auf den ersten Blick etwas albern aus, aber hat einfach den Vorteil, dass sich Testfälle tatsächlich an spezifiziertem Verhalten orientieren und nicht einfach abstrakt in den Wald programmiert werden. In Kombination mit testcase-pro-bugreport liefert das eine recht brauchbare Testumgebung.

Plac: Parsing the Command Line the Easy Way - interessante Bibliothek zum Parsen von Parametern für Python-Tools. Deutlich kompakter als andere Bibliotheken. Parameter werden per inspect automagisch aus definierten Funktionen abgeleitet.

Python Package Index : Baker 1.1 - und noch eine weitere Alternative eines mehr deklarativen Kommandozeilenparsers.

Aeracode :: On Django And Migrations - South core libraries wandern in der nächsten Zeit möglicherweise in den Django core (vielleicht mit Target Django 1.4). I approve. Die Basis für Migrationen schon im Django core zu haben wäre nicht nur für Migrationen hilfreich, sondern auch für Projekten in denen höhere Dynamik in den Datenmodellen gefordert ist - mein derzeitiger Hack mit sqldiff und einigem selbstgestrickten ist eben nur genau das: ein Hack. Wird wohl Zeit mir South mal genauer anzugucken (bisher nur grob reingeschaut, aber was ich gesehen habe gefiel mir) und zu überlegen, ob ich nicht schon jetzt meinen Hack auf eine etwas leistungsfähigere Basis stelle.

HackageDB: berp-0.0.1 - jemand programmiert einen Python 3 Compiler und Interpreter in Haskell. Zumindestens rein intellektuell ganz interessant.

daemon 1.0 - der erste der üblichen Verdächtigen für Unix-Daemonen mit Python.

pyquery: a jquery-like library for python - unbedingt mal angucken, denn das ist etwas das mich schon die ganze Zeit nervt, die Libraries zum Zugriff auf XML-Daten in Python sind etwas primitiv. Und jQuery mag ich sehr, dessen Zugriffsmuster find ich einfach ausgesprochen praktikabel.

python-daemon 1.5.5 - und der zweite der üblichen Verdächtigen (der hier ist schon fast sowas wie offiziell, zumindestens orientiert er sich an einem PEP) zum Schreiben von Unix-Daemonen mit Python.

Spring Python - keine Ahnung was es wert ist, ich hab bisher Spring unter Java nicht benutzt (naja, benutze ja Java sowieso eigentlich nie, höchstens mal die JVM), aber man liest ne Menge positive Kommentare über Spring. Hier hat jemand die Ideen nach Python übertragen - gibt sogar ein Buch darüber. Ich weiss allerdings nicht, ob ein Framework für eine bondage-and-discipline Sprache sich so gut auf eine hoch-dynamische Sprache wie Python portiert. Könnte man sich in einer ruhigen Stunde aber mal angucken.

Turkmenbashi 1.0.0 - eine Library um Unix-Daemonen zu schreiben. Bringt ein paar mehr Features mit als die anderen üblichen Verdächtigen (daemon und python-daemon).

parsedatetime - sehr praktische Library, die "normale" Datumsangaben (leider nur in Englisch soweit ich sehe) in Python datetime Objekte umsetzt.

PyPy Status Blog: Running wxPython on top of pypy - PyPy macht wirklich riesen Schritte in Richtung brauchbar. Schneller als CPython ist es schon in einigen Fällen und jetzt laufen auch größere C-Erweiterungen wie wxPython. Cool.

Zoolander - eine kleine Python-Library, mit der man Python als DSL für die Erzeugung von CSS benutzen kann. Klingt erstmal unsinnig, aber wenn man CSS dynamisch produzieren will oder muss, und das ganze dann in ein Webframework einbettet, kann es ganz praktisch sein.

django-pagination - muss ich mir mal genauer angucken, sieht interessant aus. Pagination ist zwar nicht wirklich schwierig, aber lästig jedesmal selber zu bauen - und die bordeigenen Mittel von Django sind nicht immer optimal dafür (besonders bei großen Datenmengen).

Markdoc - interessantes Projekt, ein simples Wiki mit einer Besonderheit: es wird nicht über das Web editiert, sondern über ein DVCS wie Mercurial oder Git. Also einfach normale Texteditoren, als Format Markdown und ein DVCS für die Versionierung, rsync für die Verteilung der generierten - statischen! - Inhalte auf den Server und fertig. Und ist in Python geschrieben.

Writing a non-relational Django backend - Django nonrel / NoSQL blog - All buttons pressed - bin ja nicht so der Fan von NoSQL (meiner Meinung nach spiegeln viele NoSQL-Ansätze eher das Unverständnis von relationalen Datenbanken wieder als tatsächliche Mängel oder Schwächen der relationalen Datenbanken), aber wenn schon NoSQL, dann doch am liebsten über den Django-ORM, denn den kann ich ganz gut leiden. Und hier wird gezeigt, wie man mit relativ geringem Aufwand einen Django-ORM-Wrapper für NoSQL-Datenbanken bauen kann.

NLTK Home (Natural Language Toolkit) - und wenn es etwas leistungsfähiger und flexibler werden soll, das hier ist sozusagen der Bauchladen für Parser. Fokus liegt auf der Analyse natürlicher Sprachen, daher auch so Sachen wie Stemmer (Stammfindung für Wortformen) enthalten. Könnte aber für einfache eingebettete Sprachen dann doch eher Overkill sein.

Python Package Index : Esrapy 0.5 - ein Parser und Lexer Toolkit komplett in Python. Könnte später mal interessant werden in einigen Projekten, zumindestens für kleinere Konfigurationssprachen.

Building Skills in Python - Online-Buch über Python für Programmierer, die einfach die Sprache noch nicht kennen. Sieht sehr gut gemacht aus, auf den ersten Blick.

Bottle: Python Web Framework - super-simples Python-Web-Framework das als ein einzelnes Python-File daherkommt. Keine Abhängigkeiten außer von der Standardbibliothek. Kein integrierter ORM, aber dafür sehr schlank und vielleicht gerade für Projekte interessant bei denen man eh keine Datenbank braucht oder will (oder das Dateisystem als Datenbank benutzt).

clojure-python - interessantes Projekt das die Interoperabilität zwischen Jython und Clojure vereinfachen will und auf einen ähnlichen Level heben will, wie sie zwischen Clojure und Java schon ist. Besonders interessant für mich, weil es mir dann erlauben würde, stärker auf Clojure als Alternative zu setzen - Jython ist schon geplanter Baustein der Werkzeugkiste, hat aber einige Performance-Probleme die Clojure durch direktere Java-Integration nicht hat. Ausserdem schreib ich lieber kompakten Lisp-Code als geschwätziges Java ...

digg's lazyboy at master - GitHub - weil key-value-datastores im Moment total der Hype sind (und weil sie wirklich für manche Sachen praktischer sind als klassische Datenbanken), werd ich mir wohl Cassandra angucken. Einfach weil es nach Berichten im Web die besten Skalierungsmöglichkeiten bietet. Und weil es in einigen großen Websites im Einsatz ist - speziell zum Beispiel bei Digg (das ich als Site zwar doof finde, aber hey, die haben ordentlich traffic und laufen relativ stabil) mit lazyboy als Python-Anbindung.

17.6. multiprocessing - viel besser als externe module für Prozess-Kommunikation sind die seit Python 2.6 mitgelieferten Tools in multiprocessing.

rfc1437 / lazypy / source — bitbucket.org - und noch ein Projekt von mir (wieder) online. Lazypy ist eine kleine Bibliothek die lazy evaluation und futures (thread und process basiert) für Python verfügbar macht. Sehr praktisch für die einfache Programmierung von Nebenläufigkeit. Ok, man kann alles auch von Hand machen, aber ich mag halt den etwas funktionaleren Ansatz lieber. Ist eigentlich aus 2004, aber ich habs mal modernisiert (die prozess-basierten Futures zur Umgehung des GIL) und neu hochgeladen.