Refactoring English: Month 2

Michael Lynch

重构英语:第二个月

原文由 Michael Lynch 发布,订阅该博客

一句话总结

在 AI 革命期间写书,真的合适吗?

亮点

  • 我开始怀疑,置身于 AI 革命之外是否明智。
  • 在继续投入更多时间之前,我应该先向自己证明,确实有读者愿意为这本书买单。
  • 我可能是全世界最后一个才发现 RSS 是阅读博客的绝佳方式的人。

目标完成情况

每月初,我都会定下当月的目标。以下是本月的完成情况:

发布 2024 年度回顾博文

我对最终效果挺满意。这一年感觉很零散,因为发生了几件大事我都已经单独写过了,很难决定该写些什么。但最终的总结还不错。

它曾短暂冲上 Hacker News 榜首,但很快就被挤到了第 63 名,我也不清楚原因。

再完成书中的一章

这部分的完成度比我预期的要高,因为本来没打算做那个小测验。我觉得测验算不上特别出色,但把文字内容和互动形式结合起来,挺有意思的。

根据读者反馈修订教程章节

我根据读者的建议做了一些行文上的细微修改,最大的改动是新增了一节。好几位读者都希望能有关于如何在示例中使用更恰当的虚拟数据的指导,我也觉得这部分内容确实应该加进去。

在 AI 革命期间写书是不是很傻?

在我看来,AI 正在软件开发领域引发一场革命。

如今的 AI 模型已经达到了合格初级工程师的水平。照这个进步速度,不出两年,AI 在大多数编程任务上就会超越最顶尖的人类程序员。

我预计整个软件行业都将围绕 AI 进行重构。在我有生之年,最接近的类比就是从桌面软件向互联网的转型。

我现在没有工作,也不用经营公司,完全可以自由地去做任何想做的事,来抓住 AI 带来的新机遇。

而我却在写一本和 AI 毫无关系的书……

我不想一味追逐最新、最炫的东西,但置身 AI 革命之外,又感觉像是 90 年代末眼看着互联网兴起,却说:“我想把软件刻在光盘上,让用户通过邮寄来订购。”

当初选择专注写书的理由现在依然成立,只是机会成本比我六个月前规划时预想的要大得多。

这本书真的有市场吗?

另一个问题是,写这本书是个长期的投入,而我现在还没把握确定真的有人想看。

我发布的第一章反响不错,但那是比较有趣、受众也比较广的一章。我担心像“被动语态是有害的”这样的章节,更像是“多吃蔬菜”式的说教——大家都知道有益,但读起来并不有趣。像 Hacker News 或 Reddit 这些我常去的地方,也不太会推荐一篇讲被动语态的帖子。

问题在于,我这本书里的大多数章节都是这种“多吃蔬菜”型的。

我可以调整结构,把“大声朗读你的文章”这类技巧放到博客写作那一章里讲,但又不太合适,因为它适用于各种写作,而不仅仅是博客。

但也许是我想错了。平时在网上闲逛的人可能不想点开一篇讲被动语态的文章,但如果他们决定要读一本关于高效写作的书,大概率还是会去读被动语态那一章的。

我原本以为在网上免费发布的试读内容必须和书中的章节一字不差,但其实没必要。我完全可以根据网络阅读的习惯来调整内容,所以在试读的博客章节里谈大声朗读的技巧也没问题。到了正式出版的书里,我再把这个技巧放到更合适的位置,不必归在博客那一章。

不过,在为此再投入几个月之前,我还是得先验证这本书是否有潜在读者。所以我的计划是,先完成另一章轻松、易读的内容,比如“写出开发者愿意读的博客文章”,然后基于最初的三章在 Kickstarter 上发起预售。我需要设定一个合理的最低预售目标,来决定是否值得继续写下去。

后知后觉:RSS 真好用

RSS 已经问世 25 年了,但我以前从来没用它来读过文章。

2011 年我试过 Google Reader,但订阅源里有趣的文章不够多,慢慢就不看了,后来也忘了这事。

过去几年里,有几件事让我对 RSS 重新产生了兴趣:

  • 我在 Twitter 上关注的技术博主们如今都分散到了不同的平台。
  • 我越来越意识到,社交媒体更倾向于放大博眼球的内容,而不是有趣的技术文章。
  • 我把操作系统换成了 NixOS,用它自托管一个免费开源的 RSS 阅读器变得非常简单。
  • 我发现自己并不喜欢通过邮件订阅博客,那会让收件箱变得杂乱,还会让我在没心思阅读的时候产生必须去读的压力。
  • 随着 AI 生成的低质内容充斥网络,我更想关注那些我真正喜欢的作者。

于是我装了fusion 这款 RSS 阅读器,发现它成了我最喜欢的阅读新博文的方式之一。每当在社交媒体上看到一篇喜欢的博文,我就会去翻翻作者的其他文章,如果觉得对胃口,就直接加到订阅里。

我最近开始使用 RSS 阅读器 fusion 来关注感兴趣的博客

我最近开始使用 fusion 这款 RSS 阅读器来关注感兴趣的博客

业余项目

wordword:在博客文章中查找词汇幻觉

最近我读了 Matt Might 的一篇博文,他在里面解释了“词汇幻觉”这个概念——指你在阅读时察觉不到文本中重复出现的单词,例如:

许多读者都没有意识到
当“the”这个词
在换行处重复出现时
大脑会自动忽略
第二个“the”。

我写博客时也常犯这种错误,所以想做个工具来自动帮我揪出这类问题。

这个工具很大程度上是借助 Cline 这款 AI 助手完成的。我既感到惊叹,又有点不安——Cline 能根据我的提示和测试用例把工具实现出来,能力实在太强了。

而且工具效果不错。我用它在已经发布的文章里找出了七处词汇幻觉

# Find lexical illusions (and also some false positives like "Duck Duck Go").
$ wordword ./content/
./content/retrospectives/2019/11/index.md:114: the
./content/retrospectives/2022/05/index.md:175: Duck
./content/retrospectives/2022/05/index.md:175: Duck
./content/retrospectives/2022/05/index.md:175: Duck
./content/retrospectives/2022/05/index.md:175: Duck
./content/retrospectives/2022/05/index.md:177: Duck
./content/notes/nix-git-bash-shell/index.md:78: time
./content/notes/cypress-vs-playwright/index.md:278: makes
./content/posts/simple-vue-pre-rendered/index.md:36: for
./content/posts/bootstrapped-founder-year-6/index.md:132: case
./content/posts/ansible-role-clipbucket/index.md:83: a
./content/posts/bootstrapped-founder-year-1/index.md:177: NOW
./content/posts/bootstrapped-founder-year-1/index.md:177: NOW
./content/book-reports/chaos-monkeys/index.md:8: names
./content/book-reports/go-programming-blueprints/index.md:50: of
212 total files checked
15 total errors found

我已经把 wordword 加到了博客的CI 构建Git pre-commit 钩子中。

而且因为是用 Zig 写的,它的速度非常快,检查博客里的 212 个 Markdown 文件只用了 28.7 毫秒:

$ hyperfine 'wordword ./'
Benchmark 1: wordword ./
  Time (mean ± σ):      28.7 ms ±   1.3 ms    [User: 11.7 ms, System: 16.5 ms]
  Range (min … max):    26.8 ms …  31.7 ms    90 runs

其他小事

我加入了 Codeberg,成为会员

我一直在寻找一个更少商业化、更开源的 Git 托管服务。

之前我用的是 Gitlab。但他们做了一个奇怪的决定:每两周强制让所有用户退出登录。

每次打开 Gitlab,我都发现自己被登出了。登录时,它还非要我去查邮件获取一次性验证码,而不让密码管理器自动填充,特别打断操作。

我试了试 Codeberg,感觉不错。它比 Gitlab 简洁得多,正合我意——Gitlab 对我来说总显得过于复杂。而且它完全开源,用 Go 和 HTML 模板实现,这正是我最喜欢的技术栈。

我看到支持 Codeberg 的方式之一就是加入成为有投票权的会员,于是就加入了。虽然还没用这个身份做过什么,但作为合作社的一员而不仅仅是一个用户,感觉还挺有意思的。

Codeberg 最大的缺点是,似乎没有哪家托管的持续集成服务商支持它:

  • WoodpeckerCI:没有服务商提供付费的托管服务。
  • Forgejo Actions:实验性项目,没有付费支持。
  • CircleCI:不支持 Forgejo/Gitea。
  • Garnix:不支持 Forgejo/Gitea。
  • Buildkite:不支持 Forgejo/Gitea。
  • Drone:支持 Forgejo/Gitea,但似乎只为企业版提供托管服务。
  • Harness:这是 Drone 的新项目,但我还没搞清楚它是否支持 Forgejo/Gitea。

Codeberg 官方推荐自行托管 Woodpecker CI,这听起来既有趣又不太实际,于是我花了一天时间在免费的 Oracle 云虚拟机上把它搭了起来。现在,我为 wordword 和其他几个项目自行托管 CI。但我不相信自己能把它做得像付费服务商那样安全,所以不敢在上面存放密钥。这极大地限制了它作为真正 CI/CD 方案的可用性。

入手了一台 10 Gbps 路由器

我的网络服务商第一次提供了 2 Gbps 的上下行对等带宽,我想充分利用起来。

我原来的路由器是 Qotom Q355G4,一直用得不错,就是不能上机架,而且只有 1 Gbps 的网口。

我本想从 OPNsense 或 Protectli 这样值得信赖的硬件厂商那里买一台,但 OPNsense 最便宜的 10 Gbps 机架式路由器要1200 美元,而 Protectli 根本没有可上架的型号。

最后我买了Qotom C3758R 1U 10 Gbps 路由器(含运费和税费 417 美元),并在上面安装了 OPNsense 企业版。

我买了一台 Qotom C3758R 10 Gbps 路由器(机架上数下来第三台),为了用上服务商新推出的 2 Gbps 套餐。

为了用上服务商新推出的 2 Gbps 套餐,我买了一台 Qotom C3758R 10 Gbps 路由器(机架上数下来第三台)。

我总担心路由器的内存或存储不够,但 OPNsense 其实几乎不怎么占资源。我选了 8GB 内存和 128GB 硬盘。跑测速时看了一下系统负载,内存从未超过 13%,CPU 最高也只到 30% 左右,所以这配置对我来说绰绰有余。顺带一提,我没有设置太多防火墙规则,也没用 OPNsense 的 IDS/IPS 功能。

正式转用 Rackstuds

在我发布了关于搭建第一个家用服务器机架的文章后,有几位读者建议我试试 Rackstuds,而不是传统的笼式螺母。

比起标准的笼式螺母,我更喜欢 Rackstuds。

比起标准的笼式螺母,我更喜欢 Rackstuds。

一开始我有点怀疑,因为 Rackstuds 是塑料的,看起来比金属笼式螺母更容易坏。不过 Rackstuds 有实验室测试表明它们可以承重高达 40 磅

Rackstuds 用起来确实比笼式螺母方便得多。用笼式螺母安装设备很麻烦,尤其是重设备——你得一手托着设备保持水平,另一手去拧螺丝固定。

Rackstuds 解决了这个问题,因为你可以先把扣钉装好,然后直接把设备挂上去就行。

让我困惑的一点是,Rackstuds 有两种型号:红色和紫色。它们的区分方式让人摸不着头脑。紫色款的产品页面写道:

适用于厚度在 2.7毫米/0.106英寸至 3.2毫米/0.125英寸之间的导轨。如果厚度 ≤ 2.2毫米/0.086英寸,请改用新款红色版本

啊?

我一直以为服务器机架里的“导轨”是指装在服务器上、用来把服务器滑进去的那种滑轨,它们各个维度的尺寸都远大于 3 毫米。

我原本以为的服务器机架“导轨”。

我原本以为的服务器机架“导轨”。

后来我才搞明白,Rackstuds 所说的导轨厚度,指的其实是机架正面的那块金属板:

在我的 StarTech 机架上,紫色的 Rackstuds 装起来更合适。

还有一个坑:如果你买的是 Rackstuds Duo,它只适用于正好 1U 高的设备,而散装的 Rackstuds 则可以用来安装任何机架设备。我先买了 8 个装的试用包,之后又给以后要添的设备买了一袋 20 个装的。

总结

完成了什么?

经验教训

  • 考虑到写书所需的时间,以及那些能更好地利用 AI 变革的其他项目,我需要重新评估写书这个想法是否是正确的策略。
  • 我可以调整书中的内容,使其更适合网络传播、更能吸引读者。试读摘录不必与正式出版的书稿 100% 一致。

下月目标

  • 完成 Refactoring English 的博客写作一章。
  • 开始为 Refactoring English 进行预售。

求助

  • 如果你知道比 Kickstarter 更专注于电子书出版的众筹替代方案,欢迎告诉我
    • 我知道 LeanPub,但我想要的是 Kickstarter 那种“达到最低目标才算成功”的机制。
  • 如果你对用哪种标记语言来写书、且能同时渲染为 PDF 和 HTML 有什么建议,欢迎联系我或在下方留言。
    • 我目前考虑的选项有:
      • AsciiDoc
      • mdBook
      • Pollen —— 我挺喜欢这个想法,但要学 Pollen 就得学 Racket,也就意味着要学 Lisp,工作量不小。

本文章由 muse-spark-1.2-contributor 进行翻译

评论