diff --git a/code/layout-analyzer.js b/code/layout-analyzer.js index 3782a687..b43bf1a6 100644 --- a/code/layout-analyzer.js +++ b/code/layout-analyzer.js @@ -35,8 +35,8 @@ window.addEventListener('DOMContentLoaded', () => { 'skb', // Same Key Bigram 'lsb', // Lateral Strech Bigram 'handChange', // Two keys typed by different hands - 'scisor', // Roll with uncomfortable height difference between the keys - 'extendedScisor', // scisor + lsb + 'scissor', // Roll with uncomfortable height difference between the keys + 'extendedScissor', // scissor + lsb 'inwardRoll', // Roll in the pinky -> index direction 'outwardRoll', // Roll in the index -> pinky direction @@ -353,8 +353,8 @@ window.addEventListener('DOMContentLoaded', () => { if (isScisor(currKeyCode, prevKeyCode, currFinger, prevFinger)) return [prevKeyCode, currKeyCode].some(requiresExtension) - ? 'extendedScisor' - : 'scisor'; + ? 'extendedScissor' + : 'scissor'; if ([prevKeyCode, currKeyCode].some(requiresExtension)) return 'lsb'; return currFinger[1] < prevFinger[1] ? 'inwardRoll' : 'outwardRoll'; @@ -428,33 +428,33 @@ window.addEventListener('DOMContentLoaded', () => { showPercent('#sfu-all', sum(ngrams.sfb), 2); showPercent('#sku-all', sum(ngrams.skb), 2); - showPercent('#sfu-all', sum(ngrams.sfb), 2, '#Achoppements'); - showPercent('#extensions-all', sum(ngrams.lsb), 2, '#Achoppements'); - showPercent('#scisors-all', sum(ngrams.scisor), 2, '#Achoppements'); + showPercent('#sfu-all', sum(ngrams.sfb), 2, '#Achoppements'); + showPercent('#extensions-all', sum(ngrams.lsb), 2, '#Achoppements'); + showPercent('#scissors-all', sum(ngrams.scissor), 2, '#Achoppements'); - showPercent('#inward-all', sum(ngrams.inwardRoll), 1, '#Digrammes'); - showPercent('#outward-all', sum(ngrams.outwardRoll), 1, '#Digrammes'); - showPercent('#sku-all', sum(ngrams.skb), 2, '#Digrammes'); + showPercent('#inward-all', sum(ngrams.inwardRoll), 1, '#Bigrammes'); + showPercent('#outward-all', sum(ngrams.outwardRoll), 1, '#Bigrammes'); + showPercent('#sku-all', sum(ngrams.skb), 2, '#Bigrammes'); const achoppements = document.getElementById('Achoppements'); - achoppements.updateTableData('#sfu-digrams', 'SFU', ngrams.sfb, 2); - achoppements.updateTableData('#extended-rolls', 'extensions', ngrams.lsb, 2,); - achoppements.updateTableData('#scisors', 'ciseaux', ngrams.scisor, 2); + achoppements.updateTableData('#sfu-digrams', 'SFU', ngrams.sfb, 2); + achoppements.updateTableData('#extended-rolls', 'LSB', ngrams.lsb, 2,); + achoppements.updateTableData('#scissors', 'ciseaux', ngrams.scissor, 2); - const digrammes = document.getElementById('Digrammes'); - digrammes.updateTableData('#sku-digrams', 'SKU', ngrams.skb, 2); - digrammes.updateTableData('#inward', 'rolls intérieur', ngrams.inwardRoll, 2); - digrammes.updateTableData('#outward', 'rolls extérieur', ngrams.outwardRoll, 2); + const bigrammes = document.getElementById('Bigrammes'); + bigrammes.updateTableData('#sku-digrams', 'SKU', ngrams.skb, 2); + bigrammes.updateTableData('#inward', 'roulements intérieurs', ngrams.inwardRoll, 2); + bigrammes.updateTableData('#outward', 'roulements extérieurs', ngrams.outwardRoll, 2); // Display trigrams - showPercent('#almost-skb-all', sum(ngrams.sks), 1, '#Trigrammes'); - showPercent('#almost-sfb-all', sum(ngrams.sfs), 1, '#Trigrammes'); - showPercent('#redirect-all', sum(ngrams.redirect), 1, '#Trigrammes'); + showPercent('#sks-all', sum(ngrams.sks), 1, '#Trigrammes'); + showPercent('#sfs-all', sum(ngrams.sfs), 1, '#Trigrammes'); + showPercent('#redirect-all', sum(ngrams.redirect), 1, '#Trigrammes'); showPercent('#bad-redirect-all', sum(ngrams.badRedirect), 2, '#Trigrammes'); const trigrammes = document.getElementById('Trigrammes'); - trigrammes.updateTableData('#almost-skbs', 'presque SKBs', ngrams.sks, 2); - trigrammes.updateTableData('#almost-sfbs', 'presque SFBs', ngrams.sfs, 2); + trigrammes.updateTableData('#sks', 'SKS', ngrams.sks, 2); + trigrammes.updateTableData('#sfs', 'SFS', ngrams.sfs, 2); trigrammes.updateTableData('#redirect', 'redirections', ngrams.redirect, 2); trigrammes.updateTableData( '#bad-redirect', diff --git a/www/content/alternatives/_index.md b/www/content/alternatives/_index.md index f9c2242f..84f80547 100644 --- a/www/content/alternatives/_index.md +++ b/www/content/alternatives/_index.md @@ -46,11 +46,11 @@ soit devenir insupportables. +===============+:=====:+:=====:+:=====:+:=====:+:=====:+=============================================+ | [Azerty][] | · | oui | · | · | · | - (fr) mauvais support typographique | | | | | | | | - charge de l’auriculaire gauche > 10 % | -| | | | | | | - digrammes de même doigt > 6 % | +| | | | | | | - bigrammes de même doigt > 6 % | | | | | | | | - chiffres en Shift | +---------------+-------+-------+-------+-------+-------+---------------------------------------------+ | [Lafayette][] | oui | oui | · | · | oui | - charge déséquilibrée | -| | | | | | | - digrammes de même doigt > 6 % | +| | | | | | | - bigrammes de même doigt > 6 % | +---------------+-------+-------+-------+-------+-------+---------------------------------------------+ | [Ergo‑L][] | oui | oui | oui | oui | oui | - (fr) `tui`, `bo` | | | | | | | | - (en) `eas`, `we` | @@ -63,13 +63,13 @@ soit devenir insupportables. | | | | | | | - (en) `you`, `was`, `ho` | +---------------+-------+-------+-------+-------+-------+---------------------------------------------+ | [Bépolar][] | oui | · | oui | · | oui | - charge de l’index gauche | -| | | | | | | - (fr) digrammes de même doigt > 2 % | -| | | | | | | - (en) digrammes de même doigt > 4 % | +| | | | | | | - (fr) bigrammes de même doigt > 2 % | +| | | | | | | - (en) bigrammes de même doigt > 4 % | +---------------+-------+-------+-------+-------+-------+---------------------------------------------+ | [Bépo][] | · | · | oui | · | · | - déviations ulnaires | | | | | | | | - charge de l’auriculaire droit > 10 % | | | | | | | | - charge de l’index gauche > 20 % | -| | | | | | | - digrammes de même doigt > 2 % | +| | | | | | | - bigrammes de même doigt > 2 % | | | | | | | | - (en) rédhibitoire (`wh`) | | | | | | | | - chiffres en Shift | +---------------+-------+-------+-------+-------+-------+---------------------------------------------+ @@ -151,8 +151,8 @@ l’anglais. Ergo‑L a la palme du confort. Bépo et toutes ses variantes présentent les mêmes [défauts d’ergonomie][] : - placement de lettres excentrées sur les 6e et 7e - colonnes : - - compatibilité délicate avec la plupart des claviers ergonomiques ; + colonnes : + - [compatibilité délicate][] avec la plupart des claviers ergonomiques ; - déviations ulnaires pouvant devenir douloureuses ; - charge importante de l’auriculaire droit (> 11 % en français). @@ -170,24 +170,30 @@ serait une permutation `h,’`, pour faire passer le `h` de [>] à [O]. - 2024-02-03 https://discord.com/channels/794732334879473684/1202877504822579240/1203391939009847357 On s’en branle du H. -- 2024-01-27 - https://discord.com/channels/794732334879473684/794734985122152478/1200680341363494972 - Moi aussi, je peux modifier légèrement Optimot pour optimiser un peu plus pour - l’anglais (mais au détriment du français). Mais ce n’est pas mon choix parce - que nous sommes en France et que je m’adresse à des personnes qui écrivent - d’abord en français --> [Note]{id="optimot_en"} : l’auteur d’Optimot considère que sa disposition est -optimisée pour l’anglais au motif qu’elle obtiendrait une bonne note globale sur -KLAnext ; mais pour nous, [la heatmap est inadaptée][1] (lettres fréquentes sur -la rangée inférieure) et de nombreux digrammes courants sont trop inconfortables -pour pouvoir parler réellement d’optimisation (`th`, `yo`, `ay`, `by`, `ok`, -`ak`, `ki`/`ik`/`ike`). Elle est *utilisable*, mais pas *optimisée* pour ça. +optimisée pour l’anglais au motif qu’elle obtiendrait une bonne [note globale +sur KLAnext][] ; mais pour nous, [la heatmap est inadaptée][heatmap] (lettres +fréquentes sur la rangée inférieure) et de nombreux bigrammes courants sont trop +inconfortables pour pouvoir parler réellement d’optimisation (`th`, `yo`, `ay`, +`by`, `ok`, `ak`, `ki`/`ik`/`ike`). Elle est *utilisable*, mais pas *optimisée* +pour ça. Et d’ailleurs, son auteur reconnait que l’anglais n’est qu’un objectif +secondaire : + +> Moi aussi, je peux modifier légèrement Optimot pour optimiser un peu plus pour +> l’anglais (mais au détriment du français). Mais ce n’est pas mon choix parce +> que nous sommes en France et que je m’adresse à des personnes qui écrivent +> d’abord en français. + + [(?)]: #optimot_en [optimot]: ./optimot_fr.png -[1]: ./optimot_en.png +[heatmap]: ./optimot_en.png **De notre point de vue :** @@ -196,7 +202,9 @@ pour pouvoir parler réellement d’optimisation (`th`, `yo`, `ay`, `by`, `ok`, - pour les Bépoètes qui n’ont pas de douleurs, Optimot apporte une optimisation *très* supérieure en français et est bien plus utilisable en anglais ; - pour les Bépoètes qui ont des douleurs ou qui souhaitent tenter l’expérience - [1DFH][], [Bépolar][] sera une alternative intéressante et très vite apprise. + 1DFH, [Bépolar][] sera une alternative intéressante et très vite apprise ; et + [Erglace][] n’aura que des avantages sur Optimot, y compris sur ses propres + métriques. [ergo‑l]: / [bépo]: /bepo @@ -210,3 +218,6 @@ pour pouvoir parler réellement d’optimisation (`th`, `yo`, `ay`, `by`, `ok`, [touche morte]: /presentation#caractères-accentués [symboles]: /presentation#couche-symboles [défauts d’ergonomie]: /bepo/#ergonomie + +[compatibilité délicate]: /claviers/#les-limitations-de-bépo-béopy-optimot +[note globale sur KLAnext]: /articles/analyse_et_optimisation/#lapproche-optimot diff --git a/www/content/alternatives/bepo/index.md b/www/content/alternatives/bepo/index.md index 028cb950..8a34eb47 100644 --- a/www/content/alternatives/bepo/index.md +++ b/www/content/alternatives/bepo/index.md @@ -40,7 +40,7 @@ qui ne proposent que 6 colonnes de touches par main pour respecter le principe Par ailleurs, la charge des doigts est mal répartie : - la charge de l’index gauche est très élevée (> 23 % en français), et c’est - d’autant plus gênant que ce doigt gère à lui seul la moitié des [digrammes de + d’autant plus gênant que ce doigt gère à lui seul la moitié des [bigrammes de même doigt](#optimisation) ; - plus grave, la charge de l’auriculaire droit (> 11 % en français) est bien plus élevée que dans toutes les dispositions de clavier francophones, @@ -165,18 +165,18 @@ Optimisation - maximisation de l’alternance des mains lors de la frappe ; - répartition des touches de façon équitable sur les deux mains ; - utilisation en priorité de la rangée centrale, puis haute, puis inférieure ; -- en cas de non-alternance des mains sur un digramme, direction de la frappe vers le +- en cas de non-alternance des mains sur un bigramme, direction de la frappe vers le centre du clavier, ce qui sollicite davantage les doigts les plus habiles, à savoir l’index et le majeur. -Bépo cherche également à minimiser le taux de digrammes de même doigt, que nous +Bépo cherche également à minimiser le taux de bigrammes de même doigt, que nous mesurons à 2.6 % en français contre 8.0 % pour l’AZERTY. C’est un score très proche de celui obtenu par Dvorak en anglais, là où QWERTY est à 7.2 %. Cette optimisation est faite au détriment de l’anglais : - la charge de l’auriculaire droit grimpe à 13.7 % ; -- certains digrammes, notamment `wh`, sont rédhibitoires. +- certains bigrammes, notamment `wh`, sont rédhibitoires. ### Ergo‑L {id="optimisation-ergol"} @@ -200,7 +200,7 @@ et [Workman][] : Malgré ces compromis et le fait qu’il soit optimisé pour les **deux** langues, français **et** anglais, Ergo‑L affiche de meilleures métriques d’optimisation, -tant sur la charge des doigts (voir § précédent) que sur le taux de digrammes de +tant sur la charge des doigts (voir § précédent) que sur le taux de bigrammes de même doigt : + +:::{.highlight style="max-width: 32em;"} +- [Les fondamentaux] + - [la heatmap] + - [la charge des doigts] + - [les bigrammes] + - [les trigrammes] +- [Critères d’évaluation] + - [métriques indispensables] + - [SHU, same-hand usage ?] + - [distance parcourue ?] + - [note globale ?] +- [Optimiser pour une note globale ?] + - [l’approche CarpalX] + - [l’approche Optimot] + - [une autre note globale est-elle possible ?] +- [Optimiser façon Ergonaute !] + - [l’état de l’art] + - [la méthode] + - [les outils] + - [la communauté] +- [Les principaux analyseurs] + - [CarpalX](#carpalx) + - [KLA (keyboard layout analyzer)] + - [Colemak-DH](#colemak-dh) + - [Oxeylyzer ❤️] + - [Kalamine 🚀] +- [Conclusion] +::: + + +Les fondamentaux +-------------------------------------------------------------------------------- + +Quelles sont les principales caractéristiques d’une bonne disposition de clavier ? + +### La heatmap + +L’optimisation la plus évidente pour une disposition de clavier consiste à +placer les touches les plus fréquemment utilisées aux meilleurs emplacements : + +- sur les 8 positions de repos +
([A]{.kbd}[S]{.kbd}[D]{.kbd}[F]{.kbd} et [J]{.kbd}[K]{.kbd}[L]{.kbd}[;]{.kbd} en Qwerty) ; +- sur les 4 positions des majeurs et annulaires de la rangée supérieure +
([W]{.kbd}[E]{.kbd} et [I]{.kbd}[O]{.kbd} en Qwerty) ; +- sur les 2 positions des index de la rangée inférieure +
([V]{.kbd} et [M]{.kbd} en Qwerty). + +Ces positions correspondent à celles notées 1 à 2 par le projet +[Workman](https://workmanlayout.org/#back-to-the-drawing-board). + +![Accessibilité des touches selon Workman.](workman_grid.png) + +On notera au passage que la question de l’accessibilité hors du pavé central de +3×10 touches ne s’est jamais posée chez Workman : le principe [1DFH][] va de soi +pour les dispositions anglophones. + +### La charge des doigts + +Une autre optimisation de base consiste à équilibrer la charge de travail des +doigts : + +- les doigts forts (index, majeur) peuvent supporter plus de charge que les + auriculaires, qui sont déjà très sollicités avec [Entrée]{.kbd}, + [Backspace]{.kbd}, [Tab]{.kbd}, [Shift]{.kbd}… +- la charge est aggravée par l’utilisation de touches inconfortables, + c’est-à-dire celles notées 3 ou plus par le projet Workman (voir ci-dessus). + +On affiche en bleu la charge liée aux touches notées 1 à 2, en jaune celle des +touches notées 3, et en orange celles notées 4 ou plus — ce qui inclut les +touches trop excentrées pour être évaluées par Workman, et qui enfreignent le +principe [1DFH][], auquel nous autres Ergonautes sommes si attaché·e·s. + +![[Charge des doigts d’Ergo‑L.](/stats/#/ergol//en+fr)](ergol.png) + +![[Charge des doigts de Bépo.](/stats/#/bepo//en+fr)](bepo.png) + +### Les bigrammes + +Un bigramme est un enchainement de deux touches. +Tout bigramme appartient à l’une des catégories suivantes : + +- alternance de mains : une touche sous chaque main : +- bigramme de même main : les touches sont sous deux doigts différents d’une + même main ; +- bigramme de même doigt (SFB, pour same-finger bigram) : deux + touches différentes à enchainer avec le même doigt ; +- répétition (SKB, pour same-key bigram) : la même touche est + pressée deux fois de suite. + +On affiche les SKB en jaune et les SFB (plus gênants) en orange. Le nombre de +SFB dépend fortement de la disposition de clavier, alors que le nombre de SKB +dépend essentiellement du corpus utilisé — mais l’utilisation d’une touche morte +est de nature à augmenter le nombre de SKB. On ne peut jamais gommer +complètement ces SFB et SKB, mais on fait en sorte de les placer +préférentiellement sur les doigts forts, en évitant tout particulièrement les +auriculaires. + +![[Répartition des SFB et SKB d’Ergo‑L.](/stats/#/ergol//en+fr)](ergol_sfu.png) + +![[Répartition des SFB et SKB de Bépo.](/stats/#/bepo//en+fr)](bepo_sfu.png) + +Lors d’un enchainement rapide de deux touches, il est fréquent (voire +systématique) que la deuxième touche soit pressée avant que la première ne soit +relâchée. C’est particulièrement vrai pour les bigrammes de même main. + +Les bigrammes de même main sont plus délicats à qualifier. On distingue : + +- roulement intérieur : l’enchainement se fait confortablement de l’auriculaire + vers l’index (le meilleur enchainement qui soit) ; +- roulement extérieur : l’enchainement se fait confortablement de l’index vers + l’auriculaire (confort comparable à une alternance de mains) ; +- ciseau : l’enchainement requiert un changement de rangée inconfortable, comme + [C]{.kbd}[R]{.kbd} en Azerty ou Qwerty ; +- extensions (LSB, pour lateral stretch bigram) : + l’enchainement inclut une touche d’une colonne excentrée ou de la rangée des + chiffres. + +Le taux de SFB (ou SFU, pour same-finger usage) est le +principal indicateur du niveau d’optimisation d’une disposition de clavier ; on +peut donc être tenté de l’utiliser comme indicateur de qualité générale. Mais +attention, un SFU très bas cache parfois des défauts rédhibitoires ailleurs — +notamment sur les ciseaux, les extensions, ou la charge des doigts. + +### Les trigrammes + +Les trigrammes sont des enchainements de trois touches. Ils peuvent souvent être +interprétés comme la composition de deux bigrammes distincts : par exemple, +[O]{.kbd}[U]{.kbd}[R]{.kbd} en Qwerty ou Azerty peut être considéré comme la +composition du roulement [O]{.kbd}[U]{.kbd} et de l’alternance +[U]{.kbd}[R]{.kbd}. Cette approximation est suffisante dans la plupart des cas. + +On distingue toutefois le cas des roulements de trois touches : enchainer deux +roulements dans le même sens est bien plus efficace que d’enchainer deux +alternances, car on ne fait toujours qu’un mouvement pour actionner les trois +touches plutôt qu’un mouvement par touche. + +Inversement, il y a aussi des trigrammes qui produisent des achoppements, et +dont il faut tenir compte de façon spécifique : + +- SFS (same-finger skipgram) : un SFB avec une touche d’un + autre doigt intercalée au milieu, par exemple [E]{.kbd}[A]{.kbd}[D]{.kbd} ou + [B]{.kbd}[U]{.kbd}[T]{.kbd} en Qwerty ; +- SKS (same-key skipgram) : un SKB avec une touche d’un autre + doigt intercalée au milieu, par exemple [E]{.kbd}[R]{.kbd}[E]{.kbd} ou + [E]{.kbd}[L]{.kbd}[E]{.kbd} en Qwerty ; +- redirection : enchainement de deux roulements de sens opposés, par exemple + [S]{.kbd}[A]{.kbd}[D]{.kbd} ou [M]{.kbd}[O]{.kbd}[K]{.kbd} en Qwerty ; + +Les SFS et SKS sont bien moins gênants que les SFB et SKB respectivement, mais +ils doivent être pris en compte pour ne pas dégrader le confort de la +disposition. + +Les redirections peuvent être acceptables. C’est le cas du mot `avec` tapé en +Ergo‑L, qui correspond à AVDW en +Qwerty : un roulement intérieur suivi d’un roulement extérieur, avec un pivot +sur l’index. Sans être aussi confortable qu’un simple roulement, ça reste un +mouvement facile et peu sujet à l’erreur. Et plus généralement, on constate que +si l’index intervient dans une redirection (donc soit en début, soit en pivot, +soit en fin d’enchainement), le mouvement est confortable… ou le devient avec un +peu de pratique. + +On parle de *mauvaise* redirection quand l’index n’intervient pas dans le +mouvement. C’est le cas de la chaine `uti` en Ergo‑L, qui correspond à +;KL en Qwerty. Ce type d’enchainement est +inconfortable et très sujet à l’erreur, la pratique n’atténuant que +partiellement la gêne. Et `uti` a beau être sur la home row en +Ergo‑L, c’est bien moins confortable à taper que `avec`, même si celui-ci +utilise les trois rangées. + + +Critères d’évaluation +-------------------------------------------------------------------------------- + +### Métriques indispensables + +Un analyseur de disposition de clavier doit, en tout premier lieu, fournir des +métriques sur les principaux critères : + +:::{.highlight} +- la heatmap doit être centrée sur les positions confortables ; +- la charge des doigts doit être bien répartie et épargner les auriculaires ; +- le taux de bigrammes de même doigt (SFU) doit être le plus bas possible ; +- le nombre de ciseaux et d’extensions (LSB) doit être le plus bas possible ; +- le taux de mauvaises redirections doit être le plus bas possible. +::: + +**Chacune de ces métriques est importante** : chez les Ergonautes, on considère +que la qualité ressentie d’une disposition est reflétée par sa pire métrique, +voire son pire achoppement, bien plus que par une moyenne (fût-elle pondérée) de +toutes ces métriques. + +**Ces métriques sont faites pour mettre en évidence des défauts**, et ne sont +pas de bons benchmarks. Par exemple, une diposition qui aurait +2 % de SFU serait bien plus confortable qu’une disposition qui n’en aurait que +1 %, mais concentré sur un auriculaire : dans le second cas, la métrique est +meilleure mais un défaut en particulier rend toute la disposition insupportable. +Et c’est pour cela que les bons analyseurs détaillent ce type de métriques par +doigt, et ne se contentent pas d’une valeur moyenne. + +Les trois premières métriques sont très consensuelles ; les deux dernières sont +moins souvent prises en considération, mais de notre point de vue c’est une +erreur majeure que de les négliger — et elles deviennent même primordiales pour +les dispositions favorisant les roulements aux alternances de mains. + +### SHU, same-hand usage ? + +Le SHU mesure la répartition entre alternances de mains et roulements. + +À l’époque des machines à écrire mécaniques, le SHU devait être le plus bas +possible car les roulements coinçaient souvent les marteaux : Qwerty et surtout +Dvorak ont été développés dans cet objectif. C’est aussi le cas de Bépo et de +ses nombreuses variantes. + +Mais, de nos jours, les claviers informatiques n’ayant pas de contrainte de ce +type, on ne cherche plus à minimiser cette métrique du SHU : elle permet juste +de voir si une disposition privilégie les alternances de mains ou les +roulements. + +On constate même que la plupart des dispositions modernes privilégient les +roulements, qui sont perçus comme plus confortables et moins sujets à l’erreur. +C’est notamment le cas de Workman, qui a grandement inspiré Ergo‑L : + +> In designing Workman, I preferred a high SHU (low alternation) over a low SHU +> (high alternation). I think high alternation is beneficial if you’re typing on +> mechanical typewriters but not necessarily on modern keyboards. + +> It is much more efficient to ride the momentum of a single arm or wrist stroke +> and type a combo rather than just one key. + +— [Kevin DeLoach][kdeloach], disposition [Workman][] + +C’est un constat qui a également été fait par certains Bépoètes qui ont proposé +des améliorations très significatives de Bépo. C’est notamment le cas de +l’auteur de Béop : + +> La frappe d’un roulement facile peut être plus rapide, plus confortable et +> moins sujette à la faute de frappe qu’une alternance de mains. + +— extrait des notes de conception de [Béop][] + +Et c’est un sujet qui a été longuement détaillé par [Nuclear Squid][] dans sa +conférence « [Ergonomie clavier : l’ère post-Dvorak][cdl2023-slides] » +([vidéo][cdl2023-video]). + +Attention : les dispositions de clavier qui privilégient les roulements prennent +le risque d’avoir un taux élevé de mauvaises redirections. + +### Distance parcourue ? + +Une métrique historique consiste à mesurer la distance parcourue par les doigts +pendant la saisie d’un texte : c’est facile à calculer, et toujours amusant de +savoir combien de kilomètres nos doigts parcourent pour saisir un texte. :-) + +CarpalX et KLA l’utilisent toujours, et Claude Marsan l’utilisait déjà en 1991 +pour vanter les mérites de sa disposition de clavier : + +> Pour 100 000 frappes […], la distance projetée sur un plan horizontal +> parcourue par les doigts est de 1 400 mètres, alors qu’en AZERTY, elle est de +> 3 216 mètres. + +— *[La fin de l’AZERTY ?!]*, p. 299 + +Les analyseurs modernes n’utilisent plus cette métrique, car elle n’est +pertinente que si l’on suppose que tous les déplacements de doigt se valent — ce +qui est totalement faux, comme expliqué dans le paragraphe sur [la heatmap]. + +Corollaire : cette métrique est une très mauvaise cible d’optimisation. À +vouloir réduire la distance parcourue sans distinction de doigts, l’optimum +n’est atteint que quand les auriculaires font autant de distance que les index — +ce qui va grossièrement à l’encontre des objectifs ergonomiques communément +admis. + +Cette métrique est amusante, mais à n’utiliser qu’à titre de curiosité ! + +### Note globale ? + +Certains analyseurs de layout proposent une note globale, qui +est une moyenne pondérée de plusieurs critères plus objectifs. Si vous +connaissez les critères utilisés et êtes d’accord avec leur pondération, cette +note globale peut donner une évaluation générale appréciable lors des premières +phases d’optimisation. + +Mais il y a deux choses importantes à garder à l’esprit : + +- une note globale ne rend pas compte des pires défauts de la disposition : ils + sont soit noyés dans la moyenne, soit complètement ignorés ; +- quelle que soit sa qualité, une note globale ne sera jamais une bonne cible + d’optimisation. + +> Lorsqu’une métrique devient un objectif, elle cesse d’être une bonne métrique. + +— [loi de Goodhart](https://fr.wikipedia.org/wiki/Loi_de_Goodhart) + + +Optimiser pour une note globale ? +-------------------------------------------------------------------------------- + +Ça peut être contre-intuitif, mais optimiser pour une note globale est voué à +l’échec : chercher à atteindre la meilleure valeur va nécessairement dégrader +les métriques qui ne sont pas (ou pas suffisamment) prises en compte par la note +globale. + +Pour s’en convaincre, il y a deux exemples assez caricaturaux : CarpalX et +Optimot. + +### L’approche CarpalX + +S’il existait une note globale pertinente, n’importe quel développeur aurait pu +déterminer une disposition de clavier optimale pour un corpus donné en +appliquant un algorithme de [recuit simulé][]. + +C’est ce qu’a fait [CarpalX][], qui est le projet le plus ancien et le plus +connu dans le domaine. Sa note globale est un [score d’effort][CarpalX-effort] +qui est basé sur un modèle assez complexe prenant en compte de multiples +critères, notamment : + +- l’alternance des mains ; +- le SFU ; +- les roulements ; +- la réduction de la charge des auriculaires ; +- la limitation des enchainements complexes. + +CarpalX a ainsi abouti à la disposition [QFMLWY][], qui a le meilleur score +d’effort possible. Et la disposition [Qwerty-Flip][] a un score d’effort quasi +identique à Dvorak, alors qu’elle est très proche de Qwerty — et donc bien plus +simple à apprendre, tout en conservant les raccourcis clavier usuels. + +![Qwerty-Flip (illustration du site de l’auteur).](qwerty-flip.gif) + +Et pourtant, personne n’utilise ces dispositions. Deux hypothèses : + +- soit c’est un simple manque de notoriété : elles sont très bonnes mais trop + peu connues ; +- soit le score d’effort est une métrique imparfaite, et un très bon score + d’effort peut masquer des défauts majeurs. + +Et de fait : le score d’effort accorde bien trop peu d’importance au SFU. Il +s’élève à 4,6 % pour QFMLWY, bien loin de Dvorak (2,7 %), Colemak (1,6 %) ou +Ergo‑L (1,2 %). Quant à Qwerty-Flip, son SFU est très logiquement le même que +celui de Qwerty, soit 5,7 %. Le résultat est constatable immédiatement, et ce +n’est là que le principal défaut de ces dispositions. + +> The CarpalX layout seemed attractive due to its supposed scientific derivation. +> After getting up to 10 WPM, I think I preferred it to Dvorak. It seemed to +> have surprisingly high same finger usage — especially the right index. +> Digrams using A, F, I, and P felt uncomfortable, and common enough to really +> bug me. Seemed like a big oversight to an otherwise great layout. + +— [u/fullyassociative] + +La démarche de CarpalX est basée sur un [modèle d’effort][CarpalX-effort] très +précis, qui donne l’illusion qu’optimiser pour ce score d’effort aboutira de +façon scientifique à la meilleure disposition possible ; et, intuitivement, on a +envie d’y croire ! On voit ici que bien que cet utilisateur ait rapidement perçu +les principaux défauts de cette disposition, il cherche à minimiser son ressenti +à cause de la confiance qu’inspire cette métrique. + +Mais, en pratique, toutes les dispositions issues de ce type d’optimisation ont +des défauts rédhibitoires qui sont noyés dans la moyenne du score d’effort. Ce +score, aussi élaboré soit-il, ne parvient pas à rendre compte de la qualité +d’une disposition. + +À l’usage, on a constaté que CarpalX trouvait rapidement des dispositions +correctes avec un SFU pas trop élevé et une bonne répartition de la charge des +doigts, puis qu’à chaque itération il proposait des dispositions marginalement +meilleures pour le score d’effort mais où le SFU se dégradait fortement. On +atteint là les limites de l’optimisation mono-critère. + +### L’approche Optimot + +S’il existait une note globale pertinente mais que vous n’aviez pas les +compétences requises pour la mise en œuvre d’un algorithme d’optimisation tel +que CarpalX, vous pourriez passer par un analyseur en ligne qui propose une +évaluation similaire ; et, à force d’essais, vous obtiendriez une disposition +très bien notée pour votre langue cible — probablement le français, si vous +lisez cet article. + +C’est l’approche retenue par Optimot, une variante non libre de Bépo. +Étonnamment, l’analyseur retenu est [KLAnext][], qui est [loin d’être le plus +abouti][les principaux analyseurs]. Ayant optimisé sa disposition pour KLAnext, +l’auteur d’Optimot affirme ainsi que sa disposition est la meilleure en +français, puisque c’est celle qui a la meilleure note sur KLAnext. + +Faisons abstraction du raisonnement circulaire et intéressons-nous à l’anglais : +dans cette langue, Optimot a une note KLAnext quasi équivalente à celle de +Colemak et MTGAP, qui sont deux des meilleures dispositions anglophones +modernes. Comment est-ce possible, alors qu’Optimot dédie beaucoup de bonnes +touches aux lettres accentuées du français ? Et alors que son auteur confirme +que l’anglais n’est qu’un objectif secondaire de cette disposition ? + +> Moi aussi, je peux modifier légèrement Optimot pour optimiser un peu plus pour +> l’anglais (mais au détriment du français). Mais ce n’est pas mon choix parce +> que nous sommes en France et que je m’adresse à des personnes qui écrivent +> d’abord en français. + +— Pyjam, auteur d’Optimot + +Là encore, deux hypothèses sont envisageables : + +- soit les meilleurs auteurs de dispositions anglophones qui ont travaillé le + sujet au cours des vingt dernières années sont totalement incompétents ; +- soit la note globale de KLAnext comporte des failles trop importantes pour + rendre compte de la qualité d’une disposition. + +Fatalement, la deuxième hypothèse est de loin la plus probable. Et de fait, la +note globale de KLAnext comporte des failles évidentes. + +- Elle *pénalise* les roulements, qui sont pourtant les meilleurs enchainements + possibles sur un clavier informatique. Optimiser pour KLAnext suppose donc de + *casser* les roulements et ainsi de *dégrader* la disposition. +- Elle ne pénalise ni les extensions de doigts, ni les ciseaux : le `EN` + d’Ergo‑L et le `WH` de Bépo (DF et + ]. en Qwerty) ont la même pénalité, alors qu’il s’agit + respectivement du meilleur et du pire enchainement possible. Optimiser pour + KLAnext fait privilégier les *ciseaux* aux roulements. +- Elle ne semble pas prendre en compte l’équilibre de la charge des doigts : + Optimot a une charge de plus de 11 % sur l’auriculaire droit en français, ce + qui est exceptionnellement élevé pour une disposition de clavier (ergonomique + ou non), et souvent rédhibitoire. Un travers de la [distance parcourue ?] +- Elle est plus sensible à la géométrie du clavier qu’à la disposition des + touches. Ainsi, pour l’anglais, Bépo sur Ergodox a une meilleure note que + Sturdy sur ANSI — s’agissant là respectivement de la pire et de la meilleure + disposition qui soient pour cette langue, cette note ne traduit pas du tout + l’écart de confort ressenti. + +![Scores KLAnext de Bépo et Sturdy en anglais.](klanext_bepo.png) + +Le cas de KLAnext est un peu caricatural, mais à mon sens le problème ne vient +pas tant de l’analyseur que du mésusage de sa note globale : elle peut donner +une première appréciation générale, mais elle n’est pas une bonne cible +d’optimisation. + +Tout ceci n’invalide pas les qualités d’Optimot : comme on le dit dans notre +[comparateur][], cette disposition reste une belle amélioration de Bépo pour le +même objectif, écrire en français sur un clavier standard. Mais elle n’est [pas +optimisée pour l’anglais][optimot-en], comme le reconnait son auteur à juste +titre ; et, si l’optimisation basée sur KLAnext a permis de réduire +significativement le SFU, elle n’a pas permis de corriger ni le nombre de +ciseaux, ni le mauvais équilibre de la charge des doigts, ni le [manque de +compatibilité avec les claviers compacts][adaptations], trois défauts hérités de +Bépo mais ignorés par KLAnext. + +### Une autre note globale est-elle possible ? + +Après avoir constaté que les notes globales de CarpalX et KLA/KLAnext étaient +mauvaises, j’ai longtemps été persuadé qu’il devait *forcément* y avoir une +bonne métrique globale ailleurs. + +Mais, à l’usage, on s’est rendu compte que toute note globale présentera les +mêmes défauts : + +- c’est une notation très subjective, puisque la pondération des différents + critères change complètement le résultat ; +- ce n’est pas une bonne cible d’optimisation, car cela pousse à négliger les + défauts peu punis par la notation ; +- ce n’est pas un bon critère d’évaluation non plus, une disposition pouvant + avoir un défaut rédhibitoire sans que cela affecte la note globale. + +Durant la conception d’Ergo‑L, on a perdu beaucoup de temps à tenter des +optimisations mono-critères avec un [algorithme génétique][] ou de [recuit +simulé][]. Certains outils plus aboutis comme [Keyboard Layout +Optimizer][KLO], qui a été utilisé pour Neo2, nous semblaient prometteurs ; +mais, à l’usage, ils ont été bien moins utiles que de simples boucles pour +explorer des possibilités par force brute, que [Nuclear Squid][] a codées vite +fait. + +> Les chiffres sont aux analystes ce que les lampadaires sont aux ivrognes : +> ils fournissent bien plus un appui qu’un éclairage. + +— Jean Dion + +Il faut se méfier quand une note globale est mise en avant plutôt que des +métriques objectives, car c’est souvent une façon (délibérée ou non) de passer +sous silence les pires aspects d’une disposition de clavier. Et ça devient +franchement trompeur quand la disposition a été optimisée pour cette note +globale. + + +Optimiser façon Ergonaute ! +-------------------------------------------------------------------------------- + +Comme on vient de le voir, ce n’est pas tant l’analyseur que son utilisation qui +est en cause : vouloir évaluer ou optimiser des dispositions à l’aune d’une note +globale est voué à l’échec. Il faut procéder autrement. + +### L’état de l’art + +Avant de se lancer dans l’élaboration d’une disposition de clavier, il est +vivement recommandé de chercher un maximum d’informations sur le sujet. Les +mille et une variantes de Bépo qui ont fleuri laissent penser que la plupart des +adeptes francophones d’ergonomie clavier sont restés sur les principes Dvorak, +qui, datant des années 1930, concernaient les machines à écrire. + +Or, beaucoup de choses ont changé depuis une petite vingtaine d’années, avec +notamment : + +- des dispositions de clavier basées non plus sur l’alternance de mains, mais + sur les roulements — Colemak a ouvert la voie, suivie de bien d’autres ; +- les [claviers compacts][] et l’approche [1DFH][], qui réduisent drastiquement + les mouvements de doigts ; +- des analyseurs qui, utilisés avec soin, permettent de sortir de l’évaluation + « au doigt mouillé ». + +On essaye de regrouper et vulgariser un maximum d’informations à ce sujet sur ce +site et sur le [serveur Discord][], en espérant que ça puisse aider les auteurs +et autrices de dispositions. Côté anglophone, [r/KeyboardLayouts][] et le +[Keyboard Layouts doc][] sont des mines d’or. + +### La méthode + +Elle repose sur deux idées fortes : + +> Quelle que soit la disposition de clavier, son pire défaut se ressentira +> toujours plus que ses meilleures qualités. + +— crédo ergonaute + +> Soyez pas cons : ayez des stats. + +— [Ergonomie clavier : l’ère post-Dvorak][soyez pas cons] + +C’est l’approche qu’on propose sur notre [comparateur][] et qu’on a suivie +pendant toute la mise au point d’Ergo‑L. On a itéré comme suit : + +1. Identifier le pire achoppement de la disposition (SFB, ciseau, redirection…). +2. Améliorer notre analyseur pour qualifier et mesurer cet achoppement. +3. Trouver une modification du layout qui, sur la foi de + l’analyseur, réduise cet achoppement. +4. Utiliser ce layout jusqu’à détecter un autre achoppement + (généralement moins grave). +5. `GOTO 1`. + +**On n’a donc jamais eu aucun usage d’une note globale.** +Au contraire, on regarde toujours la pire note et les pires enchainements pour +évaluer une disposition et proposer des améliorations. + +Cela dit, il y a bien une métrique que l’on regarde plus que les autres, c’est +le SFU : ça donne assez rapidement une idée de la marge d’optimisation qui +reste. Pour autant, et même si on est très fièr·e·s du SFU d’Ergo‑L en français +comme en anglais, ça n’est pas un objectif en soi : [Nuclear Squid][] a même +rejeté des expérimentations qui avaient des SFU incroyablement bas, mais qui +causaient d’autres problèmes plus sournois à l’usage. + +C’est notamment le cas d’une expérimentation qu’on a faite un peu par accident +sur la fin du projet Ergo‑L, et qui est devenue [Colemak French Touch][]. Le SFU +était terrifiant (0,7 %) et le fait de coller à une disposition très connue +était un avantage auquel on était sensible, à tel point qu’on a envisagé +d’annuler la sortie (alors imminente) d’Ergo‑L 1.0 ! Mais deux problèmes sont +apparus assez vite : + +- la charge des doigts était trop déséquilibrée, surtout en anglais + étrangement ; +- la redirection `OUI` était *très* inconfortable. Et on est retombés sur une + conclusion qui nous était déjà apparue plus tôt dans le projet : soit on + répartit ces trois lettres sur les deux mains, soit il faut que l’une des + trois soit sous un index. + +On constate que les enchainements inconfortables évoluent de deux façons +possibles avec la pratique : soit ils deviennent acceptables, soit ils se +révèlent insupportables. D’où l’intérêt de pratiquer la disposition qu’on +utilise — et, idéalement, d’être plusieurs personnes à pratiquer. Les zones +d’inconfort sont propres à chacun·e d’entre nous, et cela peut dépendre autant +de la personne que du type de clavier. + +En ce qui me concerne, mes premiers tests d’Ergo‑L remontent à la version 0.7, +qui ne diffère que très légèrement d’Ergo‑L 1.0. Et, bien qu’Ergo‑L 0.7 ait des +métriques excellentes, le bigramme `if` (LP en Azerty ou +Qwerty) m’était très inconfortable. Ergo‑L avait beau être meilleur que +Lafayette *dans l’ensemble*, le fait qu’il soit pire sur un point aussi +désagréable me dissuadait totalement de changer de disposition. Le problème a +été résolu par [Moussx][] avec une permutation de trois touches : ça peut +paraitre anecdotique, mais ça a *complètement* changé mon expérience de cette +disposition de clavier. + +Il faut évidemment avoir des stats solides, et savoir les faire évoluer tout au +long de l’optimisation d’une disposition de clavier ; mais il nous semble tout +aussi essentiel d’alterner entre des phases d’optimisation et des phases +d’expérimentation pour mettre en lumière les enchainements inconfortables… et +les résoudre. + +### Les outils + +Les itérations de développement ont été facilitées par : + +- [x‑keyboard][], pour tester nos layouts ; +- [kalamine][], pour générer et installer les pilotes ; +- [notre analyseur maison](/stats). + +On a développé notre propre analyseur pour plusieurs raisons : + +- aucun analyseur existant ne prenait en compte les touches mortes, alors que + toutes les dispositions francophones en font usage — et c’est même un élément + fondamental d’Ergo‑L ; +- au fur et à mesure de l’avancement du projet, on a voulu mettre en lumière + certains défauts de la disposition qui n’étaient pas toujours pris en compte + par les autres analyseurs : part des extensions dans la charge des doigts, + qualification des redirections, repérage des ciseaux… +- x‑keyboard, qui avait été développé bien plus tôt, avait déjà beaucoup des + fonctionnalités requises pour développer un analyseur ; +- c’était simple et fun à faire. :-) + +Bien évidemment, on a vérifié que, pour un même layout et un +même corpus, notre analyseur donnait les mêmes résultats que les analyseurs +existants. Et, bien sûr, tout est disponible sous licence libre pour que +chacun·e puisse étudier, modifier, utiliser et rediffuser le tout comme bon lui +semblera. + +Outre les métriques, cet analyseur a pour but de lister tous les bigrammes et +trigrammes qui peuvent causer de l’inconfort. Ce n’est pas tant un benchmark qu’un outil d’optimisation. + +### La communauté + +Faire une disposition de clavier pour soi-même est relativement aisé ; en faire +une qui convienne au plus grand nombre, c’est une autre histoire. + +En particulier, on a tou·te·s des niveaux de tolérance différents à certains +défauts de layout : pour moi les extensions d’auriculaire sont +particulièrement pénibles, alors que d’autres préfèrent ça plutôt que d’utiliser +AltGr ; certain·e·s s’accommodent bien des ciseaux (notamment les adeptes de +claviers 3D), d’autres pas du tout ; et les mauvaises redirections sont le point +le plus clivant : certain·e·s s’y font, mais beaucoup trouvent ça rédhibitoire à +l’usage. + +Pour prendre en compte toutes ces particularités, notre analyseur ne se contente +pas de mesurer chaque type d’achoppement mais les détaille en listant tous les +bigrammes et trigrammes pouvant poser problème. Ça nous a fait gagner beaucoup +de temps en facilitant les échanges de la communauté des Ergonautes pendant le +développement d’Ergo‑L. + + +Les principaux analyseurs +-------------------------------------------------------------------------------- + +Notre analyseur n’est ni le premier, ni le dernier à être développé. Petit tour +d’horizon des autres analyseurs parmi les plus connus et les plus utiles. + +### CarpalX + +[CarpalX][] est un analyseur et optimiseur en Perl, proposé par [Martin +Krzywinski][] sous licence non libre (CC-BY-NC-SA 4.0). Le [code +source][CarpalX-source] est disponible sur son site, la dernière modification +(version 0.12) remonte à 2015. + +CarpalX a un intérêt historique mais, comme [mentionné plus haut][l’approche +CarpalX], son score d’effort ne permet pas de fournir une évaluation fiable, +loin de là. Il a globalement été une perte de temps pour le développement +d’Ergo‑L. + +### KLA (Keyboard Layout Analyzer) + +[KLA][] est un analyseur libre en PHP et JavaScript, proposé par [Patrick +Gillespie][patorjk] sous licence libre (MIT). Le [code source][KLA-source] est +disponible sur GitHub, la dernière modification remonte à 2019. + +[KLAnext][] est un fork non libre de KLA par [Ian Douglas][]. Ce fork est +lui-même dérivé de [KLAtest][] ([source][KLAtest-source]) par [Xay Vong][], +alias Shena’Fu ou Den. Sans accès au code, difficile d’évaluer ce qu’apporte +KLAnext à l’original — mais, comme évoqué plus haut, il ne nous semble pas +pertinent. C’est en référence aux failles de KLAnext que la plaisanterie +« *[Qwerty-Lafayette est le meilleur layout du monde !][lafayette_mldm]* » est +devenue récurrente dans la communauté ergonaute. :-) + +Plus intéressant, [SteveP][] a développé un [fork libre de KLA][KLA-SteveP] +([source][KLA-SteveP-source]) et détaille précisément les [corrections +apportées][KLA-SteveP-about] : + +- le calcul de distance parcourue est remplacé par une évaluation de *pénalité* + de distance, qui est pondérée par doigt pour prendre en compte la [loi de + Fitts][] — ça n’est pas aussi poussé que ce que proposent Workman ou + Colemak-DH, mais c’est déjà un progrès très significatif ; +- le SHU n’est plus du tout pris en compte dans le calcul de la note globale, si + bien que les roulements ne sont plus considérés comme une pénalité. Enfin ! + +Chaque variante de KLA a ses propres paramètres de pondération pour la note +globale, qui est par nature très subjective. On recommande d’ignorer cette note. + +Le fork de SteveP propose des métriques plus saines que KLAnext. À notre +connaissance, c’est la version de KLA la plus utilisée. C’est aussi la version +qui a été la mieux maintenue : son développement ne s’est arrêté qu’en mai 2021. + +Toutefois, sur les [5 critères indispensables][métriques indispensables] à nos +yeux, seul le SFU est analysé par KLA. Attention à ne pas perdre de vue les 4 +autres ! + +### Colemak-DH + +[Colemak-DH][] est un projet qui a enthousiasmé beaucoup d’anglophones, à juste +titre : c’est une belle amélioration de Colemak, qui lui confère un beau +rééquilibrage de la heatmap, proche de celle de Workman (qui +fait office de référence dans ce domaine), tout en réduisant significativement +les extensions latérales (LSB). + +Et comme c’est un projet d’ampleur, ses contributeurs — dont un certain SteveP — +ont développé [un analyseur][Colemak-DH-analyzer] qui reflète les choix de cette +disposition, notamment la recherche de bons roulements et d’une bonne +répartition de la charge des doigts. Le [code source][Colemak-DH-source] (JS) de +cet analyseur est disponible sous licence libre (CC0). + +C’est un analyseur plus complet que KLA, qu’il semble avoir remplacé — au moins +auprès des développeurs qui y ont contribué. Le dernier commit remonte à juin +2022. + +![Accessibilité des touches selon [Colemak-DH].](colemak_dh_effort.png) + +Il remplace la mesure de distance parcourue par une évaluation globale de la heatmap basée sur un [score d’effort][Colemak-DH-effort] associé à +chaque touche, selon un modèle plus précis que celui de Workman (qui vise +surtout à être un ordre de grandeur pour les humains). Le résultat est +intéressant, bien plus pertinent qu’une mesure de distance parcourue, mais reste +assez subjectif — et donc débattable en tant que benchmark. + +Contrairement à KLAnext, il introduit la notion de roulement sous la forme de +« bigramme de doigts voisins », une notion plus restrictive que la définition +du roulement qu’on propose ici, et qui, étrangement, exclut l’index — +probablement pour éviter de favoriser les LSB, un défaut rédhibitoire chez +Colemak dont Colemak‑DH cherche a se débarrasser. + +**Attention** : les ciseaux ne sont pas pris en compte par cette métrique, ce +qui peut donner des résultats surprenants ! Aucun souci sur Colemak-DH, puisque +c’est une variante de Colemak, qui fait déjà très attention aux ciseaux ; mais +c’est susceptible d’être une source d’erreurs si on utilise cet analyseur sur +d’autres dispositions. Par exemple, les bigrammes `SH` et `YO` d’Optimot +([K]{.kbd}[>]{.kbd} et [X]{.kbd}[E]{.kbd} en Qwerty) sont considérés comme les +deux meilleurs roulements de cette disposition (en anglais), alors qu’il s’agit +en fait de deux de ses pires ciseaux. + +### Oxeylyzer ❤️ + +[Oxey][] est un auteur de dispositions de clavier très reconnu, notamment pour +[Sturdy][] qui est d’une efficacité redoutable en anglais : un SFU très bas +(0,9 %), beaucoup de roulements, très peu de ciseaux. Du grand art ! + +Oxey propose aussi un analyseur très complet avec [Oxeylyzer][], dont le [code +source][oxeylyzer-source] (Rust) est disponible sous licence libre (Apache 2.0). +Cet « Oxeylyzer » est à nos yeux le meilleur analyseur du moment : + +- des métriques précises, complètes et pertinentes : sa notion de « mauvaises » + redirections, notamment, nous a été très utile ; +- facile à interpréter grâce aux codes de couleur (vert, c’est bien ; rouge, + c’est mal) ; +- pas de note globale (tant mieux !), mais efficace pour vite repérer les points + faibles d’une disposition ; +- très pratique pour tester des permutations de touches. + +![Heatmap anglophone de Sturdy dans +[Oxeylyzer].](oxeylyzer.png) + +Contrairement à Colemak-DH, aucune métrique d’ensemble ne cherche à qualifier la +heatmap : elle est mise en avant telle quelle, c’est simple et +objectif. + +Oxeylyzer est limité aux dispositions [1DFH][] (3×5 touches par main), ce qui +nous semble très pertinent d’un point de vue ergonomique, mais ça serait un +inconvénient pour des dispositions du type Bépo, qui font le choix d’étaler les +lettres sur deux colonnes supplémentaires afin de moins recourir aux touches +mortes. + +C’est vraiment l’analyseur de référence pour nous. On le recommande vivement ! +Et le projet est activement maintenu, le dernier commit datant de moins de 6 +mois à l’heure où j’écris ces lignes. + +### Kalamine 🚀 + +[Kalamine][] est avant tout le générateur de pilotes que l’on a développé pour +Qwerty-Lafayette et Ergo‑L ; mais, au fil du temps, il s’est transformé en outil +de mise au point tout-en-un pour les auteurs et autrices de dispositions de +clavier. L’analyseur d’Ergo‑L vient ainsi d’être intégré à Kalamine, ce qui +permet de visualiser directement l’impact de chaque modification de layout. + +Le générateur est écrit en Python, l’analyseur en JavaScript, et l’ensemble du +code source est proposé sous licence libre (MIT). + +![Heatmap francophone d’Ergo‑L dans +[Kalamine].](/presentation/ergol_fr.svg) + +Il n’est pas encore au niveau d’Oxeylyzer mais il a pour nous des avantages +importants, notamment : + +- l’intégration de [x‑keyboard][] pour visualiser la disposition et tester + rapidement une modification sans avoir à l’installer ; +- et surtout, le support des touches mortes ! À notre connaissance, c’est le + seul analyseur qui dispose de cette fonctionnalité. + +On espère qu’en mettant [notre analyseur maison](/stats) à disposition dans +Kalamine il pourra servir à d’autres projets qu’Ergo‑L et les dispositions de la +famille Lafayette. Et il est toujours en développement actif, notamment pour les +projets Erglace et Hypergol. + + +Conclusion +-------------------------------------------------------------------------------- + +- Il n’y a pas de mauvais analyseur, juste des mauvaises façons de s’en servir. +- Il n’y a pas de bonne note globale, ni de bonne façon de s’en servir. +- Chaque métrique est importante, car on a toutes et tous nos préférences et nos + ressentis : + +:::{.highlight} +- la heatmap doit être centrée sur les positions confortables ; +- la charge des doigts doit être bien répartie et épargner les auriculaires ; +- le taux de bigrammes de même doigt (SFU) doit être le plus bas possible ; +- le nombre de ciseaux et d’extensions (LSB) doit être le plus bas possible ; +- le taux de mauvaises redirections doit être le plus bas possible. +::: + +Une dernière recommandation : l’ergonomie passe avant l’optimisation. Quand on +dit qu’Ergo‑L est « [ergonomique avant tout](/) », ça n’est pas un simple +slogan, c’est *littéralement* ce qu’on a fait : *d’abord* caler l’ergonomie +([1DFH], raccourcis clavier…), *puis* optimiser les mouvements de doigts. + +Un grand merci à [Nuclear Squid][], non seulement pour avoir initié et dirigé le +projet Ergo‑L, mais plus prosaïquement pour sa contibution à la rédaction des +chapitres sur les métriques et les analyseurs. Que le Grand Palmipède parsème +son chemin de pétales de roses. + +Merci aussi à [Moussx][], [Meriem][], [aurelberra][], [Adrienm7][], [Ju__][], +[Xiloynaha][] et [Chouhartem][] pour la relecture, les suggestions et les +corrections : on a eu plus de 400 points de discussion pour boucler cet article, +sans compter les échanges sur Discord. Gros boulot ! La communauté des +Ergonautes est fantastique. 🚀 + + +[1DFH]: /presentation/#dfh-1u-distance-from-home +[Erglace]: /erglace +[Colemak French Touch]: /lafayette/#colemak-french-touch +[claviers compacts]: /claviers/compacts +[comparateur]: /alternatives/#tableau-comparatif +[optimot-en]: /alternatives/#bépo-et-ses-variantes +[adaptations]: /claviers/#les-limitations-de-bépo-béopy-optimot +[cdl2023-slides]: /slides/capitoledulibre2023 +[cdl2023-video]: https://www.youtube.com/watch?v=96RikfmBY-U +[soyez pas cons]: https://www.youtube.com/watch?v=96RikfmBY-U&t=2017s +[serveur Discord]: https://discord.gg/5xR5K3nAFX + +[x‑keyboard]: https://github.com/OneDeadKey/x-keyboard +[kalamine]: https://github.com/OneDeadKey/kalamine + +[Qwerty-Lafayette]: https://qwerty-lafayette.org +[lafayette_mldm]: https://mastodon.social/@fabi1cazenave/111806300874072301 +[Workman]: https://workmanlayout.org/#same-hand-utilization-shu +[La fin de l’AZERTY ?!]: https://www.persee.fr/doc/linx_0246-8743_1991_hos_4_1_1206 +[Colemak-DH]: https://colemakmods.github.io/mod-dh +[Colemak-DH-analyzer]: https://colemakmods.github.io/mod-dh/analyze.html +[Colemak-DH-effort]: https://colemakmods.github.io/mod-dh/model.html +[Colemak-DH-source]: https://github.com/ColemakMods/mod-dh/tree/gh-pages +[Oxey]: https://oxey.dev +[Sturdy]: https://oxey.dev/sturdy +[Oxeylyzer]: https://oxey.dev/playground/ +[Oxeylyzer-source]: https://github.com/O-X-E-Y/oxeylyzer +[Béop]: http://beop.free.fr/index.php/Main/Pourquoi#Roulements +[recuit simulé]: https://fr.wikipedia.org/wiki/Recuit_simulé +[algorithme génétique]: https://fr.wikipedia.org/wiki/Algorithme_génétique +[CarpalX]: https://mk.bcgsc.ca/carpalx/ +[CarpalX-source]: https://mk.bcgsc.ca/carpalx/?download_carpalx +[CarpalX-effort]: https://mk.bcgsc.ca/carpalx/?typing_effort +[QFMLWY]: https://mk.bcgsc.ca/carpalx/?full_optimization +[Qwerty-Flip]: https://nick-gravgaard.com/qwerty-flip +[KLA]: https://patorjk.com/keyboard-layout-analyzer +[KLA-source]: https://github.com/patorjk/keyboard-layout-analyzer +[KLAnext]: https://klanext.keyboard-design.com +[KLAtest]: https://klatest.keyboard-design.com +[KLAtest-source]: https://bitbucket.org/Shenafu/keyboard-layout-analyzer +[KLA-SteveP]: https://stevep99.github.io/keyboard-layout-analyzer/ +[KLA-SteveP-about]: https://stevep99.github.io/keyboard-layout-analyzer/#/about +[KLA-SteveP-source]: https://github.com/stevep99/keyboard-layout-analyzer +[loi de Fitts]: https://fr.wikipedia.org/wiki/Loi_de_Fitts +[KLO]: https://github.com/dariogoetz/keyboard_layout_optimizer +[r/KeyboardLayouts]: https://www.reddit.com/r/KeyboardLayouts/ +[Keyboard Layouts doc]: https://docs.google.com/document/d/1Ic-h8UxGe5-Q0bPuYNgE3NoWiI8ekeadvSQ5YysrwII/ + +[Nuclear Squid]: https://github.com/Nuclear-Squid +[Moussx]: https://github.com/gagbo +[Meriem]: https://mastodon.xyz/@meriem +[Adrienm7]: https://hypertexte.beseven.fr +[aurelberra]: https://github.com/aurelberra +[Xiloynaha]: https://github.com/cypriani +[Ju__]: https://github.com/PetitWombat +[Chouhartem]: https://github.com/Chouhartem + +[kdeloach]: https://github.com/kdeloach +[patorjk]: https://patorjk.com/ +[SteveP]: https://github.com/stevep99 +[Martin Krzywinski]: https://mk.bcgsc.ca/ +[Xay Vong]: https://bitbucket.org/Shenafu +[Ian Douglas]: https://github.com/iandoug +[u/fullyassociative]: https://www.reddit.com/r/Colemak/comments/643uq4/tried_dvorak_carpalx_qgmlwy_and_now_colemak/ diff --git a/www/content/articles/analyse_et_optimisation/klanext_bepo.png b/www/content/articles/analyse_et_optimisation/klanext_bepo.png new file mode 100644 index 00000000..a941216e Binary files /dev/null and b/www/content/articles/analyse_et_optimisation/klanext_bepo.png differ diff --git a/www/content/articles/analyse_et_optimisation/klanext_layout.png b/www/content/articles/analyse_et_optimisation/klanext_layout.png new file mode 100644 index 00000000..d72d86ac Binary files /dev/null and b/www/content/articles/analyse_et_optimisation/klanext_layout.png differ diff --git a/www/content/articles/analyse_et_optimisation/klanext_score.png b/www/content/articles/analyse_et_optimisation/klanext_score.png new file mode 100644 index 00000000..0f2c56c2 Binary files /dev/null and b/www/content/articles/analyse_et_optimisation/klanext_score.png differ diff --git a/www/content/articles/analyse_et_optimisation/oxeylyzer.png b/www/content/articles/analyse_et_optimisation/oxeylyzer.png new file mode 100644 index 00000000..12f85120 Binary files /dev/null and b/www/content/articles/analyse_et_optimisation/oxeylyzer.png differ diff --git a/www/content/articles/analyse_et_optimisation/qwerty-flip.gif b/www/content/articles/analyse_et_optimisation/qwerty-flip.gif new file mode 100644 index 00000000..bdf869ef Binary files /dev/null and b/www/content/articles/analyse_et_optimisation/qwerty-flip.gif differ diff --git a/www/content/articles/analyse_et_optimisation/workman_ansi.png b/www/content/articles/analyse_et_optimisation/workman_ansi.png new file mode 100644 index 00000000..02897931 Binary files /dev/null and b/www/content/articles/analyse_et_optimisation/workman_ansi.png differ diff --git a/www/content/articles/analyse_et_optimisation/workman_grid.png b/www/content/articles/analyse_et_optimisation/workman_grid.png new file mode 100644 index 00000000..c4ec1c6a Binary files /dev/null and b/www/content/articles/analyse_et_optimisation/workman_grid.png differ diff --git a/www/content/articles/apprendre_a_taper/index.md b/www/content/articles/apprendre_a_taper/index.md index 32e02559..0e2b06bf 100644 --- a/www/content/articles/apprendre_a_taper/index.md +++ b/www/content/articles/apprendre_a_taper/index.md @@ -210,7 +210,7 @@ musculaire *précise*, travailler les n‑grammes peut aider à la rendre *effic vitesse. Personnellement, je m’entraîne généralement avec les paramètres ci-dessous (mais n’hésitez pas à adapter la vitesse à vos besoins !), j’essaye de viser 20 WPM au dessus de ce que je tape naturellement pour les trigrammes, et -40 WPM au dessus pour les digrammes. +40 WPM au dessus pour les bigrammes. ![mes paramètres ngram](ngram_settings.png) diff --git a/www/content/claviers/_index.md b/www/content/claviers/_index.md index 42b18ee1..77a9783f 100644 --- a/www/content/claviers/_index.md +++ b/www/content/claviers/_index.md @@ -113,7 +113,7 @@ vers l’extérieur de la paume. À prendre en compte lors du choix. C’est affaire de goûts : les géométries 3D (Kinesis, MoErgo, Dactyl, Skeletyl…) ont leurs adeptes. Elles réduisent très significativement l’inconfort lié aux -« ciseaux » (= digrammes avec changement inconfortables de rangée) et permettent +« ciseaux » (= bigrammes avec changement inconfortables de rangée) et permettent d’accéder à plus de touches qu’un clavier plat sans causer de déviations ulnaires. diff --git a/www/content/presentation/index.md b/www/content/presentation/index.md index 08db0acb..cd4e4a95 100644 --- a/www/content/presentation/index.md +++ b/www/content/presentation/index.md @@ -84,7 +84,7 @@ Ergo‑L veille à réduire autant que possible : - **la charge des doigts faibles**, surtout celle de l’auriculaire droit, responsable de [Entrée]{.kbd} et [Backspace]{.kbd} sur la plupart des claviers ; -- **le taux de digrammes de même doigt**, un type d’enchaînement très +- **le taux de bigrammes de même doigt**, un type d’enchaînement très inconfortable, notamment à haute vitesse de saisie. Ergo‑L privilégie le confort à la vitesse : on peut taper vite avec n’importe @@ -124,12 +124,12 @@ exception près, les 9 lettres les plus fréquentes sont les mêmes en français Ergo‑L place donc ces lettres aux emplacements les plus confortables (au sens de [Workman][]) et fait en sorte qu’aucun enchaînement fréquent en français ou en anglais ne soit rédhibitoire. Comme en [Colemak][], on cherche à limiter le plus -possible le taux de digrammes de même doigt, en favorisant les roulements au +possible le taux de bigrammes de même doigt, en favorisant les roulements au même titre que les alternances de mains. Bien qu’il soit **optimisé pour les deux langues, français _et_ anglais**, Ergo‑L affiche de meilleures métriques d’optimisation, tant sur la -charge des doigts que sur le taux de digrammes de même doigt : +charge des doigts que sur le taux de bigrammes de même doigt : -Ergonomie & Optimisation +Analyse et optimisation -------------------------------------------------------------------------------- -[SFU (“Same Finger Usage”)]{#SFU}, [SFB (“Same Finger Bigram”)]{#SFB} +### Bigrammes -: Aussi appelé « digramme de même doigt ». Quand deux lettres s’enchaînent avec un même -doigt, ce qui est source d’inconfort ou d’erreurs, notamment à haute vitesse. - -[SKU (“Same Key Usage”)]{#SKU}, [SKB (“Same Key Bigram”)]{#SKB} +[Bigramme]{#bigramme} -: Répétition de même touche, e.g. pour produire `nn` avec n’importe quelle -disposition de clavier, ou `és` en Ergo‑L. +: Enchainement de deux touches. + +[SFB (same-finger bigram)]{#sfb} + +: Aussi appelé « bigramme de même doigt » : enchainement de deux touches +différentes avec le même doigt. C’est source d’inconfort ou d’erreurs, notamment +à haute vitesse. + +[SFU (same-finger usage)]{#sfu} + +: Taux de SFB relevés dans un corpus de texte, exprimé en % du nombre total de +bigrammes. Plus le taux est bas, mieux c’est. + +[SKB (same-key bigram)]{#skb} + +: Répétition de même touche, par exemple pour produire `nn` avec n’importe +quelle disposition de clavier, ou `és` en Ergo‑L. + +[SKU (same-key usage)]{#sku} + +: Taux de SKB relevés dans un corpus de texte, exprimé en % du nombre total de +bigrammes. Théoriquement, il ne dépend que du corpus ; mais il peut augmenter +avec l’usage de touches mortes. + +[SHB (same-hand bigram)]{#shb} + +: Aussi appelé « bigramme de même main » : enchainement de deux touches sous +deux doigts différents de la même main. C’est ce que cherche à éviter Dvorak, +qui privilégie les alternances de mains pour des raisons historiques, liées aux +contraintes des machines à écrire mécaniques de l’époque. + +[SHU (same-hand usage)]{#shu} + +: Taux de SHB relevés dans un corpus de texte, exprimé en % du nombre total de +bigrammes. Plus le taux est bas, plus la disposition favorise l’alternance de +mains ; plus le taux est élevé, plus la disposition favorise les roulements. [Extension]{#extension} -: Quand un doigt doit atteindre une touche qui est soit sur une autre colonne -que la position de repos, soit à une distance supérieure à une touche. +: Mouvement pour atteindre une touche qui est soit sur une autre colonne que la +position de repos, soit à une distance supérieure à une touche. + +[LSB (lateral stretch bigram)]{#lsb} + +: Bigramme de même main comportant une extension, par exemple [L]{.kbd}[H]{.kbd} +en Azerty ou Qwerty. [Ciseau]{#ciseau} -: Quand un bigramme nécessite un changement de rangée inconfortable. +: Bigramme nécessitant un changement de rangée inconfortable, par exemple +[C]{.kbd}[R]{.kbd} en Azerty ou Qwerty. Le terme « ciseau » est utilisé ici +au singulier comme substantif de « mouvement en ciseaux », comme on le fait dans +divers sports. [Roulement intérieur]{#roulement} @@ -46,6 +85,22 @@ Roulement extérieur : Deux touches ou plus enchaînées sur une même main, dans le sens de l’index vers l’auriculaire. +### Trigrammes + +[Trigramme]{#trigramme} + +: Enchainement de trois touches. + +[SFS (same-finger skipgram)]{#sfs} + +: Un SFB avec une touche d’un autre doigt intercalée au milieu, par exemple +[E]{.kbd}[A]{.kbd}[D]{.kbd} ou [B]{.kbd}[U]{.kbd}[T]{.kbd} en Azerty ou Qwerty. + +[SKS (same-key skipgram)]{#sks} + +: Un SKB avec une touche d’un autre doigt intercalée au milieu, par exemple +[E]{.kbd}[R]{.kbd}[E]{.kbd} ou [E]{.kbd}[L]{.kbd}[E]{.kbd} en Azerty ou Qwerty. + [Redirection]{#redirection} : Trois touches enchaînées sur une même main avec un changement de direction, @@ -97,9 +152,9 @@ de la technologie du clavier pour développer des dispositions de clavier. Exemple le plus courant de couches : en tapant des lettres sur la couche *alpha* on obtient les lettres en minuscules, en gardant la touche - [Shift]{.kbd} enfoncée on obtient les lettres en majuscules, ce sont donc 2 - couches différentes. - + [Shift]{.kbd} enfoncée on obtient les lettres en majuscules, ce sont donc + deux couches différentes. + Ce concept de couches permet de diminuer le nombre de touches nécessaires sur un clavier et brille particulièrement sur les petits claviers ergonomiques en diminuant la distance que les doigts ont à parcourir. diff --git a/www/content/stats.html b/www/content/stats.html index 852881a2..cbf596d4 100644 --- a/www/content/stats.html +++ b/www/content/stats.html @@ -9,6 +9,11 @@ footer = "quantifié par [x-keyboard](https://onedeadkey.github.io/x-keyboard)" +++ +

Voici l’analyseur qu’on a utilisé pour la mise au point d’Ergo‑L. Les + métriques sont explicitées dans le glossaire, + et un article détaillé explique + plus précisément les principes d’analyse mis en œuvre.

+
@@ -45,26 +50,26 @@

Charge des doigts

-

Digrammes de même doigt/touche

- / +

Bigrammes de même doigt/touche

+ SFU : / SKU :
- + total : / / / - +
-
+
- - + + total : / / @@ -75,26 +80,37 @@

Digrammes de même doigt/touche

- - / - / + total : + / + / / -
-
+
+
- - - -

Glossaire

-

»»» Un glossaire est en cours d’élaboration ici. «««

+

Évaluation

+

On + ne propose pas de note globale. Au contraire, on recommande d’évaluer une + disposition de clavier selon cinq critères principaux :

+
    +
  • la heatmap doit être centrée sur les positions confortables ;
  • +
  • la charge des doigts doit être bien répartie et épargner les auriculaires ;
  • +
  • le taux de bigrammes de même doigt (SFU) doit être le plus bas possible ;
  • +
  • le nombre de ciseaux et d’extensions (LSB) doit être le plus bas possible ;
  • +
  • le taux de mauvaises redirections doit être le plus bas possible.
  • +
+

Et du point de vue des Ergonautes, la qualité d’une disposition ne se juge + pas à la moyenne de ces critères, mais au plus gênant d’entre eux. C’est quand + un layout n’a pas de gros défaut qu’il est confortable à l’usage.

Mise en garde

-

Ces métriques ne sont pas des cibles d’optimisation !

+

Ces + métriques ne sont pas des cibles d’optimisation !

Lorsqu’une métrique devient un objectif, elle cesse d’être une bonne métrique. @@ -108,10 +124,3 @@

Mise en garde

— Jean Dion
- -

Notre recommandation : utilisez ces métriques non pour mesurer les qualités -d’une disposition de clavier, mais pour essayer d’en évaluer le défaut le plus -gênant. Puis itérez sur votre layout jusqu’à ce que ce défaut soit -suffisamment réduit… sans en créer un pire ailleurs.

- -

Et recommencez. :-)