Simulateur de frappe

De Disposition de clavier bépo

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)

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.

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 )

Dans le détail de la 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, 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)
┬────┬
│  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'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)
  • 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