programmierung - 27.11.2004 - 26.12.2004

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

Verzögerte Ausführung mit Python

Verzögerte Ausführung - delayed execution oder lazy evaluation - ist ein sehr praktisches Werkzeug in der Programmierung. Leider unterstützen nicht alle Programmmiersprachen dieses Werkzeug direkt. Sprachen die Closures und Objekte unterstützen können aber recht einfach um verzögerte Ausführung erweitert werden. Einen Ansatz für Python beschreibe ich in diesem Text.Der Text enthält eine Reihe von Python-Code-Beispielen die zeigen wie eine ganze Reihe von mächtigen Python Ausdrucksmitteln benutzt werden können. Der Text könnte also auch für die interessant sein, die an lazy evaluation eher weniger Interesse haben. Hier gibts den Originalartikel.

Brian Mastenbrook: Forth porn

Da werden Erinnerungen wach. PowerMops - eine integrierte Forth-Umgebung für den Macintosh - gibts jetzt mitlerweile auch für OS X. Ich hab mir das schon lange nicht mehr angeguckt, aber die Beschreibung klingt noch genauso cool wie damals. Direkte native Code Übersetzung und Integration in die verschiedenen Toolboxen und mitlerweile auch in die Cocoa Frameworks. Und das alles in einem objektorientierten Forth.

Bei Planet Lisp fand ich den den Originalartikel.

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

Microsoft attempts to patent object persistence

Toll - simple und banale Objektserialisierung. Sowas gibts schon seit Jahren, quatsch seit Jahrzehnten. Und Microsoft will das patentieren ...

Bei kasia in a nutshell gibts den Originalartikel.

Adding Optional Static Typing to Python

Guido van Rossum denkt über optionales statisches Typing für Python nach. Sehr interessant, da durch optionales statisches Typing einerseits die hoch dynamische Natur von Python erhalten bleibt, andererseits aber eben als Option für die Optimierung die Typdeklaration zur Verfügung steht. Was sowas bringen kann kann man wunderbar mit PyRex ausprobieren - das schon heute sowas wie ein statisch getyptes Python bietet. Hier gibts den Originalartikel.

Der »Danke Polen!«-Brief

Los Leute, bedankt euch!

Bei Industrial Technology & Witchcraft fand ich den den Originalartikel.

Why's (Poignant) Guide to Ruby

Ok, ich hab ja schon viele verrückte Sachen gesehen. Aber diese Ruby-Einführung ist wirklich völlig durchgeknallt. Unbedingt mal durchblättern. Selbst wenn man keinerlei Interesse an Ruby oder Programmiersprachen hat. Der Autor muss völlig durchgeknallt sein - ich weiss nicht was er sich einwirft um solche Bücher zu produzieren, aber ich hätte gerne zwei Kilo davon

Hier gibts den Originalartikel.

Paolo Amoroso: McCLIM works with CLISP

Way cool: das portabelste aller Common Lisps hat in der letzten Zeit ja ein paar Modernisierungen verpasst bekommen. Und jetzt läuft auch McCLIM darauf - allerdings natürlich nur auf CLX, und damit unter OS X auch nur unter X11. Aber immerhin, es ist durchaus eine interessante Plattform. Zumal CLISP das Common Lisp ist, das am ehesten von der Umgebung her einer Script-Sprache entsprechen kann.

Hmm. CLISP läuft auf dem Zaurus. Auf dem Zaurus gibts auch eine Systemvariante mit X11. Mit CLISP+CLX+McCLIM+X11 müsste man damit auf dem Zaurus die kleinste halbwegs vollständige Lisp-Maschine der Welt bauen können

Bei Planet Lisp gibts den Originalartikel.

Ann: Revival of the BytecodeHacks

Der eine oder andere kennt sie vielleicht noch: die Bytecodehacks für Python. Ein wildes Modul das alle möglichen Schweinereien mit Codeblöcken erlaubte - und unter anderem in älteren Zope-Versionen für die eingeschränkte Ausführung von Python-Methods benutzt wurde. Mit Sicherheit ist das ganze der falsche Ansatz und verstösst gegen guten Geschmack und sinnvolles Programmieren. Ich liebe es.

Hier gibts den Originalartikel.

SnakeSQL -- Pure Python SQL database supporting NULLs and Joins

Nett - eine SQL-Datenbank in Python die deutlich mehr unterstützt als Gadfly (zum Beispiel einfache Joins, Foreign-Keys und Null-Values). Ok, ähnlich wie Gadfly wird es kein Wunder an Performance sein, aber als SQL-Option für deren Installation man keinen C-Compiler braucht taugt es allemal.

Hier gibts den Originalartikel.

Brian Mastenbrook: Old News

Interessante Info am Rande: der Xerox Lisp Emulator - ein von Xerox entwickelter Emulator für ihre Interlisp-Maschinen - ist als Bestandteil der Grammars Writer Workbench enthalten. Ich habe noch einen Diskettensatz Medley Lisp zu Hause rum liegen - und zwei Xerox Lisp Maschinen in der Ecke stehen. Schicke Geräte mit einem netten grafischen System. Ok, weit von der Leistungsfähigkeit einer Symbolics entfernt, aber da es meine ersten Lispmaschinen waren mag ich sie trotzdem irgendwie

Mit dabei bei den Files von Xerox sind die Emulatoren für DOS, Linux, SunOS und Solaris. Ich hätte also eine Chance vielleicht meine alten Medley Sysouts mit Linux zum Laufen zu kriegen.

Irgendwo da drin steckt auch das Medley Common Lisp - also nicht nur das Interlisp-D, welches ja doch ein bischen archaisch ist im Vergleich zu moderneren Lisps (da es z.B. nur dynamischen Scope hat). Ich müsste allerdings erstmal wieder meine alten Interlisp-D Kenntnisse rauskramen um rauszukriegen wie ich nochmal einen Common Lisp Listener auf der Kiste öffne, wenn er nicht im Rootmenü steckt ...

Bei Planet Lisp fand ich den den Originalartikel.

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

GNU Development Tools for the Renesas H8/300[HS] Series - Dokumentation wie man einen Cross-Compiler für den RCX aufbaut

Lego-Mindstorms Simulator - Simulation von LeJOS programmierten RCXen in Java

Noch ein Update: wie man rcxcomm auch mit OS X 10.2 zum Laufen kriegt

Das Problem mit dem rcxcomm-Zeug unter 10.2 liegt daran, das die Header aus dem JNI unter 10.2 mit falschen Links hinterlegt sind und deshalb nicht funktionieren. Zur Reparatur muss man einfach im lejos_2 1 0/rcxcomm/src/Makefile die Zeile wo der CCOPT definiert wird ergänzen:

 CCOPT = -g -O ${JNILIB_TYPE} -framework IOKit -framework CoreFoundation -I/System/Library/Frameworks/JavaVM.framework/Headers -I/System/Library/Frameworks/JavaVM.framework/Versions/1.3.1/Headers

Der hintere Teil ist der neue - ich habe einfach den richtigen Include-Pfad mit eingetragen und schon findet er das jni.h auch. Und kann kompilieren. Ich habe allerdings noch nicht ausprobiert ob das ganze dann auch funktioniert.

The leJOS Tutorial

Wer sich mal angucken will was mit dem LeJOS alles machbar ist, kann sich das in diesem Tutorial zeigen lassen. Da die Dokumentation des LeJOS selber sich nur auf die API beschränkt ist das Tutorial um so wichtiger. Denn auch die beim LeJOS mitgelieferten Demorobots sind reichlich karg ...

Hier gibts den Originalartikel.

XS: Lisp on Lego MindStorms

Cool - ein komplettes Lisp das direkt auf dem RCX läuft. Ideal für die Weihnachtszeit

Leider keine OS X Version, sondern nur was für Windows oder Linux - und letzteres nur für den seriellen Tower. Mal gucken ob ich da was für OS X mit dem USB Tower hinbekomme. Ausserdem bin ich noch auf TinySOAR gestolpert, eine komplette AI Agent Runtime für den Mindstorms RCX Baustein. Auch sehr interessant - und durch die Einbettung in TCL hoffentlich auch in OS X lauffähig.Und ebenfalls für mich neu die Java VM für den RCX: LeJOS. Ich mag zwar kein Java, aber interessant ist das allemal für den RCX.Und der Oldy-but-Goldy: LegOS, das komplette in C geschriebene Betriebssystem für den RCX. Allerdings bedingt durch seine recht heftige Toolchain die benötigt wird (ein kompletter GCC, konfiguriert als Cross-Compiler) etwas haariger zu installieren. Ausserdem heisst es jetzt BrickOS und ist übrigens auch unter dem Lisp als Runtime drunter. Hier gibts den Originalartikel.

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

gb - CIA

Faszinierendes Projekt, das CIA Open Source Notification System. Man hängt ein kleines Script in sein CVS rein und schon wird fleissig jeder Commit protokolliert, gespeichert, verteilt. Es gibt RSS Feeds für jede ansicht und entgegen vielen anderen Projekten die irgendwelche grossen Mengen an Daten aggregieren ist der Laden auch noch rattenschnell. Der Titel verlinkt übrigens auf meinen Benutzer und zeigt auf meine drei dort überwachten Projekte. Wer also neugierig ist, was ich gerade kaputt mache, kann sich da ja den passenden RSS Feed bestellen

Hier gibts den Originalartikel.

Languages for the Java VM

Wen interessiert was es so alles an Programmiersprachen auf der JVM gibt - ja, es gibt weitaus mehr als nur Java. Und viele davon sind wesentlich interessanter als Java. Und viele integrieren sehr gut mit Java Libraries. Jedenfalls hat Robert Tolksdorf hier eine solche Liste angefangen aufzubauen. Keine Ahnung ob sie vollständig ist, aber mir reicht die Auswahl ...

(wobei ich natürlich voreingenommen bin und sowieso nur entweder einen Lisp-Dialekt oder Jython nehmen würde )

Hier gibts den Originalartikel.

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

Bill Clementson: LispWorks 4.4 released

Schaut man sich an wie sich die - eigentlich ursprünglich mal OS X fremde - LispWorks Implementation für OS X stark macht (auch die vorige lief schon sauber unter OS X, diese hat aber wieder mehr zugelegt), dann kann man gut erkennen wie der Distributor der ursprünglich und immer noch MacOS nativen MCL Implementation am Markt abkackt. Positiver kann man das eigentlich nicht benennen - MCL ist mitlerweile meiner Meinung nach als Debakel zu betrachten. Immerhin ist auf deren Webseiten die grösste Neuigkeit für 2004 aus dem Sommer - das sie die Mailingliste wieder am Laufen haben. Toll. MCL war mal der Stern am Lisp-Himmel. Bei Planet Lisp gibts den Originalartikel.

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

IPython - An enhanced Interactive Python

Ich hatte da schon mal eher was zu geschrieben, habe es aber jetzt erst mal wieder intensiver benutzt. Ich muss sagen, das ganze hat sich gewaltig entwickelt. Mit ein paar Einstellungen im System und im IPython benimmt sich das ganze System schon fast so komfortabel wie ein Lisp-System-Prompt.

Die Integration von Anzeigesystem (bei OS X empfiehlt sich das Setzen von LESS auf '-R', damit Farbinformationen ausgewertete werden) und Editor (da empfiehlt sich natürlich der Einsatz von VIM, aber es geht auch ganz gut mit dem bbedit Kommandozeilentool) kann man schon sehr schön mit der Python Shell arbeiten. Zum Einen muss man nicht ständig raus um sich Files mal fix anzugucken oder ein File zu ändern und zum Anderen kriegt man wirklich brauchbare Informationen bei Exceptions (da hilft die automatische Aktivierung des Debuggers).

Auch das automatische deep-reloading - also das neu Laden eines geänderten Moduls mit Umschiessen der enthaltenen Referenzen - hilft ungemein, da man so endlich die Files direkt editieren und sofort testen kann, ohne jedesmal aus dem Python raus zu müssen. Bestehende Referenzen auf Objekte aus Klassen die in dem geänderten File liegen müssen natürlich auch weiterhin neu aufgebaut werden, da sie ja noch die alte Klasse referenzieren.

Alles in allem: sehr empfehlenswert.

Hier gibts den Originalartikel.

Logix Home

Ein sehr interessantes Projekt: auf der normalen Python Laufzeitumgebung aufbauend wird ein Sprache mit weitaus mehr Lisp-ähnlicher Struktur implementiert. Compiliert in den gleichen Bytecode wie Python. Kann mit Python vermengt werden und unterstützt auch IPython als Shell.

Mit Logix fällt zum Beispiel endlich die Schranke zwischen Statement und Expression: in Logix sind alles Expressions. Lambda-Ausdrücke die mehrere Befehle ausführen und bedingte Ausdrücke ohne Umwege über boolesche Ausdrücke werden möglich.

Auch gibt es Makros. Die Definition sieht etwas wild aus, aber es scheinen alle Mechanismen da zu sein wie sie auch in Common Lisp üblich sind. Also nicht nur syntaktischer Zucker, sondern richtige code-generierende Makros.

Im Moment natürlich alles noch Alpha, aber klingt schon sehr interessant. Ich werd das mal weiter beobachten, für mich könnte das durchaus interessant sein. Gerade weil ich es mit Python mischen kann.

Hier gibts den Originalartikel.

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

Ein Lisp-Comic der Makros erklärt

Nette Sache - eine Erläuterung von Lisp-Makros für Anfänger. In Form eines Comics. Makros heissen - passend für das Thema - SPELs.

Hier gibts den Originalartikel.

Mal was entgegen dem XML-Hype

YAML ist eine sehr interessante und kompakte Markup-Sprache. Aber eine, die nicht auf XML oder SGML basiert, sondern im Prinzip sich stark an den alten RFC-Mail-Formaten orientiert. Das geniale daran: die Inhalte sind wesentlich leichter für Menschen zu lesen als die vielen Spitze-Klammer-Dialekte. Und für den Rechner ist das ganze auch noch recht einfach zu parsen - und mächtig ist das ganze auch noch in der Ausdrucksmöglichkeit. Wer dann Lust verspürt mal mit Python YAML-Files zu verarbeiten, mit Syck gibt es eine extrem schnelle Library die auch ein Interface für Python bietet.Im Active Storage Framework for Python benutze ich YAML für den Backup und Restore von Datenbanken und als natives Datenformat. Importieren von YAML-Daten in die Datenbank ist damit sehr einfach - und da YAML hierarchische Daten sind und das Active Storage Framework for Python eine hierarchische Datenbank, passt das alles ganz wunderbar beieinander. Und man muss keine Angst haben sich an den ganzen spitzen Klammern zu verletzen

Hier gibts den Originalartikel.

Sprachunabhängige Typen für YAML - Typ-Tags für YAML-Quellen

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

Living Code

Ein Weblog von jemandem der in Python, PyGame und PyObjc unter OS X (mit Renessaince als GUI System) programmiert. Mit kompletten Beispielapplikationen zum Download. Wer sich mit sowas mal näher beschäftigen will findet da vielleicht die eine oder andere Info.

Hier gibts den Originalartikel.

Renaissance - GNUStep GUI Beschreibungssprache und Bibliothek auch für OS X Cocoa

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

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

Module Pycaml

Interesantes Projekt: jemand hat eine Reimplementation des Python/C APIs für OCaml (natürlich den Native-Code-Compiler, nicht den Bytecode-Interpreter) geschrieben. Damit kann man jetzt folgende Sachen machen:

  • Python-Erweiterungsbibliotheken in OCaml schreiben
  • Python-C-Erweiterungsbibliotheken in OCaml benutzen
  • Python-Module in OCaml benutzen (ganz allgemein den Python-Interpreter in OCaml benutzen)
  • den Python-Toplevel für OCaml benutzen

Klingt alles sehr spannend und könnte für einige Sachen sehr interessant sein - OCaml produziert sehr schnellen Code und kann sich in dem Bereich locker mit C messen. Gerade um den Teil des Codes der in Python zu langsam ist zu realisieren ist OCaml natürlich wegen seiner wesentlich besseren Typsicherheit wesentlich interessanter als C.

Hier gibts den Originalartikel.

Python 2.4

Nu isses raus.

Hier gibts den Originalartikel.

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

Fangs: The Firefox Screen Reader Emulator Extension - Standards-schmandards

Ein Screen-Reader-Emulator für den Firefox. Damit man mal gucken kann, wie die eigenen Seiten in einem Screenreader rüberkommen würden.

Hier gibts den Originalartikel.

tsearch-v2-intro - Einführung in tsearch2 - eine Volltextindextechnik für PostgreSQL

Tsearch2 - full text extension for PostgreSQL - weitere Dokumentationen zu tsearch2

Noch son Projekt in Python

Wer sich den Toolserver genauer angeguckt hat, der hat vielleicht schon vermutet das ich da irgendwie sicherlich noch mehr mit machen will. Ein zweites Projekt das ich vor einigen Tagen angefangen habe wird dem gleichen Ziel dienen. Active Storage Framework for Python ist ein Python Framework um Daten in Datenbanken zu stopfen. Allerdings nicht eine der üblichen Objekt-Relations-Verbinder, sondern eine eigene Datenbankstruktur die einfach nur unten drunter eine SQL-Datenbank als Datenspeicher missbraucht - ich wollte nicht alles neu erfinden.Die Ideen des Active Storage Framework for Python stammen von Userland Frontier und Mumps ab - also ein hierarchischer Namensraum bei dem automatisch alle Elemente persistent sind und bei dem viele Objekttypen als Tabellen (ähnlich wie in Frontier) abgebildet werden. Das ganze benutzt so ziemlich jedes Introspection-Feature von Python das ich kenne. Ok, es gibt einige Programme von mir die noch fiesere Methoden anwenden, aber für die jeweiligen Hacks dort schäme ich mich manchmal - das was ich hier gemacht habe ist da schon deutlich ordentlicher. Hauptsächlich getattr und Friends. Die allerdings bis zum Exzess. Als Start für das Active Storage Framework for Python bietet sich die README an. Wer es ausprobieren will: PostgreSQL und psycopg müssen installiert sein. Ansonsten braucht man noch eine Datenbank und dann kanns schon losgehen. Das Datenbankscheme legt Active Storage Framework for Python automatisch an. Das ganze ist derzeit noch nur im CVS verfügbar, da ich im Moment - ist ja noch 0.1.0 - wild dran rumschraube. Interfaces und Datenstrukturen können sich also noch gewaltig ändern.

Hier gibts den Originalartikel.

Toolserver Framework for Python - Folien

Wer sich für das Projekt Toolserver Framework for Python interessiert - einen in Python geschriebenen Server der die Erstellung von Webservices einfach und komfortabel macht - kann sich ja mal die Präsentation angucken die ich letztens vor Kollegen darüber gehalten habe. Für den Ablauf der Präsentation braucht man einen einigermaßen aktuellen Browser der Javascript und CSS beherrscht und aktiviert hat. Ja, auch das Werkzeug des Teufels funktioniert damit .

Wem die Folien ohne mein Gesabbel zu nichtssagend sind kann einfach in der Präsentation im Browser drucken. Dann wird ein anderes CSS-Stylesheet gezogen und im Ausdruck sind ergänzende Erläuterungen enthalten. Im Prinzip das was ich erzählt habe. Das verwendete Präsentationssystem ist überhaupt ganz witzig - es handelt sich um S5 von Eric Meyer. Praktisch um mal schnell Präsentationen mit Ergänzungen zusammenzudengeln und ins Web zu stellen. Und vi ist mir immer noch lieber als PowerPoint Hier gibts den Originalartikel.