My Universe Blog » Entries Tagged as python
Schöner Schreiben
Posted by Jesco Freund at Nov. 29, 2009 11:32 p.m.
reStructuredText und Pygments sind ein prima Gespann. Mit ihnen kann man z. B. Blog-Inhalte oder Wiki-Seiten rendern, oder gleich ein komplettes Dokumentationspaket bauen. Ich selbst verwende das Pärchen gerade für den Rewrite meiner Homepage. Dabei ist mir allerdings aufgefallen, dass der rst-Renderer leider keine typographischen Zeichen rendert, also z. B. aus – ein – macht oder typographische Anführungszeichen („“ statt „“) erzeugt.
Das ließe sich eigentlich mit einfachen .replace()-Aufrufen auf dem Rendering-Ergebnis nachrüsten – allerdings geht das nicht mehr, sobald mit Pygments gehighlightete Code-Blöcke (oder andere unformatierte Blöcke) mit von der Partie sind. Aber hey, es ist doch Python! Mit ein bisschen Code funktioniert das nachträgliche Umschreiben recht gut:
from docutils.core import publish_parts
# Diese einfache Ersetzen-Funktion erstzt hier im Beispiel nur
# -- und ---, könnte aber ohne weiteres erweitert werden.
def ent_replace(text):
text = text.replace(" -- ", " – ")
text = text.replace(" --- ", " — ")
return text
# Diese Funktion wird mit dem ReStructuredText-Input gefüttert
# und übernimmt das Aufrufen der docutils-Funktionen
def render(text):
parts = publish_parts(source=text, writer_name='html')
frags = parts['html_body'].split('<pre>')
content = ent_replace(frags.pop(0))
for snatch in frags:
content += "<pre>"
content += snatch.split('</pre>')[0]
content += "</pre>"
content += ent_replace(snatch.split('</pre>')[1])
return content
Zur Erklärung: Die render()-Funktion splittet das von publish_parts() gelieferte Ergebnis anhand der <pre>-Tags auf. Das erste Element der so entstehenden Liste ist grundsätzlich kein Preformatted Text – dies wird durch den HTML Writer aus den docutils gewährleistet. Das erste Element kann daher unbesehen aus der Liste entfernt und an die Ersetzen-Funktion verfüttert werden; das Ergebnis wird als Startwert für den Rückgabewert festgehalten.
Die verbleibenden Elemente in der Liste (frags) bestehen nun immer aus einem Anfangsteil Preformatted Text, dem abschließenden </pre>-Tag und ggf. einem Rest „normalem“ Text. Jedes der verbleibenden Elemente muss nun anhand von </pre> erneut gesplittet werden. Der vordere Teil des Split-Ergebnis' muss dabei unverändert an den Rückgabewert angehängt werden (die zugehörigen Tags müssen jedoch wieder ergänzt werden, da sie durch den Split verloren gehen), während der jeweils hintere Teil vorher einmal die Ersetzen-Funktion passieren muss.
No comments | Defined tags for this entry: code, python
Beschäftigungstherapie fürs Wochenende
Posted by Jesco Freund at May 10, 2009 9:58 p.m.
Wenn man „nur mal eben schnell“ eine Applikation bauen will, kann dabei doch mal schnell das ganze Wochenende für draufgehen. Selbst wenn man dabei auf recht produktive Werkzeuge wie Python und Django zurückgreifen kann. Aber pünktlich zum Wochenend-Ende ist es vollbracht und mein Pasteboard ist nicht nur einigermaßen zu Ende programmiert, sondern auch per mod_wsgi auf dem Server deployed. Mal schauen, wie es sich so im Betrieb macht…
No comments | Defined tags for this entry: Django, python
Sudoko - solved!
Posted by André Mühlnikel at May 2, 2009 10:14 p.m.
Es hat mich einfach nicht in Ruhe gelassen … also habe ich einen Solver für Sudokus gebaut. Da ich aber „Ausprobieren“ nicht für „logisch erschließen“ halte, habe ich demonstrativ diesen Lösungsweg weggelassen ![]()
Wers ausprobieren möchte, kann hier sehr schön Beispiele finden und die Lösungen nachvollziehen – einfach dazu am Ende des Skripts das Log-Level auf 5 setzen, dann erhält man die detaillierte Finde-Systematik ausgegeben. Hier muss ebenfalls (da ich zu faul und unwissend in Bezug auf Python bin) der Dateiname der Input-Datei jeweils angepasst werden!
Ein paar Notizen zur Vorgehensweise:
- Quasi-Singles sind Werte, die innerhalb eines Blockes (also 3×3-Feldes) in nur einer Zeile oder Spalte zu finden sind, und somit in der restlichen Zeile bzw. Spalte ausgeschlossen werden können.
- Unknown Singles sind solche Felder, die nach Ausschluss aller durch Zeile, Spalte und Block wegfallenden Optionen nur noch einen möglichen Wert enthalten. Wurden sie allerdings auf diese Weise einmal erkannt, werden sie danach zu „Known Singles“, damit sie nicht immer wieder aufs neue verarbeitet werden und das Programm irgendwann terminieren kann.
- Single Options sind diejenigen Felder, die, obwohl sie selbst noch mehr als einen möglichen Wert zur Verfügung haben, innerhalb ihres Blocks oder ihrer Zeile/Spalte das einzige Vorkommen eines dieser Werte sind und somit zwingend auf diesen Wert festzulegen sind.
Alles klar? Fragen beantworte ich gerne (auch in den Kommentaren)! ![]()
No comments | Defined tags for this entry: programming, python, scripting, fun, Sudoku
NetBeans IDE for Python
Posted by Jesco Freund at April 5, 2009 12:45 p.m.
Python ist für mich eine der besten, wenn nicht sogar die beste und produktivste Programmiersprache überhaupt. Allerdings fehlt mir bisher für Python eine IDE, welche die Entwicklung mit Python genauso gut und mächtig unterstützt, wie etwa Eclipse oder Sun Studio dies für Java oder C++ tun. Für Windows gibt es mit der Wing IDE eine brauchbare (kommerzielle) Lösung; im FOSS-Bereich blieb bislang nur Pydev. Pydev ist zwar besser als ein einfacher Editor, aber alles andere als das gelbe vom Ei: Funktionen, die Pydev wirklich mächtig machen (etwa Code Completeion), sind nur in der kommerziellen Erweiterung Pydev Extensions enthalten, und auch sonst macht das Projekt in letzter Zeit eher den Eindruck, ein Lockangebot für kommerzielle Produkte von Aptana zu sein.
Seit einiger Zeit brodelt es allerdings in der NetBeans-Projektküche: Dort verfolgt man das ehrgeizige Ziel, nicht weniger als „the best integrated tool for programming in Python“ zu schaffen. Seit Anfang des Jahres steht eine Early Access Version der NetBeans IDE for Python (basierend auf NetBeans 6.5) zum Download bereit, und mit eben jener habe ich nun ein wenig herumgespielt. Sowohl unter Solaris 10 (Sparc) als auch FreeBSD 7.1 (i386) lässt sich die EA-Version problemlos „installieren“: während für Solaris tatsächlich ein Installer existiert, müssen sich FreeBSD-Nutzer mit dem „OS Independent ZIP“ begnügen, was aber auch kein Drama ist – einfach an eine beliebige Stelle im Dateisystem entpacken und bin/netbeans ausführen. Hierfür wird eine funktionierende Java-Umgebung vorausgesetzt – unter Solaris natürlich kein Thema, und unter FreeBSD funktioniert NetBeans einwandfrei mit dem Diablo JDK 1.6 aus den Ports.
Auch wenn der Swing-Look von NetBeans insgesamt etwas weniger gefällig ist als die SWT-Erscheinung von Eclipse, so braucht sich die EA-Version keinesfalls hinter dem etablierten Konkurrenten verstecken. Die Projektverwaltung ist mit Eclipse auf Augenhöhe, und auch der Klassen- und Funktionsbrowser ist recht ähnlich aufgebaut. Ebenfalls typisch für eine „große“ IDE ist die Aufgabenverwaltung und eine Werkzeugsammlung für Refactoring. Besonders punkten kann NetBeans gegenüber Pydev durch den integrierten Debugger inklusive Performance-Messwerkzeugen, eine Python-Konsole und Code Completion in der Editor-Komponente. Als besonderes Bonbon unterstützt NetBeans neben den klassischen VC-Systemen CVS und Subversion auch Mercurial – bei einer Python-IDE eigentlich naheliegend…
Natürlich hat NetBeans auch einige Schwächen, die an dieser Stelle nicht verschwiegen werden sollen: So nervt etwa die hohe Affinität zu Jython – an manchen Stellen muss man NetBeans schon mit sanfter Gewalt dazu überreden, auf den nativen Python-Interpreter zurückzugreifen. A propos Interpreter: NetBeans ließ sich mit keinem Trick dazu überreden, Python 3.0 in die Liste der verfügbaren Python-Plattformen aufzunehmen. Gerade für die Entwicklung neuer Projekte ist das schade, da es sich bei diesen besonders anbietet, von vornherein auf die neue Python-Generation zu setzen.
Alles in allem halte ich aber diesen ersten Wurf für bereits sehr gelungen und dem Platzhirsch Pydev mindestens ebenbürtig, in einigen Punkten sogar für deutlich überlegen. Man darf also auf die weitere Entwicklung gespannt sein…
No comments | Defined tags for this entry: Eclipse, FreeBSD, IDE, NetBeans, open source, programming, python, scm, Solaris
Herausforderung angenommen
Posted by Jesco Freund at March 27, 2009 12:01 p.m.
André hat es provoziert – was er mit Perl hinkriegt, muss ich mit Python doch auch hinbekommen
. Natürlich habe ich mich nicht damit begnügt, einen Abklatsch seiner Perl-Implementierung nach Python zu portieren – ein bisschen Optimierung musste schon sein. In Zeiten moderner Multicore-CPUs, so dachte ich, wäre es ideal, das Problem so zu formulieren, dass es parallelisiert abgearbeitet werden kann. Bei einem iterativen Algorithmus, dessen Iterationen auf die Ergebnisse der jeweiligen Vorstufen angewiesen sind, allerdings kein ganz triviales Unterfangen…
continue reading Herausforderung angenommen
No comments | Defined tags for this entry: algorithms, programming, Project Euler, python
Erstes Release von WireTap
Posted by Jesco Freund at Feb. 28, 2009 1:13 a.m.
Der von mir im Rahmen des root-tools Projekts entwickelte TCP-Listener WireTap wurde heute in einem ersten Release (v0.1.0) freigegeben. Die Software hat sicherlich noch Potenzial im Hinblick auf Features (hoffentlich nicht zu sehr im Hinblick auf Bugfixes
). Allerdings bin ich hier auf das Feedback und die Wünsche möglichst vieler Tester angewiesen. Also flugs das Source-Archiv runterladen, ein bisschen damit herumspielen (kompiliert werden muss da nix, alles Python) und Wünsche/Anregungen/Fehler/sonstige Kritik in den "Meckerkasten" werfen…
No comments | Defined tags for this entry: network, open source, python, root-tools
Wiki-Umzug
Posted by Jesco Freund at Dec. 6, 2008 2:01 p.m.
Vor etwa zwei Wochen habe ich damit begonnen, das alte Wiki von DokuWiki nach MoinMoin zu migrieren. Im Hintergrund werkelt nun anstelle von Lighttpd ein Apache 2.2 (Worker) mit mod_wsgi. Ursprünglich hatte ich geplant, MoinMoin ebenfalls mit Lighttpd und FastCGI laufen zu lassen, was aber erneut in einer Orgie von defunct-Prozessen endete (nachdem ich mit Ruby schon ähnliche Erfahrungen gemacht habe, glaube ich mittlerweile, dass Lighty's FastCGI nur stabil mit PHP funktioniert und dass der Betrieb in einem FreeBSD-Jail das ganze noch heikler werden lässt…). Ich muss ehrlich zugeben, dass ich von der Performance positiv überrascht bin – die Ladezeiten sind deutlich kürzer als beim alten Wiki. Am Backend kann es nicht liegen; beide Wikis speichern ihre Daten in Textdateien. Entweder hat MoinMoin einen um Längen schnelleren Parser als DokuWiki, oder es liegt wirklich am Webserver.
Nachdem nun mein MoinMoin-Theme zumindest ansatzweise fertig ist (an den Stylesheets hapert's noch ein wenig, da wird mit Sicherheit noch einiges passieren), habe ich heute die DNS-Einträge umgestellt, so dass ab sofort das neue Wiki angesteuert wird.
No comments | Defined tags for this entry: Apache, DokuWiki, Lighttpd, MoinMoin, python, wiki
Bilanz eines Wochenendes
Posted by Jesco Freund at Nov. 9, 2008 10:35 p.m.
Nachdem meine Freundin dieses Wochenende mit ihrer Taiko-Gruppe auf Achse war, habe ich kurzerhand mein Equipment (Notebook, Schlafsack, Senseo-Kaffeemaschine) eingepackt und bin bei André eingefallen. Anstelle von 48 Stunden Dauer-C&C Generals Zero Hour waren wir dieses Wochenende sogar richtig produktiv: über 40 Commits für unser jüngstes Software-Projekt RPG haben wir zustande gebracht (auch wenn die meisten davon Korrekturen von Irrtümern unsererseits jeglicher Art waren – oder Tribut an die angestrebte Plattform-Unabhängigkeit
)
Zum Ausklang gibt's jetzt standesgemäß Pizza (allerdings vom Lieferdienst, nicht aus dem Eisfach) und nebenher ein paar fällige Updates auf den Servern. Erholen kann ich mich ja morgen im Büro… ![]()
1 comment | Defined tags for this entry: C, programming, python, RPG
SPE – eine Alternative zu PyDev & Co
Posted by Jesco Freund at July 12, 2008 2:39 p.m.
Eine kostenlose, quelloffene, von Java und PyQT unabhängige IDE für Python – genau das ist SPE („Stani's Python Editor“). Das GUI basiert auf wxPython, einem Python-Wrapper für wxWidgets.
Die Editor-Komponente ist recht angenehm und erinntert mit Code Completion und Life Syntax Checking an Eclipse. Fein auch die integrierte Python-Shell, um einzelne Befehle oder Code-Schnipse zu testen oder das Ergebnis einzelner Operationen zu überprüfen. Ein weiteres Plus ist der integrierte PyDoc-Generator und die ausgefeilte Suchfunktion, die beim Refactoring recht nützlich ist. Nur schade, dass bisher keine VCS-Anbindung implementiert wurde…
2 comments | Defined tags for this entry: open source, programming, python, software
OpenMCP Policy Daemon Release Candidate 0.1-rc1
Posted by Jesco Freund at May 18, 2008 11:36 p.m.
Nach einer Code Rally über die letzten drei Tage ist die erste lauffähige Version des OpenMCP Policy Daemons fertiggestellt. Der Policy Daemon verarbeitet ähnlich wie z. B. policyd-weight Angaben aus dem Mail-Header. Anders als policyd nutzt er diese aber nicht zu einem DNSBL- sondern einem Black-/White List Abgleich. Damit ergänzen sich beide Daemons optimal und stellen eine mächtige Waffe im Kampf gegen Spam dar.
Download-Link: http://files.my-universe.com/OpenMCP/openmcp-policyd-0.1-rc1.tar.gz
Da für das Projekt noch keine eigene Seite existiert, bitte Fragen/Wünsche/Bugreports vorerst hier als Kommentare posten – dann sind sie mitsamt Antworten für alle Interessierten verfügbar.
No comments | Defined tags for this entry: OpenMCP, Postfix, python, spam

Content is subject to the conditions of the