阅读视图

发现新文章,点击刷新页面。

一键发布 Newsletter:AppleScript 与 Quaily CLI 的完美配合

Quaily 是一个新兴的、AI 驱动的现代化 Newsletter 服务,也是少有的由华人开发的产品。我初次了解这个平台是通过 Quaily 首席 Lyric 的一条推文,年代久远我就不去翻找了,大意是他比较了市面上的几个 Newsletter 平台后不甚满意,于是决定亲自开发一个。最初使用时,Quaily 的功能还不像现在这样完善,但其页面精美与时尚感就已经深深吸引了我。再加上听说 Lyric 本人也是位不折不扣的帅哥,对于一个「颜狗」来说,好看即正义!无脑冲呗。

事实证明,真正的帅哥魅力不仅来自外表,更在于能力与审美的完美结合。想想蒋丞、顾飞、江添、顾望……咳咳,言归正传。

Quaily 绝非徒有其表,而是拥有众多实用功能的专业工具。我并不想把这篇文章写成软文,具体功能介绍可以移步用户手册查看。下面,我将分享如何利用 AppleScript 实现一键发布的便捷操作。

为什么选择 AppleScript?

AppleScript 是 macOS 内置的自动化脚本语言,它使用户能够创建自动化工作流程,控制各种支持脚本的应用程序。选择 AppleScript 的优势在于:

  1. 无需安装额外软件,系统原生支持
  2. 与 macOS 系统深度集成,运行稳定
  3. 可以控制几乎所有支持脚本的 Mac 应用程序
  4. 可以直接让 AI 生成脚本,基本不需要修改就能使用(这一点尤为关键)

实现方式

区别于其他 Newsletter 服务,Quaily 提供了 Quail CLI 这款强大的命令行工具,可实现用户认证自动化、Markdown 文章管理以及用户详情获取等操作。它通过与 Quaily API 交互,让用户在命令行环境中完成各种操作,如登录、获取用户信息、文章的创建、更新、发布、取消发布和删除等,无需通过网页界面。这些功能为通过脚本实现自动化发布奠定了坚实基础。(具体使用说明请参见《介绍 Quail CLI:简化你的工作流》)。

注意:如果我们使用的是 Obsidian,可以直接使用 Quaily 官方提供的插件,无需自己编写脚本这么麻烦。

安装与配置 Quaily CLI

在构建自动化脚本之前,您需要先安装并配置 Quail CLI。安装过程十分简单,只需执行一条命令:

go install github.com/quailyquaily/quail-cli@latest

当然,前提是系统中已安装 Go 语言环境。或者您也可以直接从 GitHub 上安装 Quaily 官方编译好的二进制文件,截至 2025 年 3 月 6 日,二进制文件的版本号为 v.0.0.3。

安装完成后,需要进行登录认证。打开终端,执行 quail-cli login 命令,系统会启动 OAuth 流程完成 Quaily 身份验证。终端中会显示一个 URL,您需要访问该链接并授权应用程序访问您的账户。认证成功后,登录信息会保存在配置文件中(默认位于 $HOME/.config/quail-cli/config.yaml),今后操作就不再需要重复登录了。

配置文件包含您的认证信息和一些自定义设置,例如前置元数据映射等,这些设置能帮助您更好地适应自己的工作流程。比如,您可以自定义 frontmatter 中的键映射,将 featureImage 映射到 cover_image_url,使其更符合您的使用习惯。

AppleScript 基础与命令行交互

脚本的目标是实现一键发布到 Quaily,而 AppleScript 的关键优势在于它能执行 shell 命令,从而调用 Quail CLI。

在 AppleScript 中,执行 shell 命令通过 do shell script 命令实现。这个命令由 macOS 中的 Standard Additions 脚本扩展提供,让您可以在 AppleScript 中执行任何命令行工具。例如,要执行 ls /Applications/ 这样的简单命令,您可以这样写:do shell script "ls /Applications/"

需要注意的是,当 shell 命令包含空格或特殊字符时,必须正确引用这些字符。最简便的方法是使用 AppleScript 的 quoted form of 属性,它会返回一个安全的字符串形式,不受 shell 进一步解释的影响。例如:do shell script "ls " & quoted form of "/Library/Application Support/"

对于包含中文等非 ASCII 字符的文件路径或命令,正确设置环境变量至关重要。这能确保 UTF-8 编码的正确处理,避免乱码和路径识别错误,特别是在处理包含中文字符的 Markdown 文件或文件夹时。使用以下方式设置环境变量:

do shell script "export LC_ALL=en_US.UTF-8; export LANG=en_US.UTF-8; your_command_here"

这样,即使您的文件名或路径包含中文字符,AppleScript 也能正确处理而不会出现编码问题。

构建 AppleScript 脚本实现一键发布

现在就可以结合前面的知识,构建一个完整的 AppleScript 脚本,实现一键发布到 Quaily 了。这个脚本包括以下步骤:选择要发布的 Markdown 文件,使用 Quail CLI 上传并发布该文件。

首先,需要选择一个 Markdown 文件。这可以通过 AppleScript 的 choose file 命令实现:

set markdownFile to choose file with prompt "请选择要发布的 Markdown 文件:" of type {"md", "markdown"}

接下来,获取用户的列表(list)信息。为简便起见,可以在脚本中预设列表的 slug,或者通过对话框输入:

set listSlug to text returned of (display dialog "请输入要发布到的列表 slug:" default answer "your_list_slug")

然后,使用 Quaily CLI 的 post upsert 命令上传文件:

set uploadCommand to "export LC_ALL=en_US.UTF-8; export LANG=en_US.UTF-8; quail-cli post upsert " & quoted form of (POSIX path of markdownFile) & " -l " & quoted form of listSlug
set uploadResult to do shell script uploadCommand

上传成功后,Quaily CLI 会返回包含帖子信息的 JSON 响应,您可以从中提取 slug 信息:

-- 假设 uploadResult 是类似 {"status":"success","data":{"id":"12345","slug":"my-post-slug",...}} 的 JSON 字符串
-- 使用简单的文本处理来提取 slug
set slugExtractCommand to "echo " & quoted form of uploadResult & " | grep -o '\"slug\":\"[^\"]*\"' | cut -d\\" -f4"
set postSlug to do shell script slugExtractCommand

这段代码使用管道命令组合 grepcut 从 JSON 响应中提取 slug 值。grep -o 查找包含 "slug" 的部分,然后 cut 命令分割字符串并提取 slug 的实际值。

获取到 slug 后,继续使用 post publish 命令发布该帖子:

set publishCommand to "export LC_ALL=en_US.UTF-8; export LANG=en_US.UTF-8; quail-cli post publish -l " & quoted form of listSlug & " -p " & quoted form of postSlug
set publishResult to do shell script publishCommand

最后,显示操作结果:

display dialog "帖子已成功发布!" buttons {"确定"} default button "确定"

将这些步骤组合起来,您就拥有了一个实用的一键发布脚本。

高级优化与自动化技巧

为了进一步提升自动化流程的效率,可以考虑以下高级优化策略:

自动提取 Markdown 前置元数据(frontmatter)是一个非常实用的功能。通过 shell 命令如 grepsed,可以解析 Markdown 文件并提取其中的 slug 信息,无需手动输入:

set extractSlugCommand to "grep -m 1 'slug:' " & quoted form of (POSIX path of markdownFile) & " | sed 's/slug: *//' | tr -d '\r\n'"
set postSlug to do shell script extractSlugCommand

加入错误处理机制也很重要,确保脚本在各种情况下都能稳定运行。例如,检查文件是否存在,检查上传和发布过程中是否有错误等。使用 AppleScript 的 try...on error...end try 结构实现:

try
    -- 脚本主体
on error errorMessage
    display dialog "发生错误:" & errorMessage buttons {"确定"} default button "确定" with icon stop
end try

AppleScript 支持将脚本保存为独立应用程序,并可添加到 Dock 或设置键盘快捷键,实现真正的「一键」发布。创建应用程序的步骤很简单:在 Script Editor 中编写脚本,然后选择「文件」→「输出」,在格式中选择「应用程序」。

此外,如果需要在发布过程中加入其他步骤,如预处理 Markdown 文件、自动生成标签、上传图片等,都可以通过扩展脚本来实现。

结合实际工作流的应用场景

在实际的内容创作工作流中,一键发布脚本可以与其他工具和流程无缝集成。例如,将其与 Markdown 编辑器结合,当文章编辑完成后,直接点击按钮或使用快捷键触发发布。就像我使用的文本编辑器 BBEdit,内置了 AppleScript 管理功能,可通过快捷键直接触发脚本。

您还可以考虑与其他自动化工具结合,如 Hazel、Keyboard Maestro 或 macOS 自带的 Automator,构建更复杂的工作流。例如,当将新的 Markdown 文件放入指定文件夹时,自动触发发布流程;或设置定时任务,在特定时间自动发布预先准备好的内容。

通过这些集成和扩展,一键发布脚本可以成为一个强大的内容管理和发布解决方案,大幅提升工作效率。

结语

在本文中,我并未提供自己使用的完整脚本,而是希望帮助您理解如何使用 AppleScript 和 Quail CLI 实现一键发布,并鼓励您根据自身需求定制和扩展这个解决方案。通过自动化处理重复性任务,我们可以将更多时间和精力投入到创意和内容质量上,这正是技术为创作者带来的最大价值。

注:本文中的 API 端点和参数仅为示例,实际使用时请参考 Quaily 的官方文档


本文初稿在 Tana 上完成,这是一款通过将 AI 驱动的结构化数据库与流畅的大纲列表相结合的笔记软件,重新定义了现代知识管理,使用户能够无缝地组织相互关联的想法,同时保持自由形式思考的灵活性。

2024 年数字工具箱

我总是很好奇人们是如何使用电脑的。例如,我会逛论坛,去了解网友们选择了哪些应用程序;我会问朋友,咨询他们如何设置生产环境;我会在社交媒体上留意,桌面上有哪些产品、电脑和手机上安装了哪些应用程序……多年来,我从许多人那里学到了很多好方法,所以在这个岁末,也想整理我的数字工具箱,并写出来。虽然我有哪些硬件设备,常用哪些软件,在博客的 Uses 页面中已经列出。

回归原生

在这个号称使用 Cursor 就可以迅速开发出一款应用的时代,我却选择了一条看似反潮流的道路——回归原生应用。这个决定并非一时兴起,而是基于长期自我观察和深度思考后的审慎选择:只要系统自带的应用能够满足需求,我就不再寻求第三方替代方案。

这种转变带来的便利远超预期。以日常使用场景为例,iOS 相机和照片应用内置的 OCR 功能,让扫描文档和提取文字变得轻松自然;系统级的日历与提醒事项的深度整合,让我能够更高效地管理时间和任务;而 Apple Notes 不仅通过端到端加密确保了敏感信息的安全性,其在文件扫描和团队协作等场景中的表现也令人惊喜。

在实际使用中,我发现 Apple 的原生应用生态已经能够优雅地覆盖日常数字生活的绝大部分场景。从查看地图导航到获取天气信息,从预览各类文件到进行即时通讯,这些基础但重要的需求都能得到妥善满足。这种整合的便利性在移动设备上尤为明显,为日常使用带来了前所未有的流畅体验。

回归原生应用还带来了其他显著优势。首先是性能和稳定性的提升,原生应用通常能更好地适配系统,消耗更少的系统资源。其次是隐私保护的加强,不必担心第三方应用对数据的收集和使用。最后是降低了维护成本,无需频繁更新和调试各类第三方应用,也减少了订阅支出。

对于那些确实需要使用第三方应用的场景,我也开始优先考虑支持 Apple 原生设计规范的应用(Apple Native)。这类应用不仅在界面和交互上与系统保持一致,还能更好地利用系统特性,比如深度集成 AppleScript、支持 Shortcuts 自动化、Live Activities 实时活动、Focus 专注模式等功能,从而提供更加统一和流畅的使用体验。

当然,这种回归并非意味着完全摒弃第三方应用。对于特定的专业需求,优秀的第三方应用仍然是不可或缺的补充。关键在于找到原生应用和第三方工具之间的平衡点,让它们能够各司其职,相互协作,共同构建一个高效而统一的使用环境。

隐私与安全

在这个网络钓鱼与欺诈横行时代,个人隐私与网络安全已然成为每个人都不容忽视的重要课题。每一次网络浏览、每一次应用使用,都可能留下数字足迹。因此,构建一套完善的隐私保护体系变得尤为重要。在我的实践中,这套体系主要围绕三个核心展开:DNS 防护、广告拦截和密码管理。

DNS 服务的选择是保护个人隐私的第一道防线。在国内时,我选择在 Surge 环境中使用开源的 EasyMosdns 无污染 DNS 分流 API(DoH)。这是一个通过 IP 分流远程加密查询来保护用户隐私的解决方案,不仅具有极高的解析精准度,还能有效避免 DNS 污染。而移居里斯本后,我转向了 NextDNS 服务。尽管其响应速度略慢于 Cloudflare Public DNS,但差异微乎其微,而在隐私防护方面的出色表现足以弥补这一细微差距。NextDNS 提供的丰富自定义配置选项让我能够从源头阻止跟踪器,同时有效屏蔽广告。每月 300,000 次查询的免费额度对个人用户来说已经相当充裕,而仅需 €1.99/月的进阶套餐更是物超所值。

为了构建更全面的防护网,我在电脑端和移动端的 Safari 上安装了 Wipr 2 广告拦截扩展。这款轻量级工具不仅能有效拦截广告,还可以屏蔽各类跟踪器和恶意脚本,与 DNS 层面的防护形成了双重保护。这种组合不仅提升了网页浏览体验,更重要的是确保了个人隐私数据不被随意收集。

在密码安全领域,我采用了 Bitwarden 和 Ente Auth 双管齐下的策略。Bitwarden 作为主力密码管理工具,其开源特性和强大的加密技术赢得了我多年的信任。虽然它支持自托管部署,但考虑到安全性和维护成本,加之我并不信任自己的技术,选择了每年 $10 的官方云服务版本。这不仅让我能够在各种设备上安全便捷地访问密码库,更重要的是能够使用包括双因素认证在内的高级功能。特别值得一提的是,Bitwarden 与 Fastmail 的深度集成让我能够直接生成匿名邮箱用于各类网站注册,这在保护个人隐私和杜绝垃圾邮件方面发挥了重要作用。

虽然绝大多数的双因素认证直接使用 Bitwarden,但我还是选择了 Ente Auth 管理一些特殊的双因素认证需求。例如 Bitwarden 账户本身的 2FA 验证码以及其他重要服务的双重认证。Ente Auth 独特的下一个验证码预览功能在实际使用中带来了极大便利,让双因素认证不再是一个繁琐的过程。这两款工具都秉承开源理念,源代码完全公开透明,不仅接受公众审查确保安全性,更从根本上保障了用户数据的隐私。

生产力工具

在数字工具的选择上,2024 年是我突破固有认知的一年。这种突破不仅体现在工具的选择上,更体现在使用理念的转变上。从笔记管理到写作工具,从信息获取到自动化工作流,每一个选择都经过充分酝酿,最终形成了一个高效协同的系统。

在笔记工具的选择上,我完成了从 HeptabaseTana 的转变。作为一款融合了 Roam Research 的灵活性和 Notion 的结构化优势的笔记软件,Tana 以其独特的设计理念重新定义了我的知识管理方式。它不仅支持传统的大纲式层级记录,更通过 SuperTag 实现了数据的结构化管理。其强大的 search node 功能,确保了内容检索的便捷性和精准度。Tana 在 AI 方面的整合更是令我印象深刻,尤其是其语音转文本功能,让灵感捕捉变得异常轻松——当脑中闪现想法时,只需通过手机录音,Tana AI 就能自动将其转化为结构化的文本。

虽然在今年七月份,我曾详细阐述过 Tana 与 Heptabase 的协同工作流,这个方法直到现在依然在激发我的创造力。然而,随着对 Tana 的深入使用,我发现它完全可以承担起 Heptabase 在深度理解方面发挥的作用。这个我意想不到的认知导致我逐渐减少了对 Heptabase 的依赖。尽管如此,我仍然深深敬佩 Heptabase 的设计理念,希望它能在未来有更好的发展。

在写作工具的选择上,今年最大的惊喜来自于发现了比我年龄还大的文本编辑器 BBEdit。这款看似朴实无华的工具,却带给我的 aha moment 前所未有。它的价值不仅在于其强大的文本处理能力,更在于它与 macOS 系统的深度整合。通过 AppleScript,我实现了从文章起草到发布的完整自动化流程:包括处理 Markdown 元数据、更改文件名、移动文件位置,以及通过 git 命令推送到 GitHub 仓库等一系列操作。它在处理大型文本文件时依然保持着流畅的性能,这是许多现代编辑器难以企及的优势。

BBEdit 的使用不仅提升了我的写作效率,还意外地促使我深入探索了 Raycast 和 DEVONthink 的进阶功能。Raycast 作为 macOS 上的效率工具,通过其 QuickLink 功能,让我能够一键访问常用文件夹和应用程序。更重要的是,借助其 Script Command 功能,我开发了包括创建文件 Deep Link 在内的多个自动化脚本,实现了本地文件与 Tana 的单向链接,升级了我对本地文件的管理方式。而 DEVONthink 这款同样历史悠久的软件,通过与 AppleScript 的深度集成,以及与 BBEdit 的默契配合,在我的工作流中发挥着越来越重要的作用。

在 AI 辅助工具方面,PerplexityKagi 的表现很让我满意。Perplexity Pro 版本不仅提供了更强大的 AI 模型选择,其实时联网搜索能力更是让信息获取变得高效精准。它在我的海外生活中发挥了意想不到的作用,比如在里斯本超市购物时,我常常通过拍照询问 Perplexity 来了解葡语产品的具体信息,协助我做出购买决策,这极大地改善了我的购物体验。

在使用 Kagi 之前,我从未想过要为搜索引擎付费,但实际体验彻底改变了这个想法。它不仅提供了干净、无广告的搜索结果,其 Universal Summarizer 功能更是让我在浏览新闻和长文时节省了大量时间。Kagi Bangs 和 Kagi Lens 等特色功能显著提升了信息检索的精准度,而其始终保持高质量和客观性的搜索结果,在当下充斥着 SEO 优化内容的互联网环境中显得尤为珍贵。

这些工具的组合不仅提升了工作效率,更重要的是改变了我处理信息和创作内容的方式。它们就像一个精心打造的工具链,每个环节都恰到好处地满足着不同场景的需求,共同构建起一个高效而灵活的生产环境。

通讯与阅读

今年在通讯与阅读这两个领域的选择,依然延续往年,着重于实用性的考量。

在电子邮件服务的选择上,经过深入对比后,我最终选择继续使用 Fastmail 而非迁移至 Tuta。这个决定源于对实际使用场景的理性思考:虽然 Tuta 以其强大的安全性著称,但在当今的邮件通讯环境下,这种安全优势往往难以充分发挥,特别是当大多数通信对象仍在使用 Gmail 等主流服务的情况下。相比之下,Fastmail 虽然在安全层面不及 Tuta,但其安全性仍远优于主流邮件服务提供商,同时在实用性方面则具有显著优势。它不仅支持创建多达 600 个匿名邮箱,这一特性配合 Bitwarden 的集成功能,为管理各类网站和应用程序的注册账户提供了极大便利。更重要的是,它能够无缝对接 Apple Calendar 和 Apple Notes,让日程管理和工作日志的同步变得更加轻松。

在书签管理领域,我选择了复古且足够使用的 Pinboard。这个选择的关键在于其开放的 API 接口,使其能够完美融入我的工作流:无论是通过 AppleScript 与 DEVONthink 同步,还是借助 N8N 连接 Tana 和 Telegram 频道,都能实现流畅的数据流转。考虑到其全文存档和检索功能的实用价值,订阅完整版账户时我并没有吝啬。

在阅读工具方面,Readwise Reader 仍然是我的首选平台。虽然新兴的 RSS 阅读器 Follow 展现出令人期待的潜力,但考虑到其稳定性仍在完善阶段,目前仅将其作为信息获取的补充渠道。

在多语言阅读需求的推动下,我终于购买了划词翻译工具 Bob 这个相见恨晚的得力助手。通过配置免费的 DeepL API 和 Groq 提供的大语言模型,它能够提供快速、准确、优雅的翻译服务。对于需要更专业的翻译场景,我会使用 Immersive Translate 作为补充。有趣的是,我的阅读习惯随着语言环境的改变而发生了显著演变:从前在国内时习惯使用中英对照阅读,而到里斯本生活后,我更倾向于直接阅读英文原文,仅在遇到疑难词句时通过 Bob 进行划词翻译。或许这种转变不仅反映了语言能力的自然提升,也展现了工具在适应性学习中的重要作用。

这些工具的选择和使用方式的改变,不仅提升了信息获取和处理的效率,更重要的是帮助我建立起了一个既安全又便捷的数字通讯和阅读环境。在这个环境中,各个工具都能够相互配合,形成一个有机的整体,为日常的数字生活、学习和工作提供有力支持。

存储与备份

数据的安全存储和可靠备份始终是不可或缺的基础需求。尽管我已在第 93 期电子报中详细阐述了具体的数据存储与备份策略,在此我想着重分享选择这些服务背后的深层考量,以及它们如何协同工作形成一个完整的数据保护体系。

作为 Apple ecosystem 的用户,iCloud 为我提供了设备间无与伦比的互通体验。这种优势在家庭场景中尤为突出——由于家人也都在使用 Apple 设备,通过 iCloud+ 的家庭共享功能,我们能够轻松实现照片、文档等数据的共享与同步。这种无缝的协作体验是其他平台难以企及的,也是我选择继续坚持 Apple 生态的重要原因之一。

然而,iCloud 在对外分享方面的羸弱促使我需要寻找一个传统网盘作为补充。考虑到实际使用场景,我花费两周时间专注评估欧洲的网盘服务商,深入对比了 Mega、pCloud、Internxt、Koofr 和 icedrive 等多个方案。最终,德国的 Filen 以其出色的综合表现脱颖而出。这款采用零知识端对端加密技术的安全网盘,在保证高强度加密的同时,仍然保持着令人满意的传输速度。更难能可贵的是,它不对文件版本数量和传输带宽设限,这使其成为理想的文件分享工具。

Filen 的价值不仅体现在文件分享上,它同样是我重要数据的可靠后盾。其桌面客户端提供的灵活文件同步选项,能够在后台静默完成数据备份工作,这种无感知的备份机制大大降低了日常使用的心智负担。不过,即便 Filen 的安全性值得肯定,在备份重要的数据时,我依然使用了 encryption 工具进行加密后再进行备份。

在构建异地容灾备份方案时,我选择了专业的 BorgBase 服务。这个选择基于几个关键考量:首先,BorgBase 是专门为 Borg 备份定制的服务,完美支持增量备份和重复数据删除特性,既确保了完整的备份历史,又能有效节省存储空间;其次,它提供了直观的 Web 界面用于备份状态监控,配备开源的桌面端图形界面便于操作,并支持 SSH 密钥认证以确保安全性;最后,BorgBase 在欧洲多地部署的服务器为我提供了优质的访问速度和较低的网络延迟。这些专业特性使其相比普通的对象存储服务更适合作为异地容灾备份方案。

这三层防护——iCloud、Filen 和 BorgBase——构成了一个完整的数据安全保障体系。iCloud 负责日常的设备同步和家庭共享,Filen 承担文件分享和常规备份任务,而 BorgBase 则作为最后的安全防线,确保在极端情况下数据仍然可以完整恢复。此外,还有移动硬盘中的冷备份(但我今年的备份频率没有那么高,明年需要加强)。这种多层次的备份策略不仅提供了充分的数据冗余,也满足了不同场景下的使用需求,足以心安。

Setapp

在今年年中面临多个软件订阅即将到期的情况下,我才发现——这些软件大多都在 Setapp 的应用库中。重新计算了价格后,自然而然地选择订阅了 Setapp 的基础套餐。

目前,我通过 Setapp 使用的应用主要覆盖了系统维护、效率提升、媒体处理、文档处理和 AI 增强等多个领域。在系统维护方面,CleanMyMac 和 AIDente Pro 分别负责系统清理和电池管理;在效率工具方面,CleanShot X、Yoink 和 PopClip 大大简化了日常操作流程;在媒体处理领域,Downie 和 Permute 为我提供了全面的下载和格式转换解决方案;在文档处理方面,Marked 与 BBEdit 完美配合,提供实时的文档渲染预览;而在 AI 增强领域,Superwhisper 和 BoltAI 则提供了诸多便利。

Self-hosted

随着在里斯本的生活逐渐稳定,我的自托管需求发生了显著变化。不再需要全天候的 Surge 环境,也无需为使用 AI 平台、支付平台而担忧 IP 问题,这让我得以大幅精简服务器配置:目前仅保留一台通过 Zeabur 管理的 Hetzner VPS,外加一台 Oracle 免费 VPS。这种精简不仅降低了维护成本,更让我能够将注意力集中在真正重要的服务上。

在这些服务器上,我部署的自托管项目主要是:

  • TiddlyWiki 是我的 Digital Garden,展示公开的笔记
  • RSSHubWeWe RSS 负责构建个性化的订阅源
  • Telegram RSSbot 获取重要的即时信息
  • Ladder 绕过付费墙的限制
  • N8N 处理包括内容聚合、数据转换、定时任务等在内的各类自动化流程
  • Uptime Kuma 进行实时监测
  • Twikoo 为博客提供轻量级评论系统
  • R2 Uploader 图形化管理 Cloudflare R2

我部署自托管服务的理念是:轻量化、自动化、可靠性。希望能够在最小化维护成本的同时,提供稳定可靠的功能支持。

小结

通过回顾 2024 年的数字工具选择,我清晰地看到几个主要趋势:首先是向原生应用的回归;其次是对隐私和安全的持续重视;第三是工具间的深度整合,通过 AppleScript、Shortcuts 等自动化手段,将独立的工具编织成有机的整体。

希望明年我可以继续遵循这种理性和务实的思路。重点不在于拥有多少工具,而在于如何让已有的工具更好地服务于实际需求,创造真正的价值。同时,我也期待着能够在保持现有工作流程稳定的基础上,探索更多提升效率的可能性。

一键发布 Newsletter:AppleScript 与 Quaily CLI 的完美配合

Quaily 是一个新兴的、AI 驱动的现代化 Newsletter 服务,也是少有的由华人开发的产品。我初次了解这个平台是通过 Quaily 首席 Lyric 的一条推文,年代久远我就不去翻找了,大意是他比较了市面上的几个 Newsletter 平台后不甚满意,于是决定亲自开发一个。最初使用时,Quaily 的功能还不像现在这样完善,但其页面精美与时尚感就已经深深吸引了我。再加上听说 Lyric 本人也是位不折不扣的帅哥,对于一个「颜狗」来说,好看即正义!无脑冲呗。

事实证明,真正的帅哥魅力不仅来自外表,更在于能力与审美的完美结合。想想蒋丞、顾飞、江添、顾望……咳咳,言归正传。

Quaily 绝非徒有其表,而是拥有众多实用功能的专业工具。我并不想把这篇文章写成软文,具体功能介绍可以移步用户手册查看。下面,我将分享如何利用 AppleScript 实现一键发布的便捷操作。

为什么选择 AppleScript?

AppleScript 是 macOS 内置的自动化脚本语言,它使用户能够创建自动化工作流程,控制各种支持脚本的应用程序。选择 AppleScript 的优势在于:

  1. 无需安装额外软件,系统原生支持
  2. 与 macOS 系统深度集成,运行稳定
  3. 可以控制几乎所有支持脚本的 Mac 应用程序
  4. 可以直接让 AI 生成脚本,基本不需要修改就能使用(这一点尤为关键)

实现方式

区别于其他 Newsletter 服务,Quaily 提供了 Quail CLI 这款强大的命令行工具,可实现用户认证自动化、Markdown 文章管理以及用户详情获取等操作。它通过与 Quaily API 交互,让用户在命令行环境中完成各种操作,如登录、获取用户信息、文章的创建、更新、发布、取消发布和删除等,无需通过网页界面。这些功能为通过脚本实现自动化发布奠定了坚实基础。(具体使用说明请参见《介绍 Quail CLI:简化你的工作流》)。

注意:如果我们使用的是 Obsidian,可以直接使用 Quaily 官方提供的插件,无需自己编写脚本这么麻烦。

安装与配置 Quaily CLI

在构建自动化脚本之前,您需要先安装并配置 Quail CLI。安装过程十分简单,只需执行一条命令:

go install github.com/quailyquaily/quail-cli@latest

当然,前提是系统中已安装 Go 语言环境。或者您也可以直接从 GitHub 上安装 Quaily 官方编译好的二进制文件,截至 2025 年 3 月 6 日,二进制文件的版本号为 v.0.0.3。

安装完成后,需要进行登录认证。打开终端,执行 quail-cli login 命令,系统会启动 OAuth 流程完成 Quaily 身份验证。终端中会显示一个 URL,您需要访问该链接并授权应用程序访问您的账户。认证成功后,登录信息会保存在配置文件中(默认位于 $HOME/.config/quail-cli/config.yaml),今后操作就不再需要重复登录了。

配置文件包含您的认证信息和一些自定义设置,例如前置元数据映射等,这些设置能帮助您更好地适应自己的工作流程。比如,您可以自定义 frontmatter 中的键映射,将 featureImage 映射到 cover_image_url,使其更符合您的使用习惯。

AppleScript 基础与命令行交互

脚本的目标是实现一键发布到 Quaily,而 AppleScript 的关键优势在于它能执行 shell 命令,从而调用 Quail CLI。

在 AppleScript 中,执行 shell 命令通过 do shell script 命令实现。这个命令由 macOS 中的 Standard Additions 脚本扩展提供,让您可以在 AppleScript 中执行任何命令行工具。例如,要执行 ls /Applications/ 这样的简单命令,您可以这样写:do shell script "ls /Applications/"

需要注意的是,当 shell 命令包含空格或特殊字符时,必须正确引用这些字符。最简便的方法是使用 AppleScript 的 quoted form of 属性,它会返回一个安全的字符串形式,不受 shell 进一步解释的影响。例如:do shell script "ls " & quoted form of "/Library/Application Support/"

对于包含中文等非 ASCII 字符的文件路径或命令,正确设置环境变量至关重要。这能确保 UTF-8 编码的正确处理,避免乱码和路径识别错误,特别是在处理包含中文字符的 Markdown 文件或文件夹时。使用以下方式设置环境变量:

do shell script "export LC_ALL=en_US.UTF-8; export LANG=en_US.UTF-8; your_command_here"

这样,即使您的文件名或路径包含中文字符,AppleScript 也能正确处理而不会出现编码问题。

构建 AppleScript 脚本实现一键发布

现在就可以结合前面的知识,构建一个完整的 AppleScript 脚本,实现一键发布到 Quaily 了。这个脚本包括以下步骤:选择要发布的 Markdown 文件,使用 Quail CLI 上传并发布该文件。

首先,需要选择一个 Markdown 文件。这可以通过 AppleScript 的 choose file 命令实现:

set markdownFile to choose file with prompt "请选择要发布的 Markdown 文件:" of type {"md", "markdown"}

接下来,获取用户的列表(list)信息。为简便起见,可以在脚本中预设列表的 slug,或者通过对话框输入:

set listSlug to text returned of (display dialog "请输入要发布到的列表 slug:" default answer "your_list_slug")

然后,使用 Quaily CLI 的 post upsert 命令上传文件:

set uploadCommand to "export LC_ALL=en_US.UTF-8; export LANG=en_US.UTF-8; quail-cli post upsert " & quoted form of (POSIX path of markdownFile) & " -l " & quoted form of listSlug
set uploadResult to do shell script uploadCommand

上传成功后,Quaily CLI 会返回包含帖子信息的 JSON 响应,您可以从中提取 slug 信息:

-- 假设 uploadResult 是类似 {"status":"success","data":{"id":"12345","slug":"my-post-slug",...}} 的 JSON 字符串
-- 使用简单的文本处理来提取 slug
set slugExtractCommand to "echo " & quoted form of uploadResult & " | grep -o '\"slug\":\"[^\"]*\"' | cut -d\\" -f4"
set postSlug to do shell script slugExtractCommand

这段代码使用管道命令组合 grepcut 从 JSON 响应中提取 slug 值。grep -o 查找包含 "slug" 的部分,然后 cut 命令分割字符串并提取 slug 的实际值。

获取到 slug 后,继续使用 post publish 命令发布该帖子:

set publishCommand to "export LC_ALL=en_US.UTF-8; export LANG=en_US.UTF-8; quail-cli post publish -l " & quoted form of listSlug & " -p " & quoted form of postSlug
set publishResult to do shell script publishCommand

最后,显示操作结果:

display dialog "帖子已成功发布!" buttons {"确定"} default button "确定"

将这些步骤组合起来,您就拥有了一个实用的一键发布脚本。

高级优化与自动化技巧

为了进一步提升自动化流程的效率,可以考虑以下高级优化策略:

自动提取 Markdown 前置元数据(frontmatter)是一个非常实用的功能。通过 shell 命令如 grepsed,可以解析 Markdown 文件并提取其中的 slug 信息,无需手动输入:

set extractSlugCommand to "grep -m 1 'slug:' " & quoted form of (POSIX path of markdownFile) & " | sed 's/slug: *//' | tr -d '\r\n'"
set postSlug to do shell script extractSlugCommand

加入错误处理机制也很重要,确保脚本在各种情况下都能稳定运行。例如,检查文件是否存在,检查上传和发布过程中是否有错误等。使用 AppleScript 的 try...on error...end try 结构实现:

try
    -- 脚本主体
on error errorMessage
    display dialog "发生错误:" & errorMessage buttons {"确定"} default button "确定" with icon stop
end try

AppleScript 支持将脚本保存为独立应用程序,并可添加到 Dock 或设置键盘快捷键,实现真正的「一键」发布。创建应用程序的步骤很简单:在 Script Editor 中编写脚本,然后选择「文件」→「输出」,在格式中选择「应用程序」。

此外,如果需要在发布过程中加入其他步骤,如预处理 Markdown 文件、自动生成标签、上传图片等,都可以通过扩展脚本来实现。

结合实际工作流的应用场景

在实际的内容创作工作流中,一键发布脚本可以与其他工具和流程无缝集成。例如,将其与 Markdown 编辑器结合,当文章编辑完成后,直接点击按钮或使用快捷键触发发布。就像我使用的文本编辑器 BBEdit,内置了 AppleScript 管理功能,可通过快捷键直接触发脚本。

您还可以考虑与其他自动化工具结合,如 Hazel、Keyboard Maestro 或 macOS 自带的 Automator,构建更复杂的工作流。例如,当将新的 Markdown 文件放入指定文件夹时,自动触发发布流程;或设置定时任务,在特定时间自动发布预先准备好的内容。

通过这些集成和扩展,一键发布脚本可以成为一个强大的内容管理和发布解决方案,大幅提升工作效率。

结语

在本文中,我并未提供自己使用的完整脚本,而是希望帮助您理解如何使用 AppleScript 和 Quail CLI 实现一键发布,并鼓励您根据自身需求定制和扩展这个解决方案。通过自动化处理重复性任务,我们可以将更多时间和精力投入到创意和内容质量上,这正是技术为创作者带来的最大价值。

注:本文中的 API 端点和参数仅为示例,实际使用时请参考 Quaily 的官方文档


本文初稿在 Tana 上完成,这是一款通过将 AI 驱动的结构化数据库与流畅的大纲列表相结合的笔记软件,重新定义了现代知识管理,使用户能够无缝地组织相互关联的想法,同时保持自由形式思考的灵活性。

How I computer in 2024

I've always been curious about how people use their computers. For instance, I browse forums to learn which applications others choose, ask friends about their productivity setups, and pay attention to what products, computers, and mobile apps people showcase on social media. Over the years, I've learned many great practices from others, so at this year's end, I want to organize my digital toolbox and share it. Although I've already listed my hardware devices and commonly used software on my blog's Uses page.

Return to Native Apps

In an era where tools like Cursor claim to enable rapid app development, I've chosen what seems like a counter-trend path—returning to native applications. This decision wasn't made on a whim but rather based on long-term self-observation and careful consideration: if system-provided apps can meet my needs, I no longer seek third-party alternatives.

The convenience brought by this transition has exceeded expectations. For example, the built-in OCR functionality in iOS Camera and Photos apps makes document scanning and text extraction effortless and natural. The deep integration between system-level calendar and reminders enables more efficient time and task management. Meanwhile, Apple Notes not only ensures sensitive information security through end-to-end encryption but also impresses with its performance in document scanning and team collaboration scenarios.

In practice, I've found that Apple's native app ecosystem can elegantly cover most aspects of daily digital life. From map navigation to weather information, from file previews to instant messaging, these basic but essential needs are well met. This integrated convenience is particularly noticeable on mobile devices, bringing an unprecedented smooth experience to daily use.

Returning to native apps has brought other significant advantages. First is improved performance and stability, as native apps typically better adapt to the system and consume fewer system resources. Second is enhanced privacy protection, eliminating concerns about third-party apps collecting and using data. Finally, it reduces maintenance costs, eliminating the need for frequent updates and debugging of various third-party apps while also reducing subscription expenses.

For scenarios that genuinely require third-party apps, I've begun prioritizing applications that support Apple Native design standards. These apps not only maintain consistency with the system in interface and interaction but also better utilize system features such as deep AppleScript integration, Shortcuts automation support, Live Activities, Focus mode, and other functionalities, providing a more unified and fluid user experience.

Of course, this return doesn't mean completely abandoning third-party apps. For specific professional needs, excellent third-party applications remain indispensable supplements. The key lies in finding the balance between native apps and third-party tools, allowing them to fulfill their respective roles, work together, and collectively build an efficient and unified operating environment.

Privacy and Security

In this era of rampant phishing and cyber fraud, personal privacy and cybersecurity have become crucial issues that no one can ignore. Every web browsing session and application usage can leave digital footprints. Therefore, building a comprehensive privacy protection system has become particularly important. In my practice, this system primarily revolves around three core components: DNS-level protection, content filtering, and credential management.

The choice of DNS service is the first line of defense in protecting personal privacy. While in China, I chose to use the open-source EasyMosdns DNS-over-HTTPS (DoH) service within the Surge environment. This solution protects user privacy through IP-based encrypted DNS queries, offering not only highly accurate DNS resolution but also effective protection against DNS poisoning. After moving to Lisbon, I switched to NextDNS service. While its query response time may be marginally slower than Cloudflare Public DNS, this slight latency difference is hardly noticeable, and the comprehensive privacy protection features it offers far outweigh this minor trade-off. NextDNS's rich configuration options allow me to block tracking scripts at the source while effectively filtering advertisements. The free tier of 300,000 queries per month is quite generous for individual users, and the premium plan at just €1.99/month offers exceptional value.

To build a more comprehensive protection network, I installed the Wipr 2 content blocker extension on Safari for both desktop and mobile devices. This lightweight tool not only effectively blocks advertisements but also filters various tracking scripts and malicious code, creating a dual-layer protection system alongside the DNS-level defense. This combination not only enhances the browsing experience but, more importantly, ensures personal data isn't arbitrarily collected.

In the realm of credential security, I've adopted a dual strategy using Bitwarden and Ente Auth. Bitwarden serves as my primary password manager, earning my trust over many years with its open-source nature and robust encryption implementation. Although it supports self-hosting, considering security implications and maintenance overhead, and given my lack of confidence in my technical abilities, I opted for the official cloud service at $10 per year. This not only allows me to securely access my credential vault across various devices but, more importantly, enables advanced features including multi-factor authentication (MFA). Notably, Bitwarden's integration with Fastmail allows me to generate disposable email addresses for various website registrations, playing a crucial role in protecting personal privacy and preventing spam.

While I use Bitwarden for most MFA needs, I chose Ente Auth to manage certain special authentication requirements. For example, Bitwarden account's own MFA tokens and second-factor authentication for other critical services. Ente Auth's unique next-token preview feature brings great convenience in practical use, making multi-factor authentication no longer a cumbersome process. Both tools embrace open-source principles with fully transparent codebases, not only ensuring security through public scrutiny but fundamentally guaranteeing user data privacy.

Productivity Tools

2024 marked a year of breaking through established perceptions in my choice of digital tools. This breakthrough is reflected not only in tool selection but also in the transformation of usage concepts. From note management to writing tools, from information acquisition to automated workflows, each choice was thoroughly considered, ultimately forming a highly efficient collaborative system.

In terms of note-taking tools, I completed the transition from Heptabase to Tana. As a note-taking tool that combines the bidirectional linking flexibility of Roam Research with the structured database capabilities of Notion, Tana has fundamentally redefined my approach to knowledge management. It not only supports traditional outline-style hierarchical recording but also enables structured data management through SuperTags. Its powerful search node functionality ensures convenient and precise content retrieval. Tana's AI integration particularly impressed me, especially its voice-to-text feature, which makes capturing insights remarkably easy—when ideas flash through my mind, I can simply record them via phone, and Tana AI automatically converts them into structured text.

Although I detailed the collaborative workflow between Tana and Heptabase in July this year, a method that continues to spark my creativity, my deeper usage of Tana revealed that it could fully assume Heptabase's role in deep understanding. This unexpected realization led to my gradually reduced dependence on Heptabase. Nevertheless, I still deeply admire Heptabase's design philosophy and hope for its continued development.

In writing tools, this year's biggest surprise came from discovering BBEdit, a text editor older than myself. This seemingly plain tool provided me with unprecedented "aha moments." Its value lies not only in its powerful text processing capabilities but also in its deep integration with macOS. Through AppleScript, I automated the complete workflow from article drafting to publishing: including processing Markdown metadata, changing file names, moving file locations, and pushing to GitHub repositories through git commands. It maintains smooth performance when handling large text files, an advantage many modern editors struggle to match.

Using BBEdit not only improved my writing efficiency but unexpectedly prompted me to explore advanced features of Raycast and DEVONthink. Raycast, as a macOS efficiency tool, enables one-click access to frequently used folders and applications through its QuickLink feature. More importantly, using its Script Command functionality, I developed several automation scripts, including creating file Deep Links, enabling one-way linking between local files and Tana, upgrading my local file management approach. Meanwhile, DEVONthink, another long-standing software, plays an increasingly important role in my workflow through its deep integration with AppleScript and seamless cooperation with BBEdit.

Regarding AI assistance tools, Perplexity and Kagi have performed to my satisfaction. The Pro version of Perplexity not only offers more powerful AI model choices, but its real-time internet search capability also makes information retrieval highly efficient and precise. It has played an unexpected role in my life abroad—for instance, while shopping in Lisbon supermarkets, I often photograph products and ask Perplexity about Portuguese product information, helping me make purchase decisions and greatly improving my shopping experience.

Before using Kagi, I never considered paying for a search engine, but the actual experience completely changed this perspective. It not only provides clean, ad-free search results, but its Universal Summarizer feature has saved me considerable time when browsing news and long articles. Features like Kagi Bangs and Kagi Lens significantly improve information retrieval accuracy, while its consistently high-quality and objective search results are particularly valuable in today's internet environment saturated with SEO-optimized content.

Communication and Reading

This year's choices in communication and reading continue last year's focus on practicality.

For email services, after thorough comparison, I ultimately chose to continue using Fastmail rather than migrating to Tuta. This decision stems from rational consideration of practical usage scenarios: while Tuta is known for its robust security, this advantage is often difficult to fully utilize in today's email communication environment, especially when most communication partners still use mainstream services like Gmail. In comparison, while Fastmail may not match Tuta's security level, it still far exceeds mainstream email service providers in security while offering significant practical advantages. It supports creating up to 600 anonymous email addresses, which, combined with Bitwarden integration, provides great convenience in managing registrations for various websites and applications. More importantly, it seamlessly integrates with Apple Calendar and Apple Notes, making schedule management and work log synchronization much easier.

For bookmark management, I chose the retro yet sufficient Pinboard. The key to this choice lies in its open API interface, allowing perfect integration into my workflow: whether syncing with DEVONthink through AppleScript or connecting Tana and Telegram channels via N8N, data transfer flows smoothly. Considering the practical value of its full-text archiving and retrieval features, I didn't hesitate to subscribe to the complete version.

For reading tools, Readwise Reader remains my platform of choice. Although the emerging RSS reader Follow shows promising potential, considering its stability is still being refined, I currently use it only as a supplementary information source.

Driven by multilingual reading needs, I finally purchased Bob Translate, a text translation tool that I wish I'd discovered sooner. By configuring free DeepL API and Groq's large language model, it provides fast, accurate, and elegant translation services. For more professional translation scenarios, I use Immersive Translate as a supplement. Interestingly, my reading habits have evolved significantly with the change in language environment: while in China, I was accustomed to reading in Chinese-English parallel texts, but after moving to Lisbon, I prefer reading English texts directly, using Bob for word translation only when encountering difficult phrases. Perhaps this transformation reflects not only the natural improvement in language ability but also the important role of tools in adaptive learning.

Storage and Backup

Data storage security and reliable backup remain essential fundamental needs. Although I detailed my specific data storage and backup strategies in Newsletter #92, here I want to focus on sharing the deeper considerations behind choosing these services and how they work together to form a complete data protection system.

As an Apple ecosystem user, iCloud provides me with unparalleled inter-device connectivity. This advantage is particularly prominent in family scenarios—since family members also use Apple devices, through iCloud+'s family sharing feature, we can easily achieve sharing and synchronization of photos, documents, and other data. This seamless collaborative experience is difficult to match on other platforms and is a key reason why I continue to stick with the Apple ecosystem.

However, iCloud's weakness in external sharing prompted me to seek a traditional cloud storage service as a complement. Considering actual usage scenarios, I spent two weeks intensively evaluating European cloud storage providers, thoroughly comparing Mega, pCloud, Internxt, Koofr, and icedrive among others. Eventually, German-based Filen stood out with its excellent overall performance. This secure cloud storage service, which employs zero-knowledge end-to-end encryption technology, maintains satisfactory transfer speeds while ensuring high-strength encryption. More remarkably, it sets no limits on file version numbers and transfer bandwidth, making it an ideal file sharing tool.

Filen's value extends beyond file sharing; it's also a reliable backup for important data. Its desktop client offers flexible file synchronization options, completing data backup tasks silently in the background. This seamless backup mechanism greatly reduces the mental load of daily use. However, even though Filen's security is commendable, when backing up important data, I still use encryption tools to encrypt the data before backup.

For building an off-site disaster recovery backup solution, I chose the professional BorgBase service. This choice was based on several key considerations: first, BorgBase is a service specifically designed for Borg backup, perfectly supporting incremental backup and deduplication features, ensuring complete backup history while effectively saving storage space; second, it provides an intuitive web interface for backup status monitoring, equipped with open-source desktop GUI for operations, and supports SSH key authentication to ensure security; finally, BorgBase's servers deployed across multiple European locations provide me with quality access speeds and low network latency. These professional features make it more suitable as an off-site disaster recovery backup solution compared to ordinary object storage services.

These three layers of protection—iCloud for daily synchronization, Filen for secure sharing and backup, and BorgBase for professional archival storage—form a comprehensive data security assurance system. iCloud handles daily device synchronization and family sharing, Filen takes care of file sharing and routine backup tasks, while BorgBase serves as the final security line, ensuring complete data recovery in extreme situations. Additionally, there's cold backup on external hard drives (though my backup frequency this year hasn't been as high, needing improvement next year). This multi-layered backup strategy not only provides sufficient data redundancy but also meets usage needs in different scenarios, providing peace of mind.

Setapp

When facing multiple software subscription renewals mid-year, I discovered that most of these applications were available in Setapp's library. After recalculating the costs, subscribing to Setapp's basic package became a natural choice.

Currently, the applications I use through Setapp cover multiple areas including system maintenance, productivity enhancement, media processing, document handling, and AI enhancement. For system maintenance, CleanMyMac and AIDente Pro handle system cleaning and battery management respectively; for productivity tools, CleanShot X, Yoink, and PopClip greatly simplify daily operations; in media processing, Downie and Permute provide comprehensive download and format conversion solutions; for document processing, Marked perfectly complements BBEdit, providing real-time document rendering preview; while in AI enhancement, Superwhisper and BoltAI offer various conveniences.

Self-hosted

As life in Lisbon has gradually stabilized, my self-hosting needs have changed significantly. No longer requiring a 24/7 Surge environment or worrying about IP issues for using AI platforms and payment platforms, I've been able to substantially streamline my server configuration: currently maintaining only one Hetzner VPS managed through Zeabur, plus one Oracle free VPS. This simplification not only reduces maintenance costs but allows me to focus attention on truly important services.

On these servers, my self-hosted projects mainly include:

  • TiddlyWiki as my Digital Garden, displaying public notes
  • RSSHub and WeWe RSS responsible for building personalized feed sources
  • Telegram RSSbot for receiving important instant information
  • Ladder for bypassing paywall restrictions
  • N8N handling various automation processes including content aggregation, data transformation, and scheduled tasks
  • Uptime Kuma for real-time monitoring
  • Twikoo providing a lightweight comment system for the blog
  • R2 Uploader for graphical management of Cloudflare R2

My philosophy for deploying self-hosted services is: lightweight, automated, and reliable. The goal is to provide stable and reliable functional support while minimizing maintenance costs.

Conclusion

Looking back at my digital tool choices for 2024, I clearly see several main trends: first is the return to native applications; second is the continued emphasis on privacy and security; third is the deep integration between tools, weaving independent tools into an organic whole through automation means like AppleScript and Shortcuts.

I hope to continue following this rational and practical approach next year. The focus isn't on how many tools one has, but on how to make existing tools better serve actual needs and create real value. Meanwhile, I also look forward to exploring more possibilities for improving efficiency while maintaining the stability of existing workflows.

2024 年数字工具箱

我总是很好奇人们是如何使用电脑的。例如,我会逛论坛,去了解网友们选择了哪些应用程序;我会问朋友,咨询他们如何设置生产环境;我会在社交媒体上留意,桌面上有哪些产品、电脑和手机上安装了哪些应用程序……多年来,我从许多人那里学到了很多好方法,所以在这个岁末,也想整理我的数字工具箱,并写出来。虽然我有哪些硬件设备,常用哪些软件,在博客的 Uses 页面中已经列出。

回归原生

在这个号称使用 Cursor 就可以迅速开发出一款应用的时代,我却选择了一条看似反潮流的道路——回归原生应用。这个决定并非一时兴起,而是基于长期自我观察和深度思考后的审慎选择:只要系统自带的应用能够满足需求,我就不再寻求第三方替代方案。

这种转变带来的便利远超预期。以日常使用场景为例,iOS 相机和照片应用内置的 OCR 功能,让扫描文档和提取文字变得轻松自然;系统级的日历与提醒事项的深度整合,让我能够更高效地管理时间和任务;而 Apple Notes 不仅通过端到端加密确保了敏感信息的安全性,其在文件扫描和团队协作等场景中的表现也令人惊喜。

在实际使用中,我发现 Apple 的原生应用生态已经能够优雅地覆盖日常数字生活的绝大部分场景。从查看地图导航到获取天气信息,从预览各类文件到进行即时通讯,这些基础但重要的需求都能得到妥善满足。这种整合的便利性在移动设备上尤为明显,为日常使用带来了前所未有的流畅体验。

回归原生应用还带来了其他显著优势。首先是性能和稳定性的提升,原生应用通常能更好地适配系统,消耗更少的系统资源。其次是隐私保护的加强,不必担心第三方应用对数据的收集和使用。最后是降低了维护成本,无需频繁更新和调试各类第三方应用,也减少了订阅支出。

对于那些确实需要使用第三方应用的场景,我也开始优先考虑支持 Apple 原生设计规范的应用(Apple Native)。这类应用不仅在界面和交互上与系统保持一致,还能更好地利用系统特性,比如深度集成 AppleScript、支持 Shortcuts 自动化、Live Activities 实时活动、Focus 专注模式等功能,从而提供更加统一和流畅的使用体验。

当然,这种回归并非意味着完全摒弃第三方应用。对于特定的专业需求,优秀的第三方应用仍然是不可或缺的补充。关键在于找到原生应用和第三方工具之间的平衡点,让它们能够各司其职,相互协作,共同构建一个高效而统一的使用环境。

隐私与安全

在这个网络钓鱼与欺诈横行时代,个人隐私与网络安全已然成为每个人都不容忽视的重要课题。每一次网络浏览、每一次应用使用,都可能留下数字足迹。因此,构建一套完善的隐私保护体系变得尤为重要。在我的实践中,这套体系主要围绕三个核心展开:DNS 防护、广告拦截和密码管理。

DNS 服务的选择是保护个人隐私的第一道防线。在国内时,我选择在 Surge 环境中使用开源的 EasyMosdns 无污染 DNS 分流 API(DoH)。这是一个通过 IP 分流远程加密查询来保护用户隐私的解决方案,不仅具有极高的解析精准度,还能有效避免 DNS 污染。而移居里斯本后,我转向了 NextDNS 服务。尽管其响应速度略慢于 Cloudflare Public DNS,但差异微乎其微,而在隐私防护方面的出色表现足以弥补这一细微差距。NextDNS 提供的丰富自定义配置选项让我能够从源头阻止跟踪器,同时有效屏蔽广告。每月 300,000 次查询的免费额度对个人用户来说已经相当充裕,而仅需 €1.99/月的进阶套餐更是物超所值。

为了构建更全面的防护网,我在电脑端和移动端的 Safari 上安装了 Wipr 2 广告拦截扩展。这款轻量级工具不仅能有效拦截广告,还可以屏蔽各类跟踪器和恶意脚本,与 DNS 层面的防护形成了双重保护。这种组合不仅提升了网页浏览体验,更重要的是确保了个人隐私数据不被随意收集。

在密码安全领域,我采用了 Bitwarden 和 Ente Auth 双管齐下的策略。Bitwarden 作为主力密码管理工具,其开源特性和强大的加密技术赢得了我多年的信任。虽然它支持自托管部署,但考虑到安全性和维护成本,加之我并不信任自己的技术,选择了每年 $10 的官方云服务版本。这不仅让我能够在各种设备上安全便捷地访问密码库,更重要的是能够使用包括双因素认证在内的高级功能。特别值得一提的是,Bitwarden 与 Fastmail 的深度集成让我能够直接生成匿名邮箱用于各类网站注册,这在保护个人隐私和杜绝垃圾邮件方面发挥了重要作用。

虽然绝大多数的双因素认证直接使用 Bitwarden,但我还是选择了 Ente Auth 管理一些特殊的双因素认证需求。例如 Bitwarden 账户本身的 2FA 验证码以及其他重要服务的双重认证。Ente Auth 独特的下一个验证码预览功能在实际使用中带来了极大便利,让双因素认证不再是一个繁琐的过程。这两款工具都秉承开源理念,源代码完全公开透明,不仅接受公众审查确保安全性,更从根本上保障了用户数据的隐私。

生产力工具

在数字工具的选择上,2024 年是我突破固有认知的一年。这种突破不仅体现在工具的选择上,更体现在使用理念的转变上。从笔记管理到写作工具,从信息获取到自动化工作流,每一个选择都经过充分酝酿,最终形成了一个高效协同的系统。

在笔记工具的选择上,我完成了从 HeptabaseTana 的转变。作为一款融合了 Roam Research 的灵活性和 Notion 的结构化优势的笔记软件,Tana 以其独特的设计理念重新定义了我的知识管理方式。它不仅支持传统的大纲式层级记录,更通过 SuperTag 实现了数据的结构化管理。其强大的 search node 功能,确保了内容检索的便捷性和精准度。Tana 在 AI 方面的整合更是令我印象深刻,尤其是其语音转文本功能,让灵感捕捉变得异常轻松——当脑中闪现想法时,只需通过手机录音,Tana AI 就能自动将其转化为结构化的文本。

虽然在今年七月份,我曾详细阐述过 Tana 与 Heptabase 的协同工作流,这个方法直到现在依然在激发我的创造力。然而,随着对 Tana 的深入使用,我发现它完全可以承担起 Heptabase 在深度理解方面发挥的作用。这个我意想不到的认知导致我逐渐减少了对 Heptabase 的依赖。尽管如此,我仍然深深敬佩 Heptabase 的设计理念,希望它能在未来有更好的发展。

在写作工具的选择上,今年最大的惊喜来自于发现了比我年龄还大的文本编辑器 BBEdit。这款看似朴实无华的工具,却带给我的 aha moment 前所未有。它的价值不仅在于其强大的文本处理能力,更在于它与 macOS 系统的深度整合。通过 AppleScript,我实现了从文章起草到发布的完整自动化流程:包括处理 Markdown 元数据、更改文件名、移动文件位置,以及通过 git 命令推送到 GitHub 仓库等一系列操作。它在处理大型文本文件时依然保持着流畅的性能,这是许多现代编辑器难以企及的优势。

BBEdit 的使用不仅提升了我的写作效率,还意外地促使我深入探索了 Raycast 和 DEVONthink 的进阶功能。Raycast 作为 macOS 上的效率工具,通过其 QuickLink 功能,让我能够一键访问常用文件夹和应用程序。更重要的是,借助其 Script Command 功能,我开发了包括创建文件 Deep Link 在内的多个自动化脚本,实现了本地文件与 Tana 的单向链接,升级了我对本地文件的管理方式。而 DEVONthink 这款同样历史悠久的软件,通过与 AppleScript 的深度集成,以及与 BBEdit 的默契配合,在我的工作流中发挥着越来越重要的作用。

在 AI 辅助工具方面,PerplexityKagi 的表现很让我满意。Perplexity Pro 版本不仅提供了更强大的 AI 模型选择,其实时联网搜索能力更是让信息获取变得高效精准。它在我的海外生活中发挥了意想不到的作用,比如在里斯本超市购物时,我常常通过拍照询问 Perplexity 来了解葡语产品的具体信息,协助我做出购买决策,这极大地改善了我的购物体验。

在使用 Kagi 之前,我从未想过要为搜索引擎付费,但实际体验彻底改变了这个想法。它不仅提供了干净、无广告的搜索结果,其 Universal Summarizer 功能更是让我在浏览新闻和长文时节省了大量时间。Kagi Bangs 和 Kagi Lens 等特色功能显著提升了信息检索的精准度,而其始终保持高质量和客观性的搜索结果,在当下充斥着 SEO 优化内容的互联网环境中显得尤为珍贵。

这些工具的组合不仅提升了工作效率,更重要的是改变了我处理信息和创作内容的方式。它们就像一个精心打造的工具链,每个环节都恰到好处地满足着不同场景的需求,共同构建起一个高效而灵活的生产环境。

通讯与阅读

今年在通讯与阅读这两个领域的选择,依然延续往年,着重于实用性的考量。

在电子邮件服务的选择上,经过深入对比后,我最终选择继续使用 Fastmail 而非迁移至 Tuta。这个决定源于对实际使用场景的理性思考:虽然 Tuta 以其强大的安全性著称,但在当今的邮件通讯环境下,这种安全优势往往难以充分发挥,特别是当大多数通信对象仍在使用 Gmail 等主流服务的情况下。相比之下,Fastmail 虽然在安全层面不及 Tuta,但其安全性仍远优于主流邮件服务提供商,同时在实用性方面则具有显著优势。它不仅支持创建多达 600 个匿名邮箱,这一特性配合 Bitwarden 的集成功能,为管理各类网站和应用程序的注册账户提供了极大便利。更重要的是,它能够无缝对接 Apple Calendar 和 Apple Notes,让日程管理和工作日志的同步变得更加轻松。

在书签管理领域,我选择了复古且足够使用的 Pinboard。这个选择的关键在于其开放的 API 接口,使其能够完美融入我的工作流:无论是通过 AppleScript 与 DEVONthink 同步,还是借助 N8N 连接 Tana 和 Telegram 频道,都能实现流畅的数据流转。考虑到其全文存档和检索功能的实用价值,订阅完整版账户时我并没有吝啬。

在阅读工具方面,Readwise Reader 仍然是我的首选平台。虽然新兴的 RSS 阅读器 Follow 展现出令人期待的潜力,但考虑到其稳定性仍在完善阶段,目前仅将其作为信息获取的补充渠道。

在多语言阅读需求的推动下,我终于购买了划词翻译工具 Bob 这个相见恨晚的得力助手。通过配置免费的 DeepL API 和 Groq 提供的大语言模型,它能够提供快速、准确、优雅的翻译服务。对于需要更专业的翻译场景,我会使用 Immersive Translate 作为补充。有趣的是,我的阅读习惯随着语言环境的改变而发生了显著演变:从前在国内时习惯使用中英对照阅读,而到里斯本生活后,我更倾向于直接阅读英文原文,仅在遇到疑难词句时通过 Bob 进行划词翻译。或许这种转变不仅反映了语言能力的自然提升,也展现了工具在适应性学习中的重要作用。

这些工具的选择和使用方式的改变,不仅提升了信息获取和处理的效率,更重要的是帮助我建立起了一个既安全又便捷的数字通讯和阅读环境。在这个环境中,各个工具都能够相互配合,形成一个有机的整体,为日常的数字生活、学习和工作提供有力支持。

存储与备份

数据的安全存储和可靠备份始终是不可或缺的基础需求。尽管我已在第 93 期电子报中详细阐述了具体的数据存储与备份策略,在此我想着重分享选择这些服务背后的深层考量,以及它们如何协同工作形成一个完整的数据保护体系。

作为 Apple ecosystem 的用户,iCloud 为我提供了设备间无与伦比的互通体验。这种优势在家庭场景中尤为突出——由于家人也都在使用 Apple 设备,通过 iCloud+ 的家庭共享功能,我们能够轻松实现照片、文档等数据的共享与同步。这种无缝的协作体验是其他平台难以企及的,也是我选择继续坚持 Apple 生态的重要原因之一。

然而,iCloud 在对外分享方面的羸弱促使我需要寻找一个传统网盘作为补充。考虑到实际使用场景,我花费两周时间专注评估欧洲的网盘服务商,深入对比了 Mega、pCloud、Internxt、Koofr 和 icedrive 等多个方案。最终,德国的 Filen 以其出色的综合表现脱颖而出。这款采用零知识端对端加密技术的安全网盘,在保证高强度加密的同时,仍然保持着令人满意的传输速度。更难能可贵的是,它不对文件版本数量和传输带宽设限,这使其成为理想的文件分享工具。

Filen 的价值不仅体现在文件分享上,它同样是我重要数据的可靠后盾。其桌面客户端提供的灵活文件同步选项,能够在后台静默完成数据备份工作,这种无感知的备份机制大大降低了日常使用的心智负担。不过,即便 Filen 的安全性值得肯定,在备份重要的数据时,我依然使用了 encryption 工具进行加密后再进行备份。

在构建异地容灾备份方案时,我选择了专业的 BorgBase 服务。这个选择基于几个关键考量:首先,BorgBase 是专门为 Borg 备份定制的服务,完美支持增量备份和重复数据删除特性,既确保了完整的备份历史,又能有效节省存储空间;其次,它提供了直观的 Web 界面用于备份状态监控,配备开源的桌面端图形界面便于操作,并支持 SSH 密钥认证以确保安全性;最后,BorgBase 在欧洲多地部署的服务器为我提供了优质的访问速度和较低的网络延迟。这些专业特性使其相比普通的对象存储服务更适合作为异地容灾备份方案。

这三层防护——iCloud、Filen 和 BorgBase——构成了一个完整的数据安全保障体系。iCloud 负责日常的设备同步和家庭共享,Filen 承担文件分享和常规备份任务,而 BorgBase 则作为最后的安全防线,确保在极端情况下数据仍然可以完整恢复。此外,还有移动硬盘中的冷备份(但我今年的备份频率没有那么高,明年需要加强)。这种多层次的备份策略不仅提供了充分的数据冗余,也满足了不同场景下的使用需求,足以心安。

Setapp

在今年年中面临多个软件订阅即将到期的情况下,我才发现——这些软件大多都在 Setapp 的应用库中。重新计算了价格后,自然而然地选择订阅了 Setapp 的基础套餐。

目前,我通过 Setapp 使用的应用主要覆盖了系统维护、效率提升、媒体处理、文档处理和 AI 增强等多个领域。在系统维护方面,CleanMyMac 和 AIDente Pro 分别负责系统清理和电池管理;在效率工具方面,CleanShot X、Yoink 和 PopClip 大大简化了日常操作流程;在媒体处理领域,Downie 和 Permute 为我提供了全面的下载和格式转换解决方案;在文档处理方面,Marked 与 BBEdit 完美配合,提供实时的文档渲染预览;而在 AI 增强领域,Superwhisper 和 BoltAI 则提供了诸多便利。

Self-hosted

随着在里斯本的生活逐渐稳定,我的自托管需求发生了显著变化。不再需要全天候的 Surge 环境,也无需为使用 AI 平台、支付平台而担忧 IP 问题,这让我得以大幅精简服务器配置:目前仅保留一台通过 Zeabur 管理的 Hetzner VPS,外加一台 Oracle 免费 VPS。这种精简不仅降低了维护成本,更让我能够将注意力集中在真正重要的服务上。

在这些服务器上,我部署的自托管项目主要是:

  • TiddlyWiki 是我的 Digital Garden,展示公开的笔记
  • RSSHubWeWe RSS 负责构建个性化的订阅源
  • Telegram RSSbot 获取重要的即时信息
  • Ladder 绕过付费墙的限制
  • N8N 处理包括内容聚合、数据转换、定时任务等在内的各类自动化流程
  • Uptime Kuma 进行实时监测
  • Twikoo 为博客提供轻量级评论系统
  • R2 Uploader 图形化管理 Cloudflare R2

我部署自托管服务的理念是:轻量化、自动化、可靠性。希望能够在最小化维护成本的同时,提供稳定可靠的功能支持。

小结

通过回顾 2024 年的数字工具选择,我清晰地看到几个主要趋势:首先是向原生应用的回归;其次是对隐私和安全的持续重视;第三是工具间的深度整合,通过 AppleScript、Shortcuts 等自动化手段,将独立的工具编织成有机的整体。

希望明年我可以继续遵循这种理性和务实的思路。重点不在于拥有多少工具,而在于如何让已有的工具更好地服务于实际需求,创造真正的价值。同时,我也期待着能够在保持现有工作流程稳定的基础上,探索更多提升效率的可能性。

❌