NVDA 插件开发实践第二篇: 预备篇—确定需求,寻找已有方案

打工人的春节假期来啦!开启愉快的填坑之旅~

这是 NVDA 插件开发实践系列文章的第二篇。你可以查看“第一篇(画饼篇)”了解关于本系列的更多信息。

在这一篇我不打算带你编写任何代码,我想从我个人的角度跟你谈谈,开发个人项目如何确定需求。所谓“个人项目”,在本系列文章而言通常是指:自己开发一个 NVDA 插件去实现某功能。

我们想开发个人项目无非这两方面原因:自己确实有痛点;暂时没有或已有方案不满意。

你可能注意到,我提到了两个词: “需求”和“痛点”。
就笔者个人理解而言:对我们来说某功能可以用但用起来不爽,更高级的表述所谓“用户体验不佳”,这就是个实实在在的痛点。
而需求则更明确,比如我们在使用计算机时,需要一个能够在系统启动时播放开机声音的特性,这就是一个需求,需求是具体的,可量化的。
如果你是产品经理可不要挑刺,笔者无意过多讨论二者之异同点,在本系列文章中,即使读者当成同一个概念去理解也不会有什么可怕的后果。

确定需求

既然是开发个人项目,我们可能需要身兼数职,是用户,是产品经理,是开发者,当然,我们多数时候是在干开发者的活儿。

看吧!这么多角色,我们每个人的经历都是有限的,不一定有需求就去开发项目,毕竟做开发不是捏泥巴。拿笔者而言,一定是先去寻找已有方案,而不是自己“造轮子”。

已有方案往往更成熟,更通用,当然这也是一个验证个人想法的过程,能很大程度上避免在伪需求上做无用功。

实际场景举例

笔者用 VS Code 写代码的过程中有时候想知道当前光标处于第几行。很自然的想到,我可以开启行号朗读,于是我做了如下探索:

  1. 依次转到 “NVDA 菜单” → “选项” → “设置” → “文档格式”尝试开启“行号”朗读,无效。
  2. 在步骤(1)的基础上,尝试打开 VS Code 按 Ctrl+, 打开设置,检索 "LineNumber"、"Line" 等关键词,查看是否有相关的选项控制了这一行为。找到了 editor.lineNumber" 并将其设为 "on" 仍然无效。
  3. 通过 Google 搜索 "Line number in VS Code"这几个关键词,在 Stack Overflow 上找到了我在步骤(2)中所做过的相同设置: https://stackoverflow.com/questions/69048687/vscode-and-python-the-line-numbers-disappeared
  4. 通过 Google 搜索 "NVDA Line number in VS Code" 直接找到了 vs code 的官方 GitHub Issue microsoft/vscode#52429

检索的收货

通过以上检索和尝试让我知道了以下信息:

  1. NVDA 的行号朗读在支持的 IDE 或编辑器中能读出行号,个别 IDE 遵循本身的显示行号设置,这是已有经验。显然 VS Code 对于这一经验并不试用。
  2. 通过阅读 VS Code 官方的 Issue microsoft/vscode#52429 收货最多:
    • 之所以我的过往经验不适用,在上面的 Issue 中也得到了答案,这是 monaco-editor 的限制或刻意为之,属于已知情况,见 microsoft/monaco-editor#410
    • 通过查看以上讨论,让我更明确了,实际上,我真正需要的似乎也不是在逐行移动时读出行号,而是在需要时快速获取行号信息。
    • 目前较为可行也是官方给出的方案有两种: 一在状态栏上获取(NVDA 屏幕阅读器可按 NVDA+End),二通过按 Ctrl+G 跳转行号,可读出光标所在行列信息。
  3. 通过搜索引擎检索也再一次令我感叹生态的重要性,搜索的关键词中包括 "NVDA" 就间接的把搜索范围限制成了一个 Accessibility related 问题,能够找到相关性最高的结果。因为 Issue Reporter 在讨论中多次提到了 NVDA。
    • 补充:微软很多产品的文档是有屏幕阅读器版本或在辅助工具部分提到了屏幕阅读器的,如讲述人、NVDA、JAWS等,你可以尝试在 Google 搜索 “创建页眉页脚 屏幕阅读器”这几个关键词,大概率就能找到微软官方的文档。
  4. 产品官方文档、Q And A 或者开元项目的 Issue、 Discussion 往往具有较高的参考价值。

已有的不一定适合我

上面说了这么一堆,你是不是觉得很繁琐,也很无趣。但不得不说这的确是笔者实际遇到过的场景,类似的探索过程在个人的学习和工作中几乎成了一套组合拳。

要分享的其实是方法和思路,并不是最佳实践,读者们按需选用即可。

就上面所提到的朗读行号而言看似有了不错的解决方案:

  1. 状态栏获取, NVDA 有朗读状态栏的快捷键。
  2. Ctrl+G 的行跳转可直接读出行列信息,更快捷。

然而笔者并不满意:

  1. 状态栏上的信息很多,对于读出行号这一需求而言,其他的内容显然是冗余的。
  2. Ctrl+G 足够快捷但改变了系统焦点位置,实际上,想读出行号我需要两步: Ctrl+G 后按 ESC 返回编辑器。

那你要怎样……

“你还要我怎样……”

未完待续,来一首薛之谦的《你还要我怎样》缓一缓~

写在最后

如前所述,这一篇并非告诉你应该怎么做,开发个人项目确定一个需求也不需要这么麻烦,这篇旨在分享笔者遇到问题时通常会采取的一些解决方法,供各位读者参考。

笔者认为做开发是离不开资料检索的,这也是洋洋洒洒写这么多看似与开发无关内容的原因。

你可能还不知道 GitHub 也可能还没用过 Stack Overflow 这都无所谓,然而在使用搜索引擎寻找资料的过程中,笔者认为掌握高效的浏览器操作确实是必要的,这也就间接的对我们屏幕阅读器的基础应用提出了更高的要求。

好啦,这一篇也就写到这里吧!

最后,我希望听到你的赞美和批评,请通过任意一种你喜欢的方式给我一些反馈。

标签: NVDA 插件开发, 开发实践

添加新评论