本文来源:https://mp.weixin.qq.com/s/l_tEYZ5f3TduN0sRdp9zIg
若有版权问题,请来信告知:13951431913#139.com 或在右方提交评论。
我先用GitHub的API把jonashonecker/feedpaper这个仓库的提交记录拉了一遍。33次提交,全挤在2026年8月9日和8月10日这两天里,第一天24次,第二天9次,之后就没再动过。Python包底下九个文件,我把每个文件的行数一个个取下来加了一遍,659行。仓库里没有LICENSE文件,接口返回的license字段是null。星标25个,fork零个。
作者自己在博客里写得很直白:借AI的帮忙,几分钟就搭起来了。
这段代码要干的事,小到有点可爱——他不想在手机上读博客了。躺沙发上、坐院子里晒太阳的时候刷工艺博客,眼睛累。这个念头搁了很久没动,直到他看见一台叫X4的小机器。
先说清楚那台机器
Xteink X4,4.3英寸电子墨水屏,没有触摸,没有背光,出厂不带任何书城。官网列的规格是114×69×5.9毫米,650毫安时电池,ESP32芯片,Wi-Fi只有2.4G,随机送一张16GB的microSD卡,能认的文档格式只有EPUB和TXT两种,规格表最后一栏明明白白写着“不兼容第三方应用”。
售价是69美元。
我今天开这个机型页的时候,顶上挂着一条公告:X4已售罄且停产,官方建议去看X3或者X4 Pro。X3同样69美元,3.7英寸;X4 Pro标价99美元。所以这篇里浮现的X4售价,是它退场时的定价,不是现在能买到的价。
顺手记一笔核到的毛边:同一个机型页上,宣传图那块写的是“Featherlight 74G”和“219 PPi”,往下滚到Specifications规格表,变成了77g和220 PPI,底下FAQ又回到74g。差3克、差1个PPI,不影响谁买不买,但一家把“极致便携”当卖点的厂商,自己页面上的重量数都对不齐,这个细节挺说明难题。
更要命的是,那张规格表里“Resolution”这一栏填的是“220 PPI”——PPI是像素密度,不是分辨率。整张官方规格表从头到尾没给过显示屏的像素数。480×800这个数字,我是在CrossPoint固件的使用者手册里翻到的,那篇教人做休眠壁纸的段落写着:X4用480×800,X3用528×792。拿480×800去算对角线像素数除以4.3英寸,得出来大约217,跟官网标的220差着一点。至于这块屏用的是E Ink哪一代面板,Xteink没写,我也没查到。E Ink官网的Carta 1100/1200品牌页上,4.3英寸确实在它列出的尺寸里,但那一页只给相对数据——比较度比Carta 1000提高15%,响应速度快20%——没有任何一个绝对值。
还有一件事得说明:Xteink的服务条款里写“适用香港法律”,但官网上找不到注册公司名和注册地址,关于笔者、联系笔者、隐私政策三个页面我都翻了,没有。
刷进去的那套固件比机器本身有名
这台机器真正的看点不在硬件参数,在它被人刷成了什么。
CrossPoint,开源的电子书电纸书固件,MIT许可证。仓库2025年12月3日建的,到今天7070个星标、1441个fork、207位贡献者、1146次提交,还挂着449个未关闭的issue。最新的v1.5.0是8月7日发的,我拉发布接口数了一下附件下载量,26718次;上一个稳定版1.4.1是87460次。这个量级,对一台停产的69美元小机器来说不算小。
它给X4补的东西,基本上是原厂固件的空白:EPUB 2/3渲染、断字、字距、脚注、书签、StarDict词典查词、KOReader进度同步、网页版文件传输、WebDAV、OPDS书库浏览、从GitHub直接OTA升级、24种界面语言。原博客作者试了几秒原厂固件就受不了了,三次点击刷完CrossPoint,拷进一本无DRM的电子书,能读。
这个仓库还有个细节值得一提:根目录躺着CLAUDE.md和AGENTS.md,.claude/skills底下放了五份写给AI的编码规范,堆分配纪律、控制流清晰度、硬件抽象层边界各一份。一款跑在ESP32-C3上、要跟内存斤斤计较的嵌入式固件,社区已经把“怎么让AI改这份代码”写成了成文规矩。
他主动扔掉了三类订阅源
回到feedpaper这条链路。流程本身没什么玄机:调Feedbin的API取未读条目,标记已读,攒成一个EPUB,拷进设备。仓库里的feedbin.py写死了每次最多取100个条目、每次最多标记1000条已读,一共92行。
真正有意思的是他往外扔的东西。
仓库里有一份文档就叫《为什么排除某些博客有协助》。作者点名三类源不该进这份报纸:链接摘要类的newsletter,一整篇全是URL,电子墨水上点不动链接,那一章就是一串死名单;视频和播客源,正文几乎没有可读文字,内容本体是个播放器;重度依赖JavaScript渲染的博客,工具为了离线干净会剥掉脚本,出来的章节是空的。被排除的源不会被标已读,还留在Feedbin里,作者的原话是“你可以在合适的地方读它们,通常是手机”。
这句话才是整件事的分寸所在。他没有宣称把手机上的信息流搬空了,他只是把其中一类内容——长文——挑出来搬到了一块不发光的屏上,剩下的照旧在手机上。
还有个更细的坎:很多RSS源只给摘要,第一段加一个“阅读全文”。feedpaper的处理是先用内联内容,判断“看着像被截断”就转去调Feedbin自带的全文提取接口,那个接口背后是Mercury Parser,Feedbin在服务端跑,工具自己一行网页都不抓。判断标准写得很土——正文短于大约500个字符、含有“read more”或者德语的“weiterlesen”这类字样、以省略号结尾,任意一条命中就走提取。文档自己承认这套启发式会误判,短文章可能被白白多请求一次。
同样的事Calibre干了十八年
读到这儿我第一个反应是:这轮子不是早有人造过吗。
Calibre有个叫“抓取新闻”的能力,靠的是一套叫recipe的Python脚本机制。我去它的GitHub仓库拉了master分支的树,recipes目录底下1097个.recipe文件,一个文件对应一个新闻源,从大报到小博客都有人写好交上去了。抓完直接转成电子书,官方文档里那句话写得很随意——“如果你的电纸书连着,它会被直接放进电纸书,而不是进书库”。这套代码在Git历史里最早能追到2008年4月。当前版本9.13.0,文档页脚表明的最后更新日期是2026年8月7日。
KOReader那边也有现成的news downloader插件,喂它一个RSS或Atom地址,它给每个源单独建一个文件夹,能规格每次抓几条、要不要抓全文。这插件的wiki页面2019年就写好了。
那feedpaper图什么。
差别实际上很具体。Calibre的recipe是站点导向的——你要读哪家媒体,就找哪家的脚本;feedpaper是账号导向的,它接的是“我在Feedbin里没读完的那一堆”,未读状态、全文提取、稍后读的心智,全在Feedbin那边现成放着。KOReader的插件跑在电纸书上,可X4上跑的是CrossPoint不是KOReader,用不了。至于Calibre,装一套完整桌面软件、维护recipe、再对上设备,对一个只想每天早上拿到一份未读长文合集的人来说,太重了。
往难听了说,feedpaper能存在,很大程度上是因为写它只要两天。十八年前造这个轮子是件正经工程,现在它掉到了“周末顺手写完”的成本区间里。当造轮子比找轮子便宜,重造就成了默认选项。
这一年到底要花多少钱
Feedbin的定价页我自己开了一遍:一个套餐,全能力,月付7美元,年付70美元,页面上标着“省14美元”,30天免费试用不用绑卡。它不是免费RSS服务,这是这条路的入场券。
加上一台69美元的X4,第一年139美元。按欧洲央行8月14日的参考汇率1美元兑6.7413人民币算(我从Frankfurter接口取的),937块。第二年往后只剩Feedbin的70美元,472块,一年。
937块摊到365天,两块五毛七一天。
这里得把话说清楚:我手上没有这台机器,上面所有关于它的话都来自厂商规格表、固件仓库和作者那篇博客,不是我摸出来的。软件那头我能核的都核了——提交数、行数、许可证、recipe个数、定价——硬件那头,480×800是从固件文档里倒推的,电池标称650毫安时对应“每天读一到三小时能撑十四天”这个说法,也只有厂商单维度的口径。
但这笔账值不值,跟机器好不好实际上关系不大。937块买的不是一块屏,是把手机留在家里出门那一次的可能性。它只对一种人成立:本来就在付费用RSS,每天有二三十篇长文积在未读里,而且心里很清楚自己每天在手机上浪费掉的是哪半个小时。这种人不用别人替他算账,他多半自己也能写出那659行代码。剩下的人买回去,两周之后它就是抽屉里一块4.3英寸的砖。



