Archiv 29.9.2005 - 14.10.2005

Seehofer stärkt die Position der SPD ...

... sagen Merkel und andere CDU Grosskopferte. Warum machen sie dann Stoiber zum Wirtschaftsminister? Oder ist das jetzt ein anderer Titel für den Hofnarren? Das angedrohte Horrorkabinett können sie jedenfalls meiner Meinung nach gerne gleich zu Madame Tissot entsorgen.

Spyware in World of Warcraft?

Laut Bruce Schneier benutzt Blizzard Entertainment Spyware zur Prüfung der Einhaltung ihrer EULA - und zwar eine, die weitaus mehr anguckt als nur die Daten aus dem eigenen Programm, sondern auch zusätzliche Daten aus anderen Anwendungen ...

Bedenklich eben weil es nicht nur die Daten des eigenen Programms ausliest - aber selbst dann wäre es noch bedenklich, wenn es sich wirklich auf die Software von Blizzard Entertainment beschränken würde. Oder hat einer der User der Software dieser Überwachung zugestimmt? Dem Nachladen von Code auf den eigenen Rechner? Dem durchforsten von Systemlisten nach Informationen? Dem Verschicken dieser Informationen über das Internet?

Fraglich auch wie sowas mit Datenschutzbestimmungen z.B. in Deutschland konform sein soll.

Tailor - Versionsvermittler

Tailor ist ein Python Script das Changesets zwischen verschiedenen Versionssystemen austauschen kann. Im Prinzip kann man damit auch Repositories in anderen Versionssystemen spiegeln.

Thatcher

Auch so eine Kriegstreiberin, der jetzt gehuldigt wird, nur weil sie 80 geworden ist. Egal das sie einen Krieg angefangen hat. Was scherts die Medien - huldigen ist in. Korrupte und meineidige Ex-Bundeskanzler werden da genauso gerne genommen wie Kriegstreiber und anderes Gesocks. Ach watt, ich bin warscheinlich einfach gerade nur fürchterlich destruktiv, weil seinen Amtseid brechen und sich am Gesetz vorbeimauscheln und Kriege anfangen, das ist ja so richtig konstruktiv.

Trac on Darcs

Ich liebe ja bekanntermaßen Trac als Projektwerkzeug - und bin mit Subversion als Versionierung (oder neuerdings mit SVK als auf Subversion aufsetzendem Versionswerkzeug) ganz zufrieden. Aber darcs hat mich auch begeistert, weils so schön unbürokratisch ist - und jetzt gibts auch Trac auf Darcs - eine gepatchte Version, die eben mit darcs statt Subversion zusammenarbeitet. Ich glaub, ich werd mir das mal näher angucken ...

Der gleiche Patch erlaubt auch ein Bazaar-NG Backend für Trac - was ganz besonders interessant ist, weil sowohl Trac als auch Bazaar-NG in Python geschrieben sind. Ich glaube auch den Teil sollte ich mir mal angucken.

Und gerade wurde ich im IRC noch darauf hingewiesen, das SCons auch Python ist - ein ziemlich netter Ersatz für das doch schon arg in die Jahre gekommene Make.

Klingt schon fast nach Developer-Nirvana das ganze

Falls mal jemand so wie ich einem Kollegen ohne SQL-Erfahrung bezüglich Oracle aufs Pferd helfen soll: Oracle/SQL Tutorial. Ganz nett gemacht.

SVK - Subversion distributed

SVK ist ein verteiltes Versionssystem mit einer Besonderheit: es kann Trees anderer Versionssysteme (unter anderem SVN) spiegeln und darauf dann Arbeitskopien definieren. Man kann also ein Subversion-Repository eines Projektes spiegeln, einen eigenen lokalen Branch anlegen, darin arbeiten und die Änderungen lokal versionieren. Wenn dann der eigene Branch soweit ist, kann man einen Commit gegen das Ursprungsrepository machen, oder sich einfach einen Diff ziehen und dem Entwickler zuschicken. Sehr nette Sache, ganz besonders wegen der guten Integration mit Subversion.

Für vim: snippetsEmu emuliert die Snippet-Funktion von TextMate, nur halt mit vim Makros.

vi meets Word

Erschreckend: vi Steuerung für Word - als Word-Makros aufgebaut. Irgendwie krank. Ich glaub, ich muss mir das installieren ...

Wie man in Python Accent-Zeichen in ihr Basiszeichen umwandelt. Ziemlich banaler Ansatz, aber für viele Zwecke völlig ausreichend. Für richtige Lösungen gibts dann PyICU ...

Keine Ahnung ob ich das schon mal hatte, aber Caching Tutorial for Web Authors and Webmasters sieht nach einer brauchbaren Beschreibung der Caching-Direktiven in HTTP aus, mit Erläuterungen für Anwendungsprogrammierer.

Django i18n status

I worked a bit more on the i18n stuff in django today and finally switched my gallery to the i18n branch. You can now see the strings on that site with either english or german settings. Other languages get english output (so if you are in Germany and still see english strings - check the language settings in your browser, wether German is defined with higher priority than English).

The code works quite nice and I think I will give it a week or so to settle and than start to put finishing touches to it - like adding much more translation hooks to the django source.

Ein Loch ist im Kanal

Oders ausgedrückt: wir haben den Kanal leer:

Allerdings könnte nach Informationen des WDR das Sperrwerk in Lüdinghausen drohen zu brechen. Vorsorglich wurde daher für den Unterlauf der Lippe bis Ahsen Katastrophenalarm ausgerufen.

Schon komisch, die Vorstellung das der Kanal jetzt an zwei Stellen eine Vollsperrung hat ...

Getting Nix Done - Jau!

Innovationskraft von Softwarepatenten

Weil Softwarepatente so hohe Innovationskraft innewohnt, verschwindet wohl der Blackberry vom US-Markt, denn:

As part of that litigation, NTP, whose only assets are wireless e-mail related patents, had been granted an injunction banning the sale of BlackBerry devices in the United States and forcing Research in Motion to stop providing e-mail services to all American customers except government account holders.

Genau. Eine Firma, die nichts hat ausser ein paar Patententen (die auch noch ziemlich banal sind, wie man das halt bei US-Patenten fast schon gewohnt ist) hat per Gericht einen Verkaufsstopp gegen eine andere Firma, deren Produkt physikalisch zu kaufen ist, erwirkt. Wahnsinnig innovativ. Und sicherlich so wichtig, sowas müssen wir auch in Europa haben.

Kreationistenpest

Oh, toll, jetzt stehen die Kreationisten schon in Thüringen. Nunja, kein Wunder, wenn man zu einer Partei gehört, die auch einen Gottesbezug in der Europa-Verfassung fordert ...

Und nein, "Intelligent Design" ist keine wissenschaftliche Theorie die als Alternative zur Evolutionstheorie diskutieret werden könnte - bei ID handelt es sich um kompletten Mumpitz, um religiös motivierte Wissenschaftsfeindlichkeit. Minimal verkappter Kreationismus, mehr nicht. Von daher ist die Forderung nach einer wissenschaftlichen Diskussion dieser angeblichen "Theorie" schlichtweg Unfug.

Cryosat stürzt ins Eis

Shit - das ist ärgerlich. Vor allem wegen des Einsatzzweckes des Satelliten:

Dies war die erste Mission im "Earth Opportunity Missions"-Programm der Europäischen Weltraumbehörde (ESA), das die Lösung wissenschaftlicher Probleme mit Hilfe relativ kleiner und kostengünstiger Satelliten zum Ziel hat. Der Satellit verfügte als erster über ein neuartiges Radaraltimeter, das mit sehr hoher räumlicher Auflösung sogar einzelne Eisschollen unterscheiden und deren Dicken messen kann.

Hoffentlich wird das Projekt neu aufgelegt ...

Interessant an dem Anteil der Russen finde ich auch die Schwerter-zu-Pflugscharen Mentalität dabei: die Rakete war eine umgebaute Interkontinentalrakete ...

von Galen, seine Seeligkeit und sein Widerstand

Der WDR hat einen sehr guten Text über Kardinal von Galen online: Clemens August von Galen - ein Widerstandskämpfer?.

Der "Löwe von Münster" hat gut gebrüllt, wenn er denn brüllte. Krieg und Diktatur als solche hat er nie in Frage gestellt, sofern es nicht kirchliche Belange betraf. Nie hat er ein Wort zur Verfolgung der Juden gefunden. Während er die ideologische "Vernichtung des Christentums" fürchtete, blieb die tatsächliche Vernichtung des Judentums unbeachtet.

Der Artikel ist wirklich lesenswert, weil er sich mit den kritischen Punkten an von Galen auseinandersetzt - es ging ihm um die Kirche, die Freiheiten der Kirche. Nicht um Demokratie oder Freiheit für alle. Auch war sein Widerstand nicht aus ihm alleine heraus entstanden, er hatte Menschen die ihn drängten. Und er war Nationalist - jenseits der Grenzen, womöglich bei den bösen Bolschewiken, da kann man ruhig morden.

Der einzige Teil seines Widerstandes, der wohl wirklich von persönlicher Abscheu und Empfindung motiviert war und nicht als Versuch des Schutzes der Kirche zu werten ist, ist sein deutliches Eintreten gegen die Euthanasie. Von daher war er immer noch ein bischen mehr Widerständler als die meisten Kirchenfürsten. Zumindestens den Teil von ihm kann man anerkennen.

Keine Kirche!

Die Art und Weise wie die katholische Kirche jetzt allerdings Kardinal von Galen feiert, ist peinlich. Denn als grosses Aushängeschild des Widerstandes kann er wirklich nicht dienen - wenn das, was er geleistet hat, das beste ist was die katholische Kirche im Naziregime vorzuweisen hat - dann sollten sie besser verschämt schweigen. Ein Beleg für die Unvereinbarkeit des Kreuzes und des Hakenkreuzes ist das auf keinen Fall. Eher ein Beleg dafür, das die katholische Kirche allenfalls um ihre eigene Macht gebangt hat, aber kein sonderliches Interesse an der Verhinderung dieses abartigen Regimes hatte.

Wetterbloggen

Im Oktober gemütlich im Gartencafe Kuchen essen und später dann im Restaurant schön draussen sitzen und zu Abend essen - könnte ich mich dran gewöhnen.

Zabels Abschied von T-Mobile

könnte besser ja garnicht sein: Paris-Tours zu gewinnen ist sicherlich ein ziemlich netter Erfolg. Er ist eben nicht einfach altes Eisen. Und entgegen zum Kommentar in der Tagesschau hat man ihn nicht ausgemustet - er hat T-Mobile ausgemustert. Und sich für sein Domina-Milka-Team nochmal gut empfohlen.

Ajax mal anders

Subway's new Ajax framework hat einen interessanten Ansatz: per inspect wird Python-Source aus einer Methode geholt und dann nach JavaScript übersetzt. Natürlich wird dabei nur ein Subset von Python unterstützt, aber die Idee ist recht interessant - Python-Syntax für JavaScript.

Natürlich werden die semantischen Unterschiede zwischen Pythons und JavaScripts Interpreterablauf einen früher oder später beissen, aber für einfachere Sachen (und viele Ajax-Sachen sind tatsächlich recht banaler Code auf JavaScript-Seite) kann man so ohne JavaScript-Source aufbauen.

Das ganze würde natürlich wesentlich eleganter ausfallen, wenn Python eine vernüntige Makrosprache integriert hätte - bzw. wenn man in Python Makros in der Art bauen könnte, wie man es in Common Lisp kann. Damit wäre die Definition des Subsets und die Erstellung des JavaScripts daraus wesentlich eleganter machbar. Eventuell könnte hier P hillip J. Ebys Arbeit an Konfigurationssprachen helfen - es ist ja im Prinzip der Ansatz einer Makro-Einrichtung für Python.

Ich persönlich würde daher bei Python eher einen Ansatz verfolgen bei dem durch Python-Code-Ablauf (also nicht Parsen und Compilieren) JavaScript generiert wird - denn viele Ajax-Funktionalitäten sind recht standardisierte Abläufe. Es wird in der Regel der DOM-Tree manipuliert, nach festen Vorgaben, mit Daten die über JSON angeliefert werden. Das meiste liesse sich gut standardisieren. Allerdings hab ich da noch keinen konkreten Code parat, bisher ist Ajax bei mir immer noch direkter JavaScript-Code - allerdings mit Hilfe von MochiKit.

Mal schauen was sich im Ajax-Python-Land noch so tut. CrackAjax ist zumindestens mal ein weiterer Ansatz, der möglicherweise andere inspiriert das ganze etwas besser auszubauen.

Blogcounter, Schwanzlängen und andere Lügen

Im Moment wird ja mal wieder wild über Hitzahlen und ähnlichen Unfug diskutiert. Meist interessieren die mich nicht (mein Server hat ein abstrus hohes Freivolumen, das ich eh nie ausnutzen kann, die Serverlast ist auch gering - also was scherts mich, wie viel hier ankommt?), aber bei den diversen Verkündungen von Hitzahlen, Pagesviews und Visits muss ich dann doch immer leicht grinsen.

Mal so als kleine Analyse der ganzen Geschichte. Zuerst der wichtigste Teil: wo kommen die her, diese Zahlen? Grundsätzlich gibts zwei Möglichkeiten. Eine baut darauf auf, das Seiten ein kleines Element enthalten (z.B. ein Image - manchmal unsichtbar - oder ein Stück JavaScript oder ein Iframe - alle gemeinhin unter dem Begriff Webbug (Web-Wanze) zusammengefasst) welches gezählt wird. Die andere Methode geht auf die Logfiles des Webservers und wertet diese aus. Es gibt noch eine dritte, bei der über einen Cookie der einzelne Besucher identifiziert wird - ist aber eher seltener in Benutzung, ausser für einige eher unbeliebte Werbesysteme.

Es gibt grundsätzlich eigentlich nur wenige echte Zahlen die sowas wirklich liefern kann (mit Ausnahme der Individualisierung über Cookies): zum einen Hits, zum anderen Megabytes and Transfer. Ganz entfernt nützlich gibts noch die Anzahl unterschiedlicher Hosts (IP-Adressen) die zugegriffen haben.

Diese Zahlen haben aber ein problem: sie sind rein technisch. Und damit stark von der Technik abhängig. Hits gehen rauf, wenn man viele externe Elemente hat. Bytes gehen rauf wenn man viele lange Seiten hat (oder grosse Bilder oder ...). IP-Adressen gehen runter, wenn viele Besucher hinter Proxies hängen. Und gehen rauf, wenn man viele ISDN-User hat - wegen der dynamischen Einwahladressen. Veränderungen in den Zahlen haben also sowohl mit Veränderungen bei den Besuchern als auch bei den Seiten zur Ursache.

All diese Zahlen sind also so aussagekräftig wie der Kaffeesatz in der morgendlichen Tasse. Deshalb ziehen Leute aus diesen - technisch zumindestens definierten - Zahlen dann andere Zahlen, die was aussagen sollen. Hier sind vor allem die Visits (Besuche auf der Webseite), die Page-Impressions (Zugriffe auf echte Seitenadressen) und die Visitors (unterschiedliche Besucher) zu nennen.

Nehmen wir mal die einfachste Zahl, die wenigstens noch rudimentäre Verankerung in der realen Welt hat: die Page-Impressions. Hierzu kann man auf verschiedenen Wegen kommen. Man kann die oben genannten Webbugs auf die Seiten packen die gezählt werden sollen. Damit ist die Zahl ungefähr so verlässlich wie das Zählsystem. Dummerweise sind die Zählsysteme das absolut nicht, aber dazu gleich mehr. Die Alternative - über die Webserver Logfiles zu gehen - ist etwas besser. Dazu zählt man einfach mit, wie viele Hits mit dem Mime-Type text/html (oder welche auch immer für die eigenen Seiten genutzt werden) ausgeliefert werden. Man kann auch nach .html zählen - aber viele Seiten haben sowas nicht mehr in den Adressen stehen, der Mime-Type ist da verlässlicher.

Aussagekraft? Naja, eher zweifelhaft. Viele Benutzer werden über ihre Provider über Zwangsproxies gezogen - ein Proxy hat aber die Eigenschaft, das er Hits vermeiden hilft. Hat ein Besucher die Seite abgerufen, wird sie möglicherweise (abhängig von der Konfiguration des Proxies) an andere Besucher aus dem Cache ausgeliefert, nicht vom Server geholt. Betrifft zum Beispiel ganz AOL - die Zahlen sind dort deutlich verfälscht. Je A-List-Bloggerisch der Blogger wirklich ist, desto verfälschter (da ja Cache-Hits häufiger sein können als bei wenig besuchten Blogs) sind die Zahlen oft.

Zusätzlich machen Browser auch sowas - Seiten zwischenspeichern. Oder Besucher machen was anderes - Seiten nochmal laden. Proxies wiederholen manchen Ladevorgang automatisch, weil der erste vielleicht wegen Timeout nicht ganz durch ging - das sind alles Verfälschungen der Zahlen. Trotzdem sind die Page-Impressions noch wenigstens halbwegs brauchbar. Ausser man benutzt Webbugs.

Denn Webbugs haben ein generelles Problem: es sind eben nicht Hauptseiten. Sondern eingebettete Objekte. Hier verhalten sich Browser oft noch hartnäckiger - was im Cache ist, wird aus dem Cache angezeigt. Wozu das Bildchen denn nochmal holen? Klar, man kann da vorbeugen mit geeigneten Header - trotzdem gehts oft genug schief. JavaScript-basierte Techniken gehen voll an Benutzern ohne JavaScript vorbei (und glaubt mir, es gibt von denen wesentlich mehr als gerne zugegeben wird). Letzten Endes haben Webbugs die gleichen Probleme wie die eigentlichen Seiten, nur noch ein paar zusätzliche, eigene Probleme. Warum die trotzdem genutzt werden? Weil es die einzige Möglichkeit ist, seine Statistiken auf einem anderen System als dem eigenen zählen zu lassen. Also unerlässlich für globale Schwanzlängenvergleiche.

Nunja, verlassen wir die Page-Impressions und damit den Bereich der Rationalität. Kommen wir zu Visits, und damit eng verwandt den Visitors. Besucher sind geheimnisvolle Wesen im Web - man sieht nur die Zugriffe, aber wer das ist und ob man ihn kennt, das ist nicht sichtbar. Um so wichtiger für Marketingzwecke, denn alles was Humbug ist und nicht nachprüfbar, lässt sich wunderbar für Marketing ausnutzen.

Besucher sind für einen Webbrowser nur über die IP des Zugriffes erkennbar, zuzüglich der Header die der Browser schickt. Das ist leider viel mehr als man wahrhaben will - aber (ausser bei den Cookie-Setzern mit individueller Benutzerverfolgung) nicht genug zur eindeutigen Identifikation. Denn Benutzer teilen sich IPs - jeder Proxy wird als eine IP aufschlagen. Benutzer nutzen vielleicht sowas wie tor - und damit ist die IP häufiger eine andere als beim letzten Mal. Benutzer teilen sich einen Rechner in einem Internet-Cafe - und damit sind es eigentlich nicht Benutzer, sondern Rechner die man zuordnet. Es gibt zwar Header die von Caches gesetzt werden mit denen man Zuordnungen machen kann - aber wenn hinter dem Cache die Benutzer alle nur private IP-Adressen nutzen (die 10.x.x.x oder 172.x.x.x oder 192.168.x.x Adressen die man so aus einschlägiger Literatur kennt), hilft das auch nicht.

Besucher sind aber noch ein bischen zuzuordnen, wenn der Zeitraum kurz ist - aber über Tage? Sorry, aber im Zeitalter von dynamischen IP-Adressen hilft das garnichts. Die Besucher von heute und die von morgen können gleich oder verschieden sein - keine Ahnung. Trotzdem wird stolz verkündet, wie viele Besucher man im Monat hatte. Hat natürlich gar keine Aussagekraft mehr. Selbst Tageszahlen sind schon stark verändert durch dynamische Einwahlen (nicht jeder benutzt ne Flatrate und hat für 24 Stunden die gleiche Adresse).

Aber um dem Wahnsinn noch einen draufzusetzen, es werden ja nicht nur die Besucher gezählt (angeblich), sondern auch noch deren Besuche. Ja, das ist dann richtig spannend. Denn was ist ein Besuch? Ok, einen Besucher über kurze Zeit wiederzuerkennen (mit all den Problemen die durch Proxies und ähnliches dazu kommen natürlich) geht so einigermaßen - und man weiss auch genau wann ein Besuch anfängt. Beim ersten Zugriff nämlich. Aber wann hört er auf? Denn ein Beenden eines Webbesuches (ein Logout) gibts ja nicht. Man geht einfach weg. Kommt nicht so schnell zurück (wenn überhaupt).

Ja, da wirds dann richtig kreativ. Nimmt man einfach die Zeitabstände der Hits? Oder - weil Besucher ja die Inhalte alle immer lesen - berechnet man den Zeitabstand ab wann ein Hit ein neuer Besuch ist aus der Grösse des zuletzt geholten Seitendokumentes? Wie filtert man regelmäßige Refreshs aus? Wie geht man mit den obigen Besucherzählproblemen um?

Garnicht. Man saugt einfach. An den Fingern. Raus kommt dann eine Zahl. Meistens auf der Basis eines Zeitabstandes zwischen Hits - lange Pause, neuer Besuch. Das zählt man einfach. Und haut es in eine Summe. Ungeachtet der Tatsache, das ein Besuch vielleicht durch ein Telefongespräch unterbrochen war - und daher zwei Visits ein Visit waren, nur halt mit Pause. Ungeachtet der Tatsache, das sich Benutzer Rechner oder IP-Adressen teilen - und damit ein Visit in wirklichkeit 10 verzahnte Visits waren.

Oh, ja, ich weiss das manche Software die Referrer-Header des Browsers benutzt um Pfade durch das System zuzuordnen und daraus dann klarerer Visits aufzubauen. Was natürlich nicht mehr glatt geht, wenn der Benutzer mit dem Back-Button zurückgeht oder eine Adresse nochmal eingibt, ohne das ein Referrer produziert wird. Oder eine personal Firewall benutzt, die Referrer teilweise filtert.

Was dann richtig putzig ist, all die Zahlen werden auf den Markt geworfen, ohne das es klare Aussagen gibt. Klar, manchmal wird gesagt über welchen Dienst man die Zahlen ermittelt hat - aber was sagt das aus? Kann man die Zahlen dort fälschen? Zählt der Betreiber korrekt (bei blogcounter.de kann man ja wohl auf banalste Weise die Zahlen verfälschen) und zählt er überhaupt sinnvoll? Ach watt, einfach Zahlen nehmen.

Gerne wird das Argument gebracht, das zwar die Zahlen nicht direkt als absolute Zahl über Zählergrenzen hinweg verglichen werden können, aber man kann ja Zahlen vom gleichen Zähler vergleichen - daraus gründen sich dann Firmen, die Geld damit verdienen, diese Kaffeesatztechnik an andere zu vermieten und damit die tollen übergreifenden Ranglisten zu realisieren. Bis dann jemand merkt, wie man die Zähler banal manipulieren kann ...

Richtig putzig wirds dann, wenn die Zahlen noch mit der Zeitachse in Deckung gebracht werden und daraus Sachen wie durchschnittliche Verweildauer und daraus dann wieder in Kombination mit der Seitengrösse ermittelt wird, wie viele Seiten gelesen und wie viele nur geklickt wurden (basierend auf der üblichen Lesegeschwindigkeit wird sowas tatsächlich von mancher Software "ausgewertet").

Fassen wir also mal zusammen: es gibt einen begrenzten Rahmen an Informationen auf denen man aufsetzen kann. Das sind Hits (also Abrufe vom Server), Hosts (also abrufende IP-Adressen) und übertragene Mengen (summiert die Bytes aus den Abrufen). Dazu noch Hilfsinformationen wie z.B. Referrer und unter Umständen Cookies. Alle Zahlen können manipuliert und verfälscht werden - und viele werden durch gängige Internet-Techniken auch tatsächlich verfälscht (häufigster Fall eben die cachenden Proxies).

Diese also eher unzuverlässigen Zahlen werden durch - teilweise nicht öffentliche - Algorithmen gejagt und daraus dann Mumbojumbo erzeugt, der dazu benutzt wird um zu zeigen was für ein cooler Frood man doch ist und wo das Handtuch hängt.

Und bei so einem Mumpitz soll ich mitmachen?

PS: der Autor dieses Postings hatte laut awstats-Auswertung im letzten Monat 20172 Besucher, 39213 Besuche, 112034 Seitenabrufe in 224402 Zugriffen und schob dafür 3.9 Gigabyte über die Leitung - was, wie oben festgestellt, komplett irrelevant und nichts aussagend ist, ausser das er sich vielleicht sinnvollere Hobbies suchen sollte

Vatikan weiter auf Anti-Gay-Kurs

Keine Kirche!

War ja irgendwann zu erwarten. Wo doch alle so stolz waren, das wir jetzt Papst sind. Nunja, jetzt kommt vom Popanz die neue Vatikan-Richtlinie gegen Homosexuelle im Priesteramt - und damit die nächste Runde in der Hetze gegen Homosexuelle:

Homosexuelle müssen demnach mindestens in den zurückliegenden drei Jahren keusch gelebt haben, wenn sie die Priesterweihe erlangen wollen. Wer sich öffentlich dazu bekennt, homosexuell zu sein, Schwulentreffen oder Lobbygruppen besucht, oder eine "wenn auch nur geistige, unüberwindbare Anziehung hin zur gleichgeschlechtlichen Kultur" verspürt, darf nicht Priester werden.

Ich bin ja immer wieder erstaunt wie verlogen ein Laden sein kann, der sich selber ständig so Ausdrücke wie Menschlichkeit und Güte auf die Fahnen schreibt. Nunj, katholische Kirche halt - mental nie aus der Zeit der Hexenverbrennungen rausgekommen ...

Wenn google schon einen neuen Feedreader baut ...

... wieso unterstützt der dann keine Feed Autodiscovery?

Nessus demnächst unbrauchbar

Denn Nessus wird Closed Source - Golem.de:

Die größte Änderung für Nessus 3 birgt aber die Lizenz. Wurde Nessus bislang als Open Source unter der GPL entwickelt und angeboten, soll die Version 3 nicht länger unter der GPL veröffentlicht werden. Zwar werde die Software weiterhin kostenlos angeboten, auch für Windows, aber der Quellcode wird nicht mehr veröffentlicht.

Und ein Security-Scanner zu dem der Source nicht verfügbar ist, ist schlichtweg Mumpitz und Snakeoil. Denn gerade Werkzeuge im Sicherheitsbereich brauchen dringend den Peer-Review der bei Open Source Software in dem Bereich absolut üblich ist.

Pragmatic Ajax wird ein Buch (derzeit noch im Beta-Stadium - man kann aber schon vorbestellen und kriegt dann die Betas als PDF) über Ajax und die ganzen Sachen rundrum. Die Pragmatic Bookshelf Bücher sind meist recht pragmatisch (ach) und angenehm zu lesen, könnte sich also lohnen.

weblogs.com an Verisign verkauft?

Wenn ich das Gebabbel bei Dave Winer richtig verstehe, hat er weblogs.com und andere Infrastruktur an Verisign verkauft (yep, Bestätigung bei Verisign).

Womit für mich weblogs.com komplett tot und uninteressant geworden ist, denn alles was Verisign anpackt wird zu Scheisse. Zumal ich dem Laden nicht mal so weit traue wie ich spucken kann - die haben in viel zu vielen Internet-Themen ihre schmutzigen Finger drin (und sind allzu besorgt um den Ausbau ihrer jetzt schon absurden Monopolstellung in einigen Bereichen).

Nunja, pingen tut man heute eh über Ping-O-Matic - damit gehen Pings dann auch wesentlich breiter raus, auch an die sinnvolleren Dienste. Abgesehen davon war weblogs.com eh schon ziemlich unbrauchbar, weil es einfach die nötige Performance vermissen liess. Was kein Wunder ist, wenn man bei solchen Diensten auf die falsche Softwarebasis setzt (nix gegen Frontier, aber für sowas ist es einfach unbrauchbar) ...

WSGI and WSGI Middleware is Easy beschreibt wie man mit WSGI Middleware arbeitet und was das eigentlich ist.

Die EU-Kommission mal wieder

Dass sie Softwarepatente durch die Hintertür einführen will ist ja nicht neu - aber immer noch bedenklich. Aber wenn man sich so Auswüchse von deren Vorstellungen über die Möglichkeiten der Reaktion auf Copyright- und Patentverletzungen anguckt:

Sollte die umstrittene Durchsetzungsrichtlinie vom EU-Parlament und vom Rat abgenickt werden, hätte die Polizei dem FIPR zufolge "mehr Befugnisse gegen Urheberrechtsverletzer in der Hand als gegen Terroristen". So dürften die Strafverfolger etwa in Abstimmung mit Rechtsanwälten künftig die Konten von Eltern einfrieren, deren Kinder sich illegal Musik im Internet heruntergeladen haben könnten.

Konten der Eltern einfrieren, weil die Kinder Musik runtergeladen haben? Hallo, gehts noch? Was für Vollidioten werden eigentlich in die EU-Kommission abgestellt?

diese komische Umfrage ...

... die seit ein paar Tagen durch die Blogs geistert, kriegt hier ihr Fett weg. Fängt in den Kommentaren harmlos mit den üblichen Überlegungen wegen persönlicher Daten und wo kommt denn die Mailadresse her an, was sollen die personalisierten Links bei der "anonymen" Umfrage - also ganz normales und gesundes Verhalten der Leute.

Dann irgendwann steigen die Provider (die Knallgrauen) ein. Und dann kommt was, das mir die Sprache verschlägt:

Und jetzt noch ein paar persönliche Worte: ich finde die Aufregung hier ein wenig verwunderlich. Wir (twoday.net) waren in der Vergangenheit immer sehr vorsichtig mit Daten und haben uns immer bemüht vorsichtig und im Sinne der User mit solchen Themen umzugehen. Tagtäglich wird allerorts wesentlich unvorsichtiger mit Persönlichkeitsrechten umgegangen und keinen interessierts. Hier kann aber mal jeder sagen wie er/sie sich Forschung so vorstellt, inkl. schönen Veröffentlichungsträumen, die leider weit von jeglicher Realität entfernt sind.

Sorry, aber bitte was? Es wird also auf die Bedenken über die Weitergabe von eMail-Adressen zu einem Zweck dem der Besitzer der Adresse nicht explizit zugestimmt hat mit der fadenscheinigen Argumentation "man ist ja sonst immer soooo gut und die anderen sooo böse, und überhaupt, ihr seid doch alles Träumer" reagiert? Schon erstaunlich wie viel Arroganz in einen kleinen Absatz passt ...

Wirft ein nicht gerade positives Bild auf das Verhältnis der Knallgrauen zum Schutz der persönlichen Daten der Nutzer. Und nein, eine Umfrage ist nichts was zum Betrieb notwendig ist - egal wie fadenscheinig die Begründung ist, mit der das an den Haaren herbeigezogen wird.

Und es war nicht einfach nur ein Ausrutscher, wie etwas weiter unten ein weiterer Kommentar aus der knallgrauen Richtung belegt:

auch in anderen diskussionen kann ich die aufregung um manche dinge persönlich einfach nicht nachvollziehen. datenschutz ist wichtig, aber nicht alle buben sind böse. ich bin also wohl eher nicht der spezies der vorsichtigen zuzurechnen, vielleicht hab ich bis jetzt einfach glück gehabt.

Jaja, Datenschutz wird immer viel zu ernst genommen. Sorry, Knallgrau, aber Datenschutz wird immer viel zu Lax genommen, daher kommen so Knalltüten wie ihr da drauf da einfach mal drüber wegzusehen. Ist ja auch viel wichtiger eine seit Monaten geplante Umfrage (von der der Besucher nix hat, sondern nur der Auswertende und der Ergebnisempfänger - nur mal so am Rande) durchzuziehen und sie wegen solcher Banalitäten nicht zu kippen, wie ihr im selben Kommentar schreibt:

das interessante an kommunikation ist, dass es immer zu wenig davon gibt. das sensible umfeld (auf grund vorheriger umfragen) war uns klar, die umfrage ist jedoch schon seit monaten geplant und auch vorbereitet (sehr gründlich vorbereitet) und wir wollten nicht aus solchen gründen das projekt nicht kippen.

Genau. Scheiss auf Datenschutzbedenken, das sind ja nur "solche Gründe" und nichts wichtiges, wie zum Beispiel eine weitere belanglose Umfrage zur Blogosphäre (bei der zur Verbesserung der Services des Providers nach dem Einkommen des Besuchers gefragt wird - ahja) ...

RobotFlow basiert auf FlowDesigner - sowas wie Open Source LabView - und ist eine grafische Robot-Programmier-Plattform, vergleichbar zu RoboLab. Leider aber noch kein LegOS Backend (oder wenigstens eins für den Lego Mindstorms Bytecode) für RobotFlow

Autofahren macht blöd

Radfahren macht impotent, aber Autofahren macht blöd: wiederholt haben Autofahrer in einem Stau auf der Autobahn gewendet:

Zum zweiten Mal innerhalb weniger Tage haben Autofahrer in NRW auf der Autobahn gewendet. Zwar hatte Innenminister Ingo Wolf (FDP) eine verstärkte Freigabe der Standstreifen angekündigt. Dies darf jedoch nur die Polizei anordnen.

Natürlich heisst sowas für Autofahrer in NRW dann gleich die Freigabe zum Hirnriss. Fragt sich nur, wann die Wende-Idioten mit den Idioten zuammentreffen, die bei Staus eine Standspur als Rennstrecke zur Stauspitze betrachten ...

OpenMCL 1.0 ist raus - nach einer doch recht langen Zeit endlich mal ein anständiger Versionssprung

Python Paste Power

Python Paste Power ist ein sehr interessanter Artikel über Python Paste, das Metaframework von Ian Bicking. Es macht die Anwendung und Verteilung von Web-Anwendungen in Python sehr viel einfacher (jedenfalls wenn das Framework mit dem man die Anwendung bauen will Paste Support hat).

IRC Logger-Aktualisierung

Der IRC-Logger funktioniert einwandfrei, aber ich war nicht zufrieden mit der Abhängigkeit von muh - also habe ich meinen eigenen kleinen Logger-Bot in Python geschrieben, basierend auf irclib. Er funktioniert gut und tut genau das, was ich möchte - Logging. Ich fühle mich immer ein bisschen unwohl, wenn IRC-Bots Befehlsstrukturen und so etwas haben und ich brauche eigentlich nichts davon ...

Jetzt ist das Projekt größtenteils abgeschlossen - Sie müssen nur das Django-Admin verwenden, um Kanäle zu Ihrer Datenbank hinzuzufügen, den Logger-Bot auf einen IRC-Host verweisen und sehen, wie er Kanäle beitritt und mit dem Logging beginnt.

Oh, es gibt noch Dinge zu tun - zum Beispiel muss der Bot die Liste der Kanäle neu scannen, damit er neu hinzugefügte Kanäle erkennt und gelöschte Kanäle verlässt (und vielleicht sollte ich die Aktivierung/Deaktivierung von Kanälen hinzufügen, damit ich Kanäle für eine Weile deaktivieren kann, ohne die Archive zu verlieren), aber für den Moment loggt er nur #django und dafür ist es gut genug.

Medien, Statistiken und ihre "Interpretationen"

Was ich hasse sind so tolle Pauschaltitel wie der bei Heise heute: Computer können zu schlechteren Noten in der Schule führen. Klar, schlechte Lehre können auch zu schlechteren Noten führen. Zeitungen können auch zu schlechteren Noten führen ...

Besonders peinlich wirds dann, wenn man die Begründung liest:

Ein Computer im Kinderzimmer führt in den meisten Fällen zu schlechteren Noten in der Schule. Zu diesem Ergebnis kommt eine am Dienstag veröffentlichte Studie (PDF-Datei) des Münchner ifo Instituts, bei der die internationalen Daten der PISA-Studien noch einmal speziell ausgewertet wurden. Der Grund dafür: Der Computer werde sehr oft für Computerspiele statt lernfördernd genutzt.

Aha. Stellen wir also abschließend fest: zu spielen statt zu lernen kann zu schlechteren Noten führen. Ach. Ach was. Grandiose Erkenntnis - und warum steht im Titel etwas ganz anderes? Haben die Autoren vielleicht ein bischen zu viel gespielt und zu wenig gelernt?

Radfahren macht impotent

Aus der Süddeutschen: Radfahren macht impotent:

„Es ist keine Frage mehr, dass Radfahren Erektionsstörungen auslösen kann“, kommentiert der Reproduktionsmediziner Steven Schrader. „Die Frage ist nur noch, was wir dagegen tun können.“

Wenn ich also den nächsten Radfahrer, der mich auf dem Zebrastreifen über den Haufen fahren will, als impotenten Wichser anspreche, dann ist das keinesfalls eine Beleidigung, sondern eine reine Tatsachenfeststellung!

(und nein, ich benutze meinen Computer so gut wie nie zum Spielen, falls das jetzt jemand mein anbringen zu müssen )

37signals mal wieder

Diesmal Writeboard son Teil zum gemeinsamen Editieren von Texten über das Web. Im Prinzip vielleicht sowas wie SubEthaEdit für ganz arme. Aus der FAQ:

Is this some sort of wiki?

No way. Not at all. Nope. Wikis are icky. Writeboard is about writing and editing solo or with others. It's all about the words. Wikis are about way more than that which is why they are generally pretty confusing to most folks.

Ja, klar, Wikis are icky. Und schwer zu verstehen. Logisch. Mag für jemanden zutreffen der Todolisten-Programme für genialer als geschnittenes Weissbrot hält. Sorry, aber langsam wirds einfach nur noch lächerlich was aus dem Laden kommt. Banalprogramme werden nicht intelligenter dadurch, das man sie in Bonbonfarbe packt ...

Googles Blogsuche strohdumm

Wann kapiert endlich Google, das eine Suche nach Links auf ein Blog ziemlich saublöd ist, wenn es Links des Blogs auf sich selbst zurückliefert im Ergebnis? Das ich auf mich linke, das weiss ich schon - dazu brauche ich kein Google. Weder die Websuche noch die Blogsuche. Und natürlich kann man nicht einfach -site oder -domain oder sowas benutzen. Selten blöd. Hat mich schon an der normalen Websuche von Google genervt, nervt auch bei der Blogsuche. Eine Suche nach link: ist eine Suche nach Fremdlinks, also bitte filtert das Ergebnis um die Site selber ...

Retrocomputing - MIT CADR Lisp Machines

Yeeeehaaaa! Der Sourcecode der MIT CADR Lisp Machines - dem Vorläufer der meisten High-End-Lispmaschinen - ist unter einer BSD-Lizenz freigegeben worden!

Das dürfte hoffentlich dem CADR Lisp Emulator weiteren Auftrieb geben. In letzter Zeit wars ja etwas ruhig um den Emulator geworden.

Wenn jetzt sich endlich Symbolics dazu durchringen könnte ihre OpenGenera-Plattform auf OS X zu portieren, wäre ich noch glücklicher

Und noch ein paar weiter Neuigkeiten zum Emulator - es gibt den ersten Support für ChaosNet, inclusive einem Fileserver für Linux. Und das im Link angesprochene Lispmachine-Board fänd ich ziemlich cool ...

IRC-Logger für #django

Es gibt jetzt einen IRC-Logger für #django auf freenode.net. Seit der loglibrary ausgefallen ist, dachte ich darüber nach, meinen eigenen zu erstellen. Also begann ich, die für einen IRC-Logger benötigten Dinge zu bauen. Die Schnittstelle selbst ist natürlich mit django geschrieben.

Wie immer ist der Quellcode in meiner Trac-Instanz verfügbar. Derzeit läuft er nur in #django, aber er kann leicht auf andere Kanäle erweitert werden. Und er speichert die Protokollzeilen in einer Datenbank, sodass ich in der Lage sein werde, Suchfunktionen und dergleichen hinzuzufügen. Er hat bereits eine Kalenderansicht der Protokolle.

Das Protokollieren selbst erfolgt mit muh - ein netter IRC-Proxy, der das Protokollieren in Named Pipes ermöglicht. Dann gibt es ein Skript fetch.py, das die Zeilen aus der Named Pipe zieht und sie in der Datenbank speichert. Der letzte Teil ist der django-basierte Viewer für diese Protokolle.

Aktualisierung: Das Protokollieren erfolgt jetzt mit einem dedizierten IRC-Logger, der in Python geschrieben ist. Er befindet sich im Quellcodebaum als loggerbot.py.

Ich hätte generische Ansichten in Django verwenden können, nur dass ich sie parameterisieren musste. Das habe ich mit einer Wrapper-Funktion gemacht, die Dinge von den Schlüsselwörtern einer View-Funktion zu den extra_lookup-Argumenten und den extra-Kontext-Schlüsselwörtern der generischen Ansichten verschiebt. Sie können den Code im Repository sehen.

Der Rest ist nur Standard-Django-Zeug: generische Vorlagen (die den coolen regroup-Tag nutzen) und einige benutzerdefinierte Tags für den Kalender und die Benutzerfarbgebung. Ein bisschen Modell-Hackerei und das war's eigentlich. Schön und einfach. Es hat nur ein paar Stunden gedauert, um das zusammenzubauen, und das schließt das Herumspielen mit muh und Named Pipes ein ...

Politiker und die Realität

Nach den Hochrechnungen ist die SPD in Dresden die stärkste Partei. Und liegt deutlich vor der CDU. Was also zieht die Union für Konsequenzen daraus? Klar: sie sieht den Wahlausgang in Dresden als klaren Beleg für ihren Führungsanspruch. Schon strange, wie verquer dieses seltsame Volk in Berlin die Welt sieht ...

Übrigens lässt sich so ein klarer Führungsanspruch selbst aus dem Direktmandat nicht ablesen: da hat zwar die Union wohl gewonnen, aber auch nur knapp mit wenigen Prozenten vor der SPD. Aber was schert schon die Union die Tatsache, das beim Direktmandat über 60% der Wähler die CDU nicht gewählt haben und bei der Zweitstimme über 70% der Wähler die CDU nicht gewählt haben - es bleibt ein klarer Führungsanspruch.

Im direkten Rechenduell Ötzi gegen Merkelnix und dem Suppenkoch würde wohl Ötzi gewinnen. Selbst in seinem derzeitigen Zustand ...

Leica - D-LUX 2

Leica hat eine Nachfolgerin für die D-LUX in Petto: die D-LUX 2. Der Name ist zwar langweilig, aber die Spezifikation klingt nett - 16:9 Format, Weitwinkeleinstellung des Objektives entspricht 28mm bei Kleinbild, 8 Megapixel, Bildstabilisator, Blende und Zeit manuell einstellbar, RAW Format.

Das ist auch noch nicht so spannend, aber sie hat wieder das, was die alte Digilux 1 hatte, aber die Digilux 2 nicht: einen Adapter für die Leica Spective. Womit sie für Jutta wieder interessant wird.

Allerdings dürfte sie auch einen Leica-typischen Preis bekommen ...

Lizenz zum Gelddrucken

Denn E.ON und RWE wollen Strompreis erhöhen - mit fadenscheinigen Begründungen und angesichts der Rekordgewinne dieser Unternehmen äusserst absurd. Aber Privatisierung und Marktwirtschaft ist ja so toll, da wird alles für den Verbraucher billiger - komisch nur, das wir davon nix merken ...

Aber auch das wird sicherlich dann wieder von tollen Statistikern als reine gefühlte Inflation weggeredet.

TwistedDAV ist ein WebDAV Server in Python, der unter Twisted läuft. Sehr interessant wenn man etwas auf DAV aufbauen möchte - bisher gabs da nur den Zope-Source als Beispiel und Basis.

Gericht stärkt alte Rechtschreibung

Schon putzig: eine Schülerin bekommt vor Gericht Recht auf die alte Rechtschreibung zugesprochen, aber:

Eine einstweilige Anordnung an den niedersächsischen Kultusminister, die alte Rechtschreibung gelten zu lassen, wollten die Lüneburger Richter allerdings nicht erteilen. Die Schülerin müsse auf ein Urteil warten, mit dem aber vor dem Ende der Schulzeit der Antragstellerin nicht zu rechnen sei.

Irgendwie kann man solche Sachen nur noch mit einer sehr verqueren Vorstellung von Humor erklären. Hat ja schon fast Kohlhaasche Züge das ganze

How-to get decimal.py if I have Python 2.3.x beschreibt, wie man Zahlen in Dezimaldarstellung (entgegen den dusseligen binären Floats mit ihren nervigen Rundungsproblemen) für Python 2.3 bekommt. Ab 2.4 ist das ja ein Standardmodul.

Rechtsstreit über Kartoffelsorte "Linda" geht weiter - die Kartoffelpolizei hob ein illegales Nest revolutionärer Kartoffeln aus.

Sonnenfinsternis am Tag der deutschen Einheit

Am Tag der deutschen Einheit ist eine Sonnenfinsternis - schade, das wir nicht mehr in der Zeit der guten alten Germanen leben, denn dann könnten wir das rückwirkend als böses Omen werten und Helmut Kohl den Göttern opfern

i18n und django

Jacob hat mir die Berechtigungen für Branch-Commits und einen Branch für i18n-Sachen eingerichtet. Daher habe ich heute an den Ideen im Patch von Ticket 65 von nesh gearbeitet. Ich habe die meisten Sachen von Grund auf neu geschrieben, weil ich einige Dinge etwas anders haben wollte, und jetzt ist es zum Testen verfügbar.

Zuerst, wie Sie die i18n-Sachen mit Ihrem Django-Checkout verwenden können. Sie benötigen einen aktuellen svn trunk Checkout und gehen Sie zum Root Ihres Checkouts und führen Sie den folgenden Befehl aus:

svn switch http://code.djangoproject.com/svn/django/branches/i18n/

Danach sollten Sie einen Baum mit meinen Patches angewendet haben. Ich habe bisher nur sehr wenig übersetzt, um den Patch und die Änderungen so klein wie möglich zu halten, aber ich habe bereits eine deutsche Übersetzungsdatei mit Sachen für den Admin-Index und den isAlphaNumeric-Validator hinzugefügt. Ich denke, ich werde bald noch mehr Sachen zu den Übersetzungen hinzufügen.

Der Patch behandelt nur den Übersetzungsanteil - andere Dinge wie Datumsformatierung, Zahlenformatierung, Zeitzonenbehandlung sollten in verschiedene Patches gehen, um jeden von ihnen so klein wie möglich zu halten. Das Übersetzungsobjekt (das ist das Biest, das für die Umwandlung von Zeichenfolgen in ihre neue Form verantwortlich ist) wird auf Anfrage erstellt. Dies gibt uns die Möglichkeit, verschiedene Stellen zu betrachten, die bei der Entscheidung helfen können, welche Sprache dem Benutzer präsentiert werden soll. Der Code beginnt damit, in der Sitzung nach einer django_language-Variablen zu suchen. Wenn diese nicht gefunden wird, sucht er in den Cookies nach einem django_language-Cookie. Wenn auch das nicht gefunden wird, gräbt er in den HTTP-Headern. Es sucht nach dem Http-accept-language-Header und teilt diesen nach Sprachen auf und sortiert sie nach Vorliebe. Es wird die erste Sprache (sortiert nach Vorliebe, höchste Vorlieben zuerst) verwenden, die in dem django-Nachrichtenfile-Repository gefunden wird. Wenn keine dieser Sprachen gefunden werden kann, wird es letztlich auf das Standardübersetzungsobjekt zurückgreifen, das durch die LANGUAGE_CODE-Einstellung in Ihrer Einstellungsdatei definiert ist. Nachrichten-Dateien können an drei verschiedenen Stellen gespeichert werden: Die django-Projekt-Nachrichten-Dateien werden im django.conf-Paket in einem Unterverzeichnis namens locale gespeichert. Dies ist ähnlich wie die admin_media- und admin-Vorlagenverzeichnisse. Das locale-Unterverzeichnis ist wie typisch bei der Speicherung von lokalen Daten strukturiert: ein Unterverzeichnis pro Sprache und ein LC_MESSAGES-Verzeichnis darin. Der Sprachbereich für django-Nachrichten-Dateien ist immer django. Der nächste Ort, an dem django nach Nachrichten-Dateien sucht, ist das Projekt - wenn Sie ein locale-Verzeichnis in Ihrem Projekt haben, können Sie dort zusätzliche Nachrichten-Dateien speichern. Der dritte Ort ist die Anwendung - Sie können ein locale-Verzeichnis neben Ihrem Anwendungs-Views-Verzeichnis haben. Alle locale-Verzeichnisse sind gleich strukturiert.

Ein Übersetzungsobjekt für eine bestimmte Sprache ist tatsächlich eine Verkettung von vier Übersetzungsobjekten: zuerst das Anwendungsübersetzungsobjekt. Dies wird auf das Projektübersetzungsobjekt zurückgreifen. Dieses wiederum wird auf das globale Übersetzungsobjekt zurückgreifen, das auf das Übersetzungsobjekt für die Standardsprache zurückgreifen wird. Auf diese Weise können höhere Ebenen Übersetzungen von niedrigeren Ebenen überschreiben und Anwendungen können ihre eigenen Übersetzungen bereitstellen.

Die Anwendung für die Übersetzungen wird tatsächlich durch Modulintrospektion entdeckt - es verwendet die View-Funktion, um auf eine URL zuzugreifen, um herauszufinden, welche Anwendung diese View-Funktion trägt, und verwendet diese, um nach lokalen Übersetzungen zu suchen. Es gibt zwei Tools, die zur Verwaltung von Übersetzungen bereitgestellt werden: make-messages.py und compile-messages.py. Beide Tools können entweder im Root des django svn-Baums oder im Projektverzeichnis oder im Anwendungsverzeichnis aufgerufen werden. make-messages.py wird das aktuelle Verzeichnis und alles darunter nach zu übersetzenden Zeichenfolgen durchsuchen und wird eine django.po-Datei im locale-Verzeichnis für die gegebene Sprache erstellen. compile-messages.py wird einfach alle .po-Dateien in .mo-Dateien umwandeln. Das Hinzufügen von Übersetzungen ist einfach. In Python-Code umgeben Sie einfach Zeichenfolgen (nur Zeichenfolgenkonstanten!) mit ('...') oder ("..."). Dadurch werden diese Zeichenfolgen für die Übersetzung markiert, sodass make-messages.py sie herausziehen und in die .po-Dateien schreiben kann. Und es wird die Zeichenfolge zur Laufzeit übersetzen, unter Verwendung des aktuellen Übersetzungsobjekts, das aus der Anfrage ermittelt wurde. In Vorlagen gibt es das Vorlagentag {% i18n ('....') %} - dieselbe Syntax wie mit Python-Code, nur müssen Sie es als Vorlagentag umschließen. Diese Zeichenfolgen werden ebenfalls aus den .html-Dateien in die .po-Datei gezogen. Das i18n-Tag unterstützt die Zeichenfolgeninterpolation aus dem Kontext: {% i18n ('blah %(blubb)s blubber') %} würde zunächst die Zeichenfolge übersetzen und dann die Kontextvariable blubb in das übersetzte Ergebnis interpolieren.

Ein Tipp: Wenn Sie Zeichenfolgen zum Übersetzen schreiben, verwenden Sie keine positional parameters für die Interpolation (die %s-Sachen), sondern verwenden Sie stattdessen benannte Parameter (%(blah)s). Auf diese Weise können Personen, die Übersetzungen erstellen, die Zeichenfolge neu anordnen, ohne Ihren Code zu brechen - einige Sprachen haben eine andere Reihenfolge als Englisch.

Die Verwendung der Übersetzungen ist ebenfalls einfach: Sie müssen nur Ihre Standardsprache in der LANGUAGE_CODE-Einstellung festlegen und django.middleware.locale.LocaleMiddleware zu Ihrer Middleware-Einstellung hinzufügen. Sie müssen es an die Spitze setzen - besonders im Admin sollte es vor dem AdminUserRequired Middleware kommen - aber es muss nach dem SessionMiddleware sein, wenn Sie dieses verwenden.

Das ist erst der Anfang, spielen Sie damit und sagen Sie mir, wenn etwas schief geht. Der beste Ort, um es zu sagen, ist im Ticket im django trac.