Indéfectible loyauté

Hors donc, Alias a écrit un dans son blog un billet intitulé échec critique qui m’a donné envie de réagir. En résumé on a reproché à Alias d’avoir critiqué des jeux de rôles, et que vu son autorité morale d’auteur, son devoir serait de soutenir un loisir en perte de vitesse.

☙ Pause dramatique ❧

Je dois avouer que je trouve cette idée fausse et malsaine à tant de niveaux que j’en reste abasourdi. C’est à mon avis symptomatique d’un milieu qui s’est déconnecté de la réalité à un point qui m’inquiète sérieusement. D’abord considérer que l’avis d’Alias et ses critiques ont une influence notable dans le monde du jeu de rôle (par opposition au monde des créateurs de jeu de rôle), est certes flatteur pour Alias, mais à mon avis complètement erroné. La majorité des rôlistes ne connaît pas les créateurs des jeux, surtout à faible diffusion, et ceux qui les connaissent prendront leur avis avec une poignée de sel.

Ensuite, croire que présenter un front uni aidera la cause du jeu de rôle relève de l’autoritarisme primaire. Je ne doute pas du fait que les critiques ne sont pas toujours bien reçues, ou même constructives, mais c’est une réalité de toute activité communautaire. Croire que supprimer ces critiques aidera en quoi que ce soit est naïf et malsain. Je ne pense pas que le jeu de rôle aille particulièrement mal, ce qui va mal, c’est un certain milieu qui pense être représentatif de l’activité.

La latence de la théière…Teapot Latency

Théière

Hors donc, je suis installé à Mountain View, Californie, pour deux mois. Outre les désagréments du voyage et les joies du jet-lag, je me retrouve à devoir m’installer une fois de plus un chez moi, même si c’est de manière temporaire. De fait, près de cinq ans que je me retrouve à faire cet exercice tous les dix-huit mois. D’un côté, je commence à avoir une certaine habitude, de l’autre je ne peux pas dire que j’adore ça.

Le principal problème c’est qu’il faut à chaque fois mettre en suspens les activités courantes au point a et reconstruire son chez soi au point b tout en se synchronisant avec les gens et la société alentours. Il faut un certains temps pour retrouver une routine, des clubs, des amis. La clef, pour moi, est de rapidement avoir l’impression d’être installé, pour cela j’ai réalisé que j’ai besoin de deux choses: un vélo et une théière. Le vélo pour avoir un moyen de déplacement détendu et la théière pour me faire du thé. Google prête aux visiteurs des vélos, mais on doit fournir soi-même phares et cadenas, donc hier j’ai visité un magasin de sport, et le soir j’ai, au grand étonnement du vendeur, acheté une théière dans une des épiceries asiatiques de Mountain View.

Je m’étais toujours demandé pourquoi ces épiceries exotiques vendaient une variété de vistemboirs en sus de ce qu’on trouve habituellement dans une épicerie. Il semblerait que ces objets sont là pour aider les nouveaux venus à s’installer. Le corollaire intéressant, c’est que l’on peut mesurer l’intégration d’une communauté dans un lieu donné de par l’absence de vistemboirs.

Smörgåschord

Smörgåschord - Dana Street Roasting Company - Mountain View

金曜日夕方喫茶店でアカペラの友達が参加する名前がsmörgåschordスモルガソチュコルヅを聞きに行きました。疲れけれどもたのしがった。

Friday evening, I went to listen to a a capella group in which friends participate in coffee shop. The group’s name is smörgåschord. Despite being tired, it was fun.

Vendredi soir, je suis allé dans un coffee shop écouter un concert de smörgåschord, un groupe a capella auquel participent des amis. Malgré la fatigue, c’était très agréable.

Am Freitag Abend bin ich einen a cappella Gruppe,
smörgåschord wo Freunde mitmachen zuhören gegangen. Obwohl ich mude war es lustig.

.

着きましたI ArrivedJe suis arrivéIch bien angekommen

Airport Bluescreen

カリフォルニア州に着きました。ここもう雨が降っています。疲れました。

In arrived in the California, it also rains here. I’m tired.

Je suis arrivé en Californie, ici aussi, il pleut, je suis fatigué.

Ich bien in Kalifornien angekommen, hier regnet es auch. Ich bin müde.

また旅行A trip, againEncore un voyage

Innsbruck

先週はオーストリアのインスブルックで会社の会議が有って週末はアルプスでスキーして
明日米国のシリコンバレーに旅行します。忙しいですね。

Last week, I was in Innsbruck, in Austria, for a company conference, during the week-end I skied in the Alps, tomorrow I will travel to Silicon Valley in the United States. Quite busy…

La semaine dernière, j’étais à Innsbruck, en Autriche, pour une conférence de ma compagnie, le week-end, j’ai fait du ski dans les alpes, demain je pars pour Silicon Valley, aux États-Unis. Un emploi du temps plutôt chargé…

Les identités meurtrières

Couverture – Les identités Meurtrières - Amin Maalouf

Un ami m’a prêté les identités meurtrières d’Amin Maalouf, j’ai fini de le lire. C’est un texte intéressant, qui parle du problèmes des iden­tités culturelles multiples. J’ai bien aimé le postulat de base, selon lequel beaucoup de problèmes d’aujourd’hui sont causés par le fait que beaucoup de personnes ne définissent que par une seule identité, qu’elle soit nationale ou religieuse et que le résultat est une situation très polarisée. L’auteur prone l’acceptation de chacun de ses identités multiples.

L’auteur est un chrétien originaire du Liban mais ayant vécu en France. Le livre est en grande partie une réflexion sur sa situation, divisée entre plusieurs appartenances parfois opposées. C’est un sentiment que j’ai moi aussi souvent ressenti, certes de manière moins dramatique.

Si l’auteur est sans aucun doute sincère, il est à mon avis trop centré sur son problème: l’opposition entre occident et proche-orient, chrétien et musulmans., l’universalisme français opposé à celui des États-Unis. Tout les problèmes du monde sont projetés sur ces axes.

Le fait qu’il existe par le monde des polythéistes ou des athées, que certaines nations (au hasard, le Japon) ont géré leur occidentalisation et le rapport entre technologie et tradition différemment n’est pas évoquée. Lorsqu’il parle de l’intégration linguistique en Europe, il ne parle pas de la Suisse, ce qui est un peu dommage, vu que le pays semble en gros appliquer ce qui est prôné dans le livre (enseignement de trois langues). Naturellement les États-Unis sont présentés comme une hyper-puissance impossible à arrêter – ce qui ne semble plus être tant d’actualité.

Et rien n’interdit de penser qu’un jour, un Noir serait élu président des États-Unis et un Blanc président de l’Afrique du Sud. Pareille éventualité ne paraît envisageable qu’au bout d’un processus efficace d’harmonisation interne d’intégration et de maturation, lorsque chaque candidat pourra être jugé par ses propre concitoyens sur ses qualités humaines et sur ses opinions et non sur ses appartenances héritées. Il va de soi qu’on en est pas là.

En conclusion je pense que c’est un livre méritoire et intéressant, mais qui souffre d’une perspective quelque peu limitée à l’univers de l’auteur et de la marque de son époque (1998). Je comprends bien qu’il faille prendre des pincettes pour traiter de ce genre de sujets, mais j’aurais aimé que l’auteur aille plus loins dans ses recherches et ses réflexions. Il serait intéressant de voir ce que donnerait ce texte s’il était écrit aujourd’hui…

Mach-0 binaries

One of the fascinating things about the demo-scene is the amount of things that can fit in 4K of code. On the other hand, when one compiles a simple program under a Unix system, the resulting binary is usually very large for its functionality. Simple programs like /true use more than 12 Kilobytes. What the hell is the reason? Under Mac OS X, we need to look at the Mach-0 binary file format for an answer.

A handy tool to look into binaries is otool. What can it tell us? First let us look into the the header: otool -h /usr/bin/true

/usr/bin/true:
Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
 0xfeedface       7          3  0x00          2    13        908 0x00000085

A Mach-0 file is a sequence of commands that tells the operating system how to set-up a process for starting. The file has first a header, then a sequence of commands that can reference positions later in the file.
Here we see that setting up the true requires 13 commands that take up 908 bytes. Let’s see what those commands are.

otool -l /usr/bin/true
/usr/bin/true:
Load command 0
      cmd LC_SEGMENT
  cmdsize 56
  segname __PAGEZERO
   vmaddr 0x00000000
   vmsize 0x00001000
  fileoff 0
 filesize 0
  maxprot 0x00000000
 initprot 0x00000000
   nsects 0
    flags 0x0
Load command 1
      cmd LC_SEGMENT
  cmdsize 124
  segname __TEXT
   vmaddr 0x00001000
   vmsize 0x00001000
  fileoff 0
 filesize 4096
  maxprot 0x00000007
 initprot 0x00000005
   nsects 1
    flags 0x0
Section
  sectname __text
   segname __TEXT
      addr 0x00001f98
      size 0x00000066
    offset 3992
     align 2^2 (4)
    reloff 0
    nreloc 0
     flags 0x80000400
 reserved1 0
 reserved2 0
Load command 2
      cmd LC_SEGMENT
  cmdsize 192
  segname __DATA
   vmaddr 0x00002000
   vmsize 0x00001000
  fileoff 4096
 filesize 4096
  maxprot 0x00000007
 initprot 0x00000003
   nsects 2
    flags 0x0
Section
  sectname __data
   segname __DATA
      addr 0x00002000
      size 0x00000014
    offset 4096
     align 2^2 (4)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __dyld
   segname __DATA
      addr 0x00002014
      size 0x0000001c
    offset 4116
     align 2^2 (4)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Load command 3
      cmd LC_SEGMENT
  cmdsize 124
  segname __IMPORT
   vmaddr 0x00003000
   vmsize 0x00001000
  fileoff 8192
 filesize 4096
  maxprot 0x00000007
 initprot 0x00000007
   nsects 1
    flags 0x0
Section
  sectname __jump_table
   segname __IMPORT
      addr 0x00003000
      size 0x00000005
    offset 8192
     align 2^6 (64)
    reloff 0
    nreloc 0
     flags 0x04000008
 reserved1 0 (index into indirect symbol table)
 reserved2 5 (size of stubs)
Load command 4
      cmd LC_SEGMENT
  cmdsize 56
  segname __LINKEDIT
   vmaddr 0x00004000
   vmsize 0x00002000
  fileoff 12288
 filesize 5296
  maxprot 0x00000007
 initprot 0x00000001
   nsects 0
    flags 0x0
Load command 5
     cmd LC_SYMTAB
 cmdsize 24
  symoff 12288
   nsyms 2
  stroff 12316
 strsize 32
Load command 6
            cmd LC_DYSYMTAB
        cmdsize 80
      ilocalsym 0
      nlocalsym 0
     iextdefsym 0
     nextdefsym 1
      iundefsym 1
      nundefsym 1
         tocoff 0
           ntoc 0
      modtaboff 0
        nmodtab 0
   extrefsymoff 0
    nextrefsyms 0
 indirectsymoff 12312
  nindirectsyms 1
      extreloff 0
        nextrel 0
      locreloff 0
        nlocrel 0
Load command 7
          cmd LC_LOAD_DYLINKER
      cmdsize 28
         name /usr/lib/dyld (offset 12)
Load command 8
     cmd LC_UUID
 cmdsize 24
   uuid 0x7d 0xf6 0x04 0x33 0x2c 0xb5 0xc7 0x5c
        0x3a 0x53 0xe1 0xd2 0x4b 0x5b 0xa3 0xac
Load command 9
        cmd LC_UNIXTHREAD
    cmdsize 80
     flavor i386_THREAD_STATE
      count i386_THREAD_STATE_COUNT
	    eax 0x00000000 ebx    0x00000000 ecx 0x00000000 edx 0x00000000
	    edi 0x00000000 esi    0x00000000 ebp 0x00000000 esp 0x00000000
	    ss  0x00000000 eflags 0x00000000 eip 0x00001f98 cs  0x00000000
	    ds  0x00000000 es     0x00000000 fs  0x00000000 gs  0x00000000
Load command 10
          cmd LC_LOAD_DYLIB
      cmdsize 52
         name /usr/lib/libgcc_s.1.dylib (offset 24)
   time stamp 2 Thu Jan  1 01:00:02 1970
      current version 1.0.0
compatibility version 1.0.0
Load command 11
          cmd LC_LOAD_DYLIB
      cmdsize 52
         name /usr/lib/libSystem.B.dylib (offset 24)
   time stamp 2 Thu Jan  1 01:00:02 1970
      current version 111.0.0
compatibility version 1.0.0
Load command 12
      cmd LC_CODE_SIGNATURE
  cmdsize 16
 dataoff  12352
 datasize 5232

So what do those commands do?

  1. The first command (0) sets up a memory segment called __PAGEZERO at address zero, with special permission. This is basically a facility that makes sures that NULL pointers result in an error.
  2. The second command sets up the __TEXT segment with the read only binary code. The command tells the system which part of the binary file will be mapped at which address.
  3. The next command sets up the __DATA segment, this will contain the program’s initial writable memory. As everything needs to be aligned on memory page boundaries, this segment’s representation has to be stored on a different page in the file, i.e. start at offset 4096 even if there was space left before.
  4. The next command sets up the __IMPORT segment which contains the data structure for importing symbols from shared libraries. As this will be a different page it has to be on another page, we are now at offset 8192.
  5. The next command sets up the symbol table, this one does not need any representation in the file (but it can reference names in the __IMPORT section).
  6. This command specifies the dynamic symbol table, again no representation in the file.
  7. This command specifies what dynamic linker is used, here it is/usr/lib/dyld.
  8. This command specifies a unique identifier for the binary.
  9. This command specifies the register state of the initial thread. Most of the registers are set to zero, except the instruction register (eip) which contains the entry point of the program.
  10. This command specifies a library to load /usr/lib/libgcc_s.1.dylib, this is the supporting library for gcc generated code.
  11. This command specifies another library, /usr/lib/libSystem.B.dylib, this is the giant framework that contains most of the Unix libraries of OS X.
  12. The last command specifies the signature for the code

The conclusion here is that the binary file is mostly filled with zeros so that the various segments fit within memory pages. I wrote a small tool that measures how much space is really used, and in the case of true, only 1151 bytes out of 17584 are used, that is 6.55%. I’ll talk about that tool another time…

SakuraSakuraSakura

Sakura in Wollishofen

桜は日本よりにスイスで珍しいですが有ります。

Sakura is not as common in Switzerland as in Japan, but there are some cherry trees.

Le Sakura n’est pas aussi commun en Suisse qu’au Japon, mais il y a quelques cerisiers.

Sakura ist in der Schweiz seltsamer als in Japan, aber es gibt Kirschbäumen.

Python, première impressions…

Python Logo

Or donc, j’ai suivi au boulot un cours de Python. Cela faisait quelques temps que je pro­cras­tinait sur le fait d’apprendre ce langage, et j’ai fini par décider qu’un cours m’aiderait à faire le pas. Ma première impression est que c’est une langage de script sympa, mais qui ne vaut à mon avis pas le foin qui est fait à son sujet – si Python est certainement mieux structuré et plus rapide à utiliser que C/C++ et plus agile que Java, le langage n’est pas si moderne que ça, dans le sens qu’il semble souffrir des problèmes classiques: des opérations pas très uniformes sur les types collections de base (+ existe pour certaines opérations, pas d’autres), le nom des méthodes semble varier de type à type, certaines fonctionalités existent en méthode et en fonction (len pour la longueur des chaînes), et le traitement des chaînes de caractère souffre de l’habituel problème d’encodage (i.e. on n’y a simplement pas pensé au début). Les co-routines ont l’air sympa, mais le support du threading n’a pas l’air exceptionnel. Est-ce que j’utiliserais Python pour programmer? très certainement, cela semble être un bon remplaçant pour le shell-script ou perl. Est-ce que cela remplace mon langage fétiche (Objective-C)? pas pour l’instant…

Vue du RhinView of the Rhine

独逸のホテルでライン川の絵有ってヨーコ・ツノの漫画に似ています。

In Germany, the image of the Rhine in the hotel looks a lot like the Yoko Tsuno comic.

Dans un hôtel en Allemagne, l’image du Rhin ressemble à la bande dessinée Yoko Tsuno

Poster du Rhin dans l'hôtel Römerhof à Bingen

Première case - l'Orgue du Diable - Roger Leloup

C’est toujours amusant de voir les paysage d’un dessinateur de la ligne claire (ou un élève d’iceux) pour de vrai. L’hôtel est le Römerhof à Bingen, ou a eu lieu la Breakpoint.