- Qualität setzt sich durch, egal wie schlecht sie ist.
- -- Oliver Kalkofe
Es gibt Sachen im Bereich Software, die tun mir einfach weh. Weil sie so schlecht gemacht sind, das es mich wundert, warum sie überhaupt funktionieren.
Für mich ist das Paradebeispiel hierfür die Internetdatenbank für die Titel von CDs: CDDB und ihren Nachfolger freedb. Die Idee dieses Dienstes ist meiner Meinung nach einer der essentiellsten nach den "großen" wie Web, Email, News, etc. Das Inhaltsverzeichnis einer CD sagt im Normalfall nur an, wo die einzelnen Stücke auf der CD anfangen, nicht aber um welche CD es sich handelt, und wie die Stücke auf der CD heißen. Also schickt man das Inhaltsverzeichnis an einen Internetserver, und der sagt einem, wie die einzelnen Stücke auf der CD und die CD selbst heißen. Tolle Idee und ein echter Mehrwert. Wer möchte schon beim Rippen immer alle diese Informationen selbst eintippen müssen?
Leider ist das, was heute defacto-Standard für diese Informationen ist, unwahrscheinlich schlecht designed und ein Paradebeispiel dafür, wie aus einem schlechten Samen eine hässliche Blüte entspringen kann. Und als dies im Namen der "Abwärtskompatibilität". Der Urvater der heutigen freedb ist Software zum Abspielen von Audio CDs in CD-ROM Laufwerken auf Unixsystemen:
xmcd, der X-Windows-Motif-CD-Player. Dort konnte man die Titel eingeben und auf Festplatte speichern.
Und die Eckdaten dieses Formates sind heute noch aktuell. Es gibt elf Kategorien, in denen die CDs einsortiert werden müssen: Blues, Classical, Country, Data, Folk, Jazz, Misc, New Age, Reggae, Rock und Soundtrack. Innerhalb dieser Kategorien werden die Einträge nach einer ID sortiert, die pro Kategorie nur einmal auftreten darf. Diese ID ist ein 32bit Wert, der sich wie folgt berechnet: das erste Byte enthält die Anzahl der Tracks, die nächsten zwei Bytes die Spielzeit der CD in Sekunden und das letzte Byte eine "Magic Number", die sich aus den Startsektoren der einzelnen Tracks berechnet. Diese werden übrigens in Frames angegeben. 75 Frames sind eine Sekunde.
Von den 2^32 Möglichkeiten, die ein 32bit Wert bietet, bleibt durch diese - gelinde gesagt - sehr ungeschickte Wahl der Berechnung nur noch ein verschwindend kleiner Bruchteil an eindeutigen IDs übrig. Aus dem Bauch heraus geschätzt würde ich sagen, es sind weniger als ein Promill. Gerade im Bereich von Maxi CDs ist mittlerweile eine Kollision quasi vorprogrammiert. Und im Falle einer Kollision wird die neue CD einfach nicht angenommen. Als Alternative bleibt nur die CD absichtlich in eine falsche Kategorie einzusortieren, in der die ID noch nicht existiert.
Wenn eine neue CD der Datenbank hinzugefügt werden soll, dann bekommt man die Fehlermeldung, dass eine Kollision stattgefunden hat, aber nicht beim Eintragen, sondern später per E-Mail, sofern man sich auch wirklich mit seiner korrekten Adresse angemeldet hatte. Nur wenn ich die bekommen habe, habe ich aber auch keine Lust mehr, die CD nochmal unter einer anderen Kategorie einzutragen.
Aber auch der Rest eines solchen Eintrags ist auch nicht besser. Es gibt nur einen Eintrag für die CD als Ganzes und jeweils einen pro Track auf der CD. Aber pro Track, bzw. CD gibt es mindestens zwei Informationen, die gespeichert haben möchte: den Interpreten und den Titel des Stücks oder der CD. Was wurde gemacht, um das Problem zu umgehen? Die Informationen werden in dem Feld nach dem Format "Interpret-Schrägstrich-Titel" abgelegt. Nur hat niemand definiert, was passieren soll wenn der Interpret einen Schrägstrich enthält. Toller Trick. Und auch innerhalb der Daten werden die Tracks ab null gezählt, auf der CD selbst jedoch ab eins. So muss man dann auch je nach Richtung auch eins draufzählen oder abziehen, wenn man auf die Daten zugreifen will. Grandios.
Ein Ausweg aus der Misere wäre wohl ein Protokoll CDDB 2.0, in der die DiscID auf einem geschickteren Weg neu berechnet wird, Kategorien nicht mehr zum Sortierschlüssel gehören, und Kollisionen nicht zur Ablehnung eines Eintrags führen. Nur befürchte ich, dass selbst wenn jemand ein solches Format definiert, es niemand wirklich in seine Produkte einbauen würde, weil es ja schon so etwas gibt, und es doch eigentlich egal ist, wie mies der Kram ist.
Kennt eigentlich hier jemand etwas, das noch schlechter definiert wurde?
Kommentare