Topics

Request for comments: an outline of a complete course on NVDA internals 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.

 

Outline:

 

  • 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 month

 

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.

Cheers,

Joseph

Jaffar Sidek
 

Are these courses completely free?  I am just wondering if some donation could be asked for from those interested in the course, and the donation could be used to fund NVDA.  After all, This is an NVDA project and As I see it, The whole course not only encompasses NVDA but python programming in part.  Just a thought to consider to help fund NVDA.


On 20/8/2017 7:44 AM, Joseph Lee wrote:

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.

 

Outline:

 

  • 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 month

 

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.

Cheers,

Joseph


 

Hi,

The course is free.

Cheers,

Joseph

 

From: nvda-addons@nvda-addons.groups.io [mailto:nvda-addons@nvda-addons.groups.io] On Behalf Of Jaffar Sidek
Sent: Saturday, August 19, 2017 9:20 PM
To: nvda-addons@nvda-addons.groups.io
Subject: Re: [nvda-addons] Request for comments: an outline of a complete course on NVDA internals and code contributions

 

Are these courses completely free?  I am just wondering if some donation could be asked for from those interested in the course, and the donation could be used to fund NVDA.  After all, This is an NVDA project and As I see it, The whole course not only encompasses NVDA but python programming in part.  Just a thought to consider to help fund NVDA.

 

On 20/8/2017 7:44 AM, Joseph Lee wrote:

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.

 

Outline:

 

  • 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 month

 

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.

Cheers,

Joseph

 

Robert Hänggi
 

On 20/08/2017, Joseph Lee <@joslee> wrote:
Hi,

The course is free.
That's generous.
After all, the goal is to bring additional contributors to NVDA and
they are sacrificing their time which is in itself a huge donation.
The same is of course true for the instructors.


I would put the introduction to log viewer and Python console into an
earlier unit.
It's fun, it's practical and a major toolkit for all follow-ups.

Robert

> Cheers,

Joseph



From: nvda-addons@nvda-addons.groups.io
[mailto:nvda-addons@nvda-addons.groups.io] On Behalf Of Jaffar Sidek
Sent: Saturday, August 19, 2017 9:20 PM
To: nvda-addons@nvda-addons.groups.io
Subject: Re: [nvda-addons] Request for comments: an outline of a complete
course on NVDA internals and code contributions



Are these courses completely free? I am just wondering if some donation
could be asked for from those interested in the course, and the donation
could be used to fund NVDA. After all, This is an NVDA project and As I
see
it, The whole course not only encompasses NVDA but python programming in
part. Just a thought to consider to help fund NVDA.



On 20/8/2017 7:44 AM, Joseph Lee wrote:

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.



Outline:



* 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 month



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.

Cheers,

Joseph





 

Hi,
Bringing log viewer and Python Console to earlier units: that won't happen until people get a gentle intro to NVDA's architecture and source code layout and grasp Python somewhat. I will integrate both facilities throughout the course (especially during debugging lessons), but there will be a later lesson that'll unlock some advanced features such as tab completions.
Also, one of the reasons why I did not mention these facilities earlier is due to my personal philosophy: the end goal isn't just about NVDA code contributions; rather, it is training people to become proficient at problem solving and critical thinking, as code contribution won't be complete without these. One thing I will stress during this course is that code isn't everything - there are other things to learn and practice as people become familiar with intricacies of code contributions and basics of collaborative software engineering. For this reason, majority of exercises will ask people to write sentences, not code Python modules in order to test if people are really thinking things through. Of course, some difficult exercises will ask people to use Python Console and write code that is really a "short essay" to practice what they've learned, at the same time, I will be asking people to tell me some stories about how they understand what NVDA is doing. In other words, before end of the course, I want prospective code contributors to learn what it is like to be a NVDA developer for a while so they can be better prepared than doing a bunch of coding exercises and remembering recipes without a chance to deepen their understanding.
Cheers,
Joseph

-----Original Message-----
From: nvda-addons@nvda-addons.groups.io [mailto:nvda-addons@nvda-addons.groups.io] On Behalf Of Robert Hänggi
Sent: Sunday, August 20, 2017 12:48 AM
To: nvda-addons@nvda-addons.groups.io
Subject: Re: [nvda-addons] Request for comments: an outline of a complete course on NVDA internals and code contributions

On 20/08/2017, Joseph Lee <@joslee> wrote:
Hi,

The course is free.
That's generous.
After all, the goal is to bring additional contributors to NVDA and they are sacrificing their time which is in itself a huge donation.
The same is of course true for the instructors.


I would put the introduction to log viewer and Python console into an earlier unit.
It's fun, it's practical and a major toolkit for all follow-ups.

Robert

> Cheers,

Joseph



From: nvda-addons@nvda-addons.groups.io
[mailto:nvda-addons@nvda-addons.groups.io] On Behalf Of Jaffar Sidek
Sent: Saturday, August 19, 2017 9:20 PM
To: nvda-addons@nvda-addons.groups.io
Subject: Re: [nvda-addons] Request for comments: an outline of a
complete course on NVDA internals and code contributions



Are these courses completely free? I am just wondering if some
donation could be asked for from those interested in the course, and
the donation could be used to fund NVDA. After all, This is an NVDA
project and As I see it, The whole course not only encompasses NVDA
but python programming in part. Just a thought to consider to help
fund NVDA.



On 20/8/2017 7:44 AM, Joseph Lee wrote:

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.



Outline:



* 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 month



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.

Cheers,

Joseph





Damien Garwood
 

Hi,
This sounds like an excellent idea. If it ever comes into being, I would be more than interested in taking it.
Since I started working with general-purpose programming I began to see that programming was more about the problem-solving than the coding.
I learned so-called “programming” fifteen years ago, which I now realise was only scripting. In my experience, in scripting, you have a strict API to work with, so the problem solving comes more in debugging. Hence, I think, the reason I grasped JAWS scripting in a month, and was writing my own scripts in around three months.
In programming, you need to work out what dependencies to use in order to accomplish a certain task or create a certain product. The only coding you really do is to improve on that dependency, chain it into a meaningful item, and then maintain it, which of course includes bug tracking, working out how you want your release cycles to work, working with version control in order to branch out your code in case you need to fix bugs, work on new features, experiment with new ideas etc, all at the same time without one compromising the other...Since I started looking into all this and realised just how little I knew, almost makes me feel sick.
While I have written a couple of basic NVDA addons, I’m still not overly satisfied with how they function (one available addon definitely has a bug that I’m unsure how to fix, one has problems reported by some users that others including myself don’t have, and some barely work at all hence me not releasing them). Also, coming from a more scripting background, general purpose programming feels, at least to me, like the difference between learning to jump and learning to fly, or stepping up from preschool to university, with very few, if any, resources to bridge that gap.
While I have read several Python tutorials, I still feel like my Python knowledge is very limited. Reading a document can leave gaping holes at the best of times. A small thing can distract you and you can read over a line, knowing you’ve read it but not taking it in. Add the concept of reading it in audio and that becomes even more of an issue. Add in synthetic voices and you’re simply asking for trouble. I have always learned much better with somebody teaching and guiding me through the process – that way I can ask the question right there and then: “What did you mean by ...”
I learned this the other day while writing some of my own articles on various things – make it too short, you don’t fill all the gaps. Make it too long, there’s too much room for distraction meaning you have several square miles of solid golden floor but with areas of useless forgery where you have either made your own theories or don’t know anything at all and wouldn’t know where to start looking because you’ve read the tutorial and didn’t think you saw it there, blah blah.
Also like you said. There’s more than just Python programming. I couldn’t help but be slightly put off, when I first read that you need a Python background to work with NVDA, but then when you look deeper into it you not only need Python knowledge, but Git, automated building environments (Scons, Make, doc generators, and somehow I think that’s also where Appveyor fits in as well) etc. It even looks like some of NVDA is written in C++, a language in which I am even more hazy.
Let’s not forget that it also doesn’t help an out-and-out Windows user such as myself with no Unix experience whatsoever seems to find nothing but Unix resources when it comes to programming. Because let’s face it, Microsoft does seem to be the oddball when it comes with unix systems. Nearly every other system has some form of Unix, whether it be part of the Linux brand, or even the proprietary MacOS.
So yes. The upshot of my long rambling rant of an email. I definitely, definitely think a course would benefit many.
Cheers.
Damien.
 

From: Joseph Lee
Sent: Sunday, August 20, 2017 12:44 AM
Subject: [nvda-addons] Request for comments: an outline of a complete course on NVDA internals 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.

 

Outline:

 

  • 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 month

 

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.

Cheers,

Joseph

Noelia Ruiz
 

Hi, this can be interesting. UnicodeBrailleInput is an excellent example, thanks to Mesar and Patrick. Thanks for choosing it. I was asked privately how to perform add-ons review. Hope that pear review is covered in sections about mantaining, for instance:
- Pear review:
- Purpose.
-- Tools: Commenting pull requests and commits.
-- Guidelines for specific communities.
Example: ConsoleTimer review (or otherone, this was requested and done on GitHub).
- What if contribution is not accepted? Recicling code: Gists.
Possible example: SkipTranslations module (there is an issue and a real gist for this).
I think that many times code cannot be accepted in a project, but can be recicled in an add-on, for instance placeMarkers or whatever, and this is not a failure. Is normal and nothing bad. It could be covered. Chefs

Enviado desde mi iPhone

El 20 ago 2017, a las 1:44, Joseph Lee <joseph.lee22590@...> escribió:

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.

 

Outline:

 

  • 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 month

 

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.

Cheers,

Joseph

 

Hi,

Add-ons review is something that cannot be incorporated easily into the course unless there’s huge demand for it.

Cheers,

Joseph

 

From: nvda-addons@nvda-addons.groups.io [mailto:nvda-addons@nvda-addons.groups.io] On Behalf Of Noelia Ruiz
Sent: Sunday, August 20, 2017 11:05 PM
To: nvda-addons@nvda-addons.groups.io
Subject: Re: [nvda-addons] Request for comments: an outline of a complete course on NVDA internals and code contributions

 

Hi, this can be interesting. UnicodeBrailleInput is an excellent example, thanks to Mesar and Patrick. Thanks for choosing it. I was asked privately how to perform add-ons review. Hope that pear review is covered in sections about mantaining, for instance:

- Pear review:

- Purpose.

-- Tools: Commenting pull requests and commits.

-- Guidelines for specific communities.

Example: ConsoleTimer review (or otherone, this was requested and done on GitHub).

- What if contribution is not accepted? Recicling code: Gists.

Possible example: SkipTranslations module (there is an issue and a real gist for this).

I think that many times code cannot be accepted in a project, but can be recicled in an add-on, for instance placeMarkers or whatever, and this is not a failure. Is normal and nothing bad. It could be covered. Chefs

Enviado desde mi iPhone


El 20 ago 2017, a las 1:44, Joseph Lee <joseph.lee22590@...> escribió:

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.

 

Outline:

 

  • 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 month

 

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.

Cheers,

Joseph

Noelia Ruiz
 

Hi, I supposed it. Anyway, note that ade-on review is just a specific case of my suggestion, related to peer review and possible usage of not accepted code, something probable and normal as part of the contribution process. Cheers 

Enviado desde mi iPhone

El 21 ago 2017, a las 9:40, Joseph Lee <joseph.lee22590@...> escribió:

Hi,

Add-ons review is something that cannot be incorporated easily into the course unless there’s huge demand for it.

Cheers,

Joseph

 

From: nvda-addons@nvda-addons.groups.io [mailto:nvda-addons@nvda-addons.groups.io] On Behalf Of Noelia Ruiz
Sent: Sunday, August 20, 2017 11:05 PM
To: nvda-addons@nvda-addons.groups.io
Subject: Re: [nvda-addons] Request for comments: an outline of a complete course on NVDA internals and code contributions

 

Hi, this can be interesting. UnicodeBrailleInput is an excellent example, thanks to Mesar and Patrick. Thanks for choosing it. I was asked privately how to perform add-ons review. Hope that pear review is covered in sections about mantaining, for instance:

- Pear review:

- Purpose.

-- Tools: Commenting pull requests and commits.

-- Guidelines for specific communities.

Example: ConsoleTimer review (or otherone, this was requested and done on GitHub).

- What if contribution is not accepted? Recicling code: Gists.

Possible example: SkipTranslations module (there is an issue and a real gist for this).

I think that many times code cannot be accepted in a project, but can be recicled in an add-on, for instance placeMarkers or whatever, and this is not a failure. Is normal and nothing bad. It could be covered. Chefs

Enviado desde mi iPhone


El 20 ago 2017, a las 1:44, Joseph Lee <joseph.lee22590@...> escribió:

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.

 

Outline:

 

  • 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 month

 

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.

Cheers,

Joseph

James Scholes
 

Joseph Lee wrote:
Add-ons review is something that cannot be incorporated easily into the course unless there’s huge demand for it.
Add-on reviews are extremely helpful to the community, not to mention being a great source of learning for people who are new to programming or to add-on creation, the very same audience that your course is aimed at. This topic would fit perfectly into unit 6 and shouldn't be excluded.

Code review is an important software development skill, especially when working within a team or on a community-driven project. So at the very least you should probably explain in a bit more detail why you're not kean on teaching it.
--
James Scholes
http://twitter.com/JamesScholes

Noelia Ruiz
 

i agree with James. Code review is something expected to be found when a contribution is submitted, aand even something to be done as a contribution. Also, hight demand is important, but it should not be just a cause todo things, since it can be also an effect of the skills or practices present in communities: something wont probably be requested if it is not promoted or known. Sorry for my possible failures writing: I am learning this mobile device. Cheers

Enviado desde mi iPhone

El 21 ago 2017, a las 12:45, James Scholes <james@...> escribió:

Joseph Lee wrote:
Add-ons review is something that cannot be incorporated easily into the course unless there’s huge demand for it.
Add-on reviews are extremely helpful to the community, not to mention being a great source of learning for people who are new to programming or to add-on creation, the very same audience that your course is aimed at. This topic would fit perfectly into unit 6 and shouldn't be excluded.

Code review is an important software development skill, especially when working within a team or on a community-driven project. So at the very least you should probably explain in a bit more detail why you're not kean on teaching it.
--
James Scholes
http://twitter.com/JamesScholes


 

Hi,
Mostly because the content isn't quite solid yet. I do want to bring up code review at some point when people start on projects, but the priority at the moment is to find out how much people know and who is actually willing to invest time to learn the craft (because I do know that at least one person thinks coding is a fairy tale when it is not). I do agree that code review is an essential part of a good project, so I'll find a way to incorporate this into the course (perhaps earlier than unit 6).
Cheers,
Joseph

-----Original Message-----
From: nvda-addons@nvda-addons.groups.io [mailto:nvda-addons@nvda-addons.groups.io] On Behalf Of James Scholes
Sent: Monday, August 21, 2017 3:45 AM
To: nvda-addons@nvda-addons.groups.io
Subject: Re: [nvda-addons] Request for comments: an outline of a complete course on NVDA internals and code contributions

Joseph Lee wrote:
Add-ons review is something that cannot be incorporated easily into
the course unless there’s huge demand for it.
Add-on reviews are extremely helpful to the community, not to mention being a great source of learning for people who are new to programming or to add-on creation, the very same audience that your course is aimed at. This topic would fit perfectly into unit 6 and shouldn't be excluded.

Code review is an important software development skill, especially when working within a team or on a community-driven project. So at the very least you should probably explain in a bit more detail why you're not kean on teaching it.
--
James Scholes
http://twitter.com/JamesScholes

 

Hi,
No need to apologize about bad writing from mobile devices, as I understand what you're saying.
Cheers,
Joseph

-----Original Message-----
From: nvda-addons@nvda-addons.groups.io [mailto:nvda-addons@nvda-addons.groups.io] On Behalf Of Noelia Ruiz
Sent: Monday, August 21, 2017 4:04 AM
To: nvda-addons@nvda-addons.groups.io
Subject: Re: [nvda-addons] Request for comments: an outline of a complete course on NVDA internals and code contributions

i agree with James. Code review is something expected to be found when a contribution is submitted, aand even something to be done as a contribution. Also, hight demand is important, but it should not be just a cause todo things, since it can be also an effect of the skills or practices present in communities: something wont probably be requested if it is not promoted or known. Sorry for my possible failures writing: I am learning this mobile device. Cheers

Enviado desde mi iPhone

El 21 ago 2017, a las 12:45, James Scholes <james@...> escribió:

Joseph Lee wrote:
Add-ons review is something that cannot be incorporated easily into the course unless there’s huge demand for it.
Add-on reviews are extremely helpful to the community, not to mention being a great source of learning for people who are new to programming or to add-on creation, the very same audience that your course is aimed at. This topic would fit perfectly into unit 6 and shouldn't be excluded.

Code review is an important software development skill, especially when working within a team or on a community-driven project. So at the very least you should probably explain in a bit more detail why you're not kean on teaching it.
--
James Scholes
http://twitter.com/JamesScholes


derek riemer
 

I also think it would be invaluable to add. Also, watching people do code reviews teaches you about good coding practice, so even showing people how to watch code reviews would be helpful.

On Mon, Aug 21, 2017 at 4:45 AM, James Scholes <james@...> wrote:
Joseph Lee wrote:
Add-ons review is something that cannot be incorporated easily into the course unless there’s huge demand for it.
Add-on reviews are extremely helpful to the community, not to mention being a great source of learning for people who are new to programming or to add-on creation, the very same audience that your course is aimed at.  This topic would fit perfectly into unit 6 and shouldn't be excluded.

Code review is an important software development skill, especially when working within a team or on a community-driven project.  So at the very least you should probably explain in a bit more detail why you're not kean on teaching it.
--
James Scholes
http://twitter.com/JamesScholes






--

Derek Riemer: Improving the world one byte at a time!

  • University of Colorado Boulder Department of computer science, 4th year undergraduate student.
  • Accessibility enthusiast.
  • Proud user of the NVDA screen reader.
  • Open source enthusiast.
  • Skier.

Personal website


Noelia Ruiz
 

thanks. Also regexpr could be helpful. I would want to participate deppending on the format of the course. For time and flexibility. I am especially interested in math presentation and learning to write good documentation. Perhaps you could use Gitbook to make a book available on GitHub, as Progit. Of course, this is generous and if you accept some donation is OK. Cheers

Enviado desde mi iPhone

El 21 ago 2017, a las 17:30, derek riemer <driemer.riemer@...> escribió:

I also think it would be invaluable to add. Also, watching people do code reviews teaches you about good coding practice, so even showing people how to watch code reviews would be helpful.

On Mon, Aug 21, 2017 at 4:45 AM, James Scholes <james@...> wrote:
Joseph Lee wrote:
Add-ons review is something that cannot be incorporated easily into the course unless there’s huge demand for it.
Add-on reviews are extremely helpful to the community, not to mention being a great source of learning for people who are new to programming or to add-on creation, the very same audience that your course is aimed at.  This topic would fit perfectly into unit 6 and shouldn't be excluded.

Code review is an important software development skill, especially when working within a team or on a community-driven project.  So at the very least you should probably explain in a bit more detail why you're not kean on teaching it.
--
James Scholes
http://twitter.com/JamesScholes






--

Derek Riemer: Improving the world one byte at a time!

  • University of Colorado Boulder Department of computer science, 4th year undergraduate student.
  • Accessibility enthusiast.
  • Proud user of the NVDA screen reader.
  • Open source enthusiast.
  • Skier.

Personal website


Adil Shaikh
 
Edited



 Hi, I'm new to the list and I've been looking for resource to understand how NVDA works internally and I land on this post.  
I would  like to ask, is there any update on this course?
is course content being developed?
I truely want to learn and give back to community, but my current skills don't allow me to do that as I have little understanding of windows api, com objects and stuff like that. even, I wouldn't mind donating a bit if I have to.

Venkatesh Potluri
 

A course on NVDA is very interesting. Is this effort being actively worked on, and is there a different list where these discussions are taking place? I would be interested in this both as a student, and to understand feasibility of NVDA as a platform to teach accessibility.

Please excuse the brevity as this message was dictated or touch-typed on my phone.
Best regards,
Venkatesh Potluri
https://venkateshpotluri.me

On May 17, 2020, at 12:39 PM, Adil Shaikh <ah.shaikh97@...> wrote:



[Edited Message Follows]



 Hi, I'm new to the list and I've been looking for resource to understand how NVDA works internally and I land on this post.  
I would  like to ask, is there any update on this course?
is course content being developed?
I truely want to learn and give back to community, but my current skills don't allow me to do that as I have little understanding of windows api, com objects and stuff like that. even, I wouldn't mind donating a bit if I have to.

 

Hi,

The course is done – the only thing to be done is publish the course archive. This will take time, as the archive needs to be updated to talk about Python 3 (the course took place at a time when Python 2 was still supported, and many things have changed since then).

As for me hosting another course, highly unlikely for a while unless there is overwhelming need from the NVDA community. Also, the focus might shift – the thing I’m desperate to teach is teaching others to teach NVDA internals, or in the context of this list, talking about how to teach more people how to think as an add-on author and reviewer (my time on the NVDA world is slowly coming to a close).

Cheers,

Joseph

 

From: nvda-addons@nvda-addons.groups.io <nvda-addons@nvda-addons.groups.io> On Behalf Of Adil Shaikh
Sent: Sunday, May 17, 2020 12:37 PM
To: nvda-addons@nvda-addons.groups.io
Subject: Re: [nvda-addons] Request for comments: an outline of a complete course on NVDA internals and code contributions

 

[Edited Message Follows]



 Hi, I'm new to the list and I've been looking for resource to understand how NVDA works internally and I land on this post.  
I would  like to ask, is there any update on this course?
is course content being developed?
I truely want to learn and give back to community, but my current skills don't allow me to do that as I have little understanding of windows api, com objects and stuff like that. even, I wouldn't mind donating a bit if I have to.