免提编码:如何使用听写和眼球跟踪开发软件

2020-10-21 21:08:30

今年早些时候,我患上了肘部隧道综合症,这是一种重复拉伤,在我的两个肘部。结果,我几乎不能使用鼠标或键盘;几分钟后,我的手臂就会感到灼热的疼痛。即使我试图将我的计算机使用时间限制在60秒,我也会在不经意间让情况变得更糟。

正如您可能想象的那样,这是一件非常重要的事情;作为一名软件开发人员,我的整个职业生涯都建立在会使用键盘的基础上!

在用物理疗法、人体工程学和处方药来解决这个问题的多次尝试失败之后,我找到了一个解决方案,它可以让我在不冒进一步神经损伤的风险的情况下提高工作效率。我现在几乎只用麦克风和眼球跟踪器工作。

在本文中,我将向您展示该工作流是什么样子,以及我如何对其进行优化以满足我的需求!

为了让您快速了解一下这是什么样子,这里有一段我编写Reaction组件的简短视频:

我们将深入了解这一切是如何工作的,如果现在还没有太多意义,请不要担心!我主要是想预先展示这一点,以表明这一过程是多么可行。

听写软件已经存在很长一段时间了,但它通常纯粹是用来转录语音的,通常是在法律和医疗行业。编写代码则是另一回事,因为有很多语法、约定和非词典单词。

幸运的是,专门的软件已经存在了!我目前使用的是Talon Voice Talon Voice,这是一个专门用来帮助软件开发人员不用手工作的工具。

Talon有一个免费的公开版本,但令人兴奋的事情发生在付费的私人测试版中。您可以通过支持Patreon on Patreon上的创建者来获得访问权限。

作为爪子的新用户,你学到的第一件事就是如何听写单个字母。

一般来说,您不会一次听写一个字母,但它偶尔会派上用场,比如指定CSS单位(px、rem等)。

说到语音,英语是一种令人讨厌的语言。我们的许多字母听起来都一样。电话接线员说像“托马斯”中的玛丽、T这样的话是有原因的。

联合国用北约音标解决了这个问题--你知道,威士忌-探戈-狐步舞。但是这些词往往是多音节的,没有人有时间听爵士乐。因此,Talon包括自己的(主要)单音节单词的语音映射:

当我对着麦克风说“鼓”的时候,字母d就写得好像我按了键盘上的那个键一样。

你可以在字母前面加上“SHIP”,使它们大写。“船鼓”将输出D而不是d。

通常说数字,从0到9。如果我想输出1024,我会说“1024”。

对于大多数特殊字符,塔龙都有直观的映射。例如,COMMAND CAP将在按住C键的同时按住COMMAND,以复制到剪贴板。控制命令空间将在MacOS上打开Emoji抽屉,因为这是操作系统级别的映射。

某些键被映射到更短/更可爱的术语。我说的不是退格,而是垃圾。";删除";成为";戴尔";。如果您对任何映射不满意,顺便说一句,在Talon中一切都是可编辑的。

箭头键以单词GO为前缀。如果我想向左移动光标,我会说向左移动。

在英语中,序数是用来描述顺序的数字,如";第五";或";第九";或";三百";。在塔隆,他们用来重复命令。如果我想左转9个空格,我会说左转9位。

措辞有点奇怪。当然,向左转9;会更直观,对吗?但是已经取了9;它输出的是字面数字9。

这适用于所有命令。如果我想写数字1000,我会说1/3,重复3次0字符。

编写Javascript的传统方法使用CamelCase作为变量。事实上,当涉及到变量名时,有很多约定!塔龙对此有一个解决方案:格式化程序。

格式化程序是一个命令,它将转换之后说出的文本。例如,当我说“camel hello world”时,软件会输出helloworld。相反,“Snake hello world”会生成hello_world。

如果您希望输出文本而不对其进行转换,则命令为。“say hello world”将输出hello world。

要输出DarkColors,我可以组合Snake和allcaps格式化程序。“ALLCAPS SERVE DEKING COLUSES”输出Dark_color。

虽然塔龙确实有听写模式,但默认模式是基于命令的。可以将命令视为函数。到目前为止,我们看到的一切都是基于命令的。

例如,当我说焦点Chrome时,它就像我在调用焦点函数,并将Chrome作为参数传递。Focus是一个聚焦指定应用程序的命令,因此这等同于使用Spotlight选择Chrome。

不过,Focus并不是塔龙内置的黑盒原生功能;它是社区命令包的一部分。我可以访问和编辑源代码,它是用Python编写的:

塔隆的真正力量是能够创建你自己的命令。它提供了一系列用于与操作系统交互和输出字符的API。我已经为前端开发创建了十几个方便的实用程序,并且我希望随着我不断地使用它,我还会添加更多的实用程序。

对于更复杂的命令,您可以编写Python函数。举个例子,当我说“有样式的按钮奇特按钮”时,会发生这样的情况:

第二个单词Button与一组已知的HTML元素进行匹配。随后的单词“奇特按钮”是UpperCamelCase,并用作组件名称。它会添加一些空格,并将光标移动到适当的位置。

编程Talon命令超出了本文的范围。如果你感兴趣,看看非官方的塔龙文档非官方的塔龙文档。通过阅读现有命令是如何实现的,您还可以学到很多东西。

你也可以查看我的“我的命令”“我的命令”,其中包括我已经添加的所有反应内容--不过请注意,它是杂乱无章的、不完整的,而且文档也很少。

无论语音识别有多好,总会有难以解决的歧义。

例如,如果我说“请查看我的站点”,我是指“站点”还是“景点”?或者可能引用??

我从Emily Shea Emily Shea令人惊叹的会议演讲“Perl Out Loud Perl Out Loud”中了解到这个技巧。

我用的是Tobii5Tobii5。它是一个带有红外线传感器的条形图,它可以跟踪你的眼球运动。它拍打在你的显示器前面:

有趣的是,它并不是作为鼠标替代品来销售的;它是为Windows用户设计的,目的是为了某种竞争性的游戏目的。不过,Talon--和我用来听写的软件一样--包括定制的MacOS驱动程序,可以让它充当鼠标替代品。

在两个步骤的过程中单击。首先,你看一下你想点击的地方,然后用嘴巴发出爆裂的声音。这将以一种放大的方式,并允许您与您的点击非常精确。第二个弹出窗口将执行左键单击:

有双击、右键单击以及拖动和释放的命令。这需要一些时间来适应,但它的效果出人意料地好。精确度足够好,可以做一些相当精确的事情。

托比5售价229美元。你也可以试着找到托比4C,据说它能提供更流畅的塔隆体验,但它们真的很少见。

到目前为止,我只分享了我所学到的冰山一角,我所学到的只是更大冰山的一角--塔龙是一个非常强大的工具,我还在摸索中。熟练使用键盘花了数年时间,所以我的听写之旅还很早。

事实上,我要说的是,整个家庭手工业都是相当新的。塔龙是一项奇妙的技术,它已经对我的生活产生了巨大的积极影响,但我认为前方有如此多的潜力和机会。

Talon每天都在继续改进--它使用一种专有的机器学习算法来处理语音识别,我已经看到它有了明显的改进。其他产品,如小夜曲,似乎也相当吸引人。

与此同时,像Neuralink Neuralink这样的公司正致力于在我们的大脑和日常技术之间建立一种直接的联系。这听起来像是科幻小说,但我可能很快就能把我的代码植入Existing✨😮✨。

我得说我可能是以正常速度的50%左右工作。现在,这并不意味着我产生了50%的结果,只是意味着我需要更无情地安排优先顺序。

我听说学习Vim可以让这件事变得更有效。根据我的伤势持续多长时间,我可能会考虑转会。

到目前为止,我发现的最大问题是嗓音紧张;我不习惯一天讲8个小时以上的话!我想我需要建立一种宽容,我希望随着时间的推移在这方面变得更好。

最初的几周是艰难的。除了速度慢和令人沮丧之外,爪子在你自己写命令的时候工作得最好。我在试着把它弄好的时候会弄伤自己的。能够通过语音配置Talon是一个真正的里程碑,从那时起它就变得顺畅多了。

老实说,发现我的手不需要我的手来做我的工作,这让我松了一口气。最近,我在蛋头播客“蛋头”播客上听到肯特·C·多兹和乔尔·胡克斯谈论肯特是如何提防自己的手受伤的,因为作为一名软件开发人员和教育家,他们都是他的摇钱树。我过去也有同样的感觉,但现在我看到,只要有一点决心和很多了不起的技术,没有什么能阻挡我的路💖。

事情是这样的:你不太可能患上肘管综合症。即使你这样做了,它可能会在几周后自行消失;许多病例会自发解决,而且大多数对保守治疗都有很好的反应。我是个边缘人。

然而,在你生命中的某个时候,你可能会经历某种形式的损伤,无论是暂时的还是永久性的。几乎我们所有人都会。

它是如此容易落入这样的陷阱,认为可访问性是影响其他人的东西,是一个假设的抽象群体。多年来,我一直知道易访问性很重要,但对我来说,它让我感觉有点模糊;我从来没有见过有人因为我没有在没有鼠标或键盘的情况下进行测试而费力地使用我制造的东西。现在对我来说,这件事更紧急了。

我仍然享有令人难以置信的特权,我并不想将我的情况与其他任何人进行比较。但这段经历让我有了一扇窗户,让我了解了试图在一个没有考虑到替代输入机制的互联网上操作是什么样子。在我习惯使用眼球跟踪器之前,事情变得棘手起来。而且某些事情比以前困难得多。

互联网已经成为关键的基础设施。它是现代社会生活中必不可少的一部分,而且它需要容易接近!作为前端开发人员,我们的工作就是倡导它,并确保我们在构建时牢记可访问性原则。

我从这次经历中学到了另一件事:我应该优先考虑对我来说重要的事情!

我开发的最早的网络应用程序之一是一个教育平台。这是大约十年前的事了,它是用PHP、MySQL和jQuery构建的。

当我发现可汗学院时,我放弃了那个产品,这基本上就是我正在做的,但要好得多。后来我在可汗学院做软件工程师,做一些我职业生涯中最有成就感的工作。

我早就想过,在某个时候,我会在教育领域开创自己的事业。尽管多年来我一直有动力去做这件事,但我一直在拖延。这段经历教会了我一些有价值的东西:我没有无限多的时间等着我。如果有什么我想做的事,我现在就去做,因为我以后可能做不到。

几周前,我辞去了盖茨比公司(Gatsby Inc)高级职员软件工程师的工作,一直在默默地从事一项新工作。我马上就要宣布了。我现在要说的就是:如果你喜欢我最近关于全血布局的博客文章,你一定会喜欢我在😉上所做的。

我要感谢两位朋友和以前的同事,他们向我提出了听写的想法:安伯利·安伯利和玛德琳·玛德琳。我不确定我会不会想到这个主意!