NVDA: A Python-based Screen Reader Providing Access to Computers for the Blind
Director /Software Developer, NV Access Limited
Co-lead Developer of the NVDA Screen Reader
Who is NV Access?
- An Australian non-profit organisation founded in 2007 by Michael Curran, James Teh and others
- Develops the free NVDA screen reading software, allowing the blind and vision impaired equal access to computers around the world.
- www.nvaccess.org
Our Philosophy
- Primary mission: to lower the barrier to accessible computing
- Existing screen reading software can cost thousands of dollars
- We believe that accessibility should not be an extra cost for the user
- Free and open source software can best further this goal
Our Business Model
- Procures funding, employs developers and provides admin/management
- Funded through grants, contracts and donations
- Has received support from organisations such as Mozilla, Adobe, Yahoo! and Microsoft
What is NVDA?
- NonVisual Desktop Access
- Free, open source screen reader for Microsoft Windows, written mostly in Python
- www.nvda-project.org
- Allows blind/vision impaired users to access the Windows Operating System and 3rd party applications
- Allows the user to "read the screen" via synthetic speech or Braille output
NVDA Features
- Zero cost!
- Multilingual: translated into over 30 languages
- Portability: can run entirely from a USB drive
- Automatic update system
- Support for Windows XP through Windows 8 (32 and 64 bit)
Application support
- Web/document browsers: Mozilla Firefox, Microsoft Internet Explorer, Adobe Reader
- Email clients: Mozilla Thunderbird, Microsoft Outlook, Outlook Express/Windows Mail, Windows Live Mail
- Office suites: IBM Lotus Symphony, Microsoft Office Word/Excel
- Support for Windows Command Prompt and console applications
- RIA frameworks: Adobe Flash, Adobe AIR
NVDA Features
- Announcement of controls and content as the keyboard focus or system caret moves
- Announcement of textual formatting; e.g. font name/size, style, spelling errors
- Announcement of text under the mouse
- Independent object navigation and review
How is NVDA Being Used?
- By home users: email, news, music, finance, shopping, social, etc.
- By students: school and university
- In the workplace, including By those who are self-employed, particularly in IT
- People on the go: public library computers, Internet Cafes
- Software and website accessibility testing: e.g. Yahoo!, Microsoft
Code and project Management
- Managed with Bazaar DCVS
- GNU General Public License
- Releases and core development managed by NV Access
- Code contributions and translations from around the world (over 100 contributors)
- Project services powered by Python packages: Trac, WSGI, Psycopg2, Mailman, Genshi
How is Python Used?
- The core
- the GUI (via WXPython)
- Speech Synthesiser and Braille Display drivers
- Keyboard, Braille and touch screen input gestures
How is Python Used?
- Application specific and control specific logic (NVDA objects, App modules, Global plugins, Tree interceptors)
- Support for Win32 and accessibility-specific APIs through both ctypes and comtypes packages
- Configuration via configObj module
- External add-ons
- The build process (via SCons, Py2exe).
Where is Python not Used?
- C++ is used in several places:
- building of large document representations by walking an entire DOM tree
- Detection of GDI display information by hooking low-level Win32 functions
- Code injected into other processes to increase performance or to bypass securityrestrictions when retreaving screen content
- MSRPC client/server stubs for cross-process communication for both internal and external usage
Why was Python Chosen?
- Extremely fast and simple to prototype/develop
- Allows for modular, object oriented, abstract design
- Ability to interface with other 3rd party libraries and APIs via ctypes and comtypes packages
- Ability to load external code at runtime for scripting.
Python-specific Features Used by NVDA
- Multiple inheritence (NVDA objects, app modules etc)
- ctypes: including structures, callbacks, complex C function declarations
- metaclasses: property generation, dynamic base class selection (NVDA objects)
- Custom descriptors allowing overridable, cacheable properties (NVDA objects, app modules etc)
- Class mutation (enhansement by App modules and global plugins)
Development and Bug Tracking
- Bugs and enhansements tracked with the Python-based Trac system
- Detailed logging via Python logging framework
- In-built Python console allowing for inspection of internal state at runtime
- WinDBG Windows process debugger
History
- As a blind person, I did not want to pay thousands of dollars for a screen reader
- Free unrestricted screen readers existed for Linux/Mac, not for Windows
- April 2006: I started the code
- July 2006: James Teh joined the project
History
- Mozilla took interest; wanted it to support Firefox, sent me to CSUN conference
- Creation of the NV Access organisation to support NVDA
- James began working on project full time; thanks to Mozilla funding
- Funding from Microsoft to support IE and UIA; provided full-time employment for me
- Continuing support from Adobe and Mozilla
History - Python
- Started developing NVDA with Python 2.4
- No ctypes
- Relied on many external extensions: PyAA, PyTTS, PyWin32
- This allowed for quick and dirty implementation
History - Python
- Moved to Python 2.5
- Now could use ctypes instead of many 3rd party Python extensions
- Now faster bug fixes, not locked to one Python minor version, performance increases in specific situations
- Replaced win32com (PyWin32) with comtypes
Present and Future - Python
- Currently using Python 2.7
- Wish to move to Python 3 but waiting for WX and Py2exe
- Python 3's unicode support would improve string handling significantly