最近与几个朋友聊到了“信息的本质”相关的话题,惊讶地发现,即使是计算机相关专业在读,面对“数据究竟是怎么一回事”这个问题,许多人依然云里雾里(包括我)。

解决了这个最根本的问题,方可从计算机领域的各种复杂之中解脱出来。所以我也尝试以文章的形式梳理一下。

“数据” 与 “信息”

说到“数据”,自然和“信息”这个概念是分不开的。什么是信息呢?这个概念没有一个统一定义,但有一点可以确认的是:信息可以减少不确定性。对一件事情不确定,引入信息,把不确定变成确定,这是最基本的“通信“过程。

“通信”过程时时刻刻都在发生,你的肉眼看到的每一个画面,耳朵听到的每一点声音,神经传来的每一丝冲动,或多或少都在传递着信息,为你的大脑减少对外界的不确定性,辅助你的每一个决策。

传递神经冲动的突触

这时候,“数据”像是一种客观角度下的“信息”存在,它从某个具体的角度描述了某个事物的特征。当我们需要确定某事物在某个角度的特点,这个角度对应的“数据”便可以给我们传递应有的信息。比如说,我想知道你的期末考试成绩如何,成绩单上对应这门课的数字,可以给我带来这方面的“信息”;我们看到一段文字、一张照片,了解到一件事情的来龙去脉,文字和照片传递了“信息”,这段文字、这张照片本身就是“数据”。

从这个角度上来看,“数据”实际上是“信息”的载体,我们从某个角度,解决对客观事物的不确定性,形成“数据”;然后我们再通过“数据”解决我们自身对客观事物的不确定性。也就是说,“数据”给我们传递了“信息”。以本文为例,我用文字记下了这篇文章,你在读这篇文章的时候,了解了我所讨论的“数据”与“信息”是怎么一回事。

数据与信息的关系

阅读全文 »

过去在微博遇到许多有趣的内容,但常常因为时间太久远,回看收藏链接往往返回的是404,记忆也随之变成了一个个空洞。脑洞打开,是不是可以把一条微博涉及到的各种文件一键打包下载,在本地阅读呢,就像 docx 文档格式一样。

技术方案

从尽可能简单的角度解决问题的角度出发,能在浏览器端完成的话最好,不需要依赖什么脚本和平台,额外花时间去梳理各种业务逻辑相关的琐事。从此出发,在数据来源方面,选择更简单的手机版;保存数据,优先考虑在浏览器端用文件相关的 API 实现。

理论上来说,文件的本质是一系列二进制数据集合,HTML5 FileAPI 提供了处理二进制数据对象的 Blob。在浏览器环境中字符串可以构造成 Blob,微博中涉及到的图片和视频文件的数据也通过 Blob 的方式处理。

有了 Blob 这一层抽象,文件打包压缩的需求,也用 Blob 的方式去实现的话会更自然一些。寻找已有的解决方案,发现 JSZip,它支持创建 zip 的文件,在输入输出的表达上支持包括 Blob 在内的多种格式,也支持 ArrayBuffer, Base64, 字节数组等等方式的表达,省下不少自己处理的功夫。

文件下载方面,可以用 URL.createObjectURL 基于 Blob 创建一个 Object URL,然后创建一个 <a> 元素,触发 click 事件下载,得到最终的文件。

把数据源与保存的方式都理清楚,大致有了一个流程,就可以动手了。

阅读全文 »

过去没有写年终总结的习惯,但看到大伙儿的总结,回想自己整个人经历着大幅度的变革与刷新的一年,或许还是有必要在部落格里记录一下。

时间串起的生活是一条线,但每一个当下与过去频频交织,组成了一个错综复杂的网络,想用线性的文字去描绘它,很多时候得到的是冗长和啰嗦。想想,面对网络,常常需要集中在几个点再出发,才好凝聚表达的力量。就像 "PowerPoint",内容有 Point,表达才有 Power 吧。

阅读全文 »

去年开始博主我大致确立了一个以 RSS 聚合为主,其它信源随缘查看的资讯订阅流程。其中一大需求是同步不同客户端的阅读记录,需要一个服务器端运行的订阅器。当时用的是 Tiny Tiny RSS 和它的 fever 插件,结合 tt-rss 安卓客户端和 Reeder 实现。

忙起来之后,碎片信息积攒得多了,有点超载。闲暇时间,也多消耗在读书类的 APP 和微信的公众号、看一看这类身边人分享的信息之中。加之手上服务器多了,这一套东西也无暇维护,不值得投入精力在反反复复的安装和修改配置上。最近这段时间也逐渐把手头的各个网站都迁移到 Docker,到了 tt-rss 这个站,想不清过去在这里魔改过什么,索性整个服务器重装了,这一套体系被我再次摧毁。

经过这样的建立、崩溃、重组、再崩溃的经历,RSS 这一工具在我的角度的使用场景也明确到了两个字:必读。RSS 满足了从关注的人、关注的领域开始发散的树形结构,与微信构筑的特有的以人的关系网为中心、不刻意的“口耳相传”这样的圈层结构相结合,形成我目前的资讯的主要来源。

RSS 这一块,进一步梳理之后可以得到以下需求:

  • 由于阅读不局限于一个地方,tt-rss 的强大功能反而更不适合,需尽可能地小巧精悍
  • 获得的信息不局限于日常所见,要穿过检查站,不能被 spy 和 filter,传输层加密是必要的
  • 不想在运维上花太多精力,希望安装配置有记录,方便后续的迁移和维护

对应的解决方案:

  1. miniflux:恰到好处的 Web 端阅读器,更新勤快,效率高,支持与各种服务对接。
  2. 域名 + HTTPS:满足加密的需求,Let's Encrypt 有免费的 HTTPS 证书
  3. Docker + Docker Compose:一次配置,一键部署
  4. RSSHub:消息源格式标准化,以便统一订阅

阅读全文 »

周六发现一个安静看书的好去处:科苑站附近的 Dots Coffee。这儿没有星巴克的喧嚣、没有挤满考研考证党后的图书馆的压抑、东西不贵,点杯茶可以坐一整天。一切都刚刚好。

所以周日又来到了这里。两天来我都在整理手里的英文版龙书 PDF,这文档目录书签不完全,为了和 MarginNote 对上,得手动用 Acrobat 给它一个小节一个小节地加上,1000 多页的书,两天弄完,想来也当作对这本书的框架的一种熟悉吧。

一个领域的知识就像是一座山,这座山只存在于心灵的世界,只有在内心足够平静的时候,才可能构建起来;在它足够强大之前,实在是不堪一击,外界的一点点干扰都可能把它摧毁殆尽。在这两天我也渐渐地感受到心中那片名为“编译原理”的那座小山的渐隐渐现。这种感觉熟悉却又陌生,已不记得上次是什么时候有过这种体验了。

恰好周日也是母校北江中学的返校纪念日,回忆起来,上一次可以这样安静祥和地构筑起一座座思想中的大山的体验的日子,不正是在北中的那段时光么?

阅读全文 »