Posts by author jteh

Mozilla Grant Progress Report

It is drawing towards the end of the year for which the Mozilla Foundation provided a grant to NV Access to employ me to work full time on NVDA. This post examines the grant goals and summarises our progress for each goal. It is important to note that the original grant goals were written for a three year period, whereas this grant was for one year.

1. NVDA Core Development

* General core improvements: This includes speed improvements, memory usage optimisation, fixing memory leaks and improvements to user experience.

We have made many considerable improvements to the performance, stability, accuracy and reliability of NVDA throughout the year. We constantly strive to ensure that the NVDA code is efficient, optimal and reliable. The user interface has also evolved to better serve its users.

* Debugging and testing: Improvements to the debugging facilities in NVDA will assist in finding and fixing problems. In addition, an automated testing system needs to be developed to allow for faster discovery of problems and to prevent unnoticed regressions in functionality.

NVDA's logging code was refactored to be more flexible and simpler for developers to use. The log viewer was introduced to facilitate quick viewing of the log file for the running copy of NVDA. The Python console, which provides an interactive Python interpreter inside NVDA, has vastly simplified and expanded the possibilities of debugging, research and testing. Unfortunately, an automated testing system has not yet been developed.

* IAccessible 2 support: IAccessible 2 is an emerging accessibility API that has the potential to vastly improve the accessibility of many applications and is thus very important for NVDA's success. It is already used by a growing amount of important applications, including such applications as Mozilla Firefox, Mozilla Thunderbird and Chatzilla which use Mozilla Gecko / XUL.

Since early 2007, NVDA has had comprehensive support for IAccessible2 and uses it wherever it has been implemented in applications. Particularly worthy of note is NVDA's use of IAccessible2 in Mozilla applications, where the rich accessibility provided by IAccessible2 is especially benefitial. In 2008, as well as general enhancements to this support, we implemented support for text attributes, which enables NVDA to read formatting information, spelling errors, etc.

2. Braille Output Support

NVDA should support dynamic output of both contracted and uncontracted braille on various popular refreshable braille displays.

Braille display support has now been implemented, including support for cursor routing. Users have been extremely impressed by the speed and responsiveness of this implementation. Some noteable features are still missing and some polish is required, but this initial implementation is very useable already. NVDA attracted the attention of the braille display manufacturer Handy Tech, who participated in the initial design and prototyping of NVDA's braille support and provided a driver for their displays.

3. NVDA Customisation for Applications and Web Pages

There was little significant change to NVDA's support for application specific scripting. The code documentation and design were improved slightly. However, there has been no request or need for enhancements or changes to this functionality, although there is definitely room for improvement concerning documentation for new developers. NVDA has no functionality to facilitate customisation for specific web sites. Again, there has been no request or need for this in NVDA from our users so far. The WebVisum Firefox extension has facilitated some page customisation. WebVisum is independent of the screen reader used and its page modifications are automatically shared by its user community. Due to its popularity with NVDA users, we made some changes to NVDA to better support WebVisum.

4. Static Web Support

I will address only Mozilla Gecko 1.9 (used in Firefox/Thunderbird 3.x) here, as this is what concerns Mozilla. It is worth noting that NVDA's early support of Gecko 1.9 meant that it was able to work with Firefox 3.0 out of the box as soon as it was released.

* Fast, efficient access to basic html content in a flat representation

NVDA renders most pages presented with Mozilla Gecko such that no additional delay is perceived by the user. Some highly complex pages involving many nodes may incur a noticeable delay, but these tend to be the exception rather than the rule. Pages are rendered into a flat representation which can be read and navigated like a normal text document. Once rendered, navigating the page is instantaneous. The first official release to include this functionality was 0.6p1 in March 2008.

* Support for dynamic updates to a page resultant to JavaScript events

Dynamic updates are automatically reflected in the flat representation of the page (the virtual buffer).

* Synchronicity between the flat representation and the actual controls to provide access to forms, and to facilitate navigation of a page using a hierarchical structure

This synchronisation has now been achieved. Users can choose to interact with a control from within the flat representation, and the cursor position within the flat representation will be updated appropriately when a control receives focus. In addition, object navigation can be used to hierarchically navigate a page, with the review cursor moving to the appropriate position in the flat representation.

5. Research and Development of New Accessibility Concepts

These concepts included:

  • Accessible drag and drop
  • Custom accessible widgets
  • Mathematics accessibility
  • Diagram accessibility

Accessible drag and drop is already possible through the use of ARIA drag and drop. This has not yet been implemented in NVDA. (See below for more details.) There is not yet a complete specification or application implementation for the remaining three items. We have been participants in working groups concerning the development of these specifications and plan to participate to a larger extent in future work.

6. Web Application Support

* ARIA widgets

NVDA now has very useable support for ARIA widgets, although some polish is required in certain areas. In strong commendation of this support, NVDA has featured in several presentations by Yahoo developers about ARIA widgets; see this blog post for one example.

* Rich text editing in rich internet applications

NVDA does have some support for this. However, it is buggy and incomplete. Improving this to a satisfactory level will be quite a large, difficult undertaking.

* Live regions

NVDA has very limited, unsatisfactory support for live regions at present. Implementing better support is quite difficult under Windows. (Technically, this is due to the need to go in-process for efficient handling of events.)

* ARIA drag and drop

This is not currently supported, although we have investigated this and have some idea of how it will be implemented.

* HTML 5

This requires more work in web browsers before it can be considered in NVDA.

7. XUL Application Support

As already mentioned, NVDA has comprehensive support for IAccessible2 and the Gecko 1.9 rendering engine, which means that accessible widgets in recent XUL applications should be accessible.

* Thunderbird

NVDA has excellent support for Mozilla Thunderbird 3. Many users, including us, use Thunderbird as our email client of choice.

* Komodo

This is untested.

* Songbird

This is untested. We have reason to believe that more work may be required in Songbird to make it accessible.

* Miro

This is untested.

* Popular Mozilla extensions; e.g. Adblock Plus

Popular Mozilla extensions are far too numerous to test and report upon here. Noteably, NVDA works very well with Adblock Plus and WebVisum.

8. Mozilla Accessibility Community Interaction

* Filing bugs for Mozilla issues

At the time of this writing, we have filed 32 bugs related to Mozilla accessibility. Additionally, many more have been communicated to the Mozilla accessibility team (primarily Aaron Leventhal and Marco Zehe) for filing by them.

* General interaction with the Mozilla accessibility community

We regularly participate in discussions with both users and developers in the Mozilla accessibility community via its mailing list and IRC channel.

* Involvement in and Contribution to the development of accessibility frameworks and standards

We have participated in and contributed to the development of the IAccessible2 accessibility API. We have also provided feedback on ARIA issues such as landmarks.

9. NVDA Community Development

The development of the resources described below has encouraged a strong, diverse community of both users and contributors supporting the NVDA project, which continues to grow steadily. The NVDA web site received a major overhaul in mid 2008. All of our web services were integrated into one site based on Trac, which allows for seemless referencing and interaction between services, greater community collaboration and ease of maintenance, among other benefits.

* Development documentation

Some development articles are provided on the NVDA wiki. Much of NVDA's code includes documentation and comments, although there is still quite a bit of undocumented code. Further development articles are probably required to assist new developers who wish to contribute to NVDA.

* Issue database

An issue database was established in 2007. People can report and view issues in this database. Although the system was always used to some degree, we began to use it to a much greater extent in 2008 and strongly encouraged both users and other developers to use it as well. This has been quite successful and has greatly improved the management of the project, as well as increasing community contribution.

* Community resources; e.g. mailing lists, wiki, blog, etc.

  • The Community page provides information about mailing lists and the NVDA IRC channel, as well as links to other sites related to NVDA that have been created by the community.
  • The NVDA web site is largely based around a wiki. The Documentation page provides links to categories of wiki articles relevant to users and developers.
  • The NVDA blog is regularly updated with news and progress updates.

10. Assisting Application Developers to Implement Accessibility

* Promoting application accessibility

We constantly strive to promote application accessibility through our strong participation and presence in various accessibility communities, as well as our work with application developers such as Mozilla. We seek to improve accessibility in general by assisting in the development of new accessibility technologies such as IAccessible2. We encourage interest and open participation by regularly keeping the community up to date through our blog. We have filed or contributed to accessibility bug reports and enhancement requests for several products, and have made similar requests for other products via other means. Through the recent grant from Microsoft, we will provide a public case study of the emerging UI Automation API from the perspective of a screen reader and will implement support for UI Automation in NVDA, as well as testing and providing feedback on accessibility in Windows 7.

* Documenting strategies, techniques and examples for implementing optimal accessibility

Although we have certainly participated in discussion about such documentation, we have not written any ourselves at this time.

* Providing tools and consultation to assist application developers in implementing accessibility

NVDA itself serves as an invaluable tool which assists application developers in implementing accessibility. The blog post about Yahoo developers using NVDA cited above is just one example. Integrated tools such as the Python console and the display synthesiser (which displays text that would normally be sent to a synthesiser in a window on the screen) have been very useful to application developers. We have provided advice to developers of software such as foobar2000 seeking to improve accessibility.

Conclusion

With regard to success criteria, the grant proposal stated:

The success of this grant will be determined by the progress of NVDA in general, with particular emphasis on the goals described above, especially those related to Mozilla software. As noted above, due to the new territory being explored, some of these goals may change. However, these goals should be mostly completed, allowing for deviations as appropriate.

Most of the important goals were achieved with great success. Two noteable exceptions are satisfactory support for live regions and rich text editing, both extremely complex undertakings. Some goals were unachievable due to the lack of complete specification or application implementation. In addition, it must again be emphasised that the original grant goals were written for a three year period, rather than the one year covered by this grant. The benefits that NVDA has had for the community are evident in the rapid growth in NVDA's popularity. NVDA 0.6p2 has been downloaded over 18000 times since its release in August 2008. NVDA has also received considerable Recognition, including an article in the press, reviews, testimonials and an award. Given all of these factors, we believe that this grant has been very successful.

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.

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.

NVDA 0.6p2 Passes 10000 Downloads!

There have now been over 10000 downloads of NVDA 0.6p2 since its release on 7 August, less than three months ago. At the time of this writing, there have been 10459 downloads. Thank you to all of you for your support. NVDA certainly wouldn't be what it is without the fantastic community that surrounds it.

Last Week in NVDA (27 Oct)

Probably the most exciting happening last week was the promised merge of initial support for braille displays into the main NVDA code. There is still a lot of work to do, but the current implementation is quite useable. There were quite a few changes after the merge to fix issues and allow braille display support to be included in binary snapshots. Also, Mick added a driver for Freedom Scientific Focus/Pacmate displays, which means these can now be used without installing BRLTTY. There is one particular optimisation yet to be done which should vastly improve the performance of the braille code when the focus changes. Code needs to be added to allow keys on displays to trigger scripts in NVDA so that, for example, pressing a key will move to the previous line. (Scrolling and cursor routing is already possible, but this is currently supported directly in the drivers.) NVDA currently cannot display control fields when reading documents in braille, which means that you cannot identify links, form fields, etc. on web pages. These are just a few of the currently known issues; I'm sure there are many more to be discovered. Nevertheless, it is very exciting to finally have support for braille displays in NVDA. Happy testing!

On a related note, I created an installer for the Windows version of BRLTTY using NSIS. Aside from copying BRLTTY to the system, this installer automatically installs and starts BRLTTY as a service. It does not currently provide any facilities for GUI configuration of BRLTTY. You can download an installer for BRLTTY 3.10-2.

The virtual buffer library refactoring saga continued. Although we had initially intended to integrate the virtual buffer in-process injection code with NVDAHelper, Mick discovered that this was not going to be practical due to the virtual buffer library being separate from NVDAHelper. In order for our initial idea to work, the code needs to be integrated at some level, particularly the build process. Going forward, we will probably end up merging the virtual buffer library into NVDAHelper. This is unfortunate in some ways, as it means that it cannot be distributed as a separate package which is immediately useable by other projects, but it is becoming too difficult to maintain it as a separate library, primarily due to its in-process nature. People will certainly still be able to borrow and reuse the code. All of this aside, Mick was able to successfully create a test virtual buffer and interact with it from another process using the new library. The Gecko back-end still needs to be adapted for the new library. Also, NVDA needs to be updated for the new library. This cannot be done until automatic virtual buffer pass-through is merged with the main code.

There are quite a few questions, problems, etc. that appear time and time again on the NVDA mailing lists. This finally prompted me to create some wiki articles to make this information more readily available.

  • FAQ answers general frequently asked questions about NVDA.
  • ApplicationSupport provides details about NVDA's support for specific applications, including commonly encountered problems and solutions.
  • Troubleshooting provides information about and resolutions for problems commonly encountered by NVDA users.

These are rather limited in content at present, but hopefully, they will grow into useful resources for NVDA users. Please feel free to improve them!

Last Week in NVDA (20 Oct)

The major addition to braille support last week was support for the review cursor. Braille can now be tethered to either the system focus/caret or the review position. When tethered to the review position, the display is updated when the review position changes and the routing keys move the review position if appropriate. Unfortunately, there is currently no user friendly way to change this tether mode; it must be done via the Python console. This will be resolved some time this week. Aside from review support, if a change occurs to an object which is being displayed, the display will be updated accordingly. I also added the ability to display messages which time out after a short period. These messages can be dismissed immediately by pressing a cursor routing key. Scrolling the display left or right causes the timeout to be reset to provide more time to read the message. Many of the scripts in the default appModule, such as NVDA+f12 to read the time/date, now display their messages in braille as well as speaking.

Braille display support is still being developed in a separate branch of the code. It has been difficult to decide when this code should be merged into the main NVDA code. There is still a lot of work to be done and BRLTTY is still quite difficult to set up for most users. On the other hand, there are no serious issues with the current code and I would like it to be tested as much as possible. Mick and I discussed this question at length last week. We decided that the current code will be merged as soon as a couple of issues are resolved. The first is to stop computation of braille when there is no braille display in use, as this is pointless and inefficient. Second, there needs to be a way to switch the cursor to which braille is tethered as discussed above. I will hopefully resolve these issues and merge braille support this week.

Mick's agonising endeavours with the virtual buffer library and RPC continue. We spent some time deciding on how RPC will fit into the library's architecture, as well as determining the programming interface for the library. Unfortunately, rather than Mick being able to dive straight into the implementation as we had hoped, he discovered some very frustrating problems. In technical terms, it seems that if you statically link the C/C++ runtime (which is what we have done previously), you cannot safely manipulate objects from any other dll other than the one in which they were created if they are managed internally in some way by the C/C++ runtime, even though the dlls might be dynamically linked. This probably includes most standard C++ classes and templates. The reason is that when the runtime is statically linked, a separate copy of the runtime is used and each maintains its own internal state separately. This was causing many seemingly random crashes and took quite some time to debug. This isn't a problem if all relevant dlls and applications are dynamically linked against the same runtime. However, this requires that the process into which we are injecting has access to the required runtime dll, which cannot be guaranteed because NVDA might be running portably and thus can't copy files to the Windows system directory. The only solution for us is to statically link the runtime and avoid passing such objects between dlls. If you didn't understand any of this (I bearly understand it myself!), suffice it to say that this is yet another exasperating, convoluted hurdle in a seemingly endless series of such hurdles. Nevertheless, we'll get there... eventually. :)

There were only a few minor changes to the main NVDA code last week:

The hack fest I mentioned last week will happen from 9 to 14 November. We haven't yet written an action plan for this.

Last Week in NVDA (13 Oct)

The major highlight in the land of braille support last week was the implementation of initial support for braille in virtual buffers. The text of virtual buffers is displayed in braille when a virtual buffer gains focus. The virtual caret is tracked, and both scrolling the display and cursor routing can move the virtual caret. NVDA correctly switches between browsing the document and displaying the control with focus when pass through mode is disabled and enabled, respectively. Control field information, such as whether an element is a link, form field, etc., is not yet displayed. Also, controls cannot yet be activated by using the cursor routing keys. Finally, there were some minor fixes to braille in Windows command consoles.

In last week's update, I discussed Mick's work on using remote procedure call (RPC) for inter-process communication. Testing of RPC showed very promising results. Mick implemented NVDAController, a framework using RPC which enables external applications to trigger events inside NVDA appModules. Aside from being a useful feature, this allowed him to familiarise himself with RPC and served as a good practical test of RPC in NVDA. Although this functionality has been tested and does work, it is not yet enabled in NVDA, as its interface is still subject to change. Mick then began to work on converting the virtual buffer library to use RPC.

The major refactoring of the virtual buffer library over the last few weeks has transformed it into a package which differs vastly from the original library. It is almost a completely new library in many ways, as the interface has been rewritten and the package has been reorganised. Furthermore, the use of RPC has eliminated an entire layer of code. The end result for the user will be the same, but the code is very different. Therefore, we have decided to start a new code repository for the library and release it as a new version. Overall, the new version is much cleaner, more organised and better documented.

As usual, there were several minor changes to the main NVDA code that are nevertheless worth noting:

Aside from coding, Mick and I have been working on a presentation for next year's CSUN conference. We are moving further in our transition towards using Bazaar for our version control system. I have written some scripts to keep svn and bzr synchronised, and am in the process of getting Peter set up to use bzr. Finally, Mick and I are both making a presentation in Melbourne in November, so we are going to take the opportunity to have another hack fest.

Last Week in NVDA

I forgot to mention in the last update that Mick changed the way NVDA loads and unloads appModules. NVDA now associates appModules with process IDs, rather than window handles. This makes more sense, as an application is generally a single process. This change means that NVDA no longer needs to search for the main window of an application. Also, it is much more accurate in loading and unloading appModules at the appropriate times. For example, the NVDA appModule is now only loaded once instead of every time the NVDA menu is activated.

Last week, I continued work on implementing braille display support. It's coming along steadily, but there's still a lot to be done. In last week's report, I mentioned a crash in the Windows version of brltty/brlapi. This issue was causing NVDA to lock up intermittently after pressing a key on the braille display. I implemented a temporary work around for this in NVDA which should prevent most of these lock ups, although it still needs to be fixed properly in brltty. I also disabled assertion errors from wx for now, as there is a bug in wx which causes spurious assertion errors to be raised regarding timers under certain circumstances. I improved braille configuration a little, including the addition of a configuration option for the cursor blink rate, although this isn't available in the Braille Settings dialog yet. The display of controls has now been improved so that they now include value, states, description, etc., although this code needs quite a bit more work.

Meanwhile, Mick finished his work on the storage component of the virtual buffer library; i.e. the portion responsible for maintaining the text of the document and answering requests for text in a flat representation. The storage component is now fully object oriented and all of the classes and methods are documented, which will make working with this code much easier for both ourselves and other developers in the future. The Mozilla Gecko back-end still needs to be updated to work with the new storage component.

After Mick finished working on the storage component, he began to consider the mechanism we use for inter-process communication (IPC); i.e. communicating queries and data between different processes. Currently, we use a mix of window messages and reading and writing from remote process memory, which is tedious to code and requires a lot of code duplication. These mechanisms are specific to Windows, which means that the virtual buffer library cannot be used on another operating system. Also, the virtual buffer library and NVDA's other in-process component (NVDAHelper) use completely different code for IPC. We are now considering a mechanism called remote procedure call (RPC), which is designed to handle execution of functions in remote processes and transparently handles the transfer of necessary data between processes. Thus, it is much simpler to code and probably quite well suited to these tasks. NVDAHelper could be responsible for all IPC. NVDAHelper could inject the virtual buffer library into a remote process and set up RPC, thus removing all IPC code from the virtual buffer library and making it mostly platform independent. We also want to use RPC to enable applications to trigger events in NVDA, allowing applications which cannot provide information in other ways to communicate directly with NVDA. This is similar to the external APIs provided by some commercial screen readers, although it is potentially more powerful and flexible. Mick has begun work on a basic RPC implementation, which is looking promising so far.

Aside from these bigger endeavours, there have of course been other smaller changes to the main NVDA code. I made quite a few cosmetic fixes; e.g. fixing spelling errors in method names. Mick fixed a bug in the sapi4activeVoice synthesiser driver which was causing say all to fail. He fixed an issue in say all regarding bookmark values which may have caused certain synthesisers to crash. Mick also fixed a bug whereby no text was being read when reading with the mouse in Mozilla Gecko edit fields. I added events for virtual buffers which indicate when a user moves into or out of a virtual buffer. Aside from allowing for more logical coding of some existing functionality, these events are necessary for braille and may allow for other functionality in future. I also fixed an issue which meant that caret events were not being triggered on the focus object before the first focus change after NVDA was started. This meant that if you were focused on a Windows standard edit control when NVDA was started, text selection changes would not be spoken until the focus had changed at least once.

Last Week in NVDA

Last week, I continued work on implementing braille display support. Early in the week, I introduced code to move the caret to the next or previous line when scrolling the display if it cannot be scrolled any further. I fixed a bug that Mick found in liblouis. Mick and I discussed how to handle the review cursor with regard to braille, although no code has been implemented yet. We spent some time investigating a crash in the Windows version of brltty/brlapi which has been bothering us for weeks. Although we now understand exactly how to reproduce it, we unfortunately don't know how to fix it. My week was divided by an extremely pleasant, relaxing two day holiday with my fiancée.

Mick continued his rather difficult work on the virtual buffer library. We spent several hours on Friday discussing a rather mind boggling piece of code which Mick had been struggling with for days, but we're hoping we finally have it straightened out now. :) He added the ability for the review cursor to review the text of a virtual buffer, rather than just reviewing the internal text of the object, which is not always useful to the user. This means that you can now navigate the buffer hierarchically using object navigation and the review cursor will move to the text at that point in the buffer. Mick also fixed a bug in the speaking of text selections which caused the selection to be read as two chunks instead of one in certain cases.

Last Week in NVDA

First of all, NVDA 0.6p2 is now almost at 6000 downloads (5973 at time of writing)! I'm amazed that it's continuing to increase by almost 1000 downloads a week.

I neglected to mention in my last update that Peter Vágner, primarily known for his fantastic work as our internationalisation coordinator (but also involved in other development), implemented initial code to move the mouse to the character under the review cursor in certain editable text controls. Previously, NVDA could only move the cursor to the centre of the current navigator object. This enhancement allows users to click on specific characters or the character under the cursor, which is necessary in certain situations. It may also be useful for communicating a specific point in a document to sighted observers.

Last week, I primarily continued my work on implementing braille display support in NVDA. When Mick attempted to test the work so far, we discovered that the liblouis Python bindings developed by Eitan Isaacson for Orca misbehave quite severely in Windows Vista. I spent hours on this issue and still could not fathom why this occurs, as they work fine for me in Windows XP and obviously work fine in Linux. I couldn't find anything in the code or build options that should cause problems under Windows Vista. We ended up developing our own bindings using ctypes. This will probably be easier in the longrun anyway, as maintaining and building Python C extensions can be tedious, especially under Windows. I spent quite some time working on some bugs in liblouis. During the week, liblouis 1.3.9 was released, which, among other changes, fixes some issues affecting NVDA which I raised not long before. Thanks, John! Towards the end of the week, I did some more work related to braille and editable text controls, as well as fixing some annoying bugs. My last piece of work for the week was implementing a very basic braille settings dialog, which currently allows the user to choose the braille display and translation table to be used.

As well as helping me to test braille support, Mick continued his refactoring of the virtual buffer library which I described in my last update. He is making steady progress, but there is still quite a bit to be done before a new version of the library containing these changes can be released.

This Week in NVDA

During the arduous task of exasperatedly scouring logs, searching tickets and racking my brains in order to construct my previous, infrequent progress reports, I have promised myself several times that I will endeavour to write more frequent (perhaps even weekly!) progress updates to make the process somewhat less painful. Unfortunately, as is far too common for me in such matters, I've never ended up doing this. Still, there's no time like the present, and if I start now, I might even be able to keep it up.

This last week has been quite mind boggling for both Mick and I, although quite exciting for me in particular. I finally started the eagerly awaited task of implementing support for braille displays in NVDA late last week and have spent the majority of this week continuing this work. Frustratingly, much of the week was spent designing and implementing the core framework which I couldn't test in any realistic, practical situation. However, on Friday, I was finally able to see some of this work come to practical fruition. While certainly not ready for general usage, NVDA can now track the focus on a braille display, displaying the focus object and appropriate ancestors as it changes. You can scroll the display back and forward, and cursor routing keys can be used to activate objects. Where the focus is an editable text field, NVDA can display the text and track the caret, indicating (and optionally blinking) the caret in the appropriate position on the display. In these fields, cursor routing keys can be used to route the caret to the associated position. There is a long way still to go, but it's certainly very exciting to finally be well on the way to supporting braille displays in NVDA. NVDA uses the liblouis braille translation library, which allows for both contracted and uncontracted braille and includes tables for many braille codes. A driver is included for BRLTTY, which supports the vast majority of braille displays.

Meanwhile, Mick has been delving into the depths of the virtual buffer library once again. While investigating the task of implementing support for text formatting, he decided that the core design of the library needed to be restructured and simplified somewhat. Although the current code serves very well, it is not very object oriented and the way it handles text is somewhat convoluted at best, making changes and enhancements difficult. During this week, he has almost completed this rather daunting redesign and has also been taking the opportunity to document the code as he goes. These changes should not be noticeable to users once the work is done, but they will certainly make future work on the library much simpler. I too worked briefly on the virtual buffer library to write some utility code and fix an unexpected bug I discovered.

On another note, NVDA 0.6p2 is fast approaching 5000 downloads! :) It's at 4935 as I write this.

General Progress Update

As usual, a great deal has happened in the last few months. Perhaps the most exciting happening for NVDA users was the release of NVDA 0.6p2, which we believe is a major step forward in stability and functionality for NVDA. As such, NVDA 0.6p2 is now the recommended release for most users. The old stable release, NVDA 0.5, is no longer recommended. This release followed the NVDA hack fest in June, which, as well as a lot of other important discussion, was when the decision to make this release was made.

Many people have asked how many times NVDA has been downloaded. We were obviously quite curious about this ourselves, but we never had a reliable way to count downloads, so we had no idea. Thus, just prior to the release of 0.6p2, I set up a download counter for NVDA releases. We were quite pleasantly astonished by the results. At the time of this writing, since 0.6p2 was released on 7 August, it has been downloaded 3640 times. On average, that's around 1000 downloads per week! It should be noted that this includes downloads of both the installer and the portable release and many users probably download both. The increase is obviously slowing now that the release has been available for a few weeks, but we were still pretty impressed. We honestly had no idea that the count would be this high. Thanks to all who have downloaded! :) The counter also tracks other information such as the country and browser of downloaders, but I haven't generated any statistics for those details yet.

After the release, I spent some time preparing for a presentation on NVDA for Info Vision 08. Info Vision 08 was an exhibition on assistive technology for the blind, visually impaired, deafblind and hearing and visually impaired held at the 7th General Assembly for the World Blind Union in Switzerland. The presentation, which I gave via Skype on 21 August, was quite successful, attracting a decent amount of interest. We will hopefully be able to make a recording available for download some time soon.

In terms of NVDA development, Mick and I have been working on several noteworthy changes to NVDA. We have been doing a lot of this work in different branches of the code, which enables us to make changes which may severely break some functionality without worrying about breaking the main code base used by users. The first of these involved changes to NVDA's audio output code, used primarily by the in-built eSpeak synthesiser. Aside from minor performance and stability improvements, these changes mean that if NVDA is set to use the default Windows output device, it will switch to the new default device if the default device changes. For example, NVDA can switch to a USB audio device automatically when it is connected. Also, the last chunk of audio is no longer cut off when using NVDA with eSpeak on a remote desktop server. This branch was merged into the main code base not long after 0.6p2 was released.

In another branch, we are developing support for multiple input desktops. This will allow NVDA to read secure screens such as the Windows logon screen, the Windows security screen and the UAC (user account control) dialogs in Windows Vista. This must be done quite differently for Windows XP and Vista, but we are working on solutions for both operating systems. So far, the work is looking quite promising and has already received positive feedback from some testers, but is not yet ready for most users.

In the past few weeks, Mick embarked on a major restructure of NVDA's document formatting code. While most of these changes are not particularly noticeable to the user, they will allow for simpler, more elegant additions to formatting support in future, including the ability to support it in virtual buffers. Also, formatting can now be queried and reported automatically in IAccessible2 text controls, including spelling errors in Mozilla Firefox and Thunderbird. This code was merged into the main code base a couple of days ago. Mick is now working on the virtual buffer library and will eventually implement support for formatting, which will complete the work for the Mozilla web access grant.

NVDA's virtual buffer pass through mode, which is equivalent to forms mode or similar in other screen readers, is a point of some controversy for many users. Users must enable virtual buffer pass through when they wish to interact directly with a control and then disable it to resume browsing the document. In terms of useability, one of the reasons for these dual modes of operation relates to quick navigation keys. A user needs to be able to disable the single letter quick navigation keys to type properly into a control. Also, the screen reader needs to have a way to determine when the cursor keys should move the real cursor in a form field and when they should move the virtual cursor. However, screen readers such as Orca and Serotek System Access have used a single mode of operation right from the start. Increasing requests from our users, followed by the introduction of auto forms mode in the recently released JAWS 10 public beta, motivated us to further investigate and work on this feature in NVDA in order to bring it in line with the majority of modern screen readers. Thus, I have been working on automatic virtual buffer pass through over the last couple of weeks. Again, the work is promising, but not yet complete.

Outside of NVDA, there has been some other noteworthy news over the past few months. 17 June saw the official release of Mozilla Firefox 3.0. This was an exciting release for NVDA users, as Firefox 3 includes some major accessibility enhancements which NVDA requires to provide its excellent access to Firefox. Also, the WebVisum Firefox extension was announced in July. WebVisum is a free accessibility extension which sports features such as community driven tagging and page enhancements, automated CAPTCHA solving (yay!), helper functions for easier page navigation, and numerous under the hood page tweaks designed to help screen reader users. Its user community is growing rapidly, and it of course works very well with NVDA! :) Marco Zehe wrote an excellent review of WebVisum.

NVDA 0.6p2 released!

NVDA 0.6p2 has just been released. The release is almost two weeks later than the original estimate proposed at the recent hack fest, as we decided to implement some additional noteworthy features, user interface changes, bug fixes and documentation updates.

Please note that this is a preview release, meaning that there are still some major issues to be fixed before the final 0.6 release. For more information about the current status of releases, see this article. Nevertheless, this release is recommended for most users. The old stable release, 0.5, is no longer recommended.

Download links and change log:

NVDA Featured in Yahoo UI Blog Post About Tab View Accessibility

NVDA features prominently in this post (and accompanying video) on the Yahoo UI blog: Enhancing TabView Accessibility with WAI-ARIA Roles and States

This highlights one of the great benefits and potential uses of NVDA. The fact that NVDA is free and open source software allows developers to test the accessibility of their web sites and/or applications with a fully functional screen reader without having to purchase an expensive product they would not otherwise use.

Aside from the great plug for NVDA (thanks!), this is an excellent, well documented use of WAI-ARIA to improve web accessibility.

NVDA Hack Fest June 2008

Last week, Mick and I met in person in Melbourne, Australia for the second NVDA hack fest. It was a rather intense, brain-melting five days. Despite the name "hack fest", we actually didn't do a great deal of serious coding/hacking. Much of the time was spent in gruelling discussion and debate. We did some long overdue planning of NVDA milestones. In particular, we decided to make another preview release, 0.6p2, to be released by 25 July. We also covered difficult topics such as support for tables, better implementation of formatting support, flexible mapping of widgets to NVDAObjects, centralisation of key bindings for NVDAObjects and virtual buffers, language detection and automatic voice change, live regions, and hierarchical documents (e.g. Lotus Symphony and OpenOffice). See NVDAHackFestJun2008 for full details of the topics and outcomes.

Now Using 7-Zip Self-extracting Archives

We are now using 7-Zip self-extracting archives instead of zip archives; i.e. for portable NVDA snapshots and the NVDA Miscellaneous Dependencies package. 7-Zip archives provide better compression than zip archives and thus facilitate smaller file sizes. Also, self-extracting archives are more convenient for some users. If you want to perform operations other than extracting the entire archive, you can open these archives using 7-Zip.

New NVDA Miscellaneous Dependencies Package (version 2008-06-26-01)

A new version of the NVDA Miscellaneous Dependencies package has been released. This version rearranges some files, which was necessary to fix #122.

This will be included in NVDA snapshots from r2161.

Users running from source must update to this new version if running r2160 or later.

New NVDA Miscellaneous Dependencies Package (version 2008-06-20-01)

A new version of the NVDA Miscellaneous Dependencies package has been released. This includes a new version of the virtual buffer library containing changes necessary for the implementation of the new quick navigation keys outlined in ticket #102. It also introduces a change to allow quick navigation and links list to detect some elements which were previously skipped.

This will be included in NVDA snapshots from r2149.

Users running from source must update to this new version if running r2149 or later.

New NVDA Miscellaneous Dependencies Package (version 2008-06-17-01)

A new version of the NVDA Miscellaneous Dependencies package has been released. This includes a new version of the virtual buffer library. It also includes mfc71.dll, which is required to compile NVDA into an executable and is missing on many systems.

Noteworthy changes in the new version of the virtual buffer library include:

  • Don't render unlabelled, non-interactive (i.e. not linked or clickable) graphics. This removes a lot of unnecessary clutter from many pages.
  • Fix a bug where text would eventually mysteriously disappear for virtual buffers for dynamic sites such as GMail and PennyTel?.
  • Eliminate extraneous whitespace in several circumstances.
  • Treat sections, separators, tables, iframes and unknown objects as block elements. This means that these elements will never be rendered on the same line as another element.
  • Ignore unlabelled graphics inside links if the graphic is not the link's only content and is not clickable.
  • Filter the URL for links with no content in the same way that URLs for graphic links are filtered. Implements #104.
  • Improvements to the method used to avoid rendering invisible elements.
  • Other minor optimisations and fixes.

This will be included in NVDA snapshots from r2138.

New NVDA Web Site Launched

I am happy to announce that we have just launched the new NVDA web site on which we have been working for the past couple of weeks. This new site is based entirely on Trac and integrates all of our web services, including general information pages, downloads, wiki, issue tracker and blog. This allows for seemless referencing and interaction between services, greater community collaboration and ease of maintenance, among other benefits.

Note that www.nvda-project.org is the preferred address for this new site. trac.nvda-project.org redirects to this address.

Feedback is very much welcome.

New NVDA Miscellaneous Dependencies Package (version 2008-05-29-01)

A new version of the NVDA Miscellaneous Dependencies package has been released. This includes a new version of the virtual buffer library.

Highlights include:

  • Fix some potential lag in NVDA on very dynamic sites such as MSDN.
  • Fix crashes on certain sites such as http://www.pennytel.com/.
  • Fix crashes in documents that only contain an empty node.
  • For images which aren't contained within a link, use the URL of the image itself. This means that images which aren't links will now be rendered with some information. Addresses #51.
  • Filter the URLs rendered for images to make them more readable. This should make for much nicer reading on pages with unlabelled graphics. Addresses #51.

This will be included in NVDA snapshots from r2079.

For users running from source, please update to at least r2079 before installing this package.

General Progress Update

It has been quite some time since the last general post. A great deal has happened over the past couple of months, including the CSUN conference and preparation therefor, about which I posted separately. I have thus been dreading writing this, as I struggle to remember some of the minor, but nonetheless important, happenings of the last couple of months.

Perhaps the most exciting work on NVDA has been that relating to the new in-process virtual buffers for Mozilla Gecko 1.9, which includes Firefox 3 and Thunderbird 3. Current NVDA users would certainly be aware of this, even if they haven't tried it personally. NVDA 0.6p1, released just before CSUN, was the first release to feature these new buffers. Aside from massive improvements in reliability and accuracy, the new code allows for almost instantaneous rendering of pages in most cases thanks to its in-process workings. The new code also sports a far better design which makes many exciting features possible that were either impossible or extremely difficult to implement in the old code. For example, it took me only about half an hour to plan and implement the links list, a feature coveted by many users and which I use frequently myself. This was a great reinforcement of our design choices. The code in both the virtual buffer library and NVDA itself has continued to improve steadily since CSUN. While still under steady development, the goals in the web access grant from the Mozilla Foundation are almost complete. One major feature which is currently missing is the ability to efficiently navigate and read tables. Also, NVDA currently does not automatically report changes in live regions, although it does dynamically update the buffer. Nevertheless, Mick and I both use NVDA on the web full time and are very satisfied. Mick, who did the majority of the work on this project, has done an absolutely fantastic job.

Aside from assisting Mick with the virtual buffer work, I have worked on a lot of bug fixes, general improvements and code cleanup. One of the largest of the improvements is perhaps the refactoring of the NVDA GUI, which was included in 0.6p1. The NVDA window is now gone and everything is instead accessed from the NVDA system tray menu. A lot of issues with NVDA windows not gaining focus were fixed. In the last few days, I introduced more fixes in this area, including the elimination of the freezing in NVDA dialogs which occurred on some systems, particularly in Windows Vista. These are important changes in terms of user experience. I have also spent some time working on two tools useful in NVDA development. The log viewer simply allows the user to quickly view the NVDA log file right from the NVDA menu, rather than having to find the NVDA log file and open it with a text editor. It can be refreshed with a single key press and refreshes automatically when switching back to the window. In addition, it allows the user to save the current log content. It is thus useful to both users and developers alike. The other tool is the NVDA Python console, which allows developers to interact with the running internals of NVDA using a Python interpreter. Not only is this extremely useful in debugging NVDA, but it can also assist in inspecting the accessibility architecture of other applications.

I have been holding the fort somewhat more than usual in the last month, as Mick became the proud father of a baby girl in April. Congratulations, Mick! This has been a bit of a challenge for me, as I have had to adapt to working with less of his valuable feedback and collaboration. Even so, despite the exhaustion and chaos of early fatherhood, Mick has still managed to make some very significant contributions to NVDA and has been steadily increasing his working hours over the last couple of weeks.

Other than coding, we have done a lot of work in relation to the NVDA project resources and collaboration tools. I have been strongly encouraging users to use Trac to report issues and Mick and I now make extensive use of it ourselves. Thanks to all of the users who have started to use this resource. It is certainly improving the organisation of the project and makes it much easier for developers and other users to keep track of reported issues. Due to our previous hosting provider becoming ever more unreliable, we moved all of our internet services to a new server. I moved all of the important articles from our old wiki, taken down due to increasing spam and lack of maintenance, to the Trac wiki. Some work still needs to be done to the Trac front page to allow these articles to be found and to provide better direction for new users. I made some long needed updates to the NVDA web site. Most recently, we migrated the NVDA Wordpress blog to Trac, which allows for easier posting, maintenance and integration with the rest of Trac.

Outside of NVDA, both Mick and I have spent a great deal of time testing Mozilla Firefox 3. We have filed several significant bug reports relating to accessibility, some of which have resulted in noteable improvements to Mozilla accessibility, sometimes not just for NVDA, but for other assistive technologies as well. We have continued to attend meetings and contribute to the IAccessible2 effort. Due to the increasing number of external issues we are reporting and tracking, we have started the ExternalBugs wiki page to list and provide links to all of these reports.

Although Mick and I talk via phone on a daily basis, we decided in a recent discussion that we will meet in person for another NVDA hack fest some time in June. We have plans for some major improvements to the core of NVDA; specifically, the creation and handling of NVDAObjects. Topics such as proper support for tables and future plans will also be covered. We will probably make another 0.6 preview release some time over the next few months. I will then embark on implementing support for braille in NVDA.

nvaccess.org and nvda-project.org Moved to New Server

As many of you can probably attest, services on nvda-project.org, including the web site and Trac, have been extremely unreliable over the past few months. There has been frequent downtime, sometimes lasting for hours at a time, and even when services were functional, they were often extremely slow. Thus, a few weeks ago, we decided that it was time to move to a new server. Rather than moving to another service hosting package, we opted for our own virtual server. While this increases the technical administration tedium that Mick and I must endure, it also allows for much greater flexibility.

Despite the rather shaky transition, all services for nvaccess.org and nvda-project.org have now been moved to the new server. There certainly does appear to be a definite improvement in speed and reliability and we're hoping it will continue thus.

CSUN 2008

As I begin writing this, I'm sitting on a plane enduring the 13 hour flight back to Sydney from Los Angeles. As many of you know, the week prior to CSUN was insanely busy, as Mick and I hurried to make the 0.6p1 release in time for the conference. (In fact, we ended up deferring the release until soon after we arrived in the U.S.) CSUN was similarly busy, which, alongside far too little sleep, has left us exhausted. Despite a consequent need for some serious R&R, CSUN 2008 was an absolutely fantastic experience, both for NVDA and for Mick and I personally.

We arrived in L.A. late on Monday morning and were settled into our hotel room by around lunch time. No one else we knew was to arrive before Tuesday afternoon, so we spent the first two days working on some final touches for 0.6p1, which was released some time on Tuesday afternoon. (Unfortunately, we also had to endure a dodgy internet connection during this work, which persisted in its dodginess throughout the week. Arrrg!) We also burnt around 30 CDs containing NVDA, Firefox 3beta4 and information about both for distribution to potential new users whom we encountered during the conference.

10 a.m. on Wednesday morning saw us at the IAccessible2 face to face meeting. This ended up exceeding its 1 hour time slot by almost another hour! Discussion was quite broad, covering IAccessible2 itself but also extending beyond into many other topics relating to open accessibility standards. Nevertheless, i think the meeting was very successful. We were told that IAccessible2 support for OpenOffice?.org would hopefully ship in a 3.x release some time within the next year, which is very exciting. There was a great deal of discussion in terms of the future of IAccessible2, especially relating to the establishment of guidelines beyond the specification for application implementations. Currently, there are widely varying ideas on how IAccessible2 should be implemented, with applications such as Lotus Symphony taking a rather flat approach as compared with Mozilla Gecko's extremely hierarchical approach. Mick and I believe that there need to be guidelines for the ways in which IAccessible2 should be implemented in various applications to prevent this getting out of hand. This idea was met with overall approval and a great deal of discussion ensued as to how this might be achieved. Other issues included problems with the use of IAccessible2 for portable applications and assistive technologies, feedback regarding Accessibility Probe, problems with the dependence of IAccessible 2 on MSAA and potential minor changes to the specification. Aside from the useful outcomes, it was great for me to meet the team behind this excellent accessibility API face to face.

On Wednesday evening, we had a dinner meeting with the NVDA Japanese localisation team. Our meeting spanned several hours, although it was interrupted several times by the need to adjourn to different locations. We discussed the status of the NVDA Japanese localisation and a demonstration was given with a commercial Japanese speech engine. We then covered a couple of localisation problems. The first concerned certain Japanese punctuation marks which aren't handled by the synthesiser used. While we handle expansion of English punctuation marks, there is no provision for doing this for other language specific symbols. Second, we discussed Windows input method editors (IME), which are necessary for entry of characters in pictographic languages such as Japanese. NVDA currently has no support for this. We would certainly like NVDA to support this, so Mick and I asked many general questions about how this works. We then spoke about the possibility of open source Japanese speech synthesisers. Mick and I suggested that efforts be made to improve the current eSpeak Japanese language so that an additional synthesiser would not be needed for Japanese NVDA users. Finally, the team explained the current state of screen readers in Japan. There are no good free alternatives and Japanese commercial screen readers are quite expensive, which is why they believe NVDA is important for Japan. It was a very pleasant meeting and it was great to receive some face to face feedback from a localisation team.

Thursday was the first day on which the exhibit hall was open. We spent much of our time for the remainder of the conference assisting at the Mozilla booth in the exhibit hall, preaching the goodness of Firefox 3 accessibility and, where appropriate, NVDA. We had very few opportunities to actually demonstrate NVDA. On the other hand, we spoke to many people from widely varying groups and levels of experience and gave away most of our CDs. It was humbling and gratifying to have quite a number of people, both users and otherwise, visit just to tell us that they appreciate the work we're doing. A highlight for us was a visit from a group of vision impaired primary school students accompanied by a teacher. She did not know about NVDA and was very pleased when we told her of the project. She told us that it would be great for some of her students whose families probably could not afford to purchase any of the commercial screen readers and took several of our CDS for her students, even coming back to take more for others. This is a fantastic validation of the mission of NV Access and NVDA: to lower the barrier to accessible computing. Furthermore, young students like these are not biased by prior use of another product, so in some ways, they are perhaps most likely to make the most of NVDA.

In terms of Mozilla, many people, existing users and otherwise, were impressed by the new accessibility features in Firefox 3. Being primarily concerned with accessibility for screen reader users, I must confess to having paid little attention to accessibility features for other users. There was a great deal of interest in the new full page zoom feature for low vision users. As well, the rich accessibility API support offered by Firefox 3 has potential benefits for users of voice dictation software. Again, many people visited just to say that they appreciated the work of Mozilla. There was also a great deal of interest in the merchandise up for grabs, which included an abundance of stickers, badges, temporary tattoos and brochures. Almost all of this had been taken by the end of the conference.

Thursday night was spent at a dinner with all of the people assisting at the Mozilla booth. (Well, actually, we first had to endure a rather frustrating, crazy cab ride, but I digress.) Most were either fellow grantees or people otherwise involved with Mozilla who were volunteering. Frank Hecker, the CEO of the Mozilla Foundation, was also present. It was great to spend an evening with such a fantastic, sincere group of people.

On Friday afternoon, we attended the IAccessible2 development panel, a session open to the public in which "Lead software applications and assistive technology developers [got] together to share their experiences in supporting IAccessible2". Present were representatives from IBM, Dolphin, GW Micro, Sun Microsystems, Freedom Scientific, Ai Squared, Adobe Systems and NV Access, with Mick speaking for NV Access. Each spoke a little about their current implementation of or plans to implement IAccessible2 support, some also speaking of their involvement in its design. Mick spoke of the IAccessible2 support in NVDA and why we believe it to be important for accessibility. He mentioned the current shortcomings in NVDA's support, including the lack of support for tables (which, by the way, is something we want to rectify very soon). Most of the assistive technology developers have also implemented at least partial support for IAccessible2, although some currently use it only for certain applications. We learnt that Adobe are starting to implement support, which is great news for us. In the discussion of problems and future plans, Mick raised the issue of the current inability to run IAccessible2 applications and assistive technologies portably due to the need to register a proxy library. A potential solution was proposed, which we have since investigated and found to be quite promising.

As is often the case at such conferences, even socialising after hours provided a fantastic opportunity for networking. One such occasion was a discussion with some of the core development team for Orca, the open source screen reader for the Gnome GUI under Linux and Solaris. One outcome of this discussion was that both teams agreed to try to collaborate wherever possible. We have always been open to such collaboration, but this was a great opportunity to become properly acquainted. On another occasion, we were introduced to the person at Microsoft responsible for accessibility of Internet Explorer 8.

One of the few conference sessions we attended was on Saturday afternoon. This was entitled "Low-Cost and Free Screen Access Solutions Versus Full-Feature Software" and was presented by the National Federation of the Blind. We had no idea whether NVDA would be covered or how it would fare if it was. Initially, we felt that perhaps the description of the free and low-cost solutions as not being "full-featured software" was a bit unfair, but I guess it is true that we still have a lot of work to do to match some of the more expensive products. Conversely, we were pleasantly surprised by the fair demonstration of NVDA. We waited with bated breath to find out which version of NVDA would be demonstrated and were relieved to discover that 0.6p1, the release we had prepared only days earlier, was featured. (NVDA has certainly come a long way since 0.5.) The other featured screen readers were Thunder and Serotek System Access. Overall, it was a worthwhile presentation and I hope it inspired some people to at least give solutions such as NVDA a try.

Over the duration of the conference, we met and conversed with several key accessibility people from large organisations such as IBM, Sun, Adobe and Microsoft. In addition, we spoke to several people who were interested in collaborating with us in some way or potentially distributing NVDA with their products. It was gratifying once again to realise the respect we have attained in the field of accessibility. We were astounded to learn of the amount of interest NVDA has attracted. Mick and I also took the opportunity on occasion to investigate some of the other exhibits.

Overall, CSUN 2008 was a very enjoyable, benefitial and worthwhile experience, both for NVDA and for us personally. I very much hope that both Mick and I are able to attend the conference again next year.

NVDA 0.6p1 Released!

We have just released NVDA 0.6p1. This is a preview release, meaning that there are still major issues to be fixed before the final 0.6 release. However, this provides a preview of some of the new functionality that can be expected in 0.6. This release will be featured at CSUN 2008. For more information about the current status of releases, see this article.

Download links:

NV Access at CSUN 2008

Mick and I will be attending the Technology & Persons with Disabilities Conference (better known as CSUN) commencing in approximately two weeks. Once again, this is thanks to the generosity of the Mozilla Foundation. This should be an exciting event for NVDA, as NVDA has progressed a great deal since last year's conference.

Perhaps the most exciting recent development is the new in-process virtual buffer back-end for Mozilla Gecko 1.9, which is used by Firefox 3 and Thunderbird 3. In practical terms, this means that rendering pages into a virtual buffer in these programs is now practically instantaneous and is far more accurate than the previous code. Although it is not quite yet as stable as we would like, it is almost ready for public testing. We're very keen to show this off at the conference! :) We are also working to address several other items in NVDA prior to CSUN.

Please see CSUN 2008 Plans for more information, including our "to do" list and a rough schedule. If any of you are interested in joining or collaborating with the NVDA project in some way and want to meet at CSUN, please drop Mick and I an email.

My full time work on NVDA commences…

I began working full time for NV Access on NVDA three weeks ago (on Monday, 4 February, to be precise). This was interrupted last week, as I had to work for another week with my previous employer, so I've now been working full time on NVDA for two weeks.

It has certainly been a busy but interesting two weeks. I am obviously quite familiar with the project, given that I have been a core developer almost since the beginning. However, working on a project full time is unsurprisingly somewhat different to casual contribution in one's spare time. Nevertheless, I am very much enjoying the work and am looking forward to realising exciting potential for NVDA as the year progresses.

Mick and I are currently focusing on preparing both ourselves and NVDA for the upcoming Technology & Persons with Disabilities Conference, better known as CSUN. I will post more on this later. I have spent most of my time so far discussing all things NVDA with Mick, fixing small (but nevertheless annoying and problematic) bugs, and helping Mick to test the new virtual buffer code.

I would like to once again extend my personal thanks to the Mozilla Foundation for making this possible. I am extremely grateful for and excited about the opportuni