@ianthehenry I _love_ the name "arpeggio keyboard". I've explained the idea vs chorded as "melodic vs harmonic" but arpeggio is more accurate _and_ sounds way cooler. Btw would love to geek out on the "arpeggio optimization" problem w Huffman trees and predictive forthing if you're up for it
What I'm trying to do with @Keykapp is to make AOT computing and JIT computing interchangeable, with users doing JIT and computers themselves doing most of the AOT via machine learning.
Don't ask to do, just do.
Start digging into how to have @keykapp autosuggest keyboard/command macros in an optimum way based on history, end up in a bioinformatics rabbit hole way above your pay grade 🐇🕳 #StringAttractors
I guess I'll just go with naive (length * frequency) weighted ngrams for now 😅
@_wilfredh@hillelogram If you squint a bit you can see the seed of these ideas implemented in this little shell experiment I made using @h3rald's min language:
https://t.co/MldHHUM2iP
A "kapp" here is a forth "word," which can be plain letters/words too. Smartphone poc look:
https://t.co/vCKtMWWY0V
@serapath@keykapp You got it :) It's like navigating menus in a desktop app. Leaf nodes are actions, non-leaf nodes open more options. Depth and grouping are not random though, it's a predictive huffman tree to minimize keystrokes. Confusing at first, yes, will improve. Appreciate the feedback :)
@agentofuser@keykapp I just tried keykapp and it was very confusing but after some moments i got it.
k = "undo" last selected field
d,f,j = select random groups of commands or execute a single command if the selected group only contains a single command.
...wtf
@keykapp Editor modes like in vim are a kind of depth-1 tree layout.
Emacs' hydras go further by allowing temporary, deeper (though static) trees.
Keykapp takes that to its logical extreme.
The best keyboard layout is a recursive keyboard layout.
Can you imagine if instead of navigating desktop app menus like File, Edit, View &c as a tree, you had to access the available commands by clicking the unchanging File &c labels using modifier keys?
OMG it works!!
- GitHub as a data backend for local-first PWAs? Yep ✅
- Null tree so that merges never have conflict? Ja ja ✅
- Commit messages with serialized Automerge CRDT changes? You betcha! 🔥
Up next: e2ee🔒💪
Context: https://t.co/DKqy044UPg
https://t.co/F9FwAQnaGG
It's not the user|programmer distinction that has to be torn down.
It's the using|programming distinction. The separate roles follow from the separate interfaces.
Every click, every keystroke is a line of code. A statement for the computer to run.
A little narrated demo where I talk about using Keykapp on small screens:
https://t.co/8D5eMYQeSQ
At end you can get a tiny glimpse of the power of making predictive virtual keyboards for more than text. A concatenative PL you don't even know you're using! #usingIsProgramming
Dogfooding Keykapp unearths some unexpected priorities. Implement sexp structure editing for org-mode style note-taking before I can even move the cursor around? Definitely! Hemingway mode is great, and I need a tree for planning asap.
When I say "until now" it's because the n-gram-huffman version of Keykapp went live today :)) Even with such a simple machine learning technique and nothing but my local log to train it on, the improvement was remarkable. I had a lot of fun typing this thread :D
If you squint just right, a huffman tree keyboard updating weights from history on every keypress is in fact "predictive." Compression is at the heart of learning.
It is naive though. You get the global minimum number of keystrokes to reach an arbitrary key from the root.
A good way to think about the n-gram predictiveness of Keykapp is as a spectrum between modeless & modeful editing. Each keystroke defines a brand new mode optimized to the commands most likely to follow it. As in modeless, every command is reachable, but the cost are adaptive.