a3nm's blog

La consultation République Numérique : mes réponses et mes scripts

Une consultation République numérique sur le projet de loi pour une République numérique a été lancée et se déroulera jusqu'au 18 octobre.

Je partage à cet égard les mêmes réserves que Stéphane Bortzmeyer ou La Quadrature Du Net : cette consultation arrive bien tard, et difficile de croire que l'expression des citoyens sera véritablement prise en compte. Ceci dit, je me dis qu'il vaut mieux donner son avis quand on le peut, plutôt que de se plaindre après coup de ne pas avoir été écouté...

J'encourage donc ceux qui le peuvent à voter. Si vous pensez que vous n'avez pas le temps, mais que vous avez quelques compétences techniques, j'ai fait un script Python pour vous permettre de voter rapidement de la même façon que moi, allez directement à la section correspondante.

Votes et soutiens

Vous pouvez voir mes votes sur le site de la consultation. Dans de nombreux cas, j'ai dû me résigner à voter pour des amendements dont la rédaction précise n'est pas satisfaisante, ou le champ d'application pas assez large, ou le rapport avec le texte assez peu clairement établi, faute de mieux et dans l'espoir de susciter un débat intéressant... J'ai aussi souvent lu en diagonale, car il y a beaucoup de matériel et je n'ai pas une quantité illimitée de temps...

C'est assez décourageant (mais pas si surprenant) de voir que la plupart des propositions sont de bien piètre qualité. En fait, quelque chose qui m'a davantage surpris, c'est que les propositions initiales du gouvernement (clairement identifiées), ou celles du Conseil national du numérique, sont parfois assez judicieuses, même si ça se limite trop souvent à de bonnes intentions, sans sanctions, sans garanties, sans recours, et sans conséquences réelles. J'ai tout de même voté pour certaines d'entre elles...

Une bonne façon de trouver des propositions que l'on a envie de soutenir, c'est de regarder celles d'associations ou d'individus qui font du bon travail. En particulier, j'ai voté pour toutes les propositions de La Quadrature Du Net, de l'April, de Wikimédia France (pour l'importante question de la liberté de panorama). Pour les questions de libre accès des travaux de recherche (voir ici pour une excellente introduction documentée sur ce problème), j'ai soutenu le CNRS, INRIA, le Consortium Couperin, Roberto di Cosmo et SavoirsCom1, entre autres.

Autres idées

Il y a trois points que j'aurais bien ajoutés à la consultation, mais je ne le fais pas faute de temps, et parce que je n'ai guère espoir que ce soit utile :

  • Personne ne s'est spécifiquement plaint de la pénibilité, dans les textes législatifs, des modifications qui sont décrites en langue naturelle, du genre « à l'alinéa (ii.) de l'article L-42, au point (b.), le mot "est" est remplacé par "n'est pas" ». En termes d'open data, ce serait bien de faire quelque chose pour que le jeu de données de Légifrance et autres sources soit plus utile, en demandant que des diffs exploitables par un ordinateur soient fournis en plus de (ou à la place de) la version actuelle (qui est illisible pour les ordinateurs, plus encore que pour les humains).

  • Une proposition de l'April indique que le code source des logiciels publics sont susceptibles de faire l'objet d'une communication aux citoyens. Ceci fait suite à un avis de la CADA commenté par exemple par Next INpact. Je suis tout à fait d'accord, mais j'irais même plus loin. En effet, l'avis en question indique que des "droits de propriété intellectuelle détenus par des tiers à l’administration" seraient susceptibles, s'il y en avait, de limiter le droit du demandeur (Monsieur X) à réutiliser le code concerné. Je pense qu'en pratique cette restriction pourrait être très problématique, vu que les administrations ont tendance à faire appel à des prestataires pour développer leurs logiciels. À mon avis, il devrait être entendu que tout prestataire développant ou hébergeant du logiciel pour l'administration doit être prêt à le fournir, sous licence libre, sur demande des citoyens, sans pouvoir s'opposer à sa réutilisation ultérieure.

  • Ce serait utile d'avoir un portail pour demander l'ouverture d'un jeu de données dont on estime qu'une administration (sans devoir chercher laquelle) doit bien le détenir. En particulier, j'avais un jour cherché à trouver la base de données des valeurs locatives cadastrales utilisées pour le calcul de la taxe d'habitation, sans rien trouver, et j'aurais bien aimé pouvoir demander quelque part ce jeu de données (apparemment fixe depuis 40 ans).

Scripts

Je partage l'insatisfaction de Bortzmeyer sur la plateforme elle-même, et l'absence de moyen de remonter des problèmes avec celles-ci. En particulier, le diff mot par mot est parfois fautif, souvent illisible. Cependant, à mon avis, le plus grave problème est de ne pas pouvoir simplement déléguer son vote à d'autres institutions. Suivant le principe de la démocratie liquide, je voudrais pouvoir confier ma voix à ceux en qui j'ai confiance, sans avoir besoin de me documenter sur le détail de chacune de leurs propositions. Cependant, la plateforme ne propose rien de mieux que d'aller voir leurs propositions et voter pour elles une par une. Cette délégation manuelle ne sera pas mise à jour si le mandataire change ses votes, et, même si on oublie cet inconvénient, elle est évidemment beaucoup trop pénible à faire en pratique.

C'est pour cette raison que j'ai écrit un jeu de scripts pour pouvoir facilement voter en soutien à un autre utilisateur, de façon automatique. L'objectif n'est pas de faire du bourrage d'urnes, simplement de permettre à qui le souhaite de voter de la même manière que quelqu'un en qui il a confiance, ou de voter pour toutes les propositions d'autres utilisateurs, sans devoir le faire vote par vote.

S'il vous plaît, utilisez ces scripts de façon raisonnable, et en particulier ne créez pas d'utilisateurs factices. Je n'ai écrit ce code que parce que la plateforme de consultation ne permet pas facilement de soutenir toutes les propositions d'un utilisateur, ou de reprendre à son compte tous les votes d'un autre utilisateur. J'estime que ces fonctionnalités devraient en principe être proposées par le site lui-même. À ma connaissance, l'utilisation de tels scripts à de telles fins n'est pas contraire à la charte. Cependant, je n'accepte aucune responsabilité pour ce que vous en ferez.

TL;DR: comment voter

Commencez par créer un créer un compte (n'utilisez pas Facebook ou Google+, c'est mal, et ça ne fonctionnera pas). Renseignez les informations, recevez le mail de vérification, et validez votre compte. Mettons que votre email soit toto@example.com et votre mot de passe "4242".

Ensuite, installez mes scripts (j'indique les prérequis pour Debian, mais vous pouvez adapter pour votre distribution) :

sudo apt-get install git python3-lxml python3-bs4 python3-requests
git clone https://a3nm.net/git/republique
cd republique

Pour voter pour les propositions des associations que je soutiens en utilisant le compte que vous avez créé :

./get_propositions.py april laquadraturedunet wikimediafrance inria \
    cnrsdistrenaudfabre consortiumcouperin robertodicosmo savoircom1 \
    > propositions
./vote.py toto@example.com "4242" < propositions

C'est normal que ces commandes prennent quelques minutes, vu qu'elles doivent faire deux requêtes par proposition. En cas d'échec, assurez-vous bien d'avoir créé et validé le compte au préalable.

Pour reprendre à votre compte tous les votes que j'ai faits :

./get_votes.py antoineamarilli > votes
./vote.py toto@example.com "4242" < votes

Si vous vous appelez Jean Dupond et que vous n'avez pas d'homonymes, vous pouvez vérifier que vos votes sont bien en ligne à l'URL https://www.republique-numerique.fr/profile/user/jeandupond.

N'hésitez pas à utiliser mes scripts puis à réajuster vos votes, car vous pouvez toujours les modifier ou les effacer individuellement sur le site de la consultation. Si vous votez plusieurs fois (avec l'outil ou en ligne) sur un sujet, seul le vote le plus récent est pris en compte. En particulier, si plusieurs de vos sources de propositions ou de votes sont en désaccord, c'est la dernière mentionnée qui prévaut.

J'ai corrigé un bug qui faisait que des votes favorables à un argument portant sur une proposition ou une modification pouvaient être interprétés à tort comme un vote sur la proposition ou modification elle-même. Si vous avez utilisé la vieille version de get_votes.py, vous avez peut-être voté à tort pour certaines propositions ou modifications. Si vous avez utilisé les commandes que je suggérais, vérifiez en particulier votre vote sur l'article 9, la modification du CNRS, et la commercialisation des données publiques.

Pendant la consultation, je produisais des tables (moches et faites très rapidement) pour pouvoir suivre de façon commode les propositions, modifications et arguments ayant reçu le plus de votes favorables et le plus de votes au total. Le code qui les génère est dans le dépôt git.

An activist's riddle

English version

This riddle is sometimes used by activists:

A father and his son have a car accident. The father dies, and the son survives but is badly hurt. He is brought to the emergency room, but the surgeon says: "It's too hard for me to operate on this boy, he is my son."

How is this possible?

If you don't know the answer, before I give it away, I encourage you to look at the following version instead:

A father and his daughter are hit by a reckless driver in an empty street. The father is killed instantly, the daughter survives but is badly hurt. A few minutes later, someone passes by, notices the girl and shouts: "Help! It's my daughter!"

How is this possible?

If you still haven't found the answer, I invite you to think it over, and continue when you got it or gave up. See this footnote for the answer: 1.

When they work as they should, I think such riddles are a great way to make people notice that their view of the world is influenced by gender stereotypes. That said, to be fair, the original riddle relies on at least two additional cues:

  • A contextual bias, namely, a priming effect: all characters but the last one are male, which makes it harder to think about a woman. This can be eliminated by adding female characters, for instance replacing the son by a daughter3 as I did. This "priming" effect is not specific to gender, and it is also used, e.g., in the following riddle (source) answer7:

    A black man dressed all in black, wearing a black mask, stands at a crossroads in a totally black-painted town. All of the streetlights in town are broken. There is no moon. A black-painted car without headlights drives straight toward him, but turns in time and doesn't hit him.

    How did the driver know to swerve?

  • A sociological bias: surgeons are mostly males (around 75% in France according to Insee), which makes it harder to think of a woman. I eliminated this by using the neutral term "someone" to refer to the person instead. (This is much harder to do in French.)
  • (The French version of the riddle uses the fact that the word "surgeon", in French, reflects the gender of the person involved, in a misleading way.)

I obviously can't tell, as I know the answer already, but I hope that my modified riddle above, while it is probably easier, is still non-trivial, even though it does not rely on these two effects: there is no contextual or social reason to think that the passerby is a man.

By contrast, it's hard to produce a convincing "reverse" riddle, even when using all available effects. Here's an attempt:

An impulsive young lady has a particularly violent argument with her mother, and jumps out of a window. The house cleaner in a nearby building notices the scene and shouts: "Help, help, it's my daughter!" How is this possible?

If, like me, you find my modified "passerby" riddle harder than the reverse riddle above, then your gender prejudices are making it easier for you to imagine people as men rather than women.

Of course, to reach definite conclusions about this, one would need to undertake a statistical study where different groups of people (of both genders) would be told the different riddles, and where the average time needed to answer them would be compared. This would be interesting to do, but way more complicated than just coming up with the variants.

Version française

On m'a raconté la devinette suivante :

Un père et son fils ont un accident de voiture. Le père meurt, le fils est entre la vie et la mort. On le conduit aux urgences et le chirurgien qui le voit dit : "C'est trop difficile pour moi de l'opérer car c'est mon fils."

Comment est-ce possible ?

Ma dissection de cette devinette va rendre la solution évidente, donc si vous ne la connaissez pas, essayez peut-être d'abord cette variante plus facile de mon invention, que je vais comparer à l'originale :

Dans un pays lointain, un père et sa fille tombent dans une rivière. Le père se noie immédiatement, mais sa fille est emportée par le courant. La rivière passe dans un village en aval, et l'autochtone qui voit arriver l'enfant s'exclame : "Au secours, c'est ma fille !".

Comment est-ce possible ?

Si vous n'avez toujours pas trouvé, je vous invite à interrompre votre lecture et à la reprendre quand vous aurez trouvé la réponse ou donné votre langue au chat. Pour la réponse, voir la note de bas de page: 2.

Je trouve que des devinettes de ce genre, quand elles fonctionnent, sont une façon particulièrement frappante d'interpeller ceux qui ne se sentent pas concernées par les questions de genre, en leur permettant de découvrir qu'ils ont tendance, spontanément, à se représenter des personnages comme des hommes plutôt que des femmes. Cependant, la devinette originale repose sur trois astuces pour nous y encourager :

  • Un biais contextuel, à savoir, un effet psychologique d'amorçage : si tous les personnages sont masculins, il est plus difficile de penser spontanément à un personnage féminin. Pour éviter ça, j'ai remplacé le fils par une fille4. Ce phénomène d'amorçage n'est pas spécifique au genre, et il est aussi utilisé, par exemple, dans la devinette suivante réponse8 :

    Un homme noir vêtu de noir traverse une route noire dans une rue sans le moindre réverbère où tous les bâtiments sont noirs. Une voiture noire arrive tous feux éteints, mais freine soudainement pour laisser passer le piéton.

    Comment a-t-elle fait ?

  • Un biais lexical : l'emploi de la forme non-marquée "le chirurgien" pour désigner une femme, et la confusion possible avec le masculin5. On peut donc remplacer par un nom de fonction épicène (et qui doit en plus commencer par une voyelle pour permettre l'élision), par exemple "urgentiste", ou "autochtone" pour la raison que je vais expliquer.
  • Un biais social, à savoir, l'utilisation d'un nom de métier majoritairement exercé par des hommes : seulement un chirurgien sur quatre est une femme en France (source : Insee). On pourrait remplacer par un nom de fonction épicène et statistiquement paritaire aujourd'hui, par exemple "énarque", mais un tel choix illustre surtout, je trouve, que nos statistiques mentales sur les énarques ne sont pas à jour. D'où mon choix d'"autochtone", qui ne devrait pas avoir la moindre implication statistique.

Ma version modifiée de la devinette plus haut élimine donc le recours à ces trois astuces. Difficile pour moi d'en juger, vu que je connais la réponse, mais j'espère que cette version, si elle est plus facile, n'est pas triviale non plus. Pourtant, contrairement à la devinette originale, il n'y a plus aucune raison, ni lexicale, ni contextuelle, ni sociale, de penser que "l'autochtone" est un homme.

Si on essaie de faire la devinette dans le sens inverse, en revanche, ça ne semble pas vraiment marcher :

Une jeune fille extrêmement impulsive se dispute violemment avec sa mère, et, désespérée, se jette par la fenêtre. L'aide à domicile d'une des familles de la tour voisine, qui nettoyait les vitres, aperçoit la scène et s'exclame "au secours, c'est ma fille !".

Comment est-ce possible ?

On ne peut plus utiliser de ressort lexical, parce qu'on ne pourrait pas vraiment parler (par exemple) de "caissière" pour désigner un homme individuellement, même si "caissière" est communément utilisé au féminin par défaut (par exemple, "grève des caissières" ; je trouve d'ailleurs ça extrêmement problématique, le "féminin par défaut" employé de la sorte pour certains métiers spécifiques). En revanche, les deux autres astuces sont utilisées à plein régime : à part l'aide à domicile, tous les personnages (et même tous les noms utilisés) sont féminins, et les aides à domicile en France sont des femmes par une majorité extrêmement large (Source: Dares). Pourtant, je ne trouve pas que ça marche aussi bien, ce qui tendrait à illustrer que la situation n'est pas symétrique ; mais là encore, j'ai du mal à me rendre compte. Maxime me fait remarquer qu'on pourrait aussi utiliser un autre terme vraiment grammaticalement féminin pour faire référence à l'homme, comme "personne", dont je vais parler juste après pour la direction inverse, ou bien "victime"...

Cependant, une version de la devinette originale qui semble la rendre vraiment trop facile, c'est d'utiliser le terme de "personne", ce qui donne par exemple :

Dans un pays lointain, un père et sa fille tombent dans une rivière. Le père se noie immédiatement, mais sa fille est emportée par le courant. La rivière passe dans un village en aval, et la personne qui voit arriver l'enfant s'exclame "au secours, c'est ma fille !".

Comment est-ce possible ?

Je trouve que "personne" rend plus facile d'imaginer une femme, juste parce que le terme est féminin. Dans le même genre, d'autres tentatives de ne pas divulguer le sexe du locuteur ("Un cri s'élève...") ne fonctionneraient probablement pas non plus6. Il est aussi possible d'utiliser "quelqu'un", qui peut-être marcherait mieux que "personne". Ainsi, je crois que le ressort principal reste grammatical : un lecteur invité à annoter une phrase par des informations de genre purement grammatical, indépendamment du sens, verrait sans doute "l'autochtone" comme un masculin, sauf preuve grammaticale indiscutable du contraire : par exemple, dans la phrase "L'autochtone était hermaphrodite."

Ainsi, une fois éliminés l'amorçage et le biais social, je dirais que la devinette illustre surtout les principes suivants :

  • Désigner une personne par un terme grammaticalement masculin fait qu'on se la représente comme un homme.
  • Une forme grammaticalement épicène a tendance à être perçue comme grammaticalement masculine par défaut.

À ce titre, la version anglaise de telles devinettes, où on peut utiliser "someone" pour ne donner aucune indication grammaticale, me semblent peut-être plus intéressantes parce que j'ai l'impression qu'elles fonctionnent encore, sans recours nécessaire à des termes épicènes.

Bien sûr, la seule manière d'aboutir à des conclusions fiables à ce propos serait de mener une étude statistique sérieuse comparant le temps moyen nécessaire à des groupes de sujets expérimentaux (des deux sexes) pour trouver la réponse à chacune de ces diverses variantes. Malheureusement, c'est quelque chose de plus difficile à faire que de juste écrire un billet de blog pour comparer quelques variantes.

Une jeune fille tombe inconsciente dans une rue déserte. Peu après, deux touristes passent par là, la voient, et se rendent compte en même temps : "Ciel ! C'est ma fille !". Les deux ont raison.

Comment est-ce possible ?


Des touristes visitent un pont ; quelqu'un tombe du pont et se noie. La police intervient et recueille séparément les dépositions. Un premier touriste a déclaré : "Je suis son père." Quelqu'un d'autre a affirmé ensuite : "C'était mon enfant." Pourtant, la police les croit tous les deux.

Comment est-ce possible ?


  1. The surgeon and the passerby are women. 

  2. Le chirurgien et l'autochtone sont des femmes. 

  3. Of course, the father must still be a man. By the way, it would be better if one could somehow insist on the fact that we are talking about biological parenthood, but this would probably be hard to do without drawing attention to the answer. I don't know if people can be tempted to answer the riddle in the following interesting way: the father and surgeon are a gay couple, and this is their adopted son. 

  4. Évidemment, le père doit rester un homme. À ce titre, il serait d'ailleurs préférable de préciser, pour éviter toute confusion, que c'est la relation de filiation biologique qui nous intéresse, mais ça semble difficile de le faire sans vendre la mèche. Je trouve d'ailleurs assez intéressante la réponse alternative suivante, dont je ne sais pas si elle peut venir à l'esprit des gens : le père et le chirurgien sont un couple de gays et c'est leur fils adoptif

  5. En fait, on m'a déjà présenté la devinette comme une critique de la solution, pour le genre des noms de métier, qui consiste à utiliser la forme non-marquée de cette façon en lui donnant un sens neutre. Pourtant, je pense que la devinette marche très bien aussi avec un nom de profession épicène comme "urgentiste", qu'il n'y aurait, en théorie, pas lieu de féminiser. 

  6. Une technique qui pourrait marcher serait d'utiliser le pluriel. Par exemple, voici deux possibilités : 

  7. This happened during the day. 

  8. Il fait jour. 

Mots d'un genre rare pour une terminaison donnée

Ce billet est motivé par l'énigme suivante, que vous avez peut-être déjà entendue :

Quel est le seul mot masculin en français qui se finit par "ette" ?

Je ne donnerai pas la réponse de cette énigme (enfin, pas directement, mais en un sens je l'ai déjà donnée), qui en admet d'ailleurs plusieurs. Ma question est de générer automatiquement de telles énigmes : des mots dont le genre est exceptionnel au vu de leur terminaison. En gros, des cas anormaux pour des tentatives de classification du genre suivant la terminaison, comme j'en ai déjà entrepris.

Une liste de telles énigmes calculée automatiquement est ci-dessous ; pour que ce soit plus amusant, j'ai également fait une version interactive qui permet de jouer en ligne (avec du HTML statique crade).

trouver un mot masculin en -lée
trouver un mot féminin en -lis
trouver un mot masculin en -tive
trouver un mot féminin en -heur
trouver un mot féminin en -et
trouver un mot féminin en -ou
trouver un mot masculin en -ise
trouver un mot masculin en -uille
trouver un mot masculin en -tière
trouver un mot féminin en -el
trouver un mot féminin en -ir
trouver un mot féminin en -sseur
trouver un mot féminin en -geur
trouver un mot masculin en -aine
trouver un mot féminin en -teur
trouver un mot féminin en -sson
trouver un mot masculin en -tion
trouver un mot féminin en -ment
trouver un mot féminin en -lon
trouver un mot féminin en -ré
trouver un mot masculin en -cité
trouver un mot masculin en -ente
trouver un mot féminin en -tère
trouver un mot féminin en -ux
trouver un mot féminin en -at
trouver un mot féminin en -ar
trouver un mot masculin en -isse
trouver un mot féminin en -cle
trouver un mot féminin en -raphe
trouver un mot masculin en -ude
trouver un mot masculin en -tte
trouver un mot féminin en -if
trouver un mot masculin en -uche
trouver un mot masculin en -nce
trouver un mot féminin en -it
trouver un mot masculin en -nie
trouver un mot masculin en -vité
trouver un mot féminin en -ant
trouver un mot féminin en -no
trouver un mot féminin en -stre
trouver un mot masculin en -rde
trouver un mot féminin en -ome

Observez que l'énigme classique sur -ette est également trouvée dans cette liste (mais avec le suffixe -tte). Le code source est disponible. Dans la suite, j'explique comment ces énigmes ont été calculées.

J'utilise la base de données Lexique dont j'extrais les données d'intérêt de la façon suivante :

  • Considérer les noms (dans lexique, valeur de "NOM" pour "4_cgram").
  • Ne considérer que des noms qui sont des mots de base, notamment, qui ne sont pas au pluriel ; j'utilise pour cela le champ "14_islem" de lexique.
  • Éliminer les mots contenant des espaces (locutions), des apostrophes, des points, ou des traits d'union.
  • Éliminer les mots vraiment rares (ceux dont l'usage est de 0 suivant le champ "8_freqlemlivres").
  • Considérer les mots épicènes (i.e., qui existent dans les deux genres) comme existant à la fois dans un genre et dans l'autre, avec la même fréquence d'usage (ce qui est bien entendu une approximation).

On obtient ainsi le fichier de données que l'on va utiliser pour générer les énigmes. Une énigme va être un suffixe (par exemple "ette") et un genre (par exemple "féminin"), de sorte qu'il existe des mots des deux genres se terminant par le suffixe, mais que le genre indiqué soit exceptionnel.

Par paresse, j'adopte une approche simple me permettant de réutiliser le code de mon travail précédent. Je calcule les suffixes maximaux tels qu'il existe un mot de chaque genre terminant par ce suffixe, dont j'extrais tous les sous-suffixes. Le résultat est la liste de tous les suffixes français où il y a un mot de chaque genre (ou un mot épicène) qui se finit par ce suffixe, et c'est tous les suffixes qu'on peut potentiellement vouloir poser comme une énigme.

J'évalue ensuite, pour chaque tel suffixe, si c'est une énigme intéressante ou non. Pour ce faire, il y a plusieurs critères à prendre en compte :

  • Le genre rare (l'objet de l'énigme) doit être beaucoup plus rare que le genre fréquent.
  • Le genre rare doit quand même être courant en soi : les exceptions dont le score est vraiment très faible sont au mieux des mots que personne ne connaît, au pire des cas limites ou des erreurs de Lexique.
  • Le genre rare doit être concentré en un ou plusieurs mots : une partie de l'intérêt (et de la difficulté !) de l'énigme ci-dessus vient du fait que, même si plusieurs réponses sont possibles, un seul mot concentre la majeure partie des usages.
  • Les mots du genre rare doivent être longs, en tout cas plus longs que le suffixe. Si on demande, par exemple, un mot féminin se terminant par "ot", une énumération exhaustive suggérera rapidement "dot", et des essais sur des utilisateurs m'ont confirmé que ce genre d'énigmes était trop facile.

Les énigmes générées, en revanche, ne respectent pas un critère que l'énigme "ette" respecte : que la prononciation des mots rares soient conformes à ce qu'on attendrait à partir du suffixe. Par exemple, les réponses à l'énigme "ette" sont des mots où "ette" se prononce, comme on s'y attend, /ɛt/, alors que "dot" ne se prononce pas comme on l'attendrait (le 't' final n'est pas muet). De la même façon, pour le suffixe "ir", des réponses pourraient se finir en "air", "oir"... Ce critère semble plus complexe à imposer de façon automatique. Ceci dit, j'impose tout de même que le suffixe contienne au moins une voyelle, pour être vaguement prononçable (même si les 'e' muets peuvent poser problème).

Je me limite aux suffixes qui couvrent une fréquence et un nombre de mots supérieurs à un certain seuil, et je donne un score aux suffixes calculé (de façon assez arbitraire) comme le produit des choses suivantes :

  • la proportion de la fréquence du genre rare couvert par les trois mots les plus fréquents du genre rare
  • le rapport entre la fréquence du genre fréquent et la fréquence totale du suffixe
  • le nombre de caractères à ajouter au suffixe pour atteindre le plus court mot du genre rare

Je limite aux 42 énigmes jugées meilleures suivant ce critère.

Pour améliorer la qualité des énigmes, une possibilité serait de chercher des solutions dont la prononciation corresponde également à celle du suffixe (la plus commune parmi les mots de ce suffixe), mais ceci est laissé en exercice au lecteur. :)

Sandboxing Skype

Skype now has a rather functional web interface, at least in Chromium-based browsers. If you need to use Skype, I think this is a preferable solution to the sandboxing approach presented in this blogpost (which I no longer use).

More of the same. After sandboxing Dropbox, I also wanted to run Skype as its own user. Again, this is not an endorsement of Skype, which is proprietary and quite creepy software.

Once again, I chose to use a lightweight solution where Skype is run as a separate user and where I implement access control with various mechanisms, as opposed to more ambitious approaches using containers, virtual machines, etc. The main difficulty is that, unlike Dropbox, Skype is not headless, so it needs to access the X server, whose security model is far from perfect. If Skype could directly access the X server, it could log all keystrokes (even those directed to different applications), take screenshots, etc. I use the approach of running Skype in Xpra, following an idea found here. Xpra acts as an X server to which Skype will connect, and it will display as a client in my real X server, but it will not relay X events of my server to its client unless they are addressed to the client.

However, one should keep in mind the possibility that Skype could access desktop notifications, and possibly (and more annoyingly) that it could be accessing clipboard data.

User setup

Start by setting up the Skype user as in my sandboxing Dropbox guide, following steps from 1 to 5. You can probably be stringent with the disk limit (I used 500MB), but you should be generous with the RAM limit, as Xpra may fail to start otherwise (I used 1024000000 bytes). Step 5 can be followed as-is because the ports used by Skype are the same as those used by Dropbox.

You should also add yourself to the skype group, to be able to access later files created by the skype user.

If you want Skype to be able to access the webcam, on Debian, the skype user should be put in the video group. However, I am not sure about the security implications of this choice.

Pulseaudio configuration

A problematic issue is that Skype will need access to the speakers and microphone. I use PulseAudio with a user-level daemon for my user, and we need to arrange things so that the skype user will be able to connect to the daemon. Of course, however, we will not make the pulseaudio open to all local connections, and only allow them from the skype user.

To do this, we need to change the Pulseaudio configuration to create its socket at a place where the skype user can access it, and instruct Pulseaudio clients to look for the socket at its new place. The following assumes that you do not have a configuration file already:

mkdir -p ~/.pulse
cd ~/.pulse
cp -n /etc/pulse/default.pa .
echo "load-module module-native-protocol-unix socket=/tmp/pulse-socket" >> default.pa
cp -n /etc/pulse/client.conf .
echo "default-server = unix:/tmp/pulse-socket" >> client.conf

Once this is done, restart Pulseaudio. When running Skype (using the script that I will talk about later), the credentials to access the main Pulseaudio server will be passed from the main user using pax11publish.

Mind the security implications: this means that you may consider all sound input and output compromised while Skype is running. This is hardly avoidable, however, as Skype communications themselves cannot be considered secure.

Skype installation

First, apt-get install the dependencies of Skype.

Then, download the Evil Skype Binaries from skype.com, put them in the home of the Skype user and chown them so that the skype user owns them. Of course, retrieve the "Dynamic" version, as the point is that we want to be able to install them without root privileges. As the skype user (sudo su -s /bin/bash skype), extract them. I recommend symlinking the created folder to "skype" so you can have a path that does not change even when you update to newer versions.

Setting up Xpra

Install xpra (it is packaged for Debian).

Then do the following as the skype user, which we will use to host the Xpra socket:

cd ~skype
mkdir xpra
chmod g+rwx xpra

Running Skype

The task of running Skype is a bit complex, so I wrote a script that does it for me. It also does similar sanity checks to the one done by my dropbox wrapper, to make sure that the access restrictions don't suddenly stop working.

The way it works is that starts an Xpra display without Pulseaudio (as we will be connecting to the Pulseaudio server started by our true user) and with --mmap-group and the right socketdir to make the socket accessible to members of the skype group (that is, your true user); also using a specific local encoding to avoid JPEG artifacts. It waits for the server to be ready, and then uses pax11publish to send Pulseaudio credentials to the server. Then it runs Skype in the Xpra display and attaches it from your real session. It also includes what is needed to kill all Skype processes when you are done using Skype.

The script will not work out of the box for you, but you should be able to adapt it to your needs.

One problem that you will have to fix is that sound notifications will not play because Skype will be unable to find them. This can be fixed by going in Skype's parameters, and selecting manually the sound files in the ~skype/skype/sounds folder.

Trois petits chats assistés par ordinateur

La chanson Trois petits chats est une ritournelle bien connue :

Trois p'tits chats, trois p'tits chats, trois p'tits chats, chats, chats,
Chapeau d'paille, chapeau d'paille, chapeau d'paille, paille, paille,
Paillasson, paillasson, paillasson, -son, -son,
Somnambule, somnambule, somnambule, -bule, -bule...

La chanson continue de la sorte, chaque vers répétant en première syllabe la dernière syllabe du vers suivant, pour généralement finir par revenir à "Trois p'tits chats". De façon amusante, les chansons de cette forme semblent rares dans d'autres langues.

zorun a eu la mauvaise idée de me poser la question : serait-il possible de générer des chansons de ce type, voire des chansons plus longues, de façon automatique ? Ce billet répond par l'affirmative à cette importante question. Voici un exemple de chanson générée automatiquement, avec 86 vers, en utilisant Lexique :

Lingala, lingala, lingala, -la, -la,
Laticlave, laticlave, laticlave, -clave, -clave,
Clavecin, clavecin, clavecin, -cin, -cin,
Sainte nitouche, sainte nitouche, sainte nitouche, -touche, -touche,
Touchotter, touchotter, touchotter, -ter, -ter,
Télégramme, télégramme, télégramme, -gramme, -gramme,
Graminée, graminée, graminée, -née, -née,
Nécessaire, nécessaire, nécessaire, -saire, -saire,
Cervidés, cervidés, cervidés, -dés, -dés,
Démesure, démesure, démesure, -sure, -sure,
Zurichois, zurichois, zurichois, -chois, -chois,
Quadrature, quadrature, quadrature, -ture, -ture,
Turquerie, turquerie, turquerie, -rie, -rie,
Richissime, richissime, richissime, -sime, -sime,
Symétrie, symétrie, symétrie, -trie, -trie,
Triqueballe, triqueballe, triqueballe, -balle, -balle,
Baliveau, baliveau, baliveau, -veau, -veau,
Vocalise, vocalise, vocalise, -lise, -lise,
Liséré, liséré, liséré, -ré, -ré,
Réticule, réticule, réticule, -cule, -cule,
Culbuto, culbuto, culbuto, -to, -to,
Taurobole, taurobole, taurobole, -bole, -bole,
Bolcheviks, bolcheviks, bolcheviks, -viks, -viks,
Victimaire, victimaire, victimaire, -maire, -maire,
Mercredi, mercredi, mercredi, -di, -di,
Dipsomanes, dipsomanes, dipsomanes, -manes, -manes,
Managers, managers, managers, -gers, -gers,
Jerricane, jerricane, jerricane, -cane, -cane,
Canapé, canapé, canapé, -pé, -pé,
Pécheresse, pécheresse, pécheresse, -resse, -resse,
Restaurant, restaurant, restaurant, -rant, -rant,
Rancissure, rancissure, rancissure, -sure, -sure,
Survenue, survenue, survenue, -nue, -nue,
Numismate, numismate, numismate, -mate, -mate,
Matelot, matelot, matelot, -lot, -lot,
Locataires, locataires, locataires, -taires, -taires,
Thermostat, thermostat, thermostat, -stat, -stat,
Talmudiste, talmudiste, talmudiste, -diste, -diste,
Dysthymie, dysthymie, dysthymie, -mie, -mie,
Misogyne, misogyne, misogyne, -gyne, -gyne,
Gynéco, gynéco, gynéco, -co, -co,
Connétable, connétable, connétable, -table, -table,
Tableautin, tableautin, tableautin, -tin, -tin,
Tintamarre, tintamarre, tintamarre, -marre, -marre,
Marabout, marabout, marabout, -bout, -bout,
Boulangère, boulangère, boulangère, -gère, -gère,
Gerberas, gerberas, gerberas, -ras, -ras,
Radicale, radicale, radicale, -cale, -cale,
Califat, califat, califat, -fat, -fat,
Phallophore, phallophore, phallophore, -phore, -phore,
Formica, formica, formica, -ca, -ca,
Capitale, capitale, capitale, -tale, -tale,
Thalamus, thalamus, thalamus, -mus, -mus,
Muscadine, muscadine, muscadine, -dine, -dine,
Dynamo, dynamo, dynamo, -mo, -mo,
Monoplaces, monoplaces, monoplaces, -places, -places,
Placebo, placebo, placebo, -bo, -bo,
Bogomiles, bogomiles, bogomiles, -miles, -miles,
Milonga, milonga, milonga, -ga, -ga,
Galalithe, galalithe, galalithe, -lithe, -lithe,
Liturgie, liturgie, liturgie, -gie, -gie,
Gyrophare, gyrophare, gyrophare, -phare, -phare,
Pharmacie, pharmacie, pharmacie, -cie, -cie,
Silicate, silicate, silicate, -cate, -cate,
Catalpa, catalpa, catalpa, -pa, -pa,
Palikare, palikare, palikare, -kare, -kare,
Carambar, carambar, carambar, -bar, -bar,
Barricade, barricade, barricade, -cade, -cade,
Caducée, caducée, caducée, -cée, -cée,
Séfarade, séfarade, séfarade, -rade, -rade,
Radical, radical, radical, -cal, -cal,
Calamines, calamines, calamines, -mines, -mines,
Minéral, minéral, minéral, -ral, -ral,
Rallumage, rallumage, rallumage, -mage, -mage,
Magistrat, magistrat, magistrat, -trat, -trat,
Traversine, traversine, traversine, -sine, -sine,
Cinéma, cinéma, cinéma, -ma, -ma,
Martingale, martingale, martingale, -gale, -gale,
Galoubet, galoubet, galoubet, -bet, -bet,
Betterave, betterave, betterave, -rave, -rave,
Ravioli, ravioli, ravioli, -li, -li,
Libérale, libérale, libérale, -rale, -rale,
Ralenti, ralenti, ralenti, -ti, -ti,
Tisserande, tisserande, tisserande, -rande, -rande,
Rendement, rendement, rendement, -ment, -ment,
Mandoline, mandoline, mandoline, -line, -line,
Lingala, lingala, lingala, -la, -la,

Le reste de ce billet donne plus de détails sur la façon dont cette chanson a été calculée ; le code est également disponible.

J'utilise Lexique, que je trie en mettant d'abord les formes non-dérivées (e.g., le singulier avant le pluriel, même s'il y a parfois des erreurs), puis par ordre de fréquence décroissante (pour privilégier les mots courants en faveur des mots rares, même si le programme n'hésitera pas à utiliser un mot rare quand c'est la seule manière d'aller d'une syllabe à une autre).

Lexique indique heureusement des informations de découpage en syllabes au niveau phonétique et orthographique, donc il est facile de retenir les mots de trois syllabes. Je ne retiens que les noms, à peu près comme dans la chanson originale (mais il y a là encore des erreurs). Je ne garde que les mots de lexique avec des informations de découpage complètes (elles sont parfois absentes dans Lexique).

La chanson originale contient, outre des noms, des groupes nominaux (par exemple "Trois p'tits chats"), que Lexique ne contient pas. J'ai envisagé de tenter de récupérer de tels groupes (par exemple, à partir de titres d'articles Wikipédia), qu'il faudrait ensuite consolider avec Lexique, mais finalement je ne l'ai pas fait, eu égard par exemple à la difficulté qu'il y aurait à déterminer si les élisions entre un mot et le suivant sont possibles.

Je filtre encore les mots : étant donné qu'en répétant la dernière syllabe on veut toujours garder une consonne avant, on peut éliminer tous les mots qui commencent par une voyelle, ou qui se terminent par deux sons vocaliques en succession (par exemple "hévéa" ou "casoar").

J'observe ensuite que, dans la chanson originale, on aime bien répéter un 'e' muet final sur les lignes paires (par exemple "pail-leuh", "somnambu-leuh"). J'identifie les 'e' muets en testant pour une finale en 'e' ou "es" qui ne soit pas précédée de 'i', 'u', ou 'é', et je décide d'imposer l'alternance entre de telles finales et des mots qui n'en disposent pas, un peu comme l'alternance entre rimes féminines et masculines en poésie (les règles diffèrent, cependant, par exemple "-ie" est tout de même une finale féminine en poésie).

Je considère qu'un mot u peut être atteint à partir d'un mot v si la dernière syllabe de la prononciation v, entière, est un préfixe de la prononciation de u. Ainsi, j'impose que la dernière syllabe soit entièrement préservée, afin de pouvoir la répéter ("radiogramme, -gramme, -gramme", et non "radiogramme, -ramme, -ramme"), mais on peut aboutir à un mot dont la première syllabe est suivie de davantage de sons consonantiques que la finale du vers précédent.

J'obtiens ainsi un graphe orienté de 205 sommets et 629 arêtes : pour chaque passage d'un couple "syllabe, genre" (masculin ou féminin) à l'autre, je ne retiens que le premier mot qui le permet dans la liste d'entrée (donc, normalement, le plus courant). Ce graphe a été écrémé pour ne conserver que les sommets accessibles et co-accessibles pour un point de départ arbitrairement choisi. J'interdis également, par souci esthétique, les arêtes qui restent sur la même syllabe en changeant de genre, e.g., "trinitrine"

Je recherche ensuite un cycle dans ce graphe, que je tente de rendre aussi grand que possible, mais je lui interdis de passer deux fois par la même paire "syllabe, genre", parce que dans ce cas on peut raccourcir la chanson. Ce problème d'optimisation est difficile : il est en fait NP-dur, vu qu'on peut facilement y réduire celui de la recherche d'un cycle hamiltonien. Je ne connais pas de manière simple d'approximer ce problème pour chercher un grand cycle, donc j'ai à la place implémenté une approche naïve qui énumère tous les chemins par parcours en profondeur. Cette approche génère le cycle de longueur 86 que j'utilise pour formatter les paroles ensuite. Sans doute peut-on en trouver un plus long ; c'est certainement le cas si on tente de corriger Lexique pour pouvoir conserver les mots avec des données incomplètes...

À titre expérimental (et pour récompenser le lecteur patient qui est parvenu jusqu'ici), j'ai tenté de combiner la mélodie avec le système de synthèse vocale Festival. Malheureusement, je ne sais pas comment lui indiquer la prononciation des paroles, et je ne peux donc indiquer que les paroles sous forme orthographique, qui est par ailleurs interprétée comme de l'anglais par le logiciel, avec des problèmes manifestes de gestion des caractères accentués. Le résultat se passe de commentaires...