Posts in category GeneralNews

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 opportunity to devote all of my working hours to further develop NVDA.

Mozilla Foundation grant allows for employment of NVDA full-time developer

Thanks to the generocity and support of the Mozilla Foundation NV Access has been able to hire James Teh as a full-time developer to work on NVDA. The Mozilla Foundation has taken a keen interest in NVDA as one of NVDA's goals is to provide excellent support for Mozilla products, such as Firefox and Thunderbird.

The grant (which provides NV Access with US$80,000 over 2008) allows NV Access to employ James Teh (Jamie) full-time to work on improving and maintaining NVDA, with a major focus on Mozilla products. The grant will be also used to cover overheads for the running of NV Access, which a part from general administration, also includes project promotion and the seeking of further funding.

NV Access and Mozilla worked together to draw up a list of grant goals for NVDA, which both organizations see as the most important things that should be achieved to make the project a success. Although the grant will be reviewed before the end of this year, all the goals listed are to be completed with in a three year timeline.

Jamie will hopefully be starting work in the next month or so, once all the admin has been organized. I for one am very excited to have Jamie join the project on a much more full-time basis, and I know he is also very excited to be able to put all his working time to open-source projects that hopefully can improve the lives of people in the community in some way.

On behalf of NV Access, and the other developers of NVDA I would like to thank the Mozilla Foundation for its support over the last year. Together we can make sure that blind users will always have both a free choice when it comes to access to applications on the Microsoft Windows Operating System, and also a choice to move forward with the rest of the community, to use free and open-source products (such as Firefox and Thunderbird).

A Server for building and testing NVDA

Over the last week or so, I have been busily setting up the new testing/development server that was kindly donated to NV Access. This server is going to be used as a server for the organization: hosting a virtual private network, allowing for the collaboration of business-related work and access to NVAccess's printer/copier/scanner/fax (bought through an Australian government grant). But more importantly it will be used as a testing/development server. Once its finally set up, this server will be able to automatically build daily snapshots of NVDA (if the source code changes), and also hopefully run some automated tests on the snapshots, to make sure that changes made don't break any previous changes.

Hardware-wise, the server has a Pentium 4, 3.20 GHz processor, and 1 gig of ram. Previously it did have 2 gigs, but the second chip seemed to be not very healthy, and after taxing the memory quite a bit the other day, we were getting all sorts of fun errors, so for now that chip has been removed. It has two hard drives, one 40 gig for the main Operating System and applications, and an 80 gig for files and Virtual machines for building/testing. It also has no shortage of USB sockets, in fact I already took out one card that had four on it. It has a floppy drive, sound card, and two network cards (one for access to the internet and my home network, and one purely for NV Access, to access the printer, and any other NV Access specific devices).

I have installed Ubuntu Linux 7.10 as the server's Operating System. We chose this OS because a: both Jamie and I are used to using Debian Linux (which Ubuntu is based on) and B: Ubuntu's accessibility seems to be growing all the time. And as NV Access, this is something we'd like to keep an eye on.

For testing and building NVDA, we are going to run MS Windows inside VMWare. For those who don't know, VMWare is software that emulates an entire computer system, so you can run one operating system, inside another. There is a free version of VMWare for Linux, which suits our needs, and I have successfully installed it and its running quite nicely on the server now.

Although the server is pretty much all set up, we're still a little way off from complete automated building/testing of NVDA. One thing that needs to be completed is the re-writing of the build scripts Jamie currently uses to build NVDA snapshots on his laptop. The plan is that we'd no longer like to keep compiled copies of eSpeak, charHook, keyHook and the virtual buffer library in subversion, but instead build them along with the snapshots, and have them all included in the snapshots, and also as a separate download so that people can still run from source. However the most important part holding us back is getting access to the MS Windows Operating System, so we can install it in the virtual machines on the server. I have tested virtual machines with some other free operating systems such as Ubuntu and Gentoo Linux so I know they work, but over the next little while NV Access would like to investigate how to acquire licensed copies of the needed Windows versions. We plan to build the snapshots in Windows XP, though we would much like to be able to test NVDA with Windows 2000, Windows Vista, possibly Windows 98/ME. Of course testing MS Office would be also very useful.

Many thanks go to the donator of the server, already we are seeing just how useful it is, plus we believe it really will change the way NVDA development happens in the future.

One other advantage of the server running Ubuntu is that I'm able to run Orca (a Gnome X-Windows screen reader for Linux / Solaris). Both the Orca and NVDA projects do have many things in common (as they are both free and open-source screen readers), and even though they are written for two entirely different operating systems, there should be much the projects can learn from each other, both in coding and user experience. I recently tested Orca with Firefox 3, and it is very clear that orca's web support is coming in leaps and bounds.

Other than server stuff, I of course have been working on the new virtual buffer library for NVDA. Work is slow but I'm definitely getting there. Design decisions need to be made very carefully as we need to make sure the code is as efficient as possible, but also make sure it will be compatible with lots of different web content.

NVDA at BCA Technology Expo and NVDA Summit

Last weekend, I flew to Melbourne, Australia (I live in Brisbane) for two exciting events related to NVDA.

On Friday, Mick, Amy, Matt and I attended the Blind Citizens Australia Technology Expo held prior to the BCA national convention, where we staffed a booth for NV Access. Mick and I were providing one on one demonstrations of NVDA under both Windows XP and Vista. We were a bit concerned about the lack of interest for the first hour and a half or so, but after that, things started to heat up. People from widely varying backgrounds and degrees of computing experience visited the booth. We made between six and eight demonstrations (I can't remember the exact number), some of which were quite detailed. Between 15 and 20 people provided us with contact details, requesting further information. We also spoke to several people who were interested in passing the word about NVDA to larger numbers of people through various channels. Everyone was quite impressed by the project and most were somewhat astonished by its $0 price tag. :) Overall, it was a valuable, worthwhile experience. The interest we attracted was somewhat heartening. I think Mick and I learnt a lot about presenting the project to prospective users and other interested parties. We had also underestimated the potential for networking with people who can help further spread the word.

All of Saturday and Sunday morning was devoted to what we are calling an "NVDA Summit" or hack fest. Mick and I sat in his lounge room discussing, coding, living and breathing NVDA... as well as eating Amy's yummy, home-made cookies, among other delicious morsels. (Thanks Amy!) We covered quite a lot of ground, answering all but one of the items on our agenda. The agenda and outcomes are outlined here. Aside from this agenda and discussion of the direction of NVDA in general, the time allowed us to revitalise our working relationship and zeal for the project. It also enabled me to familiarise myself with complex parts of the code which I haven't had a chance to examine in detail due to being somewhat busy with other things of late.

The benefits of this "summit" are already being realised. This week, we have made major leaps forward with regard to the way we read dialogs. Rather than reading the entire dialog or only the dialog title and the current control, we attempt to read the descriptive text or query and then the focused control. This makes for a much nicer user experience when using most dialogs. Also, we have found and squashed a major memory leak which has been plaguing us for a while now. We have improved the speed and accuracy of cursor keys and backspace and delete, although backspace and delete still need some work.

These two events were made possible by many generous donations to NV Access. Many thanks to everyone who has donated.