summaryrefslogtreecommitdiff
path: root/src/SW/kblayout/document.it.rest.txt
blob: dcc6c4ffede3a3609060d48ff1bc9861456e1ea7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Migliorare il layout di tastiera
================================
:Id: SW/kblayout
:CreationDate: 2003-01-28 10:09:25
:tags: - software
       - keyboard
 
Conoscerete anche voi la storia della tastiera Sholes ("QWERTY"), che
è stata inventata per evitare che i dattilografi troppo veloci
facessero inceppare i martelletti delle macchine per scrivere
meccaniche. Saprete anche che il layout Dvorak è da molti considerato
più efficace e veloce.
 
Quando provai a imparare a usare la tastiera Dvorak, un mio amico mi
disse pressappoco: «Perché non scrivi un programma che misuri l'uso
che fai tu della tastiera, e ricavi un layout personalizzato?». In un
momento di follia, ho deciso di farlo davvero.
 
Il primo programma è freq.pl_, che legge i file dati a riga di
comando e calcola una matrice di probabilità (nel file il cui nome è
nella variabile ``$MATRFN``, al momento ``/tmp/freq.matr``). In
effetti tratta il testo come un processo di Markov sui caratteri a
memoria 1, e ricava la matrice di transizione. Nota: gli elementi sono
frequenze, non probabilità. L'eventuale normalizzazione è lasciata
come esercizio al lettore.
 
Il secondo programma è freqdump.pl_, che probabilmente non serve a
niente. L'ho scritto (tre o quattro versioni diverse) per avere
un'idea di come fossero le frequenze. Dateci un'occhiata se volete.
 
Il programma più utile (spero) è optkeyb.pl_, che parte dalla
matrice (al solito, nome di file hardcoded) e dal layout QWERTY
cercando per discesa di gradiente stocastica un layout migliore. In
parole povere, calcola un valore per il layout (somma sulle coppie di
tasti della distanza per la frequenza), poi prova a scambiare due
tasti a caso e vedere se il risultato è migliore. Per aggirare i
minimi locali (e ce ne sono tanti) all'inzio scambia a caso
``$PRE_SHUFFLE`` volte, e se per ``$STARVATION`` tentativi non ha
trovato un miglioramento ricomincia, dopo aver appeso il layout
localmente ottimo al file ``/tmp/layouts``. Usa le curses e il
corrispondente modulo Perl ``Curses.pm``.
 
Per evitare cose brutte (i.e. i numeri a spasso) nell'hash ``%locked``
è possibile impostare i tasti che non si vogliono spostare.
 
Per dare un'idea dei risultati, dopo qualche ora di calcoli il miglior
layout era::
 
    ` 1 2 3 4 5 6 7 8 9 0 ; =
       - x w h t s a l b y ' j q
       z \ [ c i e r u p . ,
        k v f d n o m g ] /
 
Tenete conto che io uso una tastiera IBM U.S., e dove è finita la
``q`` c'era il tasto pipe/backslash (che è più largo degli altri, e
quindi avrei dovuto bloccarlo...)
 
Per dare un'idea del miglioramento, il valore calcolato per la QWERTY
è 10.190.280, per quella riportata sopra è 6.797.370, che si traduce
in una riduzione del 34% del chilometraggio delle dita durante la
battitura.
 
.. _`freq.pl`: http://www.thenautilus.net/cgit/better-keyboard-layout/tree/freq.pl
.. _`freqdump.pl`: http://www.thenautilus.net/cgit/better-keyboard-layout/tree/freqdump.pl
.. _`optkeyb.pl`: http://www.thenautilus.net/cgit/better-keyboard-layout/tree/optkeyb.pl