Saturday, February 20, 2010

Plover lives!

Well, a lot has happened since August. Starting in November, I've been taking weekly lessons with a Python tutor, and we've been working together developing (to be honest, he's pretty much done the developing, with me looking on trying to understand what's going on, adding occasional steno-specific interjections) our first working version of Plover. And, for a generous definition of "working", we've gotten relatively far!

If you've got a steno machine that uses the Gemini PR protocol (e.g., Gemini2, Gemini Piper, Evolution, Revolution, or Revolution Grand), you can use the two files above to display steno translations in a terminal (I think it should be platform independent since it's just a .py file, though I haven't tested it in anything but Windows XP). Stenoworking is the main file, and ploverbd is a modified version of my personal steno dictionary.

What it does:

* Translates words and phrases of up to 10 strokes in length.
* Displays raw steno when it can't find a translation.
* Updates the 10-stroke buffer so that new longer translations supersede older shorter ones.

What it doesn't do:

* Output to anything other than the terminal.
* Incorporate suffixes, prefixes, or punctuation.
* Delete strokes using the asterisk.
* Treat the double S- as a single S- or any combination of asterisk keys as one asterisk.
* Look very good if you concentrate on anything but the last line of text on the screen.
* Work with anything other than a Gemini PR protocol machine.
* Work with any dictionary other than the one I've turned into ploverbd, which involved stripping out and altering a lot of important entries.

I'm going to keep working on these issues week by week, while learning more about unit testing, version control, text parsing, and all that good stuff. If anyone out there is actually interested in the code and has the ability to play around with it, I'd love to hear from you! Go to my website,, and drop me an email. Plover is entirely free and open source, currently being developed by J. Lifton and M. Knight.

More to come!

1 comment:

Moss said...

A handful of unasked-for style notes, to take with a grain of salt:
* Anywhere where you've got a block of code preceded by a comment, it could be even better to have a separate method matching the name of that comment. Example: self.validateStenoStroke(binary)
* Other comments are just useless noise ("Retain the original binary version of the stroke."), though they were probably pedagogically useful
* Awesome that you have some unit tests! Next time you need to add something, try writing a test for it first and then making that test pass. Really.
* for i in range(len(self.stenoKeys)): k = self.stenoKeys[i] looks to me like it could just be for i in self.stenoKeys
* Have you got any sort of version control on this? A Github account is easy to set up, and it would give you the ability to easily change your code around without worrying about losing old stuff. Also to merge in other people's changes more easily.