Re: edit user guide

On Wed, Apr 7, 2021 at 07:07 PM, Luke Davis wrote:
Worse, as I understand it, sometimes Jaws, et al have created their own versions of Windows shortcut commands, which just muddies the waters.
-
Even though this is not a JAWS group, I'm giving myself a personal dispensation to say this:  The "virtual ribbon" is the worst possible crutch ever foist upon those who are screen reader users.

You need to know how to use the ecosystem as it exists, period, end of sentence.  And when the UI changes, you change.  The fact that we have people whining about the ribbon interface in 2021 makes me want to scream.  It's here to stay, it's just a menu with a slightly different access method, and you (the generic you) had darned well ought to know how to use it without any need for something to make it behave differently than it already does, because it's 100% accessible.

I also hate when people remap Windows keyboard shortcuts except in the rarest of circumstances.  I have seen far too many who've done this forget that they have done this, and what they've done it for, placed in front of a stock Windows system with their screen reader of choice and be unable to do lots of basic things because they have no idea of the native keyboard shortcuts.
--

Brian - Windows 10 Pro, 64-Bit, Version 20H2, Build 19042

Always remember others may hate you but those who hate you don't win unless you hate them.  And then you destroy yourself.

~ Richard M. Nixon

Re: edit user guide

On Wed, Apr 7, 2021 at 07:07 PM, Luke Davis wrote:
Why should that [prior Windows experience] be presumed?
-
Because I can count on less than one hand when someone entirely new to Windows suddenly appears on any screen reader venue for the screen readers that are exclusive to Windows.

If there is the odd person who's coming into Windows anew, say having decided to leave the Apple ecosystem, it is incumbent on them to mention this.

I'm willing to bet that were we to post a poll asking something like, "When you were brand new to NVDA, did you have previous experience with Windows (whether with a screen reader or not)?," where the options were Yes/No we'd have very, very, very few "Nos."

And if someone is brand new to Windows, a screen reader group is not the place to be learning the basics of Windows, either.  You really need to have some basic Windows skills before you even try to learn a screen reader "from distance."  It is my opinion, and Nimer can correct me if he is in disagreement, that this group is not now and never has been about teaching basic Windows skills.

We seem to get way more people who are fleeing JAWS (whatever the reason) than anything else.
--

Brian - Windows 10 Pro, 64-Bit, Version 20H2, Build 19042

Always remember others may hate you but those who hate you don't win unless you hate them.  And then you destroy yourself.

~ Richard M. Nixon

Re: edit user guide

Monte Single

Well said Luke.

-----Original Message-----
From: nvda@nvda.groups.io <nvda@nvda.groups.io> On Behalf Of Luke Davis
Sent: April 7, 2021 5:08 PM
To: nvda@nvda.groups.io
Subject: Re: [nvda] edit user guide

On Wed, 7 Apr 2021, Brian Vogel wrote:

-And even though this is absolutely true, NVDA documentation should not
focus on Windows commands, either.

I don't disagree, but I am curious about:

But it should be presumed that someone coming to NVDA is and has
already been a Windows user and already knows the keyboard shortcuts used
to do things like cut, copy, paste, save, save as, and the list goes on and
on.

Why should that be presumed?

As I understand it, one of the core intents for NVDA is second or third
world use, where other screen readers are either not available, or are
prohibitively expensive. (Obviously, this does not take into account
Narrator's increasing
capabilities.)

In such circumstances, a blind user likely has no Windows experience at all,
and shouldn't be expected to have it. Additionally, it doesn't seem
reasonable to assume that such users have good access to trainers of any
kind beyond basic installation.

Therefore, what am I missing that makes it logical to expect them to have
prior Windows experience?

It is important, critically important, to be able to separate out "who
controls what," and by that I mean knowing what commands are Windows
commands and work pretty much everywhere under Windows, what are screen
reader commands, and what are commands specific to the application being
accessed.

Absolutely true. In my experience, trainers for Window-eyes and Jaws, have
rarely taught that difference. People I have worked with to try to teach
them to use NVDA, have often been completely ignorant, and surprised by the
fact, that some of the shortcuts they knew were actually Windows commands.
They tend to assume that nothing they already know is applicable, because
they think it is all screen reader commands; and are afraid to try things
because they think it will make something happen that they won't be able to
come back from.
Worse, as I understand it, sometimes Jaws, et al have created their own
versions of Windows shortcut commands, which just muddies the waters.

Luke

Re: edit user guide

Luke Davis

On Wed, 7 Apr 2021, Brian Vogel wrote:

-And even though this is absolutely true, NVDA documentation should not focus on Windows commands, either.
I don't disagree, but I am curious about:

But it should be presumed that someone coming to NVDA is and has already been a Windows user and already
knows the keyboard shortcuts used to do things like cut, copy, paste, save, save as, and the list goes on and on.
Why should that be presumed?

As I understand it, one of the core intents for NVDA is second or third world use, where other screen readers are either not available, or are prohibitively expensive. (Obviously, this does not take into account Narrator's increasing capabilities.)

In such circumstances, a blind user likely has no Windows experience at all, and shouldn't be expected to have it. Additionally, it doesn't seem reasonable to assume that such users have good access to trainers of any kind beyond basic installation.

Therefore, what am I missing that makes it logical to expect them to have prior Windows experience?

It is important, critically important, to be able to separate out "who controls what," and by that I mean knowing what commands are Windows commands and work pretty much everywhere under Windows, what are screen reader commands, and what are commands specific to the application being accessed.
Absolutely true. In my experience, trainers for Window-eyes and Jaws, have rarely taught that difference. People I have worked with to try to teach them to use NVDA, have often been completely ignorant, and surprised by the fact, that some of the shortcuts they knew were actually Windows commands. They tend to assume that nothing they already know is applicable, because they think it is all screen reader commands; and are afraid to try things because they think it will make something happen that they won't be able to come back from. Worse, as I understand it, sometimes Jaws, et al have created their own versions of Windows shortcut commands, which just muddies the waters.

Luke

Re: Navigating dates in the Windows 10 calendar using NVDA 2020.4 and the Windows 10 app essentials 21.03 add-on

Louise Pfau

I appologize.  I thought it was an issue with NVDA.

Louise

a few more examples of math equations consisting only of sequences of characters on the keyboard

Michael

Rather than putting a space between to quantities multiplied together such as x y, I represent multiplication by an asterisk. So x multiplied by y would be

Here is an example of an exponent that is a mathematical expression and not just a number.

Y = e(^ x^2 + 3*x + 6^)

The above will be read as y = e begin exponent x exponent 2 + 3x  + 6 end exponent.

Where e is the Euler number.

I neglected to give an example of the way I represent division.

I start the divisor in an equation with a slash. But following that, I enclose the divisor in left parenthesis / and / right parenthesis.

When the reading cursor  encounters a slach followed by a left parenthesis  and another slash, NVDA because of my regular expression will say “begin divisor. It then reads the mathematical expression until it encounters a slash followed by a right parenthesis.  NVDA then says “end divisor.

Y = 3/(/x^2 + 3/)

Re: Navigating dates in the Windows 10 calendar using NVDA 2020.4 and the Windows 10 app essentials 21.03 add-on

Hi all,

Based on the debug log I have received and testing it with Narrator, it appears Microsoft should be made aware of this issue. Specifically, when you move between weeks in Calendar app, a lot of UIA events are raised, none of which relates to focus movement (a lot of name property change events are raised, which are not related to focus movement).

Cheers,

Joseph

From: nvda@nvda.groups.io <nvda@nvda.groups.io> On Behalf Of Joseph Lee via groups.io
Sent: Wednesday, April 7, 2021 11:18 AM
To: nvda@nvda.groups.io
Subject: Re: [nvda] Navigating dates in the Windows 10 calendar using NVDA 2020.4 and the Windows 10 app essentials 21.03 add-on

Hi,

I see. Can you try the following:

1. While focused on Calendar app, restart NVDA with debug logging enabled (NVDA+Q, then select “restart with debug logging”).
2. Use Calendar app to move between dates and weeks.
3. Press NVDA+F1 to open log viewer.
4. Copy everything in the log viewer and paste it as a private email to me. I will do my best to analyze and report back to the list on what might be happening.

Note that if there is indeed an error with Windows 10 App Essentials, I may need to investigate a possible solution for June release (April 2021 release was just finalized).

Also, just for reference, can you try with Narrator and see if that makes a difference?

Cheers,

Joseph

From: nvda@nvda.groups.io <nvda@nvda.groups.io> On Behalf Of Louise Pfau
Sent: Wednesday, April 7, 2021 11:12 AM
To: nvda@nvda.groups.io
Subject: Re: [nvda] Navigating dates in the Windows 10 calendar using NVDA 2020.4 and the Windows 10 app essentials 21.03 add-on

On Tuesday, April 6, 2021 at 7:19 pm, Joseph Lee wrote:

Can you retry after restarting NVDA while focused on Calendar app? NVDA does announce dates as I move between weeks (up or down arrow in month view).

--

I tried that, and NVDA announced dates occasionally as I moved between weeks in month view, since I kept the default.  The rest of the time, there’s no spoken feedback.

Thanks,

Louise

Re: Navigating dates in the Windows 10 calendar using NVDA 2020.4 and the Windows 10 app essentials 21.03 add-on

Hi,

I see. Can you try the following:

1. While focused on Calendar app, restart NVDA with debug logging enabled (NVDA+Q, then select “restart with debug logging”).
2. Use Calendar app to move between dates and weeks.
3. Press NVDA+F1 to open log viewer.
4. Copy everything in the log viewer and paste it as a private email to me. I will do my best to analyze and report back to the list on what might be happening.

Note that if there is indeed an error with Windows 10 App Essentials, I may need to investigate a possible solution for June release (April 2021 release was just finalized).

Also, just for reference, can you try with Narrator and see if that makes a difference?

Cheers,

Joseph

From: nvda@nvda.groups.io <nvda@nvda.groups.io> On Behalf Of Louise Pfau
Sent: Wednesday, April 7, 2021 11:12 AM
To: nvda@nvda.groups.io
Subject: Re: [nvda] Navigating dates in the Windows 10 calendar using NVDA 2020.4 and the Windows 10 app essentials 21.03 add-on

On Tuesday, April 6, 2021 at 7:19 pm, Joseph Lee wrote:

Can you retry after restarting NVDA while focused on Calendar app? NVDA does announce dates as I move between weeks (up or down arrow in month view).

--

I tried that, and NVDA announced dates occasionally as I moved between weeks in month view, since I kept the default.  The rest of the time, there’s no spoken feedback.

Thanks,

Louise

Re: Navigating dates in the Windows 10 calendar using NVDA 2020.4 and the Windows 10 app essentials 21.03 add-on

Louise Pfau

On Tuesday, April 6, 2021 at 7:19 pm, Joseph Lee wrote:
Can you retry after restarting NVDA while focused on Calendar app? NVDA does announce dates as I move between weeks (up or down arrow in month view).
--
I tried that, and NVDA announced dates occasionally as I moved between weeks in month view, since I kept the default.  The rest of the time, there’s no spoken feedback.

Thanks,

Louise

Re: Are there any extensions for LibreOffice?

Russell James

Hi Rui,

Do you know if LO is accessible to Orka on Linux?

Do you know if LO is written in Java?

Russ

On Wed, Apr 7, 2021 at 10:33 AM Richard B. McDonald <richardbmcdonald@...> wrote:

Thanks and will do!

From: nvda@nvda.groups.io <nvda@nvda.groups.io> On Behalf Of Rui Fontes
Sent: Tuesday, April 06, 2021 7:04 AM
To: nvda@nvda.groups.io
Subject: Re: [nvda] Are there any extensions for LibreOffice?

Try contacting with:

Quentin Christensen <quentin@...>

Rui Fontes

Às 14:56 de 06/04/2021, Richard B. McDonald escreveu:

Hi Gigi!

Yes indeed, everything you say is correct.  No doubt, some collaboration between NVDA and LibreOffice (LO) seems necessary.

In fact, I am presently connected with a person in Germany who is involved with LO development and who has a keen interest in improving LO’s accessibility.  He has likewise noted that some sort of collaboration is needed.  My problem is that I do not have any contacts within NVDA to try to connect them with LO.  I have said to my LO contact that I am willing to volunteer to improve accessibility.  I just do not know how to go about it.

Do you know what I can do to foster this?

Thanks,

Richard

From: nvda@nvda.groups.io <nvda@nvda.groups.io> On Behalf Of Gianluigi Coppelletti
Sent: Monday, April 05, 2021 7:43 AM
To: nvda@nvda.groups.io
Subject: Re: [nvda] Are there any extensions for LibreOffice?

Hi,

I'm afraid that there aren't any, but I really hope that the accessibility of LibreOffice with NVDA will be improved in the future, because more and more blind users are choosing this suite as this is a very good free alternative to MS-Office. Unfortunately this doesn't depend on the NVDA's developpers only.

Ciao.

Gigi

Il 01/04/2021 23.07, Richard B. McDonald ha scritto:

Hi!

I am using Windows 10, NVDA 2020.4 and LibreOffice 7.2.  Are there any extensions for NVDA that improve its accessibility with LibreOffice?  In particular, LibreOffice has a spreadsheet application, Calc, that has some material accessibility issues.

Thanks,

Richard

Re: edit user guide

On Wed, Apr 7, 2021 at 07:27 AM, Chris Smart wrote:
Windows is universal to all NVDA users.
-
And even though this is absolutely true, NVDA documentation should not focus on Windows commands, either.  Of course some will come up incidentally as you can't divorce a piece of software, in this case NVDA, from the ecosystem it runs under, which means that "natural interactions" between the two will occur in any user manual or similar at certain moments.

But it should be presumed that someone coming to NVDA is and has already been a Windows user and already knows the keyboard shortcuts used to do things like cut, copy, paste, save, save as, and the list goes on and on.

In addition, there is really excellent documentation for NVDA and for virtually any Microsoft offering you can name, including Excel.  You're going to need both, but the commands for NVDA have nothing to do with Excel (and, no, I'm not counting dedicated add-ons, which are another discussion) nor do the Excel commands have anything to do with NVDA.  You can insert any of the following in place of Excel and the principle applies: Word, Firefox, PowerPoint, Chrome, Edge, etc., etc., etc.

It is important, critically important, to be able to separate out "who controls what," and by that I mean knowing what commands are Windows commands and work pretty much everywhere under Windows, what are screen reader commands, and what are commands specific to the application being accessed.  These things interact with each other, but are definitely separate from each other in terms of "whos doing what."  And knowing who does what is the very first step in solving an issue (or knowing that you don't know, and asking to get clarity).

--

Brian - Windows 10 Pro, 64-Bit, Version 20H2, Build 19042

Always remember others may hate you but those who hate you don't win unless you hate them.  And then you destroy yourself.

~ Richard M. Nixon

Re: Are there any extensions for LibreOffice?

Richard B. McDonald

Thanks and will do!

From: nvda@nvda.groups.io <nvda@nvda.groups.io> On Behalf Of Rui Fontes
Sent: Tuesday, April 06, 2021 7:04 AM
To: nvda@nvda.groups.io
Subject: Re: [nvda] Are there any extensions for LibreOffice?

Try contacting with:

Quentin Christensen <quentin@...>

Rui Fontes

Às 14:56 de 06/04/2021, Richard B. McDonald escreveu:

Hi Gigi!

Yes indeed, everything you say is correct.  No doubt, some collaboration between NVDA and LibreOffice (LO) seems necessary.

In fact, I am presently connected with a person in Germany who is involved with LO development and who has a keen interest in improving LO’s accessibility.  He has likewise noted that some sort of collaboration is needed.  My problem is that I do not have any contacts within NVDA to try to connect them with LO.  I have said to my LO contact that I am willing to volunteer to improve accessibility.  I just do not know how to go about it.

Do you know what I can do to foster this?

Thanks,

Richard

From: nvda@nvda.groups.io <nvda@nvda.groups.io> On Behalf Of Gianluigi Coppelletti
Sent: Monday, April 05, 2021 7:43 AM
To: nvda@nvda.groups.io
Subject: Re: [nvda] Are there any extensions for LibreOffice?

Hi,

I'm afraid that there aren't any, but I really hope that the accessibility of LibreOffice with NVDA will be improved in the future, because more and more blind users are choosing this suite as this is a very good free alternative to MS-Office. Unfortunately this doesn't depend on the NVDA's developpers only.

Ciao.

Gigi

Il 01/04/2021 23.07, Richard B. McDonald ha scritto:

Hi!

I am using Windows 10, NVDA 2020.4 and LibreOffice 7.2.  Are there any extensions for NVDA that improve its accessibility with LibreOffice?  In particular, LibreOffice has a spreadsheet application, Calc, that has some material accessibility issues.

Thanks,

Richard

Re: edit user guide

Chris Smart

Windows is universal to all NVDA users. Excel, Word, Thunderbird, pick whichever application you want, are not used by every NVDA user!  There is basic training available for Excel from NV  Access. Go buy yourself a copy.

Sent from Chris's iPhone.

On Apr 7, 2021, at 02:47, falkogiepmans@... wrote:

﻿Hi Brain,

Thanks for the explanation. I do think however that mentioning these shortcuts in the user guide would contribute to a more central overview. This is also why Alt+Tab, a windows shortcut, is mentioned in the user guide.
Just like Alt-Tab is necessary to navigate through different windows, hotkeys like Control+Arrows are essential for navigating large, non-empty excel files. Including these in the user-guide would give users one single overview of the essential shortcuts for excel.

Regards,
Falko

Re: edit user guide

Hi,

Having produced documentation and tutorials (including editing the user guide myself), I think it would be better to talk about Excel commands in Excel training module (from NV Access) or a dedicated tutorial series. The role of a user guide is to provide a basic overview of a product, not to serve as a one-stop database of commands. A user guide (or a manual) is designed to get the user up to speed on using a product and to provide a general overview. When talking about more specialized subjects such as Excel, a detailed approach is needed, and this is where tutorials and training books come in.

Another thing to consider is internationalization. Although adding Excel commands can help folks get to know Excel a bit better, this places a burden on translators who must not only translate Excel notes, but also cross-check with local communities on app commands (not all Office commands are the same across localizations). Of the work needed to translate NVDA into another language, documentation is the hardest (this is speaking from experience with coordinating Korean translation, and it took me and another translator weeks to translate, cross-check, and edit the user guide; this was done back in 2012).

Hope this helps.

Cheers,

Joseph

From: nvda@nvda.groups.io <nvda@nvda.groups.io> On Behalf Of falkogiepmans@...
Sent: Tuesday, April 6, 2021 11:47 PM
To: nvda@nvda.groups.io
Subject: Re: [nvda] edit user guide

Hi Brain,

Thanks for the explanation. I do think however that mentioning these shortcuts in the user guide would contribute to a more central overview. This is also why Alt+Tab, a windows shortcut, is mentioned in the user guide.
Just like Alt-Tab is necessary to navigate through different windows, hotkeys like Control+Arrows are essential for navigating large, non-empty excel files. Including these in the user-guide would give users one single overview of the essential shortcuts for excel.

Regards,
Falko

Re: edit user guide

falkogiepmans@...

Hi Brain,

Thanks for the explanation. I do think however that mentioning these shortcuts in the user guide would contribute to a more central overview. This is also why Alt+Tab, a windows shortcut, is mentioned in the user guide.
Just like Alt-Tab is necessary to navigate through different windows, hotkeys like Control+Arrows are essential for navigating large, non-empty excel files. Including these in the user-guide would give users one single overview of the essential shortcuts for excel.

Regards,
Falko

Recommended NVDA remote server based on golang development

Hello everyone
this is the new NVDA remote server based on go lang development, here is the official GitHub repository and description
GitHub Repository:
https://github.com/tech10/nvdaRemoteServer
https://github.com/users/tech10/packages/container/package/nvdaremoteserver-docker
# Introduction

Welcome to the server for the NVDARemote addon, written in the [Go programming language.](https://golang.org/) The idea for this program was enspired by [the one released here.](https://github.com/jmdaweb/NVDARemoteServer)

The original server for the addon is written in [Python,](https://www.python.org/) which works well enough under most circumstances. However, there were a few reasons why I wanted to write the server in Go.

- Performance. Go can be much faster than Python if you write your program properly.
- Automatic generation of the self-signed certificate, if desired. Both the addon and the server utalize self-signed SSL certificates, and the addon doesn't verify a certificate's authenticity before connecting. Therefore, I wanted a program that would automatically generate the needed certificate, store it in memory, and use it until the program is terminated.
- Less memory should be used by the Go program.
- Easy to compile on other operating systems without changing the code base much, if at all.
- Can be compiled into a static, position-independent binary if desired, for use across systems using different libraries.
- Should be able to easily upgrade a program to utalize the latest version of Go without changing API calls within the program.

## Goals

My goals for this project are to create a stable server for the NVDARemote addon, which will be fast and have an efficient memory footprint. Configuration of the program will be done through the command line. Any log output can easily be redirected by the various facilities across operating systems, so a log file wouldn't need to be implemented by the program.

## Go

console
$go install github.com/tech10/nvdaRemoteServer  This should download and compile the latest code, placing the binary within your GOBIN environment variable. Presuming you have the GOBIN in your path, you will be able to execute it fairly easily. If not, you will need to update your path or execute the binary with its full path. ### Static build If you require a completely static build of the program, you can clone the GitHub repository and execute the bash script. So long as you have the [musl libc](https://www.musl-libc.org/) installed, and musl-gcc in your path, you can do the following: console$ git clone https://github.com/tech10/nvdaRemoteServer
$cd ./nvdaRemoteServer$ ./build-static.sh


Installing musl libc is beyond the scope of this document, and is specific to your Linux distribution.

## Docker

Thanks to a feature request in [issue 1,](https://github.com/tech10/nvdaRemoteServer/issues/1) a Dockerfile has been added. Automatically built and published images with GitHub actions are currently placed on the GitHub Container Registry, a service that is in public beta. As such, this service is subject to change until it's announced as stable. I don't anticipate many changes to the service, so everything ought to continue working as is.

Below are some minimal examples of getting the service up and running within a Docker container. The installation and use of Docker is beyond the scope of this document.

#### GitHub Container Registry

The automatically built images are [located here.](https://github.com/users/tech10/packages/container/package/nvdaremoteserver-docker) Provided on that page is a command you can copy to the clipboard which should pull the latest image. Here is an example use of downloading and running the image.

console
$docker pull ghcr.io/tech10/nvdaremoteserver-docker:v0.1.20$ docker run ghcr.io/tech10/nvdaremoteserver-docker:v0.1.20


#### Docker Hub

Automatically built images are now available on [Docker Hub.](https://hub.docker.com) Here is an example to pull the latest image and run it.

console
$docker pull tech10/nvdaremoteserver$ docker run tech10/nvdaremoteserver


### Manually build docker image

Clone the repository, and from within the directory, build a Docker image, then run it. Some sample commands are below.

console
$git clone https://github.com/tech10/nvdaRemoteServer$ cd ./nvdaRemoteServer
$docker build -t nvdaremoteserver-docker .$ docker run nvdaremoteserver-docker


# Usage

console
$nvdaRemoteServer [-cert /path/to/ssl/certificate] [-key /path/to/ssl/key] [-ip4 0.0.0.0] [-ip6 [::]] [-port 6837] [-motd "Example message of the day."] [-motd-always-display false] [-send-origin true] [-log-level 0]  Please note that the brackets around a parameter indicate that it is optional. ## Parameters ### Optional #### -cert This is the path to the SSL certificate the program will use to communicate securely, as the NVDA addon uses TLS for secure communication. #### -key This is the path to the SSL key. Both the certificate and key file need to exist and be accessible by the program, or the program will fall back to generating its own certificate. ##### Note about the cert and key files If you are using the official NVDA addon as a server, or the unofficial one I linked above, you are welcome to use the same server.pem file for the certificate and key. The server should load successfully under this configuration. If the certificate and key files both exist and fail to load a valid SSL key pair, the program will terminate rather than falling back on automatic self-signed SSL key generation. #### -ip4 IPV4 address for the program to listen for incoming connections on. By default, all addresses are used. If you don't want to listen on IPV4, enter -ip4 0 as the parameter. #### -ip6 IPV6 address for the program to listen for incoming connections on. By default, all addresses are used. If you don't want to listen on IPV6, enter -ip6 0 as the parameter. If you use 0 for both IPV4 and IPV6 addresses, the program will fall back to listening on all IP addresses. The IPV6 parameter must have the address address surrounded by brackets. The address must also be on an interface for your computer. For example, this type of parameter can be used. [fd80::ffe8] So long as that is a valid IPV6 address on one of your network interfaces, this example in the local prefix of IPV6 addresses, you will be able to listen for incoming connections to the server. #### -port Choose the port the server will use. The default is 6837. Valid port numbers are between 1 and 65536. #### -motd Enter a message of the day for your server. You probably want to quote this string in the shell, ensuring spaces will be escaped properly, as in the example command line parameter. #### -motd-always-display Force the client to display the message of the day from the server, even if it hasn't changed since you last connected. This value is a boolean, so it can be true, false, 1, or 0. The numbers 1 and 0 are the same as true and false. #### -send-origin By default, when the server receives a message from a client, it will send that same message to all clients that need to receive it, but it will add an origin field to that message. This requires that the message be decoded into a value the program can more easily manipulate, an origin message added to it, then encoded back to the value that will be sent to all clients. This could cause a slight performance hit. You can disable this feature by setting it to false, if desired, though you might find some things don't work properly for you if you do so. #### -log-level This will choose what you want logged. The default level is 0. ##### Logging Levels Each level above the previous will also log what the prior level is logging. For instance, 1 will log both levels 0 and 1. - -1 will disable logging, with the exception of error messages, which are always logged. This includes panicks, which crash the program. - 0 will log when the server has started, stopped, or if an error has occurred that isn't severe enough to be logged at all times. - 1 will log information about which clients connect, logging both their ID and IP address. - 2 will log what channels each client joins and leaves, which will contain channel passwords. Don't use this log level in production. - 3 will log what the program is doing at each stage of its operation. Use this for debugging purposes only. - 4 will log the protocol that the server and client are exchanging. Don't use this unless you're a developer or you want to annalize the protocol being used. This might cause a performance degrodation, since the protocol being exchanged is also sent to the console, or redirected to a file by your operating system if you've told it to do so. # Notes on self-signed certificate generation The certificate that this program generates will allow for secure verification. However, like the certificate packaged by the addon, you can't verify it by using any certificate authority. If this changes in the addon and it requires certificate verification in the future, a certificate, key, and a root certificate authority file will be required for the server to use. The client would then require the appropriate files to verify the certificate is valid, unless you get a certificate from Letsencrypt, or another certificate authority. To generate the certificate, the program will use a source of random entropy that is cryptographically secure. This can be a problem on servers that are headless, meaning you access them remotely only. However, daemons such as Haveged exist to provide your system with available entropy that can be utalized. As a result of the secure random number generator, along with the various algorithms needed to generate the keys, the generation of a self-signed certificate can take some time, anywhere between three to ten seconds in the best case sanario. If the program takes longer than thirty seconds to generate the certificate, it is probably hanging as it waits for available entropy to complete random number generation. Once the key is generated, the program will run with its full performance. # Statistics These by no means should be taken as representative of any definitive stats, but the results given by systemd's tracking of memory and CPU use can speak for themselves. When running the servers, both the Go and Python versions, I was performing similar tasks over different periods of time, typing, reading, and doing virtually everything on the remote system, including writing this section of the document and collecting the statistics. Here is what they gathered for both the Python and Go versions of the NVDARemote server. The Python version I was running was 3.9.2, and Go was 1.16.2. ## Python The run time was approximately one hour. console$ sudo systemctl status NVDARemoteServer
NVDARemoteServer.service - NVDARemote relay server
Active: active (running) since Tue 2021-03-23 12:37:24 MDT; 1h 0min ago
Process: 11551 ExecStart=/usr/bin/python /usr/share/NVDARemoteServer/server.py start (code=exited, status=0/SUCCESS)
Main PID: 11553 (python)
IP: 4.5M in, 5.2M out
Memory: 12.0M
CPU: 1min 13.385s


## Go

The runtime was approximately five hours, fourteen minutes.

console
\$ sudo systemctl status nvdaRemoteServer
nvdaRemoteServer.service - NVDARemote relay server
Active: active (running) since Tue 2021-03-23 07:21:02 MDT; 5h 14min ago
Main PID: 7512 (nvdaRemoteServe)
IP: 10.6M in, 11.6M out
Memory: 4.8M
CPU: 13.324s


There is one difference between the Python and Go versions of the server that is significant, other than the programming language being used. The Python server forks itself into the background, something that isn't strictly necessary to do with systemd processes. The Go version of the server does no forking, so the systemd service is capable of monitoring its process directly. This may cause results to be different than they should be, but the use of memory and CPU time should be fairly accurate.

## Observations using the servers

My personal observations are the following, running both servers on a server approximately 50MS ping time away from both locations, which would make the round trip approximately 100MS:

- When running the Python version of the NVDARemote server, the delay is noticeable between the controlling computer, and the computer being controlled.
- When running the Python version of the server using [PyPy,](https://www.pypy.org/) which is a faster version of Python for longer running programs, the delay is less, better than Python and a bit more stable. I can still tell that I'm controlling a remote computer.
- When running the Go version of the NVDARemote server, the delay can still be noticed, but is less than the Python version of the server. General stability and delay between keystrokes is also improved on the Go version of the server, and sometimes, I forget that I'm actually controlling a remote computer.

I took no benchmarks of response times between sending and receiving data, but I would estimate that the Go program is at least four or five times faster than the Python program, perhaps more so. It definitely seems to use less CPU.

In comparing the two servers, keep the following in mind. Python is an interpreted language. Therefore, the program is compiled into machine code as it is executed. This compiling and reading of the program will increase CPU use and slow down the responsiveness of a program. PyPy will compile the entire Python program into machine code before it begins to execute, which makes it faster than Python for long running processes, though slightly slower in starting. I believe it was stated that PyPy is at least four times faster than Python. Go will compile the entire program into machine code before you execute it, leaving you with a binary that you will run on your computer, similar to programming languages such as C. In [one particular use case,](https://getstream.io/blog/switched-python-go/#:~:text=Go%20is%20extremely%20fast.,40%20times%20faster%20than%20Python.) it was stated that Go was forty times faster than Python.

# Bugs

Open an issue explaining what the bug is and how you encountered it. Try and be as detailed as you can, to allow the bug to be reproduced. Be detailed, or your issue will be closed if it can't be resolved properly.

# Contributing

Fork this project and submit a pull request. Please use another branch on your fork of this project if you are submitting a pull request for something. Also, keep the following guidelines in mind.

- Test your contributions before submitting them, making sure the program compiles properly.
- Remember to make use of gofmt. This will keep the formatting of the code standard for everyone.
- Try and keep your code as clean and efficient as possible.

# Final thoughts

Primarily, I am writing this program for my use, but am releasing it for anyone to utalize, should they wish.
Finally, thanks to tech10 for developing such a good server

Re: edit user guide

Pranav Lal

Hi Brian,

I agree with you about not having office  keyboard shortcuts in the NVDA user guide. However,  we should have documentation which explains how to do things in common applications in the NVDA manual or in its separate books like the excel book.

Take the example of  needing to determine which is the last occupied cell in a column. I believe ctrl + down arrow does this but when I am using the screen reader, my thoughts are something like:

A mouse user could scroll quickly and find this stuff out, where should I look? In the excel manual or in the NVDA manual for a feature or keyboard shortcut? Mean while, I am down arrowing or perhaps using page down to go down which is a suboptimal way to do this.

Pranav

From: nvda@nvda.groups.io <nvda@nvda.groups.io> On Behalf Of Brian Vogel
Sent: Tuesday, April 6, 2021 7:21 PM
To: nvda@nvda.groups.io
Subject: Re: [nvda] edit user guide

Microsoft documents, and well, each and every keyboard shortcut for virtually every product they make, and definitely for the Office suite programs.

These keyboard shortcuts, and all program-specific keyboard shortcuts, are not NVDA shortcuts and would have no place in the NVDA user guide, as they have nothing whatsoever to do with NVDA (or any screen reader, for that matter).
--

Brian - Windows 10 Pro, 64-Bit, Version 20H2, Build 19042

Always remember others may hate you but those who hate you don't win unless you hate them.  And then you destroy yourself.

~ Richard M. Nixon

Re: Navigating dates in the Windows 10 calendar using NVDA 2020.4 and the Windows 10 app essentials 21.03 add-on

Hi,

Can you retry after restarting NVDA while focused on Calendar app? NVDA does announce dates as I move between weeks (up or down arrow in month view).

Cheers,

Joseph

From: nvda@nvda.groups.io <nvda@nvda.groups.io> On Behalf Of Louise Pfau
Sent: Tuesday, April 6, 2021 5:51 PM
To: NVDA Group <nvda@nvda.groups.io>
Subject: [nvda] Navigating dates in the Windows 10 calendar using NVDA 2020.4 and the Windows 10 app essentials 21.03 add-on

Hi.  I was trying to navigate through the dates in the Windows 10 calendar, which is set up in a tabular structure like an Excel spreadsheet.  When I was navigating by week (the row equivalent), NVDA wouldn’t speak the new date that had the focus.  It did speak the date when I moved by day though.  I’m using Windows 10 pro Version 20H2 (OS Build 19042.867), NVDA 2020.4, and the Windows 10 app essentials 21.03 add-on.  Has anyone else come across this?

Thanks,

Louise

Navigating dates in the Windows 10 calendar using NVDA 2020.4 and the Windows 10 app essentials 21.03 add-on

Louise Pfau

Hi.  I was trying to navigate through the dates in the Windows 10 calendar, which is set up in a tabular structure like an Excel spreadsheet.  When I was navigating by week (the row equivalent), NVDA wouldn’t speak the new date that had the focus.  It did speak the date when I moved by day though.  I’m using Windows 10 pro Version 20H2 (OS Build 19042.867), NVDA 2020.4, and the Windows 10 app essentials 21.03 add-on.  Has anyone else come across this?

Thanks,

Louise

regular expressions for my keyboard only notations for math

Michael

Some regular expressions to go with my keyboard only notations for math

The following material is likely more than anyone wants to read. Skip through it to material you do want to read. I have not updated NVDA to the current version. I may have said things about the speech dictionaries that aare no longer up-to-date.  Wherever  there are mistakes, forgive me.

Appendix 2 How To Modify The Speech Dictionary In NVDA

NVDA is a screen reading program produced by NV Access(R). It speaks the information about various parts of the active window in response to keystrokes pressed by the user. If the keystroke is not an NVDA command, NVDA merely echoes the keystroke. But, if it is an NVDA command keystroke such as NVDA-key + t, NVDA tells the user something about the active window. In the case of NVDA-Key + t, NVDA announces the title of the active window.  NVDA commands take the form of the NVDA-key followed by a letter. The INSERT key is by default the NVDA-key. However, NVDA allows the user to change the NVDA-key to the CapsLock key if desired.

The user can control how NVDA announces a string of characters.  If the user wants NVDA to speak a particular string of characters a certain way, he or she can make an entry in its speech dictionary for that particular string of characters. After this entry is saved into the speech dictionary, whenever that particular string of characters is encountered, NVDA speaks it according to the entry just made in the speech dictionary.

For example, NVDA ordinarily speaks the word tortilla with an “L” sound rather than a “y” sound.  To force NVDA to pronounce it with the “y” sound, there must be an entry in the speech dictionary to instruct NVDA to speak the string of characters “torteeya” as desired.

To make such an entry do the following.

STEP 1: Put focus on the main NVDA menu with the keystroke  NVDA-key + n. The user can arrow down through a list of submenus.  Or, press the letter “p” to go to the preferences menu. The first menu under “Preferences” is ‘General’. The user may arrow down the the Speech Dictionary or type ‘d” and NVDA will jump into the
default speech dictionary, There are three entries. They are respectively “Default”,
“voice”, and “temporary”.  I suggest putting my changes into the default dictionary.

But before entering the default dictionnary, a word about the other two choices is in order.

The user can arrow once to the voice dictionary which is  the dictionary belonging
to the synthesizer currently running. For instance, if the Microsoft Speech
Platform synthesizer is running, arrowing to the Voice Dictionary opens the dictionary whose entries govern the speech under that synthesizer. The entries in this
dictionary apply to the Microsoft Speech Platform session and not to any
other synthesizer that has been installed. Whatever synthesizer is running,
the entries in the default speech dictionary apply.
The tempory dictionary is like the voice dictionary, but it is erased when
you exit the NVDA session.

Entering the default dictionary. A list of entries will appear.  The user may add a new entry or arrow down to an entry he or she wishes to change. To add a new entry Tab once. To change an entry, arrow down the the entry in question and tab twice. Or to remove the entry in question, tab three times. But the object of this appendix is to add entries in support of the calculus book.

So, tab only once to add an entry. Focus will be on the “Add” button. Press the ENTER key to activate it. NVDA says “add a dictionary entry dialogue, pattern edit”. Focus is now in an edit box. The string of characters to be entered here is the string of characters as they appear in the text, that is, the actual character string encountered by the reading cursor.  As an example, type in the word tortilla. Press the TAB key ”.  again, and the focus will be in another edit box. NVDA will say “replacement pattern edit”. The replacement string to be typed will force NVDA to pronounce the word tortilla with a ‘y’ sound rather than an ‘l’ sound. That pattern is “tortee ya”.

Tab again to put focus in a comment edit box. Tabbing again puts focus on a check box called “Case sensitive”. Its default value is “not checked”. To make the replacement happen only when tortilla is upper case (either its first letter or all of them), press the space bar to check it.

Tabbing again puts focus on a combo box whose entries are respectively “anywhere, “forward”, and “regular expression”.   The “anywhere” choice means that the pattern being replaced may appear either by itself or anywhere in a longer string of
non-blank characters. The “forward” choice means that the pattern being replaced must appear at the very front of a longer string of characters. Of course, it may appear by itself and not part of a longer string of characters.  If the “forward” choice is picked, and the pattern being replaced appears following  one or more non-blank characters, NVDA will not speak using the replacement pattern.

Regular expressions are required to address certain situations where more
flexibility is needed,  and they will be discussed later. For now, suffice it
to say, that in the case of a regular expression, the pattern to be replaced
and the replacement pattern will contain special characters that will
cause a more suffisticated replacement to take place.

Now, the user is ready to implement the  changes specified below.

However, since NVDA supports regular expressions, some of them will not be
entered into the NVDA speech dictionary.
The speech dictionary dialog may ask you if the Actual Pattern  should be case
sensitive.  If you check “no”, then any characters in the Actual Pattern string
may be either upper or lower case. If however, you check “yes”, then the
characters in the Actual Pattern string must exactly match the case of the
characters encountered in the text before the Replacement Pattern will be
triggorred.

The changes listed below do not need case sensitivity unless otherwise
stated.

SECTION0.1 Modifications For Chapter 1 Number Systems

Chapter 1 discusses number systems which uses * for multiplication, / for
division, + for addition, and – for subtraction.

One change for chapter 1 is that for section headings, “SECTION”.

Actual Pattern=”SECTION”, Replacement Pattern=”section”

The other change is that Subscripts in this book are indicated by the
suffix underscore plus an integer. An example is x_0 for x sub zero.

Actual Pattern=_”, Replacement Pattern=”sub”

Some readers may wish to hear x^2 read as x squared rather than x raised to
exponent 2 and also x^3 read as x cubed. .  If the reader is willing to
treat these two cases as special cases, the preferred reading can be
supported as follows. Use two carot symbols instead of one, and preceed the
carots with a space. Without that space, the variable name may not be spoken clearly. For example, write x cubed as x ^^3.

This will require the user to make the following changes to the speech
dictionary.

Actual Pattern ^^2 and Replacement Pattern squared.

The change for x cubed is similar.

SECTION0.2 Modifications for Chapter 2 Functions
Chapter 2 discusses functions of one and of two variables. I introduce
notation for exponents, denominators, and absolute value.

Below is a list of changes I propose to make to the speech dictionary for
chapter 2.

It would be nice if the characters “f(x)” is spoken as
“f of x”. But, we also want “g(t)” to be read as “g of t”.

IN other words, we want the function name to be any character upper or lower
case and to have a subscript.  We also want flexibility in the number of
independent variables and also flexibility of  variable names.

Three regular expressions  working together accomplish this goal.

Regular expression recognizing the function name and opening parenthesis.:

Actual Pattern:

“([a-zA-Z])$$“ Replacement Pattern: “\1 of open parenthesis “ Regular expression recognizing all arguments which are followed by a comma: Actual Pattern: “*([a-zA-Z]?)(\_?\d*)([/\.]?\d*) *([-]|[+]?) *([a-zA-Z]?)(\_?\d*)([/\.]?\d*) *[\,]{1}” Replacement Pattern: “\1 \2 \3 \4 \5 \6 \7 , “ Regular expression recognizing an argument not followed by a comma: Actual Pattern: “*([a-zA-Z]*)(\_?\d*)([/\.]?\d*) *([-]|[+]?) *([a-zA-Z]?)(\_?\d*)([/\.]?\d*) *$$”

Replacement Pattern:

“\1 \2 \3 \4 \5\6 \7     close parenthesis     “

H(x0)  will be read as “h of x”. The function name (f, g, h, or any other letter)
does not matter.

The following changes do not involve regular expressions.

actualPattern=:R->R, Replacement Pattern= maps R into R

Actual Pattern=”+/-“, Replacement Pattern=”plus or minus”

Actual Pattern=”<=”, Replacement Pattern=”less than or equal to”

Actual Pattern=”>=”, Replacement Pattern=”greater than or equal to”

ActualPattern=!, Replacement Pattern=factorial
ActualPattern=_, Replacement Pattern=sub

Actual Pattern=”(/”, Replacement Pattern=”open parenthesis begin denominator”

Actual Pattern=”/)”, Replacement Pattern=”end of denominator close parenthesis”

Actual Pattern=”(^”, Replacement Pattern=”open parenthesis begin exponent”

Actual Pattern=”^)”, Replacement Pattern=”end of exponent close parenthesis”

Actual Pattern=”(|”, Replacement Pattern=”open parenthesis begin absolute value”

Actual Pattern=”|)”, Replacement Pattern=”end of absolute value close parenthesis”

Actual Pattern=”}/”, Replacement Pattern=”open brace begin denominator”

Actual Pattern=”/}”, Replacement Pattern=”end of denominator close brace”

Actual Pattern=”{^”, Replacement Pattern=”open brace begin exponent”

Actual Pattern=”^}”, Replacement Pattern=”end of exponent close brace”

Actual Pattern=”{|”, Replacement Pattern=”open brace begin absolute value”

Actual Pattern=”|}”, Replacement Pattern=”end of absolute value close brace”

Actual Pattern=”[/”, Replacement Pattern=”open bracket begin denominator”

Actual Pattern=”/]”, Replacement Pattern=”end of denominator close bracket”

Actual Pattern=”[^”, Replacement Pattern=”open bracket begin exponent”

Actual Pattern=”^]”, Replacement Pattern=”end of exponent close bracket”

Actual Pattern=”[|”, Replacement Pattern=”open bracket begin absolute value”

Actual Pattern=”|]”, Replacement Pattern=”end of absolute value close bracket”

NOTE: In the text, I only use parentheses to specify begin and end of
exponents, denominators, and absolute value. It is up to you whether to use
braces and brackets as well. But, if you do decide to use braces and brackets
n addition to parentheses, I strongly suggest
that  the Replacement Pattern mentions the brace or bracket   . unless you do,
the speech will not help you keep track of opening and closing braces and
brackets. If documents you send to your professor do not have an equal number
of opening and closing braces/brackets/parentheses, he  or she will think

SECTION0.3Modifications For Chapters 3, 4, and 5

The chapter on limits only needs two changes to the speech dictionary. No
changes are needed for chapters 4 and 5.

Actual Pattern=”lim:”, Replacement Pattern=”limit as”

Actual Pattern=”->”, Replacement Pattern=”approaches”

SECTION0.4Modifications For Chapters 6, 7, and 8

Regular expression for what variable a derivative is taken with respect to:

Actual Pattern:

“(\/)d([a-zA-Z])(\))”

Replacement Pattern:

“with respect to           \2”

Actual Pattern= (d0

Replacement Pattern=”Open parenthesis  ze rowth derivative”

Actual Pattern=”(d1”

Replacement Pattern=”Open parenthesis first derivative”

Actual Pattern= “(d2”

Replacement Pattern=” Open parenthesis second derivative”

Actual Pattern= “(d3”

Replacement Pattern=”Open parenthesis third derivative”

Ordinary derivative whose differentiation level is specified by an integer:

Fourth derivative:

Actual Pattern:

“(d4”

Replacement Pattern:

“open parenthesis fourth derivative”

Eighth derivative:

Actual Pattern:

“(d8”

Replacement Pattern:

“Open parenthesis eighthth derivative “

The first, second, third, fourth, and eighth derivatives are entries that are
not regular expressions. They are more understandable when not handled by a
regular expression.

However, the fifth, sixth, seventh, and ninth derivatives are all handled by a
regular expression. Their replacement patterns are very understandable.

Regular expression recognizing fifth, sixth, seventh, and ninth derivatives:

Actual Pattern:

“($$)d([5679])” Replacement Pattern: “open parenthesis \2 th derivative” Ordinary derivatives whose differentiation level is specified by an index variable: This regular expression comes into play in a future chapter, but it fits here. Actual Pattern: “(\()d([a-zA-Z])([-]|[+]?)([1-9]?)” Replacement Pattern: “open parenthesis \2 th \3 \4 derivative” SECTION0.5 Modifications For Chapter 9, Rieman Integration This chapter introduces notations for summation and for integrals. I leave it to the reader whether or not to make this group case sensitive. I mean demanding that the characters “int” should be upper case to prevent collisions in the text. Actual Pattern=”/INT”, Replacement Pattern=”integral” Actual Pattern=”/INT{“, Replacement Pattern=”integral lower bound” Actual Pattern=”{/u“, Replacement Pattern=”begin upper bound” Actual Pattern=”/u}“, Replacement Pattern=”end of upper bound, and the integrand is ” Actual Pattern=”/INT{}”, Replacement Pattern=”indefinite integral” Actual Pattern=”/INT{}:”, Replacement Pattern=”indefinite integral of the integrand” Actual Pattern=”/INT{}”, Replacement Pattern=”integral” I found myself entering the above integral notations using brackets instead of braces, so I recommend including the following just to make the entering text more forgiving. Actual pattern=”[/l“, replacement pattern=”begin lower bound” Actual pattern=”/l]“, replacement pattern=”end of lower bound” Actual Pattern=”]/u“, Replacement Pattern=”begin upper bound” actual pattern =”/u[“, replacement pattern =”end of upper bound, and the integrand is,” actual pattern =”/INT[]”, replacement pattern =”indefinite integral” actual pattern =”/INT[]:”, replacement pattern =”indefinite integral of the integrand” Your professor might prefer the representation of an upper bound used in latex which is “\to”. Actual Pattern=”\to”, Replacement Pattern=”and upper bound” Actual Pattern=”/INTI”, Replacement Pattern=”inner integral” Actual Pattern=”/INTM”, Replacement Pattern=”middle integral” Actual Pattern=”/INTO”, Replacement Pattern=”outer integral” SECTION0.6 Modifications for Chapter 12 Vectors actual pattern={||x+y||}, Replacement Pattern=open brace begin norm x+y end norm close brace Actual pattern=DET2, Replacement Pattern=second order determinant Actual pattern=DET3, Replacement Pattern=third order determinant Actual pattern=(.), Replacement Pattern=dot product Actual pattern=(*), Replacement Pattern=cross product SECTION0.7 Modifications For Chapter 13 Partial derivative whose differentiation level is specified by an integer: Fourth partial derivative: Actual Pattern: “(pd4” Replacement Pattern: “open parenthesis fourth partial derivative” Eighth partial derivative: Actual Pattern: “(pd8” Replacement Pattern: “open parenthesis eighth partial derivative” Regular expression recognizing fifth, sixth, seventh, and ninth partial derivatives: Actual Pattern: “(\()pd([5679] )” Replacement Pattern: “open parenthesis \2 th partial derivative Partial derivative whose differentation level is specified by an index variable: Actual Pattern: “(\()pd([a-zA-Z])([-]|[+]?)([1-9]?)” Replacement Pattern: open parenthesis \2 th \3 \4 partial derivative SECTION0.8 Modifications For Chapters 14, 15, 16, and 17 actualWord=:R->Rn Replacement Pattern=maps R into R n actualWord=:R2->R2 Replacement Pattern=maps R2 into R2 actualWord=:R3->R3 Replacement Pattern=maps R3 into R3 actualWord=:Rn->Rn Replacement Pattern=maps R n into R n actualWord=:R2->R Replacement Pattern=maps R2 into R actualWord=:R3->R Replacement Pattern=maps R3 into R actualWord=:RN->R Replacement Pattern=maps RN into R This group is case sensitive. Actual Pattern=”/DINT:”, Replacement Pattern=”double integral” Actual Pattern=”/LINT:”, Replacement Pattern=”line integral over curve” Actual Pattern=”/SINT:”, Replacement Pattern=”surface integral” Actual Pattern=”/TINT:”, Replacement Pattern=”triple integral” There is a set of notations for derivatives for which I made no entries into the speech dictionary. It is not uncommon to represent a derivative by following the function name with an apostrophe. For example, f’(x) represents the first derivative of f(x). Likewise, f’’(x) is the second derivative of f(x). You may occasionally encounter three apostrophes for third derivative such as for example f’’’(x). However, it is unlikely that the student will ever see more than three apostrophes for differentiation. In fact, the use of apostrophe for differentiation is more prevalent in differential equations books than in a calculus text. So, if the student hears ’ or y’’, he or she should understand that differentiation is being represented. Just get used to it. Testing regular expressions involving carrot and parenthesis exposed a problem in two of the seven synthesizers I exercised. Those two are Microsoft Speech Platform and Microsoft SAPI5. The other five synthesizers passed the test. I tested regular expressions for beginning and ending exponential expressions. My syntax for these exponential expressions is that the expressions are bracketed between (^ and ^). Regular expression to recognize beginning of exponential expression: Actual Pattern: [\(][\^] Replacement Pattern: Begin exponent Regular expression to recognize end of exponential expression: Actual Pattern: [\^][$$]

Replacement Pattern:

end of exponent

The regular expression for the end of an exponential expression fails to recognize the end.

The regular expression for the beginning exponential expression works as expected.

The two regular expressions are very similar. Why does one work and not the other?

Here are some test cases:

(^ ^)

(^w+3^)

I then wrote a regular expression to recognize the pair “()”, and NVDA sees the closing parenthesis but not the opening one. Puzzling!

The following synthesizers execute these regular expressions correctly.

Eloquence,

ESpeak NG,

Soft Voice,

Speech Player ESpeak,

SVox Pico Synthesizer,

The following synthesizers did not execute these regular expressions correctly.

Microsoft Speech API Version 5,

Microsoft Speech Platform

For these last two synthesizers, I input the regular expressions into their Voice Dictionaries.

(^ w + 3^)

Begin exponent is recognized but not the end of exponent.

This is not a fix but what I did to expose the problem.

NOTE: The number of spaces specified in the replacement patterns for regular expressions should not be ignored. Some parts of the replacement string may be spoken so quickly, that you, the listener, may hear them as a nonintelligible blip.