用一台点阵打印机获取我的每日新闻
文章摘要
作者 Andrew Schmelyun 厌倦了每天早上在手机上无止境地刷新闻 App,希望减少屏幕时间,又不想完全脱离时事。于是他做了一个充满复古情怀的小项目:用一台 1980 年代中期生产的点阵打印机,每天早上 8 点自动打印一份”私人定制”的当日报纸。
硬件方案:核心打印机是一台 Star NP-10 点阵打印机,从 eBay 上以约 40-60 美元的”未测试”状态淘到,到货后做了清洁与色带(ribbon cartridge)的简单调校。控制端使用 Raspberry Pi Zero W,通过 WiFi 联网;打印机本身是并口(parallel port)接口,作者通过一个 parallel-to-USB 转换线把它接到树莓派上,在系统中表现为字符设备 /dev/usb/lp0。第一次往里写数据时遇到权限问题,他临时用 chmod 666 放开了写权限。文章发布后作者在评论区也承认自己一开始把”串口”和”并口”的概念搞混了,事后已经更新了原文。
软件实现:所有逻辑都用 PHP 写成,一个脚本完成:
- 天气:调用免费、无需 API Key 的 Open-Meteo
- 股票:使用 Twelvedata 免费档
- 新闻:使用纽约时报 API 的免费配额
- Reddit:直接抓 Reddit 的 JSON 端点,需要伪造 User-Agent 才能避免 403
最棘手的是字符集。Star NP-10 使用一种基于 IBM PC Code Page 437 的有限字符集,作者一开始想用 Unicode 字符画装饰版面,结果直接打出乱码。最终他从网上找到打印机的完整说明书,定位到支持的 box-drawing 字符(如 \xCD 表示一段水平连接线),改用这些十六进制字节直接发送给打印机。
由于打印宽度被硬性限制在 80 个字符,作者还实现了一个 splitString() 函数做按词换行,避免单词被腰斩。脚本最终通过 cron 在每天早上 8 点跑一次,输出一张内容固定(天气 + 股票 + NYT 头条 + Reddit 帖子标题)、有边框装饰的”晨报”。
作者表示比起无限滚动的信息流,”今天的新闻就这么多”这种有限性反而让他感觉舒服 —— 看完即止,不被算法继续投喂。
HN 评论精华
-
chihuahua:作者对一台 1980 年代点阵打印机不支持 Unicode 表示惊讶,这一点其实他早就习以为常 —— 因为他自己 1985-86 年就拥有过一台 Star SG-10。作者本人 aschmelyun 回复说:”那时我都还没出生呢,哈哈!”
-
LtWorf:质疑作者似乎分不清串口和并口。作者承认错误,已在原文中更正,并表示借此学到了两者的区别。
-
crims0n / brudgers / devilbunny 串子讨论了点阵打印机色带的寿命:色带通常按”打印的线性英寸”计算损耗,实际可以用很久。devilbunny 回忆父亲的 Selectric II 打字机色带几乎从未真正”坏掉”,只要定期重新上墨就能用很多年。brudgers 补充:”墨色带不会一次性死掉,只是越打越淡。当你觉得’这台打印机不行了,是不是该换新’,其实就是该换色带了。” —— 当年很多人就是因为门店新机演示打印更黑,才扔掉旧机买新的。
-
finaard:分享了一段早期 90 年代的怪招 —— 他发现并口打印数据没有真正的回传通道,于是把多张地址相同的 ISA 并口卡装进同一台机器,结果三台打印机会同步打印同一份内容,省了 1/3 时间。”我妈妈不觉得凌晨两点这种声音算 ASMR。”
-
reaperducer:从哲学角度赞同作者的初衷:”这是好事,因为它是 daily news,意味着会结束。你被告知,而不是被算法成瘾。这也是我看纸媒的原因 —— 新闻有尽头,我是顾客而不是无限滚动 feed 的瘾君子。真正重要的事,你听到警报或看到地平线变橙色就知道了。”
-
avgDev 半开玩笑地指出:”这套系统只打印 Reddit 的标题挺合适的,毕竟真正的 redditor 也只看标题和评论。”
-
kjs3:表示自己仓库里还有一台几乎全新的菊轮(daisy wheel)打印机,看完这文章觉得可以拿来做类似项目。
-
LocalH:怀念 Star NLQ(近信件质量)字体和那个时代的 bitmap 字体审美。
-
brudgers 还贴出了同类项目的旧讨论 HN 41742210,说明”每日新闻打印机”这一类玩具项目在 HN 是常青话题。