使用 Emacs 和 gah 包进行可塑性计算
使用 Emacs 和 gah 包进行可塑性计算
可塑性计算:赋能用户代理
可塑性计算是一种范式,在这种范式中,软件生产者提供构建块而不是刚性的完成产品,使用户能够适应和重塑他们的数字工具以适应特定的工作流程。与供应提供的软件不同——在这些软件中,生产者为庞大的受众定义功能集——可塑性软件允许消费者承担产品定义,通过重新组合现有的库和程序来创建所需的行为子集。
这种方法将开发重点从为一般受众(N)构建转移到为单个用户(1)构建。通过为一个人构建,开发者可以绕过广泛错误处理、可重用模块化和正式分发的开销,快速达到"刚好足够"的能力状态。
案例研究:gah 包用于 GitHub 集成
gah 包是 Emacs 中可塑性计算的具体实现。它是为了解决一个特定的摩擦点而创建的:手动将 GitHub 问题复制到 Org-mode 中,以便在 Org Agenda 中进行跟踪。
核心需求
为了避免完整功能的 GitHub 客户端或复杂同步逻辑的开销,gah 采用了以下目标:
- 无缝集成:将 GitHub 问题(标题、描述、元数据)作为 Org 任务复制。
- 减少上下文切换:在 Emacs 中而非网页浏览器中执行大多数操作。
- Org 语法支持:使用 Org 语法表达思想和笔记。
- 基本 GitHub 操作:在网页浏览器中创建新问题并打开现有问题。
- 零认证开销:将认证委托给现有的系统工具。
技术规范
gah 将 GitHub CLI (gh) 作为 REST 服务使用,并将其视为 GitHub 的主要接口。这种架构使 Emacs 能够避免直接管理身份验证。工具集包含几个专门的组件:
- 用户界面:使用
Transient包进行菜单,使用Variable Pitch Table (vtable)进行数据显示。 - 翻译:使用
ox-gfm进行 Org 到 Markdown 的翻译,使用Pandoc进行 Markdown 到 Org 的翻译。 - 数据处理:使用原生 Elisp JSON 支持将
ghCLI 的响应反序列化为 Elisp 哈希表。
实现效率
该实现非常精简,大约只有 392 行代码。这一效率的一个关键例子是 gah-request-issues 函数,它通过结合命令列表、使用 shell-command-to-string 进行调度以及使用 json-parse-string 进行反序列化,在 20 行代码内就能检索问题。
Emacs 开发优势
Emacs 通过其作为动态编程环境的特性促进可塑性计算。由于 Elisp 是一种动态语言且已加载的代码之间没有隔离,用户可以在不重启应用程序的情况下,在运行中的会话内进行原型设计、评估和编排行为。
开发者可以通过以下各种界面进行迭代:
- Scratch 缓冲区和 Elisp 文件
- Org 源代码块
- IELM REPL、Eshell 或
eval-expression(M-:)
社区视角与反驳
虽然 gah 项目凸显了个人赋能的力量,但社区已经指出了这种方法的一些细微差别:
- 现有替代方案:一些用户指出,像
Magit Forge这样的强大解决方案已经存在,用于类似的 GitHub 集成。 - “Jank” 因素:可塑性计算的灵活性通常伴随着一定程度的 “vibeslop jank”,其中工具对创建者是功能性的,但缺乏专业软件的打磨。
- 技能差距:可塑性软件需要一定的编程技能水平,这可能成为非技术用户的障碍,对于他们,“可塑性”可能被视为“复杂”。
- 同步挑战:一些批评者认为,缺乏本地/远程同步的工具在专业环境中的实用性有限。
"工程师们习惯于他们使用的工具是灵活的。只有当我们需要工具对其他受众更易接受时,它们才会变得更受限制。"
最终,gah 包作为一个概念验证表明,在有合理期望和高层抽象的情况下,用户可以在一天内构建一个高度特定且功能完整的工具——这在孤立的、不可塑的应用程序生态系统中是不可行的。