Tori Amos live in Graz

Thomas am 28. Juni 2007 um 21:27

Gestern war ein toller Tag, genauer gesagt ein toller Abend. Tori Amos gastierte in Graz auf der Kasemattenbühne.

Die Veranstaltung lässt sich leicht zusammenfassen: Geniales Konzert!

Schwalben bringen Glück

Thomas am 22. Juni 2007 um 18:17

Dieser Spruch geisterst schon seit meiner frühen Kindheit im Kopf herum. Und ich kann mich noch daran erinnern, wie gut gelaunt die ganze Familie war, wenn die Schwalben im ehemaligen Kuhstall eingezogen sind um ihr Nest vom Vorjahr renovierten und bezogen.

Mit dem Stall verschwanden auch die Schwalben. Bis sie im Vorjahr einen neuen Nistplatz entdeckten. Inzwischen sind es zwei Nester und die Schwalben brüten heuer schon zum zweiten Mal.

Schwalbennester Rauchschwalbe

Auch anderen Ortes gibt es Nachwuchs. Wildenten verbringen, wie jedes Jahr, am nahe gelegenen Bach den Sommer.

Enten

Shakespeare einmal anders

Thomas am 21. Juni 2007 um 19:07
Romeo, a lover with an accumulative memory.
Juliet, a beautiful but domineering woman.
Ulysses, a spaceman.

    Act I: A Minimalistic Play.

    Scene I: Juliet Sets Things Straight.

[Enter Romeo and Juliet]

Juliet:
 You are nothing. Remember yourself.
 You are the difference between nothing and a pig.
 Open your heart!

[Exit Romeo]

[Enter Ulysses]

Juliet:
 You are the twice the square of the product of an stinking
 goat and a fat pig. Speak your mind!

    Scene II: Accumulative Juggling

[Exit Ulysses]

[Enter Romeo]

Romeo:
 You are me.

Juliet:
 Recall your inner most fears. You are the sum of me and thyself.
 Are you better than nothing?

Romeo:
 If not, we shall proceed to scene IV.

Juliet:
 Open your heart! Remember me.

[Exit Romeo]

    Scene III: A Spaceman Interferes.

[Enter Ulysses]

Juliet:
 Speak thy mind! 

Ulysses:
 We must return to Scene II.

    Scene IV: Romeo's head overflows.

[Exeunt]

Dieses “Stück” ist natürlich nicht von William Shakespeare. Tatsächlich stammt der Text aus der Feder Peter Nillius’. Geschrieben in der Programmiersprache Shakespeare. Diese gehört zu den sogenannten esoterischen Programmiersprachen. Meistens handelt es sich um Programmiersprachen mit möglichst unverständlicher Syntax. Im Fall von Shakespeare geht es darum das Programm wie ein Shakespeare-Stück aussehen zu lassen. Beispielsweise übernehmen die Figuren aus unserem Stück die Rolle der Variablen.

Wer sich etwas näher mit der Shakespeare Programming Language auseinandersetzen will sollte einen Blick auf die Homepage werfen. Es lohnt sich. Zumindest für Programmierer.

Das Programm berechnet übrigens die ersten n Glieder der Fibonacci-Folge.

BadU ist umgezogen

Thomas am 16. Juni 2007 um 18:20

Heute bin ich mit meinem Blog umgezogen. Die “offizielle” Adresse lautet nun http://www.gritsch.at/badu/. Zusätzlich habe ich eine Weiterleitung von http://badu.gritsch.at/ auf BadU eingerichtet.

Unerwartete Ergebnisse mit Javas DateFormat

Thomas am 16. Juni 2007 um 14:10

Java stellt für das Parsen und Formatieren von Datumseingaben die Klasse java.text.DateFormat bereit.

Diese Klasse verwendet man in etwa so:

01  String date = "41.01.2007";
02  DateFormat df = DateFormat.getDateInstance(
         DateFormat.MEDIUM,
         Locale.GERMANY);
03  try {
04    Date d = df.parse(date);
05    System.out.println(df.format(d));
06  }
07  catch (ParseException ex) {
08    System.out.println("ungültiges Datum");
09  }

Jeder kann auf den ersten Blick sehen, dass der 41.01.2007 ein ungültiges Datum ist. Man möchte meinen, dass der Aufruf in Zeile 04 zu einer Exception führen muss. Falsch gedacht. Tatsächlich werden die “Überschüssigen” Tage und Monate einfach zum Datum dazuaddiert. Aus dem 41.01.2007 wird so der 10.02.2007 und aus dem 4235.18.1900 wird folgerichtig der 03.01.1913.

Dieses Verhalten mag zwar in manchen Situationen recht praktisch sein, spätestens bei der Validierung von Benutzereingaben sieht die Sache anders aus. Wenn ein Benutzer ein solches ungültiges Datum eingibt, war es wahrscheinlich ein Tippfehler.

Schuld an dem Schlamassel ist der nachsichtige (engl.: lenient) Parser in DateFormat. Diese Nachsichtigkeit kann man dem Parser glücklicherweise austreiben, indem man die Methode setLenient(boolean lenient) mit dem Paramter false aufruft.

Und so funktioniert das Programm, wie erwartet:

01  String date = "41.01.2007";
02  DateFormat df = DateFormat.getDateInstance(
         DateFormat.MEDIUM,
         Locale.GERMANY);
03  df.setLenient(false);
04  try {
05    Date d = df.parse(date);
06    System.out.println(df.format(d));
07  }
08  catch (ParseException ex) {
09    System.out.println("ungültiges Datum");
10  }

Warum der Parser standardmäßig den nachsichtiges Parser verwendet bleibt offen.