Archiv 8.12.2005 - 18.12.2005

Qualitätssicherung im iTunes Music Store

Gibts da wohl nicht. Also wirklich. Teilweise echt schockierend. Marianne Faithfull. "A Stranger on earth" ist Rock. "A perfect stranger" ordnen sie unter Folk. Und "Blazing away" ordnen sie unter Pop. Haben die noch alle Tassen im Schrank?

Und ja, bevor mir hier jemand Vorträge hält, ich weiss von ihren älteren Sachen und ihren Folk-Experimenten. Aber bei den drei Scheiben handelt es sich um welche auf denen "Sister Morphine" drauf ist - und der Rest auch in ähnliche Richtungen geht. Datt is weder Folk noch Pop, ihr Poppnasen.

SVG Has Landed

Das wird den Reiter der Schockwelle freuen: SVG ist in den Nightlies von Safari standardmäßig aktiviert. Das besondere daran: jetzt können Dokumente gemischt XHTML und SVG Tags enthalten und über ein gemeinsames CSS gestyled werden - was ziemlich coole Möglichkeiten eröffnet, da dadurch eben die SVG-Objekte nicht mehr mit OBJECT oder EMBED Tags eingebaut werden, sondern integraler Bestandteil des Dokuments sind.

Wie wärs denn mal mit Ausbilden?

Microsoft-Deutschland-Chef warnt vor "gravierendem IT-Fachkräftemangel":

Gallmann hatte bereits im November beklagt, dass es an Nachwuchs fehle. IT-Unternehmen würden vor diesem Hintergrund Absolventen aus dem Ausland einstellen, sagte er vor drei Wochen. Nun unterfütterte der Microsoft-Deutschland-Chef seine Warnung mit weiteren Zahlen: Schon jetzt könne der Bedarf an IT-Ingenieuren nur zu 80 Prozent gedeckt werden.

Beklagen können sie alle gut, auch im Warnen sind sie Meister. Die Konsequenz daraus - selber auszubilden - meiden die meisten aber. Grosse Unternehmen, die wirklich Mangel an IT Fachkräften haben, können diesen Mangel gut und gerne aus eigener Kraft beheben: Ausbildungsplätze schaffen. Das bringt dann gleich noch den Vorteil, das diese Mitarbeiter das Unternehmen gut kennen, wenn sie dann produktiv einsteigen. Aber vermutlich ist die Konsequenz für studierte BWLer nicht verständlich.

Statt dessen aber suchen Unternehmen weiter selbst für normale IT-Jobs nach studierten Mitarbeitern Mitte 20 mit 10 Jahren Berufserfahrung. Und heulen dann rum, das die Ausbildung in Deutschland zu lange dauert und die Fachkräfte zu teuer sind - ja was erwartet ihr auch, wenn ihr ständig nur fertig Studierte haben wollt?

AirTunes - nur ne halbe Sache?

Kann mir mal jemand erklären, warum Apple die AirTunes-Geschichte so implementiert hat, das scheinbar nur iTunes damit arbeiten kann? Das ist doch hochgradig dämlich. Wenn ich schon eine Möglichkeit habe, meine Stereoanlage an meinen Mac zu hängen, dann will ich das doch nicht nur für iTunes machen - mindestens der DVD Player sollte doch wohl bitte schön den gleichen Komfort bekommen. Noch besser wäre natürlich eine allgemeine Lösung - wobei ich verstehen würde, wenn sie das nicht täten. Immerhin muss für AirTunes ja digitale Musik gestreamed werden- und zwar in einem passenden Streaming-Format. Aber DVDs produzieren das doch schon von Hause aus, also wieso kann ich da kein AirTunes-Device auswählen? Selten dämlich.

Apple und Firewire - bald ein Ende?

FireWire not dead, but it's on life support - der Life-Support ist aber ziemlich mies. Gerade nochmal nachgeguckt: die neuen iPods (Nano und Video) haben kein Firewire mehr. Was ziemlich banane ist, denn mein Mac Mini hat kein USB 2 - und mit USB 1 will ich meine Musiksammlung wirklich nicht kopieren. Was denkt sich Apple bei so einer dämlichen Sache? Firewire kann nun wirklich nicht mit diesem armseligen USB 2 ersetzt werden. Auch neue Rechner werden wohl nur noch notgedrungen dann einen Firewire-Port mitbringen, wenn die Maschinen von Apple für Videocontent geeignet angesehen werden. Ausgesprochen schade, denn Firewire ist eine wirklich sinnvolle Anschlusstechnik, die auch gute Leistungsreserven für kommende Geräte bietet - und im Gegensatz zu USB 2 nicht die CPU mit Datenschaufeln überbeschäftigt.

appscript - Python als Alternative zu AppleScript. Also Applikations-Steuerung über die AppleScript Schnittstellen direkt aus Python Programmen heraus.

Generische Funktionen mit Python

PEAK bietet ja seit geraumer Zeit generische Funktionen ala CLOS für Python an. Ich wollte immer mal damit rumspielen, aber lange Zeit war es ja einfach nur Bestandteil von PyProtocols, und die Installation etwas haarig. Seit September diesen Jahres ist es aber ausgekoppelt und sehr viel einfacher zu installieren. Also hab ich mich mal draufgestürzt.

Und ich muss sagen: wow. Was Phillip J. Eby da geleistet hat ist wirklich fantastisch. Die Integration in Python (funktioniert ab Python 2.3 - er hat einfach eine eigene Implementierung von Dekoratoren für Python 2.3 erfunden) ist super, auch wenn natürlich das eine oder andere etwas gewöhnungsbedürftig ist.

Ein kleines Beispiel:

import dispatch

[dispatch.generic()]
def anton(a,b):
 "handle two objects"

[anton.when('isinstance(a,int) and isinstance(b,int)')]
def anton(a,b):
 return a+b

[anton.when('isinstance(a,str) and isinstance(b,str)')]
def anton(a,b):
 return a+b

[anton.when('isinstance(a,str) and isinstance(b,int)')]
def anton(a,b):
 return a*b

[anton.when('isinstance(a,int) and isinstance(b,str)')]
def anton(a,b):
 return b*a

[anton.before('True')]
def anton(a,b):
 print type(a), type(b)

Dieses kleine Beispiel liefert einfach eine Funktion namens 'anton', welche auf Basis der Parametertypen unterschiedlichen Code ausführt. Das Beispiel ist natürlich völlig sinnfrei, zeigt aber einige wichtige Eigenschaften von generischen Funktionen:

  • generische Funktionen sind - anders als klassische Objekt/Klassenmethoden - nicht an irgendwelche Klassen oder Objekte fest gebunden. Statt dessen werden sie über ihre Parametertypen ausgewählt.
  • Parametertypen müssen demnach definiert werden - im Regelfall passiert das über eine Minisprache, mit der die Bedingungen der Auswahl formuliert werden. Das ist auch der einzige syntaktische Teil der mir nicht so gut gefällt: die Bedingungen werden als String abgelegt. Allerdings ist die Integration sehr gut, man erhält saubere Syntaxfehler schon beim Laden.
  • eine generische Funktion kann mit beliebigen Bedingungen überladen werden - nicht nur der erste Parameter ist entscheidend. Bedingungen können übrigens auch auf Basis von Werten entscheidungen treffen - jeder beliebige Python-Ausdruck kann dort verwendet werden.
  • mit Methodenkombinationen (Methoden sind hier die konkreten Ausprägungen einer generischen Funktion) kann man eine Methode vor oder nach ihrem Aufruf modifizieren, ohne an den Code selber ranzukommen. Das Beispiel benutzt eine before-Methode die immer (deshalb das 'True') herangezogen wird, um Debugging-Output zu erzeugen. Natürlich kann man bei before/after Methoden jederzeit auch Bedingungen benutzen, um sich auf spezifische Ausprägungen des Aufrufs der generischen Funktion zu hängen - womit generische Funktionen ein vollwertiges Event-System sind.

Ein recht guter Artikel über RuleDispatch (das generische Funktionen Paket) gibt es bei Developerworks.

Das Beispiel zeigt übrigens die Python 2.3 Syntax für Dekoratoren. Mit Python 2.4 kann natürlich auch die @-Syntax benutzt werden. Ein Nachteil soll nicht verschwiegen werden: die Definition von generischen Funktionen und ihren Methoden ist nicht interaktiv möglich - jedenfalls nicht mit der Python 2.3 Syntax. Leider muss man da generell mit externen Definitionen in Dateien arbeiten.

RuleDispatch wird definitiv einen Platz in meinem Werkzeugkasten finden - die Syntax ist einfach genug, die Möglichkeiten hingegen sind gigantisch. Als Eventsystem schlägt es an Flexibilität jedes andere System und als generelle Möglichkeit der Strukturierung des Codes kommt es sehr nah an CLOS heran. Schade, das Django sich vermutlich auf PyDispatch ausrichten wird - RuleDispatch würde meiner Meinung nach wesentlich besser passen (da viele Aspekte in Django als Dispatch auf mehrere Parametertypen geschrieben werden könnten).

LTK - The Lisp Toolkit - wenns mal nur einfach ein bischen GUI sein soll, aber nicht unbedingt die grosse Keule nötig ist - LTK bietet einfache Bindings für TK in Common Lisp. Arbeitet auch hervorragend mit OpenMCL zusammen, sogar CLISP mag damit.

Sams Teach Yourself Shell Programming in 24 Hours - Ein ganzes Buch über Shell-Programmierung. Und damit natürlich auch eine recht gute Einführung in die diversen Tools, die Unix-Systeme zur Verfügung stellen. Sicherlich jedem zu empfehlen, der sich z.B. einen Root-Server zugelegt hat und da jetzt mehr mit machen will - aber eben sonst Linux eher vom GUI her kennt.

Tonnenschwere Moore-Skulptur gestohlen

Diebe mit Kunstgeschmack?

Mit Hilfe eines Krans haben in Großbritannien drei Diebe eine zwei Tonnen schwere Bronzeskulptur des weltbekannten Künstlers Henry Moore gestohlen. [...] Die Polizei äußerte die Vermutung, das Diebes-Trio habe es ausschließlich auf den Materialwert abgesehen und wolle die Figur einschmelzen.

Einschmelzen? Definitiv Kunstgeschmack!

Bundestag verlängert Zoll-Befugnisse

Wie der Bundestag weiter die Entscheidungen aus Karlsruhe mit Füssen tritt:

Scharfe Proteste kommen auch von der Humanistischen Union (HU): "Die Mehrheit des Bundestages hat heute das Bundesverfassungsgericht erneut düpiert", empört sich deren stellvertretender Bundesvorsitzender Fredrik Roggan. Eine Zumutung sei die Argumentation von Schwarz-Rot: "Erst lassen Parlament und Regierung ein ganzes Jahr tatenlos verstreichen, in dem sie eine verfassungskonforme Regelung hätten schaffen können, um sich dann kurz vor Ablauf der Frist auf Zeitknappheit zu berufen." Es sei skandalös, dass immer häufiger Karlsruhe "den außer Kontrolle geratenen Gesetzgeber stoppen muss." Die HU kündigte an, Verfassungsbeschwerde gegen das Gesetz einzureichen und einstweiligen Rechtsschutz zu beantragen, um ein Wirksamwerden der Regelungen über die Zollbefugnisse zu verhindern.

Es ist schon hochgradig absurd wie mitlerweile nicht mal mehr die deutlich verständlichen Urteile aus Karlsruhe scheinbar Eingang in Prolethikerhirne finden. Im Ergebnis ist jetzt die Einschränkung des großen Lauschangriffs der Lächerlichkeit preisgegeben - man kann ja einfach den Zoll lauschen lassen, anstelle der etwas eingeschränkten Polizei ...

Gen-Food-Dreck auch bald in Deutschland?

Keiner will Gen-Food, aber Seehofer schert das nicht:

Eine Vorzugsbehandlung für den Biolandbau soll es mit ihm nicht geben. "Für mich sind konventionelle Bauern genauso wichtig wie Öko-Bauern", sagte er.

Anders als Künast will Seehofer auch den Anbau von genveränderten Pflanzen vorantreiben. Diese spielten weltweit eine immer wichtigere Rolle - "das muss auch in Deutschland möglich sein". Bislang werde den Landwirten der Anbau durch die strikten Haftungsregeln fast unmöglich gemacht. Er werde das von Rot-Grün beschlossene Gentechnikgesetz ändern. Der Schutz von Mensch und Umwelt bleibe aber gewährleistet.

Soso - für ihn sind Biolandbau und konventionelle Bauern gleich wichtig? Klar, beide sind am Arsch mit den gen-veränderten Pflanzen. Den Bio-Bauern wird es immer schwerer gemacht biologisch anzubauen - denn erzähl mir keiner, das Windbestäuber plötzlich keine mehr sind, nur weil sie genetisch verändert wurden. Und die konventionellen Bauern? Die werden mit der Gen-Saat nur noch stärker an die Konzerne gebunden, die den Mist auf den Markt bringen wollen.

Genetisch verändertes Pflanz- und Saatgut liegt weder im Interesse der Verbraucher noch im Interesse der Landwirtschaft. Es liegt einzig und allein im Interesse der Grosskonzerne, die sich diesen Mist patentieren lassen und darüber noch stärkere Kontrolle über eingesetzte Mittel erlangen. Seehofer verkauft die Landwirtschaft und die Verbraucher - und dabei behandelt er tatsächlich alle Teile gleich mies.

Warum sich der Spinner dann allerdings Landwirtschaftsminister und Verbraucherminister nennt, will mir nicht ganz einleuchten - nennt ihn einfach Konzernminister, das kommt der Wahrheit näher.

[GOODIE] Headless Squeak for OS X (Re: Mac VM 3.2.X) - wie man unter OS X ein headless Squeak (Smalltalk-Umgebung ohne GUI-Anteil) für Serverdienste hinbekommt. Besonders interessant für den Einsatz von Seaside.

Hyper Estraier: a full-text search system for communities - Volltextdatenbank mit Attributsuche und einigen anderen netten Eigenschaften - sowie Bindings für verschiedene Programmiersprachen

The Xapian Project - noch ein Volltext-Indexer, dieser mit diversen weitergehenden Features wie z.B. Stemming für verschiedene Sprachen.

Bankenskandal in Italien: keine kleinen Brötchen

Die Übernahme von Kamps durch Barilla ist Teil eines grossen Bankenskandals in Italien:

Unter anderem soll der Topbanker für sich und ausgewählte Kunden Millionen-Gewinne durch illegalen Insiderhandel an der Börse gemacht haben. Eines der einträglichsten dieser dunklen Geschäfte ist nach heute bekannt gewordenen Details aus den Ermittlungsakten offensichtlich die Übernahme der deutschen Großbäckerei Kamps durch den italienischen Konzern Barilla vor knapp vier Jahren gewesen.

Da hat warhaftig jemand keine kleinen Brötchen gebacken. Nudeln und Banken passen ja gut zur Mafia und anderen italienischen Seltsamkeiten, aber ne deutsche Grossbäckerei? Wie spießig ...

Inets 2.5.5 - Webserver in Erlang

Is Rails a DSL? What is a DSL, and is it possible in Python? - Domain Specific Languages - eine recht brauchbare Beschreibung und Betrachtung der Situation in Python und Ruby.

Niederlage für Strafanzeigen-Maschinerie gegen P2P-Nutzer

Das Landgericht Flensburg stärkt die Position der Provider gegen Überwachungsforderungen - aber wie lange wird das halten, anbetracht der Aktivitäten der EU und unser Bundesjustiz-Inkompetenz?

"Unter keinem rechtlichen Gesichtspunkt" könne von einem Zugangsanbieter verlangt werden, "irgendwelche Daten oder Informationen zu speichern", stellt das Gericht aus dem hohen Norden klar.

Linux Daemon Writing HOWTO - wie man unter Linux einen Daemon schreiben sollte (allgemeine Infos)

Yaws - noch ein Webserver in Erlang - dieser ist allerdings HTTP 1.1 kompatibel und enthält Ansätze für Webentwicklung

Python Cheese Shop : python-fastcgi 1.0 - FastCGI Implementation die auf der OpenMarket FastCGI C Bibliothek aufbaut und daher deutlich schneller als reine Python-Lösungen ist.

Python OpenID 1.0.1 Released — OpenID Enabled - OpenID Client und Server in Python. Müsste ich mir mal angucken, könnte ja recht interessant für Kommentarfunktionen sein.

Vorratsdatenspeicherung ist ein Skandal

Da kann ich Petra Tursky-Hartmann nur zustimmen - die Art und Weise, wie dieser Mist durchgewunken wurde, ist übel. Richtig übel. Purer Aktionismus ohne jeglichen wirklichen Sinn - aber man fühlt sich dann ja so fürchterlich sicher, wenn alles ordentlich mitgeschnitten und archiviert wird. Der ganze Datenmüll bringt zwar keine Informationen - im Gegenteil, er wird Ärger machen. Aber wen schert es schon, wenn demnächst Bürger Ärger bekommen, weil mal wieder Viren oder Spam mit gefälschtem Absender an irgendwelche Adressen gehen und damit dann ein Bürger arabischer Herkunft als Terrorverdächtiger gilt. Ist doch egal, trifft doch gute deutsche Bürger nicht.

Und wir dürfen ja immer noch schneller als 130 auf der Autobahn fahren. Wir sind doch frei.

Nachtrag: Bei XS4ALL gibts einen netten Lifecounter, der zählt wie viele CDs für die Speicherung der Email-Logdaten seit September 2005 notwendig sind ...

Brüssel will jetzt auch am Fernsehprogramm rumpfuschen

und uns dabei dann noch mehr Werbemüll bescheren:

"Für die EU-Kommission bedeutet eine verbesserte Kontrolle durch den Endverbraucher, dass wir weniger gesetzliche Bestimmungen brauchen", betonte Medienkommissarin Viviane Reding. "Deshalb ist das Kernstück unseres Vorschlags für eine neue, modernisierte TV-Richtlinie eine grundlegende Deregulierung der audiovisuellen Regeln."

Für die Bevölkerung bedeutet eine verbesserte Kontrolle der Gewählten durch kräftige Schläge mit Stöcken und Tritte in die Weichteile, das wir weniger hirnlose Gesetzesentwürfe bekommen. Deshalb ist das Kernstück meines Vorschlages für eine effizientere Gestaltung europäischer Politik die Einführung der Prügelstrafe für EU-Kommissions-Mitglieder.

Hacking the jProject - The Daily WTF - autsch. Ein Bestellsystem, bei dem jede Bestellung in ihrer eigenen Tabelle im SQL Server gespeichert wird. Grandiose Idee.

How-To Guide for Descriptors - eine sehr gute Erklärung, wie in Python die Properties funktionieren und was es mit den magic methods get , set und del auf sich hat (und wie getattribute da mitspielt).

jacobian.org : Django performance tips - Jacob, einer der Dango Core-Devs schreibt über Performance-Tuning für Django Applikationen. Deckt sich stark mit meinen Erfahrungen.

Nur so eine Überlegung

Was wäre eigentlich, wenn die Gnome-Entwickler in die Linux Kernel Mainlingliste gingen und dort verkünden, das sie Usern empfehlen FreeBSD zu benutzen, weil ja das chroot Modell von Linux armselig ist, und die Kernel APIs sowieso ein Chaos sind und Linux bis heute keine richtig guten Filesystem Notifikationen hat und die Entwicklung von Linux einfach viel zu wenig auf GUI-Anforderungen eingeht. Deshalb würden sie eben Usern den Einsatz von FreeBSD vorschlagen, denn die Kernelprogrammierer von Linux sind ja eh alles Idioten.

Wie würde Linus' Reaktion dann aussehen?

pgpool page - interessanter Verbindungsproxy für PostgreSQL mit Connection-Pooling und Datenbank-Failover.

Von Kontrolle redet mal wieder keiner

Zypries will Dateitauschbörsen bekämpfen:

Die Justizministerin will helfen, Urheberrecht und Marken besser zu schützen. Im Internet betrifft das vor allem Dateitauschbörsen.

Herausgabe von Namen. Festgeschriebene Schadensersatzansprüche. Recht auf Forderung von Bank- und Handelsunterlagen. Nur davon, wie dieser ganze Mist kontrolliert werden soll, so das nicht weiter Missbrauch damit getrieben wird, davon redet sie nicht, die Bundes-Inkompetenz.

Westerwelle an Lächerlichkeit kaum zu überbieten

Sein neuester Coup: FDP will keine Koalition mit Grünen im Bund

"Die Grünen sind ein politischer Gegner und kein strategischer Partner", sagte Westerwelle nach der Sitzung des Vorstandes. Darüber hinaus sei es nicht Aufgabe der FDP, die Grünen aus ihrer Bedeutungslosigkeit herauszuführen, sagte der FDP-Chef. Die "kollegiale parlamentarische Arbeit" mit den Grünen sieht Westerwelle aber durch den Verzicht auf die Koalitionsoption nicht gefährdet.

Also zwei Sachen sind daran wirklich beeindruckend:

  • mit welcher Vehemenz jemand, der Bundespolitisch garnix zu sagen hat, trotzdem glaubt das sich auch nur irgendein Furz dafür interessiert, welche bundespolitischen Aussagen über Koalitionen er macht
  • und die Vorstellung, das jemand einen potentiell notwendigen Partner in der politischen Arbeit (schliesslich sitzt man ja nunmal gemeinsam in der Opposition - und die Linkspartei wird ganz sicher nicht mit dem Bürgerjüngelchen was zu tun haben wollen) erstmal in den Arsch tritt, aber dann erwartet das er weiter mit einem spielt.

Was für ein Kraut raucht der eigentlich?

Wikipedia verklagen?

Wie arm muss man eigentlich mental bestellt sein, wenn man öffentlich zu einer Massenklage gegen die Wikipedia aufruft (siehe den Bericht bei netbib), und da drin dann explizit auch das Ziel des Geldmachens aufführt? Sich hinstellt, als wäre die Wikipedia ein böser Konzern, der in Grund und Boden geklagt werden muss? Und dann nicht mal den Mumm hat, seinen jämmerlichen Namen daneben zu setzen, so das man direkt sieht welche Würstchen dahinterstehen?

Das Logo der Wikipedia zu stehlen und umzubauen um es für die eigene Site zu benutzen, das war ihnen auch nicht zu peinlich.

Seltsames iTunes Verhalten

Kommit mir schon komisch vor: ich rippe Hörspiel-CDs, bei denen die Titel nicht durchnumeriert sind, sondern halt einfach Titel sind. Nach dem Rippen werfe ich die Titel dann in eine feste Playlist, damit die dort in der richtigen Reihenfolge stehen. Guck ich mir die Reihenfolge an, ist sie durcheinander. Ich kann bisher kein sinnvolles Muster erkennen, was da zugrunde liegen könnte. Nur gerade bei Hörspielen ist das natürlich hochgradig nervig - zumal viele Hörspiele in ihrem Booklet nicht die explizite Reihenfolge drin stehen haben, ich also teilweise mühsam die selber zusammensortieren muss.

Bei den Otherland-CDs wars nett: diejenigen, die die Erfassung der CDDB Daten gemacht haben, haben die ganzen kleinen Stücke durchnumeriert. Jetzt bei "Wachen! Wachen!" muss ich mal wieder alle 5 CDs selber sortieren - zum Glück sind die Titel an den Stücken identisch mit denen im Booklet, so das ich das manuell machen kann.

Aber eigentlich ist das schon ganz schön bescheuert, das ich das machen muss - denn wozu hab ich einen Computer? Wieso kann iTunes die Reihenfolge der Stücke nicht einfach so lassen wie sie reinkommt?

Guardian Unlimited Special reports How planespotters turned into the scourge of the CIA - Artikel beim Guardian, wie die CIA von Plane-Spottern "erwischt" wurde (und möglicherweise noch weiter erwischt wird).

Super-DRM-Architektur der Zukunft

Und weiter gehts mit DRM-Schwachsinn

EFF-Mitglied Cory Doctorow warnt davor, dass der flächendeckende Einsatz von CPCM das Ende von freier Software sei. Die Anforderung, das System gegen jegliche Veränderung robust zu machen, seien mit FOSS-Konzepten nicht vereinbar. Überdies könne nationale Politik zum Urheberrecht durch CPCM einfach ausgehebelt werden, indem US-Kulturexporteure die politischen Spielregeln diktierten. Die EFF will den Standard auf jeden Fall verhindern. "Das ist," so Doctorows Meinung, "keine Spezifikation, die zu guten Zwecken eingesetzt werden kann, Punkt."

Liest man sich die Beschreibung des ganzen so durch, fordert da letztendlich jemand die totale Kontrolle über jegliche Form von Computer oder Mediengerät - letztendlich über jedes Gerät, das auch nur ansatzweise in die Nähe von medialen Inhalten kommen könnte. Kompletter Wahnsinn, das ganze. Das Erschreckende daran: bei den hirnlosen Prolethikern wie wir sie in Berlin und in Europa allgemein rumrennen haben, ist fast zu befürchten das so ein Unfug sich durchsetzt und die Freiheiten einfach an sterbende Industriezweige mit aufgeblähten und nicht mehr zeitgemäßen Geschäftsmodellen verschachert werden, um deren Managementfehler zu kaschieren.

Und wird sich jemand drüber aufregen? Ach watt. Man kann doch weiter auf der Autobahn schneller als 130 fahren, wir sind doch frei ...

Und wir machen alle Fehler erneut

Es gibt im Moment einiges an Aktivität im Bereich der Microformats - die Idee dahinter: Informationsblöcke nicht in XML kodiert abzulegen, sondern in vordefiniertem HTML. Dazu werden dann die CSS Klassen benutzt, um zu definieren was ein einzelnes Format ist. Logischerweise gibt es Probleme mit kollidierenden Stylings - was für ein Wunder. Ich selber bin jedenfalls immer wieder erstaunt, wie viel Energie Entwickler auf saublöde Ideen verwenden können.

Wir hatten mal ein HTML, das sich nicht nur mit Semantik beschäftigte, sondern auch mit Layout. Und das produzierte die allseits beliebten FONT-Tag-Orgien in HTML-Seiten. Im Laufe der Zeit hat sich bei den meisten die Idee durchgesetzt, das Trennung von Semantik und Layout sinnvoll ist - Semantik als Auszeichnungsgrundlage für den Inhalt, Layout in die CSS Files und als Verbindung zwischen diesen die IDs und Klassen an Tags. Zusätzlich mit DIV und SPAN "anonyme" Tags ohne vordefinierte Semantik (ausser "das ist ein Block von Text" und "das ist eine Inline-Strecke von Text" - wobei diese Bedeutung problemlos überladen werden kann), für die Sachen die mit der normalen Semantischen Auszeichnung nicht gehen (was hauptsächlich an der selten dämlichen Idee von HTML liegt, das es zwar Auszeichnungen für Überschriften gibt, aber keine Auszeichnungen für Abschnitte von Texten, zu denen diese Überschriften gehören würden).

Was machen Microformate jetzt? Nunja, die gleiche blöde Idee, etwas zu missbrauchen - nämlich in diesem Fall die oben angesprochenen Verbindungsstücke zwischen der Semantik und dem Layout. Microformats geben diesen eine Bedeutung - z.B. wäre eine DIV mit einer Klasse 'description' dann die Beschreibung eines Reviews - lest euch die Details in der hReview Referenz durch. Sorry, aber sowas muss einfach zu Konflikten führen - haben die Pappnase noch nie was von Namespaces gehört? Die Microformats addressieren explizit XHTML - und das hat genau für den Zweck der Einbettung eben Namespaces. Und wenn man meint, man müsse schon eine so blöde Idee wie diese umsetzen - könnte man dann nicht wenigstens schlau genug sein, den Teilen etwas kryptischere, aber dafür eindeutigere Klassen zu geben?

Wie gesagt, erstaunlich wie viel Energie in solche dämlichen Ideen gehen, die dazu verdammt sind mehr Probleme als Lösungen zu schaffen.

Deadlock - interessanter Artikel über Deadlocks in Systemen und über Zombiprozesse, Signalbearbeitung etc.

Fragen, die man sich stellen muss

Wäre eigentlich das Hacken des Sicherheitssystems zur Absicherung des Einwegpfand ein terroristischer Akt?

Grössenwahnsinnige Musikverlage

Konzertierte Aktion gegen frei zugängliche Noten und Songtexte

MPA-Präsident Lauren Keiser zeigte sich gegenüber der BBC äußerst verärgert über die seiner Ansicht nach illegalen Seiten mit Gitarren-Licks und Notenvorlagen und sähe deren Betreiber vorzugsweise hinter Gittern. Grundsätzlich unterliegt Musik nicht nur als konkrete Aufführung, sondern auch in jedweder gedruckter Notation dem Urheberrecht.

Demnächst landeste im Knast, wenn du versehentlich im Takt von Alle-Meine-Entchen furzt ...

Kampfsprache

UCI-Reaktionen auf die Grand Tours Wertungsidee der drei grossen Touren:

"Als einziger Akteur dieser Reform, der selbst keine eigenen ökonomischen Interessen verteidigen oder fördern will, wird die UCI niemals eine solche überflüssige und gefährliche Vision teilen, die der Entwicklung des Radsports schadet", hieß es in einem offiziellen Statement. Die Einführung oder Änderung des Reglements stehe allein dem internationalen Verband zu.

Man sieht schon wie sich die Truppen der UCI formieren, um in die Leitungsbüros der drei grossen Tourorganisationen einzudringen und die Rädelsführer festzusetzen. Danach gibts dann ein Straflager für renitente Tour-Organisatoren, die sich der UCI nicht unterordnen wollen. Vielleicht kriegen sie ja auch Unterstützung von 'Mad Eye' Serlet?

Klimagipfel: USA drohen mit Veto

Die US of A, Land der Freien und Verblödeten, gibt mal wieder den Ober-Rüpel:

Hinter vorgehaltener Hand sind selbst erfahrene Gipfelteilnehmer aus Westeuropa schockiert über die pöbelhafte Verhaltensweise der amerikanischen Chefverhandler, die hier agieren wie John Bolton in der UN, und "ihre akademische Bildung gut verbergen".

Schockiert bin ich höchstens über die Blauäugigkeit der Politiker, die sich so verwundert über das Verhalten Amerikas geben - als ob die aktuellen Berichte nicht eine sehr deutliche Sprache sprechen, das die derzeitige US-Administration sich einen feuchten Furz um die Wünsche anderer kümmmert und selbst internationales Recht für sie keine sonderlich wichtige Stellung einnimmt. Warum sollten die sich auf dem Klimagipfel anders verhalten?

Ganz besonders schockierend dann aber, wie ständig das Merkel davon labert, das die Beziehungen zur USA verbessert werden müssten - wegen meiner gerne, aber bitte erst mit einer nächsten, möglicherweise rationalen Argumenten zugänglichen, Administration. Die derzeitige ist nicht koalitionstauglich, um mal einen Begriff aufzugreifen, der hierzulande gerne für sowas harmloses wie die PDS benutzt wird ... (Angst vor blass-rot angestrichenen Ossies haben, aber mit sowas wie Bush zusammen wollen - sowas nenn ich schockierend)

Benutzerkennwörter in der Administration festlegen

Ein eher hässlicher, aber dennoch nützlicher Monkeypatch:

# monkey-patch für auth.users
from django.models.auth import User

def user_pre_save(self):
    if not self.password.startswith('sha1$'):
        self.set_password(self.password)

User._pre_save = user_pre_save

Fügen Sie dies in Ihre Modelldatei (oder an einen anderen Ort, der früh geladen wird) ein, und Sie können Passwörter im Admin-Bereich durch Eingabe von Klartext-Passwörtern festlegen. Wenn das Passwort mit 'sha1$' beginnt, wird es als bereits verschlüsselt angesehen und es passiert nichts. Wenn es nicht mit dieser Zeichenfolge beginnt, wird es mit der Standard-Django-Funktion zur Passwortverschlüsselung umgewandelt.

Nein, dies ist nichts, das in den Kern gehört - es ist viel zu hässlich dafür. Aber zumindest ermöglicht es Ihnen, Passwörter über den Admin-Bereich festzulegen, ohne dass der Benutzer den tatsächlichen Passwort-Hash berechnen muss.

Sony fällt schon wieder auf

Sony caught in another DRM snafu

Stop me if you've heard this one before. A record label uses DRM to sort of keep its customers from copying the music. It turns out that the software poses a threat to the user's PC. So the label issues a patch... which opens up another security hole. If you guessed that the label in question is Sony, you'd be correct. If you guessed that I'm recapping last month's rootkit debacle, you'd be wrong.

Tja. Selten dämlich bei Sony. Ob die es irgendwann überhaupt noch mal lernen?

Oh, und das ich jetzt vermutlich keinen Aibo angeboten bekomme, ist mir ehrlich gesagt ziemlich wurscht

SystemExit und exception handlers

Immer wieder gerne genommen: SystemExit. Eine Python-Exception, die viele nicht kennen. Das besondere an dieser Exception: sie ist kein Fehler. Sie tritt auch nicht unerwartet auf. Sie wird nämlich einfach von sys.exit ausgelöst. Die Idee dahinter ist, das man so im dynamischen Ablauf eine Ende-Bearbeitung einhängen kann (z.B. irgendwelche Dateibereinigungen), ohne sich in globale Exitbearbeitung einzuklinken (mit all den Problemen die das hat).

Das Problem ist jetzt, das viele Programme und Bibliotheken einen globalen Exception-Handler installieren. Einen, der jeden Fehler abfängt und hübsch formatiert per Mail verschickt, irgendwo logged oder ähnliches. Mache ich auch ständig. Geht auch klasse - ausser wenn man in seinem Programm tatsächlich mal explizit ein vorzeitiges Ende einleiten will. Dann klappt da garnix mehr - denn man erhält entsprechende Fehler für einen Nicht-Fehler.

Besonders kritisch wird das ganze im Zusammenhang mit mehreren Prozessen. Wenn man nämlich im Laufenden Betrieb einen Prozess anstartet, will man diesen auch beenden, ohne das eventueller nachgelagerter Code ausgeführt wird. Am besten sieht man das an einem Beispielprogramm:

import signal
import os

try:
 pid = os.fork()
 if pid:
 print "Elternprozess", os.getpid()
 else:
 print "Kindprozess", os.getpid()
 sys.exit(0)
except:
 print 'Fehler aufgetreten in Prozess', os.getpid()

print "Das darf nur der Elternprozess ausführen", os.getpid()

Dieser Code hat einfach einen globalen Fehlerbehandler, der Fehler recht unspezifisch abfängt. Innerhalb des Codes wird ein paralleler Prozess mit fork gestartet. Dadurch, das SystemExit wie alle anderen Exceptions behandelt wird, wird aber der Kindprozess nicht korrekt beendet - ein Prozess kopiert den gesamten Zustand des Elternprozesses, inklusive Rücksprungadressen, offene Fehlerbehandlungen, Dateien, Datenbankverbindungen und so weiter.

Das ist natürlich fatal - denn hier wird ja sys.exit abgefangen. Es gibt also eine Fehlermeldung für den ganz normalen sys.exit(0) Aufruf. Und noch schlimmer: da SystemExit nicht extra behandelt wird, gehts danach normal weiter - und der Kindprozess rennt in Code für den Elternprozess rein. Code läuft also doppelt, was unter Umständen kritische Ergebnisse haben kann.

Wenn man den ganzen Stack an Software voll kontrollieren kann, ist die Lösung einfach:

import signal
import os

try:
 pid = os.fork()
 if pid:
 print "Elternprozess", os.getpid()
 else:
 print "Kindprozess", os.getpid()
 sys.exit(0)
except SystemExit:
 raise
except:
 print 'Fehler aufgetreten in Prozess', os.getpid()

print "Das darf nur der Elternprozess ausführen", os.getpid()

Dadurch wird einfach der SystemExit neu geworfen - also neu ausgelöst - ohne eine Meldung zu machen. Im Regelfall wird dann die Standardbehandlung von Python zuschlagen und den SystemExit in eine normale Beendigung umsetzen.

Was aber machen, wenn man mehrere gestapelte Varianten des falschen Fehlerhandlings hat? Ich hab sowas zum Beispiel bei Django und FLUP (dem FCGI/SCGI Server für Python). In Django hab ich es geändert, dann hat der Fehler im FLUP zugeschlagen. Was macht man dann?

Die Lösung ist ein wenig brutaler:

import signal
import os

try:
 pid = os.fork()
 if pid:
 print "Elternprozess", os.getpid()
 else:
 print "Kindprozess", os.getpid()
 os.kill(os.getpid(), signal.SIGTERM)
except:
 print 'Fehler aufgetreten in Prozess', os.getpid()

print "Das darf nur der Elternprozess ausführen", os.getpid()

Letzten Endes begeht der Prozess einfach Selbstmord - er schickt sich selber ein SIGTERM, also ein Beendigungssignal. Das gleich, das man normalerweise von der Shell schicken würde. Allerdings muss man dann sicherstellen, das alle eventuell nötigen Nachbereinigungen entweder schon gemacht sind, oder dann in einer SIGKILL Behandlungsroutine laufen - sonst hat man unter Umständen Problemen (z.B. sollten Datenbanktransaktionen schon commited sein).

Auch bei dieser Lösung muss man aufpassen, das nicht irgendwelche offenen Resourcen den Prozess blockieren - sonst produziert man unter Umständen Zombiprozesse. Oftmals ist es daher besser für solches Multiprozessing einen Verwaltungsprozess sehr viel früher im System zu starten - ausserhalb der Fehlerbehandlungskette - und diesen dann zu benutzen um Bearbeitungsprozesse zu starten. Allerdings hat das dann den Nachteil, das diese solcherart gestarteten Prozesse nicht die Umgebung des Elternprozess erben. Man muss daher dann in der Regel mehr Vorbereitungen treffen, um die gewünschten Aktionen auszuführen. Einen ähnlichen Ansatz verfolgt übrigens Apache - dort werden die Prozesse aus einem sehr frühen Basiszustand heraus erzeugt, so das sie möglichst Resourcenfrei daherkommen.

Vampire - Erweiterung von mod_python, mit dem es etwas Entwicklerfreundlicher wird. Zum Beispiel kann es dann auch automatischen Code-Reload.

Yellow-Box für Windows

Sie lebt? Jedenfalls gibts Gerüchte dazu. Wobei mich allerdings Sätze wie diese hier:

Leiter des Dharma-Projekts soll Bertrand 'Mad Eye' Serlet sein, Senior Vice President of Software Engineering bei Apple, der auch schon an der Entwicklung von iCal und iSync beteiligt gewesen sein soll.

ein wenig irritieren. Ich mein, also hallo, was sind das für Namen? Mafia? Söldner? Verirrte Wild-West-Figuren?

Apple Aperture Review - oder: Beware of Version 1.0 | Die Stimme der freien Welt - in meinen Kommentaren (ursprünglich auf der alten Site) gefundener Verriss von Apple Aperture. Der Artikel ist auf Deutsch und sehr interessant, da er gerade aus der Sicht eines normalen Anwenders geschrieben ist.

Erschreckend ist ...

... eine Website zu Potenzmitteln, Penisverlängerung und all diesem Müll, der einem in Spam angeboten wird, zu finden - die ein scheinbar korrektes deutsches Impressum mit Anschrift, Umsatzsteuer-ID und so hat. Autsch. Hat der Betreiber ein bischen zu viel Spam gelesen?

Noch erschreckender, wenn so eine Website dann von scheinbar dem Besitzer auch noch in Blogs versucht wird zu bewerben, in dem sie als Homepage in Kommentarfunkionen eingetragen wird. Doppel-Autsch.

Learning Seaside - coole Demo was mit Seaside (Smalltalk-Webframework) und AJAX gemacht werden kann. Im Prinzip eine Datenbankoberfläche mit frei konfigurierbarem Datenbankmodell - sowas wie Google Base, nur in Cool.