Thursday, April 29, 2010

Bug fixes

For any of you that are using DigitalCAT-formatted dictionaries (e.g. the one that comes with Stenomaster), I've fixed a major bug and I've also consolidated the files, so you don't need to use dccattest.py or dcatwinder.py anymore. Just download stenowinder.py and tktest.py at the GitHub, then open stenowinder.py in any text editor. The first few lines of the file look like this:

from ploverbd import exportDic
import unittest
import sys
# choose either 'dCAT' or 'Eclipse'
dictType = 'dCAT'

If it already says dCAT and you have a DigitalCAT-formatted dictionary, you're set. If it says Eclipse, change it to dCAT. Unless you have an Eclipse-formatted dictionary, in which case change it from dCAT to Eclipse. You get the idea. The default distributed dictionary, ploverbd.py, is in Eclipse format. Also, it's apparently grown too big to be directly accessed by Github's html parser and has to be downloaded by right click/save as (wait a while for it to muster its strength) or by getting the whole package by clicking the "download source" button.

New and exciting features, like functional file output and maybe even punctuation formatting, will with luck be added on Monday, (and sometime after that, I hope to add TX and Stentura protocol options into the program; I got the protocol specs today, but I can't make any sense of them, and they're second in priority to figuring out this file output thing.) If you guys find any more bugs, though, drop me a line and I'll try to patch them up as they come in.

Monday, April 26, 2010

Finally, high-rez pictures!

A friend came to my coworking space today and brought a camera, so I finally have good pictures of my kepadified Sidewinder X4. Here it is alongside my $2,395 Revolution Grand:



And here's a closeup of the keypads, making a more or less steno keyboard shape out of the crooked qwerty keys:



Many thanks to Sumana for the pictures.

In other news, I had my Python lesson today, and we got a stopgap file output system working, but I don't want to upload it to the github yet, because while the asterisk is still deleting strokes properly in the GUI display, it's not deleting them in the file, which makes for confusing reading (unless you're one of those people who are 100% accurate at all times, in which case just say the word and I'll upload it with all speed.) But if all goes as planned we'll fix the problem next week and I'll be able to give you guys a way to save the text you're stenoing with your awesome $60 keyboards. And maybe I'll try to do a little hacking on my own until then, so stay tuned.

Saturday, April 24, 2010

Abigail's brilliant stenohack

In case you don't read the Plover blog comments as obsessively as I do, I want to post a few excerpts. I had assumed that the task of interesting people in open source steno software would be almost as difficult as writing it, but that hasn't been the case at all. The blog's already got a handful of dedicated commenters, from Sonja and Stan, the early adopters, to Abigail, Tony, Paul S., and Alice, the enthusiastic newcomers.

From Tony: Ok, let me just say how excited I am about Plover. Mirabai, I've followed, and greatly benefited from, your postings on the Depoman forum.

I decided to learn steno about six months ago because I write a lot and I hate the speed of typing. It became an obsession. I ordered an antique steno machine online, started learning first Phoenix, now intensively studying StenEd. But I have nothing electronic.

I am buying a Sidewinder this very day. You will be hearing more from me.


I've also gotten a fair amount of private email from people who came across the blog and are looking forward to trying out the program once it becomes a bit more functional. To that end, I'm devoting today and at least part of tomorrow to making Plover more than just a pretty demo. Then on Monday I'm resuming my Python lessons after a two-week hiatus (my tutor has been traveling, but now he's back in town). For now, though, let me turn the post over to the fabulous Abigail and her recent SideWinder hack. First, her introductory comment:

I just wanted to say that I've downloaded Plover and I am just amazed. It is like you have read my mind. For a bit of background, I was a steno student years ago, also at NYCI, loved it but quit because of life circumstances, moved overseas, moved back. Intended to return to court reporting - got very sick. Anyway, I say all this because I'm a little better but not good enough to go back to school but have been learning Stenomaster theory and re-teaching myself in the hopes of using steno to do transcription from home but wasn't sure what I going to do about the heavy outlay of funds just to make that happen. This could be my miracle solution. Thank you so much for using your brilliance and vision to come up with this program - please keep going! $60 for a keyboard? Heck, I could buy 10 of them and still be ahead, even with Ebay prices for dirty old equipment and ancient software! I tried Plover with my HP bundled keyboard and a few words came out so this could be just fabulous! Thank you!!!!!

Next, her amazing brainstorm:



I don't know if it will work long term but see the attached picture. I had a really, really old manual stenograph so I've wiggled the keys off of it and attached them to the keyboard with Scotch double-sided foam squares. They stick without damaging either sets of keys. Looks neat, huh? The touch of my doctored keyboard is not bad, pretty sturdy, of course not as good as the real thing, but close. The keys don't rock but I don't know if after extended use with flying fingers if they might flick off. I guess then you can just replace the sticky pad. I just experimented a little so far and I find it much easier that the keys are raised and more like a steno formation.

So if foam or leather keypads don't make the SideWinder feel enough like a steno machine, think about buying an old junky manual writer and gutting it for parts. Thanks, Abigail!

Saturday, April 17, 2010

Writing and Coding With Steno

What is Steno Good For?

Part One: How to Speak With Your Fingers
Part Two: Writing and Coding
Part Three: The Ergonomic Argument
Part Four: Mobile and Wearable Computing
Part Five: Raw Speed
Part Six: CART, Court, and Captioning

Part 2 in my "What is Steno Good For?" series

In Part 1, I talked about how steno could be used by people who speak
with voice synthesizers, making it easy to communicate in English at
true conversational speeds using only their fingers.

In this part I want to talk about the benefit of steno in prose composition. I'm currently writing this on a qwerty keyboard on a subway train (the A down to Hoyt-Schirmerhorn in Brooklyn, if you're interested) because there isn't room to use my steno machine and my laptop's keyboard isn't antighosting, so I can't use Plover (which also needs a file output option before it will be anything more than a demo. Planning to get on that very soon.) I'm typing out every letter of every word I want to write, plus spaces between each word. Though I make my living writing in steno, I still use qwerty for a lot of things, because my $4,000 proprietary steno software isn't much good as a keyboard replacement and because my steno machine isn't always immediately to hand. I'm pretty used to it; before I learned steno, I worked for several years as a qwerty transcriptionist, and I can type at around 110 words per minute.

Even so, whenever I switch to qwerty, it feels so clumsy and plodding. It's not all that great for my wrists either, but I'll write more about that later, in the section on using steno to avoid repetitive stress injuries. Mainly it's just such an inefficient input mechanism. I already know the word I want to write when I type the first letter, but instead of moving on to the next word, I have to spend however many more fractions of a second typing out the rest of the letters, then pressing space, then starting on the second word. It artificially slows down my thinking and forces a staccato note into whatever I'm writing.

Steno, by contrast, is quick, clean, and smooth. Many famous writers composed their works in pen shorthand, including Samuel Pepys, Astrid Lindgren (author of the Pippi Longstocking books), and Charles Dickens, whose work as a London court reporter probably had a lot to do with his matchless ear for dialogue. The trouble with pen shorthand, though, is that it needs to be transcribed manually, which few modern writers have the patience for. Machine steno, on the other hand, can produce digital text three times more efficiently than the best qwerty typist can type; but I don't know of any authors who use a steno machine in their work. This is almost certainly due to the high cost of the equipment and software, coupled with a general lack of knowledge about the benefits of steno.

Steno is an unparalleled method of text input, especially for high-volume work, where fluency of thought is vitally important. Writers and programmers would seem to profit the most from it, considering the amount of time they spend putting words up on a screen. If you're only interested in programming, skip down three paragraphs. If you're a writer, keep reading. I think this applies equally to essayists, bloggers, science writers, business writers, and the rest of the gamut, but most of my experience has been as an intermittent writer of amateur fiction, so I'll use that as a template to extrapolate from. I'm sorry to say that I don't get the chance to do much writing for most of the year, but I'm a longtime participant in National Novel Writing Month, the yearly ordeal in which otherwise sane people try to write 50,000 words of fiction in 30 days, just for the fun of it. I've attempted it four times and won it twice. The first time I won, I was living with my parents after college and working the graveyard shift in a group home, where my duties involved about three hours of actual work and five hours of sitting on a couch keeping watch over a house full of peacefully sleeping people.

I wiped my November clean of social engagements and devoted nearly every waking hour in November to my novel. It was a terrible piece of writing, but after sweating and moaning and suffering untold tortures, I wrote the last of my 50,000 words and declared victory just shy of the December 1st deadline. Six years later, I won again, but my circumstances had changed. In that time, I had moved to New York City, learned steno, and found my own apartment. I was supporting myself and my partner with my CART business, plus working weekends as a theater captioner and picking up a bit of transcription on the side. I didn't have the luxury to sweat and moan over a novel; if I wanted to write, I had to do it between CART gigs. There's no way I could have done it without steno.

Every day, between one job and another, I'd haul my gear to the Square Root Cafe and bang out a couple of chapters between bites of grilled cheese sandwich. It wasn't great writing by a long shot, but it flowed in a way that I'd never experienced before. Every word my characters said to me came up on the screen as quickly as they could have spoken them. Before, in the time it took me to type out the six or seven letters that made up each word, my brain would cloud over and I would start second-guessing myself so much it was a mighty battle even to get to the end of a sentence. With steno, most words came in a single stroke, so my text was able to keep ahead of my doubts and excuses and just keep going. I could write for half an hour on the subway going home, or pull out my gear and do a quick 10 minutes in the park before schlepping onward to my next gig. Before, I would have told myself that I didn't have time to get anything substantial done in those few scattered intervals, that I needed several solid hours to get into the flow and mood of writing. After learning steno, I couldn't get away with that ploy. Before I knew it, my 10 minutes were over, but I'd managed to fill half a dozen pages. It wasn't even the speed that helped me do it, primarily; it was the fluency that steno gave to my thinking.



The cover of my 2008 NaNovel.

Switching suddenly from fiction to programming might make for a weird transition, but it's one I've made myself over the past year, so it bears mentioning. This November, instead of attempting NaNo again, I decided to find a Python tutor to help me develop this idea for an open source steno program that had been fighting to get out of my head for several years already. Part of the frustration was that, try as I might, I was never able to make my steno software work effectively with Vim, my favorite text editor. Even when writing fiction, the 1.5-second time delay built into Eclipse's buffer drove me crazy. In the program itself, it lets me see my words instantly (in a sort of distorted "preview mode" that I have to turn off when I'm CARTing, because it's too distracting to my clients), but when I piped its output to other programs, the delay was there not only when I tried to write using steno, but when I tried to edit or navigate around the document as well. I still haven't managed to find a good solution to programming using the steno keyboard, but I can see so clearly what it might be like, if only the software were properly designed.

Programming is especially suited for steno, because there's so much boilerplate to write again and again, even in an eloquent language like Python. If I want to define a function, I have to type:

def someFunction(arg):
stuff.

That's eight strokes just to get started, plus 20 more strokes to write "someFunction", "arg", and "stuff". In steno, on the other hand, you could write something like D*FD in a single stroke, and it would put in the def, the space, the parentheses, the colon and the carriage return automatically, then jump you up to the space after the def to write your function name and arguments, then then drop you back down to the body of the function, all in four strokes. Best of all, once you defined that function name in your steno dictionary, you wouldn't need to worry about remembering to write out the name in camel case each time. Just use a single stroke like SPHU*PBGS (pronounced "smunction"), for instance, and start thinking of it as just another word, instead of two words mashed together in a lexically unnatural way.

I love the way Vim has mapped a useful command to each key of the qwerty keyboard. It's immensely powerful once you get used to it. But it's only got 26 keys to choose from, and it takes a long time to learn which key does what, since the correlation between "move one word forward" and the "w" key is pretty abstract and arbitrary. In steno, you could certainly keep using just the w key, if it's what you're used to, but you could also, say, map the "move one word forward" command to a single stroke like "WOFRD" (pronounced "woffered"). That's mnemonically much more useful than just "w", and an even bigger advantage is that the number of possible one-stroke commands is almost infinite. Instead of one stroke equalling one letter, steno lets one stroke equal one syllable, which is about five times more efficient quantitatively. As a qualitative improvement, the advantage is inestimable.

Mark Twain, one of the first professional authors to buy a typewriter, said:

"The machine has several virtues. I believe it will print faster than I can write. One may lean back in his chair and work it. It piles an awful stack of words on one page. It don't muss things or scatter ink blots around."

Mr. Clemens was a forward-thinking man, and qwerty was a remarkable innovation for its time. It's been responsible for over a century of great prose and programming. But everything he says there goes for steno too -- plus a whole lot more besides.

Tuesday, April 6, 2010

Ghosting and Antighosting

What is ghosting and antighosting, anyway?

According to Antighosting Explained: "Some keyboard keys don’t work when multiple keys are pressed simultaneously. The key presses that don’t show up on the computer or seem to have disappeared are said to have been ghosted. On most keyboards, even some that are explicitly marketed as Anti-Ghosting, this happens with many three key combinations.

Want to know if your own computer keyboard will work with Plover? Test its antighosting abilities online with the Keyboard Ghosting Demo. As far as I know, the only true antighosting keyboards on the market are the SideWinder X4, Razer Tarantula, Stealth 7G, and Logitech G19. The SideWinder is by far the cheapest of these, but if you have one of the others lying around, you should give Plover a try.

The Sidewinder FAQ states that the X4 can recognize up to 17 alphanumeric keypresses at a time. But a steno machine has 22 keys, and all of them can theoretically be pressed at a time! I was worried that this might be a problem, but then I looked in my actual steno dictionary, and noticed that the longest single stroke (STKPWHRAOEUPBS, an alternate stroke for "guidelines") only used 14 keys. So maybe there are some people out there whose dictionaries contain lots of 18-to-22-key strokes, in which case they'll probably have to upgrade to the more expensive antighosting keyboards. If you're like me, and your steno dictionary stroke length maxes out at 17 or fewer, you're probably okay.

True antighosting is paramount when using a qwerty keyboard as a steno machine. After a few weeks with the SideWinder X4, I'm happy to report that its key recognition capabilities seem to be flawless. For a $60 keyboard, that's no mean feat. I can't recommend it highly enough. Microsoft isn't giving me any kickbacks, either.

Plover logo prototypes!

Illustrious commenter Sonja wrote me last night with an exciting development. She has a friend who's an illustrator, by the name of Laura Lake. Sonja told her a little about the project and asked if she had any ideas for a logo. Look what she came up with!



I'm a huge fan of the one on the left, but Laura's favorite is the one in the middle. What do you guys think?

Monday, April 5, 2010

Files are up at the github

If you want to try out the new GUI version of Plover, go here and download tktest.py, stenowinder.py, and ploverbd.py. Put them all in the same directory, and if you've got Python 3.1.2 installed on your computer, just run tktest.py. A little window should pop up, and if you have an anti-ghosting keyboard, you can just start chording away. If anyone tries this, please let me know how it works. I'm really excited to get to the next step, where it actually starts outputting to files and/or other programs, but I think even just being able to mimic the action of a steno machine with a qwerty keyboard is worth something, if only to show people how awesome steno looks when you're writing in it.

It's working! It's really working!

Saturday, April 3, 2010

Keytops for cheap

I'm having my Python lesson on Monday, so I'm hoping that we'll be able to clear up the issue with having to press Enter between each stroke of the Sidewinder. Meanwhile, if any of you guys are actually entertaining the notion of purchasing a Sidewinder and turning it into a steno machine, I've found a good source for keytops:

Stenotech Steno Accessories.

You can get 'em in felt for $13, in rubber for $15, and in leather for $26. If this thing really takes off, I might try to arrange a bulk purchasing thing, but for now those are pretty decent prices.

Here's a Google shopping price comparison for the Sidewinder. As you can see, the best deal including shipping seems to be hovering around $60. If you can find a local store that sells 'em, you might be able to get one for a little less, but I'd figure $15 for felt keypads including shipping, $60 plus tax for the Sidewinder, about $80 total. I know it's not nothing, but it's a damn sight better than $4,000. Agreed?

Friday, April 2, 2010

Ploverwinder takes flight!



I have to edit an entire play script tonight (I'm captioning a matinee tomorrow), so I don't have much time for a long post, but I just wanted to show off the fruit of this morning's labors. Some lovely people in the #python IRC channel gave me a brilliant line of code that was the last thing I needed to turn my Sidewinder X4 into an actual working steno machine... As long as you don't mind pressing enter after every stroke. Next I have to figure out how to make the program recognize the interval between when a key or group of keys is pressed and when they're all released so that it can delineate strokes automatically. For now, though, it's recognizing every chord I throw at it and translating them as cleanly as if it were coming from my Revolution Grand.



Anyone who wants to play around with it can download stenowinder.py and ploverbd.py (the dictionary file) at the github. Put them in the same directory. If you've got Python 3 installed, you should be able to just run the program without installing anything else. Let me know if that isn't the case. If your keyboard doesn't have anti-ghosting like the Sidewinder X4, you'll probably have to press each key individually rather than chording them, but at least you can get a taste of how it's supposed to work. I am ridiculously excited, but I'd better go do what I actually get paid for. More later!