Stefan Fischerländer’s Blog One Blog Is Not Enough

Wieder mal Zeit für Perl

März 2nd, 2009

Heise hat einen wunderschönen Artikel über die Zukunft von Perl veröffentlicht. Neben dem unvermeidlichen “Perl 6 kommt sicher bald und wird ganz toll”-Abschnitt, geht die Autorin Susanne Schmidt darauf ein, dass es um Perl derzeit zwar ruhig ist, aber trotzdem viele große Websites weiterhin Perl einsetzen. Und natürlich fehlt auch der obligatorische Seitenhieb auf Python nicht:

“There is more than one way to do it” hat eine ganze Kultur geprägt, die man entweder liebt – oder aber hasst und zu Python wechselt.

Apropos Python. Eben laufen hier zwei sechs Monate alte Python-Scripte, die ich seit der Erstellung vor einem halben Jahr nicht mehr angesehen habe – aber ich habe sie auf Anhieb wieder verstanden. Eine klare Syntax ohne $, @, %, $_, {} oder ; hat schon was. Und falls ich in Python doch etwas nicht auf Anhieb verstehe, kann ich’s in IDLE ausprobieren. perl -de 42 ist da nicht wirklich ein Ersatz; mein Perl Workspace schon eher. Aber trotzdem ist IDLE die deutlich angenehmere Variante. Und auch in Perl 6 scheint es keinen wirklichen Ersatz zu geben.

Wer noch mehr über den aktuellen Stand von Perl lesen möchte, dem möchte ich noch Healthcheck:Perl ans Herz legen. Und wer’s noch nicht getan hat, sollte sich schleunigst Higher-Order Perl runterladen. Ein fantastisches Buch.

PHP Kalenderwoche: Kein Bug, nur miese Dokumentation

Januar 30th, 2009

Die PHP date()-Funktion ist ein wunderbares Tool, um mit Datumsangaben zu rechnen. Für ein Projekt brauchte ich nun eine Funktionalität, die mir zu einem Datum Jahr und Kalenderwoche in der Form “YYYY-WW” ausgibt. Eigentlich alles ganz einfach mit date() – “Y” steht für die vierstellige Jahreszahl, “W” für die zweistellige Kalenderwoche entsprechend der ISO-Definition. Und entsprechend funktioniert das auch:
>>> date("Y-W", strtotime("2006-12-31"))
'2006-52'

Doch was passiert, wenn das Jahresende bereits zur Kalenderwoche des neuen Jahres gehört, wie etwa beim Jahreswechsel 2008 auf 2009:
>>> date("Y-W", strtotime("2008-12-31"))
'2008-01'

Stimmt nicht ganz, denn der 31.12.2008 liegt nicht in der ersten Kalenderwoche des Jahres 2008, sondern in der 1. KW 2009. Leider zeigte mir die PHP-Dokumentation keinen Hinweis auf das Problem – was daran lag, dass ich die deutsche Dokumentation hatte. In der englischen Beschreibung findet sich das Format “o” (“kleines Oh”), das die Jahreszahl nach der selben ISO-Norm wie die Kalenderwoche angibt.
>>> date("o-W", strtotime("2008-12-31"))
'2009-01'

Und siehe da, die Ausgabe ist nun wie erwartet. Das Format “o” wurde übrigens erst mit PHP 5.1.0 eingeführt.

Panfu und die Datenarmut

Dezember 16th, 2008

Gestern wurde der 25. Geburtstag des Grundrechts auf informationelle Selbstbestimmung begangen – mit überraschend geringem Widerhall in der deutschen Bloggerszene, nur mal so nebenbei bemerkt. Und heute stolpere ich über ein “wunderbares” Fundstück in Sachen informelle Selbstbestimmung. Das Blog Deutsche Startups wählt jährlich das Startup des Jahres. Bei der diesjährigen Abstimmung landete auf Platz 2 die Spiel- und Lernplattform für Kinder namens Panfu. Neugierig geworden, was sich dahinter verbergen mag, klick ich mich da durch und finde diesen Anmeldescreen:

Panfu Anmeldebildschirm

Wer ein Angebot für die Kleinen macht, muss auf Datenschutz ganz besonders achten, das haben die Macher schon verstanden und schreiben als eine von mehreren Regeln, dass die Kids keine persönlichen Daten preisgeben sollen. Aber was fragen die Sitebetreiber zuvor alles ab? E-Mail-Adresse, Geschlecht und sogar das Geburtsdatum. Sind das etwa keine persönlichen Daten? Was versteht Panfu denn dann unter persönlichen Daten von Kindern? Kreditkartennummern? Sexuelle Vorlieben?

Ich verstehe ja, dass ein Sitebetreiber gerne fest angemeldete Nutzer sammelt. Ist gut für einen Exit, irgendwann. Aber um Kinder hier online spielen zu lassen, ist es bestimmt kein Muss; das würde auch in einem Mitgliederbereich ausreichen. Die Motivation hinter der Geschlechterfrage kann ich ebenfalls nachvollziehen, nötig ist es aber ebenfalls nicht. Kids sind durchaus in der Lage, die Spiele anzuklicken, die sie interessant finden; da braucht es keine explizite Vorfilterung nach Männlein und Weiblein. Den Vogel aber schießt Panfu für mich mit dem Geburstdatum ab: Diese Abfrage widerspricht an sich schon dem Gebot der Datenarmut, auf einer Kinderseite halte ich es aber für total unangebracht. Um den Kindern Spiele anzuzeigen, die für ihr Alter geeignet sind, würde eine Angabe des Geburtsjahres absolut ausreichen.

Auch 25 Jahre nach dem Grundrecht auf informelle Selbstbestimmung bleibt noch viel zu tun. Und es wäre nicht falsch, gerade bei den Kleinen besonders darauf zu achten.

Perl-Guru chromatic: “CPAN is world of trouble”

Dezember 11th, 2008

Ich habe hier schon ein paar Mal das Sakrileg begangen und über Perls CPAN-System gelästert. Denn viel zu oft klappt die Installation eines CPAN-Moduls nicht; nicht nur unter Windows, aber da besonders häufig. Nun hat chromatic, einer der führenden Perl-Entwickler, genau in die gleiche Kerbe geschlagen:

This sounds odd, but the CPAN installation system is an aggregation of fixes upon fixes. (…) If you don’t have root access to the box, or you don’t have a C compilation environment, or you don’t have a compatible make utility installed, or you don’t have network access, or you don’t have the Perl headers installed, you may have a world of trouble.

Oh wie wahr. Genau so wahr ist übrigens sein Plädoyer für ein mod_perlite-Modul, das Perl fürs Web genau so einfach und effizient macht wie das mod_php für PHP tut. Hoffentlich bleibt’s nicht nur bei schönen Wünschen zum bevorstehenden 21. Geburtstag von Perl.

Liebe zu JavaScript?

Dezember 10th, 2008

Manche Programmierer fühlen sich ja sehr zu “ihrer” Programmiersprache hingezogen. Und im Überschwang der Begeisterung für ein elegant gelöstes Problem kommt schon mal ein “Ich liebe X” über die Lippen. Und für X mag man dann Perl einsetzen, oder Python, gerne auch Lisp oder vielleicht Smalltalk. Sogar Pascal kann ich mir vorstellen.

Der PHP-Blogger Harald Lapp hat nun seine Liebe zu JavaScript erklärt. Zu JavaScript! Wie kann jemand JavaScript, die weiland von Netscape zusammengeschusterte Browser-integrierte Sprache, lieben? Und wie kann diese Liebe erklärt werden mit den Worten: “Ich habe noch keine Programmiersprache kennengelernt, in der es sich ähnlich intuitiv entwickeln lässt.” JavaScript und intuitiv? Das ist wie George W. Bush und UNO, wie CSU und Umweltschutz, wie … – lassen wir das. Doch die Lobpreisung geht noch weiter: “Die Sprache ist absolut logisch aufgebaut.” Ja, in der Tat, die Rede ist noch immer von JavaScript.

Eine derartige Lobeshymne auf JavaScript kann nur ein PHP-gestählter Entwickler verkünden. Klar, wer täglich eine Programmiersprache mit über 5.000 Funktionen im globalen Namensraum bändigen muss, wer array_key_exists() zu tippen hat, wo andere einfach nur x in d schreiben und wer zwar create_function() zur Verfügung hat, diese gefährliche Funktion aber am besten nicht benutzt, dem nehme ich die Liebe zu JavaScript sogar ab. Besser als PHP ist es allemal.

Microsoft liebt Perl doch

Dezember 7th, 2008

Microsoft und Perl, das ist bislang nicht die große Liebe. Zwar gibt es mit ActivePerl eine gut funktionierende Perl-Version für Windows; auch die von ActiveState mitgelieferten CPAN-Module lassen sich problemlos installieren. Doch wehe, der Windows-Perl-Entwickler versucht, ein anderes CPAN-Modul zu laden. Dann trifft ihn der CPAN-Wahnsinn.

Mit Strawberry gibt’s seit einiger Zeit eine neue Perl-Distribution, die Windows-Perl auch in Sachen CPAN-Module möglichst gleichwertig zu Linux-Perl machen möchte. Verantwortlich dafür ist Adam Kennedy. Dieser Adam Kennedy hat nun ein großes “Geheimnis” verkündet:

Microsoft wird jedem CPAN-Autor kostenlosen Zugang zu einer zentral gehosteten virtuellen Maschine geben, die alle wichtigen Windows-Versionen enthält. Damit kann die Perl-Community künftig ohne Aufwand und ohne Kosten die CPAN-Module ausgiebig unter Windows testen.

Sieht so aus, als gäbe es in Redmond doch noch Perl-Anhänger.

Python 3.0 ist da

Dezember 4th, 2008

Python 3.0 ist in der finalen Version verfügbar. Damit haben die Whitespace-Dompteure klar das Rennen gegen die Geschweifte-Klammern-Magier PHP und Perl auf ihren jeweiligen verschlungenen Wegen zur “6″ vor dem Punkt gewonnen. Die ausführlichen Änderungen in Python 3.0 sind in einem schönen Übersichtsartikel zusammengefasst:

  • Aus dem print-Statement mit all seinen Raffinessen wird in 3.0 eine schnöde Funktion.
  • map(), filter() und zip() geben Iteratoren zurück.
  • Die dict-Methoden liefern Views statt Listen; entsprechend werden dict.iterkeys(), dict.iteritems() and dict.itervalues() nicht mehr unterstützt.
  • Vergleiche (und daraus abgeleitet: die Sortierung) können nur noch auf vergleichbaren Werten durchgeführt werden. 1 < '' gibt einen TypeError.
  • Die Unicode-Behandlung wurde komplett verändert. Anstatt Unicode-Strings und 8-Bit-Strings gibt es nun nur noch Unicode-Strings (Typ str) und Binärdaten (Typ bytes). Diese beiden Typen sind nicht miteinander kompatibel, sondern müssen explizit ineinander umgewandelt werden.
  • Der String-Formatierungsoperator % ist noch vorhanden, wird aber mit 3.1 als deprecated eingestuft.
  • Diverse Syntax-Änderungen
  • Diverse Änderungen der Standard-Library

Alles in allem genügend Änderungen, um den Versionssprung auf 3.0 zu rechtfertigen - und um Scriptautoren einige Hausaufgaben bei der Umstellung alter Scripte zu geben. Insbesondere die komplette Änderung in Sachen Unicode und die damit zusammenhängende Überarbeitung aller Stellen in den Scripten, die Text bearbeiten, kann einen gehörigen Aufwand auslösen. Und ähnlich sieht es dort aus, wo intensiv mit Dictionaries und Listen gearbeitet wurde.

Aber trotz aller Änderungen scheint Python auch Python zu bleiben. Perl 6 hingegen soll ja eine mehr oder weniger neue Sprache zu werden.

PDO, MySQL and Nested Queries

Oktober 29th, 2008

PDO (PHP Data Objects) is regarded as state-of-the-art for database access in PHP. But as useful as an abstraction layer may be, the usage of PDO can really be painful. Why? In default mode, PDO uses unbuffered queries to access MySQL. This results in a somewhat strange behaviour: You cannot use two result statements at the same time on the same database connection. (see an example)

The official solution for this problem is to empty the result set of a previous query using fetchAll(). If you have to process every row in a table, this method copies the entire table into a PHP array. This is fine for small tables. But in a recent project, there’s one table which is 8 GB large. I surely don’t want to copy this table into my memory …

Thanks to Ilia, there is a solution for this: Just tell the underlying MySQL driver to use buffered queries.

$dbh->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

The downside of this approach is obvious: Our PDO-based database access is no longer portable as we now use a MySQL specific functionality. But as long as there is no other solutions for iterating over big tables and issuing a query for every row, I think this is the way to go.

Ich liebe Olympia!

August 21st, 2008

Gestern habe ich kurz meinen Olympia Boykott unterbrochen. Ich musste mir unbedingt das 200m-Finale ansehen, denn ich wollte live dabei sein, wie Usain Bolt der versammelten Weltelite mit offenem Schnürsenkel auf 200 Metern ein paar Sekunden abnimmt und dabei Autogramme schreibt. Und ich muss sagen, die Boykott-Unterbrechung hat sich gelohnt! Wie Bolt allen davon gelaufen ist, herrlich. Mit solcher Leichtigkeit haben weder Lance Armstrong noch Jan Ullrich zu ihren jeweils besten Zeiten ihre gedopten Kollegen am Berg stehen lassen. Auch Marion Jones musste sich 2000 viel stärker anstrengen, ja sogar Ben Johnson sah im Finale 1988 gestresster aus – wenn auch nur ein klein wenig.

Als wäre das noch nicht der olympischen Freude genug, erklärt uns der “chinesische Spielberg” (Spiegel Online) und Regisseur der Eröffnungszeremonie Zhang Yimou die Überlegenheit der chinesischen Kultur: “Darsteller gehorchen Befehlen, sie können es wie Computer tun. Das ist der chinesische Geist.” Im Westen sei sowas nicht möglich, wegen der “Menschenrechte”, so Yimou weiter. Okay, dafür dürfen – wegen dieser blöden “Menschenrechte” – im Westen alle seine Filme gezeigt werden, was in China noch immer nicht der Fall ist, aber das scheint den Filmregisseur nicht zu stören. Hauptsache, man kann sich im Glanz der Parteiführung sonnen.

Aber zurück zum Sport. Die aktuellste Meldung verstehe ich nicht: Wieso werden Springreiter ausgeschlossen, weil ihre Pferde gedopt waren? Im Sinne der Gleichberechtigung muss für Pferde doch erlaubt sein, was für Schweine und Rinder schon lange gilt! Oder muss ich gar meine Firma aufgeben, wenn herauskommt, dass ich zum Mittagessen Schnitzel mit überhöhten Hormonwerten gegessen habe?

Beijing vs. Peking

August 12th, 2008

Seit die Olympischen Spiele in Peking (siehe auch Mein Olympia-Boykott) begonnen haben, fällt mir auf, dass immer häufiger statt des üblichen deutschen Ausdrucks Peking die Bezeichnung Beijing benutzt wird. Hier einige Beispiele:

  • Medien beklagen Behinderung durch Behörden in Beijing
  • Olympische Pandas in Beijing
  • Olympische Spiele in Beijing: Hotels bleiben zur Hälfte leer
  • Vorolympischer Besuch: Blond in Beijing
  • Wie das Symbol der Olympischen Spiele 2008 für Beijing entstand

Was bitte soll dieser Unfug? Peking ist Peking und nicht Beijing. Punktum. Beijing ist ja nichts anderes als die Lautschrift des chinesischen Namens für Peking. Aber warum sollte ein deutscher Autor die Lautschriftversion eines Namens benutzen, für den es eine deutsche Bezeichnung gibt? Ist das vorauseilende politische Korrektheit? Oder intellektuelle Coolness? Oder einfach nur gedankenlos und dumm? Okay, hätten die Nazis jemals die Zerschlagung Rest-Pekings gefordert, wäre der Namenswechsel verständlich. Aber so?

Wie sieht das dann in ein paar Jahren aus? Berichten deutsche Zeitungen künftig über leere Hotels in Roma? Oder über blonden Besuch in Praha? Und müssten vorbildliche Journalisten dann nicht in Berichten über die Spiele von 1980 vom Boykott von Moskwa schreiben – oder gar vom Boykott von Москва? Auch wenn letzteres wohl manche technische Vervielfältigungseinheit (Schreibmaschine, Druckmaschine, Browser) überfordern könnte.

Wieso kann ich mich eigentlich an keine deutschen Berichte zu den letzten Winterspielen erinnern, in denen vom Doping in Torino berichtet wurde? Klingt das womöglich nicht cool genug? Oder steckt da die Angst vor dem nächsten Großereignis im Grödnertal dahinter, das auf italienisch Val Gardena heißt? Denn Val Gardena wäre ja ebenfalls nicht wirklich politisch korrekt, wird doch im Grödnertal, pardon: in Gardeïna verbreitet ladinisch gesprochen – und das Ladinische sollte nach der Europäischen Charta der Regional- oder Minderheitensprachen auch “in Medien besonders gefördert werden”.

Wer also weiterhin Beijing statt Peking schreibt, sollte sich auch bei allen anderen Namensbezeichnungen dreimal überlegen, welcher Ausdruck nun der korrekteste (sic!) sein könnte. Und wenn 2018 tatsächlich die Winterspiele nach München kommen, erwarte ich die politisch extrem korrekte Überschrift Hotels in Minga komplett ausgebucht!.

Nachtrag: Wie nicht anders zu erwarten, gibt es dafür einen eigenen Ausschuss: Den Ständigen Ausschuss für geographische Namen. Dabei handelt es sich um ein Wissenschaftlergremium ohne besondere institutionelle Verfassung. Dieser Ausschuss gibt eine Liste mit deutschen Wörtern für fremde geographische Bezeichnungen (sogen. Exonyme) heraus. In dieser Liste finden sich viele weitere spannende deutsche Wörter und deren politischhochkorrekte Umschreibung.

Wer also künftig Bezeichnungen wie Peking zugunsten von Beijing aufgeben möchte, soll sich bloß nicht erwischen lassen, Mount Everest zu schreiben! Qomolangma Feng wäre nämlich korrekt. Einen Tibet-Konflikt gibt es demnach auch nicht, sondern höchstens einen Xizang-Konflikt. Versteht zwar keiner, ist aber schön richtig. Und wer jetzt noch eine Kanton-Ente bestellt, den holt der Teufel. Es sei denn, er kann seine Bestellung eben noch in Guangzhou-Ente korrigieren.