Keyboard Evolve

[ home | programming | résumé ]

[ EARE | mcppUnit | Sports Pool Team Chooser | Keyboard Evolve | Typing Tutor
| VirtualDub 1.5.9 MC | 3D Object Viewer | Tune'O'Matic | In the Works ]


Keyboard Evolve
C++ source code
(Sep 19 2005)
ToDo list

(Compiles under VC++7.1 in Windows and gcc in Linux.  If you have an old versin of gcc, you may have trouble.)

(The code is a mess due to it being my first C++ program, it growing beyond my initial vision, and me desiring quick results over nice code)

Get AnalyzeText to be able to make combo lists.

Keyboard Evolve is a program that uses an evolutionary algorithm to evolve an efficient keyboard layout.  I started this program in July 2005 after reading about Peter M. Klausler's experiments.

News: I do not know when I will resume working on this project.  When I do get around to it, the program will undergo a complete re-write, as the current version hit a dead-end.  Since I wrote the current version, I've improved my knowledge of C++ and design patterns, which should allow me to make a much more flexible and extensible design.  The new version will also be available at

You can read about my other work on alternative keyboard layouts at Projects\Alternative Keyboard Layouts.  By following the previous link, you can also download a few custom layouts I've created. If you use the Dvorak layout, you might be interested in the modified Dvorak layout I created in 2004 that reduces finger movement an extra 10% (48% compared to QWERTY) and also makes typing CTRL+Z/X/C/V much easier. If you want something easier, try QWERF -- it's similar to QWERTY, but rearranges things a little to make it more comfortable.

Some of the code is a bit of a mess, since the program grew waay beyond my initial vision and I just wanted to get results as soon as possible.  Not to mention that it was my first C++ program.  It's not tooo hard to edit the settings, but I hope to one day get it all working from INI files rather than having everything hard-coded in..

Unfortunately, I have yet to find the holy grail of keyboard layout evolution parameters!  Things are complicated by there being a fundamental difference in how curved, ergonomic keyboards and plain, rectangular keyboards are used -- the way I see things, they have different home "rows."  This program works best for ergonomic keyboards.  I'm in the process of finding the right balance between the two...

Keyboard Evolve console screenshot

Keyboard Evolve program in linux
Yes, root.. Internet is broken again (no WPA).  Stupid Linux wireless.

Get AnalyzeText (below) to be able to make key combo lists for Keyboard Evolve.

Java source code
(Nov 14, 2005)

(About 130 times faster than the previous version, so it can now be used on large text files)
AnalyzeText is a little program that can take a text file and spit out a file listing the character 'combos' in the text and the number of occurrences of each combo.  I use this list in Keyboard Evolve instead of stepping through a text file since it's much faster and doesn't make much of a difference in the scores for the layouts (+/-2%).

For example, this program tells me that in a certain 120kB test text file, the character combination 'th' occurs 2045 times.
Typing Tutor Program
(MS Windows only. This program requires that the VB6 runtimes are installed on your computer)
A little program I made that teaches you to type based on common key combinations.  I found that it worked every well when I was learning alternative keyboard layouts.  It teaches you habits, not just where the keys are, so you subconsciously know how to type and don't need to think about where keys are.

Note:  I suggest reducing the 'Target Speed' to 35wpm.

Typing Program screen shot
I can copy/paste as 3300 WPM


page made quickly using Mozilla Composer (i.e. the coding is poor)
Michael Capewell 2005 smozoma