Technorama

Plasma Ball

ズリチの近く技術の博物館ありますTechnoramaです.

Close to Zürich, there is a technology museum: the Technorama.

À proximité de Zürich, il y a un musée sur la technologie, le Technorama.

In der Nähe Zürich, gibt es ein Technologie Museum, das Technorama.

Comme le dimanche dernier était plutôt pluvieux à Zürich, nous sommes allés au Technorama. C’est un musée technologique situé à proximité de Winterthur, on y trouve des expositions et des présentations sur différent phénomène physiques et les machines qui s’y rapportent. Le musée est très interactif, vu qu’on peut toucher et manipuler la majorité des objets. Outre les sempiternelles boules à plasma, on y trouve de nombreux démonstrations amusante sur l’électricité, la mécanique, l’optique. Au sous-sol on trouve une musée sur des vieilles maquettes de chemin de fer. En plus des expositions régulières, il y a plusieurs fois par jour des présentations, notamment sur l’électricité (avec éclairs et cheveux dressés sur la tête), et une sur les gaz (avec un nombre respectable d’explosions).

Si c’était la première fois pour les amis qui m’accompagnaient, j’y avait été de nombreuses fois, il y a plus de vingt ans. C’est toujours difficile de comparer un lieu qu’on a visité enfant. La chose qui m’a le plus frappé, c’est à quel point le bâtiment m’a semblé petit à présent. Si le thème du musée n’a pas changé, c’est toujours un lieu d’exposition sur la technologie, les différents expositions ont beaucoup changé. D’abord ce qui est considéré comme intéressant et nouveau a pas mal changé en vingt ans, à commencer par les ordinateurs, qui sont devenus banals au point de ne plus être présentés du tout, relégués à de simples outils d’exposition.

L’endroit est visiblement destiné en priorité aux enfants, mais cela reste intéressant pour un adulte surtout s’il est intéressé par les choses techniques. J’ai somme toute appris pas mal de choses. J’ai aussi bien aimé l’exposition de vieilles maquettes de train (j’ai toujours un faible pour les maquettes ferroviaires), mais ça fait bizarre de voir au musée des trains avec lesquels j’ai joué enfant.

flattr this!

Google Analytics

Google Analytics Sample

I was only slightly curious about who reads my blog, so for some time a had been using the counterize plugin for wordpress. The problem was, it was reporting more and more robot traffics, and as some robots are pretty stupid, they generate a lot of traffic. In the end up, I ditched this plugin and instead installed one that links into google analytics called google analyticor.

I was somehow reluctant to use such a powerfull package to measure the stats of a simple blog, but this tool is much more convenient: it does not fill up the database, and gives out very usefully and nice reports, filtes out robots and recognizes robots. Installation was also very simple, the plugin only needed my authentification code. So I have again meaningfull statistics about the readers. Once I have a resonable amount of data I will publish the data

flattr this!

Laptop, batteries and north pole

I’m currently at an altitude of around 10’000 meters, somewhere near the north pole, flying from Narita to München, and hopefully, Switzerland. My flight has wireless access point and my seat neighbor, a ukrainian sailor, gave me a prepaid card of 30 minutes of internet, so I blog.

Laptops are very convenient and with more and more wireless access point, can be used in more and more places, but power has always been the weak point. Lately there have been quite a few problem with bad batteries. Apple had to recall one million of them, this includes one of those for my laptop, and three in various laptops in our lab. Because of this I only have one battery with me (I would not like to fligh with a battery susceptible to catch fire).

Still one good thing might come out of this, constructors finally agreed to standardize batteries. I don’t know if they will only standardize the cells, or also the enclosures, but any step in that direction is a welcome improvement. Imagine a service where you could rent one standard battery in one airport and return it in another, that would be a nice business model no?

flattr this!

Deuxième voyage à Kyōto

Daimon-ji

La semaine dernière, j’ai profité des fêtes d’お盆obon pour passer quelques jours à 京都Kyōto avec mon frère. C’était ma deuxième visite dans l’ancienne capitale du Japon. Mon dernier passage date d’un long week-end durant mon premier séjour au Japon, il y a presque quatre ans.

Comme beaucoup de grand villes, Kyōto était plutôt vide à cause des fêtes d’obon. Traditionellement, les gens profitent de cette période pour rendre visite à la famille à la campagne. Un des évènements à Kyōto à cette époque est le 大文字焼きdaimonji yaki. De grand feux sont allumés dans les montagnes qui entourent la ville, ces feux forment des kanjis, à commencer par le kanji grand (大).

La grand difficulté était de trouver un bon emplacement pour voir les kanjis. J’avoue avoir été quelque peu déçu, si les feux sont impressionnants, ils ne durent guère, tout au plus une dizaine de minutes, dans un pays ou les feux d’artifices font plus d’une heure. De plus, il n’y avait, dans les lieux ou les gens s’étaient regroupés pour voir le spectacle, aucun stand de nourriture ou de jeux qui sont typiques des fêtes japonaises. Peut-être que le fait que lors de toute manifestation, je m’attende à trouver à manger est un symptôme d’adaptation à la manière de penser japonaise.

flattr this!

J’ai fini «Mina no Nihongo»I finished “Mina no nihongo”「みんなの日本語」が終わりました

昨日「みんなの日本語」の二冊が終わりました。

Yesterday, I finished the second book of “minna no nihongo”.

Hier, j’ai fini le second volume de « minna no nihongo ».

Fini les aventures de Mira-san! En fait, j’ai aussi fini de recopier les kanjis du livre de kanjis de minna no nihongo. Ça ne veut malheureusement pas dire que je le connais par cœur, il faudra certainement que je refasse une passe.

En attendant, mes cours continuent, le livre choisi par mon professeur pour la suite est 「日本語中級読解入門」(Introduction to Japanese Reading Skills). Au début j’étais un peu inquiet, vu que le livre ne contient pas de furigana, comme m’a dit un ami, « on m’a enlevé les petites roues ». Nous avons fait la première leçon, et c’est difficile, mais ça va.

flattr this!

Opening an iBookOuvrir un iBook

Opened up iBook

Yesterday I finally had the courage to start a thing I have been meaning to do for weeks: change the hard drive in one of the lab’s laptops. The laptop is an iBook G4, and the hard-drive died this spring, so we ordered a spare one, the only problem was installing it. While changing a hard-drive in a desktop can be done in minutes, or seconds, if you have a nice enclosure, changing the hard drive is quite different in a laptop.

In the case of the iBook G4, this implied removing the following elements:

  1. Battery
  2. Keyboard
  3. Wifi-Card
  4. Memory shield
  5. Front shell (which includes power button, trackpad and loudspeakers)
  6. Back shell
  7. Front shield
  8. Back shield
  9. AC board

All these elements are held by different screws, so I had to work with a check list and one handy box from the 100¥ shop with a lot of little compartements (visible in the right part of the photo). Interestingly, some parts were also held by magnets, which is new to me. I still managed to put back some elements in the right order, to undo part of the re-assembly twice, but lo and behold, the new hard drive works, and the iBook is now happilly installing the operating system.

I must say the level of integration you see in laptops nowadays is amazing. I remember adding an ethernet board to my Mac SE/30, the task was also very delicate, but the components themselves were huge and the internal design was much more messy. One the other hand, in the inside of the shell, you had the signatures of all the people who had designed the machine. Nowadays, I doubt there would be enought space to put all the names…

flattr this!

しまのなかでろくどうぶつSix animaux au centre d’une île…Six animals in the center of an island…

🐼

Durant une des soirées du séminaire de la semaine dernière, un des étudiants nous a posé une devinette. Je l’ai trouvé intéressante, d’abord parce que je l’ai comprise (bien après tout le monde), mais aussi parce qu’elle montre comment le système d’écriture influe des choses comme les mots d’esprit.

La devinette en elle-même est : (しま) (なか) (ろく)動物 (どうぶつ)ある。 (なん)ですか? Cela peut se traduire par Il y a six animaux au centre d’une île. De quel animal s’agit-il?. La réponse est ours blanc. Pourquoi ? Si l’on place six ( [ろく]) au centre de île ( [しま] on obtient しろくま, i.e 白熊, l’ours blanc.

Ce qui est intéressant, c’est que vu que le système d’écriture est basé sur des sylabes, toute les jeux d’écriture sont basé sur les syllabes. Ainsi un mot à l’envers comporte les mêmes sylabes, mais dans l’ordre inverse, un peu comme le Verlan en français. Un panda inversé (i.e avec les zones noirs blanches et vice versa) est donc un ダンパ (DANPA).

On notera que le son ん est un peu spécial vu que c’est la seule consonne isolée du japonais. Un mot japonais doit normalement se terminer avec une voyelle ou le son ん, ce qui veut dire que si on prend un texte en japonais et qu’on l’inverse (au sens des caractères romains), le résultat n’est en général pas du japonais au niveau même des sylabes. Pour être inversable, au sens des caractères romains, le japonais doit être restreint à des mots qui commencent soit par une voyelle (あ,い,う,え,お), soit par une syllabe en m (ま,み,む,め,も) ou en n (な,に,ぬ,ね,の) (ん est transcrit soit par N soit par M).

Si on accepte l’idée que les groupes de hard-rock chantent des verset sataniques inversés, et vu qu’il y a des groupes de hard-rock japonais, on peut en déduire que les mots formant ces versets suivent cette structure. Vu que ces configuration sont rares, on peut en déduire le vocabulaire et la structure de ces versets sataniques. Je suis sûr que cette découverte va faire un bien fou à l’humanité…

flattr this!

WorkplacePlace de Travail

photograph of my work-space

The carpet in our lab had to be changed, so we had to pack everything, move out and move in again. Finally, yesterday, I managed to set up again my work space, so I took a photogram while things were still nice and clean.

I basically work with three display, my main work station is my Mac OS X laptop, which is hooked to a large Apple LCD display. The display also acts as Firewire and USB hub, where many peripheral are connected, an iSight camera, a wireless mouse, two external hard drives and a label printer. I use the laptop screen as a secondary display that contains notes, or for instance my day’s calendar. The screen on the right the one of Sun station provided by JAIST. It runs Solaris 2.9 and Gnome 2.0. I don’t use its desktop features, which are quite weak. I mostly use this and other work station to run distributed programs, and do debugging. Once things are ironed out, I usually do experiments on our cluster where there are less interferences.

flattr this!

Writing a cross platform profile

Learning Unix is to a large extent a long initiation process. One of the first things one learns is basic shell scripting commands, followed by the customization of one shell. When I started working with Unix somewhere in 1993, we used Sun stations, and the default shell was cshrc. My first .login and .cshrc were not built from scratch, instead they contained bits and pieces gathered from other students and teaching assistants. The university not only had sun station, but a bunch of Macintoshes running AU/X, Apple’s Unix before OS X. As they shared the same NFS file-system, writing cross-plateform files was needed. My configuration files were something that always kept, adapting them to new systems, rewriting parts, porting them to new shells, first tcsh, then bash.

While I rely less on NFS, I increasingly use unison for synchronization, so large parts of my home directory are shared between many machines. This is convenient as I can devellop a project on my Mac laptop and run it on the Solaris workstations or our Linux cluster. Of course this means handling the idiosyncrasies of each plateform. In this post, I will try to explain how I handle the different parts of configuration. Of course, this code is tailored for my own usage, use them it at your own risk.

What the configuration files aims to do is to define the different paths in a rational way for each plateform. They do not ensure that all plateform behave the same, more that all the possible tools are accessible.

Some structure

The first thing when sychronizing things among multiple plateforms is to have some structure in your files. This applies in particular to files in my home directory. I use the Mac OS X structure, i.e my home directory contains the following directories:

  • Documents
  • Library
  • Projects
  • Pictures

There are other directories, but those are the ones that are shared among all machines. In order to avoid problems I don’t synchronize the whole home directory, instead those four directores are synchronized totally in parts (no point in synchronizing Library/Caches for instance.

On systems where I have no root access, or where I don’t want to modify the installed programs, there is a personal usr hierarchy, i.e ~/usr/lib, ~/usr/bin, etc. This hierarchy should be included in the path if present.

One important directory is Library/bin that contains all my shell scripts, and the configuration files for the shell, called bashrc.bash and profile.bash. This directory also contains my own personal shell script commands, either in the basic directory if they work on all plateforms, or in plateform specific directories, i.e Darwin, Solaris, Linux.

The actual .bashrc and .profile file source those files. For instance, the .bashrc file on the Mac laptop contains this code:

if test -z "$ALREADY_SOURCED_RC"
then  
    . ~/Library/bin/profile.bash
fi
. ~/Library/bin/bashrc.bash 
The profile.bash file

The meat of the configuration is contained in the ~/Library/bin/profile.bash file. The first line of the file defines the variable, so the whole setup is only done onces.

export ALREADY_SOURCED_RC="true" 

The next step is to define some functions to manipulate paths, as we are going to do a lot of this. Those were shamelessly lifted from the bash default configuration files. What those function do is add some directory to some path, either in front or at the end, those function ensure that each directory only appears once in the path.

## Path remove only works for single component paths 

pathremove () {
        local IFS=':'
        local NEWPATH
        local DIR
        local PATHVARIABLE=${2:-PATH}
        for DIR in ${!PATHVARIABLE} ; do
                if [ "$DIR" != "$1" ] ; then
                  NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
                fi
        done
        export $PATHVARIABLE="$NEWPATH"
}

pathprepend () {
        pathremove $1 $2
        local PATHVARIABLE=${2:-PATH}
        export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
}

pathappend () {
        pathremove $1 $2
        local PATHVARIABLE=${2:-PATH}
        export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
}

Now that we have those basic functions, we can start setting things up. First, we define two basic variables, one contains the general OS name (Darwin, Solaris, Linux), the other defining where all the configuration is (~/Library/bin).

export GENERALOSTYPE=`uname`
export HOMELIB=$HOME/Library/bin 

For each operating system, I can do some special configuration. For instance, many of the Solaris don’t have the latest Java JDK as default, so we define a variable containing the position of the JDK. I also redefine LANG, as some of the Sun station are set up with japanese as default and do not support en_US.UTF-8.

if [ "$GENERALOSTYPE" == "SunOS" ]; then 
	export LANG="C" 
	export JAVAHOME=/app/jdk1.5.0_07
fi 

Now, one of the first things we whish to do is setup a rational java. The default on the Mac laptop is OK, but on Linux, it is not the Sun JDK, and on Solaris it is not the lastest version. So we first look if there is an installation in a rational place, and define JAVAHOME in consequence, if we have in some way discovered a value for JAVAHOME, we prepend it to the PATH and the MANPATH (we want to use those settings in preference to the default ones).

# Check for Sun Java installation  

if [ -d /usr/java/j2sdk ]; then 
	export JAVAHOME=/usr/java/j2sdk
fi 

if [ -n $JAVAHOME ]; then 
	pathprepend $JAVAHOME/bin PATH
	pathprepend $JAVAHOME/man MANPATH
fi 

The next step is to setup X11 programs. We basically do the same trick, first looking at reasonable places and then seting up the variables.

# Check for X11 installation 

if [ -d /usr/X11R6 ]; then 
	export X11HOME=/usr/X11R6 
fi 

if [ -d /usr/local/X11R6 ]; then 
	export X11HOME=/usr/local/X11R6
fi

if [ -n $X11HOME ]; then 
	pathappend $X11HOME/bin PATH
	pathappend $X11HOME/man MANPATH
fi

The next step is to setup open-windows programs, they are not really cutting edge, but on Solaris, they can come in handy. Those paths also include certain utilities like xterm. The detection is done in one go, as I have not seen any cases where they are installed in a different path.

# Check if openwindow is installed 

if [ -d /usr/openwin ]; then 
      export OPENWINROOT=/usr/openwin
	pathappend $OPENWINROOT/bin PATH
	pathappend $OPENWINROOT/man MANPATH
	pathappend $OPENWINROOT/share/man MANPATH 
fi

# Check if dt in installed 

if [ -d /usr/dt ]; then 
	export DTROOT=/usr/dt 
	pathappend $DTROOT/bin PATH
	pathappend $DTROOT/man: MANPATH 
	pathappend $DTROOT/share/man MANPATH
fi 

Next step is to check for an /opt/local hierarchy. Certain package managers link fink or darwinport install files there. The JAIST solaris installation also has programs there. As they might contain more advanced programs than the default, we prepend the paths. Notice that this time, we setup more paths.
Multiple additions to the PATH must be done separatly, because pathprepend does not handle prepending multiple paths in one operation correctly.

# Check if there is an /opt/local hierarchy 

if [ -d /opt/local ]; then 
     export OPTROOT=/opt/local
     pathprepend $OPTROOT/share/info INFOPATH
	pathprepend $OPTROOT/man MANPATH
	pathprepend $OPTROOT/share/man MANPATH
	pathprepend $OPTROOT/bin PATH
	pathprepend $OPTROOT/sbin PATH
fi 

Next is the /pkg/all hiearchy, this seems to be Sun specific.

# Check for /pack/all hierarchy 

if [ -d /pkg/all ]; then  
	export PACKROOT=/pkg/all 
	pathappend $PACKROOT/info INFOPATH
	pathappend $PACKROOT/man MANPATH
	pathappend $PACKROOT/bin PATH
fi 

Next, we check for the /usr hiearchy. This is included in the PATH by default by Linux and OS X, but not Solaris.

# Check for /usr hierarchy 

if [ -d /usr ]; then 
	pathappend /usr/man MANPATH
	pathappend /usr/share/man MANPATH
	pathappend /usr/bin PATH
	pathappend /usr/local/bin PATH 
	pathappend /usr/sbin PATH
fi 

Next, we check for the Developer tools, this one is Apple specific.

#Check for Apple developer tools 

if [ -d /Developer/Tools ]; then 
	pathappend /Developer/Tools PATH
fi 

Now we check if there is a usr hierarchy in the home directory.

# Check for usr hierarchy in home directory 

if [ -d "$HOME/usr/" ]; then 
	pathprepend $HOME/usr/bin PATH
	pathprepend $HOME/usr/man MANPATH
fi 

Finally, we prepend ~/Library/bin to the path.

# Finish with commands in Library/bin directory
# Plain scripts are stored in ~/Library/bin 

pathprepend $HOMELIB PATH

We then check if there is a plateform specific directory.

# If there is a subdiretory matching the architecture, load this one. 

if [ -d "$HOMELIB/$GENERALOSTYPE" ]; then 
	pathprepend $HOMELIB/$GENERALOSTYPE PATH
fi

We finish by setting up general variables, like the PAGER, we always check if variables are defined first, as they might already be defined by other sources, because of a remote login, or for instance in the ~/.MacOSX/environment.plist file.

#Set up X11 display 

if [ -z $DISPLAY ]; then 
  export DISPLAY=":0.0" 
fi 

# Setup screen 

if [ -z $SCREENRC ]; then 
  export SCREENRC=$HOMELIB/screenrc
fi 

#Setup langage / encoding 
  
if [ -z $LANG ]; then 
  export LANG="en_US.UTF-8"
fi

# Set up prompt 

if [ "$TERM" == "screen" ]; then
    export PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}:${WINDOW}\007"'
else 
	export PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}\007"'
fi 

Notice that the screenrc file is also in ~/Library/bin/ so it is synchronized, but as it has no x bit, it is not a command.
Aliases are defined in separate files that are loaded by the profile file. There are basically three sources for aliases: the general aliases.bash file, the plateform specific one, and finally, some custom script to build aliases out of GUI programs on Mac OS X, that I lifted from the macosxhints web site.

if [ -d "$HOMELIB/$GENERALOSTYPE/osaliases" ]; then 
	if [ -f "$HOMELIB/$GENERALOSTYPE/buildosaliases.bash" ]; then 
		source $HOMELIB/$GENERALOSTYPE/buildosaliases.bash
	fi 
	for dir in $HOMELIB/$GENERALOSTYPE/osaliases/* 
	do
  		source $dir
	done
fi 

# Load general aliases 

if [ -f "$HOMELIB/aliases.bash" ]; then 
	source $HOMELIB/aliases.bash
fi 

# Load plateform specific aliases  

if [ -f "$HOMELIB/$GENERALOSTYPE/aliases.bash" ]; then 
	source $HOMELIB/$GENERALOSTYPE/aliases.bash
fi 

Finally, we do a little bit of fiddling with the TERM variable, the problem is in certain cases, the host does not know about the terminal. For instance, the Mac OS X terminal announces itself as xterm-color, for which Solaris has no clue. We check this by launching terminfo and checking if there is an error, the terminal is not supported, and we fall back to xterm.

# If terminfo acts up, fall back to xterm 

terminfo &> /dev/null 

if [ $? != 127 ]; then 
	export TERM=xterm  
fi

Finally, we set up completion, I have a special script for unison, and we check for reasonable places on the host machine.

#Completions 

complete -C $HOMELIB/unison_completions unison 

if [ -f /etc/bash_completion ]; then 
	. /etc/bash_completion 
fi 

if [ -f /opt/local/etc/bash_completion ]; then
    . /opt/local/etc/bash_completion
fi

That is all, while those files are quite long, they are no overly complex. Tell me what you think.

flattr this!

A building over the sea

和倉温泉 / Wakura-Onsen

A building over the sea

私の研究は和倉温泉でスマーカンプをしました。

My lab did a summer camp in Wakura-Onsen.

Mon laboratoire a fait un camp d’été à Wakura-Onsen.

Notre laboratoire a fait un séminaire dans un 旅館 (Ryokan) dans le nord de la préfecture d’Ishikawa, dans la région de la péninsule de 能登 (Noto). Le séminaire était assez fastidieux, principalement à cause du fait que la majorité des étudiants a fait ses présentations en Japonais. Si je peux comprendre quelques rudiments de cette langue, je ne peux de loin pas comprendre une présentation technique, ni lire des slides avec des kanjis compliqués.

Un Ryokan est un hôtel traditionnel japonais. Les chambres sont des pièces japonaises traditionelles, avec un sol en (tatami), des grand placards pour ranger les futons, et une sorte d’alcove ou l’on trouve les une calligraphie, une poterie, de quoi faire du thé, un téléphone et une petite télévision. L’entrée de la chambre comporte une zone surbaissée ou laisser ses chaussures. Dans le cas présent, la chambre comporte aussi une petite zone avec un lavabo et un réfrigérateur (bourré de bière), et des toilettes – ce qui dans ce genre d’établissement est déjà un luxe. Le bain est commun et se trouve au rez-de-chaussée, en fait c’est un 温泉 (onsen).

Le séminaire en soi a eu lieu dans un centre de conférence de la ville, à midi nous avons mangé sur place des bentos, des plateaux repas japonais. Le soir nous mangeons dans un hôtel. Les repas du soir ont lieu dans une salle commune, là encore, le sol est tapissé de tatami, et nous mangeons sur des petites tables personnelles. Théoriquement je suppose que nous devrions nous tenir en seiza (la position à genoux correcte), mais de fait, tout le monde est en tailleur. Les repas comportent une myriade de plats différents, certains classiques sont quasi-obligés: sashimi, tempura de légume, poisson grillé, soupe miso et bol de riz, mais il y avait aussi du crabe, de l’Haliotis grillé, diverses salades, des salaisons, y compris de concombre de mer (ne vous y trompez pas, ce n’est pas un concombre, plutôt une limace). Chaque plat en soi n’est pas très imposant, mais vu leur nombre, on se retrouve la panse pleine.

L’aspect le plus sympathique dans ce genre d’endroits est le fait que l’on fournit aux hôtes des yukata, que l’on porte typiquement le soir après avoir pris le bain. Le repas est donc fondamentalement pris par un groupe de gens portant le même pyjama. Comme il se doit la gérante de l’hôtel vient, en kimono saluer la salle une fois le repas commencé, et fait un peu de conversation à tous les invités en commençant par le chef. Le service est fait par de vieilles dames, elles aussi en kimono. Je n’ai pas réussi à comprendre si le fait que ce soit de vieilles dames est traditionnel, ou simplement du fait que les jeunes ne veulent pas faire ce travail. Le matin, le petit déjeuner a lieu dans la même salle, avec au menu poisson grillé, bol de riz, nato et soupe miso.

L’aménagement intérieur du bâtiment fait tout pour avoir un air traditionnel, avec de fausses bordures de toit dans les couloirs pour faire croire que le couloir est en fait une ruelle entre des pavillons. Des hauts-parleurs diffusent un air de shamisen. Les plus vieux se souviennent peut-être de la publicité Obao avec un air japonais en arrière fond – l’air est naturellement le même, c’est un grand classique. Cela donne un air de déjà curieux à toute l’expérience. Naturellement, pas de trace de la beauté qui laisse négligemment choir son kimono rouge (est-ce qu’il était réellement rouge, est-ce que quelqu’un se souvient encore de cette publicité?).

Image: Kagaya 200410 by Atsasebo © Attribution-ShareAlike 3.0 Unported

flattr this!