Monday, March 21, 2016

If I die tonight 2: showering forum members with love and mercy, willingness to step down from position of power, an open plea to moderators of blindness forums

Dear friends, colleagues, fellow mailing list moderators and forum members:

Continuing from my previous post on my decision to step down from various NVDA community positions, I’d like to talk about something that might be sensitive to some: mailing list administration, what it means to love and serve members and willingness to let go.

As I was thinking about death, legacy and future leadership, I was reminded of several definitions of death, both secular and sacred. To some, death is “… the next adventure …” (Albus Dumbledore), “… stepping into eternity …” (various songs) and “… time of judgment …” (Bible). Some have speculated that we end our existence once we die, and others claim that we possess a soul (I fall into the latter camp).

As I was thinking about death and praying about it and my legacy (see the previous blog entry), I also thought about forum administration, leadership position and loving the members of forums. As a person who have served in both roles (member and moderator), I know that moderating a list is a thankless job (I myself enjoy this position) and have witness disintegration of lists due to questionable conduct from members and moderators, I also know that leadership position doesn’t come with free lunch – it requires sacrifice, understanding and so on.

To me, a leader (especially that of an online forum) is one who showers forum members with love and is ready to serve the forum and its members. Showering members with love may take various forms, including researching a question on behalf of a member, arbitrating disputes, protecting members and so on.

However, I’d like to add one more characteristic to this list: willingness to let go. Power is both a helpful and a destructive force. If exercised correctly, power brings stability, prosperity and harmony. If misused, power makes leaders corrupt, causes distrust and disintegrates a community (here, I refer to mailing lists and forums as communities). If the moderator believes (or is compelled by members and outsiders) that they have abused their position or recognize that it is time to move on, a moderator should be willing to let go, knowing that they served their part (too much attachment to a list, as I found out, causes moderators to feel uneasy and stressed over the future).

Another characteristic I’d like to add is recognizing members as equal partners, accountable and answerable to people, and remembering that reputation of a forum rests on them and members. Some moderators say that a mailing list or a forum is the property of the forum owner; that is, an owner can do whatever he or she desires and run a list that best suits them. For example, without consent from the entire list, an owner could close a list, or the owner can expel members simply because they believe members are running rival lists or they don’t like them (without a cause).

I’d like to kindly (and with heavy heart) disagree with this attitude of running this kind of lists (with owners running the show alone):

1.       Members should be seen as equal partners in decision-making. It is better to consult members and make informed decisions than jeopardize the reputation of a list through decisions from their own, especially if it was an inappropriate choice.
2.       Leaders should be recallable. I believe that leaders are there to love and serve the list, and because of this, they should be held accountable and answerable to members, even if it means voting to remove a moderator.
3.       Leaders and members should remember that the reputation of a community depends on them. To some, reputation of the user and developer community will draw or alienate them to and from products, especially if a support list has publicly viewable archives. Some would say forum content is the crown jewel of a forum, but I believe the people are also important.

Some people may ask, “is it a good idea to let members criticize leaders?” Some moderators would say “no” because they wish to give outsiders an impression that they can manage a list. Some would say “yes” because they tolerate descent.

I myself think it should be allowed: criticism is a great thing if done correctly (incorrect criticisms include attacks on persons, flaming and so on). Although it is painful to digest in the beginning, it saves moderators from making wrong decisions, and in some cases, allows moderators to revisit their past decisions or compromise with members. It also allows vulnerable side of moderators to come out: genuine criticism allows moderators to think critically about what they’ll say, how they’ll act, why a member or two made this comment and so on.

Going back to the discussion on letting go and related concepts: sometimes, too much attachment to a list changes moderators (and I’m speaking from experience and after thinking about the answers to my prayers). First, it causes moderators to become extra vigilant against attacks on their lists. If a list is attacked (for example, criticisms from outsiders that could be misunderstood as an attack), they’d spend a great deal of energy “fighting” the attackers and often fail (there were cases where it has succeeded). For example, there were numerous debates on BrailleNote and Braille Sense lists regarding the products and the support lists, with folks from HIMS (Braille Sense list) defending the HIMS list (and I myself wrote messages to the BrailleNote list (when I was the chief admin there), saying they should exercise patience).

Second, moderators of lists become defensive when one or more members find themselves a target of attack. Because moderators are passionate about the reputation of a list and they feel at home when they sit on the moderator’s chair, they would believe that they need to be the ones defending their members and going so far as planning a counterstrike. Unfortunately, this is caused by passion, not reason (I found this out the hard way when one of the members of a Windows 10 list told me he was being harassed by someone (outside), then I formulated a plan to go after this person (a head admin on another list) by sending a letter to this person with mixed success; when I appealed to moderators of various lists, they told me that it is better to move on, which was the answer I needed (and they were right; to them I send my gratitude).

Third, moderators (and sometimes members) become so overprotective to a point where they’ll not teach their successors how to run their community. Without means of passing on their knowledge to the next generation, successors (moderators and members) will not find answers on dealing with crises, misbehaving members and so on. The state of NVDA community and the users list I described earlier fits this definition: in an effort to make the next generation suffer less, I have shielded them from how to handle crises to a point where I found myself saying, “I fed them fish all day instead of teaching them to fish.”

Fourth, moderators will exhibit tendency to advertise exclusive expertise. That is, they believe that only they should be the one answering all questions, respond to comments, defend a list and so on. This is prominent on lists where moderators do have reputation for delivering creative content (tutorials, websites, blogs and so on). Some moderators will stipulate that their content should only be sharable by members of his or her list, which is a sign of overprotectiveness and exclusivity (note that I do believe that, in some cases, exclusivity is the only option).

Before I go any further, we need to pause here and think about the following situation: a moderator of a list, who is known for producing helpful tutorials, says to members that his tutorials should not be sharable to outside members. In a way, this is a valid reason, seeing that this moderator would like to protect his publishing rights and in order to conserve bandwidth. However, I think this is a sign of advertising exclusive expertise: only members gets a chance to listen to his explanations, the tutorial set could be downloaded and distributed by anyone who may not give proper attributions (and I did see a case where the moderator did come after someone, thinking that this person post was an exact word to word copy of his tutorials) and so forth. Note that I do respect this moderator for what he does and know that his tutorials are good (no ill feelings here, and if I came across as such, I sincerely apologize).

Lastly, moderators become focused on succession plans. Worried about the future and the reputation of a list, leaders would draw up elaborate succession plans should they become unable to carry out their duties. Succession plan is good to preserve continuity, but focusing too much on that not only drains the energy of moderators, but also puts unseen burdens on moderators, members, the forum itself and outsiders: stress, content clutter, stricter conformity, tendency for members to act as moderators (without appointment or elected) and so on.

As for me committing these, I confess that I’m guilty of them all: overprotective, defensive, drawing up elaborate succession plans and so on. I do know that I did make mistakes such as not consulting list members when making difficult decisions, showing rage when I’m known to be calm and so forth. Only by the grace of God and through encouragement from community members I can lift up my face and say I’m ready to move on.

To members of forums I moderate or have moderated (NVDA International Users List on Groups.IO, Win10 Forum for screen reader users, BrailleNote Users list and others): I’d like to request mercy and forgiveness from you. On behalf of many forum administrators out there, I’d like to sincerely apologize for abuse of power and not considering members as equal partners. I’d like to sincerely apologize for showing contradictory traits at times, not showing love and mercy when I myself said leaders should show love and mercy, being so overprotective when I ought to teach next generation of leaders how to resolve crises and so forth.

To my fellow forum moderators and administrators: I’d like to sincerely appeal to you (from bottom of my heart) to consider members as equal partners in decision-making, not ignoring critics, and showing willingness to let go of your positions when it is time to do so. Please shower members of your forums with love and mercy, show that you too are vulnerable, show humility, and have an attitude of servants (to always serve, not to be served always).

To members of the blindness community, to sighted folks and others (especially CSUN 2016 attendees): I know I’ll get criticized for this (I’ll happily accept them), but this MUST be said (in hopes of starting a dialogue):

I (JOSEPH LEE) DECLARE THAT THE STATE OF MANAGEMENT OF BLINDNESS FORUMS IS IN CRISIS.

Sincerely,
Joseph s. Lee
Head list representative, Windows 10 Forum for screen reader users (groups.io/g/win10)
(soon to be former) Moderator, NVDA International Users List (groups.io/g/nvda)
(former) Head admin, BrailleNote Users mailing list (www.freelists.org/list/braillenote)

 

If I die tonight 1: legacy, letting go of a community I love, serve and was too attached to

Dear friends, readers and supporters around the world:

At least once in our lifetime, we confront the following question: if we die, who’ll carry our legacy forward, and what exactly is death? I myself have experienced this moment today, what I found out and my plans. Because I will be touching a subject that might be sensitive to some readers and quite extensive, I’ll divide this question into two parts: part 1 will address death, legacy and letting go, and part 2 will discuss why I made my decision and my philosophy regarding administering and serving a community.

In case you are wondering why I’m writing this, it’s because the following statement will need further explanations: I will be stepping down from various NVDA community positions by end of this year. Let me tell you why:

As I lay in bed (dealing with a common cold and with muscle aches) and listening to some piano music, I was struck by an intriguing thought: if I die (as soon as now, sometime today or tonight), who will carry on my legacy? Although I thought about this question in the early months of NVDACon planning, it came stronger today: perhaps this week is CSUN conference (31st annual technology for people with disabilities) and missed going there, perhaps because I’m preparing for midterms, perhaps I’m tired after busying myself with NVDACon planning or what not. Of these, I think the thought of NVDA’s tenth anniversary celebrations, coupled with recent activities on various mailing lists have made this a stronger question today.

So I decided to meditate and pray over this question:

Dear God, if you recall me (if I die) tonight, who’ll take on my legacy? Who’ll take care of my family, friends I love, the communities I love and serve (including NVDA community and the Groups.IO Win10 forum)? Is there someone who’ll love the people and the communities I serve through various positions, someone who’ll shower them with more love than I did? Am I willing to let go of my position if that benefits the community in the long term?

I also added:

Dear God, what would your Son (Jesus) do if given this situation? I do know that he came and died many years ago to save me and others, and I know that he did it willingly. I look forward to a personal counselling session with you through your words

Surprisingly, the answer was simple yet counterintuitive:

Don’t worry about tomorrow, because tomorrow will worry about itself. Remember what Paul said before his execution: “I’ve finished my race”. Although he didn’t say that, he was talking about today, the job he was given. You’re worried about tomorrow because you are too attached to the communities you are serving, and one way to not worry about tomorrow is letting it go – give it to the hands of the next generation.

At first, I didn’t understand what this answer meant, so I prayed again:

But God, letting go means a lot to me. Although it would mean less stress and one less list to moderate, I don’t know who’ll take care of the communities I love.

An unexpected reply:

Why did Jesus die on Good Friday? Did he do it willingly, or because his Father told him to? He did it because of both reasons: as the Word, he was present when the world began, thus he had powers over creation and took part in a grand plan to save you and others. He did it because he have subordinated himself to God, as his prayer before his execution shows. He knew what was better: dying (or sacrificing himself or letting go) to save everyone.

Not only this reply answered my original question, it answered another question, which is the subject of the next blog entry.

In summary, the reason why I wasn’t ready to confront the question of dying and passing on my legacy was the fact that I was too attached to the community I love and serve, too much attachment to a point where I set out succession plans (even before it happened). Sometimes, I felt that I should be the one to do something (including giving voice to the voiceless), stemming from the fact that I can become forceful and zealous for a cause. I also thought that the next generation should have an easier time managing a list, running a project and so on, which (and I admit now) led to failures of some initiatives (as they say, I was feeding fish to the next generation instead of teaching them to fish). Lastly, I haven’t seriously considered stepping down if it’ll improve a community in the long run until now (which naturally connects with the next blog post on leadership and mailing list/forum administration).

To correct these errors and to serve as a reminder to myself that I’m vulnerable and to show love to communities I love and serve, I decided upon the following:

1.       NVDACon International 2016 (April) will be the last conference I’ll serve as the head organizer. I’m glad for the fact that we do have passionate people who are more than ready (I think) to embark on this journey.
2.       I’ll be stepping down from my moderator position on NVDA users list (on Groups.IO) effective May 31, 2016.
3.       I’ll pass on my position of quarterly community add-on release coordinator effective August 31, 2016.
4.       NVDA 2016.2 tutorial will be the last what’s new tutorial I’ll produce, seeing that there are others who are better at producing tutorials than I am.
5.       I’d like to request that someone else who have better technical knowledge and teaching skills than I am to produce 2017 edition of Welcome to NVDA tutorial series.

I’m not doing this lightly: for some time now, I thought it is time to pass on the baton of list administration to someone from the next generation who’ll love the list more than I do and to teach them about effective ways of running an international list. I also believe that it isn’t right for one person to start organizing an international conference such as NVDACon (I originally envisioned various regions rotating around to organize NVDACon, and I’d like to start this process this fall, starting with regional NVDACon’s around the world). Although the acts of planning, announcing and releasing quarterly maintenance versions of community add-ons are tedious, it is rewarding in the end and is something that people should put in their resumes. Producing tutorials is a hard job, but it is also rewarding in the end – you get to learn how something works.

I’m not doing this to receive publicity; I’m doing all this because I love NVDA community, and know that letting myself go is something that’ll benefit this community for a very long time (perhaps the community would turn out influential advocates in the next ten years or more). As it stands, I believe I’ve done my best to love and serve this and the wider community. I do admit that I made numerous errors (both small and huge) and that I’m vulnerable; sometimes seen as an influential advocate, sometimes seen as a ruthless list administrator. In the end, what matters is the fact that tomorrow will worry about itself, and I should do my best in the job I’m given that should be accomplished today, even if it means stepping down from various positions in favor of the next generation.

To the next generation of NVDA enthusiasts: first, thank you for your continued support and enthusiasm. I’m sorry that I fed you fish all day long – I should have been better and teach you to fish. Although I’m stepping down from leadership position, you are more than welcome to ask me and other enthusiasts questions. Stepping down from the position of power doesn’t mean I’m leaving the wonderful NVDA community: I’ll try my best to serve in my new roles, whatever they might be. Thank you.

Sincerely,
Joseph S. Lee
Translator, code contributor and community add-ons reviewer, NVDA screen reader project
(to be former) Chair, NVDA Tenth Anniversary Planning Committee
(to be former) Moderator, NVDA International Users List

Thursday, March 3, 2016

Open letter to the NVDA community: Hartgen Consultancy, we owe you an apology, important reminder for the NVDA community

To Hartgen Consultancy and the NVDA community,

First, I’d like to commend Hartgen Consultancy for their excellent support for screen reader users and providing products that are empowering many blind people around the world. Also, I’d like to commend the NVDA community for your continued support for NVDA and championing open-source development. The impact of work done by both entities can be felt across the world.

As I read Brian Hartgen’s article on the backstory of Dictation Bridge, and being familiar with articles from Chris Hofstater and with the Dictation Bridge project itself, I believe we the NVDA community owe Hartgen Consultancy a heartfelt apology. At the same time, I would like to take this time to seriously remind the NVDA user community (especially those on social media) that your attitudes, words and actions could have impact on reputation of the screen reader itself.

First, to Brian: As I read your article regarding backstory of Dictation Bridge and your defense, I felt uneasy regarding the treatment you’ve received. Although I do understand where Chris is coming from based on interaction between you and the unnamed beta tester, I felt more uncomfortable after reading how some on the NVDA community have reacted to your article and sent harsh words via social media. Although I do understand their message (looking at facts and trends, power of crowdfunding, price and so on), I believe we the NVDA community members should have done better when it comes to being courteous and professional.

As a code contributor to a screen reader and a fellow community and user side advocate, I’d like to take this time to apologize on behalf of the NVDA community. Certainly the actions and words used by some in our community are unacceptable, especially against a reputable source who can give them much needed information and can bring unique perspective to NVDA development (as you pointed out in your GPL article). Keep up the good work you are doing not only for users of JAWS and NVDA, but also for the wider blindness community.

To the NVDA community: If there are three things I will not accept from this community, it will be derogatory name calling, concentrated harassment and the idea that we should enforce our beliefs and practices of open-source and free availability. Concentrated harassment, as we’ve seen today on Twitter, not only hurts the harassed, but also jeopardizes the reputation of NVDA itself. Name calling, especially derogatory ones such as “shark” for JAWS, isn’t funny when you look at it from the perspective of the targeted: although it might be a joke, to some, it is a statement that seriously questions their self-worth. Open-source and free availability is good if exercised correctly, but enforcing that belief on a product with incompatible licensing terms or code that cannot be shared due to restrictions isn’t going to help us achieve our goals (worse, it could backfire, citing brand image, customer relations and so on).

Would anyone use a product where people are known to harass those who use other products? Would anyone come and talk to a representative of a community if the community in question has a history of name calling? Would anyone be persuaded to join the bandwagon if onlookers get an impression that all we do is go around and enforce our belief of open-source and free availability everywhere? As it stands now, the reputation of this community, and in extension, NVDA itself, is in jeopardy due to our careless words, actions and attitudes over the years. And don’t take this lightly: the reputation of NonVisual Desktop Access is shaped by you: attitudes, words and actions, as much as it is shaped by your enthusiasm, support, promotions and help to those who really need help using NVDA to its full potential.
 
Fellow NVDA community members, as we’re celebrating NVDA’s tenth anniversary this year, let us take a moment to reflect upon our attitudes, words and actions. Please don’t forget this: what makes NVDA special and worth trying (or moving away from it) is us: users, developers, supporters and others who are part of this community. Please don’t ruin the reputation of this community-driven screen reader (I myself would feel uneasy if I’m in a similar situation like Hartgen Consultancy, and so would NV Access and others in this community).

Sincerely,

Joseph S. Lee
Translator, code contributor and community add-ons reviewer, NVDA screen reader project
Chair, NVDA Tenth Anniversary Planning Committee
Moderator, NVDA International Users list

Wednesday, January 27, 2016

Windows 10 Redstone: Rocky start, build 14251, OneCore and other musings

Hi,
Note: Some of the things discussed are quite technical.
It's been over two months after last posting about Windows 10. For the past two months, I've been busying myself with some NVDA add-ons work, testing new Insider builds and have reorganized directory structure on the web server where nvda-kr.org and braillenoteusers.info sites live.
In terms of Windows 10 Insider builds, the past six weeks were rocky in terms of accessibility. The issues I and other Insiders observed - browse mode/virtual cursor not working in Microsoft Edge, object navigation issues and so on - were addressed as of today's Insider fast ring build (reference at the end of this post). But there are other important things to talk about Redstone wave 1 (RS1) - OneCore, why deep changes breaks things, performance and debugging and so on as they relates to user experience and accessibility. Along the way I'd like to iterate what Microsoft may need to do to increase Windows 10's market share before the free upgrade offer expires.
Redstone and OneCore: Building pieces for the future
Redstone is a mineral/electronic circuit found in minecraft used to build all kinds of materials. It is said that one can assemble these materials and build more complex materials (one example was that of a roller coaster).
Whereas Threshold marked the entry of Windows 10 and the concept of Windows as a service to the masses, various sources and posts from Microsoft executives (particularly Gabriel Aul, CVP of Engineering Team) indicate Redstone (the next Windows 10 upgrade wave) being a deep change to Windows NT internals. This stems from the fact that there were talks about project called OneCore, unifying the NT kernel code so it can run on all kinds of devices: PC's, tablets, smartphones, sensors and other things and so forth. In order to talk about why OneCore is a hot topic for some, let's talk about the evolution of two Windows kernel families: Windows NT and Windows CE.
Both Windows NT and Windows CE are a family of Windows releases targeting different audiences: NT was designed for PC's and servers, whereas CE was designed for embedded systems, pocket PC's and alike. Both families (technically, kernels) have several things in common:
* Released in an era where computing power was limited: Windows NT (1993) and Windows CE (1996) were released at a time when disk space, RAM and CPU features were limited compared to today. In 1993, Intel introduced Pentium (sometimes called 586) that introduced interesting features, yet many PC's of 1993 were using 80286 or 386. Likewise, a typical pocket PC from 1996 would have sported just a few megabytes of RAM, and none were using multicore processors (the concept of multiple CPU's on a single chip were being researched by computer scientists then).
* 32-bit kernel: Both Windows NT 3.1 and Windows CE 1.0 were 32-bit kernel, thus it required a 32-bit processor such as Intel 80386 (NT) and ARM 32-bit and MIPS R4000 (technically a 64-bit CPU but ran in 32-bit mode).
* Portability: Windows NT 3.x supported X86, DEC (Digital Equipment Corporation) Alpha, MIPS and powerPC, and Windows 10 supports X86, X64 and ARM (32-bit only so far). Windows CE, just like its NT counterpart, supports X86, ARM and other processors.
There were notable differences, however: Whereas NT kernel (ntoskrnl.exe) allows programs to use as much memory as it desired, Windows CE kernel (nk.exe) used a shared 32-bit address space, with programs limited in terms of memory consumption (from 1.0 to 5.0, CE programs could not consume more than 32 MB of memory, later relaxed starting with CE 6.0).
Although both operating systems had good design to begin with, what prevented them from being unified were hardware limitations, intended market and internal API's. It took more than a decade for x86 processors to cut down on power usage that is comparable to today's ARM processors, and smartphones weren't widely adopted by businesses until late 2000's. Also, due to internal design differences, API's used by these operating systems would not be unified until a port of Windows NT kernel became available with the release of Windows Phone 8, which kicked off kernel unification process that is still ongoing.
What I believe OneCore is: kernel and UI unification
Several components are involved when running an operating system: kernel, API's, services, security subsystem, user interface and users. Of these, I would like to focus on two areas that stand out: kernel and user interface.
Based on user interface differences between Windows 7, 8.x and 10, I believe part of OneCore to be user interface unification subsystem. If you examine Windows 8.x's interface carefully, you'll notice that certain things came from Windows Phone, including a dedicated PC Settings app, Start screen and others. This continues with Windows 10: many UI elements from Windows 10 comes from Windows Phone (now Windows 10 Mobile).
But in order to let Microsoft execute their strategy of one Windows everywhere, it was necessary to bring some PC-like interface to Windows 10 Mobile. This came in the form of Continuum - when a Windows 10 Mobile device is connected to a dock, its interface changes to that of a typical Windows 10 PC.
But OneCore isn't just UI unification: in order for a great UI and user experience to come to life, internal Windows components (specifically, Windows kernel) must also be unified. Can users use a product with good UI when its underlying foundation isn't stable? Hence, Microsoft spent the past few months perfecting OneCore kernel (it is still built on top of NT design, as it still comes with ntoskrnl.exe and friends). A clearer evidence that OneCore isn't just UI but also a kernel unification is the build string for the latest Windows Insider builds (10.0.14251; this comes from Windows Phone family, and as far as features are concerned, it's mostly bug fixes and minor things here and there compared to say, from 10240 to 10586).
So what happens if we put OneCore and Redstone together? I believe it indicates a bold strategy from Microsoft: one Windows everywhere, one Windows kernel (one core) across millions and billions of devices with the kernel and UI adopting to functionality offered by diverse devices. Thus, I expect Redstone wave to be quite a fundamental change, a change that will (hopefully) let Windows become an integral part of our computing lives as outlined by Microsoft (perhaps not for a while).
Redstone and accessibility: a rocky start
When I signed up for Windows Insider program back in October 2014, I've set out to find out and talk about how accessible these builds are. just like Threshold (Windows 10 RTM/1511) days, I'll continue to report on accessibility of Redstone on this site, mostly to let screen reader users know what's going on. And what a good way to start than talking about a rocky start, as we'll examine some building pieces and regressions here and there that were resolved in build 14251.
Accessibility regressions as a result of OneCore work
As mentioned above, Microsoft spent some time reworking some internal features of Windows 10. As a result, accessibility regressions were observed in earlier builds (now resolved).
A particular concern was UI Automation and screen reading. Due to UIA issues, some screen readers (particularly NVDA) had a hard time working with UIA objects. A good example was inability to use object navigation commands in Settings app and inability to use browse mode/virtual cursor facility in Microsoft Edge. Note that Naarrator was fine during this time (used Caps Lock+left and right arrows to move between controls). This is now gone as of build 14251.
Apart from history shortcut in Edge (right-clicking back/forward button), there aren't features that are new. Hopefully Microsoft will add new features and at the same time work on accessibility improvements to old and new features to make Windows 10 more appelaing for those using assistive technology.
Things Microsoft should do before free upgrade expires
In addition to accessibility improvements, I believe Microsoft should announce a feature that would entice users to upgrade to Windows 10 before the free upgrade offer expires. Edge extensions is one such feature, but I think a better engagement with those using universal apps ecosystem could help, seeing that more and more developers are adopting this paradigm.
Concluding remarks: Performance of and debugging pre-release software
Some people claim that Windows 10 Redstone builds are slower than usual. This is expected, as signing up for Windows Insider program means you are testing pre-release software (more so now that fast ring became a lot faster). In addition to ever-changing user interface and internals, debugging code will affect performance - developers of any software (including I, a code contributor to a screen reader project and author of several add-ons for this screen reader) write debug routines when writing software (a software that works 100 percent as advertised without debugging is extremely rare).
Thus, to reiterate what Gabe Aul and others following Insider builds have said: due to speed of releases, fast ring builds will be buggier (this includes performance and accessibility). I would go so far as say Insider fast ring builds are public alpha-level code, while slow ring is a polished beta. As far as accessibility is concerned, fast ring builds may introduce regressions, as we've seen for the past few weeks. As always, use Insider builds with caution (I and others do not recommend using Insider builds as your primary setup).
Until Redstone gets an exciting feature or status of accessibility changes...
//JL
References:
1. Insider build 14251 announcement: https://blogs.windows.com/windowsexperience/2016/01/27/announcing-windows-10-insider-preview-build-14251/
2. Windows CE (Wikipedia): https://en.wikipedia.org/wiki/Windows_CE

Tuesday, November 3, 2015

Windows 10 TH2: What's new, screen reader development strategies, do not trust all information regarding release dates and such

Hi,
Welcome to another episode of Windows 10 articles by yours truly. Those who are regular visitors to my blog might be familiar with a series of articles describing state of accessibility of Windows 10, advisories on screen readers and so on.
As Windows 10 Fall Update (AKA Threshold (th) 2, Fall Refresh and so on) is just around the corner, I'd like to take you on a tour of what's new and changed in Windows 10 Fall Update from screen reader point of view. I would also like to take a moment to talk about predictions for Windows 10 adoption, implications of Windows as a service for screen readers, key things distinguishing public release builds of Windows 10 and my attitude on forwarding news sources to email lists.
What to expect in Windows 10 Fall Update
Windows 10 TH2 (Fall update) brings exciting features. In addition to multimedia casting in Edge, things Cortana can do now and other changes, it includes various changes to state of accessibility. Compared to RTM (10240), it is more refined, slightly faster and looks more polished.
The features introduced or changed in Fall Update can be categorized into three broad areas: more integration and socialization, deep and subtle tweaks, and responses to feedback. In terms of integration and socialization, Skype is now integrated into the operating system in the form of three new apps: Skype phone (voice calls), Messaging (IM's) and Skype Video (video calls). Cortana is better at understanding input from "digital pens" (stylus), as well as providing event reminders and offering Uber rides to attend an event. It is also possible to stream games and other multimedia content through Xbox and Microsoft Edge, respectively.
In terms of deep and subtle tweaks, TH2 includes a much better way to tweak environment variables (a series of global settings used by operating systems for certain operations such as executable path search). Previously, if you had to edit things such as path used to look for programs, one had to use an edit field which was prone to mistakes, whereas in TH2, it is organized as a list and an edit field. Also, you can now tell Windows to use the last printer used regardless of network location, and Hyper-V allows running virtual machine guests inside guests (termed "nested virtualization"). Other tweaks include making the operating system respond faster, particularly in memory management and in areas where UI Automation (UIA) is used (slightly faster than RTM build).
In regards to responding to feedback, TH2 includes ability to specify accent colors in title bars, refined context menus and other tweaks in response to feedback received from users, Insiders, developers and enterprises. As far as accessibility and screen readers are concerned, it is great to see Microsoft willing to work with screen reader vendors to make the oS better respond to accessibility queries from screen readers.
So when will we get a chance to play with Windows 10 Fall Update and what will be the build number?
Throughout 2015, some news sources claimed that there will be a minor update to Windows 10 after it is released to the general public, and we're about to see this claim come to pass in a near future. In October 2015, reputable sources such as Windows central, Win Beta and others reported that TH2 will be released sometime in November, and it appears Microsoft is on track this time (based on frequency of Insider build releases and according to these sites). In addition, some sites claim that it'll be out in early November (some articles claimed November 2nd as the release date, but we've passed that point; some of the sites now claim November 10th or 12th as the big day when TH2 will hit the air).
However, I'd like to question some of these claims:
* Build number: Although some sources such as Windows central say Microsoft has signed off Windows 10.0.10586 as the official TH2 build, there's no official confirmation from Microsoft that November 12th will indeed be the big day.
* Build revision: RTM or public releases of Windows usually have a four-part version identifier: major (Windows NT kernel) version, minor release, build number, and build revision. For example, the RTM build of Windows 10 has the build string of 10.0.10240.16384. Similarly, Windows 8.1 general distribution release (GDR) sent out in April 2014 has the build string of 6.3.9600.17031. Technically, this four-part version string denotes the revision of Windows NT hardware abstraction layer (HAL), a part of the operating system that allows Windows to talk to motherboard and other fundamental hardware of a computer system. Because the latest publicly disclosed build of Windows 10 reported to sites such as Build Feed have "0" as the build revision, we cannot say build 10586 is indeed the TH2 release version for now (in order for this to happen, the fourth part (build revision) must be something other than 0).
* Watermark still present in public Windows Insider builds: As many other Windows Insiders can testify, desktop watermark (displaying the version of Windows one is testing) is still present in the latest publicly available Insider build (10576). One sure way to test if the claims of November 12th release date is true is if Microsoft releases a build of TH2 with the watermark removed (last time it happened, it was released to both fast and slow ring fliers, with two weeks to go before general availability of the RTM build).
There are two key evidences that may support the above claims made by Windows Central and other sites:
* Insider build release frequency: Just before RTM build was released in July 2015, fast ring Windows Insiders had a chance to play with up to three builds in a single week, with one of them eventually landing at the doors of slow ring fliers via Windows Update. We saw a similar activity within the past few weeks: two fast ring Insider builds released just a few days apart, with one of them eventually going out to slow ring Insiders.
* The identity of the new Windows 10 update: The version of Windows reported by windows Version (winver.exe) has changed. Instead of saying "Windows version 10.0", it now says "Windows version 1511" (build 10576), confirming earlier rumors that TH2 will be released in November 2015 (yymm, similar in format to Ubuntu's version identifier of yy.mm).
Until Microsoft (or at least Terry Myerson or Gabriel Aul) gives official confirmation, I'd not trust some of these sources, nor should be something that should be forwarded to mailing lists, especially ones dealing with screen readers.
As a side note, one of the questions you might have is if TH2 is a service pack. No, it is not. Some journalists (such as Mary Jo Foley and Paul Thurrott, two influencial and reputable reporters) wrote earlier in 2015 that there will be a series of huge updates codenamed Redstone, with the first one scheduled for June 2016, bringing Microsoft Edge extensions. I'm hoping that Microsoft would step up to the game, as it'll give people second thoughts about taking the free upgrade offer (one concern critics raised, which I agree somewhat, is privacy and collection of some data to improve the user experience).
Windows as a service: what does this mean to screen reader users, developers and observers
A few months ago, Microsoft proclaimed that Windows 10 will become an example of "software as a service". Software as a service means a given software product will receive continuous refinements, with some products using subscriptions (Source: Wikipedia). In other words, instead of a big release every two to three (and sometimes, five) years, Windows 10 will receive ongoing updates (serviced). As for a claim that Microsoft may debut a subscription-based Windows version, I don't know (Microsoft did try this approach a few years back with Windows XP in certain countries).
As a user, developer and an observer of screen readers and their landscape, I'm concerned that screen reader vendors might not be prepared for this change of strategy. Continuous refinement opens a possibility that future Windows 10 builds may break existing functionality, especially if it involves a workaround that has worked in previous builds (a good example is toast/Action Center notifications not announced for some JAWS 17 users). Thus, it is more important now for screen reader vendors, users, observers and Microsoft to work together to come up with a long-lasting strategy of partnership, feedback loop and understanding in order to make Windows 10 the truly universal operating system for many, including for those depending on screen reading solutions.
Windows 10 adaption: A hyperbola of thoughts, setbacks, recommendations and second thoughts
According to Microsoft and other sources, Windows 10 powers over 120 million devices today. Although the first weeks saw sharp rise in Windows 10 adaption, privacy concerns and a potentially major mistake by Microsoft (Windows 10 update mistakenly selected in Windows Update for some) signaled decline in Windows 10 adaption rates. However, I think the adaption rate for Windows 10 will rise sharply again next summer when end of gree upgrade offer approaches, and I hope Microsoft will do something fantastic with Redstone 1 to make that happen.
In conclusion, I think Windows 10 TH2 (Fall Refresh/Update) is quite an improvement compared to TH1 (Build 10240). New capabilities offered by Cortana, Edge and other features opens up new possibilities,and I'm glad to see Microsoft taking feedback seriously, including ones dealing with accessibility and performance. Although it has room for improvement, it appears to be a fine operating system, and I hope screen reader users, developers and observers would use this time to think about future development strategy when it comes to Windows 10 support.
If I'm to give a grade to TH2 as currently stands, I would give this a solid B: exciting, has lots of potential yet needs some more polishing such as improved accessibility of some Skype features and apps. Time will tell if TH2 will receive a better grade and embraced by many, including users of screen readers. Looking forward to using TH2 and the Redstone update with various screen readers next year.
//JL

Wednesday, October 28, 2015

An open letter to Microsoft and Windows 10 universal app developers and users concerning accessibility of universal apps

To leaders at Microsoft specializing in accessibility, customer and developer relations, Windows 10, universal app architecture and ecosystem and others, fellow developers of screen readers, Win32, WinRT and universal apps, users of Windows 10, screen readers, Windows 10 observers including Paul Thurrott, Mary Jo Foley and others:
My name is Joseph S. Lee, a blind college student from Los Angeles, a translation and code contributor to an open-source screen reader for Microsoft Windows and one of millions of blind and visually impaired users of Microsoft Windows operating system. First, a sincere thanks goes to Microsoft for your continued commitment to accessibility and starting a new era of Windows through release of Windows 10 in July 2015. Thanks also goes to millions of app developers for Microsoft Windows operating system for making your apps accessible for blind people, providing opportunities for blind users of your software to be productive in their workplace and use your apps in unexpected places.
One of the promises of Windows 10 is universality. although Windows 10 has opened up many possibilities for unification between devices, software ecosystem and so on, there is one major issue that many in the Windows 10 culture may have not grasped or just beginning to grasp: accessibility of universal apps, or as I see it, lack of such accessibility for people with disabilities, specifically blind and visually impaired users using screen readers. By writing this open letter to the parties addressed above, I hope to start a dialogue or perhaps let the general public know the impact that lack of accessibility of universal app platform could have on lives of millions of current and potential users of Windows 10, and in extension, universal apps from Windows store.
According to a recent fact sheet from World Health Organization (WHO), as of August 2014, there are about 285 million blind people around the world, with nine out of ten blind people living in low income regions (footnote 1). Even in developed nations such as United States, South Korea (where I'm originally from), parts of Europe and others, many blind and visually impaired users are classified as poor or low income, or in some cases, unemployed. Because of this, coupled with trends in computing and other factors, blind and visually impaired people are some of the most affected by information blackout, considering that access to information has become a must in 21st century.
One route taken by blind people to gain access to information is through a computer and a piece of software called a screen reader. A screen reader is a program that identifies what is on screen and presents this information to users via speech or braille. Technically, recent trends in screen reader ecosystem has focused on understanding and tracking events fired by various controls using a specific accessibility layer such as Microsoft Active Accessibility (MSAA) or UI Automation (UIA), and it has become a requirement for screen readers to include support for accessibility API's from the beginning.
A good example of mechanics of a screen reader is when toasts appear in Windows 10 (sometimes called Action Center notifications). When such notifications appear, the screen reader will gather necessary information about the toast (knowing that it was a UIA object firing an "alert" event) which has just fired an event. Once the screen reader gathers this information (which includes text of the notification), it will speak the notification so the user would be informed as to which app has fired this event and press Windows+V to go to and interact with the toast notification.
Another common use case of screen reading is web browsing. Because web page presentation is hierarchical in nature, screen reader vendors had to implement a way to give screen reader users an experience similar to reading a document from top to bottom. One such screen reader uses code injection to obtain just the needed information from web browsers such as Internet Explorer, Firefox, Chrome, Edge and others, and will construct a "linear" representation of this web document (footnote 2). This gets interesting when the web application provides extra information or coded in such a way that allows users to use a web application as though one has installed the app on his or her computer (a good example is Google Docs). Thanks to recent efforts such as WAI ARIA (Accessible Internet Rich Applications), websites have become accessible portal of information for screen readers.
However, when we examine accessibility of apps, particularly those powered by an emerging ecosystem called universal apps (Windows 10, we're seeing a bag of mixed accessibility. The level of accessibility of such apps (and for Windows 8.x, Windows Runtime apps) ranges from fully accessible (Windows Feedback, Facebook and others), partial accessibility (unlabeled or misuse of markup or other coding in Twitter, unlabeled radio buttons in Insider Hub and others) to outright inaccessibility (Maps, games and others).
One note of concern is partially accessible apps where screen reader developers such as I had to write workarounds for inaccessible parts. A good example is universal app version of Twitter, where tweets (or timeline) are shown as a list and thus exposed by UIA as list items. However, as far as screen readers are concerned, the items (or the labels for them) are images, which indicates poor UIA (Ui Automation) implementation. In contrast, the same UIA items used to show feedback in Windows Feedback app are coded correctly - feedback text are spoken by screen readers. This comparison shows that either something is going on with UIA, or Twitter developers might want to optimize certain parts of the app to make it shown correctly to screen readers when they request UIA to show them list item labels.
However, I'm afraid that this is just a tip of an iceberg. The Twitter example is just one of many apps that exhibit behavior that makes me and others wonder if developers thought about accessibility of universal apps in mind when they wrote the code and XAML (eXtensible Application Markup Language), the major components that powers such apps. Unless something is done to ask citizens of universal app ecosystem (users, developers, leaders at Microsoft, observers and others) to think about universal accessibility of universal app architecture and the products that will power or be powered by them (Windows 10 ecosystem and universal apps, respectivley), this app ecosystem will be ignored by current and potential users of Windows 10 who are blind, a minor yet important customer base for Windows 10 and various universal apps. If accessibility is not addressed early, it will come back to haunt us later, and I believe it is important for people to start talking about universal app ecosystem accessibility given Microsoft's proclamation that Windows will be a service and hopes of seeing one billion devices running Windows 10, some of them belonging to users with disabilities.
Thus, I would like to ask Microsoft and its partners, users and developers of universal app ecosystem, other users, screen reader users and developers and others to start thinking about accessibility of universal apps, as this app platform opens new opportunities and will be used by many, including people with disabilities for years to come. To developers of universal apps, as a fellow programmer, Windows Insider and as a user of some universal apps, I would like to ask you to think about accessibility of your apps, as it will mean great reviews by those with disabilities using your apps, which will translate to increase in user base, prominence in the ecosystem and more. To users of universal apps, please remember that, for a population of users who have experienced information blackout, accessibility of an app is one of their top priorities when they wish to join the band wagon. To Microsoft, I would like to seriously ask you to let universal app developers know about options available to make their apps more accessible, such as good use of UIA and learning about accessibility standards and why it is important to promote universal accessibility in their universal apps.
I hope to see the universal app architecture and the ecosystem flourish and increase and prominence, not only due to its potential, but also due to accessibility and efforts put into making universal apps universally accessible. Thank you.
Sincerely,
Joseph S. Lee

Footnotes:
1. Visual Impairment and Blindness, World Health Organization. http://www.who.int/mediacentre/factsheets/fs282/en/
2. NVDA architecture and design overview: http://community.nvda-project.org/wiki/DesignOverview

Thursday, September 3, 2015

NVDA Add-on Internals: SysTray List: Implanting a feature from another screen reader

Hi,
When transitioning between screen readers, one of the first things people might ask is inclusion of familiar features from old screen reader in the new product. As a user who have worked with multiple screen readers, I often ask this question when moving from one screen reader to another.
As more and more people are transitioning from JAWS for Windows to NVDA, a frequently asked question is whether NVDA has a dialog to show system tray (notification area) icons. By default, NVDA does not ship with such a feature, but it can be brought back with an add-on appropriately called "SysTray List". This add-on, developed by Rui Fontes and Rui Batista, allows you to view a list of system tray or taskbar icons, and this is the add-on we'll find out how it works in this add-on internals article.
To download the add-on, go to http://addons.nvda-project.org/addons/systrayList.en.html, and for the source code, go to http://bitbucket.org/nvdaaddonteam/systraylist. Just like the previous series on StationPlaylist Studio, you don't have to use the add-on to learn about its internals, but having the source code and/or using the add-on could help you as you understand how this add-on works behind the scenes.
Important disclaimer: This add-on was not developed by the author of this article, and views expressed in this article are strictly the author's. SysTrayList add-on is copyright Rui Fontes and Rui Batista, Windows API is copyright Microsoft Corporation, NVDA is copyright NV Access, Python is copyright Python Software Foundation.
Introduction to SysTray List add-on features
After installing this add-on, you can press NVDA+F11 to view a list of system tray icons. This dialog lists the icons in the notification area, as well as buttons to cilck, double-click and do right mouse clicks.
A hidden gem of this add-on is that there is no command to view taskbar icons (that command is taken by NVDA's review cursor selection copy command (NvDA+F10)). Instead, to view taskbar icons, press NVDA+F11 twice quickly (more on how this is possible in a second). The list view changes to show taskbar icons (including pinned items). Pressing ENTER will cause NVDA to perform a left mouse click.
Source code layout
This global plugin lives in its own directory named sysTrayList (globalPlugins/sysTrayList/__init__.py). Some add-ons, especially those that use helper modules uses package-style directory structure.
The global plugin file is composed of the following sections:
* Like any Python module, various modules are imported.
* An event executor (more on this below) that sends mouse events specified in the parameter.
* The global plugin (class GlobalPlugin(globalPluginHandler.GlobalPlugin)) which contains the systray script and helper functions.
* The dialog class (globalPlugins.systraylist.SystrayListDialog) for displaying the dialog itself.
NVDA+F11: A behind the scenes tour
So what exactly happens when you press NVDA+F11? When you press this command after installing the add-on, NVDA will do the following:
1. Determines if you pressed this command once or twice by calling scriptHandler.getLastScriptRepeatCount. If you press NvDA+F11 and then you press NVDA+F11 within the next half a second, NvDA will treat this as multiple press of this command.
2. If NVDA sees that you have pressed NVDA+F11 once, NvDA will locate system tray icons, otherwise it'll fetch taskbar icons.
3. The icon locators (both are private functions) will do the following to obtain a list of icons needed:
A. Each locator has a list of window paths (window class names) to be searched to locate the needed icons and their locations, and this list is used by another private function to obtain a list of icon names.
B. The private function will use user32.dll's FindWindowEx to locate the handle to the icons list where the icons live (more on this in the next section).
C. Once the handle is found, NVDA will locate the first icon via NVDAObjects.IAccessible.getNVDAObjectFromEvent function. Then NvDA will use object navigation emulation (object, does something, object = object.next) to locate the icons and store their names and location in a list, which will then be returned to the locator routines.
4. Once the locators obtain the list of icons and their locations, it'll call another private function to open a dialog and show the requested icons. Depending on script count, it'll change the title and the label for the icons list view.
5. After you select an icon and what to do (left click (default), right click, double-click), NVDA will perform the following:
A. NVDA will look up the location of the selected icon.
B. NVDA will perform a series of mouse clicks (mouseEvents function, more on this routine below).
FindWindow versus FindWindowEx and its relation to icon locators
Windows API has changed a lot in more recent versions of Windows. This came as a response to security concerns, to extend API functionality and so on. Because of this, you may see many Windows API functions that ends with "Ex" (short for "extended").
In the original version, FindWindow would return a handle to a window given the class name and child window class name. For example, if we need to obtain a handle to a menu bar in an app, we would use:
hwnd = FindWindow("WindowClassName", "MenuBar")
Specifying NULL (None) for the second parameter would search for the top-level window.
As opposed to FindWindow, FindWindowEx takes two additional parameters, namely the handle to a window where the search should begin and which child window to search (or a group of windows to search). This results in the following signature:
hwnd = FindWindowEx(handle, childGroup, className, childClassName)
For example, the above call to FindWindow could become:
parentHwnd = FindWindow("Desktop", None)
hwnd = FindWindowEx(parentHwnd, None, "WindowClassName", "MenuBar")
The "magic" behind icon name locator function
When asked by NVDA, the icon name locator function (noted above) will try its best to locate the first system tray or taskbar icon. This is how it is done:
1. For element in the path to be searched, it calls FindWindowEx to locate the needed handle. At first, this handle is 0, and search begins from the shell (desktop) object (the root of all windows).
2. Depending on the icons you are looking for, NvDA will search the following windows:
A. For system tray list: "shell_TrayWnd" (desktop object), "TrayNotifyWnd" (notification area), "SysPager" (system tray), "ToolbarWindow32" (first system tray icon).
B. Taskbar icons in Windows XP/Server 2003: "Shell_TrayWnd" (Desktop), "RebarWindow32" (Taskbar), "MSTaskSwWClass" (Taskbar), "ToolbarWindow32"), (first taskbar icon).
C. Taskbar icons in Windows Vista/Server 2008 and later: Shell_TrayWnd" (Desktop), "RebarWindow32" (Taskbar), "MSTaskSwWClass" (Taskbar), "MSTaskListWClass") , (taskbar icon).
3. For each path (window handle if found), this function will ask Windows to search for the next window in the path and store the resulting handle.
Conclusion
Although the idea of listing system tray icons seems easy, there is a lot going on under the hood, involving locating the correct window via Windows API and carefully designing the user interface. This shows that designing a simple add-on like this involves careful thinking, especially if it'll be used by many users around the world. I hope this article was helpful in letting you understand how simple add-on suggestions are developed and designed.
A big hint: you don't have to use this add-on to access list of system tray icons. To access system tray, press Windows+B.
Lastly, I would like to stress the fact that JAWS for Windows and NonVisual Desktop Access are two completely different screen readers. Although they have borrowed features from each other, the underlying philosophy, license type (proprietary and commercial for JAWS versus open-source and GPL for NvDA), design and programming language in use are different. Thus, please do not expect all JAWS functionality suggestions to be investigated by NV Access, or Freedom Scientific to borrow every feature from NVDA.
References:
1. FindWindow (user32.dll) reference (Windows API): https://msdn.microsoft.com/en-us/library/windows/desktop/ms633499(v=vs.85).aspx
2. FindWindowEx (user32.dll) reference (Windows API): https://msdn.microsoft.com/en-us/library/windows/desktop/ms633500(v=vs.85).aspx