微信号:programmer_club

介绍:程序员第一自媒体,与你探讨码农人生路上遇到的各类泛技术话题,定期为你推荐码农人生思考、感悟以及启迪!

如何在一张A4纸上存储数据

2015-10-17 22:02 程序员之家

译者:赖信涛

原文:http://ollydbg.de/Paperbak/


一天,一位程序员的儿子问爸爸:“光盘是怎么存下那么多数据的呢?”他想了一下,拿出一支铅笔在纸上画一些点,来解释数据的密度有多么大。他儿子又问:“那这一张纸最多可以存多少数据呢?”他大体估计了一下,说100K吧。“我们能试试吗?”他儿子说。于是这位程序员就花了四五天的时间证明这个结论,后来又花了两个周的时间编写了PaperBack,这位程序员叫Olly。


PaperBack是一款基于GPL的自由软件,可以将文件存储到一张巨大的位图图像中。如果有一台600dpi的激光打印机,那么就可以在一张A4纸上保存500,000byte的未压缩数据,如果用来存代码的话,一张纸可以保存3,000,000+(约3M)的C语言代码。


为什么要写这个软件呢?Olly说,现在已经有很多高级存储设备了,比如硬盘,光盘。但是这些都有一个缺陷:一段时间之后,你无法确定这些数据是否完好无损,是否可读,除非你使用相应地机器去读读看。纸就不一样了,很久以前,程序员就用穿孔纸带来保存代码,那时纸就被当做一种数据的保存方式。纸不仅可以当做廉价的存储介质,还可以像笔记本一样用,人们(不对,是程序员)甚至可以读懂上面的代码。


这种方式对硬件的依赖很低。首先纸本身就是可读的,(最多你可能需要借助一个放大镜),其次这款软件是自由软件,可以在Linux或者OS X上运行这些代码。还可以将数据打印出来之后邮寄到偏远地区,即使他们没有电脑也能分享到你的数据。


PaperBack的使用方法非常简单,软件只有一个exe文件,无需安装直接下载之后就可以运行。界面如下图:


参数说明

  • Dot density:分辨率。最重要的参数,最好设定为打印机分辨率的一半。如果是喷墨打印机,要设定在200dpi之内。

  • Dot size:点大小。点之间必须有明确的区分,通常70%是最佳选择。

  • Compression:压缩。如果你的计算机特别慢的话,选择fast,否则一般选Maximal(最大化压缩)。

  • Redundancy:冗余。冗余可以使数据更加可靠,例如,如果5个数据块中有一个坏了(选择1:5的时候),冗余就可以补救。冗余占用了存储空间,但是提高了安全性。

  • Header and footer:是否在头尾添加文件的相关信息。

  • Border around the page:是否添加边框。

  • Decoding:PaperBack使用了非常棒的纠错技术,即使有一部分数据有损了,也会被接受。这样加快了处理速度但是却导致了一些坏块。如果你想知道真实数据的质量,勾选Determine best quality,PaperBack会提供一个报告,但是需要一些时间。

  • Encryption:是否加密。

生成的位图图像如下:


使用PaperBack也可以将数据打印出来。现在的版本尚不支持打印文件夹,如果你要备份一个文件夹的话,需要先压缩。PaperBack支持拖拽操作,将一个非bmp文件拖入,就会自动打印。如果是bmp文件,默认的操作是解码。


PaperBack支持所有TWAIN接口的扫描仪来恢复数据。使用时需要关闭所有优化选项,PaperBack有自己的优化操作。如果存储的时候选择了加密,解码的时候会被要求输入密码。

 
程序员之家 更多文章 我们这一代人的困惑 神剪辑,揭秘程序员加班内幕,不能看,看完想笑又想哭! 美国12位创新型程序员:让科技永远改变 说说怎么写clean code 500,000+年薪程序猿出身哪里 猎聘网揭秘前十大学校
猜您喜欢 钟胜辉谈PHP发展的现状和前景 C++11从入门到放弃之 mutex Java提高篇之详解内部类 喜神送惊喜:Watson触手可及 京东前端:三级列表页持续架构优化