I have never posted anything work related to this blog. Actually, I don’t post much to this blog at all. So here is a bit of a lowdown of what I have been up to professionally in the last year. But before I start, I would like to say that this is not real “work”, this is really fun. I get to work on improving a Free Desktop, and I get to help spread the freedom to everyone, by solving access issues.
Up To This Point
I was hired by IBM as a contractor to help them with an Open Source screen reader they were developing called LSR (Linux Screen Reader) that was spearheaded by Peter Parente. During my contract there I inherited from Peter an internal tool called pyPoke and transformed it into a generic accessibility testing tool for the GNOME desktop called Accerciser. Just as my contract was coming to a close IBM announced they would discontinue their Linux accessibility work. Thanks to the likes of Aaron Leventhal, I and my fellow contractors Scott Haeger and Ariel Rios were able to continue Linux accessibility work by receiving Mozilla Foundation funding. With this support I was able to work further on Accerciser and evangelize accessibility in GNOME.
Orca pyatspi Migration
Since Accerciser utilizes a new and robust Python AT-SPI client library by Peter Parente called pyatspi, I was the guy who was fit to migrate GNOME’s most popular assistive technology, Orca, to this new client library. One of the cool aspects of pyatspi is that it depends on introspection to create it’s API, in this way it’s API is almost identical to the AT-SPI IDL. When I began the migration work I realized quickly that a complex peice of software like Orca would not survive a library migration if there are not enough proper regression tests in place. Will Walker, the Sun Orca team lead sympathized with this concern, since I believe he has worked hard to get good test coverage into Orca in the past.
Since I made a presentation at GUADEC 2007, I have gotten a lot of feedback for a specific plugin in Accerciser called the “Script Recorder” that allows the recording and reliable playback of keyboard interaction in desktop applications. While he feedback was positive and great, I felt that the coolness of that plugin belonged as a stand-alone application, so I started Macaroon, a general desktop macro tool that has it’s own Python-based script format. I have not had much time to promote this tool, but we started heavily using it in the Orca regression testing work. By using Macaroon we were able to create a huge collection of scripts that play back reliably and fairly quickly – The previous generation of Orca regression tests used sleep() in many places to assure repeatability. With Macaroon we were able to easily create scripts with a an integrated recorder tool, and have the scripts execute in a relatively short time by listening for UI events to drive the test sequence.
Will, Rich, Joanie, Mike and Scott have done a heroic effort at putting over one hundred regression tests into Orca’s test suite. We had two or three weeks after Orca 2.20 was released in which we all hammered out test scripts.
Now that we have good regression testing in place, I was able to gut out Orca’s legacy AT-SPI client library and put in an API compatibility library. Since Python is so ridiculously flexible, I had a lot of fun tweaking attribute access, wrapping stuff, and providing useful deprecated messages for Orca developers to inform them that a module still uses the legacy API. The rest of the folks working on Orca so far are real troopers, they have put up with me pretty well, I was worried I would be hated and lynched for throwing the entire Orca core into chaos. Luckily we don’t have to deal yet with the User’s wrath since we have a solid stable branch in SVN.
On the road to Orcana (Orca-nirvana)
Another area I have invested time in is AT-SPI caching. Orca today relies heavily on caching to provide a responsive UI. For this reason when pyatspi was written caching was high up there in the specs. With Peter’s help I was able to examine a lot of caching issues in pyatspi. The big surprise was that after a couple of days of benchmarking I got fairly convinced that we could do away with most of the caching that we do in Orca (and therefore in pyatspi). I think this is a big deal, it will greatly decrease the code complexity, and relieve us from the usual problems with caching: statefulness, effective cache invalidation, and a larger memory footprint. I look forward to revisiting Orca performance and to help make Orca lean and mean.
So what lies ahead in this migration effort? Probably the funnest and most challenging part.
We get to pull the plug on the API compatibility layer and pronounce the old library as dead.
Since the Orca code base is not very small it will be interesting once we complete the migration and take a step back and look at what has been done. Once this happens wrappage will cease to exist, and instead of fat proxy objects we will have lean pyOrbit paperweights throughout. This will give us an opportunity to re-examine some other core stuff in Orca, like caching (see above).
Did I mention that I work from home? Besides meeting Will at GUADEC, I have not met any of my other co-workers until recently when I was at the Mozilla Accessibility Summit in Boston. It was great to meet the folks that I deal with daily, and it was a big eye opener since until that point I have only met one other person who uses Orca daily. Thank you Aaron for getting us all together. And thank y’all for supporting me in this great work.