09/30: Kurzer Prozess
Parallelverarbeitung ist immer wieder für eine Überraschung gut.
Das Grundproblem: Ein Administrationstool führt regelmäßig mittels eines Daemons bestimmte Prozesse aus, welche teilweise 5-10 Minuten brauchen, bis sie abgeschlossen sind. Allerdings sind es nicht immer exakt die gleichen Befehlszeilen, sondern die Argumente unterscheiden sich, und es ist nicht vorhersehbar wann ein solcher Prozess benötigt wird — dies wird vom Benutzer angestoßen.
Der Daemon erhält seine Aufträge per RPC. Klarer Fall in einer solchen Situation: Asynchrones Interface. Der Aufruf welcher einen Prozess startet kehrt sofort zurück, der Prozess wird in den Hintergrund geschickt.
Das Hauptproblem dabei ist, dass manchmal eine Reihe von Befehlen ausgeführt werden muss. Dies lässt sich am einfachsten mit klassischen synchron programmiertem Code erreichen, welcher einfach schrittweise ausgeführt wird. Es gilt also einen Kompromiss zwischen synchronem und asynchronem Code zu finden, indem man einen Prozess in den Hintergrund schickt, welcher dann seinerseits die eigentlichen Zielprozesse der Reihe nach ausführt und auf deren Beendigung wartet, bevor er den nächsten Prozess startet.
07/23: Spielereien mit Metaklassen
Eines der krankeren Features von Python sind sicherlich die Metaklassen. Man liest immer viel davon, letztendlich weiß man sich aber doch nichts darunter vorzustellen und kommt meist auch ohne aus — trotzdem kann es hilfreich sein, zu wissen was sie tun, wo man sie einsetzt — und wo besser nicht.
Ich habe heute eine Situation erlebt in der mir eine Metaklasse sehr gelegen kam, daher möchte ich hier mal ein wenig über meine Erfahrungen berichten.
Heute hab ich mich auf die Suche nach einem Bugtracker begeben, den man mit vertretbarem Aufwand an Mercurial anschließen kann, sodass man mit Tags in den Commit-Nachrichten dem Bugtracker ein paar Befehle geben kann.
Dabei hab ich mein Mantis wiederentdeckt, das noch auf der Platte des Servers schlummerte — damit war das in fünf Minuten erledigt. Inspiriert von diesem Blog-Post, der das Verfahren mit SVN beschreibt, habe ich das ganze als Mercurial-Hook gebastelt.
Geodjango und PostGIS
What the GIS?
Das bekannteste Geo Informations System ist sicherlich das aus dem Hause Google. Aber Google Maps und dessen Konsorten waren nicht die Ersten, die auf die brilliante Idee gekommen sind, Ihre Welt zu vermessen und auf Karten zu manifestieren.
Dieses Bedürfnis der Menschheit geht bis in die Steinzeit zurück, wo schlaue Krieger die Wanderrouten ihrer Lieblingsbeuten in die Höhlenwände malten.
Das GIS von heute hat mittlerweile damit nur noch recht wenig zu tun. Durch Satellitenunterstützung sind wir in der Lage unsere Erde supergenau abzubilden und Open Source Communities stellen diese Daten sogar der Menschheit zur freien Verfügung.
continue reading02/5: Spaß mit Pygments
Eine der schöneren Libraries die Python zu bieten hat ist sicherlich die Syntax-Highlighting-Library Pygments: Damit wird es sehr einfach möglich, eine Quellcodedatei nicht einfach nur als Textdatei anzuzeigen, sondern mit Markierungen für Klassennamen, Schlüsselwörter, Variablennamen und andere Syntaxelemente zu versehen. Dies sieht dann beispielsweise so aus wie bei meinen Models für PowerDNS.
continue reading01/30: Hello World
Hallo und herzlichst Willkommen bei Standpy.de
Hier dreht sich alles um die Programmiersprache Python, schwerpunktmäßig im Zusammenspiel mit dem Webframework Django, aber auch seine Stärken im normalen Gebrauch.
So können mit Python komplexe Client/Server-Anwendungen, GUI-Programme mit QT, Webanwendungen, oder aber auch bessere Shellscripts geschrieben werden die eine kleine Aufgabe erledigen.
Zu Pythons Stärken gehören:
- die Shell (eine interaktive Shell, in der direkt Python ausgeführt werden kann)
- die gut lesbare Syntax
- die klare Struktur des Quellcodes
- die mächtigen Standardbibliotheken (batteries included).
- gut durchdachtes Design
- Flexibilität
- erzwungene Indentierung verbessert Lesbarkeit des Codes
- dynamische Sprache
- gutes Code-Design wird damit belohnt, in wenigen zeilen viel bewirken zu können
- Erweiterbarkeit: Neue Module können in C bzw. C++ einfach geschrieben werden, umgekehrt kann Python in C/C++-Programme eingebettet werden.
- generell Plattformunabhängig
- gute Unterstützung bei anderen Programmen es exisiteren APIs für: Openoffice, Gnome, AWN,…
- Mit Python darf man auch funktional Programmieren
Als gewöhnungsbedürftig könnte man folgende Punkte ansehen:
- Codeblöcke werden duch Indentierung ausgedrückt
- Klammern: Runde Klammern bedeuten kontextabhängig Verschiedenes, auch geschweifte und eckige Klammern kommen vor
Was Python nicht leistet:
- Hardwarenahes Programmieren (Treiber, Betriebssysteme, etc.)
Wir stellen uns für das Jahr 2010 folgende Themen vor:
Der Einstieg: Wie man sich nicht beissen lässt!
ach verdammt! (closures, lambdas, list comprehensions, Properties, Dekoratoren, …)
- Best Practices für Python-Entwickler
- Versionskontrolle
- die richtige Struktur für dein Projekt
- Howto: Lizenzierung/Distribution deiner Projekte
- Verpacken als exe per setuptools
- Windows-Eigenheiten (.pyw-Dateien, wie Python ohne cmd, open mit “rb”)
Codequalität gewährleisten (Pylint/Django-lint)
Die 10 Must-Have-Apps
Vorstellung eigener Projekte
Wer sind wir eigentlich:
Michael befasste sich im Web-Bereich bis 2007 vor allem mit PHP, ist allerdings bald an dessen Grenzen gestoßen und suchte dann eine Sprache welche vielfältige Möglichkeiten bietet um bei neuen Projekten schnell zum Ziel zu kommen, aber gleichzeitig nicht die Schwachstellen von PHP hat. Django übertraf diese Anforderungen bei weitem und machte Python attraktiv.
Nico ist erst seit kurzer Zeit auf die Schlange gekommen. Vorher war er ambitionierter Java-Entwickler, der bald feststellen musste, dass er mehr Zeit mit dem Deployen seiner Projekte verbrachte, als mit der eigentlichen Entwicklung. Eine gute Zeit also, um sich eine Sprache anzueignen, mit der man wirklich agil entwickeln kann.