Halmak – AI designed keyboard layout
github.com
github.com
But when I was reading up about the colemak, they claimed that was done on purpose -- that in fact, at high speeds, coordinating alternating keystrokes between hands is very difficult, and that it's actually a lot more efficient to have "rolling" patterns where a single hand can type a sequence of characters in a smooth motion. I can definitely say that the "inter-hand coordination" is the source of an awful lot of my typing errors.
It's for this reason I believe the traditionally wide spacebar should be split up into a number of different keys. Having two sets of Shift, Control, Alt, and the Windows key on either side of the keyboard seems less sensible than one set that can be accessed by either thumb.
I for example use a custom layout that splits the Spacebar into both Space and Shift. Now I don't have to shift my hands to the left/right to capitalize a letter, make an exclamation/question mark, make a double quote, etc.
And why do people use pieces of perfectly written text. The Backspace key is like one of my top 5 most used keys and it's always under the pinky.
It’s still all dependent on how good the authors physiological model is. If their model of hand movements is incorrect, then any generated results will be incorrect, too. For instance: the author talks about developing a model of travel distance for various keys. Fine, but (a) it’s based on their own hands, so it might not be a good fit for others, and (b) the distances are all from resting hand position, which means that as your fingerS move over the course of typing a word, those distances should adjust as well. Does the author account for this? I don’t think so, but it’s not clear.
https://en.wikipedia.org/wiki/PLUM_keyboard
I actually feel the other way; the cost of learning a seemingly arbitrary layout is probably less than the cost of using an inefficient layout, in the longrun.
It might be—but that’s no consolation if you’re less likely to get to the long run. Or if you get to the long run, find out their models were off, and realize it was extra time wasted.
And how about software that watches you type and suggests a more keyboard-heavy workflow as your speed increases?
Far away.
This also means that Windows/Linux and especially Emacs users are sorely screwed by the prevalence of the Ctrl key in shortcuts. Somewhat ironically, MS' Natural 4000 keyboard with its gigantic Alt keys is eye-openingly great on MacOS where those keys serve as often-used Cmd, right under the thumbs, the strongest digits. And, when Emacs was created, Control was also under the thumbs.
Also, as a bilingual, I'm pining for a design consideration that punctuation is on the same keys between the layouts in different languages.
Keen to know what sort of typing samples he used - was it mostly people writing prose, operating shells, other?
Imagine you'd need a fairly large and varied sample set to land good generality?
"I used a series of articles from various online media. I don't have copyrights to provide them with this project, so you will have to use your own source."
and
"Create the text folder and fill it in with *.txt files which you'd like to use as the test data source. "
It would be interesting to see what a layout full of source code/terminal history would generate - although you'd have to take into consideration all variety of autocomplete functionality (tab key usage) in text editors to get accurate input data, not to mention window switching shortcuts etc.
Yes, would be very keen to see what sort of result you'd get if (say) you captured keystrokes directly from a collection of engineers (or indeed a broad variety of individuals)
Might be trickier though, as I anticipate you'd need to somehow semantically separate the keystrokes into logical units. Maybe just a time-between-strokes threshold would be enough?
I have no idea whether Carpalx's or Halmak's keyboard layout (efficiency|effort) evaluator is more accurate (indicative of real (efficiency|effort)), but the huge disparity between the two is troubling.
(Obviously, Carpalx and Halmak use different optimisation methods — Monte Carlo simulated annealing versus an "evolution algorithm based AI" — and these could well give different results, even with the same scoring method, due to getting stuck in different local maxima etc., but the issue is that the scoring methods themselves give different rankings of fixed keyboard layouts.)
Edit: quickly reading through all of the halmak author's blog posts, it seems that they're aware of the Carpalx project. They describe their (current?) effort model here[6]. It seems heavily data-based, but it's still difficult to determine whether it's "better" than Carpalx's.
[0] https://gist.github.com/tdegrunt/80e63f464c9a1c336e0f1d4e6aa...
[1] https://github.com/MadRabbit/halmak/issues/4#issuecomment-44...
[2] I haven't done the analysis myself and can't be sure that it was done correctly
[3] http://mkweb.bcgsc.ca/carpalx/?interpreting_optimization
[4] http://mkweb.bcgsc.ca/carpalx/?keyboard_layouts
Interesting that it put the comma at the same place as the bepo [1] ! It obviously recognized that vowels should be placed on the home row on a single hand, it has it on the right hand when dvorak/bepo have them on the left hand.
It'd be interesting to train it on code as well and see where it positions the special chars. I personally really like the bepo's choice of putting them on alt_gr+[right_hand_key] as it allows me to reduce finger stretches to hit them, that's what was causing me pain on QWERTY, especially with js, and convinced me to make the move to bepo. I fins lisp is BY FAR the healthiest language when it comes to fingers, though you do need shortcuts to manipulate lisp code sanely.
Is the keyboard-gentrics [2] src code the only way of knowing how this was designed ? I've skimmed the github page and blog it links but cannot find anything. It looks like its a genetic algorithm ?
[1] https://bepo.fr [2] https://github.com/MadRabbit/keyboard-genetics
https://github.com/adereth/dactyl-keyboard
But I wonder if the space of possibilities contains some wacky hidden gems that we are just missing.
These "wacky hidden gems" are not at all that wacky or hidden. Any future "AI" keyboard won't use typical letters or symbols, it would capture strokes that convey thoughts or meaning. We already have this to some degree with mobile keyboard software that turns gestures into commands and swipes into words and predictive sentences.
I think one moves around so much in code that anythng else is micro optimization.
YMMV.
I was thinking about using layers like you suggest for movements, but outside of vim where you need to shift+move to select text, isn't that going to be quite awkward?
On the other hand, how do you access the macros? I can't see any special keys on it, except for maybe the `progm` key on the top right, but it is out of reach.
On the Pok3r, I have remapped the CapsLock key to be the layer modifier key, so while it is pressed, the special macro layer is active. I barely need the Caps key, so it is a minor annoyance to have lost it, but the gains are way bigger. That way, I'm using IJKL as my arrow keys. I have remapped Space to mean Shift, thus while it is pressed, I can select anything while moving around with the arrows. Also, I remapped F to Ctrl for jumping words (I'm on Windows, F stands for Fast :P). U -> start of line, P -> end of line.
It's sure not as powerful as vim, but the fact that this is available everywhere, even while I'm typing a comment on HN, totally outweighs it for me.
So nah, it's not awkward for me. Or does it come across like that?
Edit: typo
I can even send my script to anybody interested to try it out. But you will really need a proper keyboard for this to work where each key has its own dedicated wire.
http://www.keyboard-layout-editor.com/#/gists/75c4808455c07a...
(This is my main driver now)
And... What is this website? I can't make any sense of it. Seems to be some powerful configuration tool to do.. What exactly? :D
This site is part of a few that are used to made your own keyboard.
E.g. I find that for me, reaching for the Shift key majorly contributes to slowdowns and fatigue.
Some issues and questions:
- Many notebook keyboards will not accommodate a number pad.
- What is the plan for !@#$%^&*()_+ and "~"?
- Where will the backspace key be located?
Here's an example:
https://www.amazon.com/dp/B01MS3PWS0
If you're interested in different keyboard sizes:
https://www.keyboardco.com/blog/index.php/2017/08/full-size-...
I personally use 75%, my opinion is for serious coding it's inefficient to go smaller than that.
It really seems to me like the only thing you lose with a 60% is the arrow keys, and you can always go to a 65% layout if you need them. I use a 40% Planck for a while, and honestly didn't really like it much (got some strain in my pinky after a while).
I'd say it depends. With a "normal" layout probably true, however I found I am at least as quick with programming on my ~45% keyboard.
Mainly it's because I moved all the special characters and arrow keys down to the letters on a secondary layer. That allows me to enter anything without moving or stretching my hands, which I find very pleasant and at least feels very efficient. The layers are switched with thumb keys, so they're always accessible quickly.
For me it was the best approach(especially compared to Dvorak, Colemak etc.) because it's still fully compatible with Vim and other programs without needing to relearn and reconfigure everything. Although I must admit when I'm typing on a qwerty keyboard I always need a few minutes to get used to it again.
Even bought a tenkeyless gaming keyboard. I was having the opposite thought that we should deprecate the number pad and just leave it as an additional hardware add-on for accountants
You can switch the shift-behavior with some software, e.g. Karabiner for Mac.
https://www.kaufmann.no/roland/dvorak/
Available on Linux with
setxkbmap us -variant dvpI used it enough to touch type at a decent speed, but I didn't keep using it for long, as at that point I was better off avoiding keyboards entirely.
Numbers only on the numeric keypad would be awfully inconvenient for programming.