« Utilisateur:Yvain » : différence entre les versions

De Disposition de clavier bépo
(Migration de « Discussion » vers « Page utilisateur » - exercices pour KTouch dans KDE 4.10)
 
(→‎Exploitation des statistiques de frappe : : analyse de la distribution statistique des vitesses)
 
(4 versions intermédiaires par le même utilisateur non affichées)
Ligne 2 : Ligne 2 :


Je me suis mis au bépo par hasard début juin 2013 parce que j’enrageais de ne pas trouver comment saisir l’« œ » sur mon clavier AZERTY…
Je me suis mis au bépo par hasard début juin 2013 parce que j’enrageais de ne pas trouver comment saisir l’« œ » sur mon clavier AZERTY…
C’est-à-dire au moment où j’écris ces lignes depuis moins d’une semaine !
Je n’en suis donc qu’aux alentours de 80 signes par minute une fois déduits les retours chariot.


Mais pour progresser, j’ai mis à jour les exercices proposés sur ce site pour la nouvelle version de KTouch, à partir de KDE 4.10 (février 2013)
J'ai commencé l'apprentissage sous [[Ktouch]] et [[Klavaro]], puis je suis devenu friand du [[Test de frappe|Dactylotest]]. Merci à [[Utilisateur:Tazzon|Tazzon]], son concepteur !


Je vais essayer de les mettre à disposition sur ce site, si je trouve où les déposer.
J’en suis maintenant aux alentours de 40 mots par minute, et compte bien progresser encore un peu.


== exercices pour KTouch dans KDE 4.10 ==


=== <code>ktouch/keyboardlayouts/fr.bepo.xml</code> ===
== Exercices pour KTouch ==


Le fichier ci-dessous décrit la disposition de clavier « bépo » standard.
=== sous KDE 4.10 ===
Il faut l’importer dans KTouch depuis l’« Éditeur de cours et de disposition du clavier ».
Pour ajouter la disposition bépo de clavier 105 touches et les [[Exercices|exercices]] « classiques » d’apprentissage de la dactylographie à Ktouch sous KDE 4.10, vous pouvez utiliser l'archive tar suivante : [http://yvainthonnart.perso.sfr.fr/shared_files/bepo/ktouch/ktouch_fr-bepo_disposition-exercices.tar.gz].


On pourrait aussi vraisemblablement le copier à l’un des endroits suivants :
Son contenu doit être placé à l’un des endroits suivants :
* <code>~/.kde/share/apps/ktouch/keyboardlayouts/</code> ;
* <code>~/.kde/share/apps/ktouch/</code> ;
* <code>/usr/share/kde4/apps/ktouch/keyboardlayouts/</code> ;
* <code>/usr/share/kde4/apps/ktouch/</code>.
mais je n’ai pas essayé…


<pre>
Elle contient les deux fichiers suivants :
<?xml version="1.0"?>
* <code>keyboardlayouts/fr.bepo.xml</code> (la disposition bépo pour clavier 105 touches) ;
<keyboardLayout>
* <code>courses/fr.bepo.xml</code> (les [[Exercices|exercices]]).
<id>{e8d047f3-85d9-495e-8cf0-25402ebc0765}</id>
<title>Français (dvorak bépo)</title>
<name>fr(bepo)</name>
<width>1480</width>
<height>480</height>
<keys>
  <key width="80" left="180" height="80" fingerIndex="0" top="200">
  <char position="topLeft" modifier="right_shift">A</char>
  <char position="hidden">a</char>
  <char position="bottomRight" modifier="altgr">æ</char>
  </key>
  <key width="80" left="280" height="80" fingerIndex="1" top="200">
  <char position="topLeft" modifier="right_shift">U</char>
  <char position="hidden">u</char>
  <char position="bottomRight" modifier="altgr">ù</char>
  </key>
  <key width="80" left="380" height="80" fingerIndex="2" top="200">
  <char position="topLeft" modifier="right_shift">I</char>
  <char position="hidden">i</char>
  <char position="bottomRight" modifier="altgr">¨</char>
  </key>
  <key width="80" left="480" height="80" hasHapticMarker="true" fingerIndex="3" top="200">
  <char position="topLeft" modifier="right_shift">E</char>
  <char position="hidden">e</char>
  <char position="bottomRight" modifier="altgr">€</char>
  </key>
  <key width="80" left="780" height="80" hasHapticMarker="true" fingerIndex="4" top="200">
  <char position="topLeft" modifier="left_shift">T</char>
  <char position="hidden">t</char>
  </key>
  <key width="80" left="880" height="80" fingerIndex="5" top="200">
  <char position="topLeft" modifier="left_shift">S</char>
  <char position="hidden">s</char>
  </key>
  <key width="80" left="980" height="80" fingerIndex="6" top="200">
  <char position="topLeft" modifier="left_shift">R</char>
  <char position="hidden">r</char>
  </key>
  <key width="80" left="1080" height="80" fingerIndex="7" top="200">
  <char position="topLeft" modifier="left_shift">N</char>
  <char position="hidden">n</char>
  </key>
  <key width="80" left="0" height="80" fingerIndex="0" top="0">
  <char position="bottomLeft">$</char>
  <char position="topLeft" modifier="right_shift">#</char>
  <char position="bottomRight" modifier="altgr">–</char>
  </key>
  <key width="80" left="100" height="80" fingerIndex="0" top="0">
  <char position="topLeft" modifier="right_shift">1</char>
  <char position="bottomLeft">"</char>
  <char position="bottomRight" modifier="altgr">—</char>
  </key>
  <key width="80" left="200" height="80" fingerIndex="1" top="0">
  <char position="topLeft" modifier="right_shift">2</char>
  <char position="bottomLeft">«</char>
  <char position="bottomRight" modifier="altgr">&lt;</char>
  </key>
  <key width="80" left="300" height="80" fingerIndex="2" top="0">
  <char position="topLeft" modifier="right_shift">3</char>
  <char position="bottomLeft">»</char>
  <char position="bottomRight" modifier="altgr">></char>
  </key>
  <key width="80" left="400" height="80" fingerIndex="3" top="0">
  <char position="topLeft" modifier="right_shift">4</char>
  <char position="bottomLeft">(</char>
  <char position="bottomRight" modifier="altgr">[</char>
  </key>
  <key width="80" left="500" height="80" fingerIndex="3" top="0">
  <char position="topLeft" modifier="right_shift">5</char>
  <char position="bottomLeft">)</char>
  <char position="bottomRight" modifier="altgr">]</char>
  </key>
  <key width="80" left="600" height="80" fingerIndex="4" top="0">
  <char position="topLeft" modifier="left_shift">6</char>
  <char position="bottomLeft">@</char>
  <char position="bottomRight" modifier="altgr">^</char>
  </key>
  <key width="80" left="700" height="80" fingerIndex="4" top="0">
  <char position="topLeft" modifier="left_shift">7</char>
  <char position="bottomLeft">+</char>
  <char position="hidden" modifier="altgr">±</char>
  </key>
  <key width="80" left="800" height="80" fingerIndex="5" top="0">
  <char position="topLeft" modifier="left_shift">8</char>
  <char position="bottomLeft">-</char>
  <char position="hidden" modifier="altgr">−</char>
  </key>
  <key width="80" left="900" height="80" fingerIndex="6" top="0">
  <char position="topLeft" modifier="left_shift">9</char>
  <char position="bottomLeft">/</char>
  <char position="hidden" modifier="altgr">÷</char>
  </key>
  <key width="80" left="1000" height="80" fingerIndex="7" top="0">
  <char position="topLeft" modifier="left_shift">0</char>
  <char position="bottomLeft">*</char>
  <char position="hidden" modifier="altgr">×</char>
  </key>
  <key width="80" left="1100" height="80" fingerIndex="7" top="0">
  <char position="topLeft" modifier="left_shift">°</char>
  <char position="bottomLeft">=</char>
  <char position="hidden" modifier="altgr">≠</char>
  </key>
  <key width="80" left="1200" height="80" fingerIndex="7" top="0">
  <char position="topLeft" modifier="left_shift">`</char>
  <char position="bottomLeft">%</char>
  <char position="hidden" modifier="altgr">‰</char>
  </key>
  <key width="80" left="150" height="80" fingerIndex="0" top="100">
  <char position="topLeft" modifier="right_shift">B</char>
  <char position="hidden">b</char>
  <char position="bottomRight" modifier="altgr">|</char>
  </key>
  <key width="80" left="350" height="80" fingerIndex="2" top="100">
  <char position="topLeft" modifier="right_shift">P</char>
  <char position="hidden">p</char>
  <char position="bottomRight" modifier="altgr">&amp;</char>
  </key>
  <key width="80" left="450" height="80" fingerIndex="3" top="100">
  <char position="topLeft" modifier="right_shift">O</char>
  <char position="hidden">o</char>
  <char position="bottomRight" modifier="altgr">œ</char>
  </key>
  <key width="80" left="550" height="80" fingerIndex="3" top="100">
  <char position="topLeft" modifier="right_shift">È</char>
  <char position="hidden">è</char>
  </key>
  <key width="80" left="650" height="80" fingerIndex="4" top="100">
  <char position="topLeft" modifier="left_shift">!</char>
  <char position="bottomLeft">^</char>
  </key>
  <key width="80" left="750" height="80" fingerIndex="4" top="100">
  <char position="topLeft" modifier="left_shift">V</char>
  <char position="hidden">v</char>
  </key>
  <key width="80" left="850" height="80" fingerIndex="5" top="100">
  <char position="topLeft" modifier="left_shift">D</char>
  <char position="hidden">d</char>
  </key>
  <key width="80" left="950" height="80" fingerIndex="6" top="100">
  <char position="topLeft" modifier="left_shift">L</char>
  <char position="hidden">l</char>
  </key>
  <key width="80" left="1050" height="80" fingerIndex="7" top="100">
  <char position="topLeft" modifier="left_shift">J</char>
  <char position="hidden">j</char>
  </key>
  <key width="80" left="1150" height="80" fingerIndex="7" top="100">
  <char position="topLeft" modifier="left_shift">Z</char>
  <char position="hidden">z</char>
  </key>
  <key width="80" left="1250" height="80" fingerIndex="7" top="100">
  <char position="topLeft" modifier="left_shift">W</char>
  <char position="hidden">w</char>
  </key>
  <key width="80" left="580" height="80" fingerIndex="3" top="200">
  <char position="topLeft" modifier="right_shift">;</char>
  <char position="bottomLeft">,</char>
  <char position="bottomRight" modifier="altgr">’</char>
  </key>
  <key width="80" left="680" height="80" fingerIndex="4" top="200">
  <char position="topLeft" modifier="left_shift">C</char>
  <char position="hidden">c</char>
  </key>
  <key width="80" left="1180" height="80" fingerIndex="7" top="200">
  <char position="topLeft" modifier="left_shift">M</char>
  <char position="hidden">m</char>
  </key>
  <key width="80" left="1280" height="80" fingerIndex="7" top="200">
  <char position="topLeft" modifier="left_shift">Ç</char>
  <char position="hidden">ç</char>
  </key>
  <key width="80" left="130" height="80" fingerIndex="0" top="300">
  <char position="topLeft" modifier="right_shift">Ê</char>
  <char position="bottomLeft">ê</char>
  <char position="bottomRight" modifier="altgr">/</char>
  </key>
  <key width="80" left="230" height="80" fingerIndex="0" top="300">
  <char position="topLeft" modifier="right_shift">À</char>
  <char position="hidden">à</char>
  <char position="bottomRight" modifier="a">\</char>
  </key>
  <key width="80" left="330" height="80" fingerIndex="1" top="300">
  <char position="topLeft" modifier="right_shift">Y</char>
  <char position="hidden">y</char>
  <char position="bottomRight" modifier="a">{</char>
  </key>
  <key width="80" left="430" height="80" fingerIndex="2" top="300">
  <char position="topLeft" modifier="right_shift">X</char>
  <char position="hidden">x</char>
  <char position="bottomRight" modifier="altgr">}</char>
  </key>
  <key width="80" left="530" height="80" fingerIndex="3" top="300">
  <char position="topLeft" modifier="right_shift">:</char>
  <char position="bottomLeft">.</char>
  <char position="bottomRight" modifier="a">…</char>
  </key>
  <key width="80" left="630" height="80" fingerIndex="3" top="300">
  <char position="topLeft" modifier="right_shift">K</char>
  <char position="hidden">k</char>
  <char position="bottomRight" modifier="a">~</char>
  </key>
  <key width="80" left="730" height="80" fingerIndex="4" top="300">
  <char position="topLeft" modifier="left_shift">?</char>
  <char position="bottomLeft">'</char>
  </key>
  <key width="80" left="830" height="80" fingerIndex="4" top="300">
  <char position="topLeft" modifier="left_shift">Q</char>
  <char position="hidden">q</char>
  </key>
  <key width="80" left="930" height="80" fingerIndex="5" top="300">
  <char position="topLeft" modifier="left_shift">G</char>
  <char position="hidden">g</char>
  </key>
  <key width="80" left="1030" height="80" fingerIndex="6" top="300">
  <char position="topLeft" modifier="left_shift">H</char>
  <char position="hidden">h</char>
  </key>
  <key width="80" left="1130" height="80" fingerIndex="7" top="300">
  <char position="topLeft" modifier="left_shift">F</char>
  <char position="hidden">f</char>
  </key>
  <key width="80" left="250" height="80" fingerIndex="1" top="100">
  <char position="topLeft" modifier="right_shift">É</char>
  <char position="hidden">é</char>
  </key>
  <specialKey width="130" left="0" height="80" type="tab" top="100"/>
  <specialKey width="100" left="1380" height="180" type="return" top="100"/>
  <specialKey width="250" modifierId="right_shift" left="1230" height="80" type="shift" top="300"/>
  <specialKey width="130" modifierId="altgr" left="1200" height="80" type="other" label="Alt Gr" top="400"/>
  <specialKey width="130" left="1350" height="80" type="other" label="Ctrl" top="400"/>
  <specialKey width="130" left="150" height="80" type="other" label="Alt" top="400"/>
  <specialKey width="130" left="0" height="80" type="other" label="Ctrl" top="400"/>
  <specialKey width="880" left="300" height="80" type="space" top="400"/>
  <specialKey width="110" modifierId="left_shift" left="0" height="80" type="shift" top="300"/>
  <specialKey width="160" left="0" height="80" type="capslock" top="200"/>
  <specialKey width="180" left="1300" height="80" type="backspace" top="0"/>
</keys>
</keyboardLayout>
</pre>


On peut aussi importer ces deux fichiers dans KTouch sans les installer depuis l’« Éditeur de cours et de disposition du clavier » intégré.


=== <code>ktouch/courses/fr.bepo.xml</code> ===
=== sous KDE 4.11 ===
La version de KTouch livrée avec KDE 4.11, dont la sortie officielle est prévue le 14 août 2013, devrait intégrer d'origine la disposition bépo.


Le fichier ci-dessous reprend les exercices du site.
== Petit outil d'étude de frappe ==
Il faut l’importer dans KTouch depuis l’« Éditeur de cours et de disposition du clavier ».
J'ai beau être vraiment content du [[Test de frappe|Dactylotest]], on ne se refait pas (enfin, si, on peut passer de l'azerty au bépo). En bon ''geek'', il a fallu que je m'amuse à recoder un bout d'analyseur de frappe en Perl. Je n'ose pas dire clone du dactylotest, mais je m'en suis fortement inspiré.
Et puis parce que j'avais (j'ai ?) encore du mal avec un certain nombre de caractères spéciaux notamment pour la programmation, j'ai rajouté un générateur de séquences de caractères aléatoires à taper.


On pourrait aussi vraisemblablement le copier à l’un des endroits suivants :
Si d'aventure d'autres ont envie de voir ça, le tout est disponible ici : [http://yvainthonnart.perso.sfr.fr/shared_files/bepo/type_analyst].
* <code>~/.kde/share/apps/ktouch/courses/</code> ;
* <code>/usr/share/kde4/apps/ktouch/courses/</code> ;
mais je n’ai pas essayé non plus…


<pre>
C'est un peu brut de fonderie, mais voici quelques explications :
<?xml version="1.0"?>
 
<course>
=== type_analyst ===
<id>{0c655ef9-3e7e-423f-b21c-ade0696ffaaf}</id>
:  <code>type_analyst.pl</code>[http://yvainthonnart.perso.sfr.fr/shared_files/bepo/type_analyst/type_analyst.pl]<br>Le programme principal, à utiliser avec un fichier texte à reproduire, qui génère une trace de la frappe et la concatène à un fichier de statistiques<br><br>  Syntaxe : <code>./type_analyst.pl fichier_texte fichier_stat</code><br><br>N'importe quel fichier encodé en ASCII ou utf-8 peut être utilisé comme « fichier_texte » à reproduire, que ce soit un bout de texte littéraire ou un extrait de programme informatique. En utilisant « - » comme nom de fichier texte, le texte à taper est lu depuis l'entrée standard (ou depuis un « pipe » UNIX).<br> On peut arrêter la frappe en cours de texte en tapant {{t|Ctrl}}-{{t|D}}.<br>À la fin de la frappe, le programme affiche les statistiques courantes de vitesse et de précision, puis une distribution des délais de frappe de chaque touche correcte (minimum, premier quartile, médiane, troisième quartile, maximum), et enfin le détail des frappes erronées.<br>Un historique complet de la frappe (similaire au fantôme du dactylotest), est enregistré à la fin du fichier indiqué par « fichier_stat », pour permettre une exploitation ultérieure des résultats et faire des statistiques à long terme (ce que je n'ai pas encore fait…).<br>Chaque ligne du fichier d'historique contient, sur quatre colonnes, le caractère attendu, le caractère frappé, l'intervalle de temps depuis la frappe précédente, et un indicateur pour distinguer les frappes correctes (0), et les frappes erronées (1).
<title>Français (dvorak bépo)</title>
 
<description>http://bepo.fr/wiki/Exercices</description>
:  <code>type_analyst</code>[http://yvainthonnart.perso.sfr.fr/shared_files/bepo/type_analyst/type_analyst]<br>  <code>recueil_amic.txt</code>[http://yvainthonnart.perso.sfr.fr/shared_files/bepo/type_analyst/recueil_amic.txt]<br>Une petite surcouche qui utilise le [[Utilisateur:Amic/Recueil|recueil]] de textes d'[[Utilisateur:Amic|Amic]] (On y retrouve l'essentiel des textes du dactylotest) pour tirer au hasard un texte de 500 à 1000 caractères.<br><br>  Syntaxe : <code>./type_analyst</code><br><br>Cette surcouche génère un unique extrait de texte aléatoire tiré du fichier « recueil_amic.txt », et l'utilise pour appeler le programme principal en stockant systématiquement les résultats à la fin d'un fichier « amic.dat ».<br>Note : tous les tirets longs sont sur cadratin ({{t|AltGr}}-{{t|1}}), les polices à chasse fixe ne permettant pas de distinguer les différents tirets, et les apostrophes sont droites, parce que je suis quand-même un peu du côté programmeur…
<keyboardLayout>fr(bepo)</keyboardLayout>
 
<lessons>
=== type_random ===
  <lesson>
:  <code>type_random.pl</code>[http://yvainthonnart.perso.sfr.fr/shared_files/bepo/type_analyst/type_random.pl]<br>Le programme principal, qui affiche une séquence aléatoire de caractères à reproduire. Il génère aussi une trace de la frappe et la concatène à un fichier de statistiques<br><br>  Syntaxe : <code>./type_random.pl fichier_stat</code><br><br>Les caractères sont pris au hasard dans l'ensemble des caractères ASCII et les différents signes de ponctuation et lettres accentuées possibles en français courant.<br>On arrête la frappe en cours de texte en tapant {{t|Ctrl}}-{{t|D}}.<br>Pour l'instant en dur dans le programme, on peut changer la fréquence d'apparition des différents caractères. J'ai distingué les catégories suivantes : l'espace, les 26 lettres minuscules non ornées les lettres minuscules ornées (cédille, accents, ligatures), les majuscules non ornées et ornées, les chiffres, la ponctuation générale, et les caractères spéciaux.<br>Le fichier d'historique indiqué par « fichier_stat » est complété à la fin de la frappe suivant le même format que pour « type_analyst ».
  <id>{8da32071-ac1a-429b-bfd9-63361303ba1e}</id>
 
  <title>E, T, A, N (ind.+aur. – rg. repos)</title>
:  <code>type_random</code>[http://yvainthonnart.perso.sfr.fr/shared_files/bepo/type_analyst/type_random]<br>Une petite surcouche qui ne sert qu'à réutiliser toujours le même fichier de statistiques.<br><br>  Syntaxe : <code>./type_random</code><br><br>Le fichier de statistiques utilisé est alors « random.dat ».
  <newCharacters>etan</newCharacters>
 
  <text>et et et et et et et te te te te te te te
== Exploitation des statistiques de frappe ==
tee tee ette ette et et teet
=== Première constatation sur la distribution brute des temps entre touches ===
an an an an an an an na na na na na na na
En utilisant le programme <code>type_analyst</code> présenté ci dessus pendant quelques jours, j'ai ainsi généré pour l'instant une base de données de frappe de 8707 caractères.
anna nana anan anna nana anan
 
en en en en ta ta ta ta ta ne ne ne ne ne
Alors, naïvement, que je m'attendais à trouver une répartition aléatoire standard (une courbe en cloche, à raffiner un peu), je tombe sur un histogramme très propre, nais de forme assez surprenante avec une longue traîne peu bruitée…
ane tate tante nana tata tete
 
tata et annette tannent ta tante
Et en avant pour la chasse à la distribution !
natte tentante et tente attenante
 
annette et tata tentent attentat en tente</text>
En calculant les trois premiers moments (moyenne, espérance des carrés puis des cubes des écarts à la moyenne), on confirme bien cette grosse asymétrie sur le troisième moment, mais en même temps pas besoin d'être Jérémie, comme disait l'autre, pour s'en rendre compte…
  </lesson>
{| border=1 cellpadding=4
  <lesson>
|-
  <id>{128e03b1-1cc4-486e-87ba-a4ce799265b9}</id>
| m1 || 0.3009890 || soit une moyenne à 0.301 s
  <title>I et S (majeurs – rg. repos)</title>
|-
  <newCharacters>i s</newCharacters>
| m2 || 0.0395808 || soit un écart-type à 0.199 s
  <text>ss ii ss ii si si si is is is
|-
isis et sissi sises
| m3 || 0.0203323 || soit une asymétrie de +2.58
tes siestes et ses tasses
|}
titi sieste et sissi tisse
Bon, aussi, ici, on pourra voir que j'ai beau prétendre faire du quarante à la minute, l'ordinateur me renvoie brutalement un 39,86 mots par minute (=12/m1)
sainte anne atteint ses antiennes
 
annette assiste insiste et atteste
En revanche, en connaissant ces trois premiers moments, et en utilisant d'autre part les formes closes (les équations simples) des moments de différentes distributions connues, on peut facilement trouver une distribution approchant la statistique observée. [http://fr.wikipedia.org/wiki/M%C3%A9thode_des_moments_%28statistiques%29]
satan est sienne si ta tante se tait
 
tante annette insistait et teintait sa tisane
Pour l'éventuel lecteur curieux, voici le résumé de ma chasse à la distribution :
sissi nantaise et titi sataniste naissent nantis
 
ni ses antennes ni ses tasses ne tentaient sa tante
{| class="wikitable centre"
annie est assise et anais a ses assiettes et ses tasses
|-
anastasie tissait sa taie en satin et anne assistait assise en se taisant</text>
| '''Distribution Erlang'''[http://fr.wikipedia.org/wiki/Loi_d%27Erlang]<br>Cette distribution correspond au temps d'attente entre k événements aléatoires d'un processus de Poisson, c'est-à-dire en fait de k changements (identiques, en l'occurence) dans un système « sans mémoire », qui à tout instant peut effectuer un changement dans un temps moyen de 1/lambda. C'était mon premier pari, en imaginant qu'en gros il y avait un certain nombre (discret) de trucs à débloquer dans la tête, le corps, pour que la frappe se déclenche.<br>Bon, pas terrible comme approximation, on passe à côté du démarrage lent, de la forme du pic, et surtout de la traîne || [[Fichier:Yvain stats erlang.png|320px]]
  </lesson>
|-
  <lesson>
| '''Distribution Gamma'''[http://fr.wikipedia.org/wiki/Loi_Gamma]<br>Deuxième essai : on généralise la loi d'Erlang aux nombres réels, pour avoir un espace de solutions continu (comme la fonction Gamma est la généralisation de la factorielle). Après tout, l'hypothèse d'Erlang, c'était un peu gros, on n'est pas des machines, tout de même, et la pensée et le mouvant sont continus.<br>Au final, c'est visuellement pire que la distribution d'Erlang. Pourtant, avec la méthode des moments, on a la même moyenne et le même écart-type que la statistique. Le gros problème, là, c'est que la distribution Gamma ne permet pas de capturer à la fois la longue traîne et le pincement autour des points d'inflexion (C'est le moment d'ordre 4 qui est trop faible, mais je n'ai pas creusé plus loin avec celle-ci…).<br> Dans l'ordre, en fait, j'ai ensuite essayé la distribution inverse-Gamma dont plus de détail viendra ci-dessous. || [[Fichier:Yvain stats gamma.png|320px]]
  <id>{a8edbb76-c89c-4492-96c1-2e2d95ec4237}</id>
|-
  <title>U et R (annulaires – rg. repos)</title>
| || [[Fichier:Yvain stats inv-gauss.png|320px]]
  <newCharacters>u r</newCharacters>
|-
  <text>ur ur ur ru ru ru
| || [[Fichier:Yvain stats inv-gauss-retard.png|320px]]
rue rue rue eur eur eur eur
|}
sanie sur un nanti est inane
 
sirius statue et nina sursaute
[[Fichier:Yvain stats normal-inv-gauss.png|480px]]
tu attises sans tester tes risettes
 
un narrateur rit et renie sa nature
[[Fichier:Yvain stats inv-gamma.png|480px]]
tu essaies un instant et tu es saisi
 
tu eus une transe et tu te ratatinas
Et maintenant il est trop tard, j'arrête maintenant pour cette fois. Les analyses « pratiques », voire « physiologiques » sur la bonne approximation par les deux dernières attendront une autre fois !
un statut saint unirait ses instituts
une eau saine et sans nitrates rassure
ses saisies insanes initient sa retraite
une instit tunisienne se tait en entrant
nina ruse et ne susurre rien au russe assis
un interne ruant sur rue ne saurait user sa rate
un artiste teint ses tartines et rature ses raies
en ratissant sa teinturerie sirius sent sa nature inerte
un assaut retentissant terrassa un tsar et instaura une terreur
un raisin rassis sustenterait un sarrasin sinistre et une tunisienne nantie en nuisette</text>
  </lesson>
  <lesson>
  <id>{7498eed7-0fa8-4d1e-ace6-d076cc693a3a}</id>
  <title>V et O (index – rg. haut)</title>
  <newCharacters>o v AUIETSRNOV</newCharacters>
  <text>vo vo vo ov ov ov
Nous envions votre aviation souveraine
Un toit en soie sur une tasse toute neuve
Un virtuose novateur et avenant renversait nos vies
Nous arriverons vers Tours via une autoroute toute neuve
Un visionnaire vivote et entrevoit un tournevis novateur
Nous savonnerons notre ventouse et retournerons notre veste
Une voisine a vu un avion en ivoire et une voiture innovante
Nous arriverons en vitesse et nous nous enivrerons en vos vins
On va vers une aventure vaseuse si on avoue avoir vu son invention</text>
  </lesson>
  <lesson>
  <id>{b42c94a5-fba9-4549-ac01-2f8c5e38a655}</id>
  <title>P et D (majeurs – rg. haut)</title>
  <newCharacters>pdPD</newCharacters>
  <text>Nous nous disputons pour des prunes
Un papa panda divin parade au paradis
Nous parviendrons en Inde avant votre venue
Nous adoptons votre point de vue sur notre patriote
Un artiste peintre en peine a perdu de vue son inspiration
Un oiseau de proie est souvent suspendu au dessus de terre
Nous adoptons une attitude positive et nions avoir pris du poids
Votre titre de transport apatride vous sera repris avant de sortir de notre avion
Nous avons pour ainsi dire perdu notre inspiration et repoussons notre dispensaire</text>
  </lesson>
  <lesson>
  <id>{3ae87bf2-3746-4833-944d-d782b4c90184}</id>
  <title>É et L (annulaires – rg. haut)</title>
  <newCharacters>élÉL</newCharacters>
  <text>Ils étaient pourtant anéantis
Le ré et le la ont été entendus
Il a idéalisé son idole antirévolutionnaire
Un oiseau a des ailes et en réalité les avions aussi
Une eau désaltérante est la plus utile durant un été étoilé
Les dépolluants ont évolué et peuvent délivrer une eau saine
Nous avons pu altérer les évolutions prévues de notre Étoile en étain
Le député et le président ont été élus suite au vote sans surprise de la droite
Alerté par la radio un adulte daltonien a pu délivrer le latéral droit de Lens
Une révolutionnaire esseulée est délaissée par les prisonniers dépassés par les éventualités</text>
  </lesson>
  <lesson>
  <id>{f9382627-5d88-4b7e-9bdd-b39ba1b58759}</id>
  <title>B et J (auriculaires – rg. haut)</title>
  <newCharacters>bjBJ</newCharacters>
  <text>Je blablate bien trop du jubilé de Platini
Je jubile devant une bien belle bijouterie
Je vous dis bienvenue dans le Libre via bépo
Bien entendu je vais juste jouer au jeune toubib
Nous balisons les jalons des joutes de javelot et de bouée
Bébé a avalé son jus de baies puis a bien bavé
Le barbu a brutalisé un juré et la réponse du tribunal était terrible
Un bretteur battu a troublé les badauds obnubilés par son adresse au sabre
Jules abjura les jeunes et éblouit ses subordonnés débordants de jalousie</text>
  </lesson>
  <lesson>
  <id>{1b5a9cd0-0f6a-41a7-9187-0ffb16da77ec}</id>
  <title>È, « , » et C (index au centre – rg. haut)</title>
  <newCharacters>è,cÈC</newCharacters>
  <text>Il coopère avec une contrepèterie
Ils accaparèrent, caressèrent, et cartonnèrent
La cavalière, tenant la crinière, put rester en selle
Une industrie céréalière ne produit ni cèpes, ni cèdre
La cuisinière, la caissière et la conseillère en colère passèrent en vitesse
Si la sorcière ne décolère pas, elle possède les ressources nécessaires pour se détendre
Ces noces princières occasionnèrent des troubles dans la populace, et les troupes policières durent intervenir</text>
  </lesson>
  <lesson>
  <id>{ebf368ce-d170-4127-8363-14e550916dd8}</id>
  <title>M et Z (extension des auriculaires)</title>
  <newCharacters>mzMZ</newCharacters>
  <text>Le combat semble impossible, mais le succès demeurera une victoire intemporelle
Zou, il est temps de partir
Bleu, comme le ciel azuréen
La moutarde lui monte au nez
Vous devez votre ceinture abdominale
Un nez, un pic, un cap, une péninsule
Un zombie disparu et tout est dépeuplé
Libérez ce prisonnier insolent et malade
Vous entamez cette procédure très attentivement
Vous acclamerez sans problème ces émois juvéniles
Une émeute a éclaté, mais vous avez amnistié les meneurs
En Amazonie, les amateurs de meubles en acajou se réjouissent
Justement, vous pouvez ajuster cet alambic avec votre nez
Vous vous débarrassez de cet animal empaillé dont le nez empestait
Entre zèbres et zébus, la Zambie demeure accueillante
Treize litres de mazout déversés dans la mer, et le vizir est alarmé
Vous lézardez au son de cet air de jazz
Vous venez de commander votre seizième pizza, elle sera très moelleuse
Ce zélote zozote mais reste zen en zippant son blouson
Les trapézistes volent, une dizaine de zèbres parcourent la piste, et douze lézards ramassent les restes</text>
  </lesson>
  <lesson>
  <id>{8221ce68-ecd1-4955-9123-07b65cabde70}</id>
  <title>Ç et W (extension des auriculaires)</title>
  <newCharacters>çwÇW</newCharacters>
  <text>Les edelweiss poussent en altitude
Lawrence est un darwiniste convaincu
Le journaliste a interviewé le steward wallon
Avec une jupe en tweed et un sweat, je suis parée pour assister au spectacle de clowns
En ensemençant maintenant, nous aurons un beau jardin au printemps
La rançon demandée est désarçonnante
Il passait inaperçu et demeurait donc insoupçonnable
Nous vous avons aperçus puis reçus, comme ça, sans attendre
Le caleçon du maçon se coinça dans un escalier en colimaçon mal conçu, alors il menaça de poinçonner son remplaçant déçu
Elle a conçu un brownie tout simplement sublime
Dans ce western, les cavaliers sont souvent désarçonnés</text>
  </lesson>
  <lesson>
  <id>{0db6b8a0-8a1d-4561-afbe-72c109b35f47}</id>
  <title>K . ' et Q (index – rg. bas)</title>
  <newCharacters>k.'qKQ</newCharacters>
  <text>J'ai la joie d'utiliser un point.
L'accueil d'une douzaine d'émirs est crucial.
Il s'est présenté tel quel.
Je joue tandis qu'il travaille.
L'aéronautique est souvent critiquée mais demeure un domaine de compétence.
Un enquiquineur de première classe.
Je viens d'acquérir un kiwi.
C'est anecdotique, mais l'acoustique de cette salle est remarquable.
Il a empaqueté son anorak et l'a embarqué pour Astrakan.
Après le cours de karaté, un bon cake te requinquera.
Le judoka qui est en kaki teste ton kaléidoscope.
Un cocktail suivra la kermesse. Les basketteurs seront présents, ainsi que les quelques rockeurs.
Après quelques vodkas, je serai partant pour un jerk et un rock endiablés.
J'ai acquis une belle aquarelle d'antiquaire, que je mettrai près de mon aquarium.
C'est dans la zone équatoriale que j'ai pu pratiquer l'équitation.
Cet ecclésiastique éloquent évoquait une escroquerie sans équivoque.
Je m'inquiète de ce qu'impliquent ces quatorze quatrains.</text>
  </lesson>
  <lesson>
  <id>{e9d05be9-b557-4c06-b6bc-d29672581f60}</id>
  <title>X et G (majeurs – rg. bas)</title>
  <newCharacters>xgXG</newCharacters>
  <text>J'exagère sans doute, mais l'état de mon gazon s'aggrave.
Les Anglais s'agglutinent dans cette agglomération.
Lorsqu'elle angoisse, elle ingurgite et engloutit des quantités astronomiques.
Nous avons obtenu l'agrément pour l'agrandissement de notre maison et l'aménagement de l'annexe.
L'agence nous a conseillé l'agriculture, mais l'élevage de grenouilles pourrait nous nuire.
Le matin, on conseille un bon verre de jus d'orange ou de tout autre agrume.
La gourmandise n'aide pas pour maigrir.
J'enrage car l'enregistrement que j'avais programmé a raté.
Mon garçon est ambidextre.
Avec mes index et mes majeurs, j'indexe des données qui avaient été annexées.</text>
  </lesson>
  <lesson>
  <id>{c92bf552-4d84-472f-9dbb-55ed1cd49387}</id>
  <title>Y et H (annulaires – rg. bas)</title>
  <newCharacters>yhYH</newCharacters>
  <text>J'espère hypnotiser les sénateurs avec les chrysanthèmes disséminés dans l'hémicycle.
Les polytechniciens aussi ont besoin de s'hydrater.
C'est avec du rythme que le saxophoniste et le psychiatre joueur de synthé pourront se synchroniser.
Un asthmatique en crise présente une inspiration maximale qui abaisse le diaphragme, repousse les abdominaux et hausse le thorax.
Je suis chez ce cher Serge, cherchant des chers cierges, assis sur des chers sièges.
Le chiche, son chicha et son chien sont souvent chez Sanson ou chez Charles sans se soucier de sa sécheuse sèche.</text>
  </lesson>
  <lesson>
  <id>{42384107-9fd1-436e-a321-d3abb40e1bac}</id>
  <title>À et F (auriculaires – rg. bas)</title>
  <newCharacters>àfÀF</newCharacters>
  <text>Riri, Fifi et Loulou.
Pif, paf, pouf.
Et voilà, on a fait le tour de toutes les touches.
Le bépo, c'est facile, finalement.
À partir de maintenant, il suffira de faire quelques derniers petits efforts.
</text>
  </lesson>
  <lesson>
  <id>{9eabb817-abb0-43ee-ac16-1d244ee3592b}</id>
  <title>Touches en AltGr (Ù, Œ, Æ,…)</title>
  <newCharacters>ùœæٌƅ</newCharacters>
  <text>Où que soit cet œuf.
Qui vole un œuf, vole un bœuf…
Curriculum Vitæ.
Et cætera.
Lætitia et Éric sont arrivés ex æquo.
Où qu'il soit, il y est…
Je ne sais où ni quand…</text>
  </lesson>
  <lesson>
  <id>{bf736b12-7187-40b2-82e3-5365b8b6cb0a}</id>
  <title>Accents morts ^ et ¨ (Ê, Î, Û, Â, Ô, Ï, Ä)</title>
  <newCharacters>êîûâôïäëöüÊÎÛÂÔÏÄËÖÜ</newCharacters>
  <text>Être ou ne pas être.
Il paraît qu'un bon feu dans l'âtre contribue au bien-être.
Il est sûr et certain.
La brebis a dû paître à côté.
La laïcité peut être ambiguë.
Le canoë est emporté dans un maelström.
C'est la belle nuit de Noël.
Ma trisaïeule hébraïque raffole de l'aïoli.
Les paranoïaques poussent des cris suraigüs.</text>
  </lesson>
  <lesson>
  <id>{d980945e-c03a-4bae-a122-a65122d91427}</id>
  <title>Tiret et point d'interrogation (avec espace insécable)</title>
  <newCharacters>-? </newCharacters>
  <text>Les chaussettes de l'archi-duchesse sont-elles sèches, archi-sèches ?
Où est-il ?
Que se passe-t-il ?
Qu'est-il arrivé ?
Qu'y a-t-il ?
Peut-être est-il trop tard.</text>
  </lesson>
  <lesson>
  <id>{1a713a31-9b6e-4764-81c3-50c7bef5648d}</id>
  <title>Ponctuation double (; : !) et espace insécable</title>
  <newCharacters>;:!</newCharacters>
  <text>Et revoilà la sous-préfète !
La voilà ; elle arrive !</text>
  </lesson>
  <lesson>
  <id>{ae012e55-52c3-4879-83f7-01fef27838a2}</id>
  <title>Parenthèses</title>
  <newCharacters>()</newCharacters>
  <text>World Wide Web (www)</text>
  </lesson>
  <lesson>
  <id>{93e37f36-4b41-4467-a061-d5cfa3ef6021}</id>
  <title>Guillemets</title>
  <newCharacters>«»</newCharacters>
  <text>la Haute Autorité pour la Diffusion des Œuvres et la Protection des Droits sur Internet ou « HADOPI »</text>
  </lesson>
  <lesson>
  <id>{7ecf5c3a-56ae-4660-9238-d1f30006eb97}</id>
  <title>Pangrammes</title>
  <newCharacters></newCharacters>
  <text>Vif PDG mentor, exhibez la squaw jockey.
Juge, flambez l'exquis patchwork d'Yvon.
Vif juge, trempez ce blond whisky aqueux.
Fripon, mixez l'abject whisky qui vidange.
Buvez de ce whisky que le patron juge fameux.
Portez ce vieux whisky au juge blond qui fume.
Jugez qu'un vieux whisky blond pur malt fonce.
Faux kwachas ? Quel projet de voyage zambien !
Fougueux, j'enivre la squaw au pack de beau zythum.
Ketch, yawl, jonque flambant neuve… jugez des prix !
Vieux pelage que je modifie : breitschwanz ou yak ?
Prouvez, beau juge, que le fameux sandwich au yak tue.
Voyez ce jeu exquis wallon, de graphie en kit mais bref.</text>
  </lesson>
  <lesson>
  <id>{1af677bd-a38c-42c7-89bc-750878c610ba}</id>
  <title>Pangrammes accentués</title>
  <newCharacters></newCharacters>
  <text>Perchez dix, vingt woks. Qu'y flambé-je ?
Le moujik équipé de faux breitschwanz voyage.
Kiwi fade, aptéryx, quel jambon vous gâchez !
Voyez le brick géant que j'examine près du wharf.
Bâchez la queue du wagon-taxi avec les pyjamas du fakir.
Mon pauvre zébu ankylosé choque deux fois ton wagon jaune.
Voix ambiguë d'un cœur qui, au zéphyr, préfère les jattes de kiwis.
</text>
  </lesson>
</lessons>
</course>
</pre>

Dernière version du 13 août 2013 à 00:24

Bonjour,

Je me suis mis au bépo par hasard début juin 2013 parce que j’enrageais de ne pas trouver comment saisir l’« œ » sur mon clavier AZERTY…

J'ai commencé l'apprentissage sous Ktouch et Klavaro, puis je suis devenu friand du Dactylotest. Merci à Tazzon, son concepteur !

J’en suis maintenant aux alentours de 40 mots par minute, et compte bien progresser encore un peu.


Exercices pour KTouch

sous KDE 4.10

Pour ajouter la disposition bépo de clavier 105 touches et les exercices « classiques » d’apprentissage de la dactylographie à Ktouch sous KDE 4.10, vous pouvez utiliser l'archive tar suivante : [1].

Son contenu doit être placé à l’un des endroits suivants :

  • ~/.kde/share/apps/ktouch/ ;
  • /usr/share/kde4/apps/ktouch/.

Elle contient les deux fichiers suivants :

  • keyboardlayouts/fr.bepo.xml (la disposition bépo pour clavier 105 touches) ;
  • courses/fr.bepo.xml (les exercices).

On peut aussi importer ces deux fichiers dans KTouch sans les installer depuis l’« Éditeur de cours et de disposition du clavier » intégré.

sous KDE 4.11

La version de KTouch livrée avec KDE 4.11, dont la sortie officielle est prévue le 14 août 2013, devrait intégrer d'origine la disposition bépo.

Petit outil d'étude de frappe

J'ai beau être vraiment content du Dactylotest, on ne se refait pas (enfin, si, on peut passer de l'azerty au bépo). En bon geek, il a fallu que je m'amuse à recoder un bout d'analyseur de frappe en Perl. Je n'ose pas dire clone du dactylotest, mais je m'en suis fortement inspiré. Et puis parce que j'avais (j'ai ?) encore du mal avec un certain nombre de caractères spéciaux notamment pour la programmation, j'ai rajouté un générateur de séquences de caractères aléatoires à taper.

Si d'aventure d'autres ont envie de voir ça, le tout est disponible ici : [2].

C'est un peu brut de fonderie, mais voici quelques explications :

type_analyst

  type_analyst.pl[3]
Le programme principal, à utiliser avec un fichier texte à reproduire, qui génère une trace de la frappe et la concatène à un fichier de statistiques

  Syntaxe : ./type_analyst.pl fichier_texte fichier_stat

N'importe quel fichier encodé en ASCII ou utf-8 peut être utilisé comme « fichier_texte » à reproduire, que ce soit un bout de texte littéraire ou un extrait de programme informatique. En utilisant « - » comme nom de fichier texte, le texte à taper est lu depuis l'entrée standard (ou depuis un « pipe » UNIX).
On peut arrêter la frappe en cours de texte en tapant clavier bépoCtrl-clavier bépoD.
À la fin de la frappe, le programme affiche les statistiques courantes de vitesse et de précision, puis une distribution des délais de frappe de chaque touche correcte (minimum, premier quartile, médiane, troisième quartile, maximum), et enfin le détail des frappes erronées.
Un historique complet de la frappe (similaire au fantôme du dactylotest), est enregistré à la fin du fichier indiqué par « fichier_stat », pour permettre une exploitation ultérieure des résultats et faire des statistiques à long terme (ce que je n'ai pas encore fait…).
Chaque ligne du fichier d'historique contient, sur quatre colonnes, le caractère attendu, le caractère frappé, l'intervalle de temps depuis la frappe précédente, et un indicateur pour distinguer les frappes correctes (0), et les frappes erronées (1).
  type_analyst[4]
  recueil_amic.txt[5]
Une petite surcouche qui utilise le recueil de textes d'Amic (On y retrouve l'essentiel des textes du dactylotest) pour tirer au hasard un texte de 500 à 1000 caractères.

  Syntaxe : ./type_analyst

Cette surcouche génère un unique extrait de texte aléatoire tiré du fichier « recueil_amic.txt », et l'utilise pour appeler le programme principal en stockant systématiquement les résultats à la fin d'un fichier « amic.dat ».
Note : tous les tirets longs sont sur cadratin (clavier bépoAltGr-clavier bépo1), les polices à chasse fixe ne permettant pas de distinguer les différents tirets, et les apostrophes sont droites, parce que je suis quand-même un peu du côté programmeur…

type_random

  type_random.pl[6]
Le programme principal, qui affiche une séquence aléatoire de caractères à reproduire. Il génère aussi une trace de la frappe et la concatène à un fichier de statistiques

  Syntaxe : ./type_random.pl fichier_stat

Les caractères sont pris au hasard dans l'ensemble des caractères ASCII et les différents signes de ponctuation et lettres accentuées possibles en français courant.
On arrête la frappe en cours de texte en tapant clavier bépoCtrl-clavier bépoD.
Pour l'instant en dur dans le programme, on peut changer la fréquence d'apparition des différents caractères. J'ai distingué les catégories suivantes : l'espace, les 26 lettres minuscules non ornées les lettres minuscules ornées (cédille, accents, ligatures), les majuscules non ornées et ornées, les chiffres, la ponctuation générale, et les caractères spéciaux.
Le fichier d'historique indiqué par « fichier_stat » est complété à la fin de la frappe suivant le même format que pour « type_analyst ».
  type_random[7]
Une petite surcouche qui ne sert qu'à réutiliser toujours le même fichier de statistiques.

  Syntaxe : ./type_random

Le fichier de statistiques utilisé est alors « random.dat ».

Exploitation des statistiques de frappe

Première constatation sur la distribution brute des temps entre touches

En utilisant le programme type_analyst présenté ci dessus pendant quelques jours, j'ai ainsi généré pour l'instant une base de données de frappe de 8707 caractères.

Alors, naïvement, que je m'attendais à trouver une répartition aléatoire standard (une courbe en cloche, à raffiner un peu), je tombe sur un histogramme très propre, nais de forme assez surprenante avec une longue traîne peu bruitée…

Et en avant pour la chasse à la distribution !

En calculant les trois premiers moments (moyenne, espérance des carrés puis des cubes des écarts à la moyenne), on confirme bien cette grosse asymétrie sur le troisième moment, mais en même temps pas besoin d'être Jérémie, comme disait l'autre, pour s'en rendre compte…

m1 0.3009890 soit une moyenne à 0.301 s
m2 0.0395808 soit un écart-type à 0.199 s
m3 0.0203323 soit une asymétrie de +2.58

Bon, aussi, ici, on pourra voir que j'ai beau prétendre faire du quarante à la minute, l'ordinateur me renvoie brutalement un 39,86 mots par minute (=12/m1)

En revanche, en connaissant ces trois premiers moments, et en utilisant d'autre part les formes closes (les équations simples) des moments de différentes distributions connues, on peut facilement trouver une distribution approchant la statistique observée. [8]

Pour l'éventuel lecteur curieux, voici le résumé de ma chasse à la distribution :

Distribution Erlang[9]
Cette distribution correspond au temps d'attente entre k événements aléatoires d'un processus de Poisson, c'est-à-dire en fait de k changements (identiques, en l'occurence) dans un système « sans mémoire », qui à tout instant peut effectuer un changement dans un temps moyen de 1/lambda. C'était mon premier pari, en imaginant qu'en gros il y avait un certain nombre (discret) de trucs à débloquer dans la tête, le corps, pour que la frappe se déclenche.
Bon, pas terrible comme approximation, on passe à côté du démarrage lent, de la forme du pic, et surtout de la traîne
Yvain stats erlang.png
Distribution Gamma[10]
Deuxième essai : on généralise la loi d'Erlang aux nombres réels, pour avoir un espace de solutions continu (comme la fonction Gamma est la généralisation de la factorielle). Après tout, l'hypothèse d'Erlang, c'était un peu gros, on n'est pas des machines, tout de même, et la pensée et le mouvant sont continus.
Au final, c'est visuellement pire que la distribution d'Erlang. Pourtant, avec la méthode des moments, on a la même moyenne et le même écart-type que la statistique. Le gros problème, là, c'est que la distribution Gamma ne permet pas de capturer à la fois la longue traîne et le pincement autour des points d'inflexion (C'est le moment d'ordre 4 qui est trop faible, mais je n'ai pas creusé plus loin avec celle-ci…).
Dans l'ordre, en fait, j'ai ensuite essayé la distribution inverse-Gamma dont plus de détail viendra ci-dessous.
Yvain stats gamma.png
Yvain stats inv-gauss.png
Yvain stats inv-gauss-retard.png

Yvain stats normal-inv-gauss.png

Yvain stats inv-gamma.png

Et maintenant il est trop tard, j'arrête maintenant pour cette fois. Les analyses « pratiques », voire « physiologiques » sur la bonne approximation par les deux dernières attendront une autre fois !