2021-07-20, v0.0.2: Previously on Keykapp, Part I
There have been three Keykapp prototypes to date:
1. Keykapp React
- I first validated the biggest assumption: can it really be productive and
easy to get good at typing in a predictive
- The goal had always been to control the whole computer with Keykapp, starting
by being able to emulate arbitrary keyboard input, but at the time I was
mostly programming websites with Gatsby and React, and I followed the good
advice of “start with the tools you know”. So Keykapp React was a PWA where
you could type into an HTML text input.
- At the time I did take a cursory look at keyboard intercepting and emulating
libraries and decided that, although feasible, there was a lot of uncertainty
to how long it would take me given how much lower level and outside my
comfort zone those things were. It was a good decision, as getting concrete
evidence that the core ideas worked gave me the validation I needed to stay
motivated and committed.
- I learned two things:
- Huffman trees are awesome and typing only with the homerow (or however many
buttons/switches you want, on whatever kind of device) is amazing once you
get the hang of it. I tried it on
mobile and it was sweet. Not
being tethered to typing on a surface because of the mismatch between
number of fingers and number of buttons is going to be so liberating. Can’t
wait to use a full desktop environment on VR while typing on my thighs with
a pair of electromyographic bracelets and lying on a hammock.
- There is a tension between predictiveness and predictability.
Predictive input helps you avoid repeating yourself. Predictable input
helps you get better at repeating yourself. You need both. If the
keyboard is 100% predictive and the meaning of each key changes with every
keystroke you don’t get a chance to build muscle memory (“motor learning”
in the literature), which is necessary because prediction isn’t perfect and
sometimes you know exactly what you want to do. Predictability allows you
to leverage the amazing internal programmer that your brain is, compiling
motion instructions into progressively faster and more effortless habits.
Built-in JIT compilation ftw. Fortunately this tension is easy to fix the
same way as designers of smartphone virtual keyboards did: stack a
predictive keyboard (the word suggestion row of buttons) on top of a
static, predictable keyboard (the qwerty grid).
- Although Keykapp React was mostly about validating text entry, I also
experimented with command prediction and it was very satisfying. So the next
thing I wanted to do was validate the idea of having a full, keyboard-mapped,
interactive, concatenative programming language to work with. That was
2. Keykapp Min
- I haven’t designed a programming language from scratch yet, and while I knew
that it would be
inevitable at some point,
I wanted to have a basic “am I crazy to think this?” reality check as soon as
- So I cheated and used Fabio Cevasco’s awesome
min-lang. Min-lang is a homoiconic, “functional,
concatenative programming language with a minimalist syntax” written in Nim.
It’s elegant, modern, and has great documentation.
- The Keykapp Min prototype was just a userspace mod to the min-lang
terminal-based REPL that added stack visualization, ngram prediction, and
direct, dynamic keyboard mapping of “words” (functions) to homerow buttons.
- It doesn’t
look like much to
the naked eye, but a source I highly respect told me that “it’s pretty damn
perfect” and that was worth a lot. Using it feels great, like you’re
data directly instead of planning in advance what the computer should do once
it gets to it. I call it “JIT computing”:
Don’t ask to do, just do.
- Conclusion: there’s a ton that needs to be done in terms of language
usability and security when thinking about Keykapp’s interactive and
shareable context, but the basic idea does make sense, concatenatives does
seem to be an ideal base paradigm, and this is totally worth pursuing.
2021-07-19, v0.0.1: Hello, worlds!
Going to start a very low-key microblog / tumblelog here on this page. No RSS
or anything, just some notes and links, stacked on a single file.