À ceux qui râlent

Je n’ai pas l’habitude d’écrire ce genre d’articles. Il s’agit d’une réponse à un billet de quelqu’un que je considère encore comme un ami de valeur, au sujet du féminisme, ou plus exactement des débats qu’il occasionne ces derniers temps. J’ai initialement voulu répondre directement en commentaire, mais parce qu’il avait fait le choix de les fermer, je me retrouve à écrire ici. J’en profite pour mettre à plat certaines de mes opinions à ce sujet, en espérant ne pas trop faire doublon avec mes articles précédents, notamment celui-ci.

Le féminisme extrémiste (celui avec des grandes dents)

Bon tout d’abord, je ne sais pas combien de fois il va falloir le rappeler : il n’y a pas « le » féminisme. Pour rappel, il s’agit de revendication de l’égalité des sexes et des genres. L’interprétation là-dessus est libre, ce qui donne un tas de militantismes différents. Et crois-moi Jérôme (prenez l’habitude, je m’adresse à une personne particulière dans ce billet), le féminisme extrémiste, ce n’est pas ce que tu vois. Le féministe extrémiste flirte sans gêne avec la misandrie, et ça se voit très vite. Et de tou·te·s les féministes que je connais, personne ne soutient ces idées. Si vraiment tu veux lire ce que je considère comme du féministe extrémiste (ce qui est revendication de l’auteure), je te conseille de lire ceci. Je préfère te prévenir, c’est vraiment violent. Ce que tu appelles « féminisme extrémiste », ce sont des gens très visibles sur twitter qui passent une grande partie de leur temps à se plaindre. Se plaindre de situations vécues, de réponses qu’on leur fait, d’articles lus, etc. Crois-moi, personne ne fait ça de gaieté de cœur. Seulement, quand on est sensibilisé au problème du sexisme, on a la fâcheuse tendance à le voir partout. Et tu sais particulièrement combien il est difficile de laisser couler des injustices qui sont sous notre nez.

La pilule rouge

Le fait est que ton article dénonce. Et qu’est-ce qu’il dénonce ? Le comportement de certain·e·s féministes. Ce qui est intéressant (et ce qui découle également de la discussion eue plus tôt avec deux autres hacktivistes), c’est justement le sens de cette dénonciation. Pierre, Élodie ou toi, vous êtes évidemment contre le sexisme. Dans les deux sens, je suis d’accord. Et quand vous écrivez sur le sujet, c’est immanquablement pour… taper sur des féministes. C’est révélateur, tu ne trouves pas ? N’aurait-il pas été plus utile, efficace ou que sais-je de dénoncer le sexisme concrètement ? Par exemple, dans ton billet, tu évoques des agressions que tu as subies, et que tu prends avec légèreté. Chacun réagit à sa façon à ce genre d’actes, et je n’ai rien à redire à la façon dont tu le prends. Contrairement à ce que l’on peut croire, je ne considère en aucun cas qu’être victime d’agression doit marquer à vie et nous forcer à vivre dans la honte et la culpabilité. Par contre, notre culture joue un rôle important là-dedans, dans le fait que pour toi ça n’ait pas été très grave. Car beaucoup de femmes prennent ce genre d’acte bien moins légèrement que toi. Peut-être que leur fréquence y est pour quelque chose ? Je soupçonne que oui, mais je n’en ai pas la preuve. Par contre, ce qui est avéré, c’est la culture du viol. Le fait que les jeunes filles, dès la puberté, apprennent à avoir peur, à redouter les agressions sexuelles. Agressions qui arrivent d’ailleurs en très grande majorité dans le cercle privé ou familial, mais c’est un autre sujet. Tu ne peux ignorer qu’on conseille aux femmes de ne pas sortir seules le soir, de faire attention à elles, etc. Face à ça, comprends-tu la gêne, la peur, quand un quelconque gentleman aborde une femme, qui n’a rien demandé, dans un espace qu’elle considère culturellement comme dangereux ? Sachant également que ce qu’on leur apprend à craindre est considéré comme banal, ne serait-ce qu’au moment de porter plainte si l’on en a le courage (difficile de porter plainte contre un membre de sa famille, surtout lorsque c’est sur nous que sera jetée la honte dans la majorité des cas…). Vois-tu où je veux en venir, et pourquoi ton ressenti face à des agressions (qui sont condamnables avec la même fermeté que si tu avais été une femme, fût-il utile de le préciser) est forcément différent de celui d’une femme ?

On me reproche, face à ça, de considérer les femmes comme des victimes en puissance. Ce n’est pas vrai. Les femmes sont ciblées par des actes sexistes à différentes échelles. Elles les subissent. Mais pourquoi une agression devrait-elle entraîner la honte ou peur de sa cible ? Encore une fois, toute cette discussion part de personnes qui ouvrent trop leur gueule. Qui n’ont justement pas du tout une posture de victime, mais au contraire, décident de ne plus se laisser faire, qu’il s’agisse de se défendre d’une agression physique ou de protester contre un geste commun de la vie quotidienne, mais qui participe à la société patriarcale. Car, quand on choisit la pilule rouge, qu’on accepte de remettre en cause notre culture, notre société, et, au fond, nous, on voit l’envers du décor, la matrice. On voit à quel point le sexisme est partout, et on perd facilement les pédales. C’est tout simplement ce qui arrive lorsque quelqu’un comme moi se met à réagir au quart de tour sur twitter. On pense constamment « Mais comment ne peuvent-ils pas voir ces injustices ? ». Je me trompe peut-être à ce sujet, mais je vous vois (vous, qui écrivez pour dénoncer l’attitude ou les propos de féministes énervé·e·s) comme des personnes, non pas ayant choisi la pilule bleue, mais surtout qui n’ont pas été confrontées à ce choix. Imaginez le film Matrix si, au lieu de latter des vilains en costard et lunettes noires, les héros avaient pour but d’expliquer à la population qu’ils sont dans la matrice… J’aime à penser que ça donnerait des situations similaires à ce que nous vivons. Ceci dit, dans mon analogie, le camp des héros est clairement défini, et il s’agit comme par hasard de celui que je m’attribue. J’aimerais beaucoup connaître votre avis là-dessus.

Quoi qu’il en soit, une fois la pilule rouge avalée, on commence à remettre en question notre environnement. Lors d’un débat, on s’aperçoit que la seule femme présente n’arrive pas à en placer une ou à se faire écouter. On remarque également les remarques, davantage tournées vers son apparence que vers ses idées. On tend un peu plus l’oreille quand on entend une femme se plaindre du comportement des gens dans la rue (et pas seulement des hommes). Parfois, et c’est plus difficile, on se prend soi-même à lâcher une parole qui autrefois n’aurait pas posé problème, mais qui aujourd’hui sonne faux, parce que vous remarquez qu’elle est discriminante et gratuite. Ça peut être quelque chose d’aussi insignifiant en apparence que le fait d’user de « Mademoiselle » pour s’adresser à une jeune femme, ou bien un glacial « t’as vu comment tu t’es habillée, aussi ? » à une femme qui raconte comment elle a failli être violée quelques instants plus tôt. Je comprends que cela provoque un agacement : on déterre toutes ces petites choses qui composent notre vie de tous les jours, toutes ces choses acquises, avec lesquelles on vit. Et remettre en question sa culture est une chose quand on a choisi d’ouvrir les yeux, mais se le prendre en pleine gueule alors qu’on ne s’en soucie pas peut effectivement mettre très mal à l’aise, et occasionner le l’agressivité en signe de défense.

C’est ce qui arrive lorsque que l’on dénonce le sexisme dans la société, mais c’est exactement pareil dans les communautés, comme les geeks. À la différence près que, quand on s’identifie comme geek, on s’attache à cette culture. Et inévitablement, on tombe dans le communautarisme. Que ce soit pour le milieu geek ou les autres. La réponse hautaine qu’on va tenir à un nouveau qui demande des conseils candides (et parfois un peu idiots) dans notre domaine d’expertise, c’est du communautarisme. On a notre communauté, et on veut naturellement s’assurer qu’on n’y entre pas n’importe comment, car c’est un espace familier. Quand on tape parfois brutalement sur Tris quand elle parle de sécu, quand bien même c’est argumenté, c’est du communautarisme, et je reconnais en faire moi-même. Voyez, je reconnais reproduire le problème, et j’en suis conscient. Et pourtant, je continue à lui dire ce que je pense, ce qui est rarement glorieux. Ridicule, vous ne trouvez pas ? D’ailleurs, je ne passe pas à côté du sexisme très installé dans certaines œuvres, comme la série Game of Thrones. Et pourtant, je l’aprécie. Parfois, le fait d’avoir cette analyse inconsciente des constructions genrées dans la fiction gâche le plaisir de la découverte. C’est comme ça, c’est ça le revers de la pilule rouge. On voit le monde encore plus sombre qu’avant. Mais on sait qu’on a alors les clés en main pour changer ça à notre échelle, en commençant par moins reproduire ces schémas. « Moins », et pas « plus », car la tâche est monumentale, et la seule façon de refuser du jour au lendemain toute forme de sexisme serait de couper tout lien avec la société, et de subir un lavage de cerveau. Ce qui ne serait pas très efficace. Alors on accepte de vivre dans ce monde sexiste, on continue d’aprécier des œuvres, même si elles se montrent sexistes. Il faut savoir faire des compromis, et connaître les limites de son militantisme.

Revenons au sujet

Dans ton article, Jérôme, tu persistes à expliquer en quoi tu réfutes le terme de féminisme pour parler d’égalité. Je suis égalitariste, tu le sais. Je ne souhaite pas inverser les privilèges, je souhaite que femmes et hommes soient au même niveau social, aient les même chances par défaut dans la vie.

Mais.

Être pour l’égalité sans aller plus loin, c’est une bien belle déclaration, qui n’a d’égale à son ardeur que son inutilité. C’est une déclaration de principe, rien de plus. Parce qu’il est impossible d’évoquer l’égalité hommes-femmes sans évoquer le patriarcat. Or, je te n’ai jamais vu ne serait-ce qu’employer ce mot. Sais-tu seulement ce qu’il signifie ? Il signifie que la société dans laquelle on vit a été pensée par et pour des hommes, et que les femmes y sont réduites à l’état de ressource. Évidemment, la société a évolué, et la place des femmes avec elle. Reste qu’historiquement, la domination était très claire : les hommes gouvernaient, et les femmes obéissaient. Aujourd’hui, est-ce différent ? « On n’est plus dans les années 50 », mais on n’est pas encore dans les années 10 000. Autrement dit, il y a beaucoup de chemin. Des exemples ? Le plafond de verre, qui symbolise l’extrême difficulté qu’ont les femmes à atteindre les postes à responsabilités. Ou l’inégalité salariale, ou encore la culture du viol, conçue pour culpabiliser les victimes et souvent d’excuser les auteurs. Ou encore la banalité que représente l’abordage d’une femme dans la rue, qui n’a rien demandé. Le patriarcat enseigne qu’on le peut, et qu’une femme doit se faire belle pour plaire aux hommes.

Le patriarcat, c’est une composante majeure de notre société. Il est normal que ça couine un peu quand on tape dessus. En tout cas, si tu souhaites lutter pour l’égalité, il y a une chose importante à faire. Et difficile. C’est le choix de la pilule, dont je parlais plus haut. Admettre l’existence du partiarcat, pour commencer (c’est pas si évident). Et surtout, admettre qu’en tant qu’homme, tu es naturellement privilégié. Ce n’est pas une honte, une critique ou quoi que ce soit. D’ailleurs tu n’y peux rien, tu n’as pas choisi ton genre. Mais c’est un fait, tu fais partie de la « caste » mise en avant par le patriarcat. Il y a fort à parier que l’immense majorité des gens qui liront ce billet sont privilégiés, d’une façon ou d’une autre. Toi, Pierre et moi, nous sommes des hommes blancs hétérosexuels cis (c’est à dire qui vivons notre genre assigné à la naissance). Cela fait 4 raisons d’être privilégiés. Nous sommes réellement quasiment au sommet de la pyramide sociale des discriminations. Ce sont les femmes qui sont victimes du patriarcat. Ce sont tous ceux dont la couleur de peau n’est pas celle des anciens conquérants européens qui sont victimes du racisme. Ce sont les homosexuel·le·s, bis, transgenres et queers qui sont victimes d’homophobie ou de transphobie. Pas nous. Je le répète, ce n’est pas un jugement, mais un constat. En admettant ses privilèges, on accepte de faire partie du problème. À ce moment, ça ne devient plus « des râleuses qui nous emmerdent avec leurs problèmes dont on n’a rien à faire ». On sait qu’on en est aussi, qu’on participe à ça. Après, on est libre de changer nos habitudes. D’accepter, non pas de renoncer à ces privilèges, mais de travailler à les partager. Ce n’est bien sûr pas un acte individuel, et je ne peux pas dire « tiens, prends ma place d’homme aux yeux de la société ». Pas par faute d’envie, mais parce que changer mon regard n’est qu’une pierre à l’édifice. Pour que ça ait un impact, il faut naturellement qu’une masse critique ait conscience de ce problème, et fasse un effort pour y remédier. Cette masse critique, c’est vous et moi, pas « les vilains misogynes ». Admettre ça, c’est lutter pour l’égalité des genres. C’est être féministe.

Et toi, Jérôme, qui es pour l’égalité, t’es-tu remis en question ? Ou te contentes-tu de taper sur celles et ceux qui s’efforcent de sensibiliser les autres ? Au contraire, ai-je envie de dire. Car quand tu dénonces le fait que le dossier de Mar_Lard pointe du doigt « les geeks », il est clair que tu te sens vexé, car on sous-entend que ta précieuse communauté pourrait avoir un problème, pire, que tu pourrais en faire partie. Non content d’être du communautarisme bien idiot, il s’agit d’un rejet pur et dur du problème. Tu préfères penser que le sexisme, bien sûr que ça existe, mais ce sont « les autres ». Pas de ça autour de toi, sinon tu l’aurais vu, n’est-ce pas ? Et si c’était le simple fait de ne pas le remarquer qui te mettait mal à l’aise ? Tu sais, depuis le (faible) temps que je milite pour l’égalité, j’ai fini par repérer les patterns courants de ceux qui tapent sur le féminisme, mais qui sont d’accord sur le principe, hein, mais… Mais faut pas crier aussi fort, mais faut pas généraliser sur les geeks, y’en a des biens… Et là, je ne te fais que les réponses construites. Parce que dans leur immense majorité, les réactions sont purement haineuses. As-tu jeté un œil sur les commentaires du moindre article rédigé par Mar_Lard ? Toi qui parles d’égalité, et de ses billets, n’as-tu pas trouvé pertinent, même si tu souhaitais critiquer intelligemment, de signaler cet état de fait ? D’ailleurs, qu’en penses-tu, toi qui, sans le vouloir, participes à la levée de boucliers qui suit inévitablement ce pavé dans la mare ?

Non pas que le dossier dont il est question ne soit pas critiquable. Au contraire. Il s’agit du travail personnel de quelqu’un de passionnée par le sujet, et dont ce n’est pas le métier. Ça se ressent, évidemment. Mais on va lui reprocher de ne pas parler de quelque chose, d’avoir un ton incorrect. Tout est prétexte à critiquer son texte. Ça a quelque chose de malsain, et je dois dire que je t’en veux de ne pas avoir vu plus loin que ça.

Finalement, tu as raison, tas de pixels. C’est bien une question de binaire. La pilule rouge ou bleue. La reconnaissance du problème ou son déni.

Bonjour Axolotl !

Il y a quelques semaines, on m’a parlé de la possibilité d’adopter des axolotls. Je connaissais vaguement ces bestioles, mais la proposition m’a donné envie d’en apprendre plus sur elles. Après lecture de la page Wikipedia, je suis tombé sous le charme de ces bestioles. Voyez par vous-mêmes : une bestiole qui sourit tout le temps, qui passe sa vie sous forme de larve, qui peut se regénérer jusqu’à des parties de son cerveau (Arme X ?), qui a des branchies rigolotes et poilues, et surtout, qui mange comme un idiot tout ce qui est plus petit que lui. Je trouve ça génial.

Un axolotl

J’ai rapidement eu l’idée de monter un petit site, dans la lignée des Bonjour le chat et autres variations plus portées sur les humain·e·s, c’est à dire un blog simpliste postant une photo chaque matin. La quasi-totalité de ces sites est hébergée et gérée par Tumblr, mais vous connaissez mon amour pour les plateformes centralisées et pseudo-gratuites. Je suis donc parti sur Pelican, comme pour mon blog, avec dans l’idée la possibilité d’automatiser la création de posts.

Le travail a donc consisté à :

  • installer un Pelican
  • créer un template Jinja pour Pelican reprenant le thème simpliste utilisé sur les bonjour* ;
  • créer un script de publication automatique ;
  • récupérer des photos d’axolotls ;
  • ???
  • PROFIT.

Installation

Le bon sens et la conception de Pelican veulent que le contenu soit généré depuis le poste local, pour être envoyé vers le serveur sans qu’il ne soit nécessaire d’avoir un interpréteur Python sur celui-ci. Dans mon cas, souhaitant une génération automatique, il m’a semblé plus propice de tout déléguer au serveur. Ainsi, j’ai installé Pelican sur mon serveur en suivant le guide, et configuré le serveur web pour servir le dossier output.

Je me suis aperçu après coup qu’une fonctionnalité intéressante me manquait dans Pelican : la possibilité, pour chaque article, d’avoir le lien vers son prédécesseur et/ou successeur, pour obtenir une navigation simple. Ce fonctionnement peut être obtenu via un plugin : Neighbors. Celui-ci, une fois téléchargé, se place à la racine du projet Pelican, et on l’inclut via le fichier de configuration, que voici :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/env python
# -*- coding: utf-8 -*- #

AUTHOR = u'Axoloto'
SITENAME = u'Bonjour Axolotl'
SITESUBTITLE = u'Le site qui vous fera dire « Bonjour l’<a '\
              +u'href="https://fr.wikipedia.org/wiki/Axolotl">axolotl</a> ! »'\
              +u'<br /><br />Tous les matins, 10h, une nouvelle <strong>photo'\
              +u'</strong> d’<strong>axolotl</strong> !'
SITEURL = 'http://bonjouraxolotl.fr'

TIMEZONE = 'Europe/Paris'

DEFAULT_LANG = u'fr'

# Blogroll
LINKS =  (('Pelican', 'http://docs.notmyidea.org/alexis/pelican/'),
          ('Python.org', 'http://python.org'),
          ('Jinja2', 'http://jinja.pocoo.org'),
          ('You can modify those links in your config file', '#'),)

# Social widget
SOCIAL = (('You can add links in your config file', '#'),
                  ('Another social link', '#'),)

DEFAULT_PAGINATION = 1

THEME = 'template'
FEED_DOMAIN = 'http://bonjouraxolotl.fr'
FEED_RSS = '/feeds'
FEED_ATOM =  None

PLUGINS = ["neighbors"]

Dans les quelques trucs intéressants, notez que j’ai restreint les pages à 1 seul article, et que j’ai inclus le plugin à la dernière ligne. Le reste est très simple. J’ai aussi choisi d’utiliser du RSS au lieu d’Atom.

Création du template

Je me suis basé sur le markup généré par bonjourlechat.fr pour créer mon template. Il n’y a basiquement besoin que de 3 pages : la page d’accueil, la page d’un article, et la page d’archives. D’ailleurs, je ne me suis même pas préoccupé de cette dernière…

Pour commencer, j’ai copié le template notmyidea, situé dans $PELICAN_INSTALL_PATH/themes/notmyidea, dans la racine du projet, renommé en « template ». À l’intérieur de celui-ci, on trouve deux dossiers : static et templates. Le premier sera copié tel quel dans le dossier output, tandis que le second contient le code Jinja permettant de générer les pages. Celles qui nous intéressent sont base.html, index.html, article.html et article_infos.html. La différence entre les deux derniers est que article.html est la page complète d’un article tandis que article_infos* n’est que le bloc HTML d’un article seul. Je l’ai mis dans un fichier à part pour pouvoir l’inclure facilement depuis les différentes pages sans avoir besoin de le réécrire. voici le contenu des fichiers :

base.html

<!DOCTYPE html>
<html lang="en">
<head>
        <title>{% block title %}{{ SITENAME }}{%endblock%}</title>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="{{ SITEURL }}/theme/css/{{ CSS_FILE }}" type="text/css" />
        {% if FEED_ALL_ATOM %}
        <link href="{{ FEED_DOMAIN }}/{{ FEED_ALL_ATOM }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Atom Feed" />
        {% endif %}
        {% if FEED_ALL_RSS %}
        <link href="{{ FEED_DOMAIN }}/{{ FEED_ALL_RSS }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} RSS Feed" />
        {% endif %}
</head>

<body id="index" class="home">
    <div id="wrapper">
        <div id="topNav">
            <ul>
                <li><a href="/archives.html">Archives</a></li>
                <li><a href="{{ FEED_DOMAIN }}/{{ FEED_ADD_RSS }}">RSS</a></li>
            </ul>
        </div>
        <div id="contentHolder">
            <div id="mastHead">
                <h1><a href="{{ SITEURL }}/">{{ SITENAME }}</a></h1>
                <p>
                    <span style="font-family: Arial">{{ SITESUBTITLE }}</span>
                </p>
            </div>
            <div id="content">
                <div id="postHolder">
                    {% block content %}
                    {% endblock %}
                </div>
            </div>
        </div>
        <div id="footer">
            <p style="text-align:center">
                Fièrement propulsé par <a href="http://getpelican.com/">Pelican</a>,
                qui se repose sur <a href="http://python.org">Python</a>.
            </p>

            <p style="text-align: center">Thème par
            <a href="http://daelan.com/">Daelan</a>, merci !</p>
        </div><!-- /#contentinfo -->
    </div>
</body>
</html>

article.html

{% extends "base.html" %}
{% block title %}{{ article.title|striptags }}{{ SITENAME }}{%
    endblock %}
{% block content %}
    {% include 'article_infos.html' %}
{% endblock %}

article_infos.html

<div class="post">
    <div class="labels">
        <div class="date">
            <a href="{{ SITEURL }}/{{ article.url }}">
                <span class="month">{{ article.date.strftime('%d %m') }}</span> 
                <span class="year">{{ article.date.year }}</span>
            </a>
        </div>
        <div id="navigation" style="position: absolute; top:0; right: 0;">
            {% if article.prev_article %}
                <a href="{{ article.prev_article.url }}"><b>«</b></a>
            {% endif %}
            {% if article.next_article %}
                <a href="{{ article.next_article.url }}"><b>»</b></a>
            {% endif %}
        </div>
    </div>
    <div class="photo">
        <div class="permalink">
            <a href="{{ SITEURL }}/{{ article.url }}">+</a>
            {{ article.content }}

            <div class="caption"><p>{{ article.title }}</p></div>
        </div>
    </div>
</div>

Un dernier détail : le CSS. J’ai copié bêtement le CSS du site cible, que j’ai mis dans template/static/css/main.css :

/* -- reset this mutha!  -- */
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
    margin: 0;
    padding: 0;
    border: 0;
    outline: 0;
    font-size: 100%;
    vertical-align: baseline;
    background: transparent;
}

body {
    line-height: 1;
}

ol, ul {
    list-style: none;
}

blockquote, q {
    quotes: none;
}

blockquote:before, blockquote:after,
q:before, q:after {
    content: '';
    content: none;
}

/* remember to define focus styles! */
:focus {
    outline: 0;
}

/* remember to highlight inserts somehow! */
ins {
    text-decoration: none;
}

del {
    text-decoration: line-through;
}

/* -- end reset  -- */

body{
    margin:0;
    padding:6px;
    text-align:center;
    font-family: Helvetica, Arial, Verdana, Sans-Serif;
    background: #fff;
}

#wrapper{
    width:895px;
    height:auto;
    margin:0 auto;
    padding:0;
    text-align:left;
}

#topNav{
    position:relative;
    float:left;
    width:895px;
    height:90px;
    margin:0;
    padding:0;
}

#topNav ul{
    position:relative;
    float:right;
    margin:0 0 0 0;
}

#topNav ul li{
    position:relative;
    float:left;
    margin:0 0 0 20px;
}

#topNav ul li a:link,#topNav ul li a:visited{
    font-size:12px;
    color:#000000;
    text-decoration:none;
    background:#FFFFFF;
    border:0;
    padding:3px 6px 3px 6px;
    line-height:18px;
}

#topNav ul li a:hover{
    color:#FFFFFF;
    background:#0000FF;
}

#contentHolder{
    position:relative;
    float:left;
    width:895px;
    height:auto;
    min-height: 500px;
}

#mastHead{
    position:relative;
    float:left;
    width:395px;
    height:auto;
    margin:0 0 0 0;
    display:inline;
}

#mastHead h1{
    margin:9px 18px 18px 0;
}

#mastHead h1 a:link,#mastHead h1 a:visited{
    letter-spacing:-2px;
    font-size:36px;
    background:#0000FF;
    padding:18px;
    line-height:54px;
    border:0;
    text-decoration:none;
    color:#FFFFFF;
}

#mastHead h1 a:hover{
    background:#0000FF;
    color:#000000;
}

#mastHead p{
    font-family:Georgia, "Times New Roman", Serif;
    font-family:#000000;
    font-size:11px;
    padding:9px 36px 9px 18px;
    line-height:18px;
    margin:0;
}

#mastHead form{
    padding:9px 18px 9px 18px;
}

#mastHead input{
    padding:0;
    margin:0;
}

#mastHead a:link, #mastHead a:visited{
    text-decoration:none;
    color:#0000FF;
    border-bottom: 1px dotted #FFFFFF;
}

#mastHead a:hover{
    text-decoration:none;
    color:#0000FF;
    border-bottom: 1px dotted #FFFFFF;
}

div.photo img{
    border:0;
}

a.hyperLink:link,a.hyperLink:visited{
    color:#0000FF;
    text-decoration:none;
    font-size:18px;
    line-height:18px;
    font-weight:bold;
    border:0;
}

a.hyperLink:hover{
    color:#FFFFFF;
}

.description{
    position:relative;
    float:left;
    width:100%;
    height:auto;
    margin:18px 0 18px 0;
}

.post{
    position:relative;
    float:left;
    border-bottom:1px dotted #ccc;
    padding:0 0 18px 0;
    width:100%;
    height:auto;
    font-size:11px;
    line-height:18px;
    margin:0 0 18px 0;
}

.labels{
    margin:0;
    padding:0;
}

#content{
    position:relative;
    float:left;
    width:500px;
    height:auto;
    margin:0 0 0 0;
    display:inline;
}

#content p{
    font-size:11px;
    line-height:18px;
    margin:0 0 18px 0;
}

#content h2{
    position:relative;
    float:left;
    width:500px;
    padding:0 0 0 0;
    height:auto;
    line-height:18px;
    font-size:18px;
    margin:0 0 18px 0;
}

#content h2 a:link,#content h2 a:visited{
    color:#0000FF;
    text-decoration:none;
    border:0;
}

#content h2 a:hover{
    color:#FFFFFF;
}

.date{
    border-bottom:1px dotted #666;
    float:left;
    font-size:18px;
    font-weight:bold;
    letter-spacing:-1px;
    margin:0 0 18px 0;
    padding:0;
    position:relative;
    text-transform:uppercase;
    line-height:18px;
    width:500px;
}

.year{
    color:#0000ff;
    letter-spacing:0;
}

.month{
    color:#0000FF;
    letter-spacing:0;
}

#content a:link, #content a:visited{
    text-decoration:none;
    color:#0000FF;
    border-bottom: 1px dotted #FFFFFF;
}

#content a:hover{
    text-decoration:none;
    color:#0000FF;
    border-bottom: 1px dotted #FFFFFF;
}

#footer{
    position:relative;
    float:left;
    width:895px;
    height:auto;
    border-top:1px dotted #efefef;
    padding:18px 0 0 0;
    margin:18px 0 18px 0;
}

#footer p{
    font-size:11px;
    line-height:18px;
    margin:0 20px 0 20px;
}

#footer a:link, #footer a:visited{
    text-decoration:none;
    color:#000;
    border-bottom: 1px dotted #FFFFFF;
}

#footer a:hover{
    text-decoration:none;
    color:#0000FF;
    border-bottom: 1px dotted #FFFFFF;
}

.caption{
    position:relative;
    float:left;
    margin:18px 0 18px 0;
    width:100%;
    height:auto;
}

.regular, .quote, .video, .photo, .audio, .conversation, .link{
    position:relative;
    float:left;
    width:100%;
    height:auto;
}

big{
    font-size:24px;
    line-height:18px;
    padding:0 5px 0 0;
}

.source{
    color:#666;
}

.permalink{
    position:absolute;
    top:0;
    left:-18px;
    height:18px;
    margin:0;
    padding:0;
    line-height:18px;
}

#navigation {
    font-size: 22px;
    font-weight: bold;
}

#pages{
    font-weight:normal;
    color:#999;
    padding:0;
    font-size:11px;
    margin:10px 0 0 0;
}

Voilà tout pour la partie Pelican. Vous avez un beau site, vide mais beau. Maintenant, remplissons-le dynamiquement.

Le contenu

Les sites bonjour* ont généralement une légende sous chaque photo. Disons qu’on s’en fout. J’ai opté pour un fonctionnement minimaliste : on pose des images dans un dossier, et le script, appelé une fois par jour, prend la plus ancienne pour en faire un article puis la supprime.

# -*- coding: utf-8 -*-

import os
import locale
from datetime import date
import Image

locale.setlocale(locale.LC_TIME, 'fr_FR.utf-8')

content_dir = 'content'
content_image_dir = 'images'
source_dir = 'source'
max_size = (500, 500)

def create_article(filename):
    today = date.today()
    output_filename = '%s.jpg' % today.strftime('%Y-%m-%d')
    im = Image.open(os.path.join(source_dir, filename))
    im.thumbnail(max_size)
    im.save(os.path.join(content_dir, content_image_dir, output_filename))

    article_vars = {'today_str': date.today().strftime('%a %d %b %Y'),
                    'date': today.strftime('%Y-%m-%d'),
                    'output_filename': output_filename}

    article = """Title: %(today_str)s
Date: %(date)s

![%(today_str)s](./static/images/%(output_filename)s)""" % article_vars
    with open(os.path.join(content_dir, output_filename.replace('jpg', 'md')), 'w') as article_file:
        article_file.write(article)

file_list = os.listdir(source_dir)
oldest_file = None

for cur_file in file_list:
    cur_mtime = os.path.getmtime(os.path.join(source_dir, cur_file))
    if not oldest_file or cur_mtime < oldest_mtime:
        oldest_file = cur_file
        oldest_mtime = cur_mtime

create_article(oldest_file)
os.remove(os.path.join(source_dir, oldest_file))

Enregistrez ça dans la racine du site, sous le nom content_generator.py par exemple. C’est testé sous python 2.6 et 2.7. À chaque appel, il listera les fichiers dans source (vous devriez créer ce dossier), les classera par date de modification, puis dépilera la première pour en faire un article : il la redimensionnera aux dimensions voulues, puis écrira un article basique en Markdown, contenant seulement l’image et la date.

À ce niveau, le billet sera écrit mais pas encore publié. C’est un script bash qui s’en chargera, et qui sera appelé par cron. Enregistrez ce qui suit dans cron.sh à la racine du site :

1
2
3
4
5
6
#!/bin/bash

PATH="/usr/local/bin:/usr/bin:/bin"
cd /path/to/bonjouraxolotl
python content_generator.py
make html

Adaptez bien évidemment les chemins. Il ne reste plus qu’à éditer la crontab :

# crontab -l
0 10 * * * /path/to/bonjouraxolotl/cron.sh

Tous les matins à 10h, un nouvel axolotl !

EDIT : corrections et amélioration du script python par Rogdham, merci à lui.

[Traduction] Rajouter du napalm sur le feu

Ça fait longtemps que je n’avais pas traduit de billet d’Okhin. Celui-ci est particulièrement intéressant, et parle à nouveau de sexisme.

Si vous avez la flemme de tout lire, voici un résumé :

Allez vous faire voir, arrêtez d’être fainéant·e et lisez.

Rajouter du napalm sur le feu.

Mise au point

Je suis privilégié. Peu importe ce que je peux dire sur l’état de ce monde, il est clair que je suis né de son meilleur côté. Je peux m’exprimer sans risquer d’être frappé ou torturé. Je peux traverser la rue pour acheter à manger sans risquer de me faire abattre par un sniper. Je sais que je dors au chaud chaque nuit, et que je peux avoir trois repas (ou plus) par jour (tant que je n’oublie pas de les prendre).

Et je ne serai pas insulté, agressé, violé, considéré comme une minorité, je ne me sentirai pas en danger pour le simple fait de marcher dans la rue.

Tout ça parce que je suis un homme blanc. J’ai acquis des privilèges (que je n’ai pas demandés) par le simple fait d’être né. Et c’est naze. Je veux dire, le fait d’avoir des privilèges implique que j’aie du pouvoir sur d’autres personnes. Et c’est naze, parce que ça signifie que ces personnes (celles sur lesquelles j’ai du pouvoir) ne sont pas libres, ce qui entrave ma liberté (si les personnes autour de moi ne sont pas libres, je ne peux pas bénéficier de ma liberté).

Alors oui, être privilégié rend la vie plus facile, mais ça ne va pas. Je ne veux pas de ça. Et se débarasser de ça prendra beaucoup de temps, parce que la société dans laquelle je vis a besoin de changer beaucoup plus globalement. Et ça commence en sensibilisant sur la situation (et ensuite en la changeant en abandonnant ce pouvoir).

Faits et statistiques

S’il n’y avait aucune discrimination dans l’éducation, alors les compétences seraient également réparties dans la population, et donc vous devriez trouver des personnes compétentes n’importe où. Je veux dire, si 20% de la population avait la peau bleue, alors il devrait y avoir 20% de personnes à la peau bleue parmi les gens qui cuisinent. Ça vous semble correct ?

Donc, si notre système éducatif fonctionne bien, il devrait tendre à développer l’intérêt et la curiosité de façon égale. Alors, le fait que j’aie rencontré 5 femmes depuis que j’ai commencé mes études dans un domaine technologique (une dans une société, les 4 autres étaient des camarades de classe) est soit une erreur statistique, soit la preuve que le système ne fonctionne pas aussi bien. J’ai rencontré d’autres femmes dans les départements technologiques dans lesquels j’ai travaillé, mais elles occupaient principalement des postes créatifs (design, intégration…).

Il y a donc quelque chose de cassé là-dedans. J’ai un problème pour rester longtemps dans une société : depuis 13 ans que je travaille (oui, j’ai commencé tôt), hormis la société dans laquelle j’ai fait mon apprentissage, je n’ai jamais passé plus d’un an dans la même entreprise. Donc ça en fait 8. De différentes tailles, de différents horizons.

Et bien, je n’ai jamais rencontré une femme dans les départements IT de ces boîtes. Parfois, c’était moi le département IT, mais même dans les équipes de développement, je n’ai jamais rencontré une seule femme. Les seules femmes que j’ai rencontrées viennent de la scène hacker (et la plupart du temps, je ne l’apprenais qu’en les rencontrant dans le meatspace, mais c’est un autre sujet).

Donc, quand quelqu’un me dit, au sujet du sexisme, que « si ce n’est pas cassé, il ne faut pas essayer de le réparer » comme un argument pour ne pas penser à des politiques anti-harcèlement, je pense qu’ils ont tort. C’est un problème.

Un politicien sauvage apparaît !

L’autre jour (deux ou trois jours avant cette rédaction), @_LaMarquise a été agressée dans la rue par un type se masturbant en public, et elle en a parlé sur twitter. Un illuminé de service, @romain_pp, a trouvé pertinent de faire une plaisanterie à ce propos. Le fait est que cette personne est membre du Parti Pirate Français et Suisse, et si j’ai bien tout compris au fonctionnement de ce parti, n’importe qui peut parler en son nom. C’est même écrit dans le nom de son compte twitter, dans sa description, et même dans son image d’arrière-plan. Alors ouais, c’était la parole du Parti Pirate.

Les choses se sont envenimées sur Twitter, et la principale argumentation contre La Marquise était qu’elle n’était pas rationnelle. Je vais développer plus tard, mais basiquement, je tend à penser qu’on ne peut pas attendre de quelqu’un sous le choc d’être rationnel.

On lui a aussi dit qu’elle était agressive, qu’elle ne devrait pas rendre publiques ces choses personnelles, comme une agression (très bien, alors pourquoi est-ce que les gens tweetent à propos de leur vie privée ?), qu’elle ne devait pas déranger leur petite tranquilité.

Le Parti Pirate a écrit une lettre en réponse à La Marquise. Ils l’ont fait en privé (étant donné que je n’ai pas pu la trouver en ligne). Ce que je trouve étrange pour un parti qui défend la transparence à tous les niveaux de la société. Ceci dit, les systèmes informatisés sont sympas, parce qu’ils permettent de copier les choses à coût négligeable, et donc voici une copie de cette lettre (elle a été fournie par Marquise, et je n’ai aucune raison de douter de sa parole là-dessus). En substance, ils disent regretter ce que l’un de leurs membres a dit, et également le « buzz » qui s’en est suivi. Ils n’ont pas saisi l’opportunité d’opter pour une position plus active, pas plus qu’ils n’ont blâmé le membre.

Basiquement, la lettre est une tentative d’effort pour calmer le jeu sans prendre réellement position pour ou contre le sexisme. S’ils sont contre le sexisme, ils devraient, au moins, renvoyer Romain, sinon ils n’auraient pas besoin d’écrire à ce sujet. Cette lettre prouve que ce qui est important pour eux est d’éteindre l’incendie médiatique plutôt que défendre une position.

Ce qui est honteux est également qu’ils sont généralement les premiers à blâmer ce genre de comportement dans les autres partis. Il y a aussi un problème concernant la liberté d’expression, mais j’y reviendrai.

Au sujet de la violence

Vivre dans la peur d’être agressé·e ou violé·e n’aide pas à garder la tête froide. Comme je l’ai dit (et d’autres l’ont dit aussi), garder la tête froide est un privilège des gens qui ont du pouvoir, ne l’oubliez pas. L’insurrection, et la nécessité du changement, mènent à la violence, c’est inévitable. Ce billet l’explique assez bien, et cette citation est intéressante :

La soumission des opprimés est liée à l’ordre établi. C’est le fait de déranger cet ordre en brisant ses chaînes, et en s’en prenant aux maîtres qui est perçu comme un scandale. Dans le langage des maîtres, qui devient le langage courant, la violence ne vient pas de ceux qui commettent cette violence, mais des vilains qui osent se rebeller.

--

Igor Reitzman

Quand quelqu’un vous crie dessus à propos de quelque chose, vous devriez l’écouter, parce que cette chose est importante pour la personne (si ça ne l’est pas pour vous). Vous n’imagineriez pas les Révolutionnaires Français demander gentiment à Louis XVI s’il accepterait de bien vouloir céder le pouvoir. Un tas de personnes ne voudrait pas abandonner le pouvoir, et il faut parfois les forcer à le faire.

Ça m’a pris un moment pour comprendre ça, parce que ce n’est jamais agréable quand des gens vous hurlent dessus. C’est irritant, et on a tendance à répondre à l’agressivité par l’agressivité. Je ne suis pas sûr d’être totalement d’accord avec ça, mais j’essaie de comprendre les raisons pour lesquelles les gens crient (et j’essaie aussi de ne pas répondre trop rapidement, parce qu’en général ça n’aide pas la situation, quelle qu’elle soit).

Alors oui, des féministes utilisent la violence, qu’elle soit physique ou morale. Et si ça vous dérange, ça veut dire que ça marche. Vous devriez poser des questions et tenter de comprendre pourquoi elles sont en colère, au lieu de leur dire de se calmer.

Au sujet de la liberté d’expression

Par ailleurs, je suis contre la censure. Ça veut dire que je condamne le fait de brider la parole. Je veux que les nazis puissent exprimer leurs idées, car c’est comme cela que vous pourrez trouver leurs idées dangereuses. Et je veux que les misogynes puissent le faire aussi, parce que c’est comme ça que vous les reconnaîtrez. Et c’est également le seul moyen d’échanger avec eux autour du problème.

Mais la liberté d’expression va dans les deux sens. Ce n’est pas parce que quelqu’un est autorisé à dire quelque chose qu’il n’a pas le droit d’être contredit, décrié, puni ou autre. Vous avez le droit de faire des blagues sexistes. Et j’ai le droit de vous dire qu’elles ne sont pas drôles. J’ai même le droit de le dire à tout le monde. Si vous ne le voulez pas, et que vous préférez pouvoir dire ce que vous voulez sans conséquences, alors vous défendez la censure.

Alors oui, ça me dérange, ce qui est arrivé à BSides (voici le point de vue de Violet , et celui de AdaInitiative. Pour résumer, une conférence sur le sexe et les drogues, qui avait été annoncée, a été supprimée de l’agenda à cause de la peur d’une chasse aux sorcières par l’équipe du BSides (que ce soit à l’initiative d’AdaInitiative ou non n’est pas très clair à mes yeux) au prétexte qu’il pourrait y avoir des victimes de viol qui auraient pu être stressées (il semble que c’est comme ça que les troubles de stress post-traumatiques) si elles avaient assisté à la conférence, et que parler de la façon dont les drogues fonctionnent, en particulier le GHB, dans une conférence nommée « Sexe et drogues : vulnérabilités connues et méthodes d’exploitation » serait une incitation au viol.

L’argument est que, dans les conférences de hack, les gens font des sujets nommés « Vulnérabilités connues et méthodes d’exploitation » pour encourager l’exploitation de ces vulnérabilités. Et bien c’est une idée fausse. La plupart de ces conférences se préoccupe plus d’expliquer comment se protéger contre ces vulnérabilités plutôt que comment les exploiter.

En général, ces vulnérabilités sont patchées au cours de la conférence, ou du moins, les gens qui gèrent le logiciel en question travaillent dessus (s’ils prennent leur boulot au sérieux, je veux dire). Bien sûr, certains les utilisent pour leur propre profit, mais il s’agit d’une minorité.

Et en réalité, les gens qui utilisent ces vulnérabilités pour leur propre profit n’ont pas intérêt à ce que celles-ci soient connues. Les rendre publiques est de la prévention et de l’éducation, ce n’est pas fait pour mettre en danger les gens. C’est comme ça que la prévention fonctionne.

Maintenant, faut-il faire de la prévention dans la communauté technophile ? Bien sûr qu’il le faut. Il y a tout un historique d’agressions sexuelles et de viols dans ce genre de conférences. Si vous refusez d’en parler, vous ne pouvez éduquer les gens et vous ne les changerez pas. AdaInitiative disent qu’ils organisent leur propre camp pour en discuter. Mais c’est comme faire une campagne de prévention des drogues dans un camp de scouts : vous n’aiderez pas des drogués à gérer leur addiction.

Alors oui, il nous faut éduquer nos camarades hackers, particulièrement lors d’occasions où il y a beaucoup d’alcool, de drogues et de manque de sommeil, parce que tout cela change votre perception des choses. Alors en parler est une nécessité. Et, si la discussion devient offensante, alors les gens doivent le dire et le condamner, mais vous ne pouvez pas savoir comment ça se passera avant que ça n’arrive.

Il y a toujours ce problème avec les victimes de viols et les TSPT. Je peux comprendre que des gens ayant subi une agression et/ou un viol n’aient pas envie d’être exposés à une conférence qui en parle (hé, c’est à eux de gérer leur souffrance comme ils l’entendent). Et il semble qu’il y ait une coutume autour des « trigger warnings », que je ne comprends pas tout à fait (ça semble fonctionner un peu comme les labels « PEGI » pour les jeux vidéos).

Fin

Hmm, je pense avoir loupé plusieurs points. Ou je peux me planter sur d’autres. Si vous le pensez, faites-le moi savoir. Vous pouvez me trouver assez facilement.

« Je ne suis pas féministe, je suis égalitariste »

Depuis quelques temps que je m’implique activement dans les débats sur le féminisme, il y a cet argument, qui revient souvent, et qui est non seulement inutile, mais surtout contre-productif. Je m’explique.

Lorsqu’on défend les valeurs féministes, par exemple en dénonçant un comportement sexiste, on a tendance à heurter la sensibilité des hommes, qui ne comprennent pas le problème. Se sentant attaqués, ils cherchent nativement à discréditer les attaques. Lorsqu’il s’agit de défenseurs de l’égalité, il est difficile de trouver des arguments cohérents. Alors ils attaquent la forme, à commencer par le nom « féminisme ».

« Je suis antiféministe ».

J’ai eu envie de mettre une très grosse paire de claques à l’auteur de cette phrase, que je considère comme un ami, et qui est très engagé dans les mêmes valeurs que moi : la défense des libertés, l’égalité, le partage. Se déclarer anti-féministe, ce n’est ni plus ni moins que de se déclarer contre l’égalité des genres. Parce que le féminisme n’a jamais été la lutte contre les hommes. Mais le fait est qu’avec des réactions spontanées comme celle-ci, il est vrai qu’on a rarement envie de faire un câlin à leur auteur.

Pourquoi se déclarer « antiféminisme », en fait ? Parce qu’on croit qu’il ne faut pas favoriser les femmes, et que la discrimination positive c’est mal ? Je suis assez d’accord, mais on ne parle pas de discrimination positive, ici.

Discrimination ?

Le féminisme, tel que je le vois (et tel qu’il est vu par celles et ceux qui partagent ces valeurs), c’est la lutte pour l’égalité des genres. Et, accrochez-vous bien, ça marche dans les deux sens. Les petites habitudes ancrées dans la société, comme celle qui veut qu’on paie le restaurant à une femme, sont aussi du sexisme, et sont aussi mal vues. Notez tout de même l’échelle : ce que les femmes vivent à cause du sexisme, c’est par exemple la peur constante d’être agressées lorsqu’elles se retrouvent dans la rue, tandis que ce que les hommes redoutent le plus, c’est de « devoir » payer le restaurant. Alors on combat toutes les formes de discrimination basées sur le genre, mais soyez honnêtes : ce sont les femmes, en immense majorité, qui en sont victimes.

Pourquoi on parle de féminisme, et pas d’égalitarisme ? Pour cette raison. Parce qu’on ne se voile pas la face, qu’on admet que le problème touche essentiellement les femmes, et parce qu’il ne faut pas l’oublier ni le nier. Ça s’appelle les « male tears », et c’est une réponse fort courante, quand on évoque des problèmes de sexisme : un homme répond « oui mais regardez-moi, j’ai des problèmes moi aussi », dans le but de détourner l’attention du problème initial (souvent en se cachant derrière un problème tout à fait minime). Demander à ce qu’on parle d’« égalitarisme » à la place de « féminisme », c’est la même logique : on détourne le regard du fait que ce sont quasi-exclusivement les femmes qui en sont victimes, on exige, en notre qualité de mâle, de profiter aussi de ce combat (alors que c’est déjà le cas), mais surtout, qu’on enlève cette référence exclusive aux femmes !

Alors on se dit « ho, faut pas le prendre comme ça, je cherche pas à mal, je veux juste qu’on soit précis sur le terme ». Mais l’effet concret est que l’on attaque les gens qui parlent de ces problèmes, qu’on les discrédite. Donc pour le coup, oui c’est antiféministe, parce qu’on utilise des arguments de forme pour dénigrer les arguments féministes. On se place contre eux, parce qu’on n’aime pas le nom. C’est ridicule, et c’est totalement contraire aux valeurs que la plupart de ceux que je connais défendent.

Féminisme VS masculinisme

Si vous avez suivi, on peut résumer bêtement « féminisme = lutte pour l’égalité ». Mais alors, quid du masculinisme, dont on entend parler ces derniers temps ? S’agit-il du pendant masculin de la lutte pour l’égalité ? C’est tout le contraire, en fait.

Pourquoi ne serait-ce pas le cas ? Parce que dans nos sociétés lourdement sexistes, l’homme est toujours en haut. C’est lui le privilégié, c’est lui qui a mis en place ce sexisme pour rester à la « bonne » place. Alors, lutter pour que les femmes soient mieux considérées, et appeler ça le masculinisme ? Ça n’a pas de sens. Par contre, lutter pour conserver, et même augmenter ses privilèges, ça ce sont les valeurs du masculinisme. Chercher à faire taire la lutte féministe, parce qu’on ne voudrait surtout pas partager le trône : « on n’est pas bien, entre couilles ? ». Le masculinisme, c’est la lutte pour le retour de la femme à la cuisine, pour revenir sur leurs droits. En somme, le culte du patriarcat.

Les privilèges masculins

Le simple fait d’être un homme a beaucoup d’implications en termes de sexisme. Vous pouvez être fervent féministe, il est important de ne pas ignorer cet état de fait : la société est construite sur des valeurs sexistes, et les hommes sont privilégiés. Par exemple, si vous êtes un homme :

  • pensez-vous régulièrement à la façon dont vous réagiriez si vous étiez agressé dans la rue ?
  • vous fait-on des remarques si votre tenue vestimentaire est trop provocante, ou même pas assez ?
  • vous traite-t-on spontanément comme responsable si vous vous faites agresser ? (exemples : « tu es sûr que tu ne voulais pas ? », « c’est normal, vu comment tu étais habillé », « fallait pas sortir tout seul »…)
  • considère-t-on que vous devez être protégé en permanence par quelqu’un du genre opposé, car vous ne savez pas vous défendre ?

Si vous avez répondu « oui » à ces affirmations, soit vous êtes d’une affligeante mauvaise foi, soit votre style de vie vous a certainement fait comprendre que, dans la majorité des cas, être un homme était mieux perçu en société. Les hommes ont le privilège de ne pas avoir peur en permanence dans la rue (une rue standard d’une ville standard d’un pays en paix, disons). Les hommes ont le privilège de ne même pas être conscients de ce privilège. Ce n’est pas un reproche, puisque ce n’est pas la faute des hommes, mais de la société. Seulement, il faut le savoir. Il faut savoir ce que peut être la vie d’une femme aujourd’hui. Je suis prêt à parier que ça fera relativiser certains qui trouvent que « les féministes en font un peu trop ».

Le mot de passe : Pourquoi, comment ?

On entend tout et son contraire au sujet des mots de passe et de leur gestion, en informatique. Alors je vais tenter de faire le point, en prenant tour à tour le point de vue de l’utilisateur, et du développeur en charge de la sécurité d’une application.

Côté utilisateur

Pourquoi un mot de passe ?

Un mot de passe est un élément d’authentification. Il s’agit d’une donnée secrète, normalement connue d’une seule personne. Pour vérifier qu’un interlocuteur est légitime, on vérifie s’il connaît ce secret partagé. Naturellement, dans une utilisation aussi simpliste (on ne parle même pas d’informatique), il apparaît naturellement que, lorsque l’on « prouve » son identité en fournissant le mot de passe, on n’est plus le seul à le connaître. Et que donc, si on l’utilise auprès de plusieurs tiers, ceux-ci peuvent se faire facilement passer pour nous. Si cela est possible, la sécurité apportée par le mot de passe est totalement compromise.

Faiblesses

On pense alors naturellement à utiliser un mot de passe différent pour chaque interlocuteur. Ça a du sens : si je m’authentifie avec un mot de passe a auprès de Alpha, mais que je n’utilise a nulle part ailleurs, Alpha n’aura que faire de ce mot de passe. Il ne pourra se compromettre que lui-même. Il est donc important de nepas réutiliser un mot de passe.

Réutilisation de
mot de passe — XKCD

Un mot de passe est censé être un secret. Donc pas devinable. Pour cela, il faut évidemment qu’il ne soit pas « logique ». Il est malheureusement plus que courant que des utilisateurs choisissent comme mot de passe leur date de naissance, le nom de leur poney, ou bien les premières lettres de leur clavier (quand ce n’est pas tout simplement « password » ou « 0000 »). Du coup, si je cherche à deviner le mot de passe de quelqu’un, j’ai tout à gagner à essayer ces combinaisons-là. Et ne vous dites pas « pas grave, j’ai mis une majuscule dans le nom de mon chien », ou « j’ai rajouté 007 à ma date de naissance », car cette attaque, appelée bruteforce, permet d’essayer des centaines milliers de combinaisons par seconde, et ce sans grand effort. Proscrivez impérativement les mots de passe simples à deviner.

Comment ?

Comment, alors, générer un mot de passe suffisamment robuste pour garantir un niveau de sécurité minimal ? Il y a plusieurs possibilités :

  • utiliser un générateur aléatoire. Il en existe une floppée en ligne, mais n’oubliez pas que si vous acceptez un mot de passe généré par une page web, vous n’êtes pas seul à le connaître. Cela s’apparente à de la paranoïa, mais c’est rarement une bonne idée de faire courir un risque à son mot de passe dès sa génération. Il existe cependant des logiciels libres (dont le comportement est donc vérifiable) qui proposent de telles fonctionnalités. Par exemple, Keepassx, en plus de sa fonctionnalité principale que je détaillerai plus bas, dispose d’un certain nombres de possibilités pour générer un mot de passe.
  • utiliser un mot de passe principal, modifié pour chaque usage. C’est à dire que chaque site utilisera un mot de passe différent, mais qu’à partir du mot de passe principal et d’une donnée en relation avec le site, vous serez capable de retrouver le mot de passe particulier. Mettons par exemple que vous ayiez un compte sur site example.org, et que votre mot de passe principal est « pinkiepieisthebestpony » (on se refait pas…). Le mot de passe pour ce site pourrait être, par exemple, « peixnakmipelpei.eoirsgtehxeabmepsltep.oonry », soit le mix des deux noms, en répétant si besoin le nom du site, et à raison d’une alternance d’une lettre à l’autre. Si vous vous contentez de concaténer les deux valeurs, si un mot de passe vient à être connu (et vous n’avez pas à faire confiance en un site), il sera aisé de comprendre quel est le mot de passe principal, et toute votre sécurité est compromise.
  • utiliser une dérivation de la méthode principale : vous avez un mot de passe principal et un nom de site. La différence est que vous allez rendre illisible le résultat, en le hachant par exemple. Pour ce faire, passez le mot de passe dans un algorithme de hachage (sous GNU/Linux, il y a ça sur à peu près tous les systèmes : il suffit de taper echo <mot de passe> | sha1sum, et vous obtenez une chaîne identifiant votre mot de passe. Je couvrirai le principe du hachage dans la deuxième partie du billet. Mais ainsi, aucune partie du mot de passe principal n’est envoyée au site. L’inconvénient est évidemment qu’il faut avoir l’utilitaire de hachage choisi sous la main (il est bien évidemment proscrit d’utiliser un service en ligne pour ça, car votre mot de passe n’a pas à sortir de votre machine en clair).

Une autre implémentation de cette solution m’a été indiquée : il s’agit d’une simple page HTML, que vous pouvez (et devriez) copier en local avant de l’utiliser. Ensuite, à partir d’un mot de passe principal et un nom de site/service, un mot de passe unique sera généré. utiliser d’autres méthodes d’authentification, lorsque cela est possible. Par exemple, si vous utilisez ssh, il est possible de s’authentifier par le biais d’une clé DSA/RSA, ce qui est une méthode par la possession, en opposition avec une méthode par le connu*. En clair, un serveur disposant de votre clé publique ne peut pas la réutiliser pour se faire passer pour vous, vu qu’il ne s’agit pas d’un secret partagé.

Mieux que le mot de passe : la phrase de passe

Phrase de
passe — XKCD

Sémantiquement, une phrase est une suite de mots. C’est cela dont il s’agit. Mais pas une suite de mots de passe, tels que « 6fQuhYP4EC EB9bWpLy78 6XcMGS5Y2P ». Une suite de mots courants de votre langue maternelle. Supposons une liste de 1750 mots courants français , dans laquelle on piochera quelques mots totalement au hasard. 5 mots peuvent suffire. Par exemple, ceux-ci :

nain, jambon, debout, désordre, mouchoir

Je le répète, il est crucial de choisir au hasard ces mots. On a sinon tendance à penser à des mots inspirés par notre environnement direct, et il suffit alors de connaître cet environnement pour deviner les mots possibles. Ici, les mots sélectionnés n’ont strictement aucun lien. D’un point de vue statistique, on a donc 1750^5 possibilités pour générer une phrase de passe par la méthode décrite. Mais le plus important est la possibilité de la remémorer. Car il est difficile, et il n’y a aucun moyen intelligent de retenir un mot de passe. Mais une phrase composée de mots courants peut être facilement mémorisée. Par exemple, imaginons une situation pouvant expliquer ces choix de mots :

un nain mange du jambon debout car c’est le désordre, et il n’a pas de mouchoir

Vous avez déjà retenu cette phrase de passe. Et elle est raisonnablement solide. Pour donner une idée de grandeur, avec 9 caractères alphanumériques contenant des majuscules, on a moins de possibilités (58^9). Et la complexité de mémorisation est incomparable.

Le problème avec cette solution est le besoin d’aléa. Elle n’est efficace que si les mots n’ont réellement aucun rapport, et la majorité des gens à qui on demande ça piocheront invariablement dans leur environnement.

Autres méthodes d’authentification

J’ai volontairement ici fait l’impasse sur les autres méthodes d’authentification, par exemple basées sur les tokens ou clés asymétriques. Non pas qu’il s’agisse de mauvaises solutions, bien au contraire, mais le seul thème des mots de passe est suffisamment complexe et intéressant à traiter.

Il faut également garder en tête un principe simple : c’est un être humain que l’on cherche à authentifier. C’est à dire qu’à partir d’un certain niveau de robustesse du mot de passe, le maillon faible devient évidemment l’utilisateur, et on ne peut pas l’améliorer informatiquement (sauf en le transformant en cyborg, mais ça mériterait de donner lieu à un autre billet).

Le mythe de la sécurité
— XKCD

Qu’en faire ?

On le dira toujours : on n’écrit pas un mot de passe. Ni sur un post-it collé sur son écran, ni sous son clavier, ni même dans un fichier ~/.keywords (ou autre). Mais naturellement, lorsque l’on est amené à connaître un grand nombre de mots de passe, il devient impératif de trouver une solution, sous peine de réutiliser les mots de passe ou de les rendre trop simples à découvrir, parce que ce sera naturel de ne pas perdre 10 minutes à se remémorer le moindre mot de passe.

Quoi qu’on en dise, il peut donc être justifié de noter ses mots de passe. Mais certainement pas en clair. Il existe plusieurs possibilités de bases chiffrées, comme par exemple la fonctionnalité de mot de passe principal de Firefox répond à ce besoin : les fichiers enregistrés dans le navigateur sont naturellement écrits sur le disque, mais sous une forme chiffrée par un mot de passe principal qui, lui, doit être retenu par l’utilisateur. Une autre possibilité est Keepassx, dont je parlais plus haut. Il s’agit d’un logiciel libre et interopérable, proposant les options qu’on s’attend de voir avec un tel logiciel. Quelques précautions de base s’imposent :

  • Ne mettez pas tous vos œufs dans le même panier. Faites en sorte qu’un fichier de mots de passe compromis ne puisse porter préjudice qu’à une chose.
  • Ne stockez que les mots de passe que vous ne pouvez pas retenir (faites un effort).
  • Ne lésinez pas sur la sûreté du mot de passe principal. Keepassx permet d’utiliser une clé (sous forme de fichier), un mot de passe, ou… les deux. Préférez les deux, il s’agira d’une authentification forte, et il est généralement préférable d’en avoir pour protéger des mots de passe. La clé ne doit pas se trouver à côté du conteneur (elle devrait rester avec vous et non sur la machine), et le mot de passe doit évidemment être robuste.
  • Et le plus important : les clés sont présentes en clair en mémoire lorsque le conteneur est ouvert. Donc refermez-le immédiatement après usage.

Côté développeur

Pourquoi un mot de passe ?

Un mot de passe est un élément d’authentification. Il s’agit d’une donnée secrète, normalement connue d’une seule personne. Pour vérifier qu’un interlocuteur est légitime, on vérifie s’il connaît ce secret. Naturellement, dans une utilisation aussi simpliste (on ne parle même pas d’informatique), il apparaît naturellement que, lorsqu’un utilisateur nous « prouve » son identité en fournissant son mot de passe, on le connaît aussi. Ce « on » peut être un site web, une société, bref plusieurs personnes peuvent avoir accès aux données. Et on a la responsabilité vis-à-vis de l’utilisateur de protéger son élément d’authentification.

Premièrement

On n’enregistre jamais le mot de passe d’un utilisateur en clair. Jamais jamais. Vraiment. Parce qu’il suffit de jeter un œil à la base de données, d’une façon ou d’une autre (par une intrusion informatique, ou par l’action d’un employé malveillant). Tout ce dont on a besoin est de pouvoir vérifier que le mot de passe d’un utilisateur est correct. Cela ne requiert pas nécessairement d’avoir soi-même le mot de passe pour le comparer.

Chiffrer ?

La cryptographie, l’art de rendre un message illisible à quiconque ne lui est pas destiné, c’est très bien. Mais chiffrer les mots de passe des utilisateurs avant de les stocker en base de données n’est pas une bonne idée. Car, si on doit pouvoir comparer le mot de passe, le destinataire du message se retrouve être l’application web qui l’a elle-même chiffrée. On retrouve alors le même problème : quiconque a accès à l’application peut déchiffrer facilement les mots de passe. En réalité, il faut qu’il soit impossible de retrouver les mots de passe.

Hacher

Il existe des fonctions cryptographiques qui permettent de générer des sommes de contrôle, des chaînes raisonnablement uniques construites à partir d’un message, ne permettant théoriquement pas de retrouver le message d’origine. Ainsi, deux chaînes proches génèrent deux empreintes parfaitement différentes. On peut se servir de ce principe pour ne stocker en base de données que les empreintes des mots de passe des utilisateurs. Lorsque quelqu’un tente de s’authentifier, il envoie son mot de passe, et notre application en génère l’empreinte, puis compare les deux empreintes. Si elles sont identiques, l’authentification est validée.

La fonction de hachage la plus connue est sans doute le MD5. Ne l’utilisez pas. Il est bien trop faible, et il est aujourd’hui facile, par le biais de tables de correspondances, de retrouver une chaîne capable de générer une empreinte donnée. Il y a bien d’autres algorithmes plus fiables. Nous verrons cela plus tard.

Saler

Il existe, pour les algorithmes courants (essentiellement md5 et sha1), des rainbow tables, fichiers contentant de grandes quantités d’empreintes, associées à la chaîne hachée. Ainsi, même avec les mots de passe hachés en base, il est parfois possible (notamment lorsque les utilisateurs ont de mauvaises habitudes d’utilisation de mots de passe) de retrouver un mot de passe à partir de son empreinte. Pour cela, on va ajouter un grain de sel, rendant l’empreinte plus unique. Concrètement, il s’agit d’un élément rajouté au mot de passe avant de le hacher. On peut par exemple définir une chaîne aléatoire, stockée en clair dans notre application (à un autre endroit que la base de données), qui sera ajoutée à la fin de chaque mot de passe avant qu’il passe à la moulinette du hachoir. Si notre sel est suffisamment grand et aléatoire, il a peu de chances d’être présent dans les rainbow tables.

Autre problème : peu importe l’algorithme, son principe est de générer une empreinte unique pour une chaîne donnée. Par conséquent, si deux utilisateurs utilisent par hasard le même mot de passe, leur empreinte sera la même. Ce qui n’est pas un dysfonctionnement de l’application, mais permet à un attaquant d’en déduire que les deux utilisateurs possèdent le même mot de passe. Si par hasard (et avec un peu de volonté et de patience), il s’avère que l’un des utilisateurs a écrit son mot de passe sur un post-it sur son écran, ou plus probablement s’il tombe dans le piège d’un mail de phishing, il est alors trivial de compromettre le second. Il est alors important d’ajouter un niveau de sécurité au stockage des mots de passe de notre application.

Ce dernier problème est lié au fait que notre sel est statique : on utilise le même pour tous les utilisateurs, donc on ne se prémunit pas de mots de passe identiques. Il faut alors rendre le sel dynamique, autrement dit d’en utiliser un différent pour chaque utilisateur. On peut par exemple utiliser l’identifiant unique d’un utilisateur comme base de sel (car un identifiant seul est trop court). Utilisons donc l’empreinte de l’identifiant, comme sel pour générer l’empreinte du mot de passe. Tous nos mots de passe seront donc bien différents en base. On a fini ?

Non.

Le sel est alors assez faible, car devinable (il s’agit de l’empreinte d’un identifiant numérique probablement auto-incrémenté, et parfois connu de tous les utilisateurs, si par exemple on l’utilise dans les URL. En gardant l’idée d’utiliser un sel dynamique, on peut le générer nous-mêmes, de façon pseudo-aléatoire. Il convient ensuite de le stocker, évidemment, sinon nous ne pourrons pas vérifier ultérieurement le mot de passe. Donc on a un sel, enregistré à côté de l’empreinte. Si ces données sont compromises, il n’est normalement pas possible (sauf faiblesse dans l’algorithme) de revenir au mot de passe initial à partir de ces éléments. À ce niveau-là, on a une sécurité acceptable pour notre application. Voyons jusqu’où on peut monter, et quels en sont les coûts.

Aller plus hauuuut ♫

Au stade où nous en sommes, il est toujours possible, si l’on parvient à récupérer les informations en base de données, d’attaquer sauvagement l’empreinte au bruteforce. Je répète le principe : on teste toutes les chaînes possibles avec cet algorithme, en y ajoutant le sel, jusqu’à ce que ça passe. Il est possible d’handicaper très sérieusement cette attaque : en utilisant une fonction de hachage lente. Car, si pour une application, on cherche à obtenir le meilleurs temps de réponse possible, l’étape d’authentification est normalement unique par session, et il ne s’agit pas d’une étape qui nécessite une grande réactivité. D’un autre côté, rendre plus lent le calcul d’une empreinte peut passer inaperçu auprès de notre utilisateur, tandis qu’un attaquant qui cherche à tester des millions de chaînes mettra beaucoup plus de temps à réaliser son attaque. Pour cela, on peut utiliser l’algorithme scrypt, auquel on peut demander de passer un temps donné sur le calcul d’une empreinte, ce qui fera différer celle-ci. Attention : scrypt est le nom de deux applications séparées : un utilitaire de chiffrement symétrique, et un algorithme de dérivation de clé. C’est ce dernier qui nous intéresse. Il faut également savoir que scrypt n’est pas présent par défaut dans tous les langages. Par exemple en python, il vous faudra installer (via pip) scrypt). Avec une durée d’exécution nettement supérieure aux autres méthodes, celle-ci est raisonnablement résistante au bruteforce.

Attention toutefois. L’utilisation de cet algorithme passe par un module tiers. Donc pas forcément validé par des experts. Et récupéré, via pip, en http en clair. Il n’y a donc pas de certification au sujet de ce code. Vous devez donc, avant de l’utiliser, vous assurer par vos propres moyens que ce module est digne de confiance.

Encore un peu ?

L’état de l’art consiste maintenant à isoler la partie de vérification du mot de passe, de façon matérielle si possible, en utilisant un HSM. On peut toutefois, et pour une sécurité moins bonne, opter pour une isolation logicielle, par exemple en désignant une machine virtuelle isolée du réseau, et accessible uniquement depuis notre application, qui sera seule à pouvoir traiter l’authentification. Ainsi, si notre application est compromise, la partie authentification est intacte, et les empreintes ne sont même pas connues (sauf compromission totale de l’infrastructure, évidemment, donc il ne faut pas négliger une bonne gestion des données confidentielles), même au sein d’un tel module.

Trop c’est trop ?

Sachez rester en terrain connu. Vous n’êtes pas un expert reconnu en cryptographie, alors n’inventez pas la roue. Ne vous dites jamais que jouer au petit chimiste et piocher ça et là des algorithmes que vous appliquerez les uns au-dessus des autres renforcera votre code, car c’est l’inverse qui se passera : vous ne saurez pas ce que vous faites, et il ne s’agira certainement pas d’une recommandation sérieuse de sécurité.

De la même façon, n’essayez jamais de créer votre algorithme de sécurité. Faites-le pour rire dans votre coin si vous voulez, mais ne vous amusez en aucun cas à l’utiliser en production, tant qu’il ne s’agira pas d’un standard reconnu.

Conclusion

Le mot de passe est une donnée critique dans un Système Informatique, et doit être traité en connaissance de cause. Il n’est pas nécessaire d’être un expert pour respecter les bons usages, il faut simplement qu’ils soient connus. Pour finir, je vous conseille un billet qui traite du même sujet en plus technique, en abordant d’autres points de vue.

Les images de utilisés sont l’œuvre de Randall Munroe, et sont publiées sous licence CC-by-nc sur XKCD.

Merci à Geoffroy Couprie, Skhaen, Rogdham et Progval pour la relecture et les ressources