Bei viele Programmen, die in PHP und Perl geschrieben sind haben es sich die Entwickler mit der Konfiguration einfach gemacht -- denn die Syntax dieser Sprachen macht es ganz besonders verlockend, einfach die Konfigurationsdatei als Quellcode zu importieren. Mit allen Risiken und Nebenwirkungen. Und bei objektiver Abwaegung sollte klar werden, dass es keine wirklich sinnvolle sondern primaer eine einfache Loesung ist.

Beginnen wir mit einer brennend neuen Meldung:

+++ EILMELDUNG +++ Anwender sind keine Programmierer +++ EILMELDUNG +++
Aber zurueck zum Text: Wenn eine Konfigurationsdatei Programmcode der jeweiligen Sprache hat, dann sieht das zumeist so aus, dass nur Zuweisungsstatements benutzt werden. Also zum Beispiel so:
knowing_me=1
knowing_you=1
Ach nee, klappt nicht. Der Interpreter wirft ploetzlich mit Syntaxfehlern.
knowing_me=1;
knowing_you=1;
Nun aber. Aus Sicht des Programms besteht das "einlesen" der Konfiguration dann aus einer Zeile wie
require "config.pl";
und fertig ist die Sache mit der Konfiguration. Wird schon passen. Schauen wir uns die Konfigurationsdatei nochmal an. Wenn eine Konfigurationsdatei gross wird und unuebersichtlich zu werden droht, dann sind Kommentare oft eine Rettung. Also zum Beispiel
# set our knowledge
knowing_me=1;
knowing_you=1;
und wenn wir richtig gut sind, dann erklaeren wir auch genau, was wir da tun:
# set our knowledge
# use 1 to indicate a yes
# use 0 to indicate a no
knowing_me=1;
knowing_you=1;
...wenn die Konfigurationsdatei dann noch weitergeht, dann kann es natuerlich auch darunter noch weitergehen...
# set our knowledge
# use 1 to indicate a yes
# use 0 to indicate a no
knowing_me=1;
knowing_you=1;
# set our last station
last_station=waterloo;
Natuerlich koennen wir dann auch noch bestimmte Funktionalitaeten durch ein- oder auskommentieren aktivieren bzw. deaktivieren:
# set our knowledge
# to use the station-knowledge-module, uncomment the settings.
# use 1 to indicate a yes
# use 0 to indicate a no
#knowing_me=1;
#knowing_you=1;
# set our last station
#last_station=waterloo;
ist doch alles total uebersichtlich, nicht?
Wobei, eigentlich ... wenn man sich die verwendete Sprache mal anschaut, da kann nervige Kommentarzeichen sparen! Denn unsere Sprache erlaubt Blockkommentare:
/* set our knowledge
 * to use the station-knowledge-module, uncomment the settings.
 * use 1 to indicate a yes
 * use 0 to indicate a no
knowing_me=1;
knowing_you=1;
 * set our last station */
#last_station=waterloo;
Und jetzt, lieber Programmierer, versetzen wir uns in die Situation einer Person, die die verwendete Sprache noch nie gesehen hat. Was bitte? Das ist doch klar, was Kommentar ist, denn spaetestens der Editor wird es doch wohl hilighten? Aufwachen -- es gibt Editoren, die keines haben (und wenn zum Editieren des Configfiles einer mit Hilighting notwendig ist, ist das ein deutliches Zeichen dafuer, dass da was nicht stimmt!) oder schlicht Nutzer, die einen solchen benutzen (weil sie ja nicht Programmieren wollen, dies vielleicht noch nie getan haben und deshalb nichtmal einen Editor mit Syntaxhilighting besitzen!). Ach ja, wenn die Entwickler besonders fancy waren, dann haben sie nicht nur Zuweisungen, sondern gleich auch assoziative Arrays und andere lustige Konstrukte der Sprache im Configfile untergebracht und mal Strings als "string" und mal als 'string' deklariert.
Der arme Nutzer steht dann mit einer Fehlermeldung wie der folgenden da:
[error] [client 139.30.250.14] PHP Fatal error:  Call to a member function set_pagesize() on a non-object in /usr/local/www/roundcube/program/steps/addressbook/func.inc on line 35, referer: http://dumdidum.de/?_task=login
Das zeigt uebrigens auf eine Programmzeile irgendwo im nirgendwo, zumindest ist nichts in Sicht, was den Fehler nahelegt, es ist ja noch nichtmal in der Konfigurationsdatei. Bemueht man dann Google mit dieser Fehlermeldung, so findet man primaer folgende Mailinglist-Konversation:
Matias wrote:
> Hi,
> 
> I've setup the ldap server on the main config file but when I try to 
> browse the Addressbook the only thing I get is a blank page.
> 
> On the error log I can see the following:
> 
> 
>   PHP Fatal error:  Call to a member function set_pagesize() on a 
> non-object in /var/www/roundcube/program/steps/addressbook/func.inc on 
> line 25
> 
> 
> 
> I'm setting it up on debian lenny.
> 
> Any idea what can be causing this problem?
> 
> Thanks a lot.
> 
> _______________________________________________
> List info: http://lists.roundcube.net/users/
> 


Nevermind.... I was doing something really stupid :-P

_______________________________________________
List info: http://lists.roundcube.net/users/
(Quelle: http://www.mail-archive.com/users@lists.roundcube.net/msg02398.html, wobei diese(s) Posting gemirrort ist)
Die Fehlerbeschreibung passt perfekt, der Knilch hat eine Loesung -- UND SCHREIBT SIE DANN NICHT AUF. Natuerlich ist es ein einfacher Fehler -- einen Blockkommentar nicht zu erkennen. Aber es ist nicht dumm, sondern intuitiv. Es ist schlicht das Uebersehen eines Blockkommentar-Starts, ein Fehler, auf den man nur dann kommt, wenn man ueberhaupt ahnt, dass in dieser Konfigurations-Datei-Sprache so etwas wie Blockkommentare vorkommt.

Warum dieser Lex hier? Vielleicht nimmt der ein-oder-oder andere (ganz besonders aus der Open-Source-wir-koennen-doch-alle-eh-php-und-perl-und-ruby-sowiso-Szene) dreieinhalb Punkte mit:

Und nein, "du haettest ja wen fragen koennen" ist keine Loesung. Das syntaktische Format einer [vom Nutzer zu editierenden] Konfigurationsdatei sollte niemals Fragen aufwerfen.

Stichworte:


Impressum