_____                   _                  _____            _____       _ 
  |     |___ _____ ___ _ _| |_ ___ ___ ___   |  _  |___ ___   | __  |___ _| |
  |   --| . |     | . | | |  _| -_|  _|_ -|  |     |  _| -_|  | __ -| .'| . |
  |_____|___|_|_|_|  _|___|_| |___|_| |___|  |__|__|_| |___|  |_____|__,|___|
  a newsletter by |_| j. b. crawford               home archive subscribe rss

>>> 2020-06-05 big keyboards

I'm rather fond of keyboards.

Not really in the way that normal people [who are rather fond of keyboards] are into them. I've never been that interested in this or that mechanical type of mechanical switch, although I do think the hall effect switches are neat. Moreover, I find the '40%' or '65%' keyboards, or as I call them the half-assed keyboards, to be entirely unappealing even though they're very popular in the keyboard enthusiast community.

In my mind, if you're into keyboards, you should be wanting a keyboard with more things, not less.

For example, my "daily driver" at my desk for some time now has been a Unicomp EnduraPro. This is a fully-qualified Model M - I periodically hear people refer to Unicomp as being "knockoff" or "clone" Model M keyboards and I feel myself compelled to defend their honor by explaining that Unicomp is the direct descendant of Lexmark's keyboard manufacturing arm which was the actual manufacturer of IBM-branded Model M keyboards since 1990. Unicomp was founded by former Lexmark employees and purchased both the intellectual and physical property (tooling, molds, etc) associated with the Model M from Lexmark. In fact, spanning the whole history of the design since the mid-'80s, you will find genuine Model M keyboards bearing at least four brands: IBM, Lexmark which manufactured them on contract for IBM, Maxi-Switch which also manufactured them on contract to IBM although only briefly, and now Unicomp.

There are also quite clearly other brands of keyboard which were white-labeled from Lexmark, often bearing the brands of industrial automation or other companies that sold "turn-key" solutions and wanted a durable keyboard.

Anyway, this is not to talk about the history of the Model M and its many manufacturers. What I really wanted to say is that the reason I chose my EnduraPro is because it has a widely-known but rarely-seen feature of the Model M, a trackstick mouse between the BGH keys as is usually seen on certain laptops. I am a die-hard advocate of trackstick mice and was of course excited at the opportunity to have one on my desktop setup in addition to on my laptop---I would never buy a laptop without a trackstick, and now I'm not sure that I would want a desktop keyboard without one.

To be fair, the EnduraPro's trackstick mouse is not very good. I suspect it's based on a much older design than you see in ThinkPads and EliteBooks today, and it feels noticeably less precise. The mouse buttons on the EnduraPro are also, in my opinion, far too stiff, especially compared to the ThinkPad mouse buttons which are designed for a long travel at low actuation force (a night and day difference between modern trackpads like on the MacBook pro which have a large actuation force with no little or no travel, which I find extremely unpleasant).

But I digress again. The point is that I use a keyboard with a built-in mouse, because if I'm going to pay a three digit price for a high-end keyboard it's going to be one with more things, not less, and even with my dissatisfaction with the EnduraPro's mouse I use it constantly for the large number of tasks I use the mouse for that don't require enough precision that I reach for my CST trackball (also a modern production of a vintage design). In fact, it strikes me as odd that so many keyboard enthusiasts justify 40/60% keyboards as reducing the reach distance to the mouse, when it seems far more obvious to me to use the time-tested technology of the trackstick to put the mouse in the keyboard.

There exist modern trackstick module designs which are intended to be added to keyboards, and I intend to try some of these out to see if they are better than the EnduraPro. It's quite frustrating to me how unpopular tracksticks are in desktop use, though, to the extent that perhaps the easiest to find desktop trackstick keyboard is the rather eccentric desktop version of the ThinkPad keyboard.

I'm still wandering off topic.

In addition to wanting a keyboard with a mouse, it only makes sense to me to want a keyboard with more keys. I have been jokingly referring to this ideal as the "140%" keyboard, and via some careful watching of eBay I recently got my first 140% keyboard: a PrehKeyTec MCI3100. PrehKeyTec (or just Preh) is a German company which manufactures keyboards mostly for the POS (or "cashdesk" as they seem more prone to say in Europe) market. Many of Preh's keyboards are grid layouts with fewer than 101 keys intended to have a numpad, department buttons, and the other sorts of things you expect on a POS device. The MCI3100, though, is a full keyboard with a bunch of extra keys added on.

My MCI3100, which I purchased used and in bad aesthetic condition (although like most keyboards it cleaned up nicely), was clearly originally intended for some type of telephone operator application, I would guess for the PBX operator and telephone receptionist at a large business or hotel. In addition to the full QWERTY keyboard (I suspect mostly for typing notes and searching the directory) and 10-key (arranged like a telephone keypad rather than a calculator keypad as is conventional for keyboards), it has keys with exciting labels like TAKE MESSAGE, SUPERVISED TRANSFER, PARK CALL, UNHOLD, DIRECTORY, and even a set labeled START PROCESS, STOP PROCESS, LIST PROCESSES, and others that I think were less for call handling and more for administration of the actual PBX. On top of the numpad are ten SPEED DIAL keys. Perhaps most amusing to me, the space bar is labeled ANSWER.

In total, the MCI3100 as I have it configured has 140 keys instead of the traditional 101-104 (plus, as a German-made keyboard, it includes an AltGr). Most of the keys are factory-printed, but while the QWERTY keys are double-shot the rest of the keys are not and many of the legends have mostly worn away---I suspect this keyboard was in use for many years. In particular the CANCEL button (next to the 10-key "dial pad") is entirely worn away. Other keys have a clear plastic cap intended to have a printed paper legend placed under.

Many PrehKeyTec keyboards (which cost in the range of $300-$500 new) are purchased by OEMs who add custom keycaps and then sell them as part of a solution. This seems to be how mine was sold, based on the factory-printed custom legends. PrehKeyTec also offers most of their models with a wide range of options; while I would never use it, just from the perspective of completion I'm a little disappointed that mine does not have the magnetic card reader and manager key switch options installed, although it has space for them and the controller board has unused connectors which make me think I could easily add them if I can find the parts. I will set an eBay alert for these.

I have been entertaining myself by programming banks of keys to do things like switch focus directly to each of my terminal windows, open new terminal windows with different shells, switch to various window layouts, etc. Combined with my GUI git client of choice (Fork) I have set up keys to stage, commit, and push changes, which bring Fork to the foreground and then trigger the desired action regardless of what window is foreground at the time. My only real complaint about this Preh is that Preh uses dome switches which are decidedly mushy compared to the Model M, so I'm also keeping an eye out for Cherry keyboards going for cheap---not even many keyboard enthusiasts seem to know that Cherry, manufacturer of the switches, has their historically main business manufacturing customizable keyboards for POS use, as a direct competitor to Preh. Of course they use their own switches for these.

Well, that's the part which is my bragging about my eccentric new keyboard. The larger thing I wanted to talk about, besides sharing my absolutely correct opinions on the correct size for a keyboard to be (as large as possible), is software and the way that keyboards interface with computers. This is a very rough area for PCs which you run into headfirst when using an unusual keyboard like my MCI3100. And when I say "PCs" I mean Personal Computer in the sense of 1990, not in the sense of "as opposed to the Macintosh," because while MacOS takes a somewhat different approach to handling the complexities of keyboards it is one that falls flat on its face just as readily as the behavior of Windows and Linux.

This needs to start with just a bit of background.

Historically, there was considerable inconsistency in keyboards. Terminals intended for different types of computers could have widely varying keyboard designs, almost always with much fewer keys than we are used to today. Multiple parallel efforts occurred to standardize keyboard design in the 1980s, but it was most likely IBM's adoption of the 101-key layout for the PS/2[1] and later IBM PC models that established it as a universal standard[2].

In fact, prior to the introduction of the 101-key layout, dedicated cursor keys and especially a dedicated numpad were fairly uncommon features. Although this is speculation on my part, I believe that IBM was unusually fond of the 10-key component on keyboards because it reflected the keyboard on IBM numeric keypunches and so may have made these terminal keyboards an easier sell to businesses which had data entry staff used to punching cards.

The 101-key layout became an international standard as part of ISO 9995 in 1985. This was prior to the IBM PC and I suspect prior to it clearly being an in-practice standard, but is mostly interesting because the layout was also standardized at various points by ANSI (154-1988) and JIS (X 6002-1980). But, standards being what they are, all three standards are slightly different from each other. Keyboard nerds over the age of 40 are likely to be very aware of the difference between the ISO and ANSI standards, which varied primarily in the shape of the enter key and placement of the pipe key. For reasons I'm not entirely aware of the ANSI standard has just recently become rare and nearly all keyboards manufactured in the 2010s are of the ISO design, which anecdotally most people seem to prefer anyway, even if the smaller enter key is less satisfying to strike with excessive force. The JIS standard, being a Japanese standard, is mostly seen in Japan where it features more keys to fit the larger hiragana character set[3].

The ISO/ANSI keyboard standard goes quite deep. In addition to specifying the positions and legends of keys, it is de facto encoded by the PS/2 standard which is closely coupled to the keys. Meaning that, when computers scan the keyboard, they expect a 101-key style keyboard containing the set of keys which exist on such keyboards. The 101-key, or today 104-key layout, is not just a common base for keyboards but also effectively a limit on the keys present on keyboards, via its close coupling to the PS/2 interface and 8042 keyboard controller. There simply aren't defined scan codes for many additional keys.

One exception is the set of keyboard multimedia keys. There isn't really a formal set of scancodes defined for media keys, but there is a set of scan codes which are recognized by out-of-the-box Windows without additional software installed, and so these make up a de facto standard which has also been copied to e.g. X11. For a variety of reasons, both technical and historic, the media keys are usually treated significantly differently from "normal" keyboard keys by the keyboard stack and user applications, and standardization remains somewhat lax, as many Linux users have discovered when trying to make their play/pause button work.

The PS/2 keyboard interface has largely been replaced by USB. For such applications, USB standards define a protocol called HID (for Human Interface Device). The HID standard is actually remarkably flexible, but USB keyboards are significantly hampered by the fact that HID defines a "core" specification for keyboards which is essentially identical to PS/2 capabilities (but actually worse) and that most keyboard vendors are afraid to exceed. This is the reason for, for example, the widespread perception that USB keyboards are not capable of "n-key rollover" or NKRO. There is absolutely nothing about USB HID proper that prevents NKRO, but there is a key rollover limitation in the HID "core" or "BIOS" specification, and most keyboard manufacturers will not exceed that standard out of concerns for compatibility. Making things further strange, several keyboard manufacturers that have implemented NKRO in USB keyboards have decided to do it in eccentric ways such as presenting as multiple core keyboard devices, instead of "properly" using the HID standard. As much as this irritates me, if they didn't someone would inevitably find that their keyboard doesn't work properly with their 1998 BIOS or NVR appliance or something else with an incomplete HID implementation and get upset. Actually HID includes a mechanism to avoid this problem but hey, devices with partial HID stacks probably also fail to signal their capabilities properly.

So, the point of all of this is that keyboards basically can't have extra keys. The interface standards actually lack support for nonstandard keys, and naturally so does software. So what about my keyboard with 140 keys? Well, all of the extra keys are effectively macro keys. It is possible for software with dedicated support for this specific keyboard to use HID to directly read the state of the additional keys, but because it's rare for software to have dedicated support for a specific rare keyboard, Preh's intent is generally that you assign macros and keyboard combinations to the additional keys. Some manufacturers of customizable keyboards also support presenting as a game controller and assigning keys to joystick buttons, although Preh doesn't seem to on first glance.

This presents a problem, of course. Preh keyboards are very expensive and intended for business applications where there is a desire for the system to be highly reliable---no one wants to have to run some special macro utility like e.g. Logitech has for their "gaming keyboards" with additional keys. So, in the Preh the macros are implemented internally to the keyboard. Software is used to edit key mappings and the resulting keymap and macro programs are actually written to the keyboard's internal storage so that they remain persistent without a dedicated utility and across computers.

The Kinesis Advantage, another favorite eccentric keyboard of mine, also implements macros and remappings internally. I would go so far as to say that this is a mandatory feature for any keyboard over $200 to seem reasonable to me. There are gaming keyboards with internal programming but for the most part it seems to be an overlooked feature in the keyboard enthusiast community of today. I had once joked with a friend and fellow Advantage enthusiast that it's a required feature for the Advantage because it's such an expensive keyboard ($250 or so) that people own just one that they carry around with them. I'm not really kidding about that.

Another interesting thing, in addition to macro programming, that I've just alluded to is internal remapping. Both Preh keyboards and the Advantage allow you to remap keys internally. Preh intends this mostly for setting up completely custom layouts as on non-QWERTY POS keyboards, but the Advantage heavily advertises the feature for Dvorak users. Through a couple of button presses you can cause the Advantage to internally remap the keyboard to translate Dvorak keypresses to QWERTY scan codes, a huge convenience for that tiny subset of computer users that type on Dvorak and carry their keyboards around with them.

But, this hints at one more frustrating problem with keyboards, which is that the keyboard stack in a computer has no real awareness of the keyboard end of keyboard layouts. That is, keyboards have no way of signaling to the computer which layout there are labeled for. The result is that the OS needs to "discover" the keyboard layout somehow. Windows (and generally Linux) solves this problem by simply assuming that any keyboard connected matches the default layout configured for the system. MacOS on the other hand likes to perform a user-interactive discovery process in which, when a new keyboard is connected, it prompts the user to press certain keys to determine keyboard layout, and then saves the layout discovered for that particularly vendor/product ID pair.

It now seems like a pretty obvious idea that keyboards should be able to signal to the operating system what layout they are printed with, to allow for automatic setup. Or, perhaps, a radically different approach in which scan codes reported to the operating system are not based on the physical position of the key but rather the legend it's printed with, which would obsolete the concept of keyboard layouts entirely but still have associated complexities and drawbacks.

Either way, the discussion is somewhat moot, as in the 1980s the 101-key layout was selected as standard and now imposes not really a base but actually a limit on keyboards. There have been keys added since then---the Windows and menu keys to make the 104-key layout---but these were keys which already had precedent in previous keyboard designs and so had a much easier time "slipping in." It's unlikely that, going forward, we will see any real move to increase the flexibility of the keyboard interface.

[1] Note, though, that the IBM PC, PCJr, and PC AT all predate the PS/2 and were initially released with earlier keyboard layouts, typically smaller. The PCJr's first-gen keyboard is particularly notorious for its poor design, usability, and reliability, and IBM quickly revised the PCJr to a design more similar to the proper IBM PC). The PS/2, despite being far less widely known today than the PC and PC AT, set a number of industry standards including VGA graphics and, of course, the keyboard connector that we now call PS/2, which frustratingly leads to some people calling the "big DIN" connector used on the IBM PC a "PS/1" connector. The IBM PS/1 was actually a successor to the PCJr and used a PS/2 style keyboard connector.

[2] This is not to say that the 101-key (and later 102 and 104-key) layout has a monopoly on influencing the computers we use today. While we now use Linux and other Unix derivatives with 101-key type keyboards, most significant utilities were designed on terminals with older and smaller keyboard layouts. This is the underlying reason for, for example, vim using hjkl keys for navigation. While frequently retconned as being "to maintain home row position" (even though hjkl is not actually the home keys), this convention is actually a direct result of the keyboard layout of the ADM-3A terminal on which vi was developed. The ADM-3A has no arrow keys, they are instead a labeled secondary function of the hjkl keys. Additionally, the ADM-3A's Escape key is positioned where Tab is on a 101-key layout. It seems highly likely that, had vi been developed on a 101-key keyboard, it would have used the arrow keys for navigation and Tab to exit insert mode. Vim is not the only text editor hampered by the keyboards of old, emacs still insists on a "meta" modifier which was present on a variety of keyboards in the extended Lisp machine family but not on any keyboard today. See also, the Super key, also from the Lisp Machine family.

[3] For a variety of reasons, mostly relating to post-WWII economics, Japan was the first country to internationalize most computer technology. The result is a very interesting history of Japan-specific standards, often confused by details like one of Japan's most influential computer companies being named ASCII, after a standard with American right in the name that failed to accommodate Japanese users.