carpalx - keyboard layout optimizer - save your carpals
Carpalx optimizes keyboard layouts to create ones that require less effort and significantly reduced carpal strain!

Have ideas? Tell me.

the best layout

Partially optimized QWKRFY and fully optimized QGMLWY layouts are the last word in easier typing.

the worst layout

A fully anti-optimized TNWMLC layout is a joke and a nightmare. It's also the only keyboard layout that has its own fashion line.

download and explore

Download keyboard layouts, or run the code yourself to explore new layouts. Carpalx is licensed under CC BY-NC-SA 4.0.

layouts

Download and install the layouts.

Generating Word Effort Statistics

configuration file : etc/tutorial-02.conf
output : out/tutorials/02
efforts of 481,000 words: QWERTY, Dvorak, Colemak, QGMLWB.

Configuration

To generate a rank-ordered list of words, ranked by effort, use reportwordeffort in the action string. If you are only generating word effort reports, you do not need to parse the corpus and load triads (loadtriads can be omitted from action).

...
action = loadkeyboard,reportwordeffort,quit
...
words      = ../corpus/words.480k.txt
wordlength = 6-10
...
keyboard_input  = keyboards/qwerty.conf
...
You can use a shorter word list, such as ../corpus/words.txt, or any other list of custom words. If you're on a UNIX system, you can sample words from /usr/share/dict/words.

QWERTY Word Statistics

> bin/carpalx -conf etc/tutorial-02.conf

The output contains groups of words ranked by typing effort, grouped by percentile decades. In addition, you'll receive the top 25 hardest-to-type and easiest-to-type words.

On QWERTY, the hardest word from the list is zyzzyva. Try it, and you'll see why. Keep in mind that word effort is normalized by word length, so a longer word is not necessarily going to be harder to type.

wordreport top 25 hardest pazazz: 8.2 pazazzes: 8.1 tazzas: 7.9 zaqaziq: 7.5 pizzazzes: 7.5 pizzazz
: 7.4 bezazzes: 7.3 azazel: 7.2 zaqqum: 7.1 gozzan: 7.1 bezazz: 7.1 mazzard: 7.1 hazzan: 7.1 pizazz
y: 7.0 pizazzes: 7.0 razzed: 7.0 piazzas: 7.0 razzes: 6.9 pappox: 6.9 pizzas: 6.9 ezzard: 6.8 poppa
s: 6.8 cozzes: 6.8 cazzie: 6.8 razzer: 6.8

wordreport top 25 easiest kiddos: 1.0 duffles: 1.0 khadis: 1.0 duffau: 1.0 diddle: 1.0 duddle: 1.0
koffka: 1.0 ejidal: 1.0 fliffus: 1.0 fiddle: 1.0 fuddle: 1.0 duffie: 1.0 fuffle: 1.0 siddhi: 1.0 ki
ddle: 1.0 kakkak: 1.0 fluffy: 0.9 hadjis: 0.9 duffle: 0.9 dukkha: 0.9 kajdan: 0.9 dukker: 0.9 dekke
r: 0.9 jiffle: 0.8 diddly: 0.8 fiddly: 0.8
The precision of the typing effort model used in carpalx hasn't (and probably won't) be measured. In other words, although a given word, or corpus, has an exactly computable effort associated with it, given two efforts e1,e2 it is up to you to determine whether the difference |e1-e2| is significant. For example, zyzzyva (27.3) and zabrze (23.8) have an effort difference of but I'm not convinced that zabrze is 15% easier to type (in fact I find it harder to type). On the other hand, zyzzyva (27.3) and skaffie (2.3) have a much larger effort difference which is demonstrably meaningful. I suspect that importance of effort difference scales with effort - making relative differences useful and not absolute ones.

The top 25 lists are followed by 10n percentiles (n=1..10) with each percentile group showing 10 words of that group. Group 0 and 11 are the 25 hardest and 25 easiest words, respectively.

wordreport percentile 0 cost 8.2
wordreport group 1 pazazz 8.20442317838045668
wordreport group 1 pazazzes 8.076835822500209
wordreport group 1 tazzas 7.89028904085810026
wordreport group 1 zaqaziq 7.52678019881048844
wordreport group 1 pizzazzes 7.48850864093266286
wordreport group 1 pizzazz 7.35524765300984254
wordreport group 1 bezazzes 7.31483530092043647
wordreport group 1 azazel 7.22799666805688505
wordreport group 1 zaqqum 7.13746339392865882
wordreport group 1 gozzan 7.09544537465206846
wordreport group 1 bezazz 7.06142239601079788
...
wordreport percentile 50 cost 3.1
wordreport group 6 witterness 3.13341911464002582
wordreport group 6 astraeid 3.13341605986154615
wordreport group 6 hematin 3.13341454932208662
wordreport group 6 foramens 3.1334135558763821
wordreport group 6 posher 3.13341045278760025
wordreport group 6 droumy 3.13339841866121685
wordreport group 6 orthotics 3.133396620921041
wordreport group 6 donkeywork 3.13338950216118084
wordreport group 6 algarve 3.13338363550455458
wordreport group 6 syngamous 3.13337781769012407
wordreport group 6 trimmingly 3.13337595020590349
...
wordreport percentile 90 cost 2.4
wordreport group 10 edeline 2.40732385088073044
wordreport group 10 pulaskite 2.40729261766900201
wordreport group 10 starkest 2.40728131877740569
wordreport group 10 jerseyed 2.40725419508736786
wordreport group 10 leeser 2.4072436843459047
wordreport group 10 dredge 2.407225644430144
wordreport group 10 lithagogue 2.40722520707764509
wordreport group 10 majoristic 2.40722356579775225
wordreport group 10 englishize 2.40721591129181294
wordreport group 10 deadnesses 2.40721256905212718
wordreport group 10 rushville 2.40720102994969916

The word reports help associate specific words with how difficulty scales within the range of the effort range. For example, here is one word from each percentile decade

> cat out/tutorials/02/stats.qwerty.txt | grep group | sort -u -k 3,3 | sort -n +2 -3
wordreport group 0 pazazz 8.20442317838045668
wordreport group 1 pazazz 8.20442317838045668
wordreport group 2 unsuburban 3.90896688737044736
wordreport group 3 coassuming 3.62626668640564139
wordreport group 4 obstinance 3.43429742543414597
wordreport group 5 revince 3.27732287210533459
wordreport group 6 witterness 3.13341911464002582
wordreport group 7 reserene 2.99042931039424056
wordreport group 8 slattering 2.83656566950171087
wordreport group 9 scouress 2.65765633135394341
wordreport group 10 edeline 2.40732385088073044
wordreport group 11 kiddos 1.02973028

Dvorak Word Statistics

To compute word statistics for dvorak, change the keyboard_input value in the configuration file

keyboard_input = keyboards/dvorak.conf

or invoke the parameter on the command line

> bin/carpalx -conf etc/tutorial-02.conf -keyboard_input keyboards/dvorak.conf

The top 25 lists are slightly different. First, the hardest Dvorak words are harder to type than QWERTY (larger effort). Analogously, the easier words are easier to type than QWERTY (lower effort).

wordreport top 25 hardest razzly: 8.2 razzle: 8.1 laszlo: 7.5 lazzaro: 7.4 balzac: 7.2 zsazsa: 7.2
frazzle: 7.1 dazzle: 7.1 sozzly: 7.1 allvar: 7.0 salazar: 7.0 sozzle: 7.0 lazaro: 6.8 zizzle: 6.8 l
azary: 6.8 lazars: 6.8 valval: 6.8 lazare: 6.7 lallan: 6.7 zavalla: 6.7 vallar: 6.7 zavala: 6.7 val
var: 6.7 plazas: 6.6 alazor: 6.6

wordreport top 25 easiest hoehne: 0.4 unteethed: 0.4 outhear: 0.3 outtear: 0.3 ethion: 0.3 theism:
0.3 teihte: 0.3 duetto: 0.3 unheed: 0.3 teetee: 0.3 teethers: 0.3 outheel: 0.3 teether: 0.3 teethie
r: 0.3 theist: 0.3 teethed: 0.3 huehuetl: 0.3 theiss: 0.3 outhue: 0.3 hettie: 0.3 teethiest: 0.3 te
ethes: 0.3 teuthis: 0.3 theins: 0.2 teethy: 0.2 teethe: 0.1

Below is a list of one word from each of the effort percentile decades.

wordreport group 0 razzly 8.16702592363682833
wordreport group 1 razzly 8.16702592363682833
wordreport group 2 valutas 3.34543471543864389
wordreport group 3 sembrich 2.9627826227412145
wordreport group 4 unbodylike 2.712577354562643
wordreport group 5 gooselike 2.51020546921512232
wordreport group 6 bulging 2.3305295819198336
wordreport group 7 subjectify 2.159242181672788
wordreport group 8 toxodon 1.98183724338039521
wordreport group 9 meerschaum 1.78533212849779818
wordreport group 10 boeschen 1.530743327292864
wordreport group 11 hoehne 0.368380005