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 to type. It's also the only keyboard layout that has its own fashion line.

# layouts

19 Mar 21 — Added BEAKL 15, Hieamtsr, Colemak Mod-DH and Mtgap 2.0 layouts to the layouts analysis.

15 Mar 21 — Added the Engram layout by Arno Klein to the layouts analysis.

6 Aug 20 — The search for the world’s best keyboard layout by Paul Guerin

4 May 20 — An interview with Bloomberg's Arianne Cohen Splurge on a Better Keyboard, It's Worth It.

25 May 18 — The BBC article Why we can't give up this off way of typing by Tim McDonald discusses the history and persistence of QWERTY and my Carpalx work.

16 Aug 16 — Ergonomic Keyboard Layout Designed for the Filipino Language at AHFE2016 derives layout for Filipino language using Carpalx

18 Apr 16 — Carpalx layouts soon to appear in freedesktop (package xkeyboard-config) and kbd. Thanks to Perry Thompson.

# Generating Word Effort Statistics

configuration file : etc/tutorial-02.conf
output : out/tutorials/02

## 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$