Migliorare il layout di tastiera

Altre lingue

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.

DateCreato: 2003-01-28 10:09:25 Ultima modifica: 2023-02-10 12:45:24