Posts for the month of November 2008

NVDA Hack Fest November 2008

I joined Mick in Melbourne on Sunday, 9 November for the third NVDA hack fest. Discussion during the hack fest included significant changes and additions to the design of NVDA, organisation of the source code, optimisation of the braille support, project management and policy, and solutions to some long-standing problems. See NVDAHackFestNov2008 for detailed technical notes on the major topics of discussion.

Aside from discussion, we did quite a bit of coding as we had hoped. The first item we tackled not long after I arrived was a rather long standing task that we've been putting off for months: the storage of voices and variants in the configuration file as unique identifiers instead of indices. This makes voice settings more reliable across systems and configuration changes. We had already begun work on this several days before, but there was still some work to be completed. We were very excited and relieved when we were finally able to merge the changes and declare this ticket fixed late on Sunday evening. (Amusingly enough, despite our excitement, we forgot to close the ticket until after the hack fest.)

Our next major undertaking was some changes to improve NVDA under Windows Vista. In earlier versions of Windows, it was tedious at best to run specific applications or tasks with administrative privileges, and therefore, it was common practice for some users (particularly home users) to simply always run with administrative privileges. Many applications, including NVDA, expect to be able to write to protected areas of the system, such as the Program Files directory. This is obviously a huge security hole. This is no longer the case in Windows Vista, which prefers that applications specify what privileges they require by way of an associated manifest. Applications which do not provide this information are run in a compatibility mode, wherein data written to protected locations is redirected to a "virtual store" writeable by the user. This is not ideal and can cause problems. We updated NVDA to provide a manifest, which means that NVDA now runs without this compatibility hack. This additionally required that we change NVDA to store all configuration data in the user's Application Data directory for installed copies. This also benefits Windows XP users, allowing individual users to have their own configurations and to save their configurations without administrative privileges. Furthermore, it is the first small step towards supporting User Access Control in Windows Vista.

Another significant change we implemented (which won't be noticeable to users) is that the default appModule is no longer a separate level through which scripts and events pass. Rather, all other appModules inherit from the default appModule class. This makes for a much clearer, object oriented design, allowing scripts and events to be overridden or extended with ease. It also cuts down the number of levels through which scripts and events must pass.

There were also several other minor bug fixes and changes, including some for braille and the new SAPI 4 driver.

On Wednesday evening, Mick, Mat and I attended a mini-expo on adaptive technology for  Vision Australia staff. The mini-expo was attended by 9 suppliers and between 35 and 40 Vision Australia staff. Mick and I came prepared to demonstrate NVDA, including the all new braille display support. Mick also had  Ubuntu Linux and  Orca installed for demonstrations. Unfortunately, it was far too loud for demonstrations with speech, so most of the evening was spent talking to the various staff that approached us. We learnt that some staff are already recommending NVDA to users who cannot afford commercial screen readers and some of these users are using NVDA with great success. Unfortunately, NVDA is still not officially recognised by Vision Australia, perhaps due to our inability to offer direct technical support. Nevertheless, we are hoping this will change in time.

I returned to Brisbane early on Friday afternoon. Overall, we were quite happy with our achievements during the week. As well as the immediate benefits, these hack fests always help to revitalise our working relationship. On a personal level, it was also great to catch up again. Mick and I talk a lot on both IRC and the phone, but there's nothing quite like a face to face meeting. :)

Weekly Update for 11 Nov

I didn't have a chance to write a weekly update last week due to the promised hack fest, which I will discuss in another post.

Here are the noteworthy changes to NVDA in the week prior to the hack fest:

NVDA Updated for Python 2.6

NVDA has been updated to work with  Python 2.6. (In fact, it now requires Python 2.6 and will not work with Python 2.5.) Aside from the great new features in Python 2.6 which we can now use, this is the first stepping stone in the eventual move to  Python 3.0.

Those running binary snapshots do not need to do anything; new snapshots will be built with the appropriate packages. Those running from source should check dependencies.txt in the NVDA source distribution for the current dependencies and update their systems accordingly.

Last Week in NVDA (3 Nov)

There wasn't much noteworthy activity to report about last week, aside from NVDA 0.6p2 passing 10000 downloads, about which I already reported. The one noteworthy change in NVDA was Mick's introduction of an NVDA specific dialog which allows the user to edit the content of a cell in Microsoft Excel. This dialog appears when you press f2 to edit a cell. This is necessary because the formula bar in Microsoft Excel is inaccessible to NVDA. It is only a temporary solution until NVDA has display hooks which can track the text and cursor in the formula bar. Nevertheless, it does allow the user to edit cells in an accessible manner, which will be a welcome relief for some users.

For BRLTTY users, Samuel Thibault is now building the BRLTTY installer I reported about last week when he releases new Windows builds of BRLTTY, and the installer script is now in the BRLTTY svn repository. Thus, I have removed the installer files from the location I linked last week. Please download installers from  Samuel's BRLTTY Windows builds.

Mick has started an article about what we will cover in the upcoming hack fest, which is less than a week away now! As always, there will be a lot of brain melting discussion, though we hope to do a little more coding this time. :) We are keen to involve other developers in these discussions, so let us know if you are interested.

Mick and I debated how to improve braille review. Currently, braille either moves the caret or the review position, but it is always tethered to one or the other; it cannot move freely. This is potentially undesirable in some circumstances. There are two possible solutions:

  • Braille always moves the review cursor. The caret can optionally be moved when braille moves, but regardless, the review position will always be moved. The review cursor itself would never be displayed. The advantage of this is that no separate braille cursor or range is required. The disadvantage is that review bookmarks or the like would be required, as one might wish to move quickly between the caret and an arbitrary review point.
  • Braille can move beyond either cursor, but either cursor can be moved to a braille position, either on demand or automatically. This requires the concept of an active braille cursor; i.e. whether braille is manipulating the caret or the review cursor. This probably allows for the most flexibility, but possibly makes fora steeper learning curve, as there is an additional cursor/range to consider.

We still can't reach a consensus on which is the better method, but we have ideas on how both could be implemented. :) We also discussed ways to work around some bugs in liblouis which are causing some annoying exceptions when text contains certain unicode characters.

Aside from this, we've spent a considerable amount of time writing presentation proposals for  CSUN 2009, which we submitted today. Also, we've been trying to track down some annoying crashes with Firefox and NVDA that have been reported lately, but haven't had much success yet.