Archive for the ‘Software Release’ Category

Introducing the Thumb Keys

February 27, 2012 91 comments

The Kinesis keyboard layout option on the keyboard layout optimizer now includes thumb keys (and a Tab key). It currently only includes the two right thumb keys, not the left, for two reasons:

1) I think it makes sense to put shift and backspace on the left thumb keys, and I don’t need the program to tell me that. Shift and backspace both have very high same-finger ratios with almost every key, so it doesn’t make sense to put them on a finger with other frequent keys.

2) Using shift and backspace (especially shift) is much more complicated than using other keys, because they interact so strangely with the rest of the layout. Shift is difficult to measure, because its frequency changes every time the shifted keyboard changes.

Once I began including the position for the tab key, the computer immediately moved it and started throwing it around to different parts of the keyboard. Apparently its original spot wasn’t so great. I decided to let it keep messing with tab because I don’t think aesthetics are very important in this case, but I did create an option for keeping tab in place. I haven’t created an option for leaving space and enter in place, but so far I haven’t needed to: the best keyboard always ends up putting them in their original positions.

The completed keyboard for Kinesis, including thumbs and shifted keys:

Hands: 42% 41%
Fingers: 7.0% 8.0% 16% 12% 0.00% 18% 12% 11% 9.0% 7.0%

    `  %  /  +  #   ^  <  >  {  }  Q
 |  \  P  O  U  [   ]  D  L  C  W  @
    I  N  E  A  *   M  H  T  S  R  X
    &  K  =  Y  !   B  F  V  G  $  
    ~ \t                     J  Z  
                               \n SP

    1  2  3  4  5   6  7  8  9  0  q
 ;  .  p  o  u  -   "  d  l  c  w  :
    i  n  e  a  ,   m  h  t  s  r  x
    (  k  '  y  _   b  f  v  g  )  
    ? \t                     j  z  
                               \n SP

Fitness: 51887480
Distance: 77500
Finger work: 67705
Inward rolls: 6.56%
Outward rolls: 1.54%
Same hand: 42.23%
Same finger: 1.51%
Row change: 27.27%
Home jump: 6.18%
Ring jump: 1.76%
To center: 3.42%
To outside: 0.40%

I have some speculation as to why it always places space and enter on the thumb keys. The space key, for one, is the most frequent key, and frequently occurs before and after almost every other character. It is very hard to place it on the same finger as any other character, especially a common character. The only key that doesn’t have a frequent character on it is the thumb.

Similarly, newlines occur before and after almost every character, so it hurts to put it on a key with a number of other characters. This move is less obvious—sometimes the program places something other than enter on this position, but it usually ends up relenting and putting enter in its spot. It just makes sense to put enter here—it doesn’t conflict with other characters, and to put a cherry on top, it’s about the right frequency for a spot that’s about that difficult to reach.

As for those who want to put E on a thumb key, that probably won’t work until the left thumb keys work. Until then, how might one modify this keyboard to put E on a thumb key?

(Note: As of this writing, GitHub hasn’t registered that I’ve uploaded the new files. If you don’t see the updated version of the program, let me know and I’ll see what I can do.)


Introducing the First Fully-Optimized Shifted Layout

February 19, 2012 21 comments

The typing program now fully supports shifted keys. The updated version is on GitHub.

Optimized shifted layout for Kinesis:

Hands: 51% 48%
Fingers: 9% 9% 18% 14% 14% 14% 11% 8%

 [  ]  +  {  #   @  |  $  }  %  Q
 Y  P  O  U  :   B  D  L  C  K  J
 I  N  E  A  ;   M  H  T  S  R  V
 &  ?  *  =  <   >  F  W  G  X  
 ~  `               Z  ^  

 1  2  3  4  5   6  7  8  9  0  q
 y  p  o  u  -   b  d  l  c  k  j
 i  n  e  a  ,   m  h  t  s  r  v
 (  "  '  .  _   )  f  w  g  x  
 \  !               z  /

Fitness: 18449175
Distance: 89177
Finger work: 326100
Inward rolls: 10.08%
Outward rolls: 2.53%
Same hand: 34.47%
Same finger: 1.69%
Row change: 12.64%
Home jump: 0.89%
Ring jump: 2.89%
To center: 2.47%
To outside: 0.19%

Shifted layout for a standard (asymmetric) keyboard:

Hands: 50% 49%
Fingers: 8% 9% 19% 14% 17% 11% 12% 8%

^  @  (  )  +  &   ~  [  ]  %  #  Q  Z   
   <  P  O  U  *   V  F  L  G  >  $  J  `
   I  N  E  A  =   D  S  H  T  R  X     
   {  }  ?  Y  |   B  C  M  W  K       

\  1  2  3  4  5   6  7  8  9  0  q  z   
   .  p  o  u  _   v  f  l  g  "  ;  j  /
   i  n  e  a  ,   d  s  h  t  r  x     
   !  -  '  y  :   b  c  m  w  k

Fitness: 18019920
Distance: 27161
Finger work: 87915
Inward rolls: 8.63%
Outward rolls: 2.77%
Same hand: 34.45%
Same finger: 1.93%
Row change: 13.34%
Home jump: 1.35%
Ring jump: 2.02%
To center: 2.63%
To outside: 0.43%

Compare this to Colemak for a standard keyboard:

Hands: 46% 53%
Fingers: 8% 7% 11% 18% 18% 15% 10% 9%

~  !  @  #  $  %   ^  &  *  (  )  _  +   
   Q  W  F  P  G   J  L  U  Y  :  {  }  |
   A  R  S  T  D   H  N  E  I  O  "     
   Z  X  C  V  B   K  M  <  >  ?       

`  1  2  3  4  5   6  7  8  9  0  -  =   
   q  w  f  p  g   j  l  u  y  ;  [  ]  \
   a  r  s  t  d   h  n  e  i  o  '     
   z  x  c  v  b   k  m  ,  .  /

Fitness: 22955565
Distance: 25239
Finger work: 347475
Inward rolls: 4.51%
Outward rolls: 2.50%
Same hand: 42.63%
Same finger: 1.89%
Row change: 18.63%
Home jump: 1.33%
Ring jump: 3.86%
To center: 7.71%
To outside: 1.18%

Typing Program on GitHub!

February 15, 2012 37 comments

I uploaded the typing program to GitHub. I will no longer be updating the version at

From now on, the latest version of the typing program will be available at:

Easy-to-Use Keyboard Optimization Program

January 22, 2011 31 comments

I’ve made some modifications to the keyboard optimization program. It is now much easier to use, especially for someone who doesn’t have much experience with computer programming. You can get it here. I added a makefile and a better readme, but more importantly, a command-line user interface. You can now customize the costs, use various features, and even change how the text corpus is weighted.

Typing Program Release

October 11, 2009 Leave a comment

I have made some improvements to the typing program to make it more user-friendly. You can get it at

New Keyboard Layout Project: Program Release

September 12, 2009 6 comments

You can find my source code at The new and faster algorithm was written by Chris Johnson, a.k.a. Phynnboi.

The algorithm repeatedly returns this result.

y p u c b  x l d , .
i n e s f  h r t a o
j v ' w z  k m g ; q

Fitness:       2263451098
Distance:      9003112
Inward rolls:  7.04%
Outward rolls: 4.48%
Same hand:     22.80%
Same finger:   0.68%
Row change:    9.01%
Home jump:     0.34%
To center:     4.17%

This is a very good layout. Strangely enough, though, if you run the algorithm for longer it comes up with this layout, even though it has a lower score:

y c o u ;  k m d p w
i s e a .  l h t n r
j z ' , x  v f g b q

Fitness:       2263597180
Distance:      9599916
Inward rolls:  7.20%
Outward rolls: 2.20%
Same hand:     16.85%
Same finger:   0.64%
Row change:    7.64%
Home jump:     0.28%
To center:     1.74%

Which is better and why? How can improvements be made?

New Keyboard Layout Project: New Results

September 1, 2009 13 comments

After fixing the bug, I modified the program and got a rather different (though good) result.

; g u c b  x h p w .
a t e s d  l n i r o
' v y f z  j m , k q

Fitness:       20.38
Distance:      7814.03
Inward rolls:  7.59%
Outward rolls: 5.49%
Same hand:     22.26%
Same finger:   0.77%
Row change:    9.10%
Home jump:     0.39%
To center:     3.55%

This layout has nice inward rolls and great same finger and distance. It has pretty low usage of the right middle finger, though, and pretty high usage of the left ring finger. Other than that, though, it’s very nice.

Also, I added a function to my program that shows what the easiest and hardest digraphs are. The theory is that more common digraphs should be easier. For this layout, the easiest digraphs are in, es, te, and ri. The hardest are ‘;, ‘a and uy. You can see why ‘; is so hard: it involves jumping over the home row on the same finger to hit two of the hardest spots.

And here’s the source code, if you want to check it out.