michaeldickens / Typing

https://github.com/michaeldickens/Typing
68 stars 17 forks source link

Metrics for computation #18

Open HughP opened 9 years ago

HughP commented 9 years ago

@michaeldickens You might remember me form some previous comments, issues #16 and my recent pull request. I am posting again because if nothing else it seems that your work here could be an academic publication presenting your model (so I also include some citations to academic publications in this comment). But beyond that I have an interests in your stats model for my work. I see several statistics in your blogposts. I went through some of the inline comments in your code. And found that /doc/Fitness.txt was helpful to an extent. That is, I am trying to compare your work here in this repo with other sets of metrics and methods of evaluation used in academic publications (PDFs available of all citations on request) such as those listed below using Ant Colony Algorithm and the Cyber Swarm method:

Ant Colony:

Cyber Swarm/GKAP

Let me run down your list of metrics and explain what I understand then hopefully you can comment and make suggestions.

HANDS

FINGERS

These first two metrics are pretty standard and strait forward (and are also mentioned here):

FITNESS I did read your three lines about fitness computation in fitness.txt but it wasn't very clear, I mean: How from a list of digraphs is this really computed? I know what a digraph is in a language like English, but would it be better to articulate this as 'keys needed to create and orthographic set'? I mean on standard OS X QWERTY if one wants to type an umlaut < u > one must hold alt then press e and then press u. So would this be considered a "digraph"? There are other keyboards in the world which use dead keys, so for instance if I wanted to type < é > in some African languages I might type ; followed by e... does that become a "digraph" in this computational model? It doesn't seem that Fitness is a measure of reach strain. Or by "digraph" to you really mean "Bigram" (aka an n-gram with 2 values)?

DISTANCE How is distance really computed? in Fitness.txt you talk about both distance and effort. I wonder if these should be more clearly discussed? I don't see any reference to concrete figures. My Apple wireless keyboard with 15mm2 keys have center point values and can be measured, so in your app is the distance measure tied to a concrete measure or is it more abstract, and if abstract how so? I would imagine that keyboards with larger keys have an impact on distance too.

As a side note about distance, I did read an interesting article about the spacing between the keys affecting things link reach strain.

ROLLS

I buy the validity of rolls. I don't see Wagner et al. citing anyone for their validity but the following papers seem to confirm the general notion:

RHYTHM BREAKS

Measuring the same hand and the same finger seem pretty strait forward. (However, is same finger include movement of the index finger from h and y on the QWERTY keyboard? or does the same finger only apply to tt or ee kinds of situations?) Dvorak and others argues for the validity of rhythm in the following (however what I don't see is a tap and hold measure which OS X introduced about 10.7):

The following metrics are still a bit confusing to me.

In the academic literature there are also other keyboards you might be interested in. For instance a modification of Dvorak (for the list of modified keyboards):

michaeldickens commented 9 years ago

Fitness: Yes, I mean bigram. Right now every character that the program uses can be typed with a single keystroke, unless it's a shifted character. Shifted characters are counted separately.

Distance: I really use effort here, not distance, although distance approximates effort (more distant keys have higher penalties, but the relationship is not linear).

Rolls: You are correct about how these work, except that the two keys do have to be adjacent to count as a roll. If you look at calcInRoll() (or calcOutRoll()) in fitness.c., you will see that there are two versions of the function defined, and one of them is commented out. The commented-out version does what you describe.

Same Finger: This counts any time when you use the same finger twice in a row, even on different places on the keyboard.

A lot of the rest are similar to metrics used by Michael Capewell. You can see his page for more info.

Do you have a freely-available link to Alec Martin's 1972 paper? I can't find one.

HughP commented 9 years ago

@michaeldickens Should I email it to the gmail account in the help section of the application?

michaeldickens commented 9 years ago

@HughP Yes, that works fine, thanks.

iandoug commented 8 years ago

Just curious: is the thinking that led to Workman factored in anywhere? To pick up on key size, it's related to hand size and finger length. I've got an inherited condition that gave me pinkies missing the last joint. This affects typing (and music). I've been thinking about how to compare one layout against another, and the current models generally make some assumptions, like a standard size keyboard in slab configuration. To my thinking, that's part of the problem. If we're dumping QWERTY why are we still sticking to rectangular slabs? Ergo designs (MS Natural / Maltron / Kinesis / etc) are a start, but are they optimal?

So I'm trying to think outside the box (or slab), but now need a way to evaluate a given non-standard design (and if the program is smart enough to suggest improvements, then yes please).

I feel that an analysis program needs to work with physical measurements, both of the keyboard and keys and placements, and the user's hand size. Or is that just too complex? For example, knowing the distance between forefinger tip and pinky tip may rule our some common key combos (ctrl-V etc...).

michaeldickens commented 8 years ago
  1. Each finger has a relative cost set at the bottom of values.c. If you want to avoid using pinkies, you can increase fingerWorkCosts[0] and fingerWorkCosts[FINGER_COUNT - 1], which correspond to the pinkies.
  2. You can add new physical keyboard layouts if you want; see the README.