Alors que j'étais un développeur web indépendant, j'ai eu à faire plusieurs sites marchands pour des petites structures commerçantes : artisans, TPE/TPI, associations, amicales d'étudiants,… et invariablement, mes clients, donc les gestionnaires des boutiques, en venaient à se faire communiquer par téléphone des numéros de commandes.
En général, ce numéro de commande est noté dans l'urgence, sur une feuille de papier, d'une écriture rarement calme. Donc ni la qualité de communication, ni la lisibilité de sa transcription ne sont garanties.
Quand j'ai commencé à développer dAgence, ma propre solution d'e-commerce hébergée, j'avais depuis longtemps fait plusieurs constats totalement idiots :
- J'ai une écriture de chien ;
- je ne suis pas le seul, loin de là.
Selon les objectifs sanctifiés de l'Éducation Nationale, à la sortie de l'école primaire primaire, votre écriture manuscrite doit ressembler à ça :
La réalité…
Soyons honnêtes, j'ai cumulé deux handicaps : mon écriture gauche et…
I was 1337
Au début des 1990s, je bavais sur les demomakers qui explosaient les perfs de mon Amiga, alors que je tâcheronais à apprendre les rudiments de l'assembleur, moi aussi j'ai eu ma période ou j'ai écrit en 1337.
Écrire en 1337 est une maladie mentale transmissible où l'on appliquait l'onanisme informatique : j'avais ce comportement de poser en troupeau d'autres infectés. Je me prenais pour un mec qui croyait qu'il était de la Haute Caste des Hackers. Et pour se reconnaître entre pauvres nazes qui se la pètent en désassemblant du boot sector, ben on substituait 135 1377r35 p4r d35 c41ffr35. Donc Elite
→ 1337
Quel n00b.
Je tiens à signaler que l'épidémie est encore très vivace, nous trouvons des foyers infectieux sur W3Schools et Developpez.com. Don't feed the egos
, appris-je plus tard.
Mais galopons à une autre époque où malgré ma longue expérience en téléphonie mobile, j'allais encore apprendre par la conception web que les clients ne sont pas toujours habiles.
Un cas pratique et absurde
J'intervenais sur le site déjà existant d'un client. Le genre d'horreur OS Commerce ou Joomla VirtueMart parfaitement inacceptable même en 2007.
Pendant ma période d'intervention, ce patron de TPE reçoit un coup de fil remettant en cause une livraison. Un appel en son absence qu'un des salariés dudit patron a obligeamment pris l'appel, l'a annoté sur un Post-It™ et l'a posé sur son bureau.
Me voici donc avec mon client au téléphone, à lui faire répéter dans tous les sens et en épelant le numéro de commande, celui-ci est bien évidemment furibard car son site web et moi-même — qui à son humble opinion coûtaient à nous deux trop d'argent — étions absolument incapables de retrouver dans son arrière-guichet back-office cette f☭☹⚒☇e commande n°420
.
Par la suite, j'ai découvert qu'en mettant une lettre dans une référence de commande suffit à inciter votre correspondant à systématiquement épeler chaque chiffre. Et peut-être que dans le feu de la conversation téléphonique avec le client marri, l'arrière-guichetière d'occasion aurait noté que la commande fautive est la n°80
…
L'UX (expérience utilisateur
) n'est pas qu'une histoire d'icônes, de couleurs et de culture. La sensibilité UX ne s'acquiert que par la variété des cas clients. C'est aussi un truc tout con qui peut vous faciliter monstrueusement la vie et vous faire économiser plein de sous.
D'où l'idée
… de casser le bon vieil ordre numérique, d'utiliser une base numérique un peu spéciale, afin de réduire les risques d'erreurs en cas de prise de note manuscrite sur un tabouret branlant au téléphone dans une scierie.
D'abord parce que la plupart de mes clients ne souhaitaient pas avoir un numéro d'ordre trop simple sur les bordereaux de commande. Logique : quand vous voyez que votre probable fournisseur de machine-outil en est qu'à son devis N°0003
, vous auriez vraiment du mal à lui faire confiance. Et d'un autre côté, un numéro de suivi de commande un peu plus complexe et vérifié par un petit détrompeur évitera de se retrouver à communiquer les détails d'un tout autre client au téléphone.
Bref, sérieux + sérieux = un peu moins guignol.
Cahier Seyes
Pour celà, je suis parti de la base 36. De façon usuelle, celle-ci se note en commençant par les chiffres, puis par les lettres. 0 = 0
, 9 = 9
, A = 10
, Z = 35
. Et donc si vous avez suivi 10 = 36
. Logique, non ?
Oui, je sais, la rentrée, c'est toujours un peu dur pour les enfants qui manquent d'attention…
De là, j'ai écarté de l'alphabet toute lettre qui pourrait ressembler à un chiffre. Le terme technique est homoglyphe
. Et on va parler de chiffres décimaux, pour les différencier des chiffres arbitraux qui sont parfois des lettres.
Ok, vous n'avez pas suivi, et vous n'avez pas osé me le dire parce que vous avez peur que je vous gronde comme en École Primaire. Primates… Pourtant, pour graver du 1337 au cutter sur vos bureaux, vous n'êtes pas derniers ! Je vais vous faire un dessin, ça va être nettement plus clair :
Bon, en fait, c'est pas plus clair, j'ai mal retenu les leçons d'Eva, donc je vais faire un tableau :
chiffres décimaux | homoglyphes |
---|---|
ça tu peux | ça tu peux pas |
0 | O |
1 | I , L |
2 | Z |
3 | |
4 | Y |
5 | S |
6 | G |
7 | |
8 | B |
9 |
Évidemment, ce tableau n'est pas exhaustif et dépendra fortement de votre manière de mal former les chiffres et les lettres, majuscules et minuscules, au grand désespoir de Maître Renard Bertrand. Rien que pour vous faire rire, j'ai ajouté le Y
à ma ban-list en cours d'exercice cet été. C'est à vous de faire votre cuisine, mais une fois votre petite bibliothèque insérée dans un vrai projet, vous n'aurez plus le droit d'y toucher. Du tout.
Donc, au final, voici nos chiffres pour ma base arbitraire ,:
0123456789ACDEFHJKMNPQRTUVWX
10 plus 26, je retire 8, plus la TVA moins la réduction en caisse et je retiens ma marge,
cela me fait une base 28.
Subtilités dans son implémentation originale
Afin d'éviter une tentative de fuzzing ou des confusions malheureuses, dans le système de dAgence, les numéros de commandes produites en BaseRef étaient sous la forme AAAAA-BB
: un premier index unique faisant entre 4 et 6 chiffres arbitraires, incrémentée d'une valeur aléatoire, suivi d'une somme de contrôle en deux symboles.
Bonus que je n'ai jamais mis en production, il était prévu qu'en cas de non-occurence sur le numéro de commande, le moteur de recherche en back-office de la boutique suggère sur les valeurs approchantes en fonction du taux d'erreur.
Du coup, j'avais commencé un code de génération de numéro de commande qui vérifie qu'il n'y aie pas moins de 3 chiffres arbitraires différentes sur l'ensemble du catalogue, mais j'ai eu la flemme de le terminer.
Déclinaison de toute responsabilité juridique
Attention : je tiens à faire remarquer que cette opération ne convient absolument pas pour générer des mots de passe. Oui oui oui, on m'a demandé une fois d'utiliser cette formule pour un générateur aléatoire
de mot de passe dictables par téléphone
et nettement plus simples
. La suite de la conversation vocale fut très imagée, sans captcha.
J'en reparlerai dans une série à venir sur le formulaire de login.
L'exercice de style
J'entrerai dans les détails la semaine prochaine. Mais les plus impatients peuvent déjà consulter le repo github en question. Je ne serais pas contre un petit coup de main pour la version en Rust et si y'a des furieux pour le faire en Bash, ne vous retenez pas…