Friday, August 28, 2009

Fun with typing

-Another nerdy post

Yesterday all the groups under my group's director (my boss's boss) met for an annual meeting to discuss statistics, politics, arbitrary administrative tasks, and a small bit of what I quaintly refer to as "real work". Like all such meetings, it started off with a "safety tip". This is where people with no medical, structural engineering, or injury prevention training give you unsolicited advice on how to behave both at work and at home, as though they were some sort of authority.

The tip this time was about hand injury prevention, and, although I find the whole "safety tip" phenomenon lame at best (dangerous at worst), this one was pretty sensible. Use the right tool - a crescent wrench is a bad hammer, for example. Most injuries occur to your off hand, e.g., you hammer the hand holding the nail. And lastly, the reflection-inducing question: How much of your job could you do if you lost a finger? A thumb? A hand? As in, we type for money, we dial phones, we take notes, we draw on whiteboards, we sometimes wear shirts with buttons. Hands and fingers are pretty useful for all these tasks. This got me reflecting on some fun keyboard related things I've done over they years.


As members of CompuServe's tech support group, my ex-wife and I (we were engaged at the time) did a lot of case note entries. This is where you summarize what a caller's problem was, what you did to try to fix it, and where the problem stands now. In some cases, a caller has only one phone line, and can't connect to the service while talking to you, and after the call ends, you must take the next call in queue rather than call back later to check on them. Although this is a rule I broke frequently, most tech support people gave the customer the boot happily, and hoped that the customer would get another CSR when they called back saying the problem still wasn't fixed. "Here, try this init string..." flush! "Sometimes that goes away if you reboot..." flush! That sort of thing.

The notes you left in the case were typically pretty brief, as you had to get back on the phone as quick as possible, and you were judged regularly on idle time. Most tech support reps would actually have the customer stay on the phone while they typed case notes, to minimize idle time. An additional problem was that you were supposed to keep your average call length down to some absurdly low number of minutes - 3, I think it was, although that sounds impossible to me now.

So you typed a lot of brief case notes in a hurry, and hurried off to the next call. Notes always referred to a customer not by their name, which would have taken extra time to make sure you spelled it right, but simply as "member". Member can't download large files, added &H2 to init str (USR). Member had corrupt fc (meaning "file cabinet", the place where your email was kept), rebuilt idx (meaning index files - you delete our homegrown database's index, and the software rebuilds it from scratch, fixing most database problems). Member had RPI modem - &Q6.

Teresa, my then-fiancee, after years of online chatting on old-style MUDs, had developed a habit of typing rapidly, unconcerned with correcting any errors, as nobody she talked to really cared as long as they could discern meaning. A side effect of this is there were some words she would always misspell the same way. "Member", the most common word you see in case notes, was always "mebmer." Tuck that away for a minute.

CompuServe gave you free access to some pretty useful programs. One of my favorites was Aspell, which ran sort of as a background task, and could perform spellchecks on any window with text-entry fields. You could spell check text in Notepad, emails and forum posts in WinCIM, anything that had a normal Windows text field. It also had hotkeys to bring up 9 specific text files with its own little editor. Our feedback (email) and CSLive (chat room) tech support teams used this to keep a set of standard responses to common questions. "How do I reset my password" - answer 3 on page 1. "My new modem makes horrible squeaking noises and sometimes won't connect. What can I do" - give me more info about your modem is response 1 on page 2. Etc.

A third feature Aspell had was shortcut words. You could define a word that, after you typed it and hit space, would be replaced with something else. When I worked in CSLive answering customer questions in a chatroom, I created a large library of commonly used phrases that would be typed if I used a shortcut starting with the letter x. A few of them follow:

xru = "are you"
xruu = "are you using"
xur = "you are"
xuru = "you are using"
xwap = "without any problems"
xw = "You're welcome."

So if the guy from above, let's call him John, with the squeaky modem is talking to me in CSLive, in the course of the conversation I might type to him "John, xruu the new modem? Is the old one able to connect xwap ?" And he would see the text with the English replacements of the shortcuts. It was both a fun sidebar to appease my ADD side, and probably helped save me from carpal tunnel.

Teresa had Aspell on her work machine, and one day, irked at several case notes of hers I'd come across in recent weeks talking about mebmers and mebmers' problems, I decided to create a shortcut from "mebmer" to "member" in Aspell for her, and not say anything about it. It worked in WinCIM, it worked in Notepad. Unfortunately, it did not work as expected in ProComm, the program we used to connect to the customer case tracking system (or maybe it was just Windows Terminal, I haven't connected to it since Stacey was born, and my memory is a little fuzzy).

Aspell shortcut keys worked by using the Windows "sendkeys" API function. Whatever program you were typing in, it would get the program name from and the current field you were in, and say "sendkeys (backspace x 6, member)". In most programs, that worked famously. Procomm, however, objected vehemently. It consistently accepted only 4 out of the 6 backspaces (caching problem? baud rate?), and did not delete the characters it backspaced over. So when Teresa quickly typed "mebmer" into a case note, out popped:


...which as you would expect, caused much confusion. "I know I didn't type that many letters," I heard her say once while I was passing by. After stopping to investigate and having a guffaw, I confessed. She seemed to think it was funny then, but in hindsight I think that was when she stopped trusting me.

Keyboard obfuscator

I once read a news story about a mafia boss who got busted around 2000 after the feds installed a keylogger on his system surreptitiously, and logged the password to his PGP key, used the key to decode his encrypted emails with whatever evil-doings were one it. This was around the same time I had written the "Encrypted Journal", which is part of the atengine package (the "Auterytech Engine" that I ran my old domain with). The journal was all clientside JavaScript to encrypt a text box based on a user-supplied password, and post only the encrypted file to a web server. Later, you could download the entry to a textbox and decrypt it. Again, all clientside, nothing saved. Simple. Rockin'.

So thinking that feds might use a keylogger to record the password, or the entire log entry for that matter, I thought how I might get around that. The answer came to me a little later, and I set about coding it. A few hours later, the Keyboard Obfuscator was born. It displayed a 3x3 grid of letters that corresponded to the keys TYU, GHJ, and BNM on your keyboard. Pressing H, for instance, would pop onto the screen whatever was in the center. Since having only 9 letters to choose from is pretty limiting, I gave the task of rotating what letters were displayed to another 3x3 grid of keyboard characters, QWE, ASD, and ZXC. One key displayed all the vowels and a few other letters, one showed common letters like RSTML.. I looked them up then, but can't remember them now. Other keys showed numbers, others punctuation. One key shifted from upper to lower case.

And the kicker: the letters were randomized after each action. Type a letter, the letters in the grid switch around. That's great for preventing the feds from predicting what you're typing, but not so good for your typing speed. After hours of practice with that, I could only get up to a few words per minute. Frustrated at my drop in speed, and having no real need for hiding stuff that thoroughly, I abandoned the project rather than develop it more, and have since lost the original source code for it. Damnit. I hate losing code I want to brag on years later. Oh well.

Typing tests

The last bit of trivia has not much of a story behind it. I've been typing for years, and I'm pretty fast now. No training, just doing. According to my WPM scores on "", I could be hired as a secretary or data entry operator. As befits my gender, I'm great at first, then a little slower and sloppier over time.

No comments:

Post a Comment