From f3b6e73ca1fcf29731cc2a85114c41fad87d0d96 Mon Sep 17 00:00:00 2001 From: dakkar Date: Mon, 17 Aug 2009 10:54:50 +0200 Subject: moved stuff around it's a good idea to separate the documents from the templates --- src/SW/kblayout/document.en.rest.txt | 63 ++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/SW/kblayout/document.en.rest.txt (limited to 'src/SW/kblayout/document.en.rest.txt') diff --git a/src/SW/kblayout/document.en.rest.txt b/src/SW/kblayout/document.en.rest.txt new file mode 100644 index 0000000..f609813 --- /dev/null +++ b/src/SW/kblayout/document.en.rest.txt @@ -0,0 +1,63 @@ +Optimize keyboard layout +======================== +:CreationDate: 2003-01-28 10:09:25 +:tags: - software + - keyboard + +I'm sure you, too, know the history of the Sholes ("QWERTY") keyboard, +that was designed to avoid that too fast typists jammed mechanical +typewriters. You would know also that the Dvorak layout is cosidered +by many to be faster and more effective. + +When I tried to learn to use the Dvorak keyboard, a friend of mine +asked me: «Why don't you write a program to measure your keyboard +usage, and then obtain a personalized layout?». In a moment of +crazyness, I decided to do just that. + +The first program is freq.pl_, which reads the files given on the +command line and produces a probability matrix, writing it into the +file whose name is in the ``$MATRFN`` variable, default +``/tmp/freq.matr``. Actually it sees the text as a Markov process over +the characters with memory 1, and extracts the transition +matrix. Note: the elements are frequencies, not probabilities. The +optional normalization is left as exercise to the reader. + +The second program is freqdump.pl_, which is probably +useless. I've written it (three or four different versions) to have an +idea about the frequencies. Give it a look if you want. + +The most useful program (I hope) is optkeyb.pl_, which starting +from the matrix (as usual, filename hardcoded) and the QWERTY layout +searches by stochastic gradient descent a better layout. In other +words, it calculates a value for the layout (sum over the pairs of +keys of their distance times the frequency of that pair), then tries +to exchange two random keys looking for a better result. To avoid +local minima (there are a lot) it starts by randomly exchanging +``$PRE_SHUFFLE`` pairs, and if it doesn't find a better layout for +``$STARVATION`` tries it starts again, after having written the +locally optimum layout at the end of the file ``/tmp/layouts``. It +uses curses and the corresponding Perl module ``Curses.pm``. + +To avoid bad things, like numbers scattered between other keys, it's +possible to set into the ``%locked`` hash the keys that must not be +moved. + +To give yoy an idea of the results, after some hours of computation +the best layout was:: + + ` 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 ] / + +Bear in mind I use a IBM U.S. keyboard, and where the ``q`` is, +there's usually the backslash/pipe key, which is larger than the +others, so I should have locked it... + +To have an idea of the optimization, the value relative to the QWERTY +layout is 10.190.280, for the one above is 6.797.370, meaning a 34% +reduction in the space travelled by the fingers during writing. + +.. _`freq.pl`: /src/freq.pl +.. _`freqdump.pl`: /src/freqdump.pl +.. _`optkeyb.pl`: /src/optkeyb.pl -- cgit v1.2.3