Toward a more useful keyboard
github.com
github.com
I totally agree. One big issue is that many work on laptops and cannot / won't carry an ergo keyboard around.
The second best I found, besides having an ergo keyboard, is to use an actual japanese keyboard: laptops with japanese keyboard can easily be found / shipped. You can have a Mac laptop with a japanese keyboard, for example.
And thanks to the narrow spacebar on japanese keyboards and the additional modifiers, you get more modifiers and they're easier to reach.
So I use a japanese keyboard even though I'm not japanese.
Same!
It is pretty easy to build your own now as there are hot swap PCBs that don’t require soldering.
The worst part of having a small orthro board is staring at the hundred nice looking keycaps that have no home on your board after buying a set and putting on your base 48 keys.
I hear you about the keycaps. My solution to this is to just bulk order plain PBT keycaps so it doesn't feel as bad when you have spares, but it certainly doesn't look as good. It also kind sucks that not every profile works well with non-staggered layouts.
Still working on wrist pain though. I think I can attribute it to my slightly too high desk (which is unfortunately not adjustable).
That's why I like Mac keyboards. Cmd is right under your thumb. I did the same for my Linux machine, so win/alt/ctrl instead of ctrl/win/alt. It's a game changer and doesn't require any hardware modification.
1. A flat seat, without back
2. No wrist support.
As a side note, the piano is infamous for causing injuries. A lot of work has gone into mitigating them, but it's not an ideal platform by any means.
What we really need to do for PC keyboards is split the keyboard into two halves and get rid of the typewriter column stagger.
Not really. It's the obsession with home row that creates wrist-twisting.
> What we really need to do for PC keyboards is split the keyboard into two halves and get rid of the typewriter column stagger.
I'm self-taught and instead use the edges of the keyboard to orient myself, and use my shoulders and elbows to move my forearm inwards from a very different resting positing. Not much wrist movement.
(for anyone curious, my usual resting keys are around shift/a/w/d/space and alt/l/p/[/] on a US qwerty keyboard, but it's not strict)
Sidenote, but I’ll also do one-hand 5-finger typing on a cellphone screen, because it’s faster than thumbs even with the input lag. Or I did, until I got hooked on word-swiping.
I know I’m biased from years of practice doing it this way, but I still kinda believe that most people don’t because they didn’t take a few minutes out of their day for a week or two to really focus on their hands as they input. Instead, they’ll focus on shifting around their hardware and software, even though rewriting your wetware really doesn’t take that long and is far more portable. I even suspect that the 60-key enthusiasts are actually just tricking themselves into this kind of focus as a kind of oblique strategy.
Two tricks that made all the difference: Float my hands, move from the shoulder.
After trying all sorts of keyboards and mice (and still loving them), I can now type comfortably on any keyboard in any weird position. Hell I do most of my writing on an iPad + Magic Keyboard combo sitting in my lap. Can type for hours like this with zero pain or discomfort.
The hard part was learning how to move my mouse from the shoulder instead of using finger or wrist movements. Keyboard was relatively easy.
On every instrument I played, there are fundamentals that are required to get beyond the beginner level. Without proper form more advanced techniques can be harder to learn, and even worse can lead to injury. Louis Armstrong couldn't play trumpet at the end of his career because his lips constantly hurt. I would imagine there are pianists with wrist or finger injuries due to years of playing with improper form.
So on a computer keyboard, the things you want to optimize for are speed, accuracy and ergonomics. It's not like a piano. Expression is not a factor. Nobody cares if you type staccato or legato. Home row typing is the most common way to optimize for this, but not the only way.
I don't use the proper home row, but I did learn to type that way originally courtesy of Mavis Beacon.
I have access to/can input nearly any shortcut, punctuation, modifier, reg key, numpad, number bar, arrow keys, etc all on one hand, and the system is very easy to learn. I don't care about shortcuts anymore as they are all nearly the same difficulty to input, and I never need to move my hand to do it. This takes only a few hours to learn at most.
Hitting ctrl+t on a keyboard once is more wrist/finger movement than I normally see all day using this.
How long did it take you to learn this layout? Is there a sequential method to learning it, similar to using tarmak for learning colemak? A difficulty I sometimes face is using a regular qwerty layout—do you experience difficulty using a normal keyboard?
This system for the shortcuts is only a few hours. A lot of it is phonetic, and the numbers are in binary. Numpad is binary + *, and function keys are binary + r.
So if you know binary and can hold one of three extra keys, you now have three ways to do numbers and the only difference is one key.
Shift+num works for punctuation too, so you don't really need to know all the punctuation shortcuts. You just need to remember what they are on a regular keyboard and then its just sh+binary.
The other things you'd need to know are how letters work (the ones not shown), and the shortcut combinations, but there are not that many of those, and they stack on top of each other visually.
You'd just need a 10-key keyboard, or toggle plover on and off to use this dictionary.
If you mean the rest of plover/steno, its a drastically higher learning curve and is basically a hobby for me. Just being able to fingerspell (type single letters) is learning another keyboard layout. But this combines several of my interests, so its not bad for me.
Learning wise, I am a huge Supermemo fan, so I just use that to memorize/review the stuff that needs it beyond learning the theory (which I also review in Supermemo). Most people would use Anki or Mochi.
Though because some keyboards have key rollover issues with using both Shifts, [Capslock][<modekey>] is also allowed as an alternative activation shortcut.
Caps Lock can be a useful feature. e.g. developers may want to type CONSTANTS_LIKE_THIS; and it's useful to be able to have a "shifted mode" which avoids the need for either alternating shift keys, or holding shift key with a pinky finger.
I saw a feature "Caps Word", which automatically returns to the unshifted state as soon as a non-letter key (like space) was pressed. That seems a good idea.
That said, yeah, Caps Lock isn't so useful that it's worth putting where it is on typical keyboards.
Though, with using fancy keyboard-remapping software, then "dashes as underscores" can be done automatically. e.g. QMK does it with: https://docs.qmk.fm/#/feature_caps_word
https://www.gnu.org/software/emacs/manual/html_node/emacs/Ca...
(Though I use emacs with vim keybindings — evil mode — so I do the same as you)
Two-shift caps lock is a feature whereby tapping both shift keys, simultaneously, toggles caps lock.
You don't need the caps lock key, and its place on the home row is absurd.
I do think "replace caps lock with ctrl" isn't the best, though. -- Especially if you've got a mind for staying on home row, then I'd instead suggest putting the modifiers Shift/Ctrl/Gui/Alt as tap-hold keys underneath the home row keys.
Being a Windows user I have an AHK script I run on every PC I work on regularly. It remaps Caps Lock into a special modifier key but does so in a conditionally timed way which keeps Caps Lock working as it normally does as an on/off toggle - but only when pressed and released by itself. If I use Caps Lock like a modifier key by holding it down and hitting another key simultaneously then Caps Lock works like a modifier - which I use to remap other home row keys like arrows etc.
This works transparently while giving me another very useful modifier key right on the home row without giving anything up. It's especially useful on laptops where I don't have extra modifier keys like my custom desktop keyboards but I now use it everywhere. Here's the relevant chunk of AHK script:
CapsLock::
KeyWait, CapsLock ; wait for Capslock to be released
KeyWait, CapsLock, D T0.2 ; and pressed again within 0.2 seconds
if ErrorLevel
return
else
if (A_PriorKey = "CapsLock")
SetCapsLockState, % GetKeyState("CapsLock","T") ? "Off" : "On"
return
*CapsLock::
return
#If, GetKeyState("CapsLock", "P") ;Your CapsLock hotkeys go below
i::Send {Up}
j::Send {Left}
k::Send {Down}
l::Send {Right}
m::Send {End}
u::Send {Home}
y::Send {PgUp}
n::Send {PgDn}
h::Send {BS}
`;::Send {Delete}
-::Send {–} ; Alt+Minus = En dash
=::Send {—} ; Shift+Alt+Minus = Em dash
a::^a
Space::Enter
q::PrintScreen
r::F5
s::Browser_Back
d::Browser_Forward
Capslock & LButton::WindowMouseDragMove()
Capslock & RButton::WindowMouseDragResize()Caps Lock is a necessary feature.
I need my ÉÈÀÇ and I never could get a compose key working in all inputs, Caps Lock is the only reasonable alternative.
It's a strict superset of QWERTY, and it enables entering e.g. è and È with altgr+e and shift+altgr+e respectively.
The Danish keyboard layout has ¨, ^, ´ and ` on dead keys — those are used in foreign names and a few loanwords — but Æ, Ø, Å are real keys.
Having Å, Ø and Æ as dead keys would make as much sense as having V, K and J as dead keys in English.
Æ, Ø, Å aren't dead keys, they're available via AltGr + Z, L, and W respectively. However, Italian and French accented letters (as well as Swedish/German Ä/Ö) are available via either AltGr or dead keys - and I find myself almost always using dead keys, perhaps because they are more "logical" so I learned them faster.
And of course, typing any kind of quote is a dead key in every language (quote followed by spacebar).
By now, after so many years, dead keys are well in muscle memory so they feel barely any slower to type than regular two-key combos (like uppercase letters).
BUT HOW CAN I ARGUE ON THE INTERNET WITHOUT IT????????
My wrist barely moves for that action, and I haven't had RSI yet after 20 years. I do play the guitar though so maybe that gives me some extra dexterity?
I chose the opposite of customization: I decided to train really hard on my standard country-specific 104/105-key keyboard layout. After 20 years I can blindly type every symbol, reach every key, grab the mouse and find my way back, thanks to those 2 notches on the letters 'F' and 'J' to position your index fingers. I bring such a wireless keyboard with me wherever I go - even on vacation - as I cannot work with notebook layouts or Mac keyboards. I'm confident that this keyboard type will be available to buy for a long time.
Not having to take my eyes off the screen prevents a lot of mistakes.
[1,pdf]: https://image-ppubs.uspto.gov/dirsearch-public/print/downloa...
It's a required extra even when another laptop keyboard exists
> what makes it the “worst”?
Its awful unergonomic design, both on the hardware size and on the input side (especially for symbols the op mentions)
So if you already must carry a special box, why not use a much better one that fixes both of these flaws?
When travelling I still like to bring the old trusty Microsoft Bluetooth Mobile Keyboard 6000 [1] (phew :), even though the laptop is a Mac.
[1] https://www.amazon.com/Microsoft-Bluetooth-Mobile-Keyboard-6...
The rest of you out there, you're trying to shave 1400ms off your score by being able to use the homerow as if they were arrow keys? Fuck me.
Truly a horrible underdeveloped world we live in, that we have to hack together our configs and code to this degree and having to watch as no wheel in existence can ever be as good as the one I just now built in five minutes.
(terribly sorry for the bitter sarcasm, it's a pain point of mine)
And if you do this 1000 times a day (but probably more) you'll remove so much annoyance and it just feels better, more comfortable and at least for me it's easier to enter and stay in the flow state if annoyances like these are kept to the minimum.
JIS keyboard in QWERTY mode with left thumb key (英数) mapped to cmd and right thumb key (かな) as a modal key that allows me to access a custom layer with:
- esdf as arrow keys
- w/r as backspace/delete
- a/g as home/end
I also map left cmd (英数) + esdf and w/r to behave like holding ctrl on windows. i.e. move and delete by word.
Used to have another mode with phone-like numpad mapping for number entry but never used it enough.
I then have Moom for window managment with shortcut set to ctrl + space and then the following hot keys:
- 2/3 set up for 50:50 left right split
- 1/4 set up for 30:70 split
- w/e/r for 30:40:30 split
- q/a for top/bottom left quarter
- s/d/f for even 1/3 split
- t/g for 40:60 top/bottom for vertical monitors
This is good enough for 99% of my cases.
manytricks.com/moom/
https://www.amazon.com/KINESIS-Gaming-Freestyle-Mechanical-K...
Or the non-rgb version: https://www.amazon.com/Freestyle-Ergonomic-Mechanical-Progra... (but for $30 more, get the RGB one!)
Pitifully inexpensive compared to the value and amount of time that you probably spend at the keyboard.
With two profiles (eg: home / work / laptop), and a dedicated "macro-zone" that you can control the color of the backlights, it's literally a game-changer when not used for gaming purposes.
I've got certain frequently used commands / passwords / passphrases programmed in those buttons (color coded: green for gpg passphrase, blue for ssh, red for login, etc), and it also supports a "layer" mode, so you could use that like a particular "shift key" for your app if you're like a video editor or streamer or something... red for pause, green for play, yellow for cut/paste, etc.
All the buttons are 10000% remappable, it's basically like being able to 'hot-edit' your keyboard in real-time. Map/macro "A" to "Z" or "A" to "AAA" or "Z" to "F12" or whatever. Basically each button on your keyboard can kindof do whatever you want or need to at a time, and you can switch through the different "profiles" in order to change how the keyboard behaves depending on the app/computer/task that you're interacting with.
If you're considering the RGB-version, please consider this a "glowing" review. ;-)
Isn't that rather unwise? Your keyboard has become your key to everything.
A password manager and/or USB security key and/or smartphone key vault are much better places to store secrets.
But yes, I agree with you in principle. In practice, locks are delaying devices and I'm much more worried about MITM or software/malware/supply-chain attacks than physical access attacks to my home office. "Passwords in the keyboard" require a physical presence to access rather than attacking the password-store or sniffing them from environment variables, temp-files, etc. Can't hack the keyboard unless I'm the one pushing they keys.
After using this setup for a few years, it's been pretty convenient and not totally off the rails w.r.t. security best practices and recommendations: https://www.schneier.com/blog/archives/2005/06/write_down_yo...
99% of my passwords are in vaults of some sort and are subsequently backstopped by 2FA/Authenticators. In the case of heightened paranoia (or if anyone other than my immediate family had any kind of access to my office), you could even do something like `1234-$MAGIC_KEYSTROKE-5678`, or `amazon-$MAGIC-2023-01-01` making it a bit more like length-increaser in the "bring-something, know-something, be-something" triangle of authentication.
Buy one and try it! Buy one of these too, and report back if you think it can help your security posture: https://www.securedrive.com/product/secureusb-kp-encrypted-f... ...I'd like to get one and try and figure out how to temp-mount my core password-store, then share/auth that between my various home computers.
Foe me, having a backspace in place of the CapsLocks is absolutely irreplaceable
But to answer your question, yep, long fingers: I can keep my forefinger on the F key while hitting Backspace with my pinky, and it's not that much of a stretch.
Caps+f = Backspace
Caps+d = DeleteThat's a very inconvenient combo for such frequent an action. Why not some right thumb key instead?
And yes, it's more comfortable than remapping caps-lock, although I don't use a standard keybord layout and using the weak pinky for such a common action is far from optimal (I use the 34 key Ferris).
2. not at the same time, simultaneous combo is the problem
If you’re prepared to go to these lengths, you’re probably better off just learning the Emacs keybindings.
That said, with the work I do (mostly Java/Kotlin/C# backend and TypeScript frontend) and the way I do it (IDE), if typing speed ever becomes a bottleneck, something has gone horribly wrong somewhere.
And since I have went through a number of times earlier in my life where I thought I had to learn vim, I think it can be good to try the other way around and ask everyone who doesn't love their vim setup but feel they have to:
Why are you doing all this typing? If you update a variable name or a method signature and the rest of the code doesn't automatically update itself as far as possible, why is this? Why is your (hopefully) modern computer allowed to slack of while you have to think and work hard?
Intelligent autocomplete, template insertions and automatic refactoring has been available for a long time now in mainstream languages.
If you aren't using it, chances are you are wired really different than me or you are missing out.
Edit: but if you love your vim setup, just continue. I love watching people who are good with vim. It is performance art.
But I decided it isn't for me, and I personally think for a number of others too, if they had spent a fraction of the time they've spent tweaking their setups on actually learning a real IDE that could have made a bigger difference.
; is shift + , (1 step right of m)
: is shift + . (2 steps right of m)
- is where US layout has /
_ is where US layout has ?
shift + 6 = &
shift + 7 = /
shift + 8 = (
shift + 9 = )
right alt + 7 = {
right alt + 8 = [
right alt + 9 = ]
right alt + 0 = }
right alt + - = \
I invite anyone to try and press right alt + 7 and right alt + 9 on their keyboard. To make things more awkward, it must be the right alt key, it doesn't work with the left. This torture is every time you make a curly brace with this layout.(on our keyboards, left shift+alt is an alternative for the right "Alt Gr" key)
The main benefit is, how much better default keyboard shortcuts in many Apps become.
Tab switching with CMD+{} and back/forward CMD+[] can be comfortably executed. There are no more inaccessible shortcuts such as Shift+CMD+? or changing playback speed on Youtube.
Specials are somewhat annoying to type with `alt+u aou` and `alt + s`, but nothing I couldn't get used to.
I've done it all my life. Maybe my pain tolerance is way higher?
Edit: I don't know what's wrong with pressing several keys at once to do something. It is like complaining that piano has no individual keys for all the possible chords. What's the alternative? Pressing a single key? What would you be doing with the rest of your fingers anyway?
On top of that, alt+7 is spectacularly awkward, as you need to curl one finger really aggressively and extend another to reach both keys.
Many of these keys are indeed accessible with a single keypress in US QWERTY. That, or a simple shift-combination. They're also much closer to the letter keys across the board.
The German and Swedish keyboards mentioned above are rather bad for programming (in the German case, even for typing ß/ss): they have AltGr combinations at the top row, the numbers 7, 8, 9, 0 for instance to get the brackets and braces {, [, ], }. In the Spanish keyboard they are right of P and Ñ (; in US-English) and those positions are much easier to reach while pressing AltGr.
In addition, in the Spanish keyboard the plain Latin letters are in the standard qwerty positions.
After having had to deal with some terrible keyboard layouts over the years I’ve come to appreciate the Spanish one very much. It’s clear that a lot of thought went into designing it.
` is a bit more ergonomic at shift + \, release, then spacebar. To get ``` you press shift + \ 6 times because ` luckily doesn't modify `.
I'm not necessarily saying it's better but it makes you think about how input design shapes the use of software.
- The biggest problem I have with the IDE workflow is I was never able to get it to scale across projects effectively. E.g., lets say I want to make a find and replace for an API change across ten different projects, then run linters and compilation on all of them, and only be notified if there's an error, and otherwise make identical commits to all of the projects?
- Another issue, is how easy is it for me to take the problem I'm working on, extract it to a complete different context, and then more quickly iterate on finding a solution? E.g., it's common for me to take what I'm working on, in say JavaScript, that's part of a larger application, and then copy/paste the entire problem into a single file with a `#!/usr/bin/env node` shebang, and then do a 1. edit/save 2. run `./my_script.js` workflow until I find the solution. With IDE's, I've found they often don't like working with single files that aren't part of a particular project.
- When tracking down extremely difficult to find bugs, e.g., lets say you have several log files, thousands of lines long, and you want to use CLI tools to do custom analysis looking for patterns (e.g., is there a mismatch in order certain events firing in log files where the bug occurs vs. doesn't?). IDEs don't help much with this.
There's a pattern with the above examples that's the main problem I had with IDEs is that they aren't flexible enough to scale to atypical workflows/problems. All of the above examples also leverage the command line, which is clearly a pattern. The CLI is just a useful open-ended tool to help programmatically solve any problem you might be facing. IDEs are great if you're adding a feature to an application, but they're less great if you're looking to adapt your tools to a specialized workflow that's a better fit for the problem at hand.
Besides the above examples, I've also encountered code bases too large for JetBrains IDEs (rare, but they're out there), and generally find how slow they are to open windows to be disruptive to achieving flow state (I don't think this is normal, I think I personally experience latency more strongly than most other computer users, but just providing a complete picture). I also don't really find autocomplete very useful, which again is atypical, I use it in CLI-based editors like Vim/Emacs because it's trivial to add it with LSP support today, but would be fine working without it. Again it's about what you value, what I value is being able to adapt my tools to developing a specialized workflow to solve the problem at hand, over the features that IDEs offer.
I've never understood such reasoning. Typing speed is a bottleneck. It cannot be parallelized with other tasks, and therefore, is on the critical path. Improving typing speed will shorten task duration.
What is perhaps meant instead is that typing is not worth improving, because gains wouldn't affect overall task duration significantly. But then, why focus on percentage improvement over task duration? I use a keyboard all day. Any improvement affects my day-to-day quality of life for the rest of my life. Keypresses saved, finger, wrist, arm movements eliminated increases my comfort. Removing frictions in work increases flow.
That said, I don’t understand how typing speed doesn’t matter - I agree that’s mostly the case for code, but everything in between, from documentation to Slack chats, I think faster than I type and I’m always open to performance improvements. It’s also great if you can context switch with as little friction as possible so that you can hit the ground running each time.
Overall it’s just about actions per second, not actual typing. I agree that IDEs and advanced editors help cut out a lot of stuff (I’ve never understood multiple cursors, for example, because as you say, that’s usually just a structured refactoring). But there are always opportunities to cut down cognitive load or speed up regular tasks. Whether hardware or software, we’re in tech because we believe better tools solve problems better.
The issue isn't really speed, it's moving your hands away from the core of the keyboard. Touch typing means you don't have to think about getting text into your machine (or modifying it) -- it just happens.
Having to move your hand away to somewhere else (arrow keys or, shudder a mouse/trackpad) causes a microinterruption in your flow.
> Why are you doing all this typing? If you update a variable name or a method signature and the rest of the code doesn't automatically update itself as far as possible, why is this?
I use refactoring tools a ton! Rename Symbol works great. I’ll press the IDE combo for Refactor this (C-t) then the vim combo to, for example, add a suffix to the name that’s now highlighted by the IDE (wi SuffixNameHere<CR>)
It’s not like it’s hard to do that by clicking the end of the word with the cursor, or moving to it with the arrow keys. But it’s so much more comfy to me, once you have a few movements in your head you can precisely communicate “go THERE” to your editor which is worth it to me.
Bonus: @ macros! It’s so useful, even in IDEs, to be able to record (qx) and run (@x) a macro from your keyboard, while typing, if you notice that you’re repeating the same task. An IDE will help with renaming, removing, or re-signaturing… but not with the most annoying work, like numbering things or repeating blocks.
This year I've practiced touch typing for the first time in 10 years, and turns out it's such a chore to use touch-typing while programming! My right hand has to constantly reposition to use brackets, parenthesis, and all the other non-alphanumeric glyphs (!, -,=, *, &), and I constantly make typos due faulty muscle memory. And I'm not even starting on how hard it is on my right pinky.
It almost feels like I'd need another touch marker for positioning my right hand to the right and one row up, to hit those brackets consistently.
Without touch typing it's even worse, as I often wrongly position my hand after hitting special characters.
Looks like modern programming languages were not created with humans writing on keyboards in mind.
Also, anecdote from series of software developer interviews: all candidates made typos while live coding. And I don't think stress is the only reason :)
I also put a JIS keyboard in my laptop and use one of the extra keys near space combined with the Linux program keyd to get effectively the same thing. Not quite as good but better than nothing.
Lately, when I was researching keyboard layouts, I stumbled upon Extend concept for Colemak [1]. I decided to try it out and, for me, it is a game changer.
It is somewhat problematic to work through muscle memory, but I really think it’s worth it, especially since I skip between various editors a lot and adjusting each is a pain and this seems to solve it nicely. I know that for Extend there are multiple implementations for Windows, Linux and Mac.
Also, what's with the f/j keyboard bumps - just put braille on every key. We'd all end up learning it without even trying to.
As a programmer, I never really understood why the people who designed keyboards wouldn't have done so in a way that allowed for more common technical uses - why didn't they throw in a row of common mathematical symbols?
That could also have impacted language design:
i = Σ(a, b, c);Such keyboards were made in the 70/80s:
http://xahlee.info/kbd/lisp_keyboards.html
The current standard keyboards come from a different evolutionary branch with a much more limited view of the possible uses for a computer.
- Topre silent switches
- Compact layout _with_ arrow keys
- There is a 3rd party (Hasu) replacement controller available to make it fully programmable
I've found custom layouts at the software level are practical only if you use a single computer. My FC660C with the Hasu controller has my custom keymaps defined in the keyboard itself - usable on any computer I plug into!
Caps + v,s,d,f,w,e,r,2,3,4,v -> 0,1,2,3,4,5,6,7,8,9
Caps + jkl; arrows
Caps + c -> shift
caps + c -> ctrl
caps + u,i,o,p -> pgup,home,end,pgdn
Really increases productivity while coding and doing text manipulation, then gnome hotkeys for navigating desktops/windows/os.