tags: #good-articles title: A different kind of keyboard author: url: https://ianthehenry.com/posts/peggi/
A different kind of keyboard
I’ve always been attracted to chording keyboards in theory, but I lack whatever childhood musical training is required to wrap my fingers around them.
So I made something else: an arpeggio keyboard.
Peggi is an eight-key keyboard that fits on the back of your phone. While chording keyboards require you to press multiple keys at the same time, arpeggio keyboards only ask that you type multiple keys in sequence.
Peggi has six “regular” keys, one space key, and one modifier key. Each finger is locked to a particular key: fingers never move across the keyboard.
You can type all lower-case letters and some common punctuation characters with exactly two keypresses. Upper-case letters and other symbols require three keypresses, and numbers and rarely-used symbols require holding the modifier key. Yeah, yeah, it’s sort of a chord. But like not really.
Try it for yourself!
I made a demo that preserves the same finger-key correspondence as the Peggi, but laid out across the qwerty home row. So instead of a 2x4 grid, it’s a 1x8 line. It sort of breaks my brain to type on it after using the real thing, but since you’ve never used the real thing, it should give you an okay idea of how it feels.
Try focusing the textarea below, and pressing the following keys on your keyboard:
FFL KJ JL JL JF KS A FFK KJ FD FD DF LLL (If you press the wrong initial key, press ; to discard it. If you need to backspace, hold ; and press A. If you’re on a phone… well, I dunno; maybe email yourself this URL and try it out later…) Something this demo doesn’t do a great job of showing is that most punctuation characters have “capital” versions – for example, “capital comma” is a semicolon. But you won’t see how to type it until you press KK, so it might seem like some characters are missing. Also, some characters actually _are_ missing, because I didn’t bother filling up the modifier layer for this demo. I picture each arpeggio as a motion across a two-dimensional grid. I didn’t want to draw a fancy SVG, so content yourself with this janky table instead: T • ↑ H ↘ • E • ↑ I bring this up because the motions “across” the keyboard feel more natural to me on the two dimensional grid than they do on the linear layout in the demo above. C • ← O • ← O • ← L ↓ • I will also add that I think the cupped shape of the hands makes the pinky keys a lot more comfortable than the demo implies. Having the space and modifier keys on the pinkies feels fine on the Peggi, but it feels a little weird on A and ;. So… withhold some judgement there, maybe. # Some advantages over chording * If you didn’t grow up playing the piano, it’s probably easier to press one key after another than to press multiple keys at the same time – you’ve been doing it all your life, on a regular keyboard. * Characters are entered on keydown, not on keyup, just like a traditional keyboard. This makes the keyboard feel a little more responsive – and a lot more familiar. * Because the order that you press keys matters, you can get by with fewer total keys. Six keys gives you 15 two-finger chords, but 30 two-finger arpeggios – enough to accommodate every letter in a commonly used alphabet. # …and some disadvantages The obvious downside is that you’re submitting twice as many inputs as you would be on a chording keyboard… sort of. Typing two letters requires four keypresses, instead of two chordpresses, but you can usually begin pressing the next key before you finish pressing the previous key. Meanwhile, a chording keyboard requires you to release all keys before you can begin typing the next chord, so entering two letters on a chording keyboard is sort of four “input events” as well: keydown, keyup, keydown, keyup. Wait, what about stenography? I have strategically limited my straw man argument to a theoretical “dumb” chording keyboard, where a single chord corresponds to a single letter. But of course, many chording keyboards can type entire words with a single chord, and can achieve much faster typing speeds than Peggi – or even a regular full-sized keyboard. Another downside is that certain typos – either missing a key, or typing an extra key – can result in an entire word being mistyped: as soon as you’re “off by one,” every subsequent arpeggio you type will actually enter the wrong character. This is part of the reason why pressing space always presses space, regardless of the current sequence you’re typing: if you make a mistake, it will only last until the end of the current word. I thought this would be a big problem with the design, but in practice this… almost never happens? At least at the speeds I can type at. My brain very much thinks about letters as pairs (or really as “motions” between keys), so you’d only really get off-by-one if a key press didn’t register. But because your fingers never move around, this is actually very rare. # Let’s talk about ergonomics It’s not amazing. I thought it was clever to put keys on the back of a phone: it leaves your thumbs free to reposition the cursor or do other navigationy things; it keeps the overall form factor relatively compact and pocket-friendly. But in reality, your thumbs are kind of useless. I found that the most comfortable way to hold the phone is in landscape mode with your thumbs resting across the top edge – holding the phone such that they can actually reach the screen requires sticking the keyboard down and pinching just the corner of your screen with your palms. ![A picture of a white man's hands, cupped around the back of an iPhone, fingers resting on the keyboard attached to the back of it. You can't see his face, but you can tell that he looks mostly comfortable with the position. He did not do his nails for this photo shoot.](/posts/peggi/overhead_hu76001ab6b57f0da9b0132a3841bc1747_4243157_1500x1500_fit_box_3.png) This isn’t really as bad as it sounds. Peggi is designed for text entry; it isn’t well-suited for text editing. Occasionally making some awkward thumb contortions to move the cursor isn’t a huge deal. And yeah, it really doesn’t work in portrait. I’ve tried. It’s awful. ![The same pallid hands hold the keyboard, but this time the phone is upright in portrait mode. You can't see his face, but you can tell that he is contorting his thumbs uncomfortably in order to barely grasp the edge of the phone while still reaching the keys on the back.](/posts/peggi/portrait_hud12db8b2dbcd9b247c546eafdf55e26b_6313735_1500x1500_fit_box_3.png) Even though the photograph at the top of this post _showed the keyboard in portrait orientation_. That was a lie. That was a trick. It just photographs much better that way, because the keyboard is a little bit taller than my phone is wide, and it looks really goofy: ![An iPhone sits face down on a table. It looks sad; dejected. There is a keyboard on the back of it, but it's hanging off the edges because it's too long, and the wires coming out of the keyboard and into the phone are at a dumb angle. You can tell that this would not make a good hero image for a blog post.](/posts/peggi/landscape-hero_hu4cfcd692ba34d2cac1188593b43314c2_4304458_1500x1500_fit_box_3.png) I could say that the keyboard _swivels_, so you can convert between portrait mode (so it fits in your pocket) and landscape mode (so you can actually use it), but I feel that I’ve lied enough to you already. I didn’t build a swively thing. I don’t know how. My knowledge of making physical things stops at, like, buying a USB cable. # Explain the key layout to me I did not do a fancy statistical analysis to figure out what the optimal layout would be to minimize double-presses, or to maximize total comfort level given some heuristics, or anything like that. I laid it out by hand, putting common letters in the most (subjectively!) comfortable positions, and trying to avoid as many double-presses as possible. For example, I find it very easy to roll my fingers “up,” and comparably harder to roll them “down” – in other words, I can type asdf more easily than fdsa on a qwerty keyboard. So I started by making the most common word in English – “the” – a roll of all of the fingers up, starting on the left hand and then moving to the right hand. From the home row: SDFLKJ. This puts e – the most frequent letter in English – on what is in my opinion the easiest sequence to type (KJ on a qwerty keyboard). From there I placed other letters according to their frequency and comfort, trying to prevent common words and bigrams from requiring double presses. And then I tweaked it a ton over time as I actually used it. I won’t claim that the key layout I settled on is _optimal_, but it stopped annoying me, and at some point I had to stop tweaking so I could actually spend some time learning to use it. If you want to make your own arpeggio keyboard, I would recommend doing a bit more science to optimize the layout than I did. # Unrealistic braggadocio about attainable typing speeds Since the most commonly typed key is space, and it remains a single keypress, the “average” number of keypresses per character – taking capitals into account – is around 1.8. I can type around 90wpm on my regular keyboard. Theoretically, that means I should be able to type around 50wpm on Peggi, because math. But I also don’t have to move my fingers. Typing on Peggi is like typing exclusively from the home row, without even needing to stretch a pinky to reach for shift. So perhaps I can reach speeds even faster than 50wpm. But I am also much more likely to “stall” – to have to press the same key multiple times in a row. And that’s much slower, because I can’t just press-press – I actually need to press, release, then press again. So perhaps 50wpm is optimistic. Or perhaps the advantage from my fingers staying in the same place exactly counteracts the disadvantage from pressing repeat keys, and 50wpm is the correct estimate. I have no idea. Let’s try an empirical measurement. # Actual typing speed I’m lucky if I hit 10wpm. # The future of Peggi Peggi appealed to me when I lived in New York City, because I wanted a good way to write during my long commute on the subway. I actually built a prototype Peggi years ago – out of a cheap Bluetooth numpad that wasn’t reprogrammable. It only worked with a custom iOS app I wrote that listened to the individual keypress events and synthetically “typed” the corresponding letters into a UITextView. It was janky, but it worked, and the app also showed the key mappings that updated as I typed the first character in a sequence, which was very helpful as I tried to learn my own layout. I wrote it off as an interesting experiment, partly because the numpad I used was _so bad_ that it would miss half the keys I typed, and I haven’t really had an occasion to think about it since. I don’t live in New York City anymore, and I don’t really have a reason to write _on the go_ these days. But then I randomly stumbled across the [Faunchpad](https://www.gboards.ca/product/faunchpad), an eight-key macropad flashed with QMK. “My gosh,” I thought. “That would be perfect for another Peggi prototype.” So I ordered one, and wrote the firmware, and flashed it. And here we are. It was a fun experiment, and it was nice to make another prototype, but I don’t think it’s really very useful – for me, at least. So my Peggi speed is probably going to stay at 10wpm, and that’s okay. But I’m writing this because I think it’s an interesting idea and – while I’m sure I’m not the first to try it – I’ve never heard of any examples of keyboards like this. Maybe it will inspire you to make your own? # Hyperlinks, because this is the Internet The [GKOS](http://gkos.com/gkos/index-gkos-com.html) inspired the “put a keyboard on the back of your phone” form factor. I built the Peggi out of a [Faunchpad that I purchased for $45 from g Heavy Industries](https://www.gboards.ca/product/faunchpad). They also sell full stenographic keyboards like the [Georgi](https://www.gboards.ca/product/georgi), either as kits or pre-assembled. The QMK [firmware for Peggi is on GitHub](https://github.com/ianthehenry/qmk_firmware/blob/master/keyboards/peggi/keymaps/default/keymap.c). [ASETNIOP](http://asetniop.com/) is a nice minimal ten-key chorded layout with stenography that you can try in your browser. The [Twiddler](https://twiddler.tekgear.com/) is a commercial one-handed chorded keyboard with built-in mouse. I’ve never _actually_ used one, but the Twiddler v1 might have been the first chording keyboard I ever heard of, so it has a special place in my heart for getting me interested in the world of alternative input devices.