发现两个或许好玩的仓库
/colindean/optar
/cyphar/paperback
惊呆了,晚上在玩/colindean/optar的时候,因为打印出来的图像需要重新扫描,这时候才发现前些天买的激光打印机配的扫描仪软件上最高只能设置到 600 DPI。但之前爱普生的喷墨打印机居然是可以扫9600DPI(还好没丢掉)。
Twibright Optar 这个项目(仓库地址/colindean/optar)虽然比较古老了,但玩下来还蛮有意思,目的是用纸来进行数据存储。内置的纠错机制用到了蛮有名气的Golay码,据说用在深空网络通讯上。
默认参数下一页A4纸大概可以储存200KB的数据,但这套参数下对打印精度和扫描精度都有一定挑战,试了几回解码都不是特别顺利。所以我微调了一下参数,让一页A4大概能容纳100KB的数据,把之前做MD5碰撞后的头像图片通过Optar编码后打印出来。扫描仪设置到1600DPI后也成功成解码,还原出来的图片MD5并没有改变,算是比较成功的一次试验。
解码的时候看到误码率0.36%,其中有5块出现了3 bit的错误,但这些情况Golay码都是能够纠错的,但要是出现4 bit误码的块就不可修复了,还好没有出现。
Optar编码后的.pgm位图文件,会在最下方标注好生成参数,解码的时候照着输入即可,否则对不上的话是无法准确解码的。
这个项目的原作者是 Karel Kulhavy 但年代久远,现在是Colin Dean放在github上维护。(但其实也有8年没动静了)虽然年代久远,但编译起来倒没有遇到什么障碍。有兴趣的朋友也可以去玩玩。
既然数据都打印到纸上了,理论上来说可以通过邮寄的方式传输。这个项目是会自己分块的,所以就算有特别大的文档需要储存,只要打印纸管够是没问题的。但毕竟要一张张扫描,分块越多,还原不了的风险就越大。或许在编码之前套一层Reed-Solomon冗余会更加保险(比如Parchive或是zfec)。

