This WebLog is bilingual, some entries are in English and others are in French. A few of them have a version in either language. Other than that, the French entries are not translations of the English ones or vice versa. Of course, if you understand only English, the English entries ought to be quite understandable without reading the French ones.
Ce WebLog est bilingue, certaines entrées sont en anglais et d'autres sont en français. Quelques-unes ont une version dans chaque langue. À part ça, les entrées en français ne sont pas des traductions de celles en anglais ou vice versa. Bien sûr, si vous ne comprenez que le français, les entrées en français devraient être assez compréhensibles sans lire celles en anglais.
Note that the first entry comes last! Notez que la première entrée vient en dernier !
Index of all entries —
Index de toutes les entrées —
(RSS 1.0) — Recent
comments — Commentaires
récents
What follows are the entries of 2009-06. For latest entries, see here.
Ce qui suit sont les entrées de 2009-06. Pour les dernières entrées, voyez ici.
2009-06-27 (samedi)
Je fais passer cette année encore
des oraux de TIPE (de maths) du concours
des ENS : ce sera un peu plus léger qu'en 2008 ou 2007
(mon co-examinateur a demandé à avoir moins d'heures pour des raisons
personnelles, donc c'est l'autre jury qui prend la charge en plus),
mais c'est quand même fatigant. Par chance, cette année, j'avais
justement un jour de libre entre les oraux (qui ont lieu même le
week-end) en ce dernier samedi de juin, donc j'ai pu aller à
la gay pride marche des fiertés avec mon poussinet (qui,
pour sa part, sortait tout juste d'un torticolis très
torticolesque[#]). Et nous avons
photographié plein de garçons mignons, mais je ne sais pas si les
photos, prises par téléphone, rendront très bien.
Parce que j'ai un nouveau téléphone : non, pas celui dont je parlais il y a quelques jours (un HTC Touch dont mon papa ne voulait plus, et qui s'est avéré franchement insupportable à l'usage) mais un vraiment nouveau, un Android Developer Phone[#2] (je suis donc enregistré comme développeur Android, mazette !). Je dirai plus dans une (voire, des) entrées ultérieures ce que je trouve bien et pas bien avec ce gadget, mais c'est sûr que pour un geek c'est vraiment intéressant comme jouet. Je pense que je vais faire un peu de programmation Java cet été !
[#] À ce sujet, je ne sais pas vraiment pourquoi, mais j'adore cette photo d'un cochon d'Inde avec un torticolis. On trouve vraiment tout, sur le Web.
[#2] Le cours du dollar par rapport à l'euro est assez bas pour qu'il soit vraiment intéressant d'acheter ça : même en comptant les frais de port et de douane, ça revient finalement moins cher qu'un téléphone sensiblement équivalent, mais verrouillé, acheté en France. (L'intérêt principal du developer phone est qu'il est complètement déverrouillé.) Par ailleurs, la livraison a été très rapide (moins de 48h entre la commande en ligne et la réception du paquet, qui venait de l'Illinois, je trouve que c'est assez fort).
2009-06-23 (mardi)
Parfois, quand je reçois un mail de phishing (le dernier en date essayant de se faire passer pour un mail de chez Amazon.com pour me faire cracher un numéro de carte de crédit et d'autres informations invraisemblables[#]), je m'amuse (après avoir vérifié qu'il n'y avait aucun trou de sécurité récemment répertorié dans mon navigateur…) à suivre leur lien et leur fournir des informations fantaisistes mais vaguement plausibles. J'ai un générateur de numéros de carte VISA aléatoires[#2], donc je leur donne ça (avec un code CCV tout aussi aléatoire, et même un code PIN s'ils en demandent un[#3], etc.). Comme adresse, je mets celle de l'Élysée, ou de la DST…
Je suppose que tout ceci n'a absolument aucun effet à part m'amuser, mais ça m'amuse toujours de m'imaginer que ça puisse en avoir.
[#] Précisément, il me
renvoyait
sur http://89.19.5.162/https://www.amazon.com/gpsign-in.htmlie=UTF8&email=&disableCorpSignUp/member-login=587544sdf545454sd547s45d45sd57s54d22525sd474f5g545gdf255522xz552255/gpsign-in.htmlie=UTF8&email=&disableCorpSignUp.html
(si vous voulez voir ce que ça donne, copiez cette adresse dans votre
barre de navigateur — je préfère éviter de faire un lien —
et dépêchez-vous parce que j'imagine que ce genre de petite fraude ne
dure jamais longtemps ; sinon, attendez l'offre suivante qui ne
tardera pas à arriver dans votre boîte aux lettres).
[#2] Aléatoire mais vérifiant quand même la condition de validité la plus basique. Il y a une raison qui fait que ce genre de chose est utile : j'utilise des numéros de carte à usage unique. Malheureusement pour avoir un numéro à usage unique il faut communiquer au site de la banque le montant jusqu'auquel on autorise à prélever dessus ; or beaucoup de sites marchands ne vous donneront le montant final et définitif de votre commande (frais de port inclus) qu'après que vous aurez entré votre numéro de carte. Dans ces cas-là, je commence par entrer un numéro aléatoire pour pouvoir passer à l'étape suivante, et quand j'ai la confirmation finale de commande avec le montant définitif, je génère un numéro à usage unique pour ce montant, et je reviens en arrière pour mettre ce vrai numéro de carte à la place du numéro aléatoire.
[#3] Je suis quand même impressionné qu'il y a des gens qui consentent à donner leur code PIN de carte bancaire si on leur demande dans un formulaire ! J'aurais espéré que le simple fait de demander ça soit tellement énorme comme preuve de fraude que du coup le phisher obtiendrait dix fois moins de réponses à son formulaire. Soit ces phishers sont stupides (ce qui est probable, en fait), soit les gens sont encore plus naïfs que je l'imagine.
2009-06-22 (lundi)
Je voulais vérifier que j'arrivais à transférer des
données depuis mon téléphone à la con
(ce qui, soit dit en passant, marche
assez mal), alors j'ai pris une photo
de la peluche que je n'avais pas
encore montrée sur ce blog : je vous présente Daisy, la vache-bouboule
anti-stress et anti-anxiété (ici sur un lit chez mes parents).
Le jour (vers l'été 2007, mais je ne sais plus exactement quand) où mon poussinet est rentré en me disant qu'il avait acheté une nouvelle peluche, j'ai fait une mine sceptique ; et puis il m'a montré cette bestiole toute souriante et j'ai immédiatement craqué.
Voilà, c'était l'entrée pour perdre le vague semblant de sérieux
qu'il pouvait rester à ma réputation. ![]()
2009-06-21 (dimanche)
World Wide ?Le Web a été modelé sur une idée assez simple : un ordinateur (serveur) a des données, un autre (client) veut en voir une partie, le client envoie une requête au serveur pour demander telle ou telle page, le serveur les envoie, fin de l'histoire. Et au niveau économique, chacun paie pour la connexion de son ordinateur à une sorte d'espace commun qu'est l'Internet : cet espace commun est neutre en ce sens que les données sont acheminées sur le principe du best effort, sans regarder (pour déterminer l'effort ou la bande passante) d'où elles viennent ni à qui elles sont destinées ni ce qu'elles contiennent. C'est un modèle élégant et simple, mais menacé pour toutes sortes de raisons.
Il n'y a pas besoin que je commente sur le filtrage par serveur,
côté client
, où une autorité de censure quelconque (qu'elle ait
prérogative de puissance publique ou qu'elle soit
simplement une
forme d'autocensure des fournisseurs d'accès), située du côté du
client, décide de bloquer l'accès à certains sites. Tout le monde
sait que ce filtrage existe en Chine ou en Iran : il existe bien sûr
aussi en France, même s'il prend une forme beaucoup moins
envahissante, et même si les gens aiment bien se voiler la face en se
disant, oui mais chez nous c'est différent ; mais dans tous les cas,
le filtrage prétend toujours protéger
l'internaute (avec toutes
ces bonnes intentions desquelles le
chemin de l'enfer est pavé).
Mais il existe aussi, de plus en plus, du filtrage par client,
côté serveur
; et cette fois, les bons sentiments ne sont pas
moraux, ils sont plutôt économiques (ou parfois juridiques, mais le
juridique est sans doute plutôt un prétexte pour l'économique). Il ne
concerne pas tellement les pages texte simples (celles qu'on pourrait
retrouver, par exemple, sur la copie
de sauvegarde du Web) mais plutôt les contenus riches et/ou
interactifs dont on est devenu très friands depuis l'abandon des pages
à paillettes des années '90. Pourquoi diable un site Web a
priori public voudrait-il limiter les accès qu'il autorise ? Tout
simplement parce que la bande passante coûte cher : l'idée de la
neutralité de l'Internet est de plus en plus théorique et distante,
maintenant les fournisseurs d'accès ont tendance à dire aux
fournisseurs de contenu, si vous voulez que nos internautes aient
accès à vos contenus, il va falloir nous payer
, ou bien, si les
rapports de force sont inversés (si le fournisseur de contenu est, par
exemple, YouTube, sans l'accès auquel un accès Internet sera bien
moins intéressant), ce sera le contraire, ce sera au fourisseur
d'accès de payer le fournisseur de contenu. Mais dans les deux cas,
on abandonne l'idée du best effort, l'idée que
l'un apporte la requête, l'autre fournit la réponse, et tout le monde
se connecte grâce à cet espace commun et neutre qu'est l'Internet. À
la place, on se demande, notamment, si le client vient d'un pays assez
riche pour que ce soit intéressant de servir la requête.
Il aurait sans doute été préférable que les protocoles de l'Internet eussent été conçus pour que genre de filtrage fût impossible. Malheureusement, une fois que le filtrage par pays a été « découvert », il s'est répandu comme les lapins en Autralie.
Un exemple concret : vous venez d'Europe (ou peut-être seulement de
certains pays d'Europe, je ne sais pas), vous essayez de regarder
l'émission
américaine The
Daily Show ; vous allez donc sur leur site Web, vous
cliquez sur full episodes
, et là vous recevez le
message d'« erreur » suivant : Sorry. Full Episodes
of The Daily Show are not available in your area.
L'euphémisme
insultant not available
signifie on ne veut
pas de vous, espèce de pouilleux
.
L'argument avancé
est que les questions de droits pour une diffusion mondiale sont trop
complexes. Je ne crois qu'à moitié que ce soit effectivement une
question légale, et en tout cas il est certain qu'il y a un problème
économique sous-jacent. Les spectateurs hors des États-Unis
n'intéressent pas du tout les producteurs de cette émission car ils
n'apportent essentiellement pas de bénéfices publicitaires —
pour payer pour l'émission et la bande passante nécessaire pour la
diffuser, justement.
Bon, on peut certainement vivre sans The Daily Show, même s'il y a une certaine ironie à la contradiction entre cette façon de procéder et les opinions politiques de l'émission ! Ce sera un peu plus triste quand YouTube, MySpace, Facebook et Twitter seront interdits aux Indiens parce qu'ils seront trop pauvres et ne consommeront pas assez pour rapporter assez en publicité aux gérants de ces sites. Et ce jour viendra forcément (même s'il n'est pas clair qu'il vienne avant le jour où ces sites précis seront tombés dans l'oubli ; mais si ce n'est pas eux, ce seront leurs successeurs) : si pour l'instant on fait mine d'aider les Iraniens dans leur possible révolution, c'est sans doute surtout parce que des Américains aiment l'idée d'utiliser le même site Web qu'un site qui peut servir à vaincre un régime oppressif, ou quelque chose de ce genre.
Et le jour où Google décidera que (après avoir coupé YouTube) ça ne sert à rien de fournir un moteur de recherche à une longue liste de pays, là, vraiment, ce sera très ennuyeux. Là je suis plus prêt à croire que ça n'arrivera pas (ou en tout cas, pas avant un temps où de toute façon le Web aura complètement changé d'aspect pour des raisons que je ne peux même pas commencer à imaginer), parce que l'économie d'un moteur de recherche est un peu différente de celle d'un fournisseur de vidéos. Mais la possibilité est quand même inquiétante. Une sorte de contrepoids de la délocalisation du travail.
La réponse à cette menace peut prendre plusieurs formes. S'engager en masse à quiter Facebook le jour où le contenu ne sera plus le même pour le monde entier ? Ce serait bien, mais je doute que beaucoup de gens s'y tiennent vraiment, et pour commencer c'est un peu difficile à vérifier (et à faire passer l'information). The Onion Router ? Peu pratique, trop lent…
Il serait temps que des associations mondiales de consommateurs et d'internautes existassent.
2009-06-19 (vendredi)
Ah, un petit jeu de pouvoir comme je les aime. Quatre personnages principaux dans l'histoire : Maḥmūd ʾAḥmadīnežād (le président sortant, et apparemment rentrant aussi), ʿAlī Ḥoseynī Ḫāmenehʾī (le Guide suprême, aka celui-qui-est-au-dessus-du-président), Mīr-Ḥoseynī Mūsavī Ḫāmeneh (le challenger) et, celui qu'il ne faut pas oublier, ʿAlī ʾAkbar Hāšemī Rafsanǧānī[#] (l'ancien président et maintenant éminence grise du régime). Plus un cinquième, l'opinion publique iranienne. Quant à ce que veut celle-ci, je pense qu'on peut tenir pour acquis que, dans des élections libres, elle aurait élu Mūsavī (enfin, des élections libres entre les mêmes candidats, parce que peut-être que dans des élections vraiment libres elle aurait élu quelqu'un de complètement différent). Je ne sais pas si elle a élu Mūsavī : The Guardian le suggère prudemment, mais le Guide suprême a fait facétieusement remarquer aujourd'hui que c'était quand même difficile de frauder onze millions de bulletins (il est possible qu'il ait dit ça sincèrement : soit qu'il ait lui-même été trompé, soit que les chiffres officiels soient moins mensongers que ça car, après tout, l'intimidation marche parfois aussi bien que la fraude pour truquer les élections).
Ce que veulent ʾAḥmadīnežād et Mūsavī est raisonnablement clair, comme il est raisonnablement clair qu'ils ne s'aiment pas. Ce que veulent les deux autres, par contre, est un peu plus subtil (au-delà du fait que tout le monde veut le pouvoir, mais ça c'est juste la nature humaine). Ḫāmenehʾī est le grand chef au-dessus du chef, mais il n'est pas tout-puissant comme son prédécesseur, le fondateur du régime, l'était : il doit donc s'appuyer sur d'autres gens, et apparemment il a trouvé qu'ʾAḥmadīnežād était quelqu'un de bien pour ça. D'un autre côté, Rafsanǧānī, lui, si je comprends bien, il n'aime pas trop ʾAḥmadīnežād ; or Rafsanǧānī, justement, non seulement il est un poids lourd politique (et immensément riche), mais en plus il est président d'un conseil important et surtout d'une assemblée qui ne sert en gros qu'à une chose, c'est à contrôler, et éventuellement révoquer, le Guide suprême (autant dire qu'elle ne sert à rien, mais l'éventualité qu'elle puisse servir doit être une menace pas totalement rassurante pour Ḫāmenehʾī), et cette dernière assemblée n'a jamais eu autant de membres modérés que depuis les dernières élections en 2007. Mais Rafsanǧānī (qui est un stratège incontestable) doit forcément connaître le célèbre mot d'Aaron Nimzowitsch selon lequel une menace est plus forte que son exécution : je ne crois pas une seule seconde qu'il obtienne, ni même qu'il agisse pour obtenir, le départ de l'actuel Guide suprême.
D'un autre côté, il est un peu étonnant que Ḫāmenehʾī soutienne à ce point ʾAḥmadīnežād malgré à la fois cette menace et celle, également peu vraisemblable mais sans doute tout de même désagréable, d'une révolution, mais surtout malgré les avantages qu'il y aurait pu y avoir pour lui à apparaître comme loin au-dessus de la mêlée : car même si c'est l'autre qui devient président, lui sera toujours Guide suprême, et il est peu probable que les choses évoluent sur ce point. Plusieurs possibilités : soit il est plus faible qu'on le croit et il a vivement besoin de garder le président sortant, soit il est plus têtu qu'un bon homme de pouvoir devrait l'être, soit il est vraiment sûr de son jeu. En tout cas, il a fait monter les enchères. La référence à Rafsanǧānī (comme pilier du régime) dans son discours d'aujourd'hui laisse penser (c'est ce que la BBC suggère) qu'ils tricoteront, ou ont tricoté, un petit arrangement entre eux dont Mūsavī et l'opinion publique iranienne (en tout cas, ceux qui soutenaient Mūsavī et ont voté pour lui) seront les perdants ; et il est mlaheureusement difficile de croire qu'ils pourront gagner quelque chose, en fait, mais la suite des événements sera intéressante à observer.
Je note toutes ces choses pour des œuvres littéraires futures éventuelles.
[#] J'en profite pour
indiquer les translitérations (j'espère !) correctes de leurs noms
(selon DIN 31635 parce que même si en général je
suis les normes ISO, en
l'occurrence ISO 233 n'a vraiment pas l'air
terrible pour le persan). Et j'en profite pour râler contre les gens
qui ne le font pas : à l'heure où Unicode est partout, je comprends
qu'on veuille éviter d'écrire les noms en alphabet arabe, mais c'est
un peu ridicule d'écrire Ahmadinejad
et Rafsanjani
, de
sorte qu'on ne voit pas que le ‘j’ n'est pas le même dans
les deux mots (qu'on ne prétende pas que les petits zigouigouis
induisent les lecteurs en erreur : de toute façon, sans zigouigouis,
j'ai remarqué que les Français prononcent Amadinedjad
, alors
bon, Amadinezad
ce ne sera pas plus faux).
2009-06-18 (jeudi)
La fenêtre panoramique, au centre, s'ouvre sur un balcon, derrière lequel on voit se dérouler le paysage : vert sombre les jardins qui entourent la base de la tour, grise la ville dont elle marque le milieu et, au-delà du port, une mer impossiblement turquoise sous un ciel légèrement ocre. Sur la gauche, devant le mur beige, le magicien Hexar, vieillard à la barbe argentée, de bleu drapé, regarde en direction de l'Empereur, sans qu'on sache exactement si c'est le souverain ou le jeune homme qui retient son attention. À l'opposé, un soldat du palais, au garde-à-vous, sur sa tunique amarante le blason sable et or de la maison. Devant l'ouverture, l'Empereur, seul personnage assis, vêtu de pourpre ; il regarde dehors, si bien qu'on ne voit pas son visage, seulement ses mèches noires descendant sur sa nuque blanche. Entre le monarque et le garde, le favori, qui doit avoir vingt ans ; il n'a sur lui qu'un pagne cyan, qui tranche avec sa peau caramel. À moitié cachés par des cheveux châtain clair, ses yeux céladon fixés sur son amant laissent échapper une larme. Transparente.
2009-06-18 (jeudi)
Je ne pus m'empêcher de sourire légèrement en admirant le mouvement d'Invar quand elle me tendit l'aquarelle. C'était dans cette grâce incongrue et presque effrontée avec laquelle elle exécutait les gestes les plus anodins que je croyais la voir se trahir : était-il concevable qu'on ne perçût pas combien la majesté naturelle de toutes ses manières dénonçait le mensonge du masque qu'elle affectait ? À quel point ma connaissance de son secret influençait-elle mon regard ? Je devais me rendre à l'évidence : personne n'avait remarqué ce qui me paraissait criant, et ce n'était pas ainsi que j'avais moi-même appris la vérité. Après tout, l'étrangeté de son nom avait pu m'évoquer un alliage de métaux.
Le tableau portait uniquement l'indication du nom et des dates de l'artiste :
Franklin Carmichael (1890–1945). Aucun titre n'était précisé. La solitude de ce lac, et le feuillage rouge et or qui l'entouraient, me rappelèrent confusément une image d'un rêve que j'avais fait autrefois.
Le lac du vieux castor,commenta Invar, ou peut-être posait-t-elle une question.
Encore un mystère ?
Non, plutôt une réponse, mais dont il s'agit encore de trouver la question.
2009-06-17 (mercredi)
J'ai déjà dû raconter que mon père est dans le genre technogadgetophile impulsif qui achète tout ce qui lui passe sous les yeux (comme en témoignent chez mes parent les tiroirs entiers remplis de webcams). Il y a un certain temps, il s'était acheté un téléphone à écran tactile, que j'avais pris de loin pour un iPhone (mon père m'en avait fait une description confuse) et qui est en fait un HTC Touch. Il a ensuite décidé qu'il n'en voulait plus (notamment à cause de l'autonomie exécrable et de problèmes d'utilisabilité). Comme mon propre téléphone mobile, nettement moins sophistiqué, commençait à devenir franchement inutilisable à force de touches qui se mettaient à marcher de moins en moins (comme la touche flèche haut, ce qui est gênant), je me suis dit qu'un mauvais téléphone à écran tactile vaudrait toujours mieux qu'un téléphone basique dont le clavier est mourant, et j'ai récupéré la bestiole (que mon poussinet a trouvé pour moi comment désimlocker).
Je ne dirai pas que j'y ai perdu au change, ce truc a bien quelques fonctions intéressantes (pouvoir gérer le Wifi, ce n'est pas mal, et puis le navigateur Web, fût-il Pocket IE, est toujours plus pratique que ce que j'avais sur le précédent). Mais question ergonomie, j'ai rarement vu quelque chose d'aussi pourri : outre que le principe même de l'écran tactile me semble assez agaçant (je ne sais pas pourquoi les gens trouvent ça génial), comment peut-on aimer ce Windows Mobile ? Toutes les options de configuration sont cachées dans un labyrinthe d'icônes et d'onglets organisés sans aucune logique, il a fallu à mon poussinet et à moi un temps fou pour deviner où entrer les paramètres de connexion de données GPRS/Edge, ou encore comment choisir ou activer une connexion Wifi. Tout est, évidemment, en français-mal-traduit et il n'y a aucun moyen de changer de langue (la première chose que je fais sur un téléphone, normalement, c'est le mettre en anglais où au moins on a l'impression de ne pas avoir affaire à des bribes de phrases mises côte à côte par quelqu'un dont la langue maternelle était sans doute le klingon).
Mais le pire, ce sont les méthodes d'entrée (c'est-à-dire, comment
taper des SMS, par exemple, ou toute forme de texte) : le
téléphone en propose six, toutes plus pourries les unes que les
autres. L'une fait apparaître en bas de l'écran un clavier imitant la
disposition d'un clavier d'ordinateur : ça me conviendrait à peu près,
si ce n'est que le clavier est azerty, et qu'il n'y a apparemment
aucun moyen d'en changer la langue — outre que je déteste en soi
le layout azerty (sur les ordinateurs, je tape toujours en
qwerty US), je n'ai vraiment pas envie de faire un shift
pour taper le moindre chiffre. Une autre fait apparaître
un clavier touch
(je ne sais pas ce que c'est censé vouloir
dire : c'est eux qui disent ça) qui imite encore la disposition d'un
clavier d'ordinateur mais où, cette fois, les touches sont regroupées
deux par deux — on a le choix entre appuyer deux fois sur la
touche pour choisir la deuxième lettre ou bien utiliser un
dictionnaire du
style T9 ;
cette fois, on peut le mettre en qwerty, mais malheureusement
uniquement avec un dictionnaire anglais (or mes SMS, pour
leur immense majorité, sont écrits en français). Une troisième
méthode d'entrée fait apparaître un pavé semblable aux touches
numériques d'un téléphone mobile non tactile : là aussi, on peut
entrer une lettre en répétant la pression sur une touche ou en
utilisant un dictionnaire T9 — c'est encore ce que
j'ai trouvé le moins mauvais. Les trois autres méthodes d'entrée
m'ont l'air absolument identiques : elles se basent sur la
reconnaissance de caractères tracés au stylet sur l'écran tactile (je
ne sais pas s'il y en a trois pour faire joli, ou parce qu'il y a des
différences subtiles dans la forme des lettres à tracer ou dans la
façon dont on est censé s'en servir). Ce truc est à peu près
inutilisable : on perd son temps à refaire douze fois le dessin de la
lettre avant que le mobile accepte de reconnaître celle qu'on voulait
(et il décide de reconnaître une lettre dès qu'on lâche le stylet,
alors je ne comprends même pas comment on est censé arriver à
dessiner, disons, un ‘D’ : il me reconnaît à chaque fois
les lettre ‘LY’, la première pour la barre verticale et la
seconde pour le ventre du ‘D’).
Mon poussinet, qui a, lui, un HTC Magic (et ça ça a l'air plutôt bien, comme téléphone), se moque de moi.
2009-06-16 (mardi)
Ça fait partie de ces questions dont je me suis souvent dit un
jour, j'essaierai de comprendre ça
: comment, sur les ordinateurs
modernes — dont le moindre PC a maintenant deux ou
quatre cœurs travaillant en parallèle —, l'accès à la
mémoire est-il présenté aux processeurs ? Quelle est la sémantique
des opérations ?
La vision idéale, ce serait de croire que quand un processeur écrit
une donnée en mémoire, cette donnée peut instantanément être lue par
tous les processeurs (lui-même comme les autres) : autrement dit, si
un processeur écrit une valeur v à
l'emplacement x à l'instant t et qu'un autre
processeur, à un instant t′>t, lit la
valeur à cet emplacement x, alors c'est bien v
qui sera lue (sauf si une autre écriture a eu lieu entre temps, bien
sûr) — c'est la vision bien rassurante d'un monde totalement
ordonné par le temps, et on appelle ça le modèle de cohérence
stricte (ou strict
, parce que c'est peut-être le modèle
qui l'est). En réalité, le temps, on ne sait pas vraiment ce que
c'est, l'exécution d'une instruction par un processeur est quelque
chose qui est étalée sur un long intervalle, donc ça n'a pas vraiment
de sens, mais on peut au moins proposer une vision abstraite de la
même chose, le modèle de cohérence séquentielle
(Lamport,
1979) : la mémoire est dite séquentiellement cohérente par rapport
à un système multiprocesseur lorsqu'il existe une façon d'ordonner
totalement les instructions exécutées par tous les processeurs de
façon cohérente avec l'ordre d'exécution (l'ordre de programme) sur
chaque processeur séparément, et de façon que chaque lecture en
mémoire (par n'importe quel processeur) renvoie le résultat de la plus
récente écriture — pour cet ordre total — qui y a été
faite (par n'importe quel processeur, le même ou un autre). Autrement
dit, la cohérence séquentielle signifie qu'on peut s'imaginer que les
instructions exécutées par les différents processeurs s'exécutent dans
un certain ordre global (elles ne sont jamais exactement simultanées,
bien sûr), et tout se passe comme si les accès à la mémoire étaient
faits par rapport à cette sérialisation. Si on n'a jamais réfléchi à
la question, ça peut paraître tellement évident qu'on n'y pense même
pas.
Par exemple, si un processeur écrit successivement 1 dans des
emplacements mémoire x et y qui valaient
initialement 0 (je noterai ça [x]←1; [y]←1) et
qu'un autre processeur, pendant ce temps, lit
l'emplacement y dans un registre r1
(je noterai ça r1←[y]) et y trouve la valeur 1,
alors nécessairement s'il lit ensuite l'emplacement x il
trouvera la valeur 1, n'est-ce pas ? N'est-ce pas ? Cela semble
presque évident : quelqu'un écrit x
puis y dans cet ordre, et qu'un d'autre arrive à
un moment où la valeur de y a été écrite, donc forcément
celle de x a dû l'être aussi. Dans le modèle de cohérence
séquentielle, ce raisonnement est juste : ([x]←1;
[y]←1 | r1←[y]; r2←[x]) — si la barre
verticale | indique une exécution en parallèle par deux
processeurs en partant d'une mémoire initialisée à zéro — ne
peut jamais produire le résultat r1=1, r2=0 (alors que
les cas de figure r1=0, r2=0 et r1=1, r2=1
et r1=0, r2=1 sont possibles selon que les lectures ont
lieu respectivement complètement avant, complètement après, ou quelque
part entre les deux, par rapport aux écritures).
Pourtant, dans un vrai système, les chose ne sont pas forcément
aussi simples : les accès de chaque processeur à la mémoire peuvent
être réordonnés (et même si c'est fait de façon qui, sur chaque
processeur, ne modifie pas sa sémantique locale —
c'est-à-dire, si on ne réordonne deux accès à la même cellule que si
ce sont deux lectures, cela change la façon dont les autres
processeurs verront se dérouler les événements), des données peuvent
être rendues visibles plus ou moins vite à d'autres processeurs à
cause du fait qu'elles sont détenues par une ligne de cache locale,
etc. Certains de ces phénomènes sont rendus invisibles au niveau
sémantique, c'est-à-dire que le programme ne peut pas s'apercevoir
qu'ils se produisent : on espère en tout cas que c'est le cas sur un
système à un seul processeur (on peut réordonner lectures et
écritures, mais doit maintenir l'illusion qu'elles se déroulent
exactement dans l'ordre où elles sont programmées). Mais sur un
système multiprocesseur, on va vraiment pouvoir exhiber des problèmes,
où par problèmes
j'entends des différences de comportement par
rapport au modèle de cohérence séquentielle.
Un exemple de problème concevable est celui que je viens de
donner : [x]←1; [y]←1 | 1←[y]; 0←[x]
(cette fois je ne note pas les registres, car on se moque bien de ce
qu'ils sont, donc j'écris juste 1←[y] pour dire que
le processeur a lu 1 depuis y), autrement dit, qu'un
processeur écrive dans des emplacements mémoire x
et y dans cet ordre, et qu'un autre voie la valeur écrite
dans y alors qu'il ne voit pas encore la valeur écrite
dans x ; ceci peut effectivement se produire sur certaines
familles de processeurs : par exemple, il est réellement possible sur
les PowerPC,
les Alpha et
les Itanium, et il
est autorisé par certains des modèles mémoires
des Sparc
(PSO
et RMO, même si le modèle
obligatoire, TSO, n'admet
pas ce comportement). Sur le modèle
des Intel x86, ([x]←1;
[y]←1 | 1←[y]; 0←[x]) est garanti ne pas se
produire — le modèle Intel est assez strict et relativement
proche de la cohérence séquentielle ; mais même sur ce modèle, des
problèmes différents peuvent se produire : par
exemple, ([x]←1; 0←[y] | [y]←1;
0←[x]) est possible sur n'importe quel système
multiprocesseur moderne (ou
même pas
moderne), et il contredit également la séquentialité (si le
premier processeur voit 0 dans y, avec la cohérence
séquentielle ça implique que l'écriture de 1 dans y par
l'autre processeur n'a pas été faite, donc la lecture de x
par lui doit être aussi postérieure, et elle doit nécessairement
renvoyer 1 et pas 0).
Comme on le voit par mes deux exemples précédents, il y a un
certain nombre de sortes de problèmes
différentes. Dans un
espoir de les classifier, on peut imposer des garanties pour éviter
les problèmes, c'est-à-dire, des règles qui spécifient la façon dont,
essentiellement, les processeurs voient chacun les écritures des
autres : ce sont les modèles de cohérence mémoire, plus ou
moins stricts (i.e., proches de la cohérence séquentielle). Et c'est
là que ça devient compliqué, et un peu confus dans mon esprit : parce
que toutes sortes de modèles de cohérence ont été définis dans la
littérature, avec malheureusement des notations ou des approches très
différentes et, pire, parfois un même terme qui recouvre des notions
différentes selon l'auteur (ce qui donne des affirmations en apparence
contradictoires[#]) — on ne
s'y retrouve pas du tout.
Je peux quand même essayer de décrire ce que j'ai compris (attention, ce qui suit devient ultra-technique). Il s'agit, donc, de modèles qui offrent des garanties intermédiaires entre la cohérence séquentielle (la plus forte) et la cohérence locale (Bataller & Bernabéu, 1997), très faible. Cette cohérence locale demande seulement que chaque processeur voie ses propres écritures se dérouler dans l'ordre où il les a exécutées, les écritures faites par les autres processeurs pouvant intervenir, de son point de vue, dans n'importe quel ordre (a priori variable selon le processeur observateur q et le processeur écrivant p ; notez quand même qu'on n'autorise pas à une écriture par un processeur p d'être vue plusieurs fois par un autre processeur q, donc ce n'est toujours pas la notion la plus faible imaginable) : si on veut, on peut s'imaginer que chaque processeur a une copie locale de la mémoire, sur laquelle il effectue immédiatement ses opérations, et quand il fait une écriture il la signale aux autres processeurs pour qu'elle soit aussi exécutée dans leur copie de la mémoire, mais ce message peut prendre un temps quelconque à arriver à chaque autre processeur, les messages peuvent se croiser, ils peuvent arriver dans des ordres différents pour un processeur et pour un autre, etc. : essentiellement rien n'est garanti (si ce n'est qu'il n'y a aura pas de duplication des messages).
À peine plus forte que la cohérence locale, on a la cohérence
lente
(Hutto
& Ahamad, 1990), qui spécifie que, en outre, pour chaque
cellule mémoire x donnée et chaque processeur p
observé, chaque processeur observateur q voit les écritures
vers x par p se dérouler dans l'ordre dans
lequel elles ont été programmées par p (en revanche, on ne
fait pas d'hypothèse sur l'entrelacement de ces ordres si on fait
varier x ou p, ni sur la différence de ces
entrelacements si on fait varier q) : dans mon modèle par
messages, cela signifie que plusieurs messages d'un même
processeur p à un même processeur q et
concernant une même cellule x ne peuvent pas se croiser.
La cohérence de
cache[#2]
(Goodman,
1989), est encore un chouïa plus forte que la cohérence lente
(et a fortiori que la cohérence locale), et elle exige que pour
chaque cellule mémoire x tous les processeurs voient les
écritures vers x se dérouler dans le même ordre (ordre qui
doit être cohérent avec l'ordre programmé par n'importe quel
processeur p qui écrirait sur cette cellule), mais sans
faire d'hypothèse sur la façon dont ces ordres s'entrelacent entre
cellules différentes. La cohérence PRAM
(Lipton
& Sandberg, 1988) renforce la cohérence lente de façon à peu
près orthogonale à la cohérence de cache en demandant, cette fois, que
chaque processeur q voie les écritures vers l'ensemble de
la mémoire effectués par chaque processeur p dans l'ordre
dans lequel elles ont été programmées par p, mais sans
faire d'hypothèse sur la façon dont ces ordres s'entrelacent entre
des p différents : là on commence à atteindre des
conditions qui ne sont plus vérifiées sur les processeurs réels.
La cohérence de processeur au sens de Goodman
(Goodman, op. cit.) demande en gros qu'on ait à la fois
cohérence de cache et cohérence PRAM, même si on
peut faire des petites variations autour de la question selon qu'on
demande que les ordres sur les écritures sur les cellules
mémoire x et les ordres sur les écritures par les
processeurs p doivent ou non s'entrelacer de la même façon
sur chaque processeur q — il faut admettre que c'est
un peu de l'enculage de mouches. La cohérence causale
(Ahamad &al, 1991, cf. par
exemple Ahamad
&al, 1994), qui renforce la cohérence PRAM
mais toujours orthogonalement à la cohérence de cache, est un petit
peu fastidieuse à définir, mais elle demande quelque chose de très
logique et raisonnable : en gros, si un processeur voit une
écriture w en mémoire, alors il voit aussi toute écriture
qui la précède causalement (i.e., qui pourrait l'avoir
influencée) — c'est-à-dire, essentiellement, toute
écriture w′ ayant fixé le résultat d'une
lecture r ayant précédé l'écriture w en mémoire
(et ainsi de suite par transitivité) ; par exemple, si un processeur
fait [x]←1 (écriture w′) et qu'un
deuxième lit 1←[x] (lecture r) puis
fait [y]←1 (écriture w), alors tout
processeur qui observe 1←[y] doit aussi
observer 1←[x] (il a vu une conséquence
possible w de
l'écriture w′:[x]←1, donc il doit
voir cette écriture elle-même) ; ceci est programmatiquement utile car
cela signifie que si un processeur exécute du code comme if
(x==1) y←1 alors les autres processeurs verront une vision
cohérente du monde. Je crois que je comprends à peu près ces
différents modèles, qui sont d'ailleurs assez bien récapitulés
dans Steinke
& Nutt, 2004 et
dans Kawash,
2000
(disponible
ici).
Là où ça devient nettement plus confus (pour moi), c'est que si les modèles dont je viens d'esquisser l'idée définissent les choses en termes de vues des instructions d'un processeur par les autres processeurs, il y en a aussi, qui les définissent en termes de réordonnancement des instructions (et là, même si ce sont des conditions plus ou moins orthogonales, le rapport précis avec les notions précédentes n'est pas clair du tout) : cf. Adve & Gharachorloo, 1995 pour une présentation assez synthétique et plus ou moins claire selon cet ordre d'idées, beaucoup moins théorique que les autres papiers que j'ai cités. Par exemple, on peut définir un ordre partiel sur les opérations d'un programme, qui est l'ordre du programme normal sauf qu'une lecture mémoire qui suit une écriture mémoire à un emplacement différent n'est pas (a priori) comparable à elle (elle le sera quand même si entre les deux il y a une instruction qui force l'ordre par transitivité) ; autrement dit, cet ordre permet d'anticiper une lecture en la faisant passer avant des écritures vers des cellules mémoires différentes. Lorsqu'on peut mettre un ordre total sur toutes les opérations écritures de façon que, pour chaque processeur, il y ait moyen d'intercaler ses opérations de lecture de façon à donner une histoire correcte et compatible avec l'ordre que je viens de définir, on dit qu'on a la contrainte de cohérence TSO au sens de Kohli (Kohli &al, 1993). En clair, on permet de réordonner les instructions de tous les processeurs mais seulement en faisant passer des lectures avant des écritures vers des emplacements différents, et on doit arriver comme ça à une sérialisation. Cette cohérence TSO-Kohli est plus forte que la cohérence de cache (tout simplement car on ne permet pas de réordonner les instructions touchant à la même cellule mémoire), mais incomparable à la fois avec la cohérence de processeur au sens de Goodman, avec la cohérence causale, et avec la cohérence PRAM. La « vraie » cohérence TSO (Sun Microsystems, 1991), elle, permet aussi de réordonner deux lectures (depuis des cellules différentes) à condition que la première soit « domestique », c'est-à-dire qu'elle produit le résultat d'une écriture par le même processeur : concrètement, cela signifie qu'un processeur peut voir les résultats de ses propres écritures avant qu'elles soient visibles par les autres (les explications sont dans Kawash, op. cit., §4.2.2). La cohérence PSO (Sun Microsystems, op. cit.) est encore plus faible et permet aussi de réordonner deux écritures (vers des cellules différentes) ; et la cohérence RMO (Sun Microsystems, 1994) permet de réordonner deux accès quelconques sauf quand c'est indispensable pour préserver la sémantique locale (deux accès à la même cellule dont une au moins est une écriture). Mais ces différents ordres partiels — ou règles de réordonnancement — permettent aussi, j'ai l'impression, plutôt que de chercher une sérialisation complète qui les respecte (c'est-à-dire, finalement, donner une version faible de la cohérence séquentielle), de définir des versions faibles des autres systèmes de cohérence que j'ai définis plus haut (cohérence PRAM / cohérence de processeur, et cohérence causale surtout, car a priori pour la cohérence de cache ça ne devrait rien changer vu qu'on ne permet pas de réordonner des écritures vers une même cellule mémoire). Cela devrait, par exemple, recouvrir la cohérence de processeur au sens DASH (Lenoski &al, 1990), qui est subtilement différente de celle de Goodman évoquée plus haut, mais Ahamad &al, 1993 n'est pas d'accord avec moi, et de toute façon (voir ci-dessous) il y a l'air d'avoir des contradictions gênantes dans la littérature. Je ne sais pas trop quoi penser.
Et encore ! Tout ce fourbi ne concerne que les modèles de cohérence à mémoire pure, où les seules instructions sont des accès, en lecture ou en écriture, à la mémoire (et en plus, je considère la mémoire comme un tableau de cellules atomiques : je ne parle pas de la question des accès non alignés, par exemple). Dans les modèles hybrides, il y a, en outre, des instructions de synchronisation, qui permettent d'obtenir des contraintes de cohérence additionnelles que le modèle de base (pur) ne promet pas, ce qui est indispensable si ce modèle de base est trop faible. Hélas, ces instructions sont assez variées et il n'est pas évident de comparer les modèles différents. En pratique, cependant, les processeurs utilisent généralement le modèle des barrières mémoire : dans la description des modèles de cohérence en termes de réordonnancement, la barrière mémoire offre la garantie que les instructions qui la précèdent ne seront pas réordonnées avec celles qui la suivent (éventuellement en se limitant aux instructions d'un certain type : le Sparc (en modèle RMO), par exemple, fournit quinze types de barrières mémoire pour offrir toutes les combinaisons de protection de réordonnancement des lectures avant contre lectures après la barrière, lectures avant contre écritures après, écritures avant contre lectures après, et écritures avant contre écritures après ; l'Alpha ne fournit qu'une barrière générale et une barrière en écriture ; l'Itanium fournit des annotations d'acquisition/libération qui indiquent, plutôt, dans quel sens on peut réordonner par rapport à ces instructions annotées (et aussi une barrière mémoire équivalente à une acquisition+libération). Les détails dépendent au plus haut point du modèle hybride utilisé.
Pour essayer de m'éclaircir les idées, au moins pour les modèles purs (i.e., sans aucune synchronisation), j'ai essayé de dresser un tableau de certains problèmes pouvant apparaître, et de quels modèles purs les autorisent : dans tout ce qui suit, toutes les cellules mémoire valent initialement 0, les lettres indiquent évidemment des cellules différentes, la barre indique la séparation entre processeurs différents (et il n'y a pas d'autre processeur qui tourne sur les cellules concernées), et les points-virgules indiquent l'ordre de programme sur un processeur. Un point (•) dans le tableau indique que la trace d'exécution figurant au début de la ligne est possible (i.e., que le « problème » peut survenir) dans le modèle décrit par la colonne.
| Séqn | Ktso | Stso | Spso | Srmo | Prda | Caus | Proc | Pram | Cach | Lent | Locl | Ix86 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
[x]←1 | 1←[x]; 0←[x] |
• | ||||||||||||
[x]←1; [x]←2 | 2←[x]; 1←[x] |
• | • | |||||||||||
[x]←1; [y]←1 | 1←[y]; 0←[x] |
• | • | • | • | • | ||||||||
[x]←1; [y]←2; [x]←2 | [y]←1; 0←[x]; 2←[x]; 1←[y] |
• | • | • | • | • | • | • | • | ??? | ||||
1←[x]; [y]←1 | 1←[y]; [x]←1 |
• | • | • | • | • | • | • | ||||||
[x]←1 | 1←[x]; [y]←1 | 1←[y]; 0←[x] |
• | • | • | • | • | • | • | ||||||
[x]←1; 2←[x] | [x]←2; 1←[x] |
• | • | • | • | |||||||||
[x]←1 | [y]←1 | 1←[x]; 0←[y] | 1←[y]; 0←[x] |
• | • | • | • | • | • | • | • | |||||
[x]←1; [y]←2; 1←[y] | [y]←1; [x]←2; 1←[x] |
• | • | • | • | • | • | • | • | |||||
[x]←1; [z]←1; 0←[y] | [y]←1; [z]←2; 0←[x] |
• | • | • | • | • | • | • | • | • | • | • | ||
[x]←1; 1←[x]; 0←[y] | [y]←1; 1←[y]; 0←[x] |
• | • | • | • | • | • | • | • | • | • | • | ||
[x]←1; 0←[y] | [y]←1; 0←[x] |
• | • | • | • | • | • | • | • | • | • | • | • | |
[x]←1; [y]←2; 1←[x] | 1←[x]; [x]←2; [y]←1; 2←[y] |
• | • | • | • | • | • | • | • | • | • | • | ||
[x]←1; [y]←2; 2←[y]; 1←[x] | 1←[x]; [x]←2; [y]←1; 2←[y] |
• | • | • | • | • | • | • | • | • | •? |
Sigles : Séqn = cohérence séquentielle ; Ktso = cohérence TSO au sens de Kohli ; Stso = cohérence (Sparc) TSO ; Spso = cohérence (Sparc) PSO ; Srmo = cohérence (Sparc) RMO ; Prda = cohérence de processeur au sens DASH (telle que je la comprends dans, par exemple, Adve & Gharachorloo, 1995 : ceci contredit explicitement Ahamad &al, 1990) ; Caus = cohérence causale ; Proc = cohérence de processeur au sens de Goodman ; Pram = cohérence PRAM ; Cach = cohérence de cache ; Lent = cohérence lente ; Locl = cohérence locale ; Ix86 = comportement du Intel x86.
Je n'ai pas mis les cohérences au sens
PowerPC, Alpha et Itanium dans le tableau, car pour
autant que je les comprends elles doivent coïncider avec la
cohérence Sparc RMO (colonne Srmo du
tableau) en l'absence de barrières mémoires : par exemple, dans la
ligne ([x]←1 | [y]←1 | 1←[x]; 0←[y] |
1←[y]; 0←[x]), le comportement est indiqué comme
possible sur Srmo, mais c'est car le modèle permet la permutation des
deux lectures — si on place une barrière lecture-contre-lecture
entre toutes les instructions de lecture (à l'emplacement des
points-virgules, donc), le comportement devient impossible
sur Sparc où les écritures sont atomiquement
visible aux autres processeurs, alors qu'il reste, je crois, possible
sur PowerPC où un processeur peut lire en avance les
écritures d'un autre processeur.
[#] Exemple d'incohérence : Ahamad &al, 1990 explique que la cohérence de processeur, que ce soit au sens de Goodman ou au sens DASH, implique la cohérence PRAM ; Kohli &al, 1993 est d'accord avec ce fait, et ajoute, en outre, que la cohérence TSO implique la cohérence de processeur (et donc la cohérence PRAM), ce que Adve & Gharachorloo, 1995 a également l'air de penser ; or Kawash, 2000 non seulement explique que la cohérence TSO au sens du papier de Kohli ci-dessus n'est pas la vraie cohérence TSO, mais par ailleurs donne un contre-exemple incontestable (computation 11, page 71) vérifiant la cohérence TSO dans les deux sens (la « vraie » et celle de Kohli) mais pas la cohérence PRAM. Contradiction : l'informatique disparaît dans un pouf de logique !
[#2] En anglais on peut
dire coherence
tout seul, parce que le mot que je
traduis par cohérence
en français
est consistency
.
2009-06-13 (samedi)
Cette histoire est complètement rocambolesque : les douanes italiennes ont arrêté deux Japonais qui essayaient de passer la frontière entre l'Italie et la Suisse avec, dans un double fond d'une valise, la somme de 134 milliards de dollars en bons du trésor américains (249 de 500M$ et 10 de 1G$). Après vérification, il semble que ces bons soient faux (la série n'existe même pas), ce dont on pouvait se douter (aucun individu n'est aussi riche, que je sache : la somme représente à peu près autant que les avoirs de la Russie en bons du trésor américains), et ce qui doit décevoir les douanes italiennes (elles auraient récupéré un paquet de milliards en amende pour absence de déclaration). Mais j'ai quand même du mal à comprendre qui voudrait faire des faux d'une telle ampleur, et dans quel but. Un faux monnayeur, normalement, il fait plutôt des billets de 50€ ou 100$, pas de cinq cents millions !, parce que c'est quand même difficile à écouler. Quelqu'un suggérait que c'était peut-être une manœuvre pour déstabiliser le dollar. Ou un scam du type nigérian : mais les spams de ce genre, ils vous font miroiter des sommes de quelques centaines de millions de dollars, pas des centaines de milliards, pour vous en promettre quelque chose comme 1% ou 10%, parce qu'il faut que ça reste un peu crédible — je ne comprends pas comment ça peut être rentable d'essayer de faire croire à des sommes aussi gigantesques. Remarquez, j'avais déjà signalé le cas d'un type qui avait essayé d'obtenir qu'on lui rende la monnaie sur un billet (évidemment faux !) de un million de dollars.
Enfin, j'aurais bien aimé voir la tête des douaniers quand ils ont ouvert le double fond ! Et, à vrai dire, j'aimerais bien voir à quoi ressemble un bon du trésor américain de cinq cents millions de dollars (pas zimbabwéens).
2009-06-11 (jeudi)
On ne peut que se féliciter de cette décision et espérer que contrairement à la mésaventure précédente de cette loi, il n'y ait pas de nouveau soubresaut de sa part (remarquez qu'il reste des choses pas forcément idiotes dans la loi : estampiller correctement les endroits où on peut télécharger des contenus en respectant les lois sur le droit d'auteur, c'est a priori une bonne chose) ; il y avait de toute façon d'autres armes possibles pour faire reconnaître le droit d'accès à Internet comme un droit essentiel (l'amendement 138 du paquet Télécoms, par exemple, ou pourquoi pas la CEDH), mais une décision du Conseil constitutionnel a le mérite de bien remettre les choses en ordre au niveau du droit nationnal.
Par contre, il y a un bout qui me déplaît énormément dans la décision, c'est le ¶13 (les termes mis en relief le sont par moi) :
Considérant que la propriété est au nombre des droits de l'homme consacrés par les articles 2 et 17 de la Déclaration de 1789 ; que les finalités et les conditions d'exercice du droit de propriété ont connu depuis 1789 une évolution caractérisée par une extension de son champ d'application à des domaines nouveaux ; que, parmi ces derniers, figure le droit, pour les titulaires du droit d'auteur et de droits voisins, de jouir de leurs droits de propriété intellectuelle et de les protéger dans le cadre défini par la loi et les engagements internationaux de la France ; que la lutte contre les pratiques de contrefaçon qui se développent sur internet répond à l'objectif de sauvegarde de la propriété intellectuelle ;
Comprendre : les droits relevant de la propriété intellectuelle
sont officiellement assimilés au droit de la propriété, donc protégés
par la Constitution (j'ignore si c'est la première décision qui le
dit, mais c'est dit avec une clarté dangereuse). Autrement dit, la
rhétorique fallacieuse qui consistait à essayer de confondre propriété
intellectuelle et propriété matérielle — rhétorique qui commence
avec l'utilisation même du terme propriété intellectuelle
(oxymore absolument scandaleux qu'on nous force à avaler sans y
réfléchir) — donc l'échange d'informations propriétaires
et du vol ou de la contrefaçon, cette rhétorique a bien porté ses
fruits. La propriété matérielle doit être protégée car celui qui se
l'approprie de façon illégitime prive l'autre de son bien : dans le
cas de cette censée propriété intellectuelle, il s'agit d'un
hypothétique manque à gagner — je veux bien qu'on cherche
parfois à le dédommager, mais je ne veux pas que ce droit acquière le
statut de droit fondamental à valeur de constitutionnalité.
Que les droits d'auteur soient, dans une certaine mesure, protégés,
cela ne me choque pas (par exemple, qu'on prélève des taxes sur les
abonnements Internet pour financer la création culturelle, cela
m'agacerait peut-être, mais cela n'aurait rien d'intrinsèquement
scandaleux ; qu'un artiste ait un certain degré de contrôle sur les
reproductions de ses œuvres, cela peut très bien se défendre).
Mais ce que je répète à chaque fois, c'est que la malhonnêteté
commence le jour où on dit que l'auteur
est propriétaire de ses œuvres au lieu de lui
reconnaître un droit de paternité. Le fait d'avoir
engendré des enfants ne donne pas, sur eux, un droit de propriété : on
trouve normal que les parents aient un certain contrôle sur leurs
enfants mineurs, il me semble aussi normal qu'un artiste en ait sur
ses œuvres pendant une durée limitée ; si on suggérait,
de nos jours, de considérer que les enfants sont la propriété de leurs
parents, cela choquerait. L'idée de propriété intellectuelle
(par opposition à droit d'auteur
et paternité
intellectuelle
) devrait choquer pour la même raison.
(Passez les mèmes, s'il vous plaît !)
Bref, je me réjouis de voir le Conseil constitutionnel assimiler le droit d'accès à Internet à un droit fondamental, mais je suis très chagriné qu'il reconnaisse la même chose pour le droit d'auteur (surtout, de nouveau, pour l'assimiler au droit de propriété, ce qui n'a pas de sens).
2009-06-11 (jeudi)
Maintenant que les résultats des élections du parlement européen sont tombées, on peut les soumettre à plein de number crunching rigolo. Notamment, une chose que j'aimerais arriver à représenter correctement, c'est la corrélation entre les pays et les groupes politiques : à savoir, exprimer pour quels pays et quels groupes il y a plus, ou au contraire moins, de députés européens de ce pays et de ce groupe que ce qu'on attendrait en connaissant seulement le nombre de députés de ce pays et de ce groupe.
C'est un exercice un peu difficile, pour ne pas dire impossible,
pour plusieurs raisons : d'abord, parce que les compositions des
groupes politiques du nouveau parlement ne sont — évidemment
— pas encore connues (et il y a un certain nombre de cas de
réelle incertitude, la plus importante concernant la création ou non
d'un groupe de conservateurs eurosceptiques, le Mouvement pour la
réforme européenne
, qui naîtra à condition que les Conservateurs
britanniques trouvent des alliés dans six autres pays pour les y
aider). Ensuite, parce que les nombres sont petits (il y a cinq
eurodéputés maltais, alors allez donner un sens au fait qu'ils aient
plus ou moins tendance que la moyenne européenne à adhérer à tel ou
tel groupe…). Enfin, bien sûr, les groupes politiques sont
moins au parlement européen qu'ailleurs des reflets fiables des
tendances politiques réelles des eurodéputés (même s'il est faux de
penser, comme certains se l'imaginent, que la discipline de groupe
n'existe pas : on constate qu'il y a réellement une corrélation
statistique forte dans les votes au sein d'un groupe, et que le groupe
prédit beaucoup mieux le profil de vote d'un député que son pays
d'origine). Bref, les chiffres ci-dessous sont totalement dénués de
sens : mais l'absence de sens ne m'a jamais empêché de faire des
calculs, donc je ne vais pas me priver.
Ce que je calcule ci-dessous, ce sont
les corrélations
statistiques entre les informations tel député est de tel
pays
et tel député est de tel groupe politique
(dans des
prévisions raisonnables sur la composition des groupes au nouveau
parlement, essentiellement celles
de predict09.eu).
Quand un nombre (pour telle ligne et telle colonne) est positif, ça
signifie que les députés de ce pays ont plus que la moyenne des
députés européens tendance à adhérer à ce groupe (ou, de façon
équivalente, que les membres de ce groupe ont plus que l'ensemble des
députés européens tendance à venir de ce pays !), tandis que si le
nombre est négatif, cela signifie une corrélation inverse. Une
corrélation parfaite (un groupe constitué uniquement de députés d'un
certain pays, et de tous les députés de ce pays — ce n'est
évidemment pas possible) serait indiquée par le nombre 1, tandis
qu'une anticorrélation parfaite (un groupe ne comportant aucun député
d'un certain pays, mais tous les députés de tous les autres pays
— ce qui serait tout aussi absurde) serait indiquée par le
nobmre −1. Les cases sur fond gris indiquent une absence
d'eurodéputés du groupe en question pour le pays en question (la
corrélation est donc forcément négative !, mais pas pour autant
−1 puisque pour ça il faudrait aussi que le groupe regroupât
tous les députés de tous les autres pays).
| GUE/GVN | SOC | Verts/ALE | ADLE | PPE | MRE | I/D | n.ins. | % | |
|---|---|---|---|---|---|---|---|---|---|
| AT | −0.034 | +0.014 | −0.006 | −0.056 | −0.001 | −0.045 | +0.106 | +0.062 | 2.3% |
| BE | −0.039 | −0.011 | +0.048 | +0.061 | −0.031 | −0.022 | −0.036 | +0.046 | 3.0% |
| BG | −0.034 | −0.007 | −0.042 | +0.086 | −0.001 | −0.045 | −0.032 | +0.062 | 2.3% |
| CY | +0.124 | −0.018 | −0.024 | +0.015 | −0.005 | −0.027 | −0.019 | −0.018 | 0.8% |
| CZ | +0.113 | +0.026 | −0.047 | −0.063 | −0.098 | +0.215 | −0.036 | −0.036 | 3.0% |
| DK | +0.020 | +0.017 | +0.046 | +0.048 | −0.078 | +0.037 | −0.028 | −0.027 | 1.8% |
| EE | −0.020 | −0.018 | −0.024 | +0.109 | −0.036 | −0.027 | −0.019 | +0.059 | 0.8% |
| FI | +0.020 | −0.031 | +0.005 | +0.081 | −0.035 | −0.039 | −0.028 | +0.079 | 1.8% |
| FR | +0.015 | −0.045 | +0.166 | −0.033 | +0.041 | −0.096 | −0.045 | +0.004 | 9.8% |
| DE | +0.065 | −0.020 | +0.115 | +0.007 | +0.055 | −0.115 | −0.081 | −0.080 | 13.5% |
| GR | +0.075 | +0.063 | −0.016 | −0.063 | −0.014 | −0.051 | +0.045 | −0.036 | 3.0% |
| HU | −0.039 | −0.029 | −0.047 | −0.063 | +0.119 | −0.051 | −0.036 | +0.087 | 3.0% |
| IE | +0.023 | −0.001 | −0.035 | +0.088 | −0.006 | −0.038 | −0.027 | −0.026 | 1.6% |
| IT | −0.072 | +0.039 | −0.089 | −0.019 | +0.079 | −0.096 | +0.140 | −0.067 | 9.8% |
| LV | −0.023 | −0.001 | +0.024 | +0.003 | −0.051 | +0.115 | −0.022 | −0.021 | 1.1% |
| LT | −0.028 | −0.001 | −0.035 | +0.021 | −0.006 | +0.042 | −0.027 | +0.029 | 1.6% |
| LU | −0.020 | −0.018 | +0.036 | +0.015 | +0.027 | −0.027 | −0.019 | −0.018 | 0.8% |
| MT | −0.018 | +0.066 | −0.022 | −0.030 | +0.007 | −0.024 | −0.017 | −0.017 | 0.7% |
| NL | +0.030 | −0.058 | +0.039 | +0.073 | −0.062 | −0.055 | +0.037 | +0.116 | 3.4% |
| PL | −0.059 | −0.071 | −0.073 | −0.098 | +0.114 | +0.222 | −0.056 | −0.055 | 6.8% |
| PT | +0.151 | +0.026 | −0.047 | −0.063 | +0.036 | −0.051 | −0.036 | −0.036 | 3.0% |
| RO | −0.048 | +0.039 | −0.058 | +0.024 | +0.030 | −0.063 | −0.045 | +0.057 | 4.5% |
| SK | −0.030 | +0.040 | −0.036 | −0.048 | +0.029 | −0.039 | −0.028 | +0.079 | 1.8% |
| SI | −0.022 | +0.007 | −0.026 | +0.052 | +0.015 | −0.029 | −0.020 | −0.020 | 1.0% |
| ES | −0.034 | +0.103 | −0.030 | −0.047 | +0.058 | −0.079 | −0.056 | −0.055 | 6.8% |
| SE | +0.007 | +0.009 | +0.027 | +0.053 | −0.026 | −0.046 | −0.033 | +0.013 | 2.4% |
| GB | −0.051 | −0.056 | +0.002 | +0.038 | −0.246 | +0.345 | +0.233 | +0.004 | 9.8% |
| % | 4.6% | 25.4% | 6.8% | 11.5% | 35.7% | 7.9% | 4.1% | 3.9% | (100%) |
2009-06-10 (mercredi)
Quelques illustrations pour rendre plus claire mon entrée précédente : dans chacun des diagrammes suivants, on a 12 sièges à répartir à la proportionnelle entre 3 listes ; le triangle représente les différentes proportions de voix possibles entre ces trois listes (les sommets représentent l'unanimité pour une des listes et 0 voix pour les deux autres, les côtés du triangle représentent les répartitions où une liste a 0 voix, et plus généralement les nombre de voix recueillies par les trois listes sont proportionnels aux distances aux trois côtés). Les (centres des) 78 gros points de couleur claire marquent les endroits où on a une représentation proportionnelle exacte (par exemple, le point jaune au milieu de la 3e ligne de points en partant du haut — celle qui a trois points — représente une répartition où une liste a exactement 10/12=5/6 des voix et les deux autres chacune 1/12 ; tandis que le point blanc au centre exact du triangle représente la répartition où chaque liste a exactement 4/12=1/3 des voix). Enfin, les régions de couleur qui divisent le triangle représentent chacun une configuration possible des sièges dans l'assemblée : la région marque donc l'ensemble des répartition de votes pour lesquelles le mode de scrutin considéré attribue cette configuration des sièges à l'assemblée. Par exemple, la région jaunâtre vers le sommet supérieur du triangle (celle qui contient le point jaune précédemment mentionné) représente les répartitions possibles des voix pour lesquelles le mode de scrutin représenté attribuera 10 sièges sur 12 à une liste et 1 siège à chacune des deux autres. Comme a priori on veut que la représentation proportionnelle donne à l'assemblée le nombre de sièges entiers exact évident si les voix sont dans des proportions exactes en 12e, évidemment, chaque région contient un et exactement un des points marqués (les exceptions étant si on ne permet pas à une liste d'obtenir zéro sièges, dans la méthode de Huntington-Hill).
Dans le cas de la méthode du plus fort reste de
Hare-Niemeyer/Hamilton, les régions sont de bêtes hexagones réguliers,
centrés sur les points de représentation exacte, chaque répartition de
votes étant envoyée sur la configuration de l'assemblée correspondant
au point de représentation exacte métriquement le plus proche (ou, si
l'on veut, il s'agit
du diagramme de
Voronoï des points de représentation exacte). C'est pour cette
raison que la méthode est assez naturelle et intuitive. Notons que
les hexagones au bord du triangle sont tronqués (ils n'ont donc pas la
même aire que les autres) : si on tire uniformément au hasard la
répartition des votes, on a moins de chances de tomber sur une
situation où la configuration de l'assemblée ne donnera aucun siège à
une liste que pour les autres configurations.
Le paradoxe de l'Alabama ne se voit pas sur un seul dessin comme ça : pour le voir, il faut en imaginer deux superposés. Je ne vais pas montrer cette superposition, parce que c'est un peu bordélique, mais ça s'imagine très bien. Considérez par exemple l'hexagone cyan situé autour du milieu du côté gauche du triangle, et prenez un point P très proche du sommet de cet hexagone le plus éloigné du côté en question du triangle : cet hexagone représente une configuration de l'assemblée où deux listes ont 6 sièges chacune et la troisième n'en a aucun. La ligne brisée (en dents de scie) formée par les bords des hexagones tronqués par le bord du triangle représente la ligne à partir de laquelle cette troisième liste obtient un siège : notre point P (qui serait typiquement : 47.3% et 47.2% des voix pour deux des listes et 5.5% pour la troisième) est près d'une bosse de cette ligne brisée, c'est-à-dire dans une situation à peu près aussi éloignée que possible du bord du triangle (i.e. : avec le plus grand nombre possible de voix pour la troisième liste) sans qu'elle obtienne pourtant de siège. Maintenant, si au lieu d'avoir 12 sièges à l'assemblée on en a seulement 11, alors le milieu du côté est à cheval entre deux hexagones, donc le point P passe de l'autre côté de la ligne brisée puisque maintenant elle a un creux à cet endroit-là : les deux listes majoritaires obtiennent 5 sièges chacune, et la troisième en obtient 1 (l'idée étant en quelque sorte qu'on n'arrive pas à le partager entre deux listes très proches, donc on le donne à la troisième !).
Petit exercice : en dimension 3, quel genre de solide obtient-on à la place d'hexagones ?
Dans le cas de la méthode du plus fort
reste de Hagenbach-Bischoff/Droop, les régions sont toujours des
hexagones réguliers, mais cette fois ils ne sont plus centrés sur les
points à représentation exacte — ils sont placés de sorte que
les côtés du triangle, au lieu de les couper en deux par le milieu,
passe par deux sommets (donc les hexagones du bord sont aussi près que
possible de l'intérieur, si on veut, sans pour autant qu'un nouvel
hexagone ne menace de rentrer dans la figure : cela rétablit un peu le
rapport de proportions entre les régions, et on se rapproche beaucoup
plus de la méthode de D'Hondt).
Dans le cas de la méthode de plus forte moyenne de
D'Hondt, les hexagones sont d'autant plus déformés qu'on est proche du
bord, et au bord ce sont presque des parallélogrammes : c'est en
quelque sorte ce qui permet d'éviter le paradoxe de l'Alabama, car la
ligne brisée à partir de laquelle une liste obtient 1 siège n'est
presque pas brisée, donc il n'est pas surprenant que la ligne brisée
pour 1 siège de plus au total dans l'assemblée, qui sera un peu plus
en retrait vers le bord du triangle, ne la coupe jamais. En fait, si
cette figure titille vos neurones à 3D, c'est normal : les régions
sont bien des cubes vus en perspective (dont les points de
représentation exacte sont un des sommets, le plus proche de
l'œil), cela résulte d'une des descriptions que j'avais faites
de la méthode de D'Hondt. Il faut aussi remarquer que toutes les
régions ont la même aire : c'est la propriété de non-biais de la
méthode de D'Hondt.
Le fait qu'une liste puisse obtenir, avec la méthode de D'Hondt, plus de sièges que l'arrondi supérieur de sa proportion des sièges se voit bien sur ce diagramme : par exemple, le parallélogramme bleu qui contient le sommet supérieur du triangle (la région des situations où la méthode attribue la totalité des sièges à une des listes) passe largement en-dessous de la ligne horizontale, presque la diagonale de ce parallélogramme, qui relie les deux points à répartition exacte (le rouge et le magenta) juste en-dessous du sommet en question — cette ligne représentant les répartitions où la liste majoritaire obtient 11/12 des voix : donc on peut obtenir moins de 11/12 des voix (presque jusqu'à 10/12, en fait) et tout de même avoir 12 sièges sur 12, si les voix sont à peu près également divisées entre les deux autres listes.
La méthode de Sainte-Laguë n'est pas très différente :
maintenant les points sont au centre des cubes (et ceux qui sont sur
le bord sont tronqués).
La méthode de Huntington-Hill, enfin, diffère
sérieusement au niveau des bords du triangle car, cette fois, elle ne
permet pas qu'une liste n'obtienne aucun siège (si elle a ne serait-ce
que ε voix).
2009-06-09 (mardi)
Si on a N sièges d'une assemblée à répartir de façon proportionnelle entre r listes qui ont obtenu des proportions p1,…,pr des suffrages exprimées dans une élection, il y a plusieurs façons de procéder. (Je parle de sièges à répartir entre des listes dans une élection, mais c'est un problème tout à fait général : on peut vouloir attribuer n'importe quoi de non fractionnable entre n'importe quelle sorte d'entités de façon proportionnelle à n'importe quelles grandeurs pi.) Évidemment, lorsque N a le bon goût d'être un diviseur commun de p1,…,pr (c'est-à-dire que chaque N·pi soit un entier), les choses sont faciles : on attribue N·pi sièges à la liste i, et c'est tout (ensuite, il y a éventuellement la question de savoir quels sièges on attribue ou à qui sur la liste, mais je ne veux pas parler de ça ici : normalement les sièges sont interchangeables et on choisit juste les premiers de la liste). Évidemment, cette coïncidence numérique n'arrive jamais. On peut au moins commencer par attribuer à chaque liste la partie entière (c'est-à-dire, l'arrondi à l'inférieur, noté :) ⌊N·pi⌋, du nombre en question, mais il reste ensuite des sièges à répartir. Comment fait-on pour choisir à qui les donner ? Il y a différentes méthodes pour ça, qui ont des propriétés mathématiques et/ou politiques différentes, et qui sont employées dans divers contextes. (Je ne m'intéresse ici qu'aux situations où on répartit effectivement les sièges de façon proportionnelle : s'il y a, par exemple, une prime à la majorité, alors je parle des sièges en plus de cette prime — j'en avais déjà parlé dans le cas des municipales. De même, je fais abstraction des règles qui imposent une barrière minimale pour être représenté à la proportionnel : s'il y en a on suppose qu'on ne considère que les listes qui ont dépassé cette barrière.)
La méthode la plus naïve est
celle du plus
fort reste (ou plus exactement, une de celles de ce type),
parfois plus précisément appelée méthode de Hare-Niemeyer ou de
Hamilton : une fois attribuées les parties entières
⌊N·pi⌋, on
compare les parties
fractionnaires N·pi−⌊N·pi⌋,
c'est-à-dire en quelque sorte les surplus de voix (les restes
)
par rapport au nombre nécessaire pour avoir le nombre de sièges qu'on
vient d'attribuer, et on attribue un siège supplémentaire (jamais
plus) aux listes ayant le plus fort reste, jusqu'à avoir attribué tous
les sièges restants. Cette méthode peut sembler intuitive, et c'est
celle qu'on invente généralement quand on veut faire une répartition à
la proportionnelle et qu'on n'est pas matheux ; mais elle souffre d'un
grave défaut : elle n'est pas monotone — il se peut très bien
qu'en augmentant le nombre N de sièges
disponibles, à proportions pi
constantes, on diminue le nombre de sièges obtenu par telle
ou telle liste. C'est le
fameux Alabama paradox, découvert en 1880 parce que les
Américains utilisaient cette méthode pour attribuer le nombre de
sièges à la chambre des Représentants entre les états de l'Union
proportionnellement à la population de ces états : on s'est aperçu que
si le nombre de représentants au total passait de 299 à 300, alors
l'Alabama en obtenait un de moins. À cause de ce paradoxe, ou parce
qu'elle a tendance à trop favoriser les petites listes, cette méthode
du plus fort reste est assez peu utilisée en pratique (elle sert
cependant en Russie, par exemple).
Voici un exemple de la méthode du plus fort reste et du paradoxe de l'Alabama : s'il y a 20 sièges à attribuer entre des listes (A à E) ayant obtenu 57.5%, 20.6%, 12.3%, 7.3% et 2.4% respectivement, on aurait envie de leur donner 11.50, 4.12, 2.46, 1.46 et 0.48 sièges, mais ce n'est évidemment pas possible ; on va d'abord leur donner les parties entières de leur proportion des 20 sièges soit 11, 4, 2, 1 et 0 sièges ; cela fait 18 sièges attribués : pour attribuer les 2 derniers, on va calculer les restes (ici 0.50, 0.12, 0.46, 0.46 et 0.48) et donner un siège à chacune des listes ayant obtenu le plus fort reste, donc A et E, ce qui donne finalement 12, 4, 2, 1 et 1 sièges respectivement. Si au lieu d'avoir 20 sièges à répartir on en a 21 (ce qui donne des proportions 12.08, 4.33, 2.58, 1.53 et 0.50), alors les parties entières sont 12, 4, 2, 1 et 0, il reste de nouveau 2 sièges à répartir, mais maintenant les parties fractionnaires sont 0.08, 0.33, 0.58, 0.53 et 0.50 donc ce sont les listes C et D qui obtiennent les sièges de reste, et on aboutit à 12, 4, 3, 2 et 0 sièges de répartition — la liste E a perdu son unique siège dans une augmentation de la taille de l'assemblée. En fait, même avec 22, 23 ou 24 sièges au total, la liste E n'obtient toujours pas un siège : elle en regagne un à partir de 25 sièges au total.
| Liste | Voix | p/ 20 | p/ 21 | p/ 22 | p/ 23 | p/ 24 | p/ 25 |
|---|---|---|---|---|---|---|---|
| A | 57.5% | 12 | 12 | 13 | 13 | 14 | 14 |
| B | 20.6% | 4 | 4 | 4 | 5 | 5 | 5 |
| C | 12.3% | 2 | 3 | 3 | 3 | 3 | 3 |
| D | 07.3% | 1 | 2 | 2 | 2 | 2 | 2 |
| E | 02.4% | 1 | 0 | 0 | 0 | 0 | 1 |
Je devrais encore mentionner une variante, appelée méthode (du quota de) Droop ou de Hagenbach-Bischoff, et qui est toujours une méthode de plus fort reste, mais cette fois au lieu attribuer ⌊N·pi⌋ sièges à chaque liste pour commencer, on en attribue ⌊(N+1)·pi⌋ (ou plus exactement ⌊(N+1−ε)·pi⌋ avec ε une quantité infinitésimale positive), et ensuite on utilise pour restes les parties fractionnaires (N+1)·pi−⌊(N+1)·pi⌋. Autrement dit, on fait comme si on avait un siège de plus à attribuer dans l'assemblée, mais évidemment on ne l'attribue pas (on prend les plus forts restes jusqu'à avoir attribué N sièges). Dans mon exemple si le nombre N de sièges vaut 20 : dans la méthode de Hare-Niemeyer utilisée plus haut, on avait calculé que les N·pi valent 11.50, 4.12, 2.46, 1.46 et 0.58 ce qui donne 12, 4, 2, 1 et 1 sièges, alors que dans celle de Hagenbach-Bischoff les (N+1)·pi valent 12.08, 4.33, 2.58, 1.53 et 0.50 ce qui donne 12, 4, 3, 1 et 0 sièges. Entre 20 et 25 sièges, cette méthode de Hagenbach-Bischoff donne les résultats suivants :
| Liste | Voix | p/ 20 | p/ 21 | p/ 22 | p/ 23 | p/ 24 | p/ 25 |
|---|---|---|---|---|---|---|---|
| A | 57.5% | 12 | 13 | 13 | 14 | 14 | 15 |
| B | 20.6% | 4 | 4 | 5 | 5 | 5 | 5 |
| C | 12.3% | 3 | 3 | 3 | 3 | 3 | 3 |
| D | 07.3% | 1 | 1 | 1 | 1 | 2 | 2 |
| E | 02.4% | 0 | 0 | 0 | 0 | 0 | 0 |
Même si dans cet exemple précis la méthode de Hagenbach-Bischoff élimine le paradoxe de l'Alabama, elle ne l'évite pas en général (d'ailleurs il réapparaît entre N=26 et N=27 sièges sur mon exemple).
Il faut noter que le N+1 utilisé assure, si on l'interprète comme N+1−ε avec ε infinitésimal (c'est parfois précisément ça qu'on appelle le quota de Droop, et parfois on utilise un ε qui vaut une voix exactement, ou quelque chose de ce genre), que la somme des parties entières ⌊(N+1)·pi⌋ avec lesquelles on commence, ne dépassera jamais N. On pourrait très bien décider d'utiliser N+2 (le quota dit d'Imperiali), mais dans ce cas le problème peut se poser que le nombre de sièges donné par les parties entières dépasse N (il faudrait alors, sans doute, retrancher un siège à la liste ayant le plus petit reste, ou prendre une autre mesure ad hoc).
Les méthodes réellement utilisées dans la pratique entrent plutôt dans la catégorie des méthodes de la plus forte moyenne (ou du plus fort quotient). Je dis les méthodes, parce qu'il y en a un certain nombre qui sont courantes et qui rentrent dans cette catégorie, mais ce qu'on appelle normalement en France méthode de la plus forte moyenne est la méthode de D'Hondt. Toutes les méthodes de la plus forte moyenne ont la même procédure opératoire : on attribue les sièges un par un aux listes, et au point où on a attribué ni sièges à la liste i, on compare les quotients pi/f(ni) entre les différentes listes, où f est une certaine fonction spécifiée par la méthode (c'est simplement f(n)=n+1 dans le cas de D'Hondt, et en général elle doit vérifier différentes propriétés comme d'être croissante, asymptotiquement équivalente à n et sans doute plein d'autres choses), et celui qui a le plus fort quotient, ou la plus forte moyenne, emporte le siège en jeu (donc son ni est augmenté de 1) et on recommence pour le siège suivant.
Concrètement, pour la méthode de D'Hondt (qui est, je le répète, celle qu'on applique le plus souvent et qu'on appelle communément en France méthode de la plus forte moyenne sans autre précision), on commence par donner les parties entières ⌊N·pi⌋ à chaque liste (on peut montrer que c'est équivalent de commencer à attribuer les sièges dès le premier, mais c'est plus efficace de donner déjà ce minimum) puis, pour chaque siège restant, on calcule les quotients pi/(ni+1) pour chaque liste, c'est-à-dire qu'on attribue à chaque liste un siège fictif de plus que ce qu'elle a déjà reçu et on calcule le rapport de la proportion des voix (ou du nombre de voix, peu importe évidemment) sur ce nombre augmenté de sièges, et la liste qui a le plus fort quotient reçoit un siège de plus, et on recommence.
Je reprends mon exemple ci-dessus de 20 sièges à attribuer entre des listes (A à E) ayant obtenu 57.5%, 20.6%, 12.3%, 7.3% et 2.4% respectivement, avec la méthode de D'Hondt. On peut commencer comme précédemment à donner 11, 4, 2, 1 et 0 sièges aux cinq listes (il reste donc 2 sièges à distribuer). Les quotients des proportions par ce nombre de sièges augmenté de 1 valent 4.79%, 4.12%, 4.10%, 3.65% et 2.40% : la plus forte moyenne est celle (4.79%) de la liste A, qui récupère un 12e siège et son quotient passe alors à 57.5%/13 = 4.42%. Comme 4.42% est encore le plus fort quotient, la liste A reçoit de nouveau un siège, son 13e, ce qui amène la répartition des 20 sièges à 13, 4, 2, 1 et 0, et le quotient de la liste A passe à 57.5%/14 = 4.11%. On voit alors que si on crée un 21e siège, c'est la liste B qui l'obtiendra, son quotient passant alors de 4.12% à 3.43%. Les calculs peuvent être continués de la sorte à n'importe quel nombre de sièges : ce qui est intéressant avec les méthodes de plus forte moyenne, c'est qu'elle n'a pas besoin de connaître à l'avance le nombre de sièges de l'assemblée, on peut calculer les quotients successifs des pi par les entiers naturels non nuls et les ordonner en décroissant, et attribuer successivement les sièges aux listes réalisant ces quotients, ce qui donne une sorte de flux de sièges (dans mon exemple : AABAACABAADABACAABAABACAD…), dont il suffit de prendre les N premiers pour le N souhaité. En particulier, le paradoxe de l'Alabama est impossible avec cette méthode : chaque ajout d'un siège à une assemblée ajoute un siège à une liste et une seule. On pourrait d'ailleurs imaginer que le même mode de scrutin élise automatiquement les membres d'une assemblée, mais aussi le présidium de cette assemblée (les N′<N premiers sièges listés). Je récapitule par un tableau les valeurs choisies par la méthode de D'Hondt :
| Liste | Voix | p/ 20 | p/ 21 | p/ 22 | p/ 23 | p/ 24 | p/ 25 |
|---|---|---|---|---|---|---|---|
| A | 57.5% | 13 | 13 | 14 | 14 | 15 | 15 |
| B | 20.6% | 4 | 5 | 5 | 5 | 5 | 5 |
| C | 12.3% | 2 | 2 | 2 | 3 | 3 | 3 |
| D | 07.3% | 1 | 1 | 1 | 1 | 1 | 2 |
| E | 02.4% | 0 | 0 | 0 | 0 | 0 | 0 |
Il faut souligner une chose : si je reprends mon exemple pour 20 sièges, la liste A en obtient 13 (sur les 20) alors qu'elle a eu 57.5% des voix. C'est un peu surprenant, puisque 57.5% de 20 fait, je l'ai écrit plus haut, 11.50 : on comprend que la liste obtienne 12 sièges comme arrondi de 11.50, mais il est étonnant qu'elle en obtienne 13 ! En fait, on se rend compte que ce n'est pas si étonnant si on imagine une situation où un petit nombre de listes obtiennent des gros scores et qu'un très grand nombre de listes obtiennent des scores minuscules mais dont le total est finalement assez important : la méthode de D'Hondt ne donnera pas un siège aux toutes petites listes, donc il faudra bien le donner à ce siège aux grosses listes, y compris jusqu'à dépasser l'arrondi supérieur de leur score. Ce phénomène est nécessaire en ce sens que tout système d'élections à la proportionnelle qui vérifie des conditions de monotonicité minimales (quand on augmente le score d'une liste, son nombre de sièges ne peut pas diminuer) et ne souffre pas du paradoxe de l'Alabama (quand on augmente le nombre total de sièges à scores constants, aucune liste ne peut voir son nombre de sièges diminuer) doit dans certaines circonstances donner à une liste un nombre de sièges qui n'est égal ni à la partie entière de sa proportion exacte de l'assemblée ni à l'entier supérieur — il s'agit d'un théorème de Michel Balinski et Hobart Peyton Young.
En particulier, il est incorrect de présenter la méthode de D'Hondt comme on le fait avec la méthode du plus fort reste, c'est-à-dire de prétendre qu'on commence par calculer les parties entières ⌊N·pi⌋ puis qu'on attribue un siège de plus aux listes ayant le plus grand quotient pi/(⌊N·pi⌋+1) jusqu'à compléter l'assemblée. C'est une erreur qu'on trouve par exemple faite ici chez Diner's room et dans mon exemple cela donnerait un résultat faux : on doit bien ajouter deux fois un siège à la liste A car elle a deux fois la plus forte moyenne — on ne peut pas se contenter de calculer une fois pour toutes les moyennes et prendre les plus grandes. (Cela donnerait un nouveau système électoral, dont j'ignore s'il a un nom, mais qui souffre nécessairement d'un problème de monotonicité.)
Une autre façon de présenter la méthode de D'Hondt, qui plaît souvent aux matheux, consiste à dire la chose suivante : on pave ℝ+r en (hyper)cubes de côté 1 dont les sommets sont les sommets sont les points de coordonnées entières, on considère la demi-droite Δ formée des multiples positifs de (p1,…,pr), c'est-à-dire celle qui passe par le point dont les coordonnées sont le nombre de votes obtenus, et parmi les cubes traversés par cette demi-droite Δ on considère celui dont les coordonnées du sommet le plus proche de l'origine ont pour somme N : ces coordonnées donnent la répartition des sièges entre les listes. Encore une autre façon de dire ça est qu'on attribue aux listes des nombres de sièges (n1,…,nr) lorsque la somme de ces nombres est N et qu'il existe un réel t positif tel que chacun des t·pi tombe entre ni et ni+1 (l'avantage de cette présentation est qu'elle permet facilement de tester qu'on a correctement réparti les sièges : il suffit de communiquer le t qui donne les bonnes inégalités). Bien sûr, la suite des côtés de cubes traversés par Δ définit, de façon assez évidente, la suite des sièges ajoutés aux différentes listes successivement quand on augmente N et dont j'ai parlé plus haut (je suppose que c'est une suite sturmienne — je n'ai pas trop réfléchi à ça).
Jusque là, ce que j'ai dit sur la méthode de D'Hondt vaut essentiellement pour les autres méthodes de plus forte moyenne. Mais la méthode de D'Hondt spécifiquement possède plusieurs propriétés mathématiques intéressantes. Il y en a une que je trouve très élégante, c'est celle qui affirme que si on ignore tout de la répartition des proportions de voix pi recueillies par les différentes listes (autrement dit, si (p1,…,pr) est une variable aléatoire uniformément répartie sur le simplexe de dimension r−1), alors on ignore également tout sur la répartition du nombre de sièges ni obtenu par elles (autrement dit, (n1,…,nr) est une variable aléatoire uniformément répartie entre les r-uplets d'entiers naturels de somme N). Autrement dit, en quelque sorte, elle est complètement non biaisée sur la répartition des sièges. (Une démonstration de ce fait se trouve par exemple ici.)
La méthode de D'Hondt est cependant assez sévère avec les petits partis à cause du diviseur f(n)=n+1 qui fait que l'obtention du premier siège exige, s'il n'y a que deux listes, d'avoir au moins 1/N des voix. Si on va à l'autre extrême, on peut mettre f(n)=n (en interprétant pi/0 comme supérieur à tout nombre réel, ce qui attribue d'emblée 1 siège à chaque liste si c'est possible) : cela revient (s'il y a assez de sièges) à attribuer 1 siège à chaque liste et à donner le reste suivant la méthode de D'Hondt. C'est généralement peu souhaitable (à moins de mettre une barrière d'élimination, ou à moins de vouloir forcément représenter tout le monde, on ne veut généralement pas que chaque liste ait forcément un siège !). Entre les deux, on peut trouver différentes fonctions qui réalisent une sorte de compromis.
La méthode de Sainte-Laguë prend f(n)=n+½ pour diviseurs dans le calcul des quotients (c'est-à-dire la moyenne arithmétique entre le nombre n de sièges déjà attribués à la liste et le nombre n+1 de sièges qu'on se propose d'attribuer ; dans la description que j'ai faite plus haut de la méthode de D'Hondt avec un pavage d'hypercubes, ici les hypercubes seraient centrés aux points à coordonnés entières, et rapportés aux coordonnées de leur centre). En reprenant mon exemple maintenant habituel (57.5%, 20.6%, 12.3%, 7.3% et 2.4%), pour N=20 sièges, une fois attribués 11, 4, 2, 1 et 0 sièges aux cinq listes pour commencer, les quotients (des proportions de voix par les nombres de sièges plus un demi) valent 5.00%, 4.58%, 4.92%, 4.87% et 4.80%. La liste A obtient donc le 19e siège (le 12e pour elle), et son quotient tombe à 57.5%/12.5 = 4.60%, donc contrairement à ce qui se passait avec la méthode de D'Hondt, elle n'obtient pas un 13e siège mais celui-ci va à la liste C, et finalement on donne 12, 4, 3, 1 et 0 sièges aux différentes listes. Voici le tableau des résultats pour la méthode de Sainte-Laguë :
| Liste | Voix | p/ 20 | p/ 21 | p/ 22 | p/ 23 | p/ 24 | p/ 25 |
|---|---|---|---|---|---|---|---|
| A | 57.5% | 12 | 12 | 12 | 13 | 13 | 14 |
| B | 20.6% | 4 | 4 | 4 | 4 | 5 | 5 |
| C | 12.3% | 3 | 3 | 3 | 3 | 3 | 3 |
| D | 07.3% | 1 | 2 | 2 | 2 | 2 | 2 |
| E | 02.4% | 0 | 0 | 1 | 1 | 1 | 1 |
La méthode de Sainte-Laguë possède aussi une propriété de non-biais, analogue à celle de D'Hondt, mais pour une distribution différente de la distribution uniforme : il s'agit de la distribution donnée par la densité de la métrique de Fisher ; mais je m'abstiendrai d'en dire plus, parce que je ne comprends pas très bien tout ça.
Enfin, si au lieu de prendre pour diviseur f(n) la moyenne arithmétique n+½ entre n et n+1, on prend la moyenne géométrique √(n(n+1)), on obtient la méthode dite de Huntington-Hill. Elle est utilisée (depuis les années 1880, pour corriger le paradoxe de l'Alabama) par les Américains pour attribuer les sièges à la chambre des Représentants entre les états de l'Union proportionnellement à leur population. Puisque f(n) s'annule pour n=0, elle attribue d'emblée un siège à chaque liste (pour les États-Unis, ça tombe bien : la Constitution ordonne que chaque état ait au moins un représentant). Cette méthode a l'avantage de minimiser les biais de représentation : c'est-à-dire que les pi/ni qu'elle donne ne peuvent pas être améliorés en donnant un siège d'une liste à une autre liste. Dans le cas de mon exemple numérique, le tableau est le suivant :
| Liste | Voix | p/ 20 | p/ 21 | p/ 22 | p/ 23 | p/ 24 | p/ 25 |
|---|---|---|---|---|---|---|---|
| A | 57.5% | 11 | 12 | 12 | 13 | 13 | 14 |
| B | 20.6% | 4 | 4 | 4 | 4 | 5 | 5 |
| C | 12.3% | 2 | 2 | 3 | 3 | 3 | 3 |
| D | 07.3% | 2 | 2 | 2 | 2 | 2 | 2 |
| E | 02.4% | 1 | 1 | 1 | 1 | 1 | 1 |
2009-06-07 (dimanche)
Je me suis fait débaucher pour servir de scrutateur dans mon bureau de vote, ce qui ne m'a évidemment rien appris à part confirmer que je vis dans un quartier écolo-bobo-bio (Cohn-Bendit : 40%) ; par contre, je suis très amusé de l'idée que les gens se font de la sécurité des élections. Le principe général de la sécurité des élections, normalement, c'est qu'on a une pyramide de sommations avec, à la base, les bulletins de vote individuels et, au sommet, les totaux de chaque liste pour la région électorale : on totalise les bulletins par centaine, puis les centaines par table de scrutateurs, puis les tables par bureau de vote, puis les bureaux de vote par commune, puis les communes sur la région (peut-être en passant par le niveau départemental), et le Conseil constitutionnel est censé superviser tout ça. Évidemment, la sécurité ne marche que si, à chaque niveau de sommation, il y a des témoins pour vérifier que le total effectué est bien égal à celui apporté par les niveaux inférieurs : que les bulletins s'additionnent bien par centaine, que les centaines donnent les bons résultats par table, que les chiffres du bureau sont bien le total de ceux de chaque table, etc. Une chaîne étant aussi forte que son plus faible maillon, il ne sert à rien d'avoir une sécurité paranoïaque sur tel niveau si elle n'est pas assurée tout du long. Or là je constate que les totaux de chaque table sont vérifiés scrupuleusement mais que, quand il s'agit de les additionner pour donner les résultats du bureau, il ne reste essentiellement que deux assesseurs (les autres sont en train de ranger), dont l'un fait les sommes de tête pendant que l'autre, qui a pourtant sorti une calculatrice, ne s'en sert que pour les chiffres que sur lesquels le premier a au mal à faire le calcul (et personne ne regarde ce qu'elle tape sur la calculatrice) — et on ne revérifie que le total général. Ce serait très facile d'ajouter dix voix à une liste et de les retrancher à une autre, et ce ne serait même pas risqué puisqu'on pourrait prétendre à une erreur de retenue. De même, est-ce que quelqu'un parmi les deux témoins qui ont noté les résultats totalisés du bureau va vraiment vérifier que ce sont bien les mêmes chiffres qui seront inscrits au procès-verbal et comptés dans les totaux pour la commune ?
Je ne dis pas qu'il y a de la fraude (je pense qu'elle est infinitésimale), mais je dis que c'est idiot de prévoir un protocole qui surveille énormément l'établissement de certains totaux si on ne surveille pas exactement autant les niveaux supérieurs. Les gens ont cette conception complètement erronée de la sécurité où, parce qu'on a mis le paquet quelque part, ils s'imaginent que ça garantit toute la ligne. Faire signer une feuille par quatre personnes n'a aucun intérêt et n'ajoute rien à la sécurité si on n'a pas au moins une politique absolue que toute rature doit être paraphée et que les nombres doivent être précédés d'un tiret ! (Et, d'ailleurs, idem si on ne prend pas leurs coordonnées pour pouvoir demander leur témoignage en cas de doute.) Je me demande aussi pourquoi on fait tout un foin autour des bulletins nuls si on ne prend pas un soin égal pour tous les autres bulletins.
Dans le même genre, j'ai souvent observé que les protocoles de sécurité dans les salles d'examens et de concours font qu'on vérifie que les candidats qui composent et rendent une feuille sont bien ceux qui sont inscrits, et que chaque candidat rend bien une feuille, mais comme elle est déjà anonymisée quand il la rend (ou bien, si elle ne l'est pas, parce qu'on ne vérifie pas ce qu'il a écrit dans le coin), il serait tout à fait possible pour deux candidats de la même série de rendre chacun une feuille au nom de l'autre (quelqu'un pourrait se faire payer pour s'inscrire à un concours dont il n'a que faire dans une matière où il est très fort et permettre, de cette façon, à un autre candidat d'avoir un bon rang). Ah, et il y aurait beaucoup à dire sur la sécurité des documents d'identité, qui est à mon avis beaucoup plus élevée que la sécurité avec laquelle on vérifie l'identité des gens qui font établir ces documents. (Mais le plus comique en matière de prétention de sécurité, c'est tout ce qui concerne la lutte contre le terrorisme notamment dans le transport aérien — le blog de Bruce Schneier vous en dira plus — mais à ce niveau, il s'agit uniquement d'une mascarade pour laisser croire aux gens qu'on fait quelque chose.)
Bref, je pense que ce serait bien si les gens qui établissent ces protocoles de sécurité « dans la vraie vie » prenaient quelques cours de sécurité informatique.
2009-06-05 (vendredi)
C'est devenu tellement habituel pour moi de me plaindre que les ordinateurs ne marchent pas que je devrais plutôt signaler les fois où quelque chose a — inexplicablement — marché. Aujourd'hui, il y en a eu deux.
La première, c'est le Wifi. C'est un peu malhonnête de dire que ça a marché pour dire que je n'ai passé que toute la journée à le faire marcher, mais, tout de même, ça a marché, et s'agissant du Wifi c'est quelque chose de vraiment exceptionnel.
Pour être plus précis, la carte Wifi de mon ordinateur (basée sur
un chipset Atheros AR2414) est potentiellement gérée par deux pilotes
différents sous Linux (deux pilotes dont,
évidemment, on comprend mal les
rapports de prime abord, surtout que ce sont les mêmes personnes
qui s'occupent des deux) : l'un, ancien, compliqué et plus trop
maintenu, s'appelle Madwifi
(et qui contient un blob binaire, c'est-à-dire qu'on n'a pas le source
de la totalité du pilote), et l'autre, censé être plus petit, plus
propre et complètement ouvert, basé sur une réécriture à peu près
complète des couches Wifi de Linux,
s'appelle ath5k.
Jusqu'à récemment, j'utilisais Madwifi (le vieux pilote, donc) : pour
des raisons mystérieuses et qui le resteront, Madwifi s'est mis a
marcher de moins en moins bien au fur et à mesure que le temps passait
(de temps en temps, le réseau cessait complètement de répondre), au
point que c'en était devenu vraiment insupportable. Donc j'avais bien
envie de passer à ath5k (le nouveau pilote). Malheureusement, ma
carte Wifi me sert de point d'accès, pas juste de station, et
le mode point d'accès (ou maître
) est ce que tous les pilotes
semblent implémenter en dernier (voire, jamais) : et ath5k
n'implémente officiellement pas encore ce mode point d'accès que
j'attends avec impatience à chaque nouvelle version du noyau (il sera
officiel dans les noyaux 2.6.31, donc dans environ quatre mois). Ou
alors, il faut chercher la toute toute dernière version de
l'arbre
de développement des pilotes Wifi : c'est ce que j'ai fini par
faire, pressé par mon poussinet qui voulait pouvoir utiliser un Wifi
correct, et donc je me retrouve avec un noyau
2.6.30-rc8~wireless-testing et l'inquiétude qu'il me claque entre les
doigts en détruisant mes systèmes de fichiers (et de fait, il me
crache des messages d'erreurs très inquiétants du style WARNING:
at fs/fs-writeback.c:292
__writeback_single_inode+0x4ab/0x4c0(), que je vais prier pour
pouvoir ignorer parce que ça a l'air de vouloir dire que mes fichiers
vont exploser dans un temps très bref).
Évidemment, juste comme ça, ça n'a pas marché. Le poussinet arrivait à se connecter au Wifi géré par le nouveau pilote ath5k, mais mon Eee PC, нет, il n'arrivait pas à s'associer. J'ai un autre copain chez qui j'ai le même problème : mon Eee PC n'arrive pas à s'associer au Wifi de sa *box, alors que lui n'a pas de problème et que le même Eee arrive à utiliser plein d'autres réseaux. Ça m'a sérieusement énervé, alors j'ai décidé que je comprendrais ce mystère coûte que coûte : j'ai fait afficher les trames d'association et j'ai essayé de les interpréter même sans connaître les détails des protocoles IEEE 802.11b/g :
00000000 00 00 30 01 00 1b 11 14 d5 0f 00 22 43 00 6c 54 |..0........"C.lT| 00000010 00 1b 11 14 d5 0f 80 1f 11 04 03 00 00 0a 44 61 |..............Da| 00000020 76 69 64 6f 75 6e 65 74 01 08 82 84 8b 96 0c 12 |vidounet........| 00000030 18 24 32 04 30 48 60 6c dd 07 00 0c 43 06 00 00 |.$2.0H`l....C...| 00000040 00 01 00 00 0f ac 02 01 00 00 0f ac 04 01 00 00 |................| 00000050 0f ac 02 00 00 |.....| 00000055
(Oui, Davidounet c'est le SSID de mon
Wifi.) Il manque les octets 30 14 (annonçant 0x14=20
octets de RSN IE) immédiatement avant
l'octet 0x41 ! L'explication du problème était donc que
le Eee envoyait des trames d'association mal formées et que,
contrairement à Madwifi et certaines bornes d'accès qui, plus
tolérants, devaient se contenter d'ignorer ce qu'ils ne comprennaient
pas, le nouveau driver rejetait la trame complètement et il devenait
impossible de s'associer.
Le Wifi, c'est quelque chose de vraiment aléatoire, qui fonctionne uniquement quand les mânes de Maxwell sont de bonne humeur : je déteste ce truc, mais il faut admettre que, quand ça marche, c'est bien pratique. En l'occurrence, le driver incriminé sur le Eee PC, un driver écrit par le fabricant (Ralink), était visiblement porté à la va-vite depuis Windows, et il n'est sans doute pas surprenant qu'il fût buggué. J'ai fini par me rendre compte que quelqu'un avait déjà corrigé le problème et j'ai fini par réussir à associer mon Eee PC à mon Wifi qui, depuis, s'obstine à fonctionner correctement.
La
deuxième chose qui a marché, c'est un stick récepteur TNT
qu'un ami m'a passé. Là, c'est vraiment incompréhensible : ce genre
de choses n'aurait pas dû être si simple à utiliser. Il doit y avoir
anguille sous roche.
Entries by month / Entrées par mois:
david+www
madore
org)