« Simulateur de frappe » : différence entre les versions

De Disposition de clavier bépo
(Nouvelle page : J'ai développé (Yota) un simulateur de frappe, applelé Klay, reposant sur une modélisation ressort-masselotte pour les doigts et la main. Le script - écrit en python - digère u...)
 
(Ajout de la catégorie "Méthodologie")
 
(26 versions intermédiaires par 7 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
J'ai développé (Yota) un simulateur de frappe, applelé Klay, reposant sur une modélisation ressort-masselotte pour les doigts et la main. Le script - écrit en python - digère un fichier de conf. XKeyBoard d'un côté et un fichier texte au format UTF-8 de l'autre (censé ne contenir que des caractères latin9, latin1 ou CP1252)
{{navigation|icone=Méthodologie.png|Méthodologie|Évaluation }}
'''Klay''' est un '''simulateur de frappe''' reposant sur une approximation d'une modélisation physique ''ressort-masselotte'' des doigts et de la main. Le script écrit en python digère un fichier de configuration de type {{c|xkb}} d'un côté et un [[corpus]] de l'autre.


Le tout semble donner des résultats cohérents. Mais ils confirment aussi ce que l'on avait déjà remarqué avec des algorithmes de comptage de fréquence de symbole, i.e. suivant le corpus les résultats obtenus sont loins de converger.
Le tout semble donner des résultats cohérents. Mais ils confirment aussi ce que l'on avait déjà remarqué avec des algorithmes de comptage de fréquence de symbole : suivant le corpus, les résultats obtenus sont loin de converger.


Cependant si vous êtes curieux...
Cependant, si vous êtes curieux...


(le script est en phase alpha, il marche pour le seul fichier de conf que j'avais sous la main au moment des tests. Il est prévu pour être flexible mais je m'attends au pire. Toute personne intêressée peut me contacter via la mailing liste )
{{note|type=attention|Le script est en phase alpha, il marche pour le seul fichier de conf que j'avais sous la main au moment des tests. Il est prévu pour être flexible, mais je m'attends au pire. Toute personne intéressée peut me contacter ''via'' la [http://if-gpl.insa-lyon.fr/cgi-bin/mailman/listinfo/dvorak-fr/ liste de diffusion].}}


==Dans le détail de la modélisation==
== Fonctionnalités ==


* On place chaque doigt (quatre à gauche et quatre à droite) sur les touches de repos (respectivement : QSDF et JKLM)
Les principales fonctionnalités de Klay sont :
* Pour chaque touche du clavier, on définit le doigt qui effectuera un déplacement pour l'atteindre (1 : index, 2 : majeur, etc. G : gauche et D : droit)
* calcul de l'énergie de frappe pour un corpus et une disposition donnés par un modèle quasi ressort-masselotte ;
* rapport détaillé des dépenses énergétiques par main, doigt, touche et caractère ;
* statistiques globales du corpus : répartition des caractères, des digrammes ;
* diagnostic des touches enchaînées avec le même doigt.


<pre>
Les petits bonus :
┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
* extensibilité aisée du code pour rajouter tout relevé statistique non encore effectué ;
│    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
* évolution quasi génétique de la disposition (en version béta).
│ 4G │ 4G │ 3G │ 3G │ 2G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D │ 4D │ 4D ║  <--  ║
╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
║      ║    │    │    │    │    │    │    │    │    │    │    │    ║  | ║
║  ->|  ║ 4G │ 3G │ 2G │ 1G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D │ 4D │ 4D ║ <-' ║
╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
║        ║    │    │    │    │    │    │    │    │    │    │    │    ║    ║
║  CAPS  ║ 4G │ 3G │ 2G │ 1G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D │ 4D │ 4D ║    ║
╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔═╧════╩════╣
║  ^  ║    │    │    │    │    │    │    │    │    │    │    ║    ^    ║
║  |  ║ 4G │ 4G │ 3G │ 1G │ 1G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D ║    |    ║
╠══════╩╦═══╧══╦═╧═══╦╧════╧════╧════╧════╧══╦═╧════╧╦═══╧══╦═╩════╦══════╣
║      ║      ║    ║                      ║      ║      ║      ║      ║
║ Ctrl  ║ WinG ║ Alt ║        SPACE        ║ AltGR ║ WinD ║ WinM ║ Ctrl ║
╚═══════╩══════╩═════╩═══════════════════════╩═══════╩══════╩══════╩══════╝
</pre>


* On définit aussi la distance relative que le doigt parcours encore cette position de repos et la touche à atteindre, suivant les deux diagrammes suivant qui définissent (la distance à parcourir est donnée en coordonnées d'unité arbitraire dans un repère cartésien pour un clavier standard)
== Utilisation ==


<pre>
Klay est un script python qui requiert le module ''numpy'' (installable directement ou via les librairies [http://www.scipy.org scipy]).
┬────┬
│  Y │ ordonnée
│  X │ abscisse
┴────┴
</pre>


<pre>
Pour invoquer le script
┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10║        ║
│ -11│ -5 │ +1 │ +1 │ +1 │ +1 │ +7 │ -5 │ +1 │ +1 │ +1 │ +1 │ +7 ║  <--  ║
╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
║      ║ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 ║  | ║
║  ->|  ║ -2 │ -2 │ -2 │ -2 │ +4 │ -8 │ -2 │ -2 │ -2 │ -2 │ +4 │ +10║ <-' ║
╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
║        ║ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 ║    ║
║  CAPS  ║ +0 │ +0 │ +0 │ +0 │ +6 │ -6 │ +0 │ +0 │ +0 │ +0 │ +6 │ +12║    ║
╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔═╧════╩════╣
║  ^  ║ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 ║    ^    ║
║  |  ║ -3 │ +3 │ +3 │ +3 │ +3 │ +9 │ -3 │ +3 │ +3 │ +3 │ +3 ║    |    ║
╠══════╩╦═══╧══╦═╧═══╦╧════╧════╧════╧════╧══╦═╧════╧╦═══╧══╦═╩════╦══════╣
║      ║      ║    ║                      ║      ║      ║      ║      ║
║ Ctrl  ║ WinG ║ Alt ║        SPACE        ║ AltGR ║ WinD ║ WinM ║ Ctrl ║
╚═══════╩══════╩═════╩═══════════════════════╩═══════╩══════╩══════╩══════╝
</pre>


* Modélisant le doigt par une masse, reliée à la main par un ressort, on calcule l'énergie nécessaire à l'extention du doigt (partant du principe qu'il reviendra en position de repos si la touche suivante est pressée par un doigt de l'autre main)
python klay.py—layout="layout_xx.xkb"—corpus="corpus_xx.txt"
* Les caractères accentués sont par défaut fait grâce à une touche directe si elle existe, sinon via une combinaison ''touche-morte'' + ''caractère''
 
 
== Modélisation ==
 
* On place chaque doigt (quatre à gauche et quatre à droite) sur les touches de repos (respectivement : QSDF et JKLM).
* Pour chaque touche du clavier, on définit le doigt qui effectuera un déplacement pour l'atteindre (1 : index, 2 : majeur, etc. G : gauche et D : droit).
 
┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
│    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
│ 4G │ 4G │ 3G │ 3G │ 2G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D │ 4D │ 4D ║  <--  ║
╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
║      ║    │    │    │    │    │    │    │    │    │    │    │    ║  | ║
║  ->|  ║ 4G │ 3G │ 2G │ 1G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D │ 4D │ 4D ║ <-' ║
╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
║        ║    │    │    │    │    │    │    │    │    │    │    │    ║    ║
║  CAPS  ║ 4G │ 3G │ 2G │ 1G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D │ 4D │ 4D ║    ║
╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔═╧════╩════╣
║  ^  ║    │    │    │    │    │    │    │    │    │    │    ║    ^    ║
║  |  ║ 4G │ 4G │ 3G │ 1G │ 1G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D ║    |    ║
╠══════╩╦═══╧══╦═╧═══╦╧════╧════╧════╧════╧══╦═╧════╧╦═══╧══╦═╩════╦══════╣
║      ║      ║    ║                      ║      ║      ║      ║      ║
║ Ctrl  ║ WinG ║ Alt ║        SPACE        ║ AltGR ║ WinD ║ WinM ║ Ctrl ║
╚═══════╩══════╩═════╩═══════════════════════╩═══════╩══════╩══════╩══════╝
 
* On définit aussi la distance relative que le doigt parcours encore cette position de repos et la touche à atteindre (la distance à parcourir est donnée en coordonnées d'unité arbitraire dans un repère cartésien pour un clavier standard).
 
┬────┬
│  Y │ ordonnée
│  X │ abscisse
┴────┴
 
┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10║        ║
│ -11│ -5 │ +1 │ +1 │ +1 │ +1 │ +7 │ -5 │ +1 │ +1 │ +1 │ +1 │ +7 ║  <--  ║
╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
║      ║ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 ║  | ║
║  ->|  ║ -2 │ -2 │ -2 │ -2 │ +4 │ -8 │ -2 │ -2 │ -2 │ -2 │ +4 │ +10║ <-' ║
╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
║        ║ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 ║    ║
║  CAPS  ║ +0 │ +0 │ +0 │ +0 │ +6 │ -6 │ +0 │ +0 │ +0 │ +0 │ +6 │ +12║    ║
╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔═╧════╩════╣
║  ^  ║ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 ║    ^    ║
║  |  ║ -3 │ +3 │ +3 │ +3 │ +3 │ +9 │ -3 │ +3 │ +3 │ +3 │ +3 ║    |    ║
╠══════╩╦═══╧══╦═╧═══╦╧════╧════╧════╧════╧══╦═╧════╧╦═══╧══╦═╩════╦══════╣
║      ║      ║    ║                      ║      ║      ║      ║      ║
║ Ctrl  ║ WinG ║ Alt ║        SPACE        ║ AltGR ║ WinD ║ WinM ║ Ctrl ║
╚═══════╩══════╩═════╩═══════════════════════╩═══════╩══════╩══════╩══════╝
 
* Modélisant le doigt par une masse, reliée à la main par un ressort, on calcule l'énergie nécessaire à l'extension du doigt (partant du principe qu'il reviendra en position de repos si la touche suivante est pressée par un doigt de l'autre main).
* Les caractères accentués sont par défaut fait grâce à une touche directe si elle existe, sinon via une combinaison ''touche-morte'' + ''caractère''.
 
== News 3 août 2007 ==
(de pmwiki Keyboard Layout Simulator)
 
Klay est en pleine évolution, une nouvelle version est sur le point de sortir avec en bonus :
* une nouvelle présentation lisible des résultats
* un algo génétique intégré
 
Il ne reste plus qu'à y injecter les données recueillies par le projet de duel d'accessibilité. [http://clement.chassagne.free.fr/public/dvorak-fr/report_basic.xhtml Voici à quoi ressemble un rapport typique], ici pour la disposition 6.3, et un [[corpus]] quelconque (un article sur l'agnosticisme de wikipedia).
 
Et là, un [http://clement.chassagne.free.fr/public/dvorak-fr/report_gen.xhtml exemple d'une progression] basée sur l'algorithme génétique (très basique pour l'instant).
 
== Archive ==
===Klay===
Klay est un script écrit en python qui a pour objectif de tester les différents claviers, et de les comparer. Ce script est conçu pour déterminer la fatigue musculaire induite lors de la frappe d'un texte donné, dans une disposition donnée.
===Fonctionnement===
 
Je vais essayer d'expliciter le fonctionnement de Klay (un des scripts d'évaluations). Voici la liste des critères qui pourront sûrement être implémentés
* pourcentage de touches pressées étant
** dans la position zéro (QSDF - JKLM en azerty) / sur la home row / sur la rangée du bas / du haut / sur la rangée des chiffres
** à la main gauche / droite
** à chacun des doigts
* taux d’alternance des mains
* taux d’usage du même doigt pour deux caractères consécutifs
 
===Descriptif===
 
# Il digère le fichier de configuration pour pouvoir sortir pour chaque caractère, la séquence des touches à presser. La liste des correspondances est créée dans un fichier appelé dictkey.txt. par exemple :
** 65 A - LATIN CAPITAL LETTER A : 'RTSH' + 'AC01'
** 166 Š - LATIN CAPITAL LETTER S WITH CARON : 'RALT' + 'RTSH' + 'AE05' + 'LFSH' + 'AC08'
#Il modélise la main comme une entité à 4 doigts, relié à la paume par un ressort.
** Pour chaque déplacement, l'énergie est quantifiée (la masse des doigts est négligée, seul est pris en compte la  raideur des ressorts)
** La position des doigts est "réinitialisée" dès qu'il y a une alternance "main-gauche" "main-droite
 
Si quelqu'un se sens le courage de reconstruire un clavier AZERTY au format xkb... je serais heureux de pouvoir enfin quantifier les progrès accomplis
 
=== Sources ===
 
Le code source est disponible — [http://clement.chassagne.free.fr/public/dvorak-fr/klay.tar.bz2 télécharger]
 
Il est fourni avec deux fichiers (les deux premiers qui me sont tombés sous la main) :
* un corpus de test (pas terrible…)
* un fichier de configuration pour la version 6.2.1.2 de bépo
 
===Détails===
La donnée d'entrée de la fonction évaluant réellement l'énergie de frappe est la séquence des touches à presser pour obtenir un caractère, un mot, un extrait complet. Pour une touche, on détermine quel doigt de quel main y accède ainsi que la distance à parcourir. Le travail résultant suit une loi qui ressemble à celle d'un point se déplaçant dans un champ d'énergie potentielle de type : point mobile relié à un point fixe par un ressort.
 
====Les paramètres====
Une carte géométrique du clavier est estimée et sert de référence pour le calcul de la distance de déplacement. Cette carte permet tout aussi bien de représenter la distance subjective entre les touches, certaines touches ''paraissant'' plus éloignées que d'autres.
 
Un deuxième paramètre note la force du doigt et sa facilité à se mouvoir. C'est un coefficient qui permet de rendre compte du fait que le petit doigt est plus faible
====Exemple de carte d'accessibilité====
Les doigts placés sur la ''home row'', les chiffres donnent une estimation du déplacement vertical et horizontal
<center><pre>
┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10║        ║
│ -11│ -5 │ +1 │ +1 │ +1 │ +1 │ +7 │ -5 │ +1 │ +1 │ +1 │ +1 │ +7 ║  <--  ║
╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
║      ║ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 ║  | ║
║  ->|  ║ -2 │ -2 │ -2 │ -2 │ +4 │ -8 │ -2 │ -2 │ -2 │ -2 │ +4 │ +10║ <-' ║
╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
║        ║ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 ║    ║
║  CAPS  ║ +0 │ +0 │ +0 │ +0 │ +6 │ -6 │ +0 │ +0 │ +0 │ +0 │ +6 │ +12║    ║
╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔═╧════╩════╣
║  ^  ║ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 ║    ^    ║
║  |  ║ -3 │ +3 │ +3 │ +3 │ +3 │ +9 │ -3 │ +3 │ +3 │ +3 │ +3 ║    |    ║
╠══════╩╦═══╧══╦═╧═══╦╧════╧════╧════╧════╧══╦═╧════╧╦═══╧══╦═╩════╦══════╣
║      ║      ║    ║                      ║      ║      ║      ║      ║
║ Ctrl  ║ WinG ║ Alt ║        SPACE        ║ AltGR ║ WinD ║ WinM ║ Ctrl ║
╚═══════╩══════╩═════╩═══════════════════════╩═══════╩══════╩══════╩══════╝
</pre></center>
Etant donné la répartition suivante des touches pour les 4 doigts de la main gauche et de la mains droite
# index
# majeur
# annulaire
# auriculaire
 
G : gauche, D : droit
<center><pre>
┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
│    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
│ 4G │ 4G │ 4G │ 3G │ 2G │ 1G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D │ 4D ║  <--  ║
╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
║      ║    │    │    │    │    │    │    │    │    │    │    │    ║  | ║
║  ->|  ║ 4G │ 3G │ 2G │ 1G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D │ 4D │ 4D ║ <-' ║
╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
║        ║    │    │    │    │    │    │    │    │    │    │    │    ║    ║
║  CAPS  ║ 4G │ 3G │ 2G │ 1G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D │ 4D │ 4D ║    ║
╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔═╧════╩════╣
║  ^  ║    │    │    │    │    │    │    │    │    │    │    ║    ^    ║
║  |  ║ 4G │ 3G │ 2G │ 1G │ 1G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D ║    |    ║
╠══════╩╦═══╧══╦═╧═══╦╧════╧════╧════╧════╧══╦═╧════╧╦═══╧══╦═╩════╦══════╣
║      ║      ║    ║                      ║      ║      ║      ║      ║
║ Ctrl  ║ WinG ║ Alt ║        SPACE        ║ AltGR ║ WinD ║ WinM ║ Ctrl ║
╚═══════╩══════╩═════╩═══════════════════════╩═══════╩══════╩══════╩══════╝
</pre></center>
 
 
=== Résultats par [[Utilisateur:Nemolivier|Nemolivier]] ===
 
J’ai utilisé les xkb que vous pouvez trouver dans le [[Subversion|dépôt]], répertoire [http://svn.tuxfamily.org/viewvc.cgi/dvorak_svn/klay/trunk/ klay/trunk], ainsi que le [[corpus]] fournis par Yota sur le liste de diffusion et qui se trouve dans le [http://svn.tuxfamily.org/viewvc.cgi/dvorak_svn/klay/trunk/ même répertoire] que les fichiers xkb.
 
* [http://www.clavier-dvorak.org/resultats/klay/report-azerty.xhtml pour la disposition azerty]
* [http://www.clavier-dvorak.org/resultats/klay/report-mouette.xhtml pour la disposition de J. Mouette]
* [http://www.clavier-dvorak.org/resultats/klay/report-64.xhtml pour bépo 6.4]
* [http://www.clavier-dvorak.org/resultats/klay/report-64nemo.xhtml pour bépo 6.4 avec inversions NR, JF, BÉ]
[[Catégorie:Méthodologie]]

Dernière version du 27 mars 2023 à 14:28

Klay est un simulateur de frappe reposant sur une approximation d'une modélisation physique ressort-masselotte des doigts et de la main. Le script — écrit en python — digère un fichier de configuration de type xkb d'un côté et un corpus de l'autre.

Le tout semble donner des résultats cohérents. Mais ils confirment aussi ce que l'on avait déjà remarqué avec des algorithmes de comptage de fréquence de symbole : suivant le corpus, les résultats obtenus sont loin de converger.

Cependant, si vous êtes curieux...

Attention

Le script est en phase alpha, il marche pour le seul fichier de conf que j'avais sous la main au moment des tests. Il est prévu pour être flexible, mais je m'attends au pire. Toute personne intéressée peut me contacter via la liste de diffusion.

Fonctionnalités

Les principales fonctionnalités de Klay sont :

  • calcul de l'énergie de frappe pour un corpus et une disposition donnés par un modèle quasi ressort-masselotte ;
  • rapport détaillé des dépenses énergétiques par main, doigt, touche et caractère ;
  • statistiques globales du corpus : répartition des caractères, des digrammes ;
  • diagnostic des touches enchaînées avec le même doigt.

Les petits bonus :

  • extensibilité aisée du code pour rajouter tout relevé statistique non encore effectué ;
  • évolution quasi génétique de la disposition (en version béta).

Utilisation

Klay est un script python qui requiert le module numpy (installable directement ou via les librairies scipy).

Pour invoquer le script

python klay.py—layout="layout_xx.xkb"—corpus="corpus_xx.txt"


Modélisation

  • On place chaque doigt (quatre à gauche et quatre à droite) sur les touches de repos (respectivement : QSDF et JKLM).
  • Pour chaque touche du clavier, on définit le doigt qui effectuera un déplacement pour l'atteindre (1 : index, 2 : majeur, etc. G : gauche et D : droit).
┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
│    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
│ 4G │ 4G │ 3G │ 3G │ 2G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D │ 4D │ 4D ║   <--  ║
╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
║       ║    │    │    │    │    │    │    │    │    │    │    │    ║   | ║
║  ->|  ║ 4G │ 3G │ 2G │ 1G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D │ 4D │ 4D ║ <-' ║
╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
║        ║    │    │    │    │    │    │    │    │    │    │    │    ║    ║
║  CAPS  ║ 4G │ 3G │ 2G │ 1G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D │ 4D │ 4D ║    ║
╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔═╧════╩════╣
║   ^  ║    │    │    │    │    │    │    │    │    │    │    ║     ^     ║
║   |  ║ 4G │ 4G │ 3G │ 1G │ 1G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D ║     |     ║
╠══════╩╦═══╧══╦═╧═══╦╧════╧════╧════╧════╧══╦═╧════╧╦═══╧══╦═╩════╦══════╣
║       ║      ║     ║                       ║       ║      ║      ║      ║
║ Ctrl  ║ WinG ║ Alt ║         SPACE         ║ AltGR ║ WinD ║ WinM ║ Ctrl ║
╚═══════╩══════╩═════╩═══════════════════════╩═══════╩══════╩══════╩══════╝
  • On définit aussi la distance relative que le doigt parcours encore cette position de repos et la touche à atteindre (la distance à parcourir est donnée en coordonnées d'unité arbitraire dans un repère cartésien pour un clavier standard).
┬────┬
│  Y │ ordonnée
│  X │ abscisse
┴────┴
┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10║        ║
│ -11│ -5 │ +1 │ +1 │ +1 │ +1 │ +7 │ -5 │ +1 │ +1 │ +1 │ +1 │ +7 ║   <--  ║
╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
║       ║ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 ║   | ║
║  ->|  ║ -2 │ -2 │ -2 │ -2 │ +4 │ -8 │ -2 │ -2 │ -2 │ -2 │ +4 │ +10║ <-' ║
╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
║        ║ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 ║    ║
║  CAPS  ║ +0 │ +0 │ +0 │ +0 │ +6 │ -6 │ +0 │ +0 │ +0 │ +0 │ +6 │ +12║    ║
╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔═╧════╩════╣
║   ^  ║ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 ║     ^     ║
║   |  ║ -3 │ +3 │ +3 │ +3 │ +3 │ +9 │ -3 │ +3 │ +3 │ +3 │ +3 ║     |     ║
╠══════╩╦═══╧══╦═╧═══╦╧════╧════╧════╧════╧══╦═╧════╧╦═══╧══╦═╩════╦══════╣
║       ║      ║     ║                       ║       ║      ║      ║      ║
║ Ctrl  ║ WinG ║ Alt ║         SPACE         ║ AltGR ║ WinD ║ WinM ║ Ctrl ║
╚═══════╩══════╩═════╩═══════════════════════╩═══════╩══════╩══════╩══════╝
  • Modélisant le doigt par une masse, reliée à la main par un ressort, on calcule l'énergie nécessaire à l'extension du doigt (partant du principe qu'il reviendra en position de repos si la touche suivante est pressée par un doigt de l'autre main).
  • Les caractères accentués sont par défaut fait grâce à une touche directe si elle existe, sinon via une combinaison touche-morte + caractère.

News 3 août 2007

(de pmwiki Keyboard Layout Simulator)

Klay est en pleine évolution, une nouvelle version est sur le point de sortir avec en bonus :

  • une nouvelle présentation lisible des résultats
  • un algo génétique intégré

Il ne reste plus qu'à y injecter les données recueillies par le projet de duel d'accessibilité. Voici à quoi ressemble un rapport typique, ici pour la disposition 6.3, et un corpus quelconque (un article sur l'agnosticisme de wikipedia).

Et là, un exemple d'une progression basée sur l'algorithme génétique (très basique pour l'instant).

Archive

Klay

Klay est un script écrit en python qui a pour objectif de tester les différents claviers, et de les comparer. Ce script est conçu pour déterminer la fatigue musculaire induite lors de la frappe d'un texte donné, dans une disposition donnée.

Fonctionnement

Je vais essayer d'expliciter le fonctionnement de Klay (un des scripts d'évaluations). Voici la liste des critères qui pourront sûrement être implémentés

  • pourcentage de touches pressées étant
    • dans la position zéro (QSDF - JKLM en azerty) / sur la home row / sur la rangée du bas / du haut / sur la rangée des chiffres
    • à la main gauche / droite
    • à chacun des doigts
  • taux d’alternance des mains
  • taux d’usage du même doigt pour deux caractères consécutifs

Descriptif

  1. Il digère le fichier de configuration pour pouvoir sortir pour chaque caractère, la séquence des touches à presser. La liste des correspondances est créée dans un fichier appelé dictkey.txt. par exemple :
    • 65 A - LATIN CAPITAL LETTER A : 'RTSH' + 'AC01'
    • 166 Š - LATIN CAPITAL LETTER S WITH CARON : 'RALT' + 'RTSH' + 'AE05' + 'LFSH' + 'AC08'
  1. Il modélise la main comme une entité à 4 doigts, relié à la paume par un ressort.
    • Pour chaque déplacement, l'énergie est quantifiée (la masse des doigts est négligée, seul est pris en compte la raideur des ressorts)
    • La position des doigts est "réinitialisée" dès qu'il y a une alternance "main-gauche" "main-droite

Si quelqu'un se sens le courage de reconstruire un clavier AZERTY au format xkb... je serais heureux de pouvoir enfin quantifier les progrès accomplis

Sources

Le code source est disponible — télécharger

Il est fourni avec deux fichiers (les deux premiers qui me sont tombés sous la main) :

  • un corpus de test (pas terrible…)
  • un fichier de configuration pour la version 6.2.1.2 de bépo

Détails

La donnée d'entrée de la fonction évaluant réellement l'énergie de frappe est la séquence des touches à presser pour obtenir un caractère, un mot, un extrait complet. Pour une touche, on détermine quel doigt de quel main y accède ainsi que la distance à parcourir. Le travail résultant suit une loi qui ressemble à celle d'un point se déplaçant dans un champ d'énergie potentielle de type : point mobile relié à un point fixe par un ressort.

Les paramètres

Une carte géométrique du clavier est estimée et sert de référence pour le calcul de la distance de déplacement. Cette carte permet tout aussi bien de représenter la distance subjective entre les touches, certaines touches paraissant plus éloignées que d'autres.

Un deuxième paramètre note la force du doigt et sa facilité à se mouvoir. C'est un coefficient qui permet de rendre compte du fait que le petit doigt est plus faible

Exemple de carte d'accessibilité

Les doigts placés sur la home row, les chiffres donnent une estimation du déplacement vertical et horizontal

 ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
 │ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10│ +10║        ║
 │ -11│ -5 │ +1 │ +1 │ +1 │ +1 │ +7 │ -5 │ +1 │ +1 │ +1 │ +1 │ +7 ║   <--  ║
 ╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
 ║       ║ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 │ +5 ║   | ║
 ║  ->|  ║ -2 │ -2 │ -2 │ -2 │ +4 │ -8 │ -2 │ -2 │ -2 │ -2 │ +4 │ +10║ <-' ║
 ╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
 ║        ║ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 │ +0 ║    ║
 ║  CAPS  ║ +0 │ +0 │ +0 │ +0 │ +6 │ -6 │ +0 │ +0 │ +0 │ +0 │ +6 │ +12║    ║
 ╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔═╧════╩════╣
 ║   ^  ║ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 │ -5 ║     ^     ║
 ║   |  ║ -3 │ +3 │ +3 │ +3 │ +3 │ +9 │ -3 │ +3 │ +3 │ +3 │ +3 ║     |     ║
 ╠══════╩╦═══╧══╦═╧═══╦╧════╧════╧════╧════╧══╦═╧════╧╦═══╧══╦═╩════╦══════╣
 ║       ║      ║     ║                       ║       ║      ║      ║      ║
 ║ Ctrl  ║ WinG ║ Alt ║         SPACE         ║ AltGR ║ WinD ║ WinM ║ Ctrl ║
 ╚═══════╩══════╩═════╩═══════════════════════╩═══════╩══════╩══════╩══════╝

Etant donné la répartition suivante des touches pour les 4 doigts de la main gauche et de la mains droite

  1. index
  2. majeur
  3. annulaire
  4. auriculaire

G : gauche, D : droit

 ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
 │    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
 │ 4G │ 4G │ 4G │ 3G │ 2G │ 1G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D │ 4D ║   <--  ║
 ╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
 ║       ║    │    │    │    │    │    │    │    │    │    │    │    ║   | ║
 ║  ->|  ║ 4G │ 3G │ 2G │ 1G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D │ 4D │ 4D ║ <-' ║
 ╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
 ║        ║    │    │    │    │    │    │    │    │    │    │    │    ║    ║
 ║  CAPS  ║ 4G │ 3G │ 2G │ 1G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D │ 4D │ 4D ║    ║
 ╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔═╧════╩════╣
 ║   ^  ║    │    │    │    │    │    │    │    │    │    │    ║     ^     ║
 ║   |  ║ 4G │ 3G │ 2G │ 1G │ 1G │ 1G │ 1D │ 1D │ 2D │ 3D │ 4D ║     |     ║
 ╠══════╩╦═══╧══╦═╧═══╦╧════╧════╧════╧════╧══╦═╧════╧╦═══╧══╦═╩════╦══════╣
 ║       ║      ║     ║                       ║       ║      ║      ║      ║
 ║ Ctrl  ║ WinG ║ Alt ║         SPACE         ║ AltGR ║ WinD ║ WinM ║ Ctrl ║
 ╚═══════╩══════╩═════╩═══════════════════════╩═══════╩══════╩══════╩══════╝


Résultats par Nemolivier

J’ai utilisé les xkb que vous pouvez trouver dans le dépôt, répertoire klay/trunk, ainsi que le corpus fournis par Yota sur le liste de diffusion et qui se trouve dans le même répertoire que les fichiers xkb.