NVDA Presentation at CSUN 2009
The Annual International Technology and Persons with Disabilities Conference, hosted by California State University, Northridge (and thus usually known simply as the CSUN conference), is perhaps the world's largest conference on assistive technology. Thanks to the generocity and support of the Mozilla Foundation, Mick attended CSUN 2007 and both Mick and I attended CSUN 2008. We gained a great deal from these conferences, as they enabled us to meet and share information and ideas with prominent figures in the industry, as well as giving us a fantastic opportunity to spread the word about NVDA. For CSUN 2009, given the positive response from users and the industry as a whole, we decided to take a step forward and run our own presentation about NVDA. We are pleased to announce that our submission was accepted. We are very much looking forward to the conference and are keen to once again spread the word about open accessibility technology from the Mozilla booth. CSUN 2009 will be held from 16-21 March at the Los Angeles Airport Marriott & Renaissance Montura Hotels.
Following is the abstract for our presentation.
NVDA: A FREE, OPEN SOURCE SCREEN READER FOR MICROSOFT WINDOWS
Michael Curran
President/Software Developer
NV Access Inc.
Email: mick@nvaccess.org
James Teh
Vice President/Software Developer
NV Access Inc.
Email: jamie@nvaccess.org
NonVisual Desktop Access (NVDA) is a free, open source screen reader for Microsoft Windows. Providing feedback via synthetic speech and braille, it enables blind and vision impaired users to access a computer running Microsoft Windows for no more cost than a sighted person. In the short time since its inception in mid 2006, NVDA has already developed into a viable alternative to commercial screen readers, outperforming them in some areas. It has rapidly gained popularity and is used by many blind and vision impaired people across the globe. As at November 2008, the current version had been downloaded over 10000 times since its release less than three months prior. In this session, the primary developers of NVDA will provide an introduction to NVDA, including a discussion of its history, features, philosophy, community drive, design and plans for the future. Demonstrations will be provided where appropriate. NVDA began its life in mid 2006 when Michael Curran, unhappy with the excessive cost of existing screen readers, endeavoured to write his own screen reader in the Python programming language. In the first part of this session, the history of the NVDA project will be outlined, right from its humble beginnings to the considerable success it enjoys today. This will include the introduction of the other primary developer, James Teh, to the project, the creation of NV Access as a non-profit supporting organisation for the NVDA project, and Michael's journey to CSUN 2007. Subsequently, the increasing support of the Mozilla Foundation will be covered, including the grants they provided to enhance support for Mozilla Firefox and to employ James full time. CSUN 2008's impact on the project will then be discussed, followed by the developments in the rest of the year. Perhaps the greatest appeal of NVDA is its zero cost, but this is certainly not a reflection of its quality or functionality. The session will focus on the many features of NVDA and the benefits they offer to its users. This includes its vast support for over twenty languages (all of which are included in the main distribution) and bundling with the free, open-source, multilingual speech synthesiser eSpeak. NVDA'S ability to run entirely from portable media such as USB flash drives will be covered, as well as the optional capability for installation with a talking installer. There will be a focus on NVDA's excellent support for Mozilla Firefox 3, including quick navigation keys, links list, support for the Accessible Rich Internet Application (ARIA) standard and basic support for live regions, as well as support for Mozilla Thunderbird 3, accessible Java applications and Windows Command Prompt and console applications. Innovative features such as audible progress bar beeps and audible indication of the mouse position will be outlined. As well as describing these features, the session will detail how they have been applied by users in their daily lives and why a user might choose NVDA over its commercial equivalents. The guiding principle of both NV Access and the NVDA project is that accessibility should not be an extra cost for the user. The session will explain how NV Access fulfills this goal and the philosophy of NV Access and NVDA, including their commitment to openness and community. First, the benefits of open source software will be discussed, such as the ability to draw on a diverse, global pool of development expertise and the benefits of openly sharing knowledge for accessibility as a whole. These benefits are very much evident in the multitude of contributions already made to NVDA by the global community. Peter Vágner, the internationalisation coordinator for NVDA, will talk about his role in managing the translation and internationalisation effort, which has assisted in making NVDA's excellent multilingual capabilities a reality. There will also be discussion surrounding the NVDA developers' active participation in and support of the development of other open source software as well as open accessibility standards and technologies. Marco Zehe from the Mozilla Corporation will discuss the relationship between Mozilla and the NVDA project, which has had substantial benefits for both parties. Also, importantly, the growth of NVDA's own community will be discussed, including the development of community resources such as the NVDA web site, email lists, blog entries, an internet relay chat channel and an issue tracking system for users to report and discuss bugs and feature requests. Finally, NVDA's potential for innovation and experimentation will be covered.
NVDA's success as a product is in no small way due to the care with which it has been designed and implemented. The developers will briefly describe the principles underlying NVDA's design and implementation. This includes the use of the Python programming language to enable simple, rapid development, the extensible, modular, abstract design, and the focus on accuracy and efficiency.
The final part of this session will outline possible plans for the future for both NV Access and the NVDA project. Topics discussed will include the enhancement of support for Internet Explorer, support for UI Automation, the ability to read display information and improved support for office suites.
Microsoft provides grant to improve NVDA
Microsoft has recently decided to support NV Access and the NVDA screen reader project by providing funding and support that will allow NV Access to improve NVDA in two key areas:
- Allowing NVDA to support Microsoft's UI Automation API in Windows 7 (the next Microsoft Windows Operating System); and
- Improving NVDA's support for Microsoft Internet Explorer and other related applications.
Please visit the NV Access site for a more detailed blog post.
NVDA Weekly Update (December 18 2008)
This past week we have been busy preparing for the up and coming NVDA 0.6 p3 release, which we hope will be out in the next week or so. Work has been mainly fixing bugs that we and users have been noticing as we check that all is working as it should for the release.
I have fixed a bug introduced some time after 0.6p2 where NVDA would not detect that a new page had been loaded in Internet Explorer. This code broke when we moved to a new version of the Python COM Types library, which seems to have changed the way it handles COM events.
Users of Windows Mail or Outlook Express who read their emails in plane text will be happy as now when a message is opened, NVDA makes sure that the user is actually placed on the message text so that they can read it with the arrows. This is actually a bug in the Email software, but NVDA has a pretty simple peace of code to make this a little nicer for the user.
Jamie has been fixing some bugs in NVDA's Audiologic synth driver. As we do not have access to all synthesizers and braille displays we support, it is rather hard to make sure that these drivers will always work. Though we do rely on users to let us know if something does break, and to provide suitable information so that we can try and fix the problem.
I have spent a bit of time fixing some issues with text selection in NVDA. In some situations in Windows, when the user moves away from a text control that has selected text, the selection is unselected at the same time the focus moves. NVDA now should hopefully not inappropriately announce this selection change as the focus moves, as it is some what unuseful to the user. Users may notice this fix especially on the Internet Explorer address bar, and in Thunderbird 3 when moving from an email address field after an address auto-completes.
I have also possibly fixed a small bug in NVDA's support for Outlook Express where it would play its error sound when the user is sending an email.
Jamie has fixed a bug where NVDA would freeze, or read too much, or play its error sound, when bringing up the Bookmarks dialog in Mozilla Firefox. The issue was that NVDA was going in to an endless loop when collecting the text to speak in the dialog. Technically this is a bug with Firefox, but he was able to change the code for other advantages, which also indirectly fixed this problem. He has also improved the rule for when NVDA should respond to alert events and speak them. NVDA will no longer speak an alert event if the focus is already inside it as NVDA therefore must have already spoken the alert.
Finally, Peter has continued to be an extremely important asset to the NVDA project, updating NVDA's language and documentation translations on behalf of our translators, providing support to current and perspective translators, and of course also fixing bugs and adding new features through out NVDA's core and application-specific code. I personally would like to extend my thanks for his time and effort.
NVDA weekly update (December 10 2008)
Many different things have been worked on in NVDA in the past week. Much of the work has been to improve the user experience, though a few bugs have been fixed as well.
Probably one of the most important things for this week is that we have finally been able to stop crashes in Firefox in Windows Vista while using NVDA. We have known about this problem for a rather long time, but have not ever been able to reproduce it ourselves. However, due to some unknown reason, my wife's computer suddenly started doing this, and although it was very annoying for her, it was great for me as I finally had a chance at investigating the bug.
It took me about 20 minutes to fix, after I was able to run Firefox on her computer with a debug build of our virtualBuffer library. In the end the bug was a coding error probably on my part, although it is extremely surprising that Firefox wasn't crashing on everyone's systems. It seems that some installs of Windows Vista are just that little bit more secure than others.
Technically the problem was that our virtualBuffer library was trying to deallocate some memory it really wasn't allowed to deallocate. Specifically it was trying to free a string literal in c++. Again, Although this is a pretty bad error on a programmer's part, it is strange how this hasn't caused many more problems.
This fix has stopped crashes with Firefox in Windows Vista, but we are still aware of a few other crashes.
As NVDA is always in rapid development, its structure can change quite a bit over time. This has started to be come an issue when users try to install a new copy of NVDA over the top of an old one. To try and fix some issues caused by this, I have now made the installer detect and uninstall any previous copy of NVDA first before installing the new copy. As this meant I was playing with a lot of complex installer code, I also spent some time cleaning up that code, hopefully making it a little more readable. I also changed the publisher on the installer to nvda-project.org, as before it was Michael Curran (which isn't very correct).
Michel Such provided a patch for the installer, which makes the temporary copy of NVDA started by the installer use the user's existing NVDA configuration file. This means that when installing a newer copy of NVDA, it will now read the installer with your choosen voice preferences etc.
Thanks to Simone Dal Maso and others, the NVDA Excel editor dialog now works with localized formulas. This means that just like when editing formulas in Excel with its own formula bar, you are able to read and write them in the language your computer is set to, rather than just English.
Jamie spent quite a large amount of time deep in NVDA's menu handling code. He originally started trying to solve one particular problem where NVDA does not announce the focus when exiting a context menu, but in the end he has completely refactored the code, making it much easier to understand, and has also made the following noticeable changes:
- fix: Improved the detection of the focus when leaving context menus. Previously, NVDA often didn't react at all when leaving a context menu.
- fix: NVDA now announces when the context menu is activated in the Start menu.
- fix: The classic Start menu is now announced as Start menu instead of Application menu.
A small bug in NVDA's sayAll code has been fixed. This bug caused NVDA to play the error sound on a rare occasion where NVDA was performing a sayAll, but then it needed to speak something else. I certainly noticed this bug when reading a large document, and then pausing for a few minutes and going back to it.
When arrowing around web content in a virtualBuffer, NVDA always tries to scroll the object you are reading on to screen, so that sighted people can see what you are looking at, and of course so you can interact with it perhaps with the mouse. However, sometimes for some unknown reason, NVDA gets a little bit out of sync with the web browser and its possible you may move to some text that is representing an object that may not actually exist at this point in time. This was causing some issues where NVDA would throw some errors on particular pages, which was rather annoying to the user. Jamie has stopped these errors from being shown to the user, so the experience will be a bit nicer. Although we still are not sure if this is just hiding a much deeper underlying problem. But for now, this works.
When the selection in an edit field or document changes, NVDA detects this and speaks the change. However somtimes, such as in a select all, NVDA may see that the entire content has been selected, and try and speak all of it in one go. Aleksey and Jamie have worked on this problem (Ticket #249) and now NVDA only announces how many characters were selected rather than the actual content, if the number of characters is 512 or higher. A part from the fact that the user probably doesn't want to hear the entire document when they select it, this does stop some problems with some speech synthesizers that can not handle large amounts of text handed to them in one go.
Peter has fixed some issues with progress bars in software such as Nokia PC Suite which uses the QT toolkit.
Finally, Jamie has worked on the code that handles the reading of content in alerts and dialog boxes. Specifically users will notice that NVDA is much more successful in reading the text in its own installer (specifically the welcome page) and alerts in Firefox no longer cause a lot of pointless info to be spoken. The text announcement in Dialogs is still not as good as we'd like (some info can be repeated) but double speaking is always better than not speaking at all.
Weekly update (December 2nd 2008)
The last few weeks have been rather busy for us due to work specific to NV Access so we have got a little behind in weekly blog posts. However, in this post I will try and cover the significant happenings in NVDA from mid November up to now.
Firstly, I have finally implemented support for group position information for IAccessible2 objects (ticket #77). NVDA has always been able to report group position info e.g. "x of y" or "level z" on MSAA objects, but we had never gotten around to supporting it for IAccessible2. At the same time as implementing support for this, I slightly redesigned how NVDA handles position information in general. This does not really change anything for users, but does make it easier to manage these properties in the speech code.
Although Jamie has already mentioned this in another blog post, NVDA has now been updated to run with Python 2.6. There are some pretty interesting new features in Python 2.6, and we are quite glad that we can now start thinking about using them. NVDA no longer will run with Python 2.5, so if you do run from source, please make sure to read the updated dependencies.txt file.
When redesigning how NVDA handles position info, we decided to properly handle the announcement of levels in tree views much more genericly. This means that all tree views now will announce the level of the current item first if it changes, rather than this only happening for SysTreeView?32 tree views.
Jamie has spent some time working on braille support, to make it much faster when moving the focus around the operating system and applications. Specifically he has implemented ticket #201, which allows NVDA to remember common objects in the ancestors of the new and old focus objects in a focus change. As this greatly cuts down the amount of information NVDA has to fetch in order to represent the objects in braille, there are some very noticeable speed improvements.
I made a few small improvements to NVDA's support for speaking typed words and characters. These include better improved speaking when both typed words and characters are on (now the word will be announced before the character that denoted its end, rather than after). NVDA no longer announces an asterisk when pressing non-alphaNumeric keys such as tab and enter, in a password field. And finally, NVDA no longer will speak a word you have typed if when typing the word you then move the focus to something like a menu or other application etc. Previously NVDA could unexpectantly start announcing a word you typed minutes ago just because you pressed space or enter.
Jamie has managed to fix a very long standing bug in NVDA's command console support that was stopping certain bits of new text from being announced. This had been reported to us quite a long time ago, and funnily enough, to fix it was as easy as removing one small line of code. This fix hopefully may make NVDA a little nicer to use with some console-based text adventure games.
As some people have been reporting crashes with Firefox when using NVDA, we have been racking our brains over what could be causing them. So far we havn't had too much luck, but along the way we did manage to find some issues with NVDA and unicode file paths. Jamie and Peter have made a few changes which *may* make NVDA better when its run from a directory with non-ascii characters, though we are not too sure really how many issues this really does fix.
If people do get crashes with Firefox when running NVDA, it is very important that they do send their crash reports to Mozilla via the Mozilla Crash Reporter if it does appear. And it is also helpfull if they could send the crash IDs to the NVDA developers, so we can research to see if NVDA caused the crash, and if so, how it caused the crash. If you wish to find IDs for crashes you have experienced in Firefox please type the url: about:crashes In to your Firefox location bar, and you will see a page with all the IDs listed.
Jamie has fixed some issues where reading virtual buffers with the review cursor would not seem to announce the same information for fields such as links etc as would be announced if you used the actual caret (with the arrow keys). The review cursor hopefully now acts exactly the same as the caret, at least as far as user experience goes.
Peter has added support for some edit controls in pinacle tv software.
For a while now, it has been clear that there should be a way to copy text from NVDA's review cursor. A situation that needs this feature would be perhaps in a Dos console where you need to copy a URL. Sighted users can just highlight the text with the mouse and then copy it. Because of this, Jamie has added two new scripts to NVDA. nvda+f9 marks the current position of the review cursor, and nvda+f10 copies the text from the previously marked position up to the new current position of the review cursor. Finally, There are a lot of applications which like to let NVDA know that the focus has changed, even when they are not the currently active application. This is annoying as NVDA then announces the focus change to the user, but when the user then acts upon the change, they find that the focus never really actually changed. Jamie has fixed this problem by making sure that NVDA does not handle focus changes outside the active application, or in a system control (such as the start menu etc).
Finally, we have been making some changes to do with whether actual Python source code is included in our compiled snapshots and releases. This is to try and get around the issue where a person or organisation wishes to Use NVDA, but can't deal with the GNU General Public License (GPL). This may have caused some problems for users using snapshots. If you find you can no longer run NVDA after installing a new snapshot, please uninstall any old copies of NVDA, including the newly installed one, also delete the NVDA directory from the Program files directory or where ever you installed it if it still exists, and then re-install NVDA again. We aim to make this transition a little easier for users in the near future.


rss
NVDA is developed by