TinyPilot:第 10 个月
一句话总结
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 收购带来的副作用,但安装过程出奇地糟糕。由于应用的指引非常含糊,且遇到任何硬件或 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 就完成了系统的安装。
到目前为止我很喜欢 OPNsense。它的复杂度高于 Ubiquiti,但比 MikroTik 直观得多。我能找到所需功能,但还不太敢随意摆弄设置。
交换机:TP-Link 8 口 PoE 交换机

这是我在家用的同一款交换机,我很喜欢。不过 PoE 端口很快就不够用了,所以我已经订购了一台 Netgear 16 口 GS116LP,计划上架安装。
无线接入点:Ruckus R310

同样,这是我在家用的同一款。对于一间仅 125 平方英尺(约 11.6 平方米)的办公室来说,可能有点过于高端了。
我喜欢它是 PoE 供电,所以只需要一根网线。在家里那台 Ruckus,我配置一次后就再也不用折腾了,所以我喜欢这种几乎免维护的体验。
打印服务器:在 Pi 4B 上运行的 CUPS

我的打印服务器搭建起来出奇地容易。我在一块 Pi 4B 上装了一个 PoE HAT(我手头恰好有很多),然后安装了 cups 和 printer-driver-brlaser。
我遇到了一些打印小故障,但不确定该归咎于我用来打印的 Linux 客户端、CUPS 服务器还是打印机本身。
跳板机 / bastion server(堡垒机):在旧款 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 美元。客户可以选择不接收,但这真的让人感觉 JustWorks 在锱铢必较。如果我为一个四人团队每月支付 200 美元,一张廉价海报似乎应该是 JustWorks 可以免费赠送的东西。
JustWorks 最让人沮丧的一点是,在工伤保险方面,他们将我的岗位归类为批发仓库工人。我与那些用叉车搬运巨大托盘的人处于同一个风险池。尽管我将自己的工作定义为纯粹的计算机工作,我工资对应的保险费率却是实际从事设备组装等体力劳动员工的 3 倍。当我尝试纠正这一费率时,JustWorks 坚称他们分配的代码是正确的,并拒绝进一步解释。
我最终与我的客户经理通了电话,向他解释我的工作仅限于编写软件和管理人员,因此将我归为仓库工人毫无道理。他表示理解,并说会与工伤保险团队沟通。几天后,他转达了如下回复:
本案中的管理人员虽然在办公室内从事计算机工作,但仍会接触到产品以及批发业务的运营。这就是该客户被归为此类别的原因。这种接触使得该员工不能被简单地归为文职员工。
目前要换掉 JustWorks 太难了,但我计划在年底评估 Gusto 和 OnPay。
让我先问问我的律师
受重温 Mike Monteiro(迈克·蒙泰罗)的著名演讲“F— You, Pay Me,”的启发,我有生以来第一次聘请律师来审查商业合同。
蒙泰罗的建议主要面向顾问和承包商,但其演讲的大部分内容同样适用于创始人。他认为,如果让对方在没有己方律师的情况下定义合同的所有条款,你就会放弃巨大的主动权。即使你的生意看似小到请不起律师,一位好律师也能通过帮你规避糟糕的交易来收回成本。
我从未签过商业租约,也不知道什么是常规做法,所以这似乎是个咨询律师的好机会。这给租赁过程增加了一周的紧张时间。延迟是因为我同时在做两件事:第一次聘请律师并让他审查租约。
不过结果倒是挺有趣的。能说出“我得让我的律师审一下这个”让我感觉自己像个真正的商人。而且律师发现了租约中的矛盾之处,并对我认为重要的条款提出了更清晰的表述,例如网络可用性以及对房东进入租赁空间权利的限制。
我那次考虑不周的推广实验
Will Yarborough(威尔·亚伯勒)是最早评测 TinyPilot 的 YouTuber 之一,我有兴趣与他合作探索 TinyPilot 更有趣的使用场景。
我们通过视频通话集思广益,威尔·亚伯勒建议使用 TinyPilot 来控制 DSLR 相机。几乎所有 DSLR 都有 HDMI 输出,并提供一个用于触发快门的简单电子接口。
TinyPilot 运行在 Raspberry Pi 上,后者拥有可通过软件控制开关的电子引脚。如果我能在 TinyPilot 的网页界面上添加一个控制 Pi 引脚的按钮,威尔·亚伯勒就可以搭建一个将其连接到相机快门的电路。
这听起来是个绝妙的主意!它可能为 TinyPilot 打开一个全新的市场。尽管已有人写博客介绍如何用 Raspberry Pi 控制 DSLR 快门,但从未有人将其与视频采集相结合,并整合到一个精美的网页界面中。
由威尔·亚伯勒承担创建电路和拍摄视频的重活,这感觉像是稳赢的买卖。我所要做的只是在网页界面上加一个按钮。这最多应该花我一个小时。
当我坐下来实现软件部分时,很快意识到工作量远不止加一个按钮。我需要更新 TinyPilot 的安装程序,以包含用于控制 Raspberry Pi 电子接口的正确库。而且我不能随便把按钮放在哪里——我必须重新调整界面,将按钮放在合理的位置。即使有了可行的方案,在发现不同相机的适配情况后,我和威尔·亚伯勒也不得不反复迭代了几次。
总共算下来,我在这上面花了大约六小时的开发时间。听起来不多,但如今我一周能挤出几个小时写代码就已经很幸运了。这个项目占用了我一周多所有的编码时间。
威尔·亚伯勒制作了一个很棒的视频,但我们俩对反响都感到失望。截至撰写本文时,数据如下:
| 指标 | 数值 |
|---|---|
| YouTube 观看次数 | 812 |
| 邮件列表注册数 | 17 |
| 转化率 | 2% |
视频发布后,我意识到自己问错了问题。虽然确实没有人用Raspberry Pi 构建过这样的解决方案,但已经有产品可以通过手机或网页浏览器控制 DSLR。甚至有一家公司持有一项专利,声称他们发明了通过计算机网络控制相机的想法,因此如果我创建竞品,他们可能会起诉我。
我很庆幸自己有先见之明,将所有 DSLR 相关代码保留在代码库的一个独立的实验分支中。起初,我认为这是一个足够小的改动,可以作为功能添加到常规的 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 月,莫妮卡·伦特开始将该课程作为免费福利提供给她的会员,并为每次独特的课程下载向我支付版税。那一波最初的热潮已经消退。
我很高兴人们仍在找到这门课程并与我交流他们的收获。来自 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 的运营完全迁移至新办公室。
- 收集关于《重构英语》目录的反馈并进行迭代。
随机一篇博客