我正在 SegmentFault 上录制一些 视频课程,欢迎购买收看,这是支持我创作更多技术内容的好机会哦。
基于业界最成熟的加密和版本控制工具 —— GPG 和 Git 的密码管理器:Elecpass

谈恋爱

在「20 岁的我在想些什么」那篇文章中我表达过一种矛盾的想法,既觉得生活比较稳定了,想找到另一半,否则感觉没什么其他的追求了;但又觉得自己没有准备好去接受另外一个人进入自己的生活。之前也时不时被吐槽想我这样试图和女生讲道理、不会关照女生、不总是抢着买单、不懂女生的想法一定找不到女朋友,也被很多人说「将来你要是有了女朋友,一定要让我看看是怎样不同寻常的女子」。

所以她进入我的生活对我来说是一个很突然的事情。据她说在五月末的时候,一开始只是想看看「一个有粉丝团的人」是什么样的,于是加入了我的粉丝群,偶然看到我说我在自己剪头发,于是向我推销一个理发剪刀套装,这就是我们第一次对话。之后我们联系得就比较频繁了,聊了一些比如城市规划、房价走势、密码货币、子女教育、消费主义、市场化、程序和结果正义、学术论文垄断、「生活的智慧」等「深刻」的话题。

她大概是看到我去年十月说的「求带逛大学校园」,于是便邀请我去南京逛一逛她的学校,于是在我协调了和其他行程的冲突、反复改期几次之后,终于在七月初和她在南京见了一次。到这时为止其实只是一次普通的「粉丝见面」,按照一般的套路就是见个面、吃个饭、随便走走而已,但没想到她竟然真的认认真真地花了两个半天带我逛了一下南京林业大学和玄武湖。

喜欢上她的瞬间是刚见面没一会儿,不记得我们说着什么了,但我每说一句话她就「嗯」一下,即使两句话之间我并没有停顿。我就觉得这样挺不习惯的,就突然停了下来,然后我们非常同步地笑了起来 —— 很没有逻辑不是嘛,但的确如此。见面之后我们发现了更多的共同点,比如我们都喜欢「自私的基因」、刘慈欣的「三体」等作品、东野圭吾的「白夜行」和「幻夜」等等。当时她还是希望毕业后能够留在学校,我也「不经意」地提起我在北京的房子有两个房间,说起来我会在北京这种地方空一个房间出来,也是一件很巧合的事情。

在我回北京之后,她告诉我想来北京发展,而且很有可能会住在我这里。这之后到 7 月 11 日我在火车站看到她为止,我内心都十分忐忑,不确定她是否真的会过来,又怕问得太紧她不高兴。我一直觉得没逛过宜家的人生是不完整的,于是在她来北京的第一天就一起去了宜家,为之后的「室友」生活做些准备。

然而室友的生活并没有持续几天。从在宜家开始她就总是在讲「我们」这个词、大部分时间都不关房间的门、提出把衣服混在一起洗,加之一个女孩子从那么远的地方搬过来住,我觉得她应该也对我有些意向吧。我不知道该不该表白心意,因为过去的一些经历,我还是对自己不太自信,想到既然已经是室友了,以后还有很多时间,也就不必那么着急。

虽然我们这可以算是一拍即合,但她还是要比我快了那么半拍,几天之后就问我「你觉得我怎么样呢」。我觉得除了价值观和兴趣的匹配之外,更重要的是我们在一起并不需要做出什么改变就可以很开心,而不一定要按照社会的期待去改变自己。我们都把这一点看得很重要,都是那种不希望遵循社会期待的男孩子或者女孩子,因此我们的相遇格外难得,我也觉得今后一定不会再遇到这么合适的女孩子了。

虽说「确定关系」会是一个十分重要的事件,但又总觉得并没有带来什么变化,还需要更多共同的经历来推动两个人的关系。我想别人家的情侣是不是都要拉拉小手、亲亲小嘴呀,但前面又刚说过我们不一定要按照「社会期待」去做,所以要不要主动地去进行肢体接触也让我纠结了一下。不过这种纠结并没有持续几天,实际上我们第一次牵手、拥抱、亲吻的场景都比较尴尬,加上我们也都是初次恋爱,于是那几天我们每天晚上凑在一起去知乎学习「你和你的恋人在脱单的第一天做了什么?」、「你的第一次亲吻是怎样的?」、「双方初夜,请问需要做足哪些准备?」之类的问题。在习惯了身体上的接触之后,后面也就显得水到渠成了。

我们甚至还没确定关系就以室友的身份住到了一起,于是我们需要面对一些更现实的问题 —— 很多人推崇校园中无忧无虑的、排除了几乎一切现实因素的爱情,但我不这么觉得,虽说这有点吃不到葡萄说葡萄酸的感觉。爱情不是生活的全部,两个人迟早都要面对生活在一起的各种问题,找到愉快地生活在一起的方式,所以我觉得这样没什么不好。刚好我也有了将近两年的独立生活的经验,生活本来也是有些条理的,她来之前我还仔细地把房子整理打扫过,希望能够一直保持下去,至少不能比她之前在宿舍的条件差嘛。

首先是对于个人空间和个人时间的「侵占」,可能在一个月前我还无法想象我能够接受另外一个人非常深度地「侵入」我的生活。我本来就是一个很在意个人空间的人,不曾住过集体宿舍,在出差或旅游时与他人同住一个房间也会感觉非常缺少安全感。但我对她并没有这种感觉,两个人在一起依然可以很放松,我也愿意减少花在其他活动上的时间,也许这是爱情的力量,但也可能是人在成长的过程中需要不断地打破自己的习惯。当然我并不是说情侣可以没有个人空间,我依然认为个人空间是非常重要的,两个人除了彼此还有其他的生活,才不会因为一些琐事患得患失。

另外一个重要的事情就是吃饭,之前我觉得多了一个人的话起码出门吃饭的选择更多 —— 不然一个人吃火锅显得多尴尬,也会更有动力在家尝试做一些食物。但她对食物意外地「讲究」,因为身体上的一些原因,很多食物不能多吃,例如 麸质 蛋白(小麦、燕麦)、糖类(淀粉、米饭、糖)、油(坚果、脂肪)、盐,导致可以选择的食物比较有限,虽然她并不介意看着我一个人吃。一开始我还会劝她多吃一点,不过当真的出现了生理上的反应之后,我才意识到这些「偏好」并不是(像一些人那样)说着玩玩的。不过我觉得也是可以接受的,首先她的这些偏好完美地避开了所有不健康的食物,然后我之前吃的大多是高油高盐且并不怎么好吃的食物,反正也不好吃,我宁可吃点低油低盐并不太好吃的食物。

写到这里发现我们成为室友快要一个月了,以此留作纪念。

我对比特币的信心来自哪里

这是我写的第三篇评论比特币的文章,目前比特币的价格在 18000 人民币,前两篇分别是在 2013 年初(600 人民币)和 2013 年末(6000 人民币),在那之后的三年多时间里,我一直保留着大约 1 到 2 个比特币。后来在 2016 年初我准备做一个关于区块链的演讲,于是为了给幻灯片截图,还买入了几十个以太币(Ether),当时以太币可能还没有进入到大众视野。

之前我也说过,我最早了解到比特币是在 2012 年初,那时我对去中心化系统非常感兴趣,当时比特币的价格是 40 元钱,说起来最近「我当初知道比特币的时候才 XX 元钱」已经成了和朋友聊起比特币时的标准开头。从那时起我一直都是比特币的持有者,中间还有一段时间的工作和比特币相关,对技术层面的了解当然是必不可少的,但时间长了也会去想那个终极问题 —— 比特币的价值是来自哪里。

但我们先来解释另外一个问题:为什么最近两个月比特币涨了这么多(从 10000 到 20000)?可能有的人会说因为外汇管制、因为「隔离见证」、因为 WannaCry,但我觉得可以简单地归结为两个字「信心」,价格之所以上涨是因为有更多的人买入,而他们之所以买入是因为他们对比特币有信心,或者说他们对比特币的信心增加了。这种信心的来源是多方面的,可能是你看到了比特币一路上涨、可能是你认识到了比特币是一个可能改变世界的发明,当然更大的可能是看到了身边其他人对比特币的信心,你的信心来自于其他更多对比特币有信心的人,因为有他们的支持,所以你可以放心地买入比特币而不必担心它会一文不值。

如果你认可了比特币的价格来自于信心的话,其实我觉得它就更加符合我们对货币的一般理解了。人民币作为一种法币,即使它只是一张纸钞或者银行中的一串数字,大家对它的信心如此之强,以至于全国十三亿人没有人不收人民币。而且大家甚至认为人民币是唯一可靠的货币,任何其他的货币都会受到这些人的质疑,这种信心来自于几十年里人民币的购买力相对稳定、来自国家政府的背书,当然更多的还是来自于其他人对人民币的信心,你知道你拿着这张纸可以从任何一个中国人那里买到东西。

那么为什么比特币的波动如此之大呢,我觉得一方面是因为它的体量太少,即使按照现在 18000 的价格,总市值大概也只是人民币的千分之一,更小的市值意味着它更容易被操纵。另一方面比特币通过世界各地的交易所可以自由、快速地进行 P2P 的兑换,一旦有影响大家的信心的新闻产生,大家就会第一时间进行买入或卖出操作,更及时地反映到市场价格上;而法币之间的兑换往往要通过银行,再加上一些对于法币兑换的管制,导致信心对价格的影响速度被人为地拖慢了,汇率并不准确地反映当前大家的信心。如果一个法币有着和比特币差不多的市值,并且允许自由兑换,我并不觉得仅仅因为它是法币,它就会比特币的价格更稳定。

比特币的出现和崛起的确让我非常激动,这是一项非常伟大的实验 —— 一种并非政府发行的、去中心化的、基于计算机和互联网的货币能否最终被大家认可。这项实验还远没有结束,包括我在内的无数人用真金白银,以及显卡在继续着这项实验。比特币带动了数百种其他的电子货币,带起了大家对区块链和去中心化技术的兴趣,某种程度上来说可能也带动了显卡和专用芯片的发展,这是比特币在「价格」之外的意义。

Rollup: 去中心化随机抽奖程序

在春节前后,经常在社区中看到有关年会抽奖程序的讨论,其中抽奖的公平性是被大家讨论得最多的点。可能有的人会说可以用 random.org 来取随机数,的确这个网站可以保证数字的随机性,但如果访问 random.org 的浏览器位于一台计算机上,如何证明这个随机数确实来自 random.org 呢?如何确定这台计算机从软件到硬件、从操作系统到网络接口都没有被动过手脚呢

所以我们需要一种「可验证」的随机数生成算法,即 这个算法不应该是运行在单个设备上的,而是可以在不同的设备上多次运行,并且总是得到相同的结果,这样才能被大家信服 —— 每个人都可以在自己的设备上进行验算。

其实说来直接使用比特币下一个区块的 hash,或者股市收盘价格作为随机数是最简单、最具有可行性的做法了。但这并不是说比特币(矿工可以有选择性地提交区块来影响随机数)或股市不能被操控,而只是相对于我们的年会抽奖来说,他们的体量都太大了,去操控比特币或股市是不划算的。

于是我想能否利用之前了解到的去中心化和区块链的知识,来实现一个去中心化的、可验算的、难以操控的抽奖程序,让这个抽奖程序以分布式的方式运行在所有参与者的设备上,会有一个后端服务器帮助客户端进行广播,但本身没有特权,客户端会对随机数的产生过程进行验算,确保没有人作弊。

其实在 Ethereum(一个类似比特币的区块链)上已经有了非常成熟的 随机数生成器,它基于「两阶段提交」来实现,在第一阶段每个人生成一个随机数,并将这个随机数的 hash 广播出去;然后在第二阶段之前的参与者再广播随机数的明文,然后将所有参与者的随机数加到一起,形成一个无法被任何操纵的随机数。

这个算法的要点在于,在第一阶段中每个人都选定了一个数字,但广播的却是数字的 hash,也就是说你没办法知道其他人选定的数字,也就无法去构造特定的数字来影响结果;而在第二阶段大家才开始广播真正的数字,同时每个人都会使用之前的 hash 进行验算,保证这时的数字与第一阶段相同。

我将这个算法进行了细化,在浏览器中用 React 实现了客户端,再用 Node.js 实现了一个基于 WebSocket 的服务器来辅助广播。大家可以在 rollup.leanapp.cn 访问到这个原型(源代码和详细算法位于 jysperm/rollup),可以自己开多个浏览器窗口进行测试:

2017/rollup-screenshot.png

如果有人捣乱会怎么样,比如在第二阶段广播了错误的数字或者根本没有广播呢?在 Ethereum 上这会给参与者带来经济上的惩罚。而在我们的原型中,我们只能做到感知到这些作弊的情况,然后中止抽奖,如果有人执意捣乱,就会导致抽奖一直无法完成了。

那是不是说这个原型已经做到无懈可击了呢?并不是,目前是使用单一的后端来实现广播,如果这个后端有选择性地不对特定的客户端广播一些消息,就会导致这个特定的客户端被孤立,和其他人产生不同的抽奖结果,而且这个被孤立的客户端也无从证明究竟是后端没有广播,还是自己忽略了广播。

更好的设计可能是通过真正 P2P 的方式进行广播,这样除非其他所有参与者联合起来孤立一部分人,否则其他参与者就可以从未参与攻击的人哪里得到正确的广播。然而真正的 P2P 其实是没办法实现的 —— 你总是需要一个用作服务发现的节点,同时也要考虑通讯信道的安全性,当前的密码学技术虽然可能保证消息不被篡改,但却无法保证消息不丢失。

关于区块链的更多知识可参考我之前的文章 BlockChain 与 Ethereum 介绍,其中也有对 Ethereum 上的随机数生成器的详细讨论。

精子生于 1995.11.25, 21 岁,英文 ID jysperm.

订阅推送

通过邮件订阅精子的博客日志、产品和项目的最新动态,精子承诺每一封邮件都会认真撰写(历史邮件),有想和精子说的话也可以直接回复邮件。

该博客使用基于  Hexo  的  simpleblock  主题。博客内容使用  CC BY-NC-SA 3.0  授权发布。最后生成于 2018-09-16.