Re: Request for comments: an outline of a complete course on NVDAinternals and code contributions


For those on devlearning subgroup, you know this: I advised those taking the course to tell NVDA to announce line indentations via speech, a tone or both (I myself use it at times and it is very beneficial in knowing which code block I'm in).

-----Original Message-----
From: [] On Behalf Of Hector Elias
Sent: Monday, August 21, 2017 7:50 AM
Subject: Re: [nvda] Request for comments: an outline of a complete course on NVDAinternals and code contributions

Hello Brian:

I have used a braille display to code with python; however, I mostly code with just speech. What I tend to do is read through the code, and with experience I know what blocks of code need to be indented. I can read by character to count the number of spaces if necessary. As a convention in the books I have read, four spaces are used instead of the tab key.

I hope this helps,

Hector Elias
On Aug 21, 2017, at 2:00 AM, Brian's Mail list account via Groups.Io <> wrote:

Also, I'm of the opinion that many if not all programmers are using Braille displays or can see the screen with sufficient magnification. Is it actually possible to do this with just speech. I'm thinking of the strict syntax and tabs needed for Python to work.
Sent via blueyonder.
Please address personal email to:-, putting 'Brian Gaff'
in the display name field.
----- Original Message ----- From: "Scott VanDeWalle"
To: <>
Sent: Sunday, August 20, 2017 10:46 PM
Subject: Re: [nvda] Request for comments: an outline of a complete
course on NVDAinternals and code contributions

Hello Joseph.
How do I get on that group or in that class? I’d be interested in giving programming another shot. Smile.
Thank you much.\


Sent from Mail for Windows 10

From: Joseph Lee
Sent: Saturday, August 19, 2017 7:44 PM
Subject: [nvda] Request for comments: an outline of a complete course
on NVDAinternals and code contributions

Hi everyone,

Those of you on the users list may have heard about a subgroup over there that aims to teach people how to contribute code to NVDA. After going over some membership intros and looking at skill sets represented, I came up with a rough outline or a six to twelve month course on NVDA code contributions and internals. Obviously most of the course content will require working knowledge of Python, but for those who lack this, I’ve included a one unit outline on Python.


• Title: So you want to improve NVDA with code contributions?
• Instructor: one or more NVDA experts and developers, along with
several Python users as tutors • Purpose: the overall purpose of this course is to equip new developers with knowledge required to provide code contributions to NVDA project. Topics covered include a short review of Python, running NVDA from source code, source code layout and overall architecture, behind the scenes tour of features and commands, as well as things required when contributing code such as identifying, designing, coding, debugging, testing, submitting, maintaining, and explaining new features, changes and bug fixes.
• Goals: have a working knowledge of Python so students can use it in NVDA and other projects; learn the overall purpose and architecture of NVDA; have knowledge of workings of features and commands through reading, understanding and writing source code; learn tips for becoming successful NVDA code contributors who serves the community and improves NVDA; develop critical problem solving and thinking skills required in today’s software engineering projects including that of NVDA.

Course outline:

Unit 0: Review of Python
1. Python is a general-purpose programming language 2. Downloading and
using Python 3. Explain variables, how to import useful modules,
conditionals and loops 4. Learn how to define functions.
5. Design classes and objects
6. Learn to interact with lists, dictionaries, sets, tuples and other
objects of interest 7. Use modules and objects provided by Python to
solve various problems 8. Exercise: random walk on a treadmill 9.
Expected duration: four to six months

Skills test and preview 0: come up with solutions to two other problems via Python, write a design for an add-on, or write about how a student would solve an NVDA issue on GitHub.

Unit 1: Basics and the big picture
1. What screen readers are and are not 2. A portrait of operations of
a screen reader 3. A brief history of NVDA 4. Obtaining NVDA source
code 5. Compiling NVDA’s source code with dependencies 6. Running NVDA
from source for the first time 7. Example of code contribution:
command to restart NVDA with no prompts 8. Expected duration: one

Skills test and preview 1: explain in your own words how you would teach your friend to download NVDA source code.

Unit 2: NVDA at a glance
1. Features overview
2. Source code layout
3. Overall architecture
4. Importance of objects, events, and modules 5. Extensibility through
classes 6. Why accessibility API’s matter 7. Exercise: what is the
code responsible for announcing speech via beeps?
8. Example of code contribution: Popping up browse mode window for
some NVDA messages 9. Expected duration: two months

Skills test and preview 2: in your own words, describe ui.message function.

Unit 3: feature and command internals 1 1. Global commands 2. Focus,
caret, system cursor 3. Object navigation, properties, developer
information and object hierarchy 4. Accessibility API’s 5. Review
cursor and text infos 6. Keyboard, mouse, and touchscreen 7. Basics of
browse mode 8. Exercise: explain how NvDA+T command works to a new
user 9. Example of code contribution: indentation announcement by
tones 10. Expected duration: two to three months

Skills test and preview 3: in your own words, describe either one property of a navigator object or how a first letter navigation command works in browse mode.

Unit 4: Feature and command internals 2 1. App modules, global plugins
and add-ons 2. Speech, braille, and tones 3. Synthesizers and braille
displays 4. Math presentation layer and content recognition framework
5. NVDA dialogs, configuration management, and managing add-ons 6.
Exercise: track down bugs in speech synthesizers 7. Example of code
contribution: Unicode braille output 8. Expected duration: two months

Skills test and preview 4: in your own words, define what a speech synthesizer driver is.

Unit 5: Code contributions
1. Identifying issues and suggestions
2. Designing a problem and its solution(s) 3. Coding a solution 4.
Debugging and testing solutions 5. Effective use of log viewer and
Python Console 6. Submitting, maintaining, and explaining a feature, a
change, or a bug fix 7. Exercise: not all warnings from the log are
fatal 8. Example of code contribution: tab completion in Python
Console 9. Expected duration: two to three months

Skills test and preview 5: write a solution for a minor issue on GitHub or a small add-on that uses any concept from previous units.

Unit 6: Beyond code contributions
1. Translations
2. Documentation
3. Keep in touch with users and others in the community 4. Researching
new ideas alone or in groups 5. Working on collaborative projects 6.
Apply skills from NVDA to other projects 7. Exercise: write an article
explaining inner workings of a community add-on 8. Example of code
contribution: Liblouis project 9. Expected duration: one month

Unit 7 (advanced): thinking outside of NVDA 1. Windows API 2. Python
libraries 3. Dependency checks 4. Using Component Object Model 5.
Using advanced features of accessibility API’s 6. Adding new math
presentation layers and content recognition frameworks 7.
Troubleshooting braille input and output 8. Engaging with the wider
python and programming communities 9. Ethical issues in code
contributions 10. Things to think about when leading or working on an
international software project

Final skills test:
1. From a set of problems dealing with Python, write solutions for two and provide an explanation for one of them.
2. Write an NVDA add-on that utilizes at least two concepts described in one or more units.
3. For a major NVDA GitHub issue, identify, design, code, debug, test, submit, maintain, and explain a solution.

I expect the minimum time to complete this course would be six months (excluding Python intros and advanced topics), with most people taking up to a year to master the concepts above and become comfortable while providing basic code contributions. The Python version to be employed will be a mixture of 2.7 and 3.6.

Comments are appreciated.

Join to automatically receive all group messages.