Simcockify: A Typo Generator Plugin

Figure 1: Sample communications from Adam Simcock

Earthling’s CEO Adam Simcock keeps a lot of balls in the air but multitasking is hard and I think sometimes a lack of thread synchronization causes problems. My working theory is that when Adam’s communicating with instant messaging, there are two threads running in his head: one emits glyphs to form words, the other manages whitespace. Being unsynchronized, these frequently produce interesting and indecipherable output.

What we need here is a plugin

After mulling it over for a while, I set about creating a plugin to easily insert Adam-style typos into copy. It started as a fairly naive character swapper in JSFiddle, but when I got to the 80th revision, it seemed like it had bigger ambitions than I’d originally planned. I made the decision to over-engineer this supererogatory tool: different types of typos, a basis in physical plausibility, and of course, zany configuration options.

The basis of the typo generator are its configuration options. We approximate Adam’s working state via a number of optional parameters such as how much coffee Adam’s had, how many Five Hour Energies he’s consumed, and how many employees are currently blocked. When you apply the plugin to part of the DOM, these inputs all feed into the two fundamental factors for typo generation: frequency and velocity.

Frequency + Velocity

Frequency is simply an indicator of how prevalent typos are, expressed as typos per word. Velocity, however, represents the gusto with which Adam is typing and thus generating typos. While superficially, velocity doesn’t change things in an obvious way (we still have the same number of typos), it’s a determinant for whether or not a specific typo can be made, based on a rough physical plausibility. Internally, the plugin contains a keyboard map (currently QWERTY, though you could easily include a Dvorak variant, or anything else you can cook up).

We use this physical layout in concert with velocity to determine whether Adam could plausibly typo a particular key. With low velocity, if you’re trying to type an “a”, you may type an “s”, but with high velocity, you might reach as far as “p”. In terms of appearances and lucidity of the output text, this is totally unnecessary — absurd really — but I’m of the opinion that a good gag should be thoroughly overwrought.

But, does it work in reverse?

While the plugin has received a lot of internal praise; eliminating the Adam Factor in our day-to-day search for jumbled communications, there is an inevitable question after the giggles subside: can it do it in reverse — can it undo typos?

The answer, as ever, is: it depends. The plugin was built with a seedable deterministic PRNG, so for a given piece of copy, PRNG seed, and configuration options (frequency and velocity factors) we can reproduce the same typo output. Some of our typos are non-destructive, meaning nothing is lost. Transposition typos are of that sort and are theoretically reversible. Other typos involve gaining or losing characters and are thus destructive, so we may not know what was originally there. Those are irreversible. So, for our generated typos, with an appropriate configuration we could work backwards and reconstruct the source text.

But really, what folks are asking is: can we make Adam’s communiques clearer. The same logic would apply there. If we can limit Adam’s real world corpus to non-destructive typos, and we know all of the configuration options, we could plausibly reverse things. But that’s a tall order. I suspect that’s actually an NP-hard problem, and while I think the functionality would be neat, I’m not going to tackle it. I am however amenable to others sending GitHub pull requests that provide the functionality. So if you think you’ve got the chops to write Desimcockify, please get in touch.

Wanna Simcockify some copy? Try it here!