TinyPilot:第十个月
原文由 Michael Lynch 于 发布,订阅该博客
一句话总结
TinyPilot 有了第一个真正的办公室。
亮点
- TinyPilot 有了第一个正式的办公空间。
- 我尝试了一次营销实验,结果失败了。
- 为新办公室设计 IT 基础设施很有趣。
目标完成情况
每个月初,我都会定下当月想要完成的目标。以下是本月的完成情况:
将 TinyPilot 营收提升至 3 万美元
- 结果:营收增长 46%,达到 2.9 万美元
- 评分:A-
虽然没能完全达到 3 万美元的目标,但已经非常接近。2 月开始的销量下滑趋势终于止住,让人松了一口气。
为 TinyPilot 定制 PoE HAT 制作原型
- 结果:受全球芯片短缺影响,原型至少延期一个月
- 评分:D
刚开始时,我的电子工程合作伙伴已经考虑到了全球集成电路短缺的问题,但实际情况比他们预想的还要严重。
通常的做法是在设计并成功打样后,再批量采购元器件。我们原计划把采购环节提前到刚完成原型设计的阶段。我们试了三次,结果每次在我们花三四天设计电路板期间,元器件就已售罄。现在的新策略是,一旦确定可用型号,就立即采购关键元器件半年的用量,然后祈祷它们能在设计中正常工作。
为我的新书 Refactoring English 撰写大纲
- 结果:已完成大纲,并发布在本书的落地页上
- 评分:A
我写的大纲自己感觉还不错,但还没收集读者的反馈。下一步打算向本书邮件订阅用户做一次调研,看看这个大纲是否符合他们的期待。
TinyPilot 数据一览
| 指标 | 2021年3月 | 2021年4月 | 变化 |
|---|---|---|---|
| 独立访客 | 5,805 | 5,880 | +75 (+1%) |
| 总浏览量 | 9,762 | 10,483 | +721 (+7%) |
| 销售收入 | $19,782.96 | $28,880.65 | +$9,097.69 (+46%) |
| 捐赠 | $19.92 | $0.00 | -$19.92 (-100%) |
| 总收入 | $19,802.30 | $28,880.65 | +$9,078.35 (+46%) |
| 净利润 | -$352.77 | $843.56 | N/A |
TinyPilot 的新办公室:有趣的部分
TinyPilot 终于有了第一个正式的办公空间!它离我家步行只要 15 分钟,位置非常好。租约从 5 月 1 日开始,我正在把业务逐步搬过去。

搬入新办公室的第一天(现在已经整洁多了)
虽然我主要还是在家办公,但拥有一个真正的办公室比我预想的要有趣得多。之前我家越来越像 TinyPilot 的仓库,能把东西都搬到办公室,腾出两个大柜子和一个大壁橱,真是轻松了不少。
让我意外喜欢的另一件事,是为新办公室挑选技术基础设施。下面简单介绍一下我目前的配置:
门锁:Yale Assure Lever

办公室原本配的是普通的带锁门把手,但我想要一种更方便管理临时进出的方式。而且,万一和员工关系闹僵、不得不分道扬镳,我也不想担心对方手里可能还留着办公室钥匙。
我听说 August 的智能锁口碑不错,但他们只做插芯锁。Yale 在 2017 年收购了 August,并推出了一款搭载 August 软件的执手锁。
不确定是不是受 Yale 收购的影响,安装过程体验糟糕得让人意外。App 的指引含糊不清,遇到任何硬件或 WiFi 问题就直接报错、完全不会优雅地处理错误,每一步设置我至少都试了三遍才成功。
不过全部设置好之后,不用掏钥匙就能开门还是很方便,而且能查看谁何时进出过办公室,也挺酷的。
打印机:Zebra LP2844(打印面单)和 Brother HL-2300D(打印文档)

我在联网打印机上运气一直很差,尤其是 WiFi 打印机。Brother 这台就是一台普通的 USB 打印机,我用一台专用的打印服务器(见下文)把它共享到局域网。家里用的也是同一款,一直很稳定,所以给办公室选它也很合适。
Zebra 打印机之前在家就在用,这次直接搬到了办公室。它倒是能用,但在 Windows 上那种调节打印浓度的设置现在怎么也调不好,打出来的面单有点发淡,不太清晰。
路由器:在 Qotom Q355G4 迷你主机上运行 OPNsense
注:办公室的机柜还没搭好,所以我只能像个邋遢鬼一样把所有网络设备都堆在地上。


家里我用的是 Ubiquiti EdgeRouter 4,但今年 Ubiquiti 的表现急转直下。pfSense 是个热门替代方案,但他们似乎在是否开源的问题上并不诚实。我从多方听说,OPNsense 才是 pfSense 那个更守规矩的分支。
Qotom Q355G4 迷你主机是跑 OPNsense 的热门选择,我就在 Amazon 上买了一台。当然,借助 TinyPilot 新增的虚拟存储挂载功能,我全程只用 TinyPilot 就完成了系统安装。
目前用下来我还挺喜欢 OPNsense 的。它的复杂度比 Ubiquiti 高,但比 MikroTik 直观得多。我已经能摸清大致操作,但还没到敢随意摆弄各项设置的地步。
交换机:TP-Link 8口 PoE 交换机

和家里用的是同一款,我一直很满意。不过 PoE 端口很快就不够用了,所以我已经下单了一台 Netgear 16口 GS116LP,打算上架安装。
无线接入点:Ruckus R310

又是和家里同一款。对于一间只有约 11.6 平方米(125 平方英尺)的办公室来说,可能有点过于高端了。
我喜欢它支持 PoE,只需一根网线就能搞定。家里的 Ruckus 当初配置好后就再也没折腾过,几乎免维护,这点我很喜欢。
打印服务器:在 Pi 4B 上运行 CUPS

打印服务器的搭建出乎意料地简单。我在一台 Pi 4B 上装了 PoE HAT(手头正好有很多),然后安装了 cups 和 printer-driver-brlaser。
目前打印偶尔会有点小问题,但我还不确定该怪用来打印的 Linux 客户端、CUPS 服务器,还是打印机本身。
跳板机 / 堡垒机:在旧款 Pi 3 上运行 Tailscale

为了远程访问我的设备,我在一台旧的 Raspberry Pi 3 上安装了 Tailscale,然后又在家里的台式机上也装了 Tailscale,这样只要两台机器都联网,就能通过 Tailscale 的虚拟网络连在一起。
如果需要访问路由器,我就在家里的台式机上运行这条命令:
ssh bastion -L 443:192.168.1.1:443搞定!这样就能访问路由器的管理后台了。
要管理办公室的打印服务器(franklin)时,我则运行:
ssh -J bastion franklin -L 631:localhost:631这样就能访问 franklin 的 CUPS 网页界面了。

通过 Tailscale 在家里的开发机上管理办公室打印服务器
待完成
- 12U 机柜
- HP DL380 G7 机架式服务器
- 主要是想第一次体验一下机柜式服务器。
- 它非常大,重约 60 磅(约 27 公斤)。
- 结果可能是个馊主意。
- Dell Optiplex 3050 Micro(主力工作站)
- 目前暂时用一台 17 英寸的测试笔记本充当主力机
TinyPilot 的新办公室:烦人的部分
开设办公室最不让人愉快的部分,就是各种法律和保险事务。
以前我雇人都是以“独立承包人”的形式,在美国这是一种相当轻量、手续也不繁琐的方式。但并不是你想把谁定为承包人就能定的,美国国税局(IRS)对承包人与雇员的区分有明确指引。就我需要的岗位而言,IRS 认定这属于雇佣关系。这意味着我得处理一大堆文书工作,还要购买工伤保险。租约还要求我购买责任险和财产险。
TinyPilot 很难套进保险公司常用的行业分类。保险公司所说的“制造商”,通常指拥有可能致命的重型机械的工厂。我们所谓的“制造”产品,不过是把电路板拧进塑料外壳里,但保险公司仍将其视为“制造业”,因而收取很高的费率。
人事方面的事更让人头疼,而且一直拖着没完。我听从其他创始人的推荐选择了 JustWorks,但我逐渐意识到,因为我不是纯软件公司,体验可能会糟糕得多。
以下是我目前使用 JustWorks 的体验:
- JustWorks 的入职流程中有七个不同的人联系我,问的都是同样的问题,团队内部似乎完全没有协同。
- JustWorks 藏着一笔巨大的隐性费用:你必须通过他们购买工伤保险,而这一点要到注册流程进行一周后才会得知。
- JustWorks 默认会寄给你一张劳动法海报,然后收费 50 美元。客户可以选择不接受,但这种锱铢必较的感觉真的很让人不爽。如果我每月为四人团队支付 200 美元,一张廉价海报这种东西理应免费赠送才对。
最让人沮丧的是,JustWorks 在工伤保险上把我的岗位归类为批发仓库工人。我和那些开叉车搬运巨大托盘的人被划进了同一个风险池。尽管我已说明自己的工作完全是在电脑前完成,我工资对应的保险费率却是实际从事设备组装等体力劳动员工的 3 倍。当我试图纠正这一费率时,JustWorks 坚称他们的分类代码是正确的,且拒绝进一步解释。
最后我和客户经理通了电话,向他解释我的工作仅限于写代码和管理人员,把我归为仓库工人毫无道理。他表示理解,并说会去和工伤保险团队沟通。几天后,他转达了这样一条回复:
在此案例中,尽管该行政人员在办公室内从事的是计算机工作,但仍会接触到产品及批发业务的运营。因此客户会得到目前的分类,这种接触使其无法被单纯归为文职员工。
现阶段要换掉 JustWorks 太麻烦,但我计划在年底评估一下 Gusto 和 OnPay。
“我得让律师过目一下”
重温了 Mike Monteiro 的著名演讲《F— You, Pay Me》后,我第一次请了律师来审阅商业合同。
Monteiro 的建议主要面向顾问和承包人,但他的演讲大部分内容同样适用于创始人。他认为,如果让对方单方面定义合同的所有条款、而自己这边没有律师,就等于拱手让出了巨大的主动权。即使你的公司看起来还小得请不起律师,一位好律师也能通过帮你规避糟糕的交易来收回成本。
我从未签过商业租约,也不知道什么是常规条款,所以这似乎是个请律师的好机会。这给租约流程增加了一周令人焦虑的时间。拖延的原因是我同时在做两件事:第一次聘请律师,以及让他审阅租约。
不过结果还挺有意思。能说出“我得让律师看看这个”这句话,让我感觉自己像个真正的生意人。而且律师发现了租约中的自相矛盾之处,并对我关心的条款——比如网络可用性以及对房东进入租赁空间权利的限制——提出了更清晰的表述建议。
我那次想错了的推广实验
Will Yarborough 是最早评测 TinyPilot 的 YouTuber 之一,我很想和他合作,探索 TinyPilot 更有趣的使用场景。
我们通过视频通话一起头脑风暴,Will 提议用 TinyPilot 来控制单反相机。几乎所有单反都有 HDMI 输出,并提供了一个用于触发快门的简单电子接口。
TinyPilot 运行在 Raspberry Pi 上,而 Pi 有可以通过软件控制通断的电子引脚。如果我能在 TinyPilot 的网页界面上加一个控制其中一个引脚的按钮,Will 就能搭一个电路,把它连接到相机快门上。
这听起来是个绝妙的主意!它可能为 TinyPilot 打开一个全新的市场。而且,虽然已经有人写过用 Raspberry Pi 控制单反快门的博客,但从未有人把它和视频采集结合起来,做进一个精美的网页界面里。
Will 负责了搭建电路和拍摄视频这些重活,这件事在我看来十拿九稳。我只需要给网页界面加个按钮,最多花一小时就够了。
当我真正坐下来实现软件部分时,很快发现远不止加个按钮那么简单。我需要更新 TinyPilot 的安装程序,以加入控制 Raspberry Pi 电子接口所需的库。而且按钮也不能随便乱放——我得重新调整界面布局,把它放在合理的位置。即使有了可用的方案,我和 Will 在测试不同相机时发现各种问题,又反复迭代了好几次。
总的算下来,我在这上面花了大约六小时的开发时间。听起来不多,但如今我一周能抽出几个小时写代码就算幸运了,这个项目占用了我一周多的全部编码时间。
Will 做了一个很棒的视频,但反响却让我们俩都有些失望。截至本文撰写时,数据如下:
| 指标 | 数值 |
|---|---|
| YouTube 播放量 | 812 |
| 邮件订阅新增 | 17 |
| 转化率 | 2% |
视频发布后,我才意识到自己一开始就问错了问题。虽然确实没人用Raspberry Pi做过这样的方案,但市面上早已有可以通过手机或网页浏览器控制单反的产品。甚至有一家公司还持有一项专利,声称自己发明了通过计算机网络控制相机的想法,如果我推出竞品,他们完全有可能起诉我。
好在我有先见之明,把所有单反相关的代码都保留在了代码库中一个独立的实验分支里。起初我觉得改动很小,完全可以作为常规功能加进正式版 TinyPilot。幸好没这么做,否则会给代码引入大量复杂性,还会让界面多出一个 99% 用户都不需要的功能。
老项目
以下是对我仍在维护、但已非开发重心的项目的简要更新:
Is It Keto
| 指标 | 2021年3月 | 2021年4月 | 变化 |
|---|---|---|---|
| 独立访客 | 63,493 | 56,094 | -7,399 (-12%) |
| 总浏览量 | 141,199 | 123,723 | -17,476 (-12%) |
| 域名评分(Ahrefs) | 11.0 | 11.0 | 0 |
| AdSense 收入 | $611.99 | $560.20 | -$51.79 (-8%) |
| Amazon 联盟收入 | $337.29 | $116.78 | -$220.51 (-65%) |
| 总收入 | $949.28 | $676.98 | -$272.30 (-29%) |
Is It Keto 仍在后台安静地运行着。它延续了去年的模式:随着人们对新年开始的节食计划逐渐失去兴趣,热度也在缓慢下降。
Amazon 联盟收入跌幅偏大,但那只是因为上个月是个异常值。
Hit the Front Page of Hacker News
| 指标 | 2021年3月 | 2021年4月 | 变化 |
|---|---|---|---|
| 独立访客 | 185 | 114 | -71 (-38%) |
| Gumroad 收入 | $313.63 | $341.61 | +$27.98 (+9%) |
| Blogging for Devs 收入 | $655.20 | $109.20 | -$546.00 (-83%) |
| 总收入 | $968.83 | $450.81 | -$518.02 (-53%) |
我的课程仍在小批量销售。上个月因 Monica Lent 的 Blogging for Devs 社区出现了大幅增长。3 月份,Monica 开始将该课程作为会员免费福利提供,并为每一次独立下载向我支付版税。那一波热度现已回落。
很高兴仍有人不断发现这门课程,并来告诉我他们的收获。来自 CourseMaker 的 Chris Samiullah 发布了他的笔记,并表示我的课程帮助他登上了 /r/programming 分区的榜首。
Zestful
| 指标 | 2021年3月 | 2021年4月 | 变化 |
|---|---|---|---|
| 独立访客 | 480 | 892 | +412 (+86%) |
| 总浏览量 | 1,367 | 2,132 | +765 (+56%) |
| RapidAPI 收入 | $21.97 | $40.82 | +$18.85 (+86%) |
| 总收入 | $21.97 | $40.82 | +$18.85 (+86%) |
Zestful 仍处于维护模式。最近咨询企业版套餐的人多了一些,但一听到报价,洽谈很快就没了下文。我报的是更高的价格,以弥补将精力从 TinyPilot 上转移走的机会成本。
不过,很多企业版咨询很难让人认真对待。对方常常一上来就问:“按量付费套餐对我来说太贵了,你们的企业版多少钱?”
总结
完成了什么?
- 签下了 TinyPilot 首个办公空间的租约。
- 聘请了两名新员工,以兼职形式在办公室工作。
- 为新员工整理了约 50% 的 TinyPilot 内部流程文档。
- 完成了 TinyPilot 1.5.0 的代码开发,新增了虚拟存储和视频流调节功能。
- 发布了博客文章《How Litestream Eliminated My Database Server for $0.03/month》。
经验教训
- 永远不要在实时讨论中就承诺新项目。
- 即使看起来很小,实际也可能比想象的复杂得多。
- 我需要更多时间来思考这项工作是否值得投入。
- 为变化预留更多时间。
- TinyPilot 正同时经历两大变化:搬入首个办公室,以及从零开始培训新员工。
- 我预料到两者都会耗时,但本应给自己留出更多缓冲来应对意外任务。
下月目标
- 将 TinyPilot 营收提升至 3.3 万美元。
- 将 TinyPilot 的全部运营迁至新办公室。
- 就 Refactoring English 的目录收集反馈并进行迭代。
随机一篇博客
评论
登录后参与讨论