Home | Log | Guides | Software | Hardware | Discussions | Shop | Contact Me | Donate


Penboard: Resurrecting Graffiti

If you had an inclination towards PDAs in the late 90's or early 2000's, you most likely hold both memories and opinions about the (now mostly forgotten) input system found on Palm OS devices, namely Graffiti, which was most likely inspired by the Unistrokes system, developed at Xerox PARC in 1993, by David Goldberg.

A Handspring Visor showing the Graffiti overview, and an Android tablet running Penboard

A Handspring Visor PalmOS device showing the Graffiti overview, and an Android-based e-ink tablet using Penboard

Drawing Glyphs

If you don't have any connection to this era, or simply did not care much for pocketable computers back then, the Graffiti system can probably best be described as a way of entering text by drawing simplified glyphs on a touch-sensitive surface or display using a pen.

Most likely because it required you to actually learn something new (the specific alphabet of glyphs) some hated the very idea with a passion. Others, myself included, found it to be an elegant, precise and convenient way to interact with computers.

A More Elegant Tool, From a Different Time

Even though Graffiti had it's flaws, it's definitely my all time favorite way to interact with mobile and handheld compute devices. Some of the reasons I prefer it over anything else include:

But hang on, wait a second! If you've actually used Graffiti, you'll know something is wrong here. Some of those features I talk about above would have been amazing to have, but were not actually part of Graffiti.

Ok, I'll admit that I got a bit carried away, and started describing my own ideal version of such a system, instead of what actually was back then.

The good thing, though, is that instead of just talking about it, I've actually made it real.

Creating Penboard

As a proof of the pudding, this entire post is written with Penboard, an Android input method I created to combine the best things from Palm's Graffiti with the features I always felt were missing.

While I wrote it primarily for my own use on pen-based e-ink tablets and devices, it will work on any Android device as long as it provides some way to draw glyphs on the input surface.

A closeup of the Penboard input area, showing the glyph for the letter N

I wrote a custom recognition engine for Penboard, based on a slightly modified version of the $1 Recognizer, tuned for rotational variance of the drawn glyphs, and with the ability to use multiple variants of the same symbol for increased accuracy.

There's no "AI", machine learning of indeterministic fuzzy buzzwords here. Just a high-quality, fast and deterministic recognition engine based on sound and efficient math and geometry.

The engine is quite fast too, with each stroke usually taking from 5 to 20 milliseconds to process, even with a large map of 75+ strokes, on my relatively underpowered e-ink tablet. So you can write as fast as you want. I've also created a comprehensive character map that includes mappings for almost all keys on a full keyboard, including modifier keys.

So far it's working really well, and - on a mobile device - I think it's a huge improvement to use over any type of virtual keyboard or traditional handwriting recognition.

Try It Out

If you like this sort of thing, you're welcome to try out an extremely early version. Don't expect any frills, or even helpful guides currently. The settings are currently non-functional, and you can't actually modify the character maps without editing the JSON map inside the app. The recognizer and input system works nicely, but that's about it.

Here's the pre-release Penboark APK file if you want to try it out.

The internal map display is also not functional yet, but if you're used to Graffiti, you will already know how to write almost everything, as my map closely mimicks the original Graffiti map. I modified some glyphs to suit my own taste though, so you probably want to know the following:

I made this primarily for my own use, and since I can always just recompile the app with map modifications, it's working more than sufficiently for myself already. But if there's interest in it, I could probably have an updated version uploaded here soonish that can actually display the loaded maps, and allows you to modify them easily.

Let me know if you found this useful or have any comments. If you want to see this concept developed into an open source and freely available program, please consider supporting my work.

This website is running on a 100% solar powered server


Unless otherwise noted, everything here is put into the world under a CC BY-NC-SA 4.0 license.
Feel free to share and remix, just remember the attribution.