Reflection

相较于前段时间时不时泛起的矫情,这段时间我过得好像还不错,甚至有种享受生活的感觉,但这是一种假象,这样的日子绝非永久,即使想通过胡思乱想来寻求出路是毫无作用的,也好过不再思考。为具体的事和人而非符号活着,尽管客观上是好事,但仍不啻于对过去苦苦挣扎的自己的一种背叛,也是对未来的自己的不负责任。

要为符号活着,要追寻彩色的石头。

“活下去,像牲口一样活下去。”

秋夜

晚上下班走出 E 世界大厦时,忽然一阵风吹来,一瞬间就感觉到了秋天的到来。这种感觉很难形容,有天地的开阔,有一丝清冷,有一丝细微的气味,有路上车辆鸣笛的声音,心底还有一阵阵的恐慌感,恍然间还有种与世界脱钩的感觉。回想一下,一年前,两年前,几年前,似乎一到秋天就都是这种感觉,总觉得有一些事情要发生了。

年复一年,年复一年。

焦虑

还有两年多我就三十岁了。

三十岁了,而立之年,一事无成。我想要的都没得到,从没得到过,而且随着年龄增加,随着一天天重复而不见一丝破局的光亮透进来,我想要的离我也越来越远了。

更年轻时,焦虑,但同时也有一种可以把责任推卸给未来的小小的轻松感。但现在不同,现在一边是焦虑,一边是一种自暴自弃的心态:我的人生已经是残次品了,后边过得好又如何呢,前边精彩的十年——对于那些活得值得人来说——已经没了,后边再好又如何呢——更何况后边也不一定会有多好。

我这几年近乎疯狂地读书,从一开始定位就很清晰:为了治焦虑。不得不说这是我给自己开出的最好的药方了,真的管用。但这个做法本质上只是阻断——阻断引发焦虑的神经递质的传递,而没有解决问题本身。读书是不解决实际问题的,泛泛地知道一些别人不知道的东西除了在社交场合 show off 以外无甚大用,还有可能招致别人的厌烦——人们大多是不喜欢比自己懂得多的人的。知道一些历史事件或古生物知识,也基本上跟知道奥特警备队的成员都是谁一样,或者跟知道小马宝莉稀有卡片一样,只是个纯粹的爱好,不解决任何问题。

未来到底在哪呢,眼下的生活模式,重复一年可以,三年五年也可以,那十年呢,二十年呢,真的等四五十岁再想起来抬头看时可就真的一点希望都没了。我不知道怎么过才能不后悔,但我知道这样过未来一定会后悔——这么过的话我甚至不愿去说未来这个词。

我并非在抱怨现在的生活,从一般意义上来讲,我现在的生活已经非常不错了,没有可抱怨的空间。但这种一般意义上的好对我来远远不够,我想要更多,我要更多的钱,我要更多的时间,我想成为 somebody,我想像桓温一样 “大丈夫不能流芳千古,就要遗臭万年”。

或许我真正的问题在于缺乏明确的生活目标,我不知道如何在飞速闪过时间中抽离出能编制成坚实记忆的线,只能眼见着时间像织机上的丝一样被抽走,一愣神的功夫一切都没了。时间就是构成我的全部,假如任由丝线被徒然地抽走,最后我也就归于虚无了。倘若一天天能过得值得记忆,我大概也就不会这么焦虑了吧。

说来有趣,突然想到一个物理学理论:时间和空间本质上是几何关系,三维的运动和时间都是一个四维向量的分量,其模为光速。这就意味着做的运动越多,速度越快,时间也就越慢。假如多做些选择,多折腾些东西,是不是就能抓住更多的时间了呢?

心很乱,似乎跟几年前相比仍然没什么长进,还是充满无力和迷茫,还是不知道怎么做,也没有魄力去做改变,瞻前顾后,犹疑不决,也无处倾诉,只能喟叹后该干嘛干嘛。我最喜欢的网络小说之一是《凡人修仙传》,原因之一就是韩立从不会这样,韩立一直都是独自前行的,韩立永远都有前进的办法,也永远都有前进的勇气,天道也没有辜负韩立。只是终究可惜,寿元所限,“修炼无岁月”对真正的凡人来说是一句太残忍的话了。

2024 年 08 月 06 号,01:08 于北京海淀

彩色的石头

记得之前峰哥和小乔有一期节目,里边小乔对于峰哥的一句评价我觉得非常准确:“峰哥是一个知道自己想要什么,并且知道要为之付出什么代价的人。”

这句话我一直记着,觉得可以用来评价每一个坚定活着的人。我的痛苦很大一部分来源于没有明确的生活目标,一边嫌弃“买房还贷结婚生子”是一种庸俗和沉沦的默认选项,认为这丝毫不值得期待,另一边又找不到要用什么选项来替代这一庸俗的默认值,活在夹缝中比无脑选择默认选项更悲哀。

我想了下,感觉还是可以给自己定一些目标的,我不适合为感情和牵连活着,那就为符号活着吧。我最近疯狂迷恋信用卡,办了很多,有实用的,也有办完就销卡的。信用卡其实就是一种符号,实际作用并不大,接送机和贵宾厅一般也就是最大的福利了,但卡本身像是游戏里的徽章或成就一样带给我不小的满足感和成就感。既然这是我喜欢的,那就以这个为目标吧,我想要各大银行的私行会员,我想要百夫长黑金,我想要中信无限,这是我想要的符号,我要为这些符号活着。

早些时候,19 年前后,我疯狂地喜欢跑车和豪宅,当然现在也是,这也是一种符号。在“人生赢家”们看来,这当然是悲哀和刻板的,但我没有选择,我也只能接受这种悲哀,像是被几块颜色鲜艳的石头吸引误以为是配偶的昆虫一样,机械地撞在石头上,无限重复直到不再动弹为止。

我知道自己在追寻彩色的石头,可我又能怎么办呢。我的人生是悲哀的,我无法在别处寻找到哪怕一丝丝的成就感,哪怕一丝丝的被需要感,我无法在别的人身上找到自己存在的意义,也只能寄情于符号了吧。我愿意当这只虫子,即使这样,能撞到彩色的石头也是我遥不可及的梦,但至少算是个目标了吧。

只有把符号当成目标,我才能告诉自己前十年没有浪费,大好的人生,没有浪费,不然我就没办法回望过去了。又有谁能救我呢。

刚看完午夜场的《抓娃娃》,明天一早就要赶去杭州的飞机,现在睡不着,姑且矫情几句吧。正好我的精粹白可以在萧山机场用,小小期待一下萧山机场的农行贵宾厅。像是鱼儿出水鳞片反射阳光,这是我一潭死水的人生中为数不多的值得期待的东西了吧。

2024.08.11 凌晨 01:07 于北京

P.S. 果然起晚了,早上被司机电话叫醒的。差点误机。

一种高效节能的室内换气策略

酷暑,下班回到住处总是同时打开空调和阳台窗户,但这样室内温度降低很慢。今日回来忽然灵光乍现,把分隔阳台的窗帘拉上,这样果然很快就有了凉意。

大致估算了一下,阳台面积占据总室内面积的 $\frac{1}{3}$ ,这样当阳台空气和室外空气交换充分之后再关上窗户,打开窗帘,整体的室内空气新鲜程度就达到了 $\frac{1}{3}$ ,如此往复三次,室内空气新鲜程度就达到了 $\frac{19}{27}$ ,基本上等同于室外新鲜空气的效果了。而且再考虑到窗帘并非严丝合缝,实际上的室内空气新鲜程度只会更高,且空调制冷效果基本不会受到影响。

闲语杂谈 | 公交卡的工作原理

这个问题困扰了我很久了——公交卡是怎么工作的,或者说在使用公交卡的过程中数据是怎么流动的?根据数据存储位置来看,无非是分为卡内存储和中心服务器存储,公交卡的实现究竟是哪一种呢?

正常角度来考虑,卡中的余额肯定是存储在中心服务器的,但根据现实情况来看,无论公交车行驶到多么偏僻的地方,也无论刷卡人数的多少,刷卡过程都是瞬间完成的,全市有这么多公交车,中心服务器能无视物理环境而提供如此顺畅的服务吗?更何况还有更复杂的单点操作,比如当两辆公交车相会于站牌时,一乘客在短时间内从一辆车换乘到另一辆车,并迅速刷卡的处理逻辑,这种事务性问题对于中心服务器来说也会比较头疼。

以北京市为例,根据北京交通发展研究院的数据显示[1],北京市无轨交通日均客运量为一千万人次左右,按照一天运营10小时来算,平均每秒钟的客运量为接近300人,也就是说所谓的中心服务器需要承载300QPS的请求并且做到瞬时响应,如果严格来考虑的话,其实乘客的时间大部分是用在了乘坐,用在刷卡这个行为上的时间会更短,这样一来QPS肯定更高,更不要说还有BUG级别的早晚高峰了。换句话说,如果公交系统真的是实时连接了一个中心服务器的话,那么这个服务器相当于需要撑起一个千万日活的应用,而公交系统已经存续了很多年,远早于移动互联网的时代,这么看来数据存储在中心服务器似乎不太可能。

那么数据单纯存储在卡中是否可行呢?似乎可以解释刷卡响应速度和事务性问题了,但是这样一来,肯定有人尝试修改数据薅点社会主义羊毛,也不能真正投入使用。肯定还是需要一个中心服务器,或者需要一个去中心化的公交车互联系统(这条区块链的Idea值500个亿,加智能合约值1000个亿)。如果使用反证法的话,假设数据只存储在卡片中,那么北京交通发展研究院就无从得知全市公交车的日均客运量,那么上一段就写不下去,也就不会写到这一段,既然写到了这一段,说明假设不成立,即数据不可能单纯存储在公交卡中。

如果想实现公交车刷卡系统的话,可能需要权宜之计,即把中心服务器分为两层,外层是将近三万个[1]计算节点(公交车以及用于充值的地铁站),内层是真正的中心服务器(这条边缘计算的Idea值500个亿,加上云计算值1000个亿)。乘客在刷卡的时候只和当前公交车进行数据交换,同时数据也存储在卡中。公交车等待网络良好的时段或者定时与中心服务器进行数据交换,以此保证乘客数据的可靠性。在这个系统中,如果乘客单方面修改了卡片中的数据,那么等合账的时候肯定能发现没有这笔交易记录,直接把钱扣掉即可,这样也就没办法薅羊毛了。

公交卡信息系统架构设想
(图1:公交卡信息系统架构设想)

这个系统似乎已经可以解决上述的问题了,那么回头再来考虑公交车刷卡的场景,有一种非常常见的情况:下车不刷卡。对于下车不刷卡的情况,车上的广播会说“下车不刷卡,下次刷卡时将扣除最远里程无折扣票价”,其实这个提示已经告诉我们原理了,下次刷卡时扣除,说明此时下车后并未发生扣费,如果以后再也不刷卡,可能也就永远不会发生扣费。这种情况不可能是中心服务器来管控的,一来公交车与中心服务器的通信做不到实时,那么下车后迅速跑到另一辆车上刷卡就无法做到“扣除最远里程无折扣票价”了,二来如果真的是中心服务器来控制,也不需要等到下次刷卡时才扣费。如果要解决这个问题,另一个猜想是公交卡中不止存放余额信息,还存放着若干标志位,这种情况下需要一个“休想薅羊毛”标志位,上车置1,下车置0,此外还存储本趟车的最高票价,如果上车刷卡时发现“休想薅羊毛”标志位是1,那么就先扣完上一辆车的钱,再开始本辆车的扣款流程。

还有另外一种情况,从比较大的时间粒度来看,余额信息肯定是以中心服务器为准的,那么如果卡内信息出现了错误,无论是薅羊毛还是被薅羊毛,中心服务器的数据是在何时写入卡中的呢?上车刷卡时肯定是以卡内数据为准的,因为公交车不能知道是哪张卡要上车而提前从服务器获取数据,就算能提前获取,也不能保证此次数据获取之后到乘客上车之前没有发生后续余额变动。那么是不是下车刷卡时写入的呢?也不是,如果乘客只在车上呆很短的时间,公交车也不能保证在这段时间内完成和中心服务器的数据交换。那么是不是在充值的时候呢?这样也不行,如果羊毛收割者修改公交卡余额到2147483647元,那么往后余生也没有充值的必要了,服务器只能干瞪眼干着急就是没办法。这种情况我想不到有什么好的解释,暂时留白。

在翻找数据的时候,发现银行中也存在类似公交卡的脱机消费,银行卡的安全性肯定比公交卡更高,其中应该是涉及了比以上假设解释复杂得多的过程,需要翻翻论文才能找到正经的解释了。关于IC卡的安全和脱机消费的真正原理就暂时不挖掘了,留个坑下次再写。

参考文献

[1]. 北京交通发展研究院. 2018年北京交通发展年报[EB/OL]. http://www.bjtrc.org.cn/InfoCenter/NewsAttach/2018%E5%B9%B4%E5%8C%97%E4%BA%AC%E4%BA%A4%E9%80%9A%E5%8F%91%E5%B1%95%E5%B9%B4%E6%8A%A5.pdf. 2019/2019-03-27

茶和牛奶

墙头雨细垂纤草,水面风回聚落花。

井放辘轳闲浸酒,笼开鹦鹉报煎茶。

床上躺了一下午,起身换衣服后准备去吃晚饭,转念一想又懒得去了,于是便用热牛奶冲了点玉米片应付一下,或许是饿了,冲好之后直接喝了一大口,被狠狠烫了一下。冒冒失失吃完之后,躺在椅子上端起一杯茶小口抿着,心里突然想到:“为何自己喝茶时能这么慢条斯理,但是喝牛奶时却么狼狈”,想来想去觉得是“无欲无求”四个字。在喝牛奶时是冲着其明确的价值去的,因此并不是为了喝牛奶而喝牛奶,于是喝的过程被简化和忽略了,进而缺少了一种仪式感,而仪式感带来的就是从容和优雅。

无怪乎古人爱饮茶。爱茶之人爱的不仅是茶的香沁,更爱的是饮茶时的淡然。今人面临着越来越快的世界和不断膨胀的欲望,很难实时保有无欲无求的心境,但人心总是会累的,因此偶尔忘掉世俗烦心事是非常重要的一种能力。无论生活如何,偷浮生半日,捧一杯香茗,小口品味,钟摆骤然慢了下来,心情也变得开阔和舒缓,于是轻轻放下茶杯,欣慰地夸上一句“真是好茶”,实乃人生一大快事。

繁事压身,聊作酸文。

关于新旧交替的历史进程

最近心里一直很闷。

最早要从我关注hanser说起,一年前关注了hanser,之后取关,一个多月前又关注了回来。然后对她喜欢的一发不可收拾,去翻遍了她的微博,然后了解到了鬼叔——神威鬼鸣。

看过2012年B站的拜年祭,鬼叔相当于那个时期的B站元老,无限风光,是创世神一般的存在。就在前几天,鬼叔在微博上发布了长微博,说是自己生活压力其实非常大,九月份已经确诊了抑郁症,之后不会再在B站活动。(2021年8月最新更新:鬼叔的B站账号已经被封,理由大概是古早时期的《千本幼女》)

仅仅四年的时间,一个时代已经过去了,从hanser的关注者开始,我用人肉深搜扒出了一大堆上古时期的B站大神,已知最早的是09年到13年一直活跃的河童子,MAD周刊排行榜创始人。对于他来说,鬼叔都只是个后辈。这批元老现在都几乎不在B站活动了(当然可能是充实的生活让他们脱离了这个精神寄托,这里我们就事论事),有些还是因为和B站创始人徐逸发生了矛盾被打压而后离开的。有些离开的人在优酷投稿播放量是B站十倍以上。他们是真的爱这个地方。

看着这一切,这其实没什么大不了的一切,我却生出了一种深深的历史空洞感。一个时代过去了,人心一致的辉煌时代过去了,仅仅是几年的时间。那么放眼这数千年的历史,类似大大小小的历史进程已经上演了无数次,每次一定都让相关的人大发感慨,然而现在的我们连一朵水花都看不到了。

正当我感慨生不逢时之时,我忽然明白了原因:我怀念B站的上古时代,就像我上边提到的诸位大神怀念A站一样,都是在无条件地怀念过去,他们或许看着A站曾经辉煌的痕迹也曾发出过与我类似的感叹。

看看的如今的B站,真的那么不堪吗?不是的,厉害的新人越来越多,高质量的投稿也越来越多—虽然低质量的更多—大家也都找到了适合自己的商业模式,努力向前。我在怀念过去时选择性无视了这一点而已。“这是最好的时代,也是最坏的时代”,我多少能理解一点这句话的意思了,或许意思不对,就当我断章取义了吧。

我现在多少能体会为什么孔子他老人家一直推崇周礼,也能理解为什么现在的人动不动就说人心不古我当年如何如何云云。都是对过去的怀念和对现在的选择性无视罢了。时代确实在一直变得更好,即使有很多需要着力矫正的畸形的地方,也不会阻挡历史的趋势。

把握当下。这是一句轻飘飘的话,高中作文娴熟地运用了无数次,而个中真意非亲身经历不能理解。我不敢说自己理解了,但是要好过从前。对过去的怀念有时源于没有掌控住现在,现在的我就是这种情况,只要把握住了现在,那么未来就可以感慨现在的我是生得恰逢其时了。

很惊讶我竟然能说出这种高浓度鸡汤。我一直很讨厌这种动动嘴皮子就把一切客观条件和主观意愿都视作无物的心灵毒药。然而在经历了一些事情之后,自己的心境确实会发生变化,这的确是成长的过程。

就当作是复习之余的矫情牢骚吧。

写在前面

因为一些原因,现在暂时停止了Android的学习,转向JavaWeb的学习。说是这样,其实我不论哪一样都没有真的学得透彻,顶多算是个入门。因为现在仍然处于迷茫期,不知道在研究生阶段结束后(目前大三)到底直接出去搬砖还是再去国外深造。但不管怎么说,毕竟专业相关,这些东西还是掌握的越多越好。

JavaWeb 之前是接触过一点的,不过也限于做一个大作业网站的程度。现在开始从零开始一点点地做,把过程记录在这里,用作日后的备忘。

这个专题准备一直写下去,不过一年之内可能做不了太多东西,因为现在得忙考研的事情。现在开始后悔前几年没好好学习净捣鼓编程上的东西了,并不是后悔方向错了,而是后悔即使这样也没做出什么东西来,所以还是有一点虚度光阴的感觉。

各种各样的框架、设计模式层出不穷,其实搞得我挺烦的。明明就是某个场景下的某个解决方案而已,但是总是想搞得老子天下第一(技术无罪,框架开发者无罪,但是某些框架的某些不明事理的“狂热支持者”着实烦人)。当然,我现在是看源码都费劲,水平确实非常次。所以准备拿住一个框架开始琢磨,准备从 spring 开始,把 Data JPA、MVC、Security 什么的都先了解了再说,然后再决定下一步的路。

说实话确实挺迷茫的,这样下去自己根本没有竞争力,只是这样是绝对不够的,不过还是得从这里起步,至于是不是涉足安全、智能或者VR的领域,等研究生阶段再做定论。

关于程序员的一点感想

对于一个作家,最重要的是能写出出色的文章,文章的水平如何,和作家用什么颜色、形状、粗细的笔来写没有任何关系。假如出现这么一幕场景:许多作家围坐在桌旁,口水飞溅地争论:

“英雄才是最好的笔!”

“瞎说!关勒铭才是最好的笔!”

“英雄笔在未来十年必将消亡的 10 个原因”

“新的写作模式,双手梅花篆字”

“怎么在一分钟之内写 300 个字——论英雄没有关勒铭流畅的原因”······

可以想象是个什么场景吗?

是的,我当然知道把程序员比做作家是牵强附会并不合适,但是一些(甚至可以说很多)程序员在讨论、在追求的都是用什么语言,用什么框架,有的人没有科班背景只是在培训机构培训了几个月(没有任何对培训机构偏见的意思)就出来加入了轰轰烈烈的”程序员讨论“中。

这样真的有意义吗?难道写代码真的要与语言、框架绑定在一起吗?你是学 Java 的,让你写 Python 你就可以说自己不是程序员了吗?程序员从何时开始这么廉价了?语言、框架(以及目前各种 Mxx 设计模式)对于程序员不就像笔对于作家一样只是工具而已吗?为什么作家要被笔束缚?为什么程序员要被语言、框架束缚?

程序员应该是骄傲的作家,不应该沦落为体力劳动者,如果你是后者,请不要,至少不要在我面前说你自己是个程序员!