28 June 2010

My Berlin commute

My new work and my current temporary home are on the same street - only 13 km apart. The street changes names a couple times as it traverses severals boroughs of Berlin, but it's really a straight ride, mostly with good bike lanes on the street or sidewalk. Despite being totally inside the city, the density of traffic lights on this road is rather low and so I travel much faster on my bike than I would in Toronto. It's also totally flat!

Yesterday, I even found a nicer route that uses quieter streets:

View Larger Map

Moving to Berlin is a real improvement in terms of quality of life! And the route to the sailing club is even better, half of it leading right through the Grunewald forest.

1 June 2010

literal arrays and lists in Java

In Python and other modern languages, you can say things like:
for x in ['cat', 'window', 'defenestrate']:
    print x, len(x)
In Java, there is no direct syntax for array or list literals. The only thing that Java has are “Array Initializers” that can be used right where an array is declared. Thus the above Python code becomes:
String[] xs = {"cat", "window", "defenestrate"};
for (String x : xs)
    System.out.println(x);

For people who need a lot of literal arrays, this can be a bother, especially when you need small arrays on the inside of expressions. Fortunately, Java's new “variable length argument lists” can help here, because they transform any number of arguments into just.... an array. So this little helper function does the job:

static  T[] array(T... elems)
{
    return elems;
}

Now I can happily write:
for (String x : array("cat", "window", "defenestrate")) 
       System.out.println(x);

Java's standard library even provides a function to create literal lists. Ironically this function is placed in class Arrays although it neither eats nor produces an array.

public static  List asList(T... a)

The nice thing about this factory method is that it provides a list which is backed by an array, so you get a list of fixed size – that saves a little bit of memory and can be useful in some situations. Unfortunately, the documentation says nothing about what happens when you call size-changing methods (like add()) on the resulting list. It's a typical omission of the Java documentation. One has to figure out all the details by oneself. Unfortunately, many Java programmers don't even know that there are such details and then they are surprised when it hits them.

I just did a quick history research. It seems that the helpful function asList(...) exists in Java at least since 1998 (Java 1.2, with the Collections framework). Given that Java really became famous around and after this time, it is really deplorable, that most Java tutorials introduce lists like this:
List ls = new ArrayList();
ls.add(1);
ls.add(2);
for ( Integer i : ls )
    // do stuff

When they instead could write:

for ( Integer i : Arrays.asList(1, 2) )
    // do stuff

Admittedly, the “for ( i : ls )” syntax and variables length argument lists have only been deployed with Java 1.5 in 2004. Curiously, the simplified for loop has become widespread already, while varargs and list literals haven't.

Update: I was about to edit my program to make use of the simplified syntax when I discovered, that Java has anonymous array literals after all. I used Ecplise's “inline local variable” refactoring to get rid of the array dummy and what it produced was:
    return new Object[] {1, 2, 3};

Curious again: the feature is there (probably even since an early release), but people don't know about it!

24 May 2010

pee day

Yesterday when I fed Dad's chicken, and pigeons, and rabbits I noticed the swallows in the barn and I thought to myself: “you swallows are nice, you sing your songs for free, I do not need to feed you guys."

Today, after having fed the chicken (including the cute little chicks) and the pigeons and as I was feeding the rabbits (which have a lot of youngsters, too, at this time of year), a swallow peed on my head. Photo proof to follow.

1 May 2010

les mesures de temps au 18ème siècle

Dans l'Histoire de sa vie Jacques Casanova nous raconte d'une conversation qu'il ait en 1749 dans la ville de Parme en Italie. À cette époque, Philip d'Espagne et devenu duc de Parme après la mort du dernier duc de la maison Farnèse.
Ma nièce Janeton n'étant pas jolie, j'ai poursuivi à faire babiller la mère. Je lui ai demandé si les Parmesans étaient contents d'être devenus sujets d'un Espagnol.
— Contents? Nous nous trouvons tous dans un vrai labyrinthe ; tout est bouleversé, nous ne savons pus où nous sommes. Heureux temps, où régnait la maison Farnèse, tu n'es plus ! [..] Nous sommes réduit à une confusion incroyable. Depuis trois mois il n'y a pus personne à Parme qui sache l'heure qu'il est.
Depuis que Dieu a fait e mode, e soleil s'est toujours couché à vingt-trois heures et demie, et à vingt-quatre on a toujours dit l'angélus ; et tous les honnêtes gens savaient qu'à cette heure-à on allumait la chandelle. Actuellement, c'est inconcevable. Le soleil est devenu fou : il se couche tous es jours à une heure différente. Nos paysans ne savent plus à quelle heure ils doivent venir au marché. On appelle cela un règlement : mais savez-vous pourquoi ? Parce qu'à présent tout le monde sait qu'on dîne à douze heures. Beau réglement ! Au temps des Farnèse on mangeait quand on avait faim et cela valait bien mieux.
Je pense à l'époque les montres et horloges n'étant pas très précis, il fallait les régler tous les jours. Pour cela faire on doit s'orienter dans la nature et le coucher du soleil était un événement bien lisible à ce but. Le régime espagnol (qui était aussi le régime français à l'époque) était le plus moderne. On s'oriente au midi – l'instant ou le soleil est le plus haut de le ciel – ce qui fait que chaque jour fait exactement 24 h. Le désavantage c'était qu'il faut des instruments pour déterminer c'était instant assez précisément. Je suppose que juste cela est devenu possible à l'époque, d'où le changement de régime.

26 April 2010

Confession d'une femme

Depuis que je me connais, je me suis trouvée toujours transportée par la volupté amoureuse. Quand je voyais un homme, j'étais enchantée de voir l'être qui étai la moitié de mon espèce né pour moi, moi étant faite pour lui, me tardant d'y être jointe pas le nœud du mariage. Je croyais que ce qu'on appelle amour venait après l'union ; et je fus surprise que mon mari me faisant devenir femme ne m'ait fait connaître la chose que par une douleur qui ne fut compensée par aucun plaisir. J'ai trouvé que mon imagination au couvent m'était d'une plus grande ressource. Il est arrivé de là que nous ne sommes devenus que bons amis, très froids, couchant rarement ensemble, et point curieux l'un de l'autre ; malgré cela, assez d'accord, puisque quand il veut de moi je suis toujours à ses ordres ; mais comme la pitance n'est pas assaisonnée par l'amour, il la trouve insipide : aussi ne la demande-t-il que lorsqu'il croit en avoir besoin. D'abord que je me suis aperçue que tu m'aimais, j'en fus bien aise, et je t'ai fourni toutes les occasions de devenir toujours plus amoureux, sûre de mon côté que je ne t'aimerais jamais ; mais quand j'ai vu que je m'étais trompée, et que je devenais amoureuse aussi, j'ai commencé à te maltraiter, comme pour te punir de m'avoir rendue sensible. Ta patience et ta résistance m'ont étonné en même temps que fait reconnaître mon tort, et après le premier baiser je ne me suis plus trouvée maîtresse de moi-même. Je ne savais pas qu'un baiser pouvait être d'une si grande conséquence. Je fus convaincue que je ne pouvais me faire heureuse qu'en te rendant heureux. Cela m'a flattée et plu, et j'ai reconnu principalement dans cette nuit que je ne le suis qu'autant que je vois que tu l'es.
extrait de: L'histoire de la vie de Jacques Casanova, écrite par lui-même à Dux en Bohème, ca. 1790, Vol. 2, chap. V–VI, p. 168