去年,以数字花园可视化而声名远扬的设计师 Maggie 宣布,用户端编程——中文中常称用户自动化——迎来了一个 Home-Cooked 时代,就像赤脚医生之于学院派权威,或家庭厨师之于 CIA 的帅气名厨,普通玩家也可以为自己和亲朋好友编写轻量级程序,而无需承担商业上的巨大风险。她本人确实是一名优秀的 Home-Cooked developer。
但 Maggie 预言的时代并未来临。管见以为,她的乐观情绪来自人工智能,但在没有合适指引的情况下,人工智能不是银弹(Silver bullet)。赤脚医生有政府印刷的指导手册,家庭厨师有 YouTube 视频教程和小红书社区,但自动化玩家却只是一个鲜有经典可据的边缘群体(不考虑软件设计教材)。
指引不可或缺。如果你看着太阳,至少可以跳到月亮;如果你看着月球,可能只能在地球上踏步。自动化玩家的进阶指引,也应当具备一定的前瞻性,而不是现有技巧的汇编。有过几年的知识产权工作经验后,我意识到,《专利审查指南》(下称《指南》)足以作为用户自动化的北极星。
创造性
某个东西想要获得专利,需要同时具备三个属性:新颖性、创造性和实用性。抛开冗长的审查程序以及救济渠道不谈,仅仅这三个属性的判断(2023版的指南有六百多页),就有不小的篇幅。万幸,我们完全不需要通读《指南》,就连三个属性都没必要死记硬背。
具言之,新颖性是最低标准,你总不能拿着原封不动的东西去申请专利,而单纯求新,也无法指引自动化设计;实用性的具体判断则是一个负面清单,例如依托特定自然条件而难以复现的设计,或违背道德和法律而不允许实施的基因编辑。对于用户自动化而言,只需考虑创造性。
发明的创造性,是指与现有技术相比,该发明有突出的实质性特点和显著的进步。
可惜,创造性的标准定义很无聊,就连我这个从业人员,也不可能从中格出什么知识。《指南》中真正有趣的不是这些正面描述,而是网开一面的例外情形,而例外,恰恰是创造性的最佳体现。
开拓发明,量力而行,尽力而为
开拓性发明,是指一种全新的技术方案,在技术史上未曾有过先例,它为人类科学技术在某个时期的发展开创了新纪元。
开拓性发明的典型例子是四大发明和蒸汽机。但很可惜,如果指南针是在《指南》颁布后才被发明的,我估计专利局一定有办法驳回指南针的专利申请,因为没有人可以垄断这些最基本的东西。根据 Brian Arthur 的见解,技术可以视作符合人类目的的自然现象再编程,在这个意义上,四大发明已经基础到近乎 print("Hello World") 级别,确实很难将至占为己有。
在自动化玩家的圈子里,出现开拓性发明的可能性更低,毕竟玩家们能够利用的资源,几乎都是他人的劳动成功,而非直接向自然界寻租。开拓性发明这一概念,不如作为一个避雷的方向,当你觉得自己似乎要成为 Jobs 第二的时候,不妨想想,你的成果不过是建立在 Shortcuts(快捷指令)这块脆弱的沼泽地上。
避免在用户自动化上投入超出直接回报的时间。
组合发明,独辟蹊径,出乎意料
组合发明,是指将某些技术方案进行组合,构成一项新的技术方案,以解决现有技术客观存在的技术问题。
组合发明是典型的一加一大于二。即便是不懂任何编程知识的自动化玩家,也可以利用图形化工具,制作一些简单的动作。例如 iOS 和 macOS 自带的 Shortcuts,大部分时间都不需要编写代码,只需组合现有模块,就可以做出一些实用玩具。不过,Shortcuts 及其中文名”快捷指令“极具误导性,容易让新手误以为自动化就是三步并作两步,实则不然。线性 Shortcuts 动作的创造性,在乎超越各个模块功能的叠加。
下载 Instagram 图片即为适例。
动作核心模块只有两组,一组是整理剪贴板内容并获得图片链接,第二组则是下载链接对应的图片。设计这一动作的前提,必须是意识到网页版或 PWA 版 Instagram 上的图文内容可以长按复制,进而处理所复制的内容,而不需要任何爬虫或者网页接口知识。动作所涉的任何模块都看不出和 Instagram 有何关系,甚至看不出和网页有什么关系(没有用到经典的 Get Contents of URL 模块),但是最终效果超越了模块的简单叠加。
如果允许编写代码,组合设计效果益彰。我几乎单枪匹马开创了对照翻译软件市场,但思路显然并不为可爱的小拷贝猫们所理解。我观察到两个简单的事实:其一,至少在二十年前,就存在原地复制网页并左右并置的 bookmarklet 小书签,设计者或许只是为了方便同时查看一个长网页的不同位置;其二,成本降到零的网页翻译插件、浏览器预设功能或 API。我很快发现,如果在复制网页内容后,只翻译其中半边,就能够左右对照翻译页面。
紧接着,我又发现,如果放弃复制整个页面,转而逐段复制后再翻译复制后的内容,就能逐段对照翻译,阅读体验更加无缝。
很快,这种一段原文、一段译文的形式,就成了翻译软件和插件的事实标准。我很庆幸从一开始就开源了核心代码——其实只有几行!——虽然无法从中直接获利,但也免去了旷日持久的专利诉讼,这是我年轻时所犯过最浪费时间的错误。同时,托我的福,任何一家公司也不能将对照翻译技术占为己有而状告他人,包括我。这是非常有效的消极防御。
选择发明,杂取种种,为我所用
选择发明,是指从现有技术公开的宽范围中,有目的地选出现有技术中未提到的窄范围或者个体的发明。
选择发明的规则看似抽象,实际可参考组合发明:杂取种种,合成一个,就像鲁迅写小说一样。
自动化玩家之所以还是玩家,在于没有商业负担,在个人环境中,通常也无需担心知识产权风险,在这些前提下,我经常攫取现有设计中令人满意之处,合并于一个设计。例如,轻量级的自定义图片标注方案(有 Shortcuts 实现和 Keyboard Maestro 实现)。我不想为了一两个标注工具,就把对应的标注软件都买一遍,更何况,就算不介意花钱,实际使用时也不可能像木兰从军一样,东一榔头西一棒地标注。
于是,我自制了轻量级图片标注工具(本质只是图片叠放),先把看对眼的标注素材存进去,需要时直接调用,就不必依赖特定软件。
距离方案成型,时间也过去了五六年,至今为止,我的大部分文章配图依然用它标注。专利审查固然无暇顾及长寿——否则连专利的时效都过了——但在自动化设计中,长寿,也值得作为目标之一。和下文即将介绍的套壳截图动作类似,基于选择发明思路的标注工具,也从一开始就实现工具与素材解耦,日后需要什么新素材,只需要改动数据,而不用对自动化动作本身做开颅手术。
转用发明,他山之石,可以攻玉
转用发明,是指将某一技术领域的现有技术转用到其他技术领域中的发明。
一些相对进阶的自动化动作,很可能涉及通配符、正则表达式、Javascript、HTML 和 数学公式等高阶功能。几乎可以肯定,这些功能的发明者,大概率没有考虑过自动化玩家,可一旦自动化工具集成了前人成果,玩家们没有理由对它们敬而远之。
我们可以用正则表达式提取冗长网页中有价值的图片链接,也可以用 HTML 技术呈现一个自定义的长句翻译弹窗(在相当长的时间里,系统原生是不支持句子翻译的),或者悬置一个剪贴板贴图窗口。
在摸索转用思路时,常常需要稍稍后退,避开对现有功能的偏见。我多次使用 Automator 中的网页模块(暂未被 Shortcuts 继承),此时就不能只想着展示网页。据说 BBEdit 的预览窗口也是一个迷你的浏览器弹窗。网页设计是一项繁重的工作,但自动化玩家不需要承此重担,只需取网页技术为我所用。
此外,《指南》还单列了已知产品的新用途。这种情形与转用发明类似,只不过在审查专利候需加以区分。倒是在自动化设计之外,新用途是个值得单列的有益思路,例如轻量级代码编辑器,就常被用于编程之外的目的,我在整理法律文书和法律文件时,就喜用 Markdown 格式存储规范文件,此时就需要
