我给猫写的喂食脚本跑了一年,最大的 bug 仍然是猫
小猫按回车
·
去年装了个自动喂食器,嫌官方 App 太吵,顺手用树莓派接管了:定时任务加称重传感器,猫粮余量、进食时间全记进本地数据库。当时觉得这项目撑死两百行代码,一周收工。一年过去,脚本已经迭代到第十七版,主要功臣是我家猫。
第一版上线三天我就发现数据不对:余量曲线永远平稳,可猫明明一天吃四顿。蹲守观察之后真相大白——它学会了整天趴在秤上睡觉。传感器视角里,猫粮永远「还剩很多」,因为那堆猫粮上面一直压着一只四公斤的活体配重。于是 v4 上线:体重滤波,检测到持续四公斤的恒定压力就单独记账,那部分数据标成「猫」,不并进食曲线。
第二回合它换了打法:对定时出粮没兴趣,专攻我。凌晨五点五十开始挠卧室门,风雨无阻,比我设的六点 cron 精准。我一度怀疑是它感知了 Wi-Fi 重连之类的信号,后来排查发现 router 凌晨确实会重启——猫没读过文档,但它把「断网重连之后不久有饭吃」这条隐含规则摸得门儿清。v9 的对策是喂食时间随机化,正负十五分钟抖动,把「机器可预测」这件事从它的模型里删掉。挠门持续了一周,放弃了。
最狼狈的一次是上个月停电四小时,UPS 只保住了树莓派,NTP 恢复后时钟跳了半天。我盯着日志找异常,猫坐在食盆前看我,那眼神的意思很明确:你的系统修好了吗,我赶时间。
写这一年的总结,技术收获其实不多,无非是幂等、重试、滑动窗口那几样。真正的收获是方法论层面的:这个系统里有一个不读日志、不看监控、但会持续 fuzz 你每一个假设的进程。它不讲道理,只讲统计。做 side project 的人常说「为自己写代码最快乐」,我的补充是——为自己和一只猫写,进度慢一半,测试覆盖率高十倍。第十七版现在稳定运行,而猫那边,据说它自己那版也在更新。
帖子永久链接