[well-adjusted blog]
25c3 Ach! abhängigkeit abschied absicht alltag angst anliegen apple arschloch aufklärung aufstieg awesome berufung besserwisser blog bots bullshit bürgertum clay shirky colbert darten deja vu demokratie der don desinformation die da oben dns dvd döner einsicht empathie erinnerung erkenntnis fall familie fassungslosigkeit fastcgi fdgo fett ffmpeg flash fortschritt frei freitag fuck fuckup fun füße gay gedankensprung gefängnis geschichtsklitterung gewalt google gott hausarbeit hilfe hingabe idiotie ipv6 irrsinn java kaltes bett kaputt katzen konsum krypto kundendienst lala laugh lebenshilfe leid liebe linux lvm läuterung lügen macht meta microsoft missverständnis moral mormonen mut nerd nethack netz news offline online pappnasen physik polemik pr0n py pyblosxom quote radiohead raffgier recht restructured text rockbox scala schade schwurbel scott adams selbst schuld selbstdarstellung selbstverschulden sex skurril snooker steve davis stille swmbo symbolik tag am meer tauss tech thom toy trauer tv ulla unglaublich unrecht untergang unterstützung unverständnis unwissen user- interface verblendung vergebung versagen verstand vorfreude web.de weisheit widerstand wrumm wtf wut yasd zweifel

Wed, 15 Oct 2008

It's easier to ask for forgiveness

Ich 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;
    }
}

[21:14] | Kommentare | Tags ,


Sun, 06 Apr 2008

mspace.py

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

[19:21] | 0 Kommentare | Tags , ,


Mon, 27 Aug 2007

Die dunkle Seite

der Macht. Why learning Haskell/Python makes you a worse programmer. Couldn't agree more.

[22:36] | 0 Kommentare | Tags , ,


Sun, 27 May 2007

Urlaub

Morgen 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.net wird während meiner Abwesenheit offline sein. Klima und so.

Bye.

[19:49] | Kommentare | Tags , , ,


Mon, 25 Sep 2006

What Hath Been Broken Up Is Again Rebuilt

Juhu, 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.

[09:52] | Kommentare | Tags , , , ,


Sun, 14 May 2006

Der Proktologe

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

[10:11] | 0 Kommentare | Tags ,


Thu, 27 Apr 2006

Typen und Objekte

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

[11:35] | 0 Kommentare | Tags , ,


Fri, 21 Apr 2006

Python Tip of the Day

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

[18:10] | 2 Kommentare | Tags


Wed, 22 Feb 2006

My-MVC

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

[20:24] | 0 Kommentare | Tags


Wed, 28 Dec 2005

pyContest

Mein Beitrag (in hübsch) zum python coding contest.

[12:37] | 0 Kommentare | Tags


Thu, 10 Nov 2005

Das war ja einfach

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

[23:01] | 2 Kommentare | Tags


Thu, 20 Oct 2005

Python-Gehacktes

Ich 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 drin metaflac --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.

[19:48] | 2 Kommentare | Tags ,


Mon, 26 Sep 2005

Python-Vortrag

Jawoll, 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.

[20:54] | 2 Kommentare | Tags ,


Wed, 15 Jun 2005

Great News!

Birne gibt es jetzt auch bei einem asiatischen Sharewarehöker in Ihrer Nähe!

[11:01] | 0 Kommentare | Tags


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

[00:12] | 7 Kommentare | Tags


Sun, 08 May 2005

Es geht voran

Und 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? ;-)

[18:21] | 2 Kommentare | Tags


Sat, 07 May 2005

Release 0.1.3

Gibts hier und hier.

[14:36] | 1 Kommentare | Tags


Fri, 06 May 2005

Subversive Tätigkeiten

St1 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!

[19:32] | 0 Kommentare | Tags ,


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.

[19:49] | 5 Kommentare | Tags


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!

[22:56] | 2 Kommentare | Tags ,


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.

[16:01] | 1 Kommentare | Tags


Mon, 28 Feb 2005

The Vaporware formerly known as Gnome-Burn

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

[19:53] | 0 Kommentare | Tags


Mon, 21 Feb 2005

Yet another open source project without a future: gnome-burn

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

[22:31] | 0 Kommentare | Tags ,