用一台点阵打印机获取我的每日新闻

查看原文 HN 讨论

文章摘要

作者 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 写成,一个脚本完成:

最棘手的是字符集。Star NP-10 使用一种基于 IBM PC Code Page 437 的有限字符集,作者一开始想用 Unicode 字符画装饰版面,结果直接打出乱码。最终他从网上找到打印机的完整说明书,定位到支持的 box-drawing 字符(如 \xCD 表示一段水平连接线),改用这些十六进制字节直接发送给打印机。

由于打印宽度被硬性限制在 80 个字符,作者还实现了一个 splitString() 函数做按词换行,避免单词被腰斩。脚本最终通过 cron 在每天早上 8 点跑一次,输出一张内容固定(天气 + 股票 + NYT 头条 + Reddit 帖子标题)、有边框装饰的”晨报”。

作者表示比起无限滚动的信息流,”今天的新闻就这么多”这种有限性反而让他感觉舒服 —— 看完即止,不被算法继续投喂。

HN 评论精华