FW: [nvda] How NVDA works: feature development

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

FW: [nvda] How NVDA works: feature development

Joseph Lee

Hi,

 

Sorry for a possible duplicate (for those on the users list).

 

I posted the below note to the NVDA users list hosted at Groups.IO, but figured some of you (especially those coming from other screen readers) might be interested in reading it. This is sort of a partial fruition of a long-time wish: having the time to write notes on internals of NVDA features. I’ll try my best to include relevant code fragment from NVDA source code if the need arises, but I hope this could serve as yet another resource for those who want to dive deeper into NVDA’s inner workings. And yes, one day, I’ll write about how search suggestion sounds work (I am the main architect of that feature, and this feature is under alpha-level testing at the moment in recent next branch snapshots).


Enjoy.

 

From: [hidden email] [mailto:[hidden email]] On Behalf Of Joseph Lee
Sent: Thursday, June 1, 2017 10:03 PM
To: [hidden email]
Subject: [nvda] How NVDA works: feature development

 

Hi everyone,

 

A few days ago I posted on the NVDA development list that I’ll be sending a message about feature development on the users list. Then I thought about making this a regular series in hopes that users would understand how NVDA works and appreciate the work that goes on behind the scenes.

 

But before I do so, an important announcement:

 

ACB Radio’s Main Menu for June 2nd will be devoted to NVDACon 2017 keynote. You can go to acbradio.org to listen to the show at 6 PM Pacific (9 PM Eastern and other times elsewhere).

 

Back to the subject at hand:

 

Recently, NV Access has set out to improve their brand image, and one of them was deployed on NVDA alpha builds not long ago: new sounds. I’m sure some of you may have tasted it, and for those who didn’t, don’t worry, it’ll come to you at a later date.

 

One of the questions that came up during our discussion of new sounds was feature development. As an answer, I’d like to give you an overview of how a feature is born and make it to NVDA stable builds, with a recent addition of ability to disable add-ons as an example (a feature I enjoyed implementing and had massive impact on your NVDA lives).

 

In 2013, I posted a suggestion to an older bug tracking system NV Access employed, asking if there could be a way to disable individual add-ons. I forgot about this suggestion until last year when I somehow stumbled upon that issue. Thus began a journey to bring this feature to life, culminating in NVDA 2016.3 release where it did come to life.

 

To start with, I’d like to say that developing features in NVDA is fun yet challenging. You get to learn how certain things work behind the scenes, yet at the same time you are responsible to making sure your code doesn’t ruin someone’s hard work at his or her office. In other words, every code fragment you write impacts someone, and I can give you various examples regarding this (both from NVDA Core development and in add-ons world).

 

In regards to feature development, I didn’t start coding right away. I began with writing specifications, imagining how users would use this functionality. I then presented a prototype, then set out to incorporating it into NVDA itself, then went through a rigorous code review process. After months of work, the feature finally made it to NVDA master branch, and eventually it landed as part of NVDA 2016.3.

 

The ability to disable individual add-ons works by checking if an add-on is part of a set of add-ons that should be disabled at startup. By disabling add-ons, you’re effectively telling NVDA, “I want this add-on to be included in a set of disabled add-ons” and vice versa (if you’re enabling add-ons). In order to avoid technical issues encountered when NVDA resumes from a crash, I told NVDA to save this disabled add-ons set to disk when you exit add-ons manager after enabling or disabling add-ons.

 

Originally, I didn’t allow you to use shortcut commands to enable or disable add-ons from add-ons manager. However, some felt that it would be best to add one, so someone else came along and added that enhancement. The hotkey did make it to NVDA 2016.4.

 

Reference:

 

I hope to present a series of posts like this that explains how features in NVDA work behind the scenes, along with a backstage tour of how they were developed. Please let me know the next feature I should talk about, and if it’s something I don’t know, I’ll try my best to have an expert or the actual feature developer to explain it to you. And yes, one of the future installments might be the ongoing saga of search suggestion sounds.

 

Suggestion for Quentin: If you believe this would be something In-Process would like to talk about, please feel free to incorporate them.

 

Cheers,

Joseph

_._,_._,_


Groups.io Links:

You receive all messages sent to this group.

View/Reply Online (#19310) | [hidden email] | [hidden email] | Mute This Topic | New Topic

NVDA on groups.io

NVDA is developed by NV Access in collaboration with the community.
Get NVDA from: http://www.nvaccess.org/
Your continued donations help keep NVDA development going strong. Donate at:
http://www.nvaccess.org/donate
Other links:
Come talk with other NVDA users on irc.blufudge.net #NVDA
Get NVDA add-ons at:
http://addons.nvda-project.org/
NVDA on Facebook:
http://www.facebook.com/group.php?gid=8601265515
Get SkypeTalking for NVDA:
http://skypetalking.googlecode.com/

Change Your Subscription
Group Home
[hidden email]
Terms Of Service
Unsubscribe From This Group

_._,_._,_


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Nvda-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/nvda-devel
Reply | Threaded
Open this post in threaded view
|

Re: FW: [nvda] How NVDA works: feature development

Noelia
Hi, hope a more complete development guide can be posted and updated.
But I feel that these posts can be useful at least for scripters of
other screen reader, so that they can also share their aknowledgement.
I think that a useful thing is talking about textInfos, as you mention
in your guide, since it can be used for common keys as get a line, a
character, moving, etc, and this is included with hight level functions
in JAWS, if things haven't changed.
I can try to talk about placeMarkers, but I'm sure that you can write
better material.
Cheers.

El 02/06/2017 a las 7:11, Joseph Lee escribió:

> Hi,
>
>
>
> Sorry for a possible duplicate (for those on the users list).
>
>
>
> I posted the below note to the NVDA users list hosted at Groups.IO, but
> figured some of you (especially those coming from other screen readers)
> might be interested in reading it. This is sort of a partial fruition of
> a long-time wish: having the time to write notes on internals of NVDA
> features. I’ll try my best to include relevant code fragment from NVDA
> source code if the need arises, but I hope this could serve as yet
> another resource for those who want to dive deeper into NVDA’s inner
> workings. And yes, one day, I’ll write about how search suggestion
> sounds work (I am the main architect of that feature, and this feature
> is under alpha-level testing at the moment in recent next branch snapshots).
>
>
> Enjoy.
>
>
>
> *From:* [hidden email] [mailto:[hidden email]] *On Behalf Of
> *Joseph Lee
> *Sent:* Thursday, June 1, 2017 10:03 PM
> *To:* [hidden email]
> *Subject:* [nvda] How NVDA works: feature development
>
>
>
> Hi everyone,
>
>
>
> A few days ago I posted on the NVDA development list that I’ll be
> sending a message about feature development on the users list. Then I
> thought about making this a regular series in hopes that users would
> understand how NVDA works and appreciate the work that goes on behind
> the scenes.
>
>
>
> But before I do so, an important announcement:
>
>
>
> ACB Radio’s Main Menu for June 2^nd will be devoted to NVDACon 2017
> keynote. You can go to acbradio.org to listen to the show at 6 PM
> Pacific (9 PM Eastern and other times elsewhere).
>
>
>
> Back to the subject at hand:
>
>
>
> Recently, NV Access has set out to improve their brand image, and one of
> them was deployed on NVDA alpha builds not long ago: new sounds. I’m
> sure some of you may have tasted it, and for those who didn’t, don’t
> worry, it’ll come to you at a later date.
>
>
>
> One of the questions that came up during our discussion of new sounds
> was feature development. As an answer, I’d like to give you an overview
> of how a feature is born and make it to NVDA stable builds, with a
> recent addition of ability to disable add-ons as an example (a feature I
> enjoyed implementing and had massive impact on your NVDA lives).
>
>
>
> In 2013, I posted a suggestion to an older bug tracking system NV Access
> employed, asking if there could be a way to disable individual add-ons.
> I forgot about this suggestion until last year when I somehow stumbled
> upon that issue. Thus began a journey to bring this feature to life,
> culminating in NVDA 2016.3 release where it did come to life.
>
>
>
> To start with, I’d like to say that developing features in NVDA is fun
> yet challenging. You get to learn how certain things work behind the
> scenes, yet at the same time you are responsible to making sure your
> code doesn’t ruin someone’s hard work at his or her office. In other
> words, every code fragment you write impacts someone, and I can give you
> various examples regarding this (both from NVDA Core development and in
> add-ons world).
>
>
>
> In regards to feature development, I didn’t start coding right away. I
> began with writing specifications, imagining how users would use this
> functionality. I then presented a prototype, then set out to
> incorporating it into NVDA itself, then went through a rigorous code
> review process. After months of work, the feature finally made it to
> NVDA master branch, and eventually it landed as part of NVDA 2016.3.
>
>
>
> The ability to disable individual add-ons works by checking if an add-on
> is part of a set of add-ons that should be disabled at startup. By
> disabling add-ons, you’re effectively telling NVDA, “I want this add-on
> to be included in a set of disabled add-ons” and vice versa (if you’re
> enabling add-ons). In order to avoid technical issues encountered when
> NVDA resumes from a crash, I told NVDA to save this disabled add-ons set
> to disk when you exit add-ons manager after enabling or disabling add-ons.
>
>
>
> Originally, I didn’t allow you to use shortcut commands to enable or
> disable add-ons from add-ons manager. However, some felt that it would
> be best to add one, so someone else came along and added that
> enhancement. The hotkey did make it to NVDA 2016.4.
>
>
>
> Reference:
>
>   * Disable individual add-ons: https://github.com/nvaccess/nvda/issues/3090
>
>
>
> I hope to present a series of posts like this that explains how features
> in NVDA work behind the scenes, along with a backstage tour of how they
> were developed. Please let me know the next feature I should talk about,
> and if it’s something I don’t know, I’ll try my best to have an expert
> or the actual feature developer to explain it to you. And yes, one of
> the future installments might be the ongoing saga of search suggestion
> sounds.
>
>
>
> Suggestion for Quentin: If you believe this would be something
> In-Process would like to talk about, please feel free to incorporate them.
>
>
>
> Cheers,
>
> Joseph
>
> _._,_._,_
>
> ------------------------------------------------------------------------
>
> Groups.io Links:
>
> You receive all messages sent to this group.
>
> View/Reply Online (#19310) <https://nvda.groups.io/g/nvda/message/19310>
> | Reply To Group
> <mailto:[hidden email]?subject=Re:%20%5Bnvda%5D%20How%20NVDA%20works%3A%20feature%20development>
> | Reply To Sender
> <mailto:[hidden email]?subject=Re:%20%5Bnvda%5D%20How%20NVDA%20works%3A%20feature%20development>
> | Mute This Topic <https://groups.io/mt/5145441/568> | New Topic
> <https://nvda.groups.io/g/nvda/post>
>
> NVDA on groups.io
>
> NVDA is developed by NV Access in collaboration with the community.
> Get NVDA from: http://www.nvaccess.org/
> Your continued donations help keep NVDA development going strong. Donate
> at:
> http://www.nvaccess.org/donate
> Other links:
> Come talk with other NVDA users on irc.blufudge.net #NVDA
> Get NVDA add-ons at:
> http://addons.nvda-project.org/
> NVDA on Facebook:
> http://www.facebook.com/group.php?gid=8601265515
> Get SkypeTalking for NVDA:
> http://skypetalking.googlecode.com/
>
> Change Your Subscription <https://nvda.groups.io/g/nvda/editsub/568>
> Group Home <https://nvda.groups.io/g/nvda>
> Contact Group Owner <mailto:[hidden email]>
> Terms Of Service <https://groups.io/static/tos>
> Unsubscribe From This Group
> <https://nvda.groups.io/g/nvda/leave/105668/1166856339/xyzzy>
>
> _._,_._,_
>
>
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>
>
>
> _______________________________________________
> Nvda-devel mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/nvda-devel
>

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Nvda-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/nvda-devel
Reply | Threaded
Open this post in threaded view
|

Re: FW: [nvda] How NVDA works: feature development

Brian's Mail list account BY
In reply to this post by Joseph Lee
Hi, I think what is a little worrying about the new sound scheme is that its
being imposed not tested.
 I posted a zip file of altered sounds that to me and a hard of hearing
friend actually are easier to hear and are based on the new sounds.
 Could you or somebody else suggest that the new sounds not be pushed
through as they are, but perhaps tested or be made  configurable in some way
by a user.
 From feedback on The user   list there seems to be almost a 50/5-0 split on
whether they work for them or not. My feeling is its a lot to do with
hearing.
the start and stop sounds are very similar and even I have difficulty in
telling them apart. I have slightly stretched them and now can
hear them for what they are etc.

https://www.dropbox.com/s/hkkz61mwjxjsqbk/waves.zip?dl=1



I feel these are a good compromise, personally. as now the  edit and browse
sounds do not get drowned out by the speech.
 Brian

[hidden email]
Sent via blueyonder.
Please address personal email to:-
[hidden email], putting 'Brian Gaff'
in the display name field.
----- Original Message -----
From: "Joseph Lee" <[hidden email]>
To: "'NVDA screen reader development'" <[hidden email]>
Sent: Friday, June 02, 2017 6:11 AM
Subject: [Nvda-devel] FW: [nvda] How NVDA works: feature development


> Hi,
>
>
>
> Sorry for a possible duplicate (for those on the users list).
>
>
>
> I posted the below note to the NVDA users list hosted at Groups.IO, but
> figured some of you (especially those coming from other screen readers)
> might be interested in reading it. This is sort of a partial fruition of a
> long-time wish: having the time to write notes on internals of NVDA
> features. I'll try my best to include relevant code fragment from NVDA
> source code if the need arises, but I hope this could serve as yet another
> resource for those who want to dive deeper into NVDA's inner workings. And
> yes, one day, I'll write about how search suggestion sounds work (I am the
> main architect of that feature, and this feature is under alpha-level
> testing at the moment in recent next branch snapshots).
>
>
> Enjoy.
>
>
>
> From: [hidden email] [mailto:[hidden email]] On Behalf Of Joseph
> Lee
> Sent: Thursday, June 1, 2017 10:03 PM
> To: [hidden email]
> Subject: [nvda] How NVDA works: feature development
>
>
>
> Hi everyone,
>
>
>
> A few days ago I posted on the NVDA development list that I'll be sending
> a
> message about feature development on the users list. Then I thought about
> making this a regular series in hopes that users would understand how NVDA
> works and appreciate the work that goes on behind the scenes.
>
>
>
> But before I do so, an important announcement:
>
>
>
> ACB Radio's Main Menu for June 2nd will be devoted to NVDACon 2017
> keynote.
> You can go to acbradio.org to listen to the show at 6 PM Pacific (9 PM
> Eastern and other times elsewhere).
>
>
>
> Back to the subject at hand:
>
>
>
> Recently, NV Access has set out to improve their brand image, and one of
> them was deployed on NVDA alpha builds not long ago: new sounds. I'm sure
> some of you may have tasted it, and for those who didn't, don't worry,
> it'll
> come to you at a later date.
>
>
>
> One of the questions that came up during our discussion of new sounds was
> feature development. As an answer, I'd like to give you an overview of how
> a
> feature is born and make it to NVDA stable builds, with a recent addition
> of
> ability to disable add-ons as an example (a feature I enjoyed implementing
> and had massive impact on your NVDA lives).
>
>
>
> In 2013, I posted a suggestion to an older bug tracking system NV Access
> employed, asking if there could be a way to disable individual add-ons. I
> forgot about this suggestion until last year when I somehow stumbled upon
> that issue. Thus began a journey to bring this feature to life,
> culminating
> in NVDA 2016.3 release where it did come to life.
>
>
>
> To start with, I'd like to say that developing features in NVDA is fun yet
> challenging. You get to learn how certain things work behind the scenes,
> yet
> at the same time you are responsible to making sure your code doesn't ruin
> someone's hard work at his or her office. In other words, every code
> fragment you write impacts someone, and I can give you various examples
> regarding this (both from NVDA Core development and in add-ons world).
>
>
>
> In regards to feature development, I didn't start coding right away. I
> began
> with writing specifications, imagining how users would use this
> functionality. I then presented a prototype, then set out to incorporating
> it into NVDA itself, then went through a rigorous code review process.
> After
> months of work, the feature finally made it to NVDA master branch, and
> eventually it landed as part of NVDA 2016.3.
>
>
>
> The ability to disable individual add-ons works by checking if an add-on
> is
> part of a set of add-ons that should be disabled at startup. By disabling
> add-ons, you're effectively telling NVDA, "I want this add-on to be
> included
> in a set of disabled add-ons" and vice versa (if you're enabling add-ons).
> In order to avoid technical issues encountered when NVDA resumes from a
> crash, I told NVDA to save this disabled add-ons set to disk when you exit
> add-ons manager after enabling or disabling add-ons.
>
>
>
> Originally, I didn't allow you to use shortcut commands to enable or
> disable
> add-ons from add-ons manager. However, some felt that it would be best to
> add one, so someone else came along and added that enhancement. The hotkey
> did make it to NVDA 2016.4.
>
>
>
> Reference:
>
> * Disable individual add-ons:
> https://github.com/nvaccess/nvda/issues/3090
>
>
>
> I hope to present a series of posts like this that explains how features
> in
> NVDA work behind the scenes, along with a backstage tour of how they were
> developed. Please let me know the next feature I should talk about, and if
> it's something I don't know, I'll try my best to have an expert or the
> actual feature developer to explain it to you. And yes, one of the future
> installments might be the ongoing saga of search suggestion sounds.
>
>
>
> Suggestion for Quentin: If you believe this would be something In-Process
> would like to talk about, please feel free to incorporate them.
>
>
>
> Cheers,
>
> Joseph
>
> _._,_._,_
>
>  _____
>
> Groups.io Links:
>
> You receive all messages sent to this group.
>
> View/Reply Online (#19310) <https://nvda.groups.io/g/nvda/message/19310>
> |
> Reply To Group
> <mailto:[hidden email]?subject=Re:%20%5Bnvda%5D%20How%20NVDA%20works%3A
> %20feature%20development>  | Reply To Sender
> <mailto:[hidden email]?subject=Re:%20%5Bnvda%5D%20How%20NVDA%20wo
> rks%3A%20feature%20development>  | Mute This Topic
> <https://groups.io/mt/5145441/568>  | New Topic
> <https://nvda.groups.io/g/nvda/post>
>
> NVDA on groups.io
>
> NVDA is developed by NV Access in collaboration with the community.
> Get NVDA from: http://www.nvaccess.org/
> Your continued donations help keep NVDA development going strong. Donate
> at:
>
> http://www.nvaccess.org/donate
> Other links:
> Come talk with other NVDA users on irc.blufudge.net #NVDA
> Get NVDA add-ons at:
> http://addons.nvda-project.org/
> NVDA on Facebook:
> http://www.facebook.com/group.php?gid=8601265515
> Get SkypeTalking for NVDA:
> http://skypetalking.googlecode.com/
>
> Change Your Subscription <https://nvda.groups.io/g/nvda/editsub/568>
> Group Home <https://nvda.groups.io/g/nvda>
> Contact Group Owner <mailto:[hidden email]>
> Terms Of Service <https://groups.io/static/tos>
> Unsubscribe From This Group
> <https://nvda.groups.io/g/nvda/leave/105668/1166856339/xyzzy>
>
> _._,_._,_
>
>


--------------------------------------------------------------------------------


> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot


--------------------------------------------------------------------------------


> _______________________________________________
> Nvda-devel mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/nvda-devel
>


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Nvda-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/nvda-devel