Wed, 15 Oct 2008
It's easier to ask for forgivenessIch merke gerade, dass man meiner Diplomarbeit ansieht, dass ich vorher Python programmiert habe:
public int getHeight() {
try {
return this.rootNode.height();
} catch (NullPointerException e) {
return 0;
}
}
Sun, 06 Apr 2008
mspace.pyMich hat kürzlich ein kolumbianischerer Dozent angeschrieben, weil er mspace.py ganz toll findet und für irgendein Paper gebrauchen kann. Weil ich daraufhin auch noch ein Feature (nearest-neighbour search) dazugebastelt habe, hab ich der Sache noch so etwas wie eine Projektseite spendiert und sogar noch eine Art Release produziert.
Und nee, Birne habe ich nicht total vergessen. Aber mein Brenner im Laptop ist schon so lange hinüber, und überhaupt...
Mon, 27 Aug 2007
Die dunkle Seiteder Macht. Why learning Haskell/Python makes you a worse programmer. Couldn't agree more.
Sun, 27 May 2007
UrlaubMorgen geht's nach England, einen Freund besuchen und direkt im Anschluss weiter nach Schottland. Für zwei Wochen ist hier also Sendepause.
Zum Abschied nur ein paar Links und eine Warnung:
- Reverend Billy von der Church of Stop Shopping
- mspace.py,
ein kleines Pythonmodul mit zwei Implementierungen von
metrischen Indexstrukturen (BK-Baum und VP-Baum). Das ist das
Zeug, das ich für meine Diplomarbeit gemacht habe. Aber hier als
freie Software und in einer Sprache, die Spaß macht. Comments
appreciated. Subversion:
svn co svn://svn.well-adjusted.de/mspace wasteland.homelinux.netwird während meiner Abwesenheit offline sein. Klima und so.
Bye.
Mon, 25 Sep 2006
What Hath Been Broken Up Is Again RebuiltJuhu, glücklicherweise hat auch mal jemand anderen genervt, dasss pyblosxom keine Nicht-ASCII-Zeichen in Kommentaren mag. Das äußerte sich darin, dass pyblosxom selbst eine Exception geschmissen hat (und es dementsprechend so aussah, als wäre der Kommentar abgelehnt worden) und ich außerdem keine Benachrichtigungsmail bekommen habe. Mit diesem Patch ist das Geschichte. Paßt nicht ganz zu meiner pyblosxom-Version, aber man kriegt das hin. In Zukunft sollte das Kommentieren also reibungslos funktionieren.
Ich überlege allerdings trotzdem, ob ich diese ganze Seite hier nicht auf ikiwiki umstellen sollte. Ist zwar Perl, aber in Debiannahen Kreisen der Hype des Tages und "architektonisch" ziemlich sexy. Ich überlege sowieso, für interne Zwecke ein Wiki zu benutzen, wenn es denn nicht so stark schmerzt. Da ikiwiki ein Subversionrepository als Backend benutzt, fällt der schmerzhafteste Teil (Webanwendungsdingsda) schon mal weg. Und Markdown gefällt mir auch (wobei es da auch ein Plugin für pyblosxom gibt).
Positiver Nebeneffekt: ikiwiki generiert statisches HTML und braucht CGI nur für interaktive Dinge. Damit sollte diese Seite deutlich schneller werden. Ich hab nur noch nicht herausgefunden, wie/ob man einzelne Seiten zum Editieren freigeben kann. Ein simples Konvertierungsskript pyblosxom->ikiwiki (bzw. Markdown-Syntax) ist aber bereits in der Mache.
Wer unter der gestrigen Auszeit dieses Rechners hier gelitten hat, der möge dies übrigens bitte entschuldigen. $SWMBO und ich haben das letzte Wochenende genutzt, sein bisheriges Heim (wir nennen es "Büro", oder früher auch: "Raum der Scham") ansehnlich, gemütlich und benutzbar zu machen. Es ist eine Oase der Stille geworden. (Wenn man vom Surren des Rechners absieht.) Ikea sei Dank.
Sun, 14 May 2006
Der ProktologeErgänzend zu meinem Rant von vor einigen Wochen eine weitere Story aus dem wahren Leben über die Nützlichkeit dynamisch typisierter Sprachen. Dieses Mal geht es nicht darum, einfache Aufgaben besonders schön, sondern hässliche Aufgaben effizient zu lösen. Es läuft aber beides auf das Gleiche hinaus: Vertrauen Sie mir, ich weiß was ich tue!
Oder mit den Worten von Matt Palmer:
Personally, I reckon that's a nice tradeoff between C-style full control
(where even the best programmers blow their foot off on a regular basis)
and B&D languages where you'll never shoot yourself in the foot, but
instead you'll gnaw your leg off in frustration.
(Ich weiß nicht, was eine B&D language ist, aber ich bin sicher: Java gehört dazu.)
Thu, 27 Apr 2006
Typen und ObjekteMeine Hausarbeit mit dem Thema "Python — Typen und Objekte" ist endlich fertig und abgegeben. Deswegen kann man sie auch runterladen (Latexquellen wie immer im gleichen Verzeichnis).
Wer schon immer über New-Style Classes, Decorators und Metaklassen Bescheid wissen wollte, sollte damit einigermßen bedient sein. Und wer das ganze von Leuten mit mehr Ahnung erklärt bekommen möchte, kann sich des Literaturverzeichnisses bedienen, ich habe da viel geklaut.
Fri, 21 Apr 2006
Python Tip of the DayIch hab grad wieder was über Python gelernt.
Bekanntermaßen kann man ja Stringformatierung nicht nur mit den
üblichen %-Sequenzen machen, sondern auch so:
notification_pattern = 'on_%(name)s_%(action)s' \
% { 'name': foo, 'action': bar }
Nachteil: man muß erst so ein blödes Dictionary aufbauen oder direkt hinschreiben, wie da oben. Ist nervig zu tippen und schlecht zu lesen. Alternativ geht aber auch:
name = foo
action = bar
notification_pattern = 'on_%(name)s_%(action)s' % locals()
locals() gibt nämlich ein Dictionary mit den lokal
definierten Variablen zurück. Man muß nur aufpassen, keine anderweitig
gebrauchten Variablen zu überschreiben.
Wed, 22 Feb 2006
My-MVCAls ich letztens mal wieder den reichlich angestaubten Code von Birne angeschaut habe, fiel mir wieder ein, dass ich mich ja von GtkMVC trennen und was Eigenes basteln wollte. Den Vorwurf des Not-Invented-Here-Syndroms muss ich mir wohl gefallen lassen. Dafür habe ich Gelegenheit gefunden, mal Descriptors und Metaklassen sinnvoll zu benutzen. Ist sogar richtig schick geworden, finde ich.
Wed, 28 Dec 2005
pyContest [12:37] | 0 Kommentare |Thu, 10 Nov 2005
Das war ja einfachIch dachte, es wäre ja mal eine coole Idee, einen RSS-Feed für bash.org zu basteln. Ich könnte ja nebenbei mal schauen, wie man so etwas aufbaut. Schade, das gab es alles schon fertig. :) Man nehme PyRSS2GEN und Beautiful Soup (nicht die Version aus stable - zu alt) und wenige Zeilen später ist alles gut:
bash-rss.py
#!/usr/bin/python
from BeautifulSoup import BeautifulSoup
import re, sys, urllib, datetime
from xml.dom import minidom
import PyRSS2Gen
baseurl = 'http://bash.org/'
arg = '?' + sys.argv[1]
quotefile = urllib.urlopen(baseurl + arg)
soup = BeautifulSoup(quotefile)
quotefile.close()
quotes = []
for info, quote in zip(soup.fetch('p', 'quote'),
soup.fetch('p', 'qt')):
title = info.b.string
link = baseurl + info.a['href']
description = ''.join([str(line) for line in quote.contents])
guid = PyRSS2Gen.Guid(link)
pubDate = datetime.datetime.now()
quotes.append( PyRSS2Gen.RSSItem(title=title, link=link,
description=description, guid=guid, pubDate=pubDate)
)
rss = PyRSS2Gen.RSS2(
title=soup.html.head.title.string,
link=baseurl,
description='Latest quotes from bash.org',
lastBuildDate=datetime.datetime.now(),
items=quotes
)
print minidom.parseString(rss.to_xml()).toprettyxml()
Das Skript mit 'latest', 'top' oder so aufrufen (einfach mal die Links auf der Seite anschauen) und es spuckt den Feed aus (wird hier stündlich neu erzeugt).
Thu, 20 Oct 2005
Python-GehacktesIch bin gerade dabei, meine komplette Musiksammlung neu zu rippen, zu kodieren (FLAC) und zu taggen. Dabei habe ich einen Teil der Aufgaben, die damit zusammenhängen, an die Maschine delegieren können:
treediff.py
nimmt zwei Verzeichnisse als Argument entgegen und zeigt die Anzahl der gemeinsamen und unterschiedlichen Verzeichnisse. Man kann die natürlich auch anzeigen lassen, doppelte löschen usw. Allerdings nicht per Parameter oder so, man muß schon selbst Hand anlegen.add-replaygain.py
nimmt einen Verzeichnisnamen und ruft für jedes Verzeichnis mit FLAC-Dateien drinmetaflac --add-replay-gain mit allen FLACs auf. Weil das auf
der Kiste mit den Daten hier furchtbar lange dauert, mache ich das ein wenig
umständlich, gebe aber hübsche Statusmeldungen aus (metaflac selbst
ist leider furchtbar still). Ich hätte das Skript ja auch für Ogg-Dateien
erweitert, aber vorbisgain kann das alles auch allein. Aktueller
Status:
Completed 751 of 1362 FLAC files in 16555 seconds. Processing ./radiohead/eps+unofficial/live/2000-07-04-berlin...
compress-scorefile.py
Was ganz anderes: nimmt ein slrn-Scorefile (oder liest von stdin) und faßt alle Einträge so zusammen, daß da keine Redundanzen mehr vorkommen (also zB nur noch ein Abschnitt für jede Gruppe). Kommentare fliegen dabei raus. Wenn man eine Weile Einträge direkt von slrn hat erstellen lassen, bläht sich das Scorefile unnötig auf. Ich bilde mir sogar ein, daß das Scoring dadurch etwas schneller wird (sind ja auch weniger Group-Patterns zu vergleichen). Mein Scorefile ist von über 800 Zeilen auf gut 300 geschrumpft. Output geht übrigens nach stdout, voll Shell-kompatibel das Ganze.Mon, 26 Sep 2005
Python-VortragJawoll, ich habe heute mit großem Erfolg meinen Vortrag über Python im Wahlpflichtfach "Moderne Softwaretechnologien" gehalten. Hat mir irre Spaß gemacht und ich glaube zumindest einem Teil des Publikums auch. Es gab zu Anfang ein paar Vorbehalte wegen des schmutzigen Verbergens von privaten Objektattributen und fehlender Typsicherheit. Mein Codebeispiel hat dann aber alle Zweifler davon überzeugt, daß diese komische Sprache doch ziemlich cool ist. :) Die Vortragsfolien gibt es hier (1.8MB), eine Handout-Version hier (170kB). Die Latexquellen liegen im gleichen Verzeichnis. Hat mir übrigens auch nie so viel Spaß gemacht Folien zu basteln, wie mit Latex-Beamer.
Wed, 15 Jun 2005
Great News!Birne gibt es jetzt auch bei einem asiatischen Sharewarehöker in Ihrer Nähe!
Fri, 13 May 2005
Yay!Birne hat jetzt seine eigene Projektseite bei Sourceforge! Eine Mailingliste wird gerade eingerichtet und das erste Release (0.1.4) ist hochgeladen und bald auf einem Mirror in Eurer Nähe. :-) Einen Screenshot habe ich auch gerade noch auf den Weg geschickt.
Die Webseite unter http://birne.sf.net ist theoretisch auch schon erreichbar, aber noch leer. Das CVS werde ich wohl nicht benutzen, ich denke ich bleibe bei meinem SVN (da gibt's übrigens schon die erste Version mit Support für Audio CDs).
Jetzt fehlen eigentlich nur noch User. ;-)
Sun, 08 May 2005
Es geht voranUnd noch eine neue Version von Birne. Neues Feature: man kann CD-RWs löschen. Außerdem wird das mitgelieferte gtkmvc automatisch benutzt, wenn Python es nicht im Modulpfad findet.
Und, *tada*:
My SourceForge.net Projects
New Projects Pending Review
* Birne (UNIX name: birne, registered 2005-05-07 21:29)
Number of business days registration has been pending: 0
It may take up to 2 business days for new project registrations to be processed.
Das heißt, daß Announcements wie dieses dann auch nicht mehr hier erscheinen, sondern an geeigneterer Stelle. Eine eigene Webseite wirds auch geben, voraussichtlich unter http://birne.sf.net. Meldet sich jemand freiwillig, die zu bauen? ;-)
Sat, 07 May 2005
Release 0.1.3 [14:36] | 1 Kommentare |Fri, 06 May 2005
Subversive TätigkeitenSt1 hat mich dazu inspiriert, mich nochmal mit Subversion zu beschäftigen. Diesmal war das sogar erfolgreich, also kommen zukünftige Releases aus meinem brandneuen Repository. Mensch kann jetzt sogar auch auf den aktuellsten Entwicklungsstand zugreifen. Einfach subversion installieren und
svn checkout http://wasteland.homelinux.net/birne-svn/trunk
machen, oder sich die einzelnen Files mit dem Browser oder wget ziehen. Dafür mußte ich nebenbei auf Apache2 updaten, aber das war erstaunlich schmerzfrei. Mit intltool habe ich auch ein wenig gespielt. Wenn ich es richtig verstanden habe, ist das das Mittel der Wahl, wenn man Programme in verschiedenen Sprachen anbieten will.
Naja, nach dieser ganzen Spielerei muß ich auch mal wieder programmieren. Momentan laufe ich merkwürdigen Fehlern hinterher und komm nicht so richtig voran. Aber die Infrastruktur ist ja auch wichtig!
Sun, 03 Apr 2005
Es brennt!Rumors of Birne's death have been greatly exaggerated. Ich bin dieses Wochenende endlich mal wieder ein paar Stunden dazu gekommen, mich der Sache zu widmen. Ein paar Dummy-Läufe mit einem ISO sind erfolgreich durchgelaufen. Allerdings stelle ich fest, daß ich mit der Quick'n'Dirty Methode eine blockierte GUI ohne jedes Feedback bekomme. Ich habe mir den Grund für mein Zögern also nicht eingebildet. Durch die GUI wird die ganze Sache deutlich komplexer. Ich werde dem cdrecord-Prozess wohl einen eigenen Thread spendieren müssen und arbeite gerade daran herauszufinden, wie ich ihm während er läuft Fortschrittsmeldungen entlocken kann. Einen neuen Tarball gibt's nicht, da läuft eh noch nix. Es tut aber gut, wieder ein wenig Richtung zu finden. Ich wünschte nur, ich würde mehr Zeit mit dem Editor als mit dem Browser verbringen.
Thu, 17 Mar 2005
Was lange währt...Wie geil is das denn bidde?
burn (0.4.3-1) unstable; urgency=low * [...] * (closes: #276414) valid answers specified. Thanks to Jochen Schulz -- Gaetano Paolone (bigpaul)Wed, 16 Jun 2005 21:59:40 +0200
Mit anderen Worten: mein Bugreport wurde erhört und mein Patch gleich ins offizielle Release integriert. Er ist trivial (das waren IIRC meine ersten paar Zeilen Python), aber egal. Wahnsinn, wie diese Open Source Sache funktioniert!
Sun, 06 Mar 2005
Es spricht!Gestern den ganzen Tag programmiert. Ergebnis hier, Screenshot hier.
Was geht:
- Alle Widgets sind funktional (verändern also das Model).
- Der Controller kriegt Änderungen mit und stellt sie dar.
- Man kann Dateien hinzufügen. Die Gesamtgröße wird berechnet und angezeigt. Mit anderen Worten: das User Interface ist fast fertig.
Was fehlt:
- Besondere Behandlung von Audiodateien (Dekodierung, Darstellung der Dauer statt der Größe.
- Besondere Behandlung von ISO-Images (mounten und Darstellung in der Liste).
- Besondere Behandlung von Symlinks (konfigurierbar)
- Möglichkeit zum Löschen einzelner oder mehrerer Dateien aus der Liste. Geht momentan nicht, weil das Widget zur Darstellung keine mehrfache Auswahl zuläßt.
- Der Code zum Brennen. :-)
- Eine kleine Webseite fürs Advertising. Mache ich, wenn der vorige Punkt zumindest ansatzweise gelöst ist. Zu diesem Zeitpunkt plane ich auch den Versionssprung auf 0.1.0.
Goodies:
- Listendarstellung der Dateien (gtk.ListStore) durch Baum (gtk.TreeStore) ersetzen. Erfordert aber Änderung der internen Repräsentation der Dateien.
- Erzeugen der GUI von Hand statt mit Glade. Wäre eine Dependency weniger. (Ob das den Kohl fett macht?)
Ich hab eine ganze Weile gebraucht, um mich in Gtk, Glade und den ganzen Kram reinzufinden. Für reines Selbststudium war die Zeit aber eigentlich recht kurz. Python an sich war nie ein Problem. Die Sprache ist einfach nicht im Weg. Schon toll. Ich weiß jetzt schon, daß ich einige nette Eigenschaften vermissen werde, wenn ich im August wieder Java programieren muß.
Was mir nicht gefällt, sind die Massen an Abhängigkeiten, an denen das Programm hängt: Python, gtk, pygtk, python-glade, cdrecord, mkisofs, cdrdao, python-pyvorbis, python-eyed3, python-pyao, python-pymad. Naja, dafür bleibt das Programm an sich klein.
Mon, 28 Feb 2005
The Vaporware formerly known as Gnome-BurnIch hab noch nicht mal richtig angefangen, schon ändere ich den Namen des Projekts. Aus Gnome-Burn wird birne - spricht sich auf englisch genauso aus, hat aber überhaupt nix mehr mit dem Thema zu tun. :-) Der Grund ist einfach, daß Google nicht ganz frei von "gnome-burn" ist und überhaupt wäre der Name ja auch sehr langweilig.
Außer dem gibt es wenig Neues. Meine Pläne haben sich aber ein wenig konkretisiert. Stay tuned.
Mon, 21 Feb 2005
Yet another open source project without a future: gnome-burnIch hab lang nach einer Beschäfigung gesucht, jetzt hab ich sie gefunden: ich schreibe eine GUI-Version von burn, meinem präferierten Programm zum CD-Brennen. burn ist ein recht übersichtliches Pythonskript, daß sich per Kommandozeile bedienen läßt. An sich ganz nett, aber für Dinge, die ich nicht täglich benutze hab ich auch ganz gern eine Bonbonoberfläche. Außerdem will ich ja $MySWMBO zu mehr Eigenständigkeit verhelfen.
Den allerallerersten Snapshot (release early, release often!) gibts sogar schon. Komplett funktionslos! :-) Ich habe bloß mit Glade2 ein Fenster zusammengeklickt und mit simple-glade-codegen.py das Codeskelett erzeugt. Toll, diese Fortschritte der modernen Softwaretechnologie! Auf GUI-Programmierung hat man ja auch keinen Bock.
Ich werd dann mal schauen, wie ich den Originalcode am besten ausschlachten kann. Ich habe den Autor übrigens kontaktiert - ohne Antwort. Seine CVS-Version ist auch schon recht angestaubt. Naja, mal schauen, was aus meiner Version wird. Ich werd mir die Tage mal die Zeit für eine kleine Roadmap nehmen. Bis dahin nur noch ein Screenshot.