python - 25.11.2004 - 5.7.2005

PHP-Serialize für Python

Hurring.com : Code Vault : Python : PHP-Python Serialize : v0.3b ist eine Implementation des PHP serialize() Zeugs in Python. Sehr praktisch für WordPress: in den Optionen werden oft serialisierte Strukturen gespeichert die man so wieder auflösen kann - man kann so z.B. Tools schreiben, die direkt auf der Datenbank aufsetzen, aber in Python geschrieben sind. Der Autor hat das gleiche auch noch mal für Perl gemacht - man kann also zwischen Python, Perl und PHP einfache Datenstrukturen hin und her schieben.

PEP 342 -- Coroutines via Enhanced Generators

PEP 342 beschreibt einfache Coroutinen für Python. Coroutinen sind im Prinzip Mini-Threads mit manueller Kontrolle - man kann Code mitten drin einfrieren und mit einem neuen definierten Wert wieder aufstarten. Damit bieten Coroutinen den ersten Schritt zu primitiven Continuations - das einzige was noch fehlt wäre die Möglichkeit eine Coroutine zu kopieren.

Philip J. Eby schreibt über die Implementierung dieses PEP - der übrigens auf den Generatoren und Iteratoren von Python aufbaut.

Also los, Leute, sorgt endlich für die Kopierbarkeit von Generatoren und es ist geschafft

FramerD ist eine Objektdatenbank (ok, ein Framestore - ist aber was ähnliches) mit integriertem DB-Server, CGI-Interface und Scheme-Scriptsprache. Ideal um Wissensdatenbanken aufzubauen, da FramerD auf die dabei anfallenden pointerlastigen Strukturen optimiert ist. Aber auch so sehr spannend, da man ein Scheme mit Server und ODB bekommt. Muss ich unbedingt mal mit spielen, zumal es auch auf OS X kompilieren soll (was es bei mir aber derzeit nicht tut). Und es ist unter GPL lizensiert. Und für die Schlangenbeschwörer unter den Klammeraffen gibts auch eine experimentelle Pythonlibrary zum Zugriff auf FramerD...

SPE-OSX kommt aus der gleichen Schmiede wie AquaMacs und ist eine Zusammenstellung von Stanis Python Editor - einer sehr vollständigen IDE für Python. Auch erst ab 10.3.

PythonEggs sind sowas wie .jar-Files für Python. Nur das sie auf ZIP aufbauen. Wird auch endlich Zeit, das man Python-Anwendungen als ein einzelnes File mit Abhängigkeitsdefinitionen runterladen kann und die Installation von Python Anwendungen damit endlich einfacher wird.

Und wer kein Lisp mag oder kann, vielleicht hilft ja SAJAX - Simple Ajax Toolkit by ModernMethod - XMLHTTPRequest Toolkit for PHP das nicht nur PHP sondern auch noch Io, Lua, Perl, Python und Ruby unterstützt.

CherryFlow - Continuations in Python

CherryFlow ist ein Continuation-based Framework für Python und CherryPy. Damit lassen sich auch in Python continuation-basierte Webserver bauen. Das besondere: CherryFlow benutzt entweder Stackless' dumpable Generators oder StateSaver, eine kleine C-Erweiterung die es unter normalem Python erlaubt laufende Generatoren zu kopieren. Genau das was ich damals gesucht habe um meine Continuations für Python zu vervollständigen

The fate of reduce() in Python 3000

The fate of reduce() in Python 3000 - tja, dann wird es wohl wirklich Zeit für mich die Sprache zu wechseln. Denn wer so blöd ist sich von Lisp-Wurzeln zu lösen wird nichts weiter schaffen als die mächtigeren Möglichkeiten mit primitiven Mitteln nachzubauen. Ruby sieht auch sehr brauchbar aus und so langsam gewöhne ich mich an die Syntax ...

Anonyme Funktionen (lambda in Python, Blöcke in Ruby oder Smalltalk) sind weitaus mehr als nur obskure Lisp-Überbleibsel. Ich hab viele Programmstücke die genau davon leben das ich Codeblöcke anonym durchreichen kann - letzten Endes dient das dazu seine eigenen Programmstrukturen zu schreiben. In Smalltalk und ähnlichen Sprachen (und in gewissem Sinne auch in Ruby) kann man darüber eine Sprache selber erweitern und entwickeln - was gerade einer der Stärken von Lisp und seinen Freunden ist (und deshalb ja auch in Smalltalk und seinen Freunden sich wiederfindet - die Smalltalk-Entwickler hatten eine Menge Lisp-Know-How).

Sprachen die sich an der Stelle selber kastrieren und meinen das Iteratoren und List-Comprehension (im Prinzip nichts weiter als verkürzt geschriebene Schleifen) wirklich ein brauchbarer Ersatz dafür sind sich eigene Kontrollstrukturen und eigene Sprachmittel programmieren zu können sind für mich mitlerweile völlig uninteressant geworden. Ich mag keine Sprachdesigner die meinen schlauer als der spätere Programmierer zu sein und denen ein Sprachkorsett aufzwingen wollen.

Aranha server monitor

Der freshmeat.net: Aranha server monitor klingt exakt wie das was ich unter Servermonitoring programmiert habe. Ich benutze allerdings nicht XML-RPC, sondern SOAP. Und ich hab das ganze nicht mit einer XUL Oberfläche, sondern mit einer Weboberfläche versehen. Und ich benutze kein Perl, sondern Python. Strange.

erstauntes Gesicht

Meins läuft übrigens schon seit Ewigkeiten in der Firma und versieht dort brav seinen Dienst bei der Überwachung unseres Serverzoos.

Ape kann Python-Objekte in Zope transparent auf Filesystemobjekte oder PostgreSQL Datenbanken mappen. Könnte auf der Arbeit sehr interessant sein. Kann auch standalone (ohne Zope) benutzt werden.

Ian Bicking vergleicht FileSystemView vs. LocalFS als Alternativen um Zope-Objekte im Filesystem zu speichern.

Deep Links finden in Logfiles

Weil mich der Pepino gerade danach fragte hab ich mal mein Deep Link Finder Script online gestellt. Es ist ein einfaches Python Script. Sollte ab Python 2.2 laufen, möglicherweise sogar mit Python 2.1 (ist aber nicht getestet). Das Script wird im Source konfiguriert (ich hab Kommentare dazu geschrieben) und dann einfach mit mehreren Logfiles als Parameter aufgerufen. Es sammelt aus Apache Combined Logs raus welche Sites wie oft auf angegebene Dateitypen (konfigurierbar, eingestellt sind einige Bildertypen) deep linked. Es spuckt dazu ein HTML Fragment raus das man mit Header und Footer garnieren kann um es online zu stellen - zum Beispiel entstehen so meine Zeitgeist-Seite für Deep Links. Die anderen Seiten haben ähnlich aufgebaute Scripte, nur das halt Suchbegriffe und generelle Referrer eingesammelt werden.

Ich guck mir ab und an die Deep Linker Liste an und wenn dann da jemand auftaucht der recht viel deep linkt und kein Aggregator oder News-Service ist, dann kriegt derjenige ein entsprechendes Austauschbild vorgesetzt. Aber eben auch wirklich nur diese Sites. Mich stört das nämlich auch immer wenn mir in meinem Feedreader unterstellt wird ich sei ein Bilderdieb oder Traffic-Räuber

Optimization Surprises

In dirtSimple.org: Optimization Surprises schreibt Phillip J. Eby über Optimierungen die er an seiner Implementation von generischen Funktionen in Python gemacht hat. Ich finde es immer wieder faszinierend wenn er über dieses Projekt schreibt, weil mir generische Funktionen gut aus Common Lisp bekannt sind. Faszinierend ist allerdings auch wie er halbe Mikrosekunden an Performance rausquetscht

In seinem Fall macht das übrigens durchaus Sinn, da es ja um eine zentrale Maschinerie geht die bei generischen Funktionen ständig aufgerufen wird. Minimale Performancesteigerungen machen in engen Schleifen eine ganze Menge aus.

Auch sehr interessant ist was er über die inneren Mechanismen von Python herausfindet und welche Auswirkungen z.B. alleine die Existenz von Closures in einer Funktion auf die Abläufe hat.

Spannend. Absolut spannend.

Orange Data Mining

Mal wieder ein Link für die Zahlenfresser: Orange ist eine Datamining-Library mit Python-Integration und eine - zumindestens nach den Screenshots - interessanten GUI.

Ein erstes Python Beispiel in Frontier ist jetzt online. Sieht sehr interessant aus - ich würd mir wünschen das jetzt mal jemand Binaries baut, denn XCode habe ich ja - wegen 10.2 - noch nicht. Und ich würd damit doch so gerne rumspielen ...

Subway ist eine Python-Implementierung der Ideen von Ruby on Rails. Wer also Angst hat sich an den ganzen spitzen und geschweiften Klammern in Ruby zu verletzen ...

The Temboz RSS aggregator

The Temboz RSS aggregator ist ein sehr nett gemachter Aggregator in Python. Er benutzt den Ultraliberal Feedparser für das Parsing und kann OPML importieren. Die Oberfläche finde ich schick gestaltet und die Administration ist recht simpel. Und er hat ein paar nette Features wie das zweispaltige Layout und die recht einfache integrierte Filtermöglichkeit sowie recht brauchbare Feedlistensortierungen. Ich spiel mit dem gerade mal ein bischen herum - auch wenn das warscheinlich meine Motivation einen eigenen Aggregator zu schreiben reduzieren wird

MonkeyTyping - The PEAK Developers' Center

MonkeyTyping ist Phillip J. Ebys Ansatz für optional statisches Typing in Python. Sieht sehr interessant aus, die Idee. Was mich an Phillip immer wieder begeistert ist seine Fähigkeit über den Sprachtellerrand zu gucken - man denke nur an seine Arbeiten für generische Funktionen in Python. Genau solche Schübe braucht Python mal dringend wieder - einige Diskussionen rund um Python zeigen die ersten Anzeichen von Sprach-Inzucht (zum Beispiel diese nahezu Hass-Reaktionen auf die Erwähnung von Lisp und Lips-Features bei einigen Python-Advocates).

Second p0st: cElementTree hat jetzt eine C-Variante zur Beschleunigung des Ablaufs. Damit wird es eine echte Alternative zu anderen DOM Implementierungen.

dirtSimple.org: CLOS-style Method Combination for Generic Functions

Phillip J. Eby beweist einmal mehr das jede Programmiersprache die was werden will dazu verdammt ist irgendwann Common Lisp zu werden

Mir gefällt was er macht - gerade das Objektsystem von Python ist doch etwas primitiv und generische Funktionen und Methodenkombinationen im CLOS Stil sind sehr praktische Mittel bei der Programmierung. Auch seine erweiterte Objektadaption in PyProtocols war schon interessant, aber das recht vollständige Objektmodell mit Anlehnung an CLOS ist definitiv reizvoll.

Ich würde mir ja wünschen das sich Guido van Rossum mehr Gedanken darüber macht wie er PJEs Zeug in Python integriert als darüber wie er optional statische Datentypen einführt.

Aquarium - Webframework mit MVC Ansatz in Python - vergleichbar Rails?

appscript - Python als Ersatz für AppleScript nutzen - volle AppleEvent und OSA Einbindung

Impostor - Continuation-basierte Webanwendungen mit Python

Revision 8033: /user/arigo/greenlet - Minimalistische Threads (Tasklets wie in Stackless Python) als normales Python C Modul

ASPN : Python Cookbook : A meta-class that provides class behavior like Ruby - Klassenüberladung (Definition neuer Methoden) mit Python im Ruby-Stil

Gus Mueller's Website - VooDooPad Plugins mit Python und PyOBJC schreiben

recondite: You don't tug on Superman's cape... - Python zur virtuellen Maschine von VisualWorks Smalltalk compilieren

Codewalker für Pyton - Ein Codewalker der diverse Änderungen am Code von Lambda-Ausdrücken machen kann (speziell early binding etc.)

Xoltar Python Page - diverse Funktionale Erweiterungen zu Python - curry, lazy expressions, partial evaluation etc.

Python ist eine schwach typisierte Sprache, was, wie jeder erfahrene Python-Programmierer weiß, sowohl Vor- als auch Nachteile hat - Traits - optionale Typdeklarationen für Attribute in Python

Snurf: a Python-based Blogging System - nettes kleines Blogsystem das keine Datenbank braucht

Verzögerte Ausführung mit Python

Der ursprüngliche Text ist auf das PyDS Weblog umgezogen. Der Grund ist das ich mit der neuen Software den Text nicht vernünftig verwalten kann, weil die nötigen Tools hier nicht verfügbar sind (speziell das Sourcecodeformatieren klappt hier nicht, ausserdem ist der Text zu riesig - jedenfalls wenn er als XHTML gespeichert ist).

Charming Python: Implementing "weightless threads" with Python generators - Sehr interessantes Konzept wie man extrem resourcenschonende Threads in Python mit Generatoren baut - kooperatives Multitasking in 100% Python

Contracts for Python - Programming by Contract in Python auf Basis von umschreibenden Metaklassen

ReportLab - PyRXP - Sehr schneller validierender XML Parser für Python - baut auf RXP auf

GadflyB5: SQL Relational Database in Python - 100% pure Python SQL Datenbank

Barebones pure-Python PostgreSQL client - PostgreSQL Client in reinem Python - kein C Compiler benötigt, daher sehr portabel, aber auch feature-ärmer

REgurgitate - Beispiel wie man Python Code tokenisiert und wieder zusammenbaut

StupidSheet - Noch ein Beispiel für tokenize - ein kleines pure-Python Spreadsheet

PyX - Python graphics package - 2D und 3D Grafiken präsentationstauglich in Python generieren

Durus - Kompakte Objektdatenbank für Python - schnell, aber für lese-lastige Systeme ausgelegt

Statement coverage for Python - Primitive Code-Coverage Analyse für Python

xmltramp: Make XML documents easily accessible. - kleine kompakte XML Parser und Generator Library für Python - schön integriert in die Syntax

RDFLib 2.0.4 Readme - Library zur Arbeit mit RDF in Python

ASPN : Python Cookbook : Spreadsheet - ein paar ideen für kontrolliertes eval in Python

Pyco - Tiny Python Distributions - kleine Windows-EXEs aus Python Tools bauen.

Lasso - Souk - Python Modul zur Integration des Liberty Alliance Single Signon Protokolls.

Python Paketindex: pyDB2 0.996a - DB/2 API für Python - das brauche ich bei der Arbeit

SimpleTAL - standalone TAL und METAL Implementation