Carpalx optimizes keyboard layouts to create ones that require less effort and significantly reduced carpal strain!
X11 layouts are available! Patches to include Carpalx layouts in xkeyboard-config and kbd have been submitted by Perry Thompson. Meanwhile, many thanks to Sven Hallberg for providing X11 configuration for Carpalx layouts. Richard Gomes contributed an archive of these files for KDE/Gnome users.
Have ideas? Tell me.
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.
A complete description of the typing model can be found in Carpalx - Typing Effort section. Here I list parameter sets.
The typing effort model is parametrized by the following sets of parameters
|model name||description||kb,p,s||k1,2,3||w0, whand,row,finger||P||f|
|mod_01||balanced contributions||0.3555, 0.6423, 0.4268||1, 0.367, 0.235||
0, 1, 1.3088, 2.5948
Phand = 0, 0
Prow = 1.5, 0.5, 0, 1
Pfinger = 1, 0.5, 0, 0, 0, 0, 0.5, 1
fhand = 1
frow = 0.3
ffinger = 0.3
Since there are many parameters, there is opportunity to define a variety of models, each with a focus on different aspects of typing. For example, one model could have parameters that have no finger penalties whereas another model might heavily penalize the pinky.
I used to have multiple parameter sets listed here, but found that this added too much complexity to the description. Therefore, I will present a single set of parameters and use this set for all layout evaluation and simulation. This parameter set is called mod_01 (i.e. model 01).
The penalty weights (whand, wrow, wfinger), effort component weights (kb, kp, ks) and triad interaction parameters (k1, k2, k3) were selected so that the effort components for QWERTY had specific ratios. The ratios for the model for the base:penalty:stroke effort components is 1:1:1 (fairly easily justifiable — a balanced contribution) and the row and finger component of the penalty also has a ratio of 1:1.
Specifically and first, the hand penalty weight whand was set arbitrarily to 1 — this value is unimportant since there is no hand penalty (i.e. Phand=left = Phand=right = 0). The row penalty weight, wrow, and finger penalty weight, wfinger, were set so that the row- and finger-associated penalties were identical. This can be achieved with any number of parameter pairs (I don't immediately recall why I didn't make one of these 1). Next, the interaction parameters were set so that the ratio of efforts for k1,k2=k3=0 : k1,k2,k3=0 : k1,k2,k3 was 60:30:10. k1 was arbitrarily set to 1. In other words, the interaction between the second and first key in the triad contributed to 30% of the effort and the interaction between the third and the first two keys contributed 10%. Once these parameters were fixed, the component weights were adjusted so that the base, penalty and path efforts for QWERTY were all 1, making up a total effort of 3.
To make the consequences of the parameter selection process concrete, below is the effort table for QWERTY. Notice that the effort contributions from base, penalty and path are equal. Furthermore, the row and finger components of the penalty are also equal (these penalty components do not mix linearly, and therefore the total penalty is larger than the sum of the components).
|QWERTY typing effort - english corpus|
|model||keyboard||total effortrel%||effort contributionsrel%|
The penalty weights are the w0,hand,row,finger parameters in the equation for key effort.
These weights adjust contribution of baseline, hand, row and finger penalties.
|penalty weight name||description||w0||whand||wrow||wfinger|
|penalty_weight_01||default penalty weight||0||1||1.3088||2.5948|
As described above, the penalty weights were set to balance row and finger contributions. The hand penalty weight value is arbitrary, since no hand penalties are incurred in this parameter set (the hand penalty values were set to 0, so as not to penalize either hand). The row penalties are subjective, and I set them to 1.5 for the digit row, 0.5 for the top row, 0 for the home row and 1 for the bottom row. I consider the bottom row to be less accessible than the top row. Finger penalties were levied at the ring finger, with a value of 0.5, and the pinky, with a value of 1. I consider the pinky to be quite weak (here some may argue that this pinky penalty, which is 2x the ring finger penalty, is too high) and intuitively prefer layouts that lay off the pinky, so to speak.
The penalty values are Phand,row,finger parameters in the equation for key effort.
These values map the value of hand (L,R), row (number, top, home, bottom) and finger (index, middle, ring, index) onto a penalty. A given model will weight each penalty value using the penalty weight parameters.
The stroke path effort, si, is determined based on the hand, row and finger stroke pattern categories pr,h,f. Stroke path effort is computed by summing efforts associated with each category.
Each triad is assigned a distinct hand, row and finger stroke category based on the layout of the triad keys. For example, row category 1 (pr = 1) is associated with a downward row progression with repetition (e.g. rows=top, top, home) for example.
The balanced stroke path (path_01) yield approximately equal hand, row and finger contributions to the stroke path over the English corpus.
|stroke path name||description||fhand||frow||ffinger|
|path_01||balanced stroke path||1||0.3||0.3|