Refactoring English: Month 3

Michael Lynch

Refactoring English:第三个月

一句话总结

我第一次在 Kickstarter 上筹款

要点

  • 我发起了我的第一个 Kickstarter 项目,发现 Kickstarter 出奇地省心。
  • 我大致还在实现 Kickstarter 目标的正轨上,但要筹到最后的三分之二,我得想点有创意的办法。
  • 我正在征集有趣的服务的建议,想跑在我的 4 核 ARM CPU / 24 GB 云服务器上。

目标评分

每个月初,我都会宣布想完成的事情。以下是我对这些目标的完成情况:

完成《Refactoring English》的博客写作章节

写博客章节写到一半时,我意识到可以写 commit message,而且这会是一个适合分享到 Hacker News、/r/programming 和 Lobsters 等开发者向社交网络的好章节。

遗憾的是,这篇文章在 Hacker News 上彻底失败,在 /r/programming 和 Lobsters 上也没引起多少关注。虽然令人失望,但我知道这本来就是有可能发生的。

开始预售《Refactoring English》

  • 结果:开始在 Kickstarter 上预售
  • 评分:A

Kickstarter:我 pleasantly surprised(惊喜)

我决定在 Kickstarter 上进行《Refactoring English》的预售。我以前从未用过 Kickstarter,原本做好了它会是一场痛苦经历的心理准备。

我对“创作者平台”的通常体验是,它们靠向我推销各种加购服务来赚钱,而不是帮助我的项目。

我很高兴地报告,在 Kickstarter 上发起第一个项目出乎意料地省心。他们从未要求我为任何东西付费。他们把激励对齐得很好,靠帮项目筹款来赚钱,而不是通过加购来榨取项目创作者。

总的来说,我在 Kickstarter 上花了六到八个小时填写所有表格、验证我的银行信息,并制作面向公众的文字、视频和图片。

我喜欢 Kickstarter 的模式用于这个项目。如果做常规预售,三个月后发现客户不够,我就会陷入尴尬境地:即使已经做了三个月的工作,也得给所有人退款。我很欣赏 Kickstarter 明确告诉支持者,他们的钱是为这段旅程支付的。创作者应尽力交付,但支持者也接受事情可能不会成功的可能性。

我还喜欢可以设定目标并把项目做成“全有或全无”。我把目标定在 5 千美元,因为我觉得这既有野心又可行,而且这个数字高到足以让我抱有希望:出书后还能再赚 1 万到 2 万美元。如果达不到目标、一分钱都拿不到,我会失望,但也会感到安慰,因为我对这个想法得到了一个明确的“不”。

除了 Kickstarter 的垃圾邮件发送者……

Kickstarter 唯一的缺点是垃圾信息。肯定有大量垃圾邮件发送者盯着 Kickstarter,因为我每天大约收到三封新邮件,提供某种骗术般的“帮助我的众筹成功”的方式。他们一开始(拙劣地)假装成一个感兴趣的顾客,然后把话题引向我应该付钱请他们帮忙的“朋友”。

Hello, An investor promoted your campaign to me, and I was immediately intrigued by your approach to improving writing for software developers. Your experience and success in blogging are impressive! I’d love to support the project. How do you plan to tailor the writing techniques for developers with varying levels of experience and expertise? Best regards, David

垃圾邮件发送者先发一条无害的消息,假装对你的产品感兴趣。

Hi Michael, Great ! Have you considered reaching out to a creator like yourself on Kickstarter for advice on how they reached their potential goal? I have a friend who's a successful creator on there, and I'm not sure if you're interested, but it might be worth connecting with him for some insights. It could be really helpful for your campaign! Wishing you success with your campaign! Best wishes, David

……然后他们把话题转向他们的“朋友”,后者提供付费的 Kickstarter 宣传服务。

筹款:目前进展如何

截至今天,我的 Kickstarter 项目已获得 1,585 美元的pledge(认捐),达到了目标的 31%。

我的 Kickstarter 项目的筹款窗口期进行到 24% 时,我已达到营收目标的 31%。

我是在周五发起项目的,筹款在月底结束,所以我正处于 25 天筹款期的第 6 天(完成了 24%)。

在时间线只过了 24% 的情况下达到目标的 31%,听起来不错,但问题是我已经打出了手里最好的牌。我向本书的邮件列表、社交媒体以及这个博客底部的小广告宣布了这次 Kickstarter 众筹。

那么,我还能做什么呢?

我能想到的还有两张牌可以打。

第一张是登上 Hacker News 的首页。这通常很难做到,但我应该算是这方面的专家。我有信心至少能做到一次,希望在月底前能有两三次。我有几个帖子点子,基本上算是“触击球”。它们不会是能冲到第一名位置的本垒打帖子,但我大概能在 5 个小时左右写出来,并落在 Hacker News 第 10 到 20 名的区间。

我的第二个想法是联系那些在公开写作上投入巨大的公司,看他们是否有兴趣赞助这个项目。我从没见过有企业赞助商的书,所以这也许是个坏主意,但看起来似乎可行。

副业项目:我该在我的爱好云服务器上跑什么?

我最近免费获得了一台 4 核 ARM CPU / 24 GB 内存的 Oracle Cloud 服务器。问题是这台相当能打的服务器大约有 99% 的时间处于空闲状态:

我可怜的服务器太无聊了。

到目前为止,我已经安装了:

我在征集建议,想在这台服务器上跑一些有趣的东西。我的标准是:

  • 我希望它是一个我有时间时运营起来很开心的服务,而不是一个占用我时间的义务。
    • 我不想花时间管理论坛或聊天室之类的东西。
  • 它可以是一个志愿计算项目,支持我喜欢的事业。
    • 我想运行 ArchiveTeam Warrior 来把网站归档到 Internet Archive,但他们不支持 ARM
    • 对于志愿计算机会,我希望它对运营者来说是有趣的,就像当年如果你向 SETI@home 捐献计算时间,光是看着它运行就很有趣一样。
  • 我希望它是开源的。
  • Oracle 可以随时清掉我的服务器,而这不应该影响到任何人。
    • 也就是说,我不想让任何人丢失存储在我服务器上的数据。
  • 我不想挖加密货币。

endlessh-go 是一个符合我要求的好例子,我打算加上它。

如果你有建议,觉得我的服务器应该跑什么有趣的项目,请在评论区告诉我,或者给我发邮件。

有趣的链接

  • Simon Tatham(西蒙·塔瑟姆)的《Writing commit messages》(《撰写提交信息》)
    • 在写我的文章之前,我读了很多关于 commit message 实践的博客文章,我认为这篇是最好的。
      • 其实,更准确地说,其他文章都很糟糕,只有 Tatham 的这篇是好的。
      • 其他每篇文章要么关注无关紧要的风格问题(例如“标题必须用祈使语气”),要么不解释理由就下达规定。
    • 根据 URL 和网站设计,我以为作者是个大学生,惊讶于他对 commit message 有如此多的智慧。我深入调查后发现,这位作者是 PuTTY SSH 客户端的创造者,只是喜欢把所有东西都托管在朋友的服务器上
  • Andrew Kelley(安德鲁·凯利)的《Programming without Pointers》(《无指针编程》)
    • Zig 的创始人 Andrew Kelley 说,他通过创造一种他称之为“programming without pointers(无指针编程)”的风格,摆脱了自己的编程水平瓶颈。
    • Kelley 的风格是,用一个包含应用所需的各种数据类型的单一 struct(结构体)来表示应用的状态,但其中任何类型都不能包含指针。顶层 struct 可以包含数组或 hashmap,但它们存储的对象不能有指针。
    • 他举了存储字符串的例子。你不能存储一个字符串数组,因为那会是“指向指针的指针”。相反,他创建一个自定义结构,把所有字符串聚合到一个数组里,然后维护一个指向该数组索引的列表。
    • 这种技术的优点:
      • 序列化和反序列化状态非常简单。序列化只是把 struct 的字节转储到文件或网络套接字中。反序列化只是读取整个文件并把它映射回原来的 struct。
      • 跨环境共享状态很容易(例如 Zig 后端和 WASM 前端)。
      • 内存管理也变得更简单,因为你可以为顶层 struct 的每个字段释放内存。你永远不必遍历列表或走查树结构来为子对象释放内存。
    • 我觉得这项技术令人惊讶,因为这些索引本质上就是没有编译器支持的指针。如果是一个随机的人向我提出这个方案,我会不予理会,但因为我认为 Andrew Kelley 很聪明,我想试一试。
  • Hemant Kumar(赫曼特·库马尔)的《Reviving an Old Kindle Paperwhite 7th Gen》(《复活旧款 Kindle Paperwhite 第七代》)
    • 我非常想在 eBay 上花 30 美元买一台旧电子阅读器,做我自己的仪表盘,但我完全不知道该在上面显示什么。
  • Kit Fox(基特·福克斯)的《If You Ever Stacked Cups In Gym Class, Blame My Dad》(《如果你在体育课上叠过杯子,都怪我老爸》)
    • 一天凌晨两点我醒来后睡不着,花了大约两个小时读这篇文章和看叠杯视频。

总结

完成了什么?

学到的经验

  • 在 Kickstarter 上筹款出乎意料地省心。

下个月的目标

  • 实现《Refactoring English》的 5 千美元 Kickstarter 众筹目标。
  • 发表《Refactoring English》的博客写作章节。
  • 在 3 月底前两次登上 Hacker News 首页。

求助请求

  • 如果你对我的 Kickstarter 项目有建议,而且你不是垃圾邮件机器人,请给我发邮件。

原文由 Michael Lynch 发布

本文章由 stealth/ox-alpha 进行翻译