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!
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?
Nächstes Mal, wenn ich plane, anderer Leute Code zu übernehmen, gucke ich ihn mir vorher genauer an. Ich wollte ja ursprünglich viel von burn klauen. Jetzt denke ich: Ideen ja, Code nein.
Ich sehe mich eigentlich nicht in der Position, großartig anderer Leute
Code abzuurteilen, aber was ich hier vor mir sehe ist schon grausig. Was
mit recht schnell auffiel: burn ist ca. 1200 Zeilen lang. die
main()
-Methode nimmt davon fast die Hälfte ein. Darunter so Perlen wie
das for-case
Paradigma:
for key, val in vc.items():
if key == 'TITLE':
self.title = val
elif key == 'ARTIST':
self.artist = val
elif key == 'ALBUM':
self.album = val
elif key == 'DATE':
self.year = val
elif key == 'GENRE':
self.genre = val
elif key == 'VENDOR':
self.vendor = val
elif key == 'TRACKNUMBER':
self.track = val
elif key == 'COMMENT':
self.comment = val
elif key == 'TRANSCODED':
self.transcoded = val
Man hätte natürlich einfach das Dictionary kopieren können, aber was solls.
main()
ist übrigens ein riesiges if-Konstrukt:
if mode == 1: #DATA-CD
if mode == 2: #ISO CD
...
Mit einer Schachtelungstiefe von mindestens acht. Das Dekodieren von
Ogg- und MP3-Dateien findet natürlich auch in main()
statt. Genau da
hab ich zuerst gesucht!
Objektorientierung ist ja auch ein recht schwieriges Thema. Es gibt eine
Klasse FileInfo
und eine Klasse OggInfo
, die erstaunlicherweise
nicht von FileInfo
ableitet. Überhaupt ist mir nicht klar, nach
welchen Gesichtspunkten Klassen gebaut wurden. So Konzepte wie Kapselung
oder Polymorphie scheinen dem Autor unbekannt zu sein.
Oh, und der Klassiker Variablenbenennung: x
, y
und list
finde
ich echt kacke. Und zwanzig Zeilen, die mit print
beginnen, sind
einfach nur überflüssig. Dafür gibts Multilinestrings.
Ach ja: wer sowas in meinem Code findet, darf mir das natürlich ähnlich deutlich sagen.
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.
und da macht man's halt. Was willste denn sonst machen.
Artikel in der Jungle World über direkte und strukturelle Gewalt beim Militär. Ich muß hier bei meiner Leserschaft ja aufpassen, aber für einen soziologischen Analphabeten wie mich sehr interessant. Ich stelle häufiger fest, daß die Kriegsdienstverweigerung eine meiner wichtigsten Entscheidungen zugunsten meiner geistigen Gesundheit war.
...und Du machst Diät!
Mußte ich mir heute anhören. Von einem Menschen, der vorgibt mich zu lieben! Mein Bauch und ich sind zutiefst erschüttert.
Merke: Nach dem dritten Bier keine politischen Grundsatzdiskussionen anfangen. Schon gar nicht mit Quasi-Verwandten. Schnaps zählt in diesem Zusammenhang als Bier.
Die Produktivitätsentwicklung hat die Bedürfnisentwicklung längst überholt, wir haben gesättigte Märkte, und wir brauchen immer weniger Menschen um dieses Übermaß an Gütern zu produzieren. Jetzt ist der Moment gekommen, in dem wir uns vom Zwang zur Arbeit befreien können.
Das ist es, was ich eigentlich sagen wollte!