Kinglet

NOTE: Kinglet was an attempt to create a spelling-based steno system that would have a theoretical speed equal to Plover, i.e. about 1 word per stroke of the keyboard. It does succeed in this. However, this success comes at the cost of a high degree of finger contortion and accuracy in each individual finger. While I attempted to reduce these issues as much as possible, they do remain significant problems in using the system. I therefore have to regard kinglet as a theoretical success, but a practical failure. A success because two robots with equal dexterity would type at the same speed using either kinglet or plover; and a failure because humans are not robots, and the requirements for actual use make kinglet too difficult for humans.

I also regard kinglet as strong evidence that no spelling-based steno system can be both speed-competitive and dexterity-competitive with plover. Please view this as a challenge, and prove me wrong by either proposing modifications to kinglet, or by designing your own system that accomplishes these things.

Introduction

Kinglet is a stenotype system in which chords are used to directly spell out words instead of relying on phonetics, mnemonics, or word lookup tables. With Kinglet, you type out the exact characters you want to see, typically much faster than you would with QWERTY.

An exact speed comparison with Plover would be difficult because the two systems treat words differently. Plover supports briefs that can match words of any size, while Kinglet requires spelling out each word individually. However, on average, and taking account of word frequency statistics for the English language, both systems output roughly one word per stroke. Because of that, they should end up being approximately the same speed, with Plover being faster for certain things (legal and medical transcriptions), and Kinglet being faster for others (names and other unusual strings of text).

One advantage that Kinglet has over traditional stenotype systems is the relative ease of learning. To get good at Plover, you need to memorize hundreds of briefs, prefix, and suffix strokes. With Kinglet, each finger-pair has a simple chart of 48 chords (144 altogether), a few rules regarding fingering and chord ordering, and that's it.

Kinglet is also useful as a programmer's stenotype system because it produces exactly the output you want. Traditional steno systems frequently back up and replace existing output with something else, which makes it hard to give commands to tools like vim and emacs.

The difficulty with Kinglet - which traditional steno systems don't suffer from - is the fingering. Kinglet's chords are more complex than Plover's, and the fingers need to cultivate a higher degree of dexterity and accuracy in order to type fast and avoid misstrokes. With Plover, the bulk of one's study involves memorization. With Kinglet, it involves practicing fingering techniques.

Try Kinglet

I designed Kinglet with help and advice from the Plover community; and Benoit Pierre has implemented a working version, available at github. It should work on either Linux or Windows. A Windows build is available at https://drive.google.com/file/d/0B9Je8TDYCh1xSVRjVmQ0RUF0ejA. Please send feedback and bug reports to the Plover mailing list, at ploversteno@googlegroups.com.

To retrieve and run the Kinglet code under Linux, give the following commands:

$ git clone https://github.com/benoit-pierre/plover.git
$ cd plover
$ git checkout kinglet
$ ./launch.py

You may need to install any missing python dependencies that cause launch.py to give an error.

You'll also need an n-key rollover keyboard, of the same sort that work with Plover.

The Basics

With Kinglet, the QWERTY aspect of the keyboard still works - if you hit a single key in Kinglet, you'll get the output of that key, just as you'd get on a normal keyboard. So there's no need to switch modes the way there is in Plover. In fact, Kinglet relies on the QWERTY behavior for numbers and some punctuation. This isn't so much worse than traditional steno systems, which require spending a whole stroke on each punctuation mark.

When typing chords in Kinglet, each pair of fingers - which I'll get specific about in a moment - can type a single letter of the alphabet, certain two-letter combinations, a selection of punctuation, the caps shift, or a space. So, with four pairs of fingers and one pair of thumbs, you can type a bit more than five characters per stroke, on average.

Kinglet uses the following keys on the QWERTY keyboard:

Until Kinglet has a suitable hardware keyboard, try keeping the keyboard at a 20á´¼ angle to keep the chord fingering more vertical. As with QWERTY and Plover, each finger has a home position. Keep them near their home positions so that typing becomes more a question of muscle memory than of feeling around for the right key:

Kinglet theory splits the keyboard down into five sets of keys, where each set maps to an assigned finger-pair. As with Plover, the chords on the left produce the first output, and the chords on the right produce the last.

When just starting out, if you find it easier, you can leave out the third and little fingers of each hand, and just stroke chords with the rest. That way for any short chords that you want to type (and there will be plenty), you can use those fingers and not the smaller, weaker ones.

Kinglet does have an equivalent string of characters that corresponds with Plover's concept of 'steno order', but you typically won't need to know it. The string is constructed from Kinglet's finger-pair order, like this: 1QA2WS3ED4RF5TG[ ]XCVBNM,6YH7UJ8IK9OL0P;. Unlike Plover, there's no need for you to memorize it. The only reason to know the text string itself is if you want to write down Kinglet strokes for tutorials and whatnot.

The Nine-Key Alphabet

The nine-key alphabet is a set of chords used by the third and little fingers on both hands to produce any single letter, space, a few common letter-pairs, and the most common punctuation marks (shown here inside square braces).

The nine-key alphabet for the left hand:

The nine-key alphabet for the right hand is the mirror image of the chords for the left:

The Six-Key Alphabet

The six-key alphabet is the set of chords for the first and second fingers on either hand:

The six-key alphabet for the right hand is a mirror image of the chords for the left:

The Thumb Alphabet

The thumbs are given their own set of chords in Kinglet, partly because they're not able to produce all the chords in the six-key alphabet, and partly because different chords are easier for the thumbs than for the fingers, and the most-used output characters should always be assigned to the easiest chords:

Notice that there is no empty chord for any finger-pair. This is because if a finger-pair does not strike a chord, then that pair produces no output in that stroke, and those two fingers are simply ignored by Kinglet.

Thumb Spaces

The space character is produced by the using the spacebar. When the thumbs use it by itself, it produces just a space. When the thumbs add the spacebar to any other chord, a space character precedes the output of that chord.

So to type 'e', the thumbs would use V. But to type ' e' (a space with an "e" after it), the thumbs would use [ ]V.

Fingering

Since thumb positioning is obvious, let's address only the rest of the fingers. These rules take account of the actual key positions on the keyboard, not the abstract key columns shown in the chord charts:

Here are the fingering rules:

  1. Earlier rules take precedence over others
  2. Rules apply to finger pairs, not to all neighboring fingers - the third and little fingers are a pair; the fore and middle fingers are a pair; the middle and third fingers are not.
  3. Don't cross fingers - a finger that is biologically to the right of another, should never take a position that is physically to the left of that finger.
  4. Keep outer fingers below inner fingers - the left little finger should be below the left third finger; the right little finger should be below the right third finger; the right fore finger should be below the right middle finger; the left fore finger should be below the left middle finger.

QWERTY

The behavior of the keys is slightly different when typing QWERTY:

  • With normal QWERTY keyboards, the symbol appears on screen as soon as you press the key. With Kinglet, the symbol appears as soon as you release the key. Kinglet assumes that when you press a key, it could be part of a chord. It's only after you release it that Kinglet can be sure you intended to strike only that one key.
  • Autorepeat is disabled. This is again because Kinglet has to wait until you release the key, to know if it was part of a chord.


Termination Conflicts

Sometimes you'll come to the end of a thought, and the final output will only require a stroke that has a single key in it. This produces a conflict because Kinglet has to assume that any single key strokes are intended to be interpreted as QWERTY typing. For example, if you try to stroke 'stripe' as W35CB7U9/3, you'll produce 'strip3' because Kinglet interprets the 3 as a single keystroke on the QWERTY layout.

There are several ways to deal with this:

  • Preferred approach: If you find you've arrived at a single-key stroke, just leave it out. So to get 'stripe', just stroke 'strip' without the final 'e', as W35CB7U9. Then when you're ready to type more, finish the word in the first part of the following strokes, e.g. 'e and' as W3TCVMHU.
  • If that technique doesn't appeal, you can just type the QWERTY character you need. So 'stripe' would be stroked as 3TCVMHU/e.
  • You could also avoid single-key strokes by migrating a character from the current stroke onto the next. So you could stroke 'stripe' as 'stri' and 'pe', with W35CB7U/2R.
  • If you know you're in the middle of a sentence, you could also just add a space to the single-key stroke, to give it another key. Then you could stroke 'stripe ' (with a space) as W35CB7U9/3T.

The reason the first option is preferable is because it maximizes your typing speed. All the other options involve rethinking your chord selection. Only the first option lets you get the biggest output from a stroke, without having to change what that stroke was going to be.

Note that some examples in this text have a termination conflict. The assumption is that you'll resolve them using one of the techniques described above. Termination conflicts are not things to be avoided; they're just part of typing.

Capitalization, Punctuation, And Numbers

For all numbers, and for any punctuation not included in the six-key alphabet, use QWERTY. With Kinglet, you always have the option of using the QWERTY keyboard without chords, to type the single characters printed on each key.

The Cap Chord

The above chord chart identifies one chord as "cap". It behaves as a cross between SHIFT and CAPSLOCK.

  • If CAPSLOCK is already on, the "cap" chord turns it off, and subsequent letters are output in lowercase.
  • If CAPSLOCK is off, using the "cap" chord causes the next single letter to be uppercase, and subsequent letters to return to lowercase.
    • 'I'm Zack.': AE4RVB,6Y7UI/AEF5B67IK;/QAWS
    • 'camelCaseVar': 3E4NMUIKL/AE45BUJ8/AER5BH
  • If CAPSLOCK is off, using the "cap" chord by two neighboring finger-pairs turns CAPSLOCK on, and subsequent letters will be output in uppercase.
    • 'Kinglet's reDONKulous': AERFTCVNH7UIKL/35VB,UJI/WS4R5XVHUOP;/AED4R5CVY789/2W3ERF

Dictionary Lookup

Here's a Perl script I wrote (see the attachment below), that will take a bit of text as input, and produce a sequence of Kinglet strokes as output. This is how I created the examples for this document. The script also tells how many characters per stroke and strokes per word you're getting. Kinglet needs to average at most one stroke per word, or at least 6.1 characters per stroke, in order to be competitive with traditional steno.

Here are some sample uses. To get 'hello':

$ ./kinglet.pl hello
WS3E4TBM6Y
chars per stroke: 6.25
strokes per word: 1

To get 'where have all the flowers gone?'

$ ./kinglet.pl "where have all the flowers gone?"
Q24RTVBNMY8IO/WER5VYIO/SED4T[ ]BNUI/W4TCHJL;/W3TVNM6H78/QA
chars per stroke: 6.15
strokes per word: 1

To indicate the "cap" chord, just use capital letters as you would normally. So to get 'I prefer 'ck' for Zack, and 'ch' for Zachary. Is that weird?', you'd do this:

$ ./kinglet.pl "I prefer 'ck' for Zack, and 'ch' for Zachary. Is that weird?"
AE4R[ ]BNMH7O/ASTVB,67IK;/1Q3TCVB6YUI/AEF5B67IK;/1Q2WTCVMHUI/1Q345VMYHJI/WR5T[ ]XV6JIO/3EFBHOP/QAWSTXV7U8O/ERTXY9P/34RCBHUP;/
chars per stroke: 5.82
strokes per word: 1

You can get 'it's friggin' NUTSO dude!' like this:

./kinglet.pl "it's friggin' NUTSO dude!"
SD5VB,UJI/WGMH7UO;/SFTG[ ]XV67UIL/2W3E5CN6YI;/ERGCVHU8/1Q
chars per stroke: 5.38
strokes per word: 1.5

You can get 'Oblique anastomosis effected between spatulated upper ureter and renal pelvis.' like this:

$ ./kinglet.pl "Oblique anastomosis effected between spatulated upper ureter and renal pelvis."
AE5TCVBNY7KL/145TVY90/WERFN6YIKOL/23RFMUJI/3RTGCVBU8I/Q3ERG[ ]CVBNUK/Q2R,Y8O/24FGCVY79OP/3RG[ ]CVYH79/ASTCVH78IP/WSETCVMHUI/WSTGBY7I/2RBM6UKL/W34F5G
chars per stroke: 5.9
strokes per word: 1.4

Or try sonnet #43:

$ ./kinglet.pl "When most I wink then do mine eyes best see, For all the day they view things unrespected, But when I sleep, in dreams they look on thee, And darkly bright, are bright in dark directed. Then thou whose shadow shadows doth make bright How would thy shadow's form, form happy show, To the clear day with thy much clearer light, When to unseeing eyes thy shade shines so! How would (I say) mine eyes be blessed made, By looking on thee in the living day, When in dead night thy fair imperfect shade, Through heavy sleep on sightless eyes doth stay! All days are nights to see till I see thee, And nights bright days when dreams do show thee me."

AEFGVBNYHI/WSED5TCN6I/AE4R[ ]CBNYH7UIK;/ERT,Y89O/23TNMYH7U8/ERVBMU8O/E4RFGVUJK/ERFVU9O0P/E4R5CVB6YUI/WE4TBMYIK/
3TCM7OP/ERTVHUJI/Q34RVHJI/ED4RTGVNMUJI/2W3ETGVBNMUJ9/345C,HU9O0P/E4R5CVBN6Y7K/EFGVBNYHI/AE4R[ ]CNY78/34TGXBYL/
ERGVBNM7IKOL/W3TBNUOP/E4TC6YIK;/E45G[ ]BNU8/1Q2WTXV6YH789O/ERGBHIK;/SEDRFG[ ]CVBNHKL/AWFN6HI/WE4G[ ]CVBNHKL/
AWFNYL/ERGBHIK;/ERGMH78I/Q3ERGB,YI;/ED4RF[ ]BN6Y8I9O/EFGVM6Y8O/3TCNJIO/2W35TCBNY8O/W3E4CM6Y9P/W3TCM6YIK/
E4R5TBYUJ8/E4RFGCB7UO;/W3E5[ ]XVJ89/Q2TCBN6Y8I9O/SEDRG[ ]BNHUJI/W3FBHU89/Q2FTGCNYO/QAE4R5TXBYO/QAE4R5T[ ]VM79/
2RFG[ ]CNJ89/Q25G[ ]XV689/ERTVY8I/SEDRBHI/2W34VBMY9P/SDRT[ ]BNHUJI/WSED45TVBJI/3E4TV7OL/WSETBM7UO;/W3E5XBYI;/
Q24RTVNYK/23TCVYH8O/3RCVNH7UI/3RFGVUJI/EDRFG[ ]CNJIO/2W3R[ ]CNJL/3RF[ ]CN6Y0P/E4R5VM6Y9P/EFGC6Y7IKL/2W3T/[(]/
AE4R[ ]CN7OP//[)]/E4R5TCVNUI/3RFGVUJI/2WR[ ]CVBNY78/W3RFVHUI/WSED4CMU9O0P/E4R5CVBNHUJI/SED5TCYUJL/AWTCVNMYIK/
3R[ ]CVNYIK/3TBM7U8P/S4RG[ ]CM7OP/1Q2WTXVHJ8IOL/SETCVNY89O/34CMYIL/SD4RGVM6I/EDRFG[ ]CVB7KL/WSETM6Y7U9/ASRTGV67K/
ERFVM789O/35G[ ]XVYUIOL/2345TVNMJI/WS3E4N,HUJI/W34TVU9/E45G[ ]CN7UO;/W3E5BMU8O/W3TVHUJ8/W3TCM6YIK/ERFN7OP/
1QTXV7IKL/SEDTCM7OP/W3TBH7I/SE4RVNMJK/W3TN6YI/W3RVY9OP;/SED4T[ ]XV7UI/W3RVYIK/3RXBYI;/
12RG[ ]VN7UO;/W3E5CNY9O/WSE4RVNMJK/ERGBHUJ8O/EFGVBNYHI/2W34GB6Y7U8O/ERGCY8O/W3E5TCBNYIK/3R[ ]NMUOLP;/

chars per stroke: 5.76
strokes per word: 0.94

Cheat Sheet



Zack Brown,
Feb 7, 2016, 2:25 PM
v.1