arthur.bebou

Le site arthur.bebou.netlib.re - retour accueil

git clone git://bebou.netlib.re/arthur.bebou
Log | Files | Refs |

index.sh (34923B)


      1 #! page
      2 title: Kun, un outil de sondage
      3 author: Arthur Pons, Pierre Noro
      4 description: Génèse, fonctionnement et utilité de Kun, un outil pour faire des sondages notamment pour la prise de rendez-vous
      5 publication: 2022-12-21
      6 sectionmd: main
      7 
      8 
      9 Du mot finlandais pour "Quand" comme dans "On se voit quand ?", Kun est un
     10 outil permettant de faciliter la prise de rendez-vous à distance pour des coûts
     11 humains, techniques et financiers faibles. Sur une idée et une implémentation
     12 originale de Marc Chantreux. Merci à Pierre Noro pour la relecture.
     13 
     14 ## Enoncé du problème
     15 
     16 Vous et une collègue de travail devez vous voir pour discuter d'un sujet
     17 relativement urgent. Vous ne vous croiserez pas dans les jours qui viennent et
     18 devez donc vous mettre d'accord sur une date à distance. Vous regardez vos
     19 disponibilités dans votre agenda et écrivez le mail suivant :
     20 
     21 > Salut,
     22 > 
     23 > Pour le point au sujet de la migration de machin je suis dispo demain
     24 > après-midi sinon mardi 26 et jeudi 28 à partir de 15h.
     25 > 
     26 > A plus,
     27 > Camille
     28 
     29 Ce à quoi elle répond :
     30 
     31 > Bonjour,
     32 
     33 > C'est ok pour moi mardi mais plutôt 15h15, j'ai réunion de pôle jusqu'à 15
     34 > et ça déborde souvent.
     35 > 
     36 > A mardi,
     37 > Sasha
     38 
     39 Puis :
     40 
     41 > Aucun souci, à plus !
     42 > 
     43 > Camille
     44 
     45 Cet échange est banal mais il contient de nombreuses étapes et informations.
     46 Camille a communiqué son but. Elle a proposé trois dates sous plusieurs formats
     47 différents. "Demain après-midi" est une date assez floue relative à la date
     48 d'envoi du mail. "mardi 26 et jeudi 28 à partir de 15h." est plus précise, en
     49 supposant que le contexte rende l'année et le mois évidents. Sasha a elle amendé
     50 la demande et reçu une réponse favorable. Le rendez-vous est pris, ce sera
     51 mardi 28 15h15.
     52 
     53 On constate que malgré les ambiguités et la modification d'une des dates
     54 proposées, l'échange s'est bien passé. Cela est probablement dû à deux choses.
     55 Premièrement l'humain est incroyablement performant - du moins par rapport à
     56 une machine - quand il s'agit gérer des données et situations ambiguës.  Cela
     57 peut induire en erreur ou ralentir la prise de décision mais la présence de
     58 deux formats de dates ambiguës et différents ne représente pas d'obstacle
     59 majeur à la prise de rendez-vous. Le compromis sur l'heure de début de la
     60 réunion non plus, il est raisonnable et justifié. Deuxièmement, le rendez-vous
     61 ne se fait qu'entre deux personnes. Nous avons toutes et tous fait l'expérience
     62 de l'explosion de la complexité de notre problème en fonction du nombre de
     63 personnes impliquées. Non seulement la quantité de créneaux disponibles sera au
     64 mieux équivalente et presque toujours plus faible, mais les soucis d'ambiguïté,
     65 de compromis et d'éventuelles erreurs qui n'étaient que de simples détours dans
     66 une conversation fluide deviennent des casses-têtes.
     67 
     68 La solution à ce problème a été apportée par des outils webs de planification,
     69 largement popularisée par [Doodle] et son alternative libre [Framadate](https://framadate.org)[^1]. Ces outils prennent une approche
     70 technique et, disons le, très dirigiste. Le problème de l'ambigüité est résolu
     71 en proposant des interfaces web graphiques dans lesquelles l'utilisateurice
     72 (utilisateur et utilisatrice en un mot) ne peut qu'insérer des données
     73 correctes et non ambiguës. Les sondages ainsi créés doivent être stockés durant
     74 une certaine durée afin que les destinatairices puissent y accéder et
     75 éventuellement voir les réponses des autres. Pour corriger ses erreurs le
     76 service doit pouvoir générer un état qui se souvient de chaque réponse et, a
     77 minima, un lien pour y retourner quand ce n'est pas un système complet de
     78 gestion de compte. Si le service possède un système de gestion de compte, une
     79 partie du travail est déjà fait pour synchroniser les sondages avec des
     80 calendriers existants et préremplir les réponses. Et ainsi de suite.
     81 
     82 Bien que ces outils aient pu être simples par le passé, ils sont aujourd'hui
     83 remplis de fonctionnalités complexes. Cela a un coût, Doodle emploie 3600
     84 personnes (même si l'on imagine bien qu'elles ne sont pas toutes
     85 informaticiennes). Framadate est paraît il difficile à maintenir, framasoft ne
     86 souhaite plus le faire évoluer. Même si dans ce registre il y a très évidemment
     87 de plus gros poissons auxquels s'attaquer on peut se poser la question de
     88 l'impact environnemental de ces services qui, comme le reste du secteur du
     89 numérique, nécessitent matériel et énergie.
     90 
     91 De plus, leurs interfaces figées et graphiques génèrent de la dépendance et
     92 nuisent à l'accessibilité. 
     93 
     94 Pour trouver une date de réunion plus ou moins tout le monde saurait se mettre
     95 d'accord sur les données à manipuler et les critères de décision à privilégier.
     96 Du moins dans le monde du travail français je pense que ce sont des choses
     97 assez consensuelles. Et pourtant vous êtes dépendants ou dépendante puisque ces
     98 éléments sont choisis pour vous par des personnes qui vous sont éloignées
     99 (physiquement, culturellement...) voir pas tout à fait humaines quand ce sont
    100 des organisations. Ce n'est pas nécessairement une mauvaise chose, il est tout
    101 à fait raisonnable d'accepter d'être dépendant des constructeurs d'IRM quand
    102 cet outil peut vous sauver la vie en permettant aux médecins de prévenir un
    103 cancer du cerveau. C'est moins raisonnable quand vos habitudes de travail ou
    104 celles d'une association locale sont remises en questions parce que Doodle a
    105 unilatéralement pris la décision de changer totalement d'interface graphique
    106 (un éventuel cas d'étude sur ce sujet à venir) ou d'empêcher un ou une
    107 utilisateurice de répondre pour un ou une autre qui n'aurait pas d'ordinateur
    108 ou momentanément pas de réseau. Quid du temps perdu à se former, se déformer,
    109 se reformer à chaque changement, à devoir jongler avec les abstractions
    110 visuelles d'un service pour en appréhender de nouvelles sur un autre ? Qu'en
    111 est-il du stress induit par le remplacement d'un service par un autre parce
    112 que, face à la complexité rampante des fonctionnalités, la pression de se
    113 conformer aux standards graphiques des GAFAMs et les moyens limités des
    114 organisations notamment publiques, il est préférable de maintenir quelque chose
    115 d'aussi bête qu'un logiciel de prise de rendez-vous à une échelle nationale
    116 (voir Evento pour l'ESR) ?
    117 
    118 Au sujet de l'accessibilité le sujet est sans appel. Les interfaces graphiques
    119 de ces services font appel à nos représentations physiques du monde (cf le
    120 calendrier dans Doodle). C'est un joli raccourci mais elles ne sauraient se
    121 rendre palpable à, par exemple, une personne avec une déficience visuelle à
    122 moins d'y aller à grand coup de CSS et de balise HTML spécialisées, rajoutant
    123 ainsi une couche de complexité supplémentaire. On peut également noter que la
    124 création et la réponse à ces sondages est assez lente et requiert de beaucoup
    125 cliquer (ce qui peut également être une souci d'ergonomie chez certaines
    126 personnes).
    127 
    128 ## Quelques principes pour Kun
    129 
    130 Nous pourrions ici nous demander s'il n'y a pas d'autres chats à fouetter.
    131 Certainement. C'est justement le rapport entre service rendu (assez anodin et
    132 simple) et complexité (élevée) de cette catégorie d'application qui devrait
    133 nous mettre la puce à l'oreille : on peut mieux faire.
    134 
    135 Il ne s'agit pas d'essayer de faire un Doodle-like mais mieux. Trop souvent les
    136 productions des milieux alternatifs numériques, notamment les libristes, se
    137 sont faites en "alternative à", toujours en prenant un objet préexistant comme
    138 référence sans réaliser que cela implique d'en hériter le cadrage des besoins,
    139 la vision de ce à quoi l'informatique devrait nous servir. Pierre Noro
    140 l'explique bien dans un article dédié à la question du [cloud souverain].
    141 
    142 Il s'agit de reconnaître qu'aujourd'hui il n'existe pas de juste-milieu entre
    143 la conversation textuelle déconstruite entre deux personnes et le logiciel
    144 ultra complexe qui essaye de tout faire à lui tout seul. Pour qu'il soit
    145 réellement plus utile que la première option mais reste durablement plus simple
    146 que la seconde, il faut que notre système évite au moins d'avoir les même
    147 défauts que les Doodle-like. A savoir :
    148 
    149 	1. Qu'il ne se rende utile que là où l'informatique excelle, c'est-à-dire le
    150 	   formalisme et l'expression de données quantitatives pour aider les
    151 	   humains à partir d'une certaine échelle 
    152 
    153 Je pense qu'il convient ici de mobiliser la citation de Peter
    154 Salus au sujet de la philisophie Unix :
    155 
    156 >"Write programs that do one thing and do it well. Write programs to work
    157 >together. Write programs to handle text streams, because that is a universal
    158 >interface."
    159 
    160 Et la règle n°5 de Rob Pike à propos du développement en C :
    161 
    162 >"Rule 5. Data dominates. If you’ve chosen the right data structures and
    163 >organized things well, the algorithms will almost always be self-evident. Data
    164 >structures, not algorithms, are central to programming."
    165 
    166 Ce que ces citations nous enseignent c'est qu'il faut d'abord se préoccuper de
    167 la donnée qui est manipulée. C'est en la formalisant que les instructions de
    168 notre programme deviendront évidentes.
    169 
    170 En réalité ce que l'utilisateurice fait quand il ou elle rédige son mail ou
    171 construit son Doodle c'est faire une liste de dates. Si l'on reprend le premier
    172 mail, en partant du principe qu'il est envoyé le jeudi 21 avril 2022 et que
    173 l'après-midi commence à 14h, Camille a proposé la liste de dates suivante :
    174 
    175 Le vendredi 22 avril 2022 à 14h, fuseau horaire de la France métropolitaine
    176 Le mardi 26 avril 2022 à 15h, fuseau horaire de la France métropolitaine
    177 Le jeudi 28 avril 2022 à 15h, fuseau horaire de la France métropolitaine
    178 
    179 Nous avons déjà remarqué plus tôt qu'entre un petit nombre de personnes et dans
    180 un contexte particulier il n'y avait pas besoin d'être aussi précis entre deux
    181 humains - ce qui est, quand on y pense, la démonstration remarquable de
    182 l'intelligence des humains par rapport aux machines. Cependant, écrit comme ça,
    183 c'est aussi la démonstration que les opportunités de se tromper sont multiples
    184 surtout si les invité·e·s sont nombreux ou nombreuses. Est-ce que tout le monde
    185 vit dans le même fuseau horaire ? Est-ce que tout le monde parle la même langue
    186 ? Est-ce que tout le monde a l'habitude d'écrire ou de lire les dates sous ce
    187 format ? La gestion du temps et sa représentation en informatique est un sujet
    188 notoirement complexe, grand pouvouyeur de [memes].
    189 
    190 Il en ressort que la meilleure chose que l'on puisse faire pour notre problème
    191 est certainement de mettre tout le monde d'accord sur le format de date à
    192 s'échanger. C'est, je pense, la réelle plus-value des Doodle-like. Il est
    193 possible de se mettre oralement d'accord sur le format des dates, par exemple
    194 [ISO_8601].
    195 
    196 Pour minimiser les erreurs et se donner la possibilité d'automatiser certaines
    197 tâches, il peut être intéressant de se reposer sur un outil informatique
    198 existant. Afin de ne pas ajouter de complexité dans ce monde, d'être certain de
    199 prendre tous les cas en compte et d'utiliser un outil léger pouvant fonctionner
    200 sur presque tous les ordinateurs du monde, je propose de partir sur ce que
    201 l'utilitaire `date` prend en [argument]. J'y reconnais un grand travers, le
    202 logiciel peut imprimer des dates dans plusieurs formats différents en fonction
    203 de LC_TIME de la machine mais n'accepte que de l'anglais en entrée. Ainsi :
    204 
    205 	date -f-
    206 	next monday +17 hours
    207 	lun. 18 avril 2022 17:00:00 CEST
    208 	lundi prochain +17 heures
    209 	date: invalid date 'lundi prochain +17 heures'
    210 
    211 Ce qui est assez cocasse puisque cela veut dire que si votre LC_TIME n'est pas
    212 anglophone, `date` ne pourra pas lire ses propres sorties par défaut. Si l'on
    213 est prêt·e à faire fi de ce souci et à utiliser `date`, c'est un monde de
    214 possibilités qui s'ouvre à nous avec pour seul coût celui de s'être mis
    215 d'accord sur notre façon d'écrire les dates.
    216 
    217 Aussi, le comportement de `date` n'est pas constant à travers les UNIX. TODO retrouver l'article qui en parle.
    218 
    219 	2. Qu'il puisse fonctionner sans "service", de façon totalement décentralisé
    220 
    221 Très bien, nous voulons manipuler des dates qui soient lisibles et puissent
    222 être produites par `date`. Et alors ? Comment utilise-t-on ça ensemble ?
    223 Comment évite-t-on de recréer un service centralisé à la Doodle avec `date` qui
    224 tourne dans le backend ?
    225 
    226 Une personne veut organiser un rendez-vous avec 5 autres. Ces personnes se sont
    227 préalablement mises d'accord pour s'envoyer des dates compatibles avec `date`.
    228 La personne à l'initiative du rendez-vous écrit :
    229 
    230 > Salut à toutes et à tous,
    231 > 
    232 > Voici les créneaux dispos de la 511 pour le groupe de travail "Un centre de
    233 > calcul sans acheter de matériel neuf ?"
    234 > 
    235 > 2022-04-18T09:00+02:00
    236 > 2022-04-18T10:00+02:00
    237 > 2022-04-18T11:00+02:00
    238 > 2022-04-19T09:00+02:00
    239 > 2022-04-19T10:00+02:00
    240 > 2022-04-19T11:00+02:00
    241 > 2022-04-20T09:00+02:00
    242 > 2022-04-20T10:00+02:00
    243 > 2022-04-20T11:00+02:00
    244 > 
    245 > Bonne journée,
    246 > Camille
    247 
    248 Le format peut paraître opaque au premier regard mais est relativement simple.
    249 Les créneaux sont les 18, 19 et 20 avril à 9h ou 10h ou 11h sur le fuseau
    250 horaire +2h par rapport à l'UTC. Le message n'a plus aucune ambiguïté, est (à
    251 peu près) lisible pour un humain et assimilable par `date`. Il est également
    252 aussi accessible que le mail lui-même. Pour une personne en situation de
    253 handicap, elle n'a pas à se soucier de rendre le site Doodle accessible en plus
    254 de son client mail. Si le format est trop difficile à lire (ou à entendre
    255 donc), il peut parfaitement être appréhendé par `date`. Par exemple, si votre
    256 client mail est configuré de sorte à ouvrir les mails avec vim, vous pouvez
    257 poser le curseur sur le bloc de date, le sélectionner avec "vip" appliquer un
    258 filtre à la sélection avec "!" et taper la commande "date -f-" ce qui donne
    259 chez moi :
    260 
    261 	lun. 18 avril 2022 09:00:00 CEST
    262 	lun. 18 avril 2022 10:00:00 CEST
    263 	lun. 18 avril 2022 11:00:00 CEST
    264 	mar. 19 avril 2022 09:00:00 CEST
    265 	mar. 19 avril 2022 10:00:00 CEST
    266 	mar. 19 avril 2022 11:00:00 CEST
    267 	mer. 20 avril 2022 09:00:00 CEST
    268 	mer. 20 avril 2022 10:00:00 CEST
    269 	mer. 20 avril 2022 11:00:00 CEST
    270 
    271 On peut formatter la date comme l'on veut, avec date -f- +'author: %d %B à %Hh%M'
    272 par exemple :
    273 
    274 	lundi 18 avril à 9h00
    275 	lundi 18 avril à 10h00
    276 	lundi 18 avril à 11h00
    277 	mardi 19 avril à 9h00
    278 	mardi 19 avril à 10h00
    279 	mardi 19 avril à 11h00
    280 	mercredi 20 avril à 9h00
    281 	mercredi 20 avril à 10h00
    282 	mercredi 20 avril à 11h00
    283 
    284 Peu importe comment les destinatairices envisagent de lire ces dates, ils
    285 peuvent répondre au sondage simplement en supprimant les lignes qui ne leur
    286 conviennent pas. Il est par contre, nécessaire pour le traitement suivant de
    287 renvoyer un format que `date` puisse lire. Un exemple de réponse pourrait être
    288 :
    289 
    290 > Salut Camille,
    291 > 
    292 > Je peux être là sur ces créneaux :
    293 > 
    294 > 2022-04-18T09:00+02:00
    295 > 2022-04-18T10:00+02:00
    296 > 2022-04-19T09:00+02:00
    297 > 2022-04-20T09:00+02:00
    298 > 2022-04-20T10:00+02:00
    299 > 
    300 > A plus,
    301 > Sasha
    302 
    303 Pour combiner format plus lisible et rédaction simple de la réponse on peut
    304 appliquer un filtre zsh du type "cat > truc; paste truc =(date -f truc);rm
    305 truc" TODO trouver une meilleure solution
    306 
    307 	2022-04-18T09:00+02:00	lun. 18 avril 2022 09:00:00 CEST
    308 	2022-04-18T10:00+02:00	lun. 18 avril 2022 10:00:00 CEST
    309 	2022-04-18T11:00+02:00	lun. 18 avril 2022 11:00:00 CEST
    310 	2022-04-19T09:00+02:00	mar. 19 avril 2022 09:00:00 CEST
    311 	2022-04-19T10:00+02:00	mar. 19 avril 2022 10:00:00 CEST
    312 	2022-04-19T11:00+02:00	mar. 19 avril 2022 11:00:00 CEST
    313 	2022-04-20T09:00+02:00	mer. 20 avril 2022 09:00:00 CEST
    314 	2022-04-20T10:00+02:00	mer. 20 avril 2022 10:00:00 CEST
    315 	2022-04-20T11:00+02:00	mer. 20 avril 2022 11:00:00 CEST
    316 
    317 On supprime les lignes que l'on ne veut pas puis on nettoie avec `cut -f1` :
    318 
    319 	2022-04-18T09:00+02:00
    320 	2022-04-19T11:00+02:00
    321 	2022-04-20T09:00+02:00
    322 	2022-04-20T10:00+02:00
    323 	2022-04-20T11:00+02:00
    324 
    325 Admettons que Camille reçoive les quatre autres réponses. Pour compiler les
    326 résultats elle peut simplement les agréger dans un fichier texte en faisant,
    327 par exemple, dans vim, "!cat >> hpc_sobre"). Ce fichier pourrait ressembler à
    328 ceci :
    329 
    330 	2022-04-18T09:00+02:00
    331 	2022-04-18T10:00+02:00
    332 	2022-04-18T11:00+02:00
    333 	2022-04-19T09:00+02:00
    334 	2022-04-19T10:00+02:00
    335 	2022-04-19T11:00+02:00
    336 	2022-04-20T09:00+02:00
    337 	2022-04-20T10:00+02:00
    338 	2022-04-20T11:00+02:00
    339 	2022-04-18T10:00+02:00
    340 	2022-04-19T09:00+02:00
    341 	2022-04-19T11:00+02:00
    342 	2022-04-20T09:00+02:00
    343 	2022-04-18T09:00+02:00
    344 	2022-04-18T11:00+02:00
    345 	2022-04-19T09:00+02:00
    346 	2022-04-19T10:00+02:00
    347 	2022-04-19T11:00+02:00
    348 	2022-04-20T09:00+02:00
    349 	2022-04-20T10:00+02:00
    350 	2022-04-20T11:00+02:00
    351 	2022-04-18T11:00+02:00
    352 	2022-04-18T09:00+02:00
    353 	2022-04-18T10:00+02:00
    354 	2022-04-18T11:00+02:00
    355 	2022-04-19T09:00+02:00
    356 	2022-04-19T10:00+02:00
    357 	2022-04-19T09:00+02:00
    358 	2022-04-20T09:00+02:00
    359 	2022-04-20T10:00+02:00
    360 	2022-04-20T11:00+02:00
    361 
    362 Nous visualisons bien ici le souci que représente le traitement humain de ces
    363 données, même si elles étaient sous un format de date plus lisible. C'est
    364 exactement dans ce genre de cas que l'informatique nous est utile, d'autant
    365 plus que notre choix de format de date permet d'automatiser le traitement.
    366 
    367 Par exemple, si l'on retient ce qui se fait souvent c'est à dire obtenir la
    368 date à laquelle plus le gens sont disponibles il nous suffit de trier le
    369 contenu et de compter les lignes identiques. D'abord un `sort`, qui renvoie :
    370 
    371 	2022-04-18T09:00+02:00
    372 	2022-04-18T09:00+02:00
    373 	2022-04-18T09:00+02:00
    374 	2022-04-18T10:00+02:00
    375 	2022-04-18T10:00+02:00
    376 	2022-04-18T10:00+02:00
    377 	2022-04-18T11:00+02:00
    378 	2022-04-18T11:00+02:00
    379 	2022-04-18T11:00+02:00
    380 	2022-04-18T11:00+02:00
    381 	2022-04-19T09:00+02:00
    382 	2022-04-19T09:00+02:00
    383 	2022-04-19T09:00+02:00
    384 	2022-04-19T09:00+02:00
    385 	2022-04-19T09:00+02:00
    386 	2022-04-19T10:00+02:00
    387 	2022-04-19T10:00+02:00
    388 	2022-04-19T10:00+02:00
    389 	2022-04-19T11:00+02:00
    390 	2022-04-19T11:00+02:00
    391 	2022-04-19T11:00+02:00
    392 	2022-04-20T09:00+02:00
    393 	2022-04-20T09:00+02:00
    394 	2022-04-20T09:00+02:00
    395 	2022-04-20T09:00+02:00
    396 	2022-04-20T10:00+02:00
    397 	2022-04-20T10:00+02:00
    398 	2022-04-20T10:00+02:00
    399 	2022-04-20T11:00+02:00
    400 	2022-04-20T11:00+02:00
    401 	2022-04-20T11:00+02:00
    402 
    403 Puis un `uniq -dc`
    404 
    405       3 	2022-04-18T09:00+02:00
    406       3 	2022-04-18T10:00+02:00
    407       4 	2022-04-18T11:00+02:00
    408       5 	2022-04-19T09:00+02:00
    409       3 	2022-04-19T10:00+02:00
    410       3 	2022-04-19T11:00+02:00
    411       4 	2022-04-20T09:00+02:00
    412       3 	2022-04-20T10:00+02:00
    413       3 	2022-04-20T11:00+02:00
    414 
    415 Finalement un autre `sort` mais dans le sens décroissant, avec `-r`
    416 
    417       5 	2022-04-19T09:00+02:00
    418       4 	2022-04-20T09:00+02:00
    419       4 	2022-04-18T11:00+02:00
    420       3 	2022-04-20T11:00+02:00
    421       3 	2022-04-20T10:00+02:00
    422       3 	2022-04-19T11:00+02:00
    423       3 	2022-04-19T10:00+02:00
    424       3 	2022-04-18T10:00+02:00
    425       3 	2022-04-18T09:00+02:00
    426 
    427 Tout cela peut évidemment se combiner, la commande magique serait alors
    428 
    429 	sort | uniq -dc | sort -r | head
    430 
    431 Je dis "magique" mais elle n'a pas grand chose de magique. Ces utilitaires sont
    432 bien documentés et, je pense, beaucoup moins "magiques" que le monde du web et
    433 ses interfaces. Même si je reconnais que leurs codes source ne sont pas des
    434 plus [lisibles]. Certains groupes y travaillent comme [busybox].
    435 
    436 On constate avec nos yeux que la date du 19 avril à 9h convient à tout le monde
    437 sauf une personne. A nous de faire ce que l'on veut de cette information.
    438 
    439 Ce qui est, à mon sens, remarquable dans ce scénario est qu'il met en lumière
    440 la puissance d'un simple accord sur le format des données. Si un consensus est
    441 trouvé sur un format de donnée qui soit textuel et facilement manipulable par
    442 les outils Unix standards alors rien ou presque rien n'a besoin d'être
    443 développé pour, dans un cas assez simple comme le nôtre, prendre un
    444 rendez-vous. C'est ça le vrai "no code", un outil qui n'offre réellement pas de
    445 code. Non pas du code supplémentaire offrant une abstraction tellement forte
    446 que l'on croit pouvoir l'ignorer jusqu'à ce que l'on se rende compte que la
    447 plateforme ne se conforme pas à nos attentes et qu'il faille soudainement
    448 l'analyser sans l'avoir écrit.
    449 
    450 La nature textuelle des données et la présence en local des outils nécessaires
    451 à leur traitement permet de n'avoir recours qu'au mail comme moyen de
    452 communication, sur des infrastructures déjà existantes et là où les habitudes
    453 des utilisateurices ne sont généralement pas à construire.
    454 
    455 Nous avons créé un "système" décentralisé, une technique que tout le monde peut
    456 s'approprier, plutôt qu'un service dont nous serions dépendant·e·s. Nous pouvons
    457 remercier l'ubiquité et la simplicité de la rédaction et la lecture des mails
    458 pour cela. Ce ne sont heureusement pas encore devenues des activités jugées
    459 trop compliquées pour mamie et papi à qui on aime donner un ipad parce que
    460 c'est "convivial". 
    461 
    462 Aparté à ce sujet
    463  
    464 > Ma grand-mère sait un petit peu se servir de sa tablette, elle sait lire et
    465 > envoyer des mails puisque ce sont souvent les deux première choses que l'on
    466 > apprend. Elle peut donc utiliser Kun au moins en tant que participante au
    467 > sondage. Peut-être qu'elle saurait utiliser Doodle mais si c'est le cas c'est
    468 > parce que le temps qu'elle aura passé à se faire à la grammaire des designers
    469 > de la Silicon Valley (Doodle est européen je sais) à travers l'utilisation
    470 > d'iOS et de quelques sites internet modernes l'a familiarisé avec ces concepts
    471 > et non pas parce que les designers sont des magiciens qui ont tout compris du
    472 > fonctionnement du cerveau des personnes âgées. Je pense que le temps et
    473 > l'énergie qu'il faut pour apprendre à lire et écrire un mail est inférieur au
    474 > temps qu'il faut pour comprendre les interfaces web, même si elles tendent à
    475 > toutes se ressembler. J'ai le sentiment que la majorité des personnes qui
    476 > pensent que ce genre d'interfaces sont plus adaptées à des personnes éloignées
    477 > du numérique n'ont
    478 > 
    479 > * pas passé suffisamment de temps avec les personnes éloignées du numérique
    480 > * en sont tellement convaincues qu'elles n'enregistrent et ne mesurent pas les
    481 >   cas contraires auxquels elles sont exposées
    482 > * confondent leur propre adaptation à ces interfaces avec quelque chose
    483 >   d'universel.
    484 > 
    485 > Je précise que je ne suis moi-même qu'assez peu au contact de ce genre de
    486 > publics et que je ne connais rien à la science des interfaces, ce n'est pas
    487 > mon domaine d'activité. J'imagine que j'aurais beaucoup à apprendre de la
    488 > recherche menée sur ce sujet et que je suis au sommet de la courbe de
    489 > Dunning-Kruger. Mon avis s'est construit en constatant plusieurs fois l'exact
    490 > inverse de ce qui semble être pourtant considéré comme vrai par une majorité à
    491 > savoir des personnes ayant beaucoup de mal à s'adapter aux interfaces
    492 > graphiques modernes. Cela reste anecdotique. Au final, je sais pas, j'ai
    493 > simplement l'intuition que c'est beaucoup plus compliqué que "iOS et jolis
    494 > boutons et trucs qui bougent = tout le monde comprend instantanément et ligne
    495 > de commande, texte et truc qui bougent pas = choses ésotériques impénétrables
    496 > à moins d'être un hackerman".
    497 
    498 Fin d'aparté
    499 
    500 Attention, cela ne veux pas dire que notre système ne peut pas être transformé
    501 en service centralisé.  Il est tout à fait possible de le faire et même assez
    502 simple étant donné sa faible complexité. Il suffirait de générer quelques pages
    503 webs avec un formulaire, recueillir les réponses sur un serveur, faire
    504 automatiquement tourner la moulinette qui trouve la meilleure date et publier
    505 une page avec le résultat. Si le sondage se tient entre des personnes ayant
    506 toutes accès à un serveur distant on peut directement déposer sa réponse au
    507 sondage via ssh, faire tourner la moulinette et consulter les résultats
    508 soit-même. Peut-être est-il même possible de mettre le fichier dans un dépôt
    509 git pour suivre les modifications et "garantir" la sécurité du sondage ?
    510 
    511 Sa nature lui offre une affordance d'encouragement à l'utilisation d'outils
    512 simples, manipulant du texte ligne par ligne. Autrement dit les outils Unix.
    513 Ce n'est pas fait intentionnellement mais plutôt parce que les problèmes qui
    514 méritent d'être en partie résolus par des outils numériques sont souvent de
    515 nature à pouvoir être réduit en une collecte et un traitement linéaire de
    516 données textuelles. Du moins quand on utilise beaucoup les outils Unix, c'est
    517 comme cela que l'on est tenté de les aborder.
    518 Ou alors cela fait parti de mon plan machiavélique pour inciter le maximum de
    519 personnes à passer sous des distributions Unix et ainsi participer à résoudre
    520 les soucis démocratiques et environnementaux liés au numérique. 😈
    521 
    522 Côté performance la création et les réponses aux sondages vont dépendre de
    523 l'infrastructure de mails si l'on opte pour ce canal. Ce n'est pas la chose la
    524 plus fiable qui soit mais au moins on peut être certain que ça ne va pas
    525 disparaître de si tôt et que l'on a pas à se soucier de l'hébergement (mais
    526 une pensée à celles et ceux qui gèrent des serveurs mails donc). En utilisant
    527 Kun, l'industrie entière du numérique travaille H24 à rendre votre service de
    528 prise de rendez-vous opérationnel :)
    529 
    530 Pour l'éventuel traitement automatique des réponses c'est hyper rapide. J'ai
    531 dupliqué 1 000 000 fois le fichier de réponse précédent. Le résultat est un
    532 fichier de 687MO contenant 31 310 000 lignes.  Voici le résultat sur un pc
    533 équipé d'un intel core i5 7ème génération :
    534 
    535 	time sort test_pref | uniq -dc | sort -r | head
    536 	5050000 2022-04-19T09:00+02:00
    537 	4040000 2022-04-20T09:00+02:00
    538 	4040000 2022-04-18T11:00+02:00
    539 	3030101 2022-04-20T11:00+02:00
    540 	3030000 2022-04-20T10:00+02:00
    541 	3030000 2022-04-19T11:00+02:00
    542 	3030000 2022-04-19T10:00+02:00
    543 	3030000 2022-04-18T10:00+02:00
    544 	3029899 2022-04-18T09:00+02:00
    545 	sort test_perf  148,60s user 1,49s system 327% cpu 45,853 total
    546 	uniq -dc  1,92s user 0,19s system 4% cpu 45,852 total
    547 	sort -r  0,00s user 0,00s system 0% cpu 45,850 total
    548 	head  0,00s user 0,00s system 0% cpu 45,849 total
    549 
    550 Forcément on s'imagine mal à quoi ça pourrait servir mais c'est simplement pour
    551 pouvoir dire, telle une bonne startup, "ça scale" et "tkt on passe à l'échelle
    552 crème, notre tech elle est deep". Bah passez mieux à l'échelle que
    553 l'infrastrucure mondiale des mails et un traitement de 680 000 réponses par
    554 seconde sur mon ordi bof. La comparaison est évidemment bancale, ça ne
    555 comprends pas l'écriture du fichier etc.
    556 
    557 ### Discussions et limites
    558 
    559 A partir de là nous pourrions faire le large inventaire de ce que notre système
    560 ne permet pas de faire facilement :
    561 
    562 	* C'est long et chiant de taper les dates sous quelque format que ce soit
    563 
    564 Marc Chantreux a développé un petit outil en AWK qui permet d'écrire des dates
    565 sous la forme
    566 
    567 	april 18 21; d+ 1 2; w* 3
    568 
    569 Ce qui va générer la date du 18 avril à 21h de cette année plus celle des deux
    570 jours qui suivent même heure, ces trois jours répétés sur les trois semaines
    571 qui viennent. Cela donne :
    572 
    573 	<<. respl
    574 	s april 18 21; d+ 1 2; w* 3
    575 	.
    576 	april 18 21+0weeks+0days+0hours
    577 	april 18 21+0weeks+1days+0hours
    578 	april 18 21+0weeks+2days+0hours
    579 	april 18 21+1weeks+0days+0hours
    580 	april 18 21+1weeks+1days+0hours
    581 	april 18 21+1weeks+2days+0hours
    582 	april 18 21+2weeks+0days+0hours
    583 	april 18 21+2weeks+1days+0hours
    584 	april 18 21+2weeks+2days+0hours
    585 
    586 J'ai étendu le script pour qu'il puisse également gérer les décalages d'heures.
    587 C'était très simple malgré mon inexpérience avec awk puisque le script ne gère
    588 aucune logique de temps, c'est simplement une réécriture de la ou les lignes
    589 qu'on lui donne en entrée. C'est possible grâce à la syntaxe relative de date
    590 qui permet d'ajouter ou soustraire des unités de temps (années, jours, secondes
    591 etc) à une date donnée avec les opérateurs - et +.
    592 Le code se trouve [ici](./respl).
    593 
    594 	* Il n'y a pas de moyen évident de corriger une erreur de date, d'amender sa
    595   	  réponse si jamais notre calendrier change
    596 
    597 Si Camille m'envoie un premier mail avec les dates
    598 
    599 	2022-04-18T21:00+02:00
    600 	2022-04-20T21:00+02:00
    601 	2022-04-26T21:00+02:00
    602 	2022-04-27T21:00+02:00
    603 	2022-05-02T21:00+02:00
    604 	2022-05-04T21:00+02:00
    605 
    606 Puis le lendemain un autre en disant
    607 
    608 	Désolé en fait je vais pas pouvoir être là le 26, ceci dit me suis libéré
    609 	le 25
    610 	
    611 	2022-04-18T21:00+02:00
    612 	2022-04-20T21:00+02:00
    613 	2022-04-25T21:00+02:00
    614 	2022-04-27T21:00+02:00
    615 	2022-05-02T21:00+02:00
    616 	2022-05-04T21:00+02:00
    617 
    618 Je peux toujours chercher le premier bloc de date consécutives dans le fichier
    619 de réponse et le remplacer par celui-ci. C'est évidemment plus pratique si le
    620 second mail est threadé avec le premier mais c'est une bonne pratique de toute
    621 façon. 
    622 
    623 TODO donner une tite commande.
    624 
    625 Ce n'est pas parfaitement fiable, peut-être envisager la possibilité d'ajouter
    626 un identifiant de la personne après les dates ? Ou utiliser git ?
    627 
    628 * Cela gère des dates précises et non pas des intervales de temps
    629 
    630 En fait si. Si l'on a les réponses suivantes :
    631 
    632 	2022-04-18T11:00+02:00 2022-04-18T12:00+02:00
    633 	2022-04-18T09:00+02:00 2022-04-18T10:00+02:00
    634 	2022-04-19T10:00+02:00 2022-04-19T11:00+02:00
    635 	2022-04-20T09:00+02:00 2022-04-20T10:00+02:00
    636 	2022-04-19T11:00+02:00 2022-04-19T12:00+02:00
    637 	2022-04-20T10:00+02:00 2022-04-20T11:00+02:00
    638 	2022-04-19T09:00+02:00 2022-04-19T10:00+02:00
    639 	2022-04-20T11:00+02:00 2022-04-20T12:00+02:00
    640 	2022-04-18T10:00+02:00 2022-04-18T11:00+02:00
    641 
    642 `sort` et `uniq` fonctionnent parfaitement bien dessus (je crois, tester les
    643 créneaux qui peuvent être à l'intérieur d'autres créaneaux TODO). Si l'on veut
    644 utiliser `date` pour modifier le format, en le rendant plus lisible par exemple
    645 on peut filtrer le texte précédent :
    646 
    647 	sed 's/ /\n/' | date -f- +"author: %d %B à %Hh%M" | paste - -
    648 	lundi 18 avril à 11h00	lundi 18 avril à 12h00
    649 	lundi 18 avril à 09h00	lundi 18 avril à 10h00
    650 	mardi 19 avril à 10h00	mardi 19 avril à 11h00
    651 	mercredi 20 avril à 09h00	mercredi 20 avril à 10h00
    652 	mardi 19 avril à 11h00	mardi 19 avril à 12h00
    653 	mercredi 20 avril à 10h00	mercredi 20 avril à 11h00
    654 	mardi 19 avril à 09h00	mardi 19 avril à 10h00
    655 	mercredi 20 avril à 11h00	mercredi 20 avril à 12h00
    656 	lundi 18 avril à 10h00	lundi 18 avril à 11h00
    657 
    658 Qu'on peut rendre encore plus lisible avec :
    659 
    660 	sed 's:\t.*à: -:' | column -ts 'à'	
    661 	lundi 18 avril      11h00 - 12h00
    662 	lundi 18 avril      09h00 - 10h00
    663 	mardi 19 avril      10h00 - 11h00
    664 	mercredi 20 avril   09h00 - 10h00
    665 	mardi 19 avril      11h00 - 12h00
    666 	mercredi 20 avril   10h00 - 11h00
    667 	mardi 19 avril      09h00 - 10h00
    668 	mercredi 20 avril   11h00 - 12h00
    669 	lundi 18 avril      10h00 - 11h00
    670 
    671 Bref, on peut imaginer ce que l'on veut, si vous avez un format préféré vous
    672 pouvez le créer, en faire un alias et tout exécuter en une fraction de seconde.
    673 Il faut simplement se souvenir d'envoyer un format assimilable par `date`.
    674 
    675 	* On ne peut pas voir les réponses des autres participant·e·s à moins que
    676 	  tout le monde fasse "reply all" au premier mail
    677 
    678 Nous pouvons nous demander si cela est toujours préférable. Il est généralement
    679 possible de désactiver ou activer cette fonctionnalité dans les Doodle-like.
    680 
    681 Dans Doodle, si les résultats du sondages sont ouverts cela veut dire que la
    682 réponse d'une personne est rendu visible à tout le monde. Sinon, seule la
    683 personne à l'origine du sondage a accès aux réponses (et Doodle aussi n'est-ce
    684 pas). Dans notre système les réponses sont dans un mail. Si l'on veut rendre
    685 notre réponse accessible à tout le monde, il suffit donc de choisir de
    686 "répondre à tous". Sinon on utilise "répondre à". Nous avons recréé la
    687 fonctionnalité pour un coût nul.
    688 
    689 Cela à l'avantage supplémentaire de renverser le choix du périmètre de
    690 diffusion de ses données. Habituellement c'est l'initiateur du sondage qui
    691 choisit de les rendre publiques ou pas, ici les répondants et répondantes
    692 restent propriétaires des données qu'ils ou elles génèrent.
    693 
    694 	* On ne sait pas qui a répondu quoi et donc on ne peut pas différencier le
    695   	  "poids" donné à chaque réponse
    696 
    697 A la charge du ou de la créateurice du sondage d'ajouter avant ou après chaque
    698 date un identifiant par répondant (que ce soit le nom ou un numéro). Il est
    699 ensuite possible d'omettre ce champ lors du traitement.
    700 
    701 TODO tester
    702 
    703 	* Il n'y a pas de mécanisme d'exclusion de créneau en fonction de son
    704   	  calendrier existant
    705 
    706 Ce type de fonctionnalité est, je pense, à proscrire dans l'élaboration d'un
    707 système comme celui-ci. Ce système a un but donné, vouloir fortement
    708 l'interfacer avec d'autres systèmes, comme ceux de gestion de calendrier par
    709 exemple, ferait prendre le risque d'une sur-spécialisation et d'une complexité
    710 non nécessaire. Le risque est d'autant plus grand que les systèmes avec
    711 lesquels nous voudrions nous interfacer sont eux très complexes.
    712 
    713 Cela dit la simple stupidité de notre système permet en théorie de l'interfacer
    714 avec n'importe quoi. Si une personne ou un groupe de personnes veut le faire,
    715 c'est possible. Il ne faut simplement pas que Kun devienne "Un système d'aide à
    716 la prise de rendez-vous et aussi qui sait s'authentifier sur un service en
    717 ligne et parser du format bidule pour y lire un calendrier et detecter les
    718 conflits".
    719 
    720  	* Il n'y a pas ou peu de garantis de l'intégrité du vote
    721 
    722 Effectivement, il sera difficile voir impossible de garantir que personne n'ait
    723 voté deux fois, que la créateurice du sondage n'ait pas modifié les résultats
    724 etc. Nous pourrions investiguer les solutions techniques et/ou
    725 organisationnelle pour s'approcher d'une garantie. Ce serait certainement très
    726 intéressant. Alternativement nous pouvons estimer que 90% (99% ?) des
    727 sondages/votes ne nécessitent pas de telles garanties et qu'il est donc inutile
    728 de complexifier l'outil pour répondre à un besoin inexistant. Des besoins de
    729 votes numériques garantis intègres existent et nécessitent des outils
    730 spécifiques.
    731 
    732 Quoi qu'il en soit pour éclaircir l'adéquation de Kun avec les pratiques
    733 habituelles de sondages il faudrait mener des expérimentations en condition
    734 réelles à une certaine échelle. Nous espérons pouvoir le faire prochainement.
    735 
    736 [Doodle]: https://fr.wikipedia.org/wiki/Doodle.com
    737 [cloud souverain]: https://acteurspublics.fr/articles/pierre-noro-le-cloud-est-avant-tout-un-sujet-politique
    738 [memes]: https://i.redd.it/tqxwb35d54n81.jpg
    739 [7]: https://i.redd.it/uhboopf6f8u71.jpg
    740 [argument]: https://www.gnu.org/software/coreutils/manual/html_node/Date-input-formats.html
    741 [ISO_8601]: https://en.wikipedia.org/wiki/ISO_8601
    742 [lisibles]: https://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=blob;f=src/sort.c
    743 [busybox]: https://git.busybox.net/busybox/tree/coreutils/sort.c?id=cc7d2e21780c28608b00a4faf0fed297527bcbf4
    744 [^1]: En quelque sorte lancé à l'Unistra !