R·ex / Zeng


音游狗、安全狗、攻城狮、业余设计师、段子手、苦学日语的少年。 MUGer, hacker, developer, amateur UI designer, punster, Japanese learner.

【恐怖小说】被双向绑定的生活

注意:本文发布于 1057 天前,文章中的一些内容可能已经过时。

本故事部分片段取材于日常生活,故事本身完全虚构,与现实中的任何人或事均没有任何联系。

“Vue 用的是 Getter 和 Setter,Angular 跟它是不一样的!”

“我要干什么来着?……哦对,这个地方的数据绑定错了。”我无奈地摇了摇头。

我是一名计算机学院的学生,也是南航纸飞机曾经的主任。从学生组织退休到离校的这一年时间里,我一直占据着纸飞机办公室的一个小角落,每天在键盘上啪啪啪(写代码而已,别想歪哦)。我的面前有三个柜子,如果我坐在椅子上不出声,可能进来的人都不会看到我。这有一个好处,就是当锁上门时,可以避免被各种来借物资、修电脑的同学打扰。隔壁多功能厅的隔音板也刚装修完,墙上有一扇开不了的门,装修的工人没法装隔音板,但是我用四块 KT 板把门堵了一下,于是也不怕里面的社团排练时吵到我啦!总之,一切似乎都那么完美。

唯一有点不爽的是:最近的事情太多啦!毕设、公司的任务、自己的项目……于是晚上修仙和睡办公室就成了我的常态。有时候,其他的同学也会来这里一起修仙。对于写代码的同学,如果遇到了非常棘手的问题,我就会去帮个忙,毕竟这既可以帮助他人,又可以提升自己读代码的水平。

但是从前天开始,事情似乎变得很奇怪,因为我总是忘记自己该干什么。例如刚才,刚从浏览器切回编辑器,我就忘了自己接下来的任务。还好,今天的工作马上就做完了,明天去看一看心理医生好了,说不定是最近高强度的工作对我有了什么影响呢。

随着终端里的一句“git push”,几百行的修改瞬间被推到了服务器上。关灯,睡觉。

“您好……”

我敲开了心理咨询室的大门。里面的布置很整洁:角落里是一张办公桌,一把椅子,门口有两个供一人坐的沙发和一个茶几,浅绿色的墙壁反射着柔和的灯光。而坐在椅子上的人,看起来跟想象中的心理医生差距有点大,更像是一个普通的老师。

“老师您好,我有点事情,想跟您聊一聊……”

“不用这么紧张,我才三十几,我们年龄差还不到百分之五十呢,算是同一代人了,你可以随便聊。”

老师,您是在逗我吗……

不过老师看起来很平易近人,于是我逐渐放松了下来,开始了自己人生中的第一次心理辅导。

“老师再见!”

我轻轻地带上了门。在刚刚的一个小时里,我被直接或间接地许多问题,包括学习压力(我已经没有课了啊)、与同学的关系(一直很和谐)、作息(任务多啊当然不规律不过有什么联系呢)、饮食习惯(什么鬼?!)等各种方面。说实话,除了感觉倾诉了好多东西以外,并没有什么实质性的帮助。老师说我只是盯着屏幕太久了,就像“语义饱和”一样,大脑因为接受重复的刺激而产生了疲惫。只要注意休息,在发现自己忘了什么事情的时候转移一下注意力就好了。

晚上,我又感觉自己忘了点什么,但是不管我怎么转移注意力,在重新看到屏幕后,都想不起来自己本来是打算删掉调试用的日志代码了,直到第二天早上的垂死病中惊坐起。

日子过的飞快,马上就要毕业了,我能跟平儿天天腻在一起的机会越来越少了。事实上,因为平儿的事情也非常多,所以我们现在的大部分时间其实还是在线上度过的。不过有时候,平儿会扔出一些让我不知所措的话题,例如:

“最近总感觉自己好笨,总是忘记该干什么。”

等等?我不是也一样吗?难道这个还能在情侣之间传染?

“摸摸头~我也有这种感觉,可能是最近事情太多了吧,别把自己累坏了啊。”

说是这么说,但我连自己的问题都解决不了,该怎么帮平儿解决呢?只能先想办法让她睡觉啦,毕竟早睡早起肯定比现在的作息要好,妹子长期凌晨还不睡据说是会让胸变小的……于是在聊了几页之后:

“宝贝晚安!我去后街买清补凉啦,么么哒~!?”

“晚安,你也早点休息?”

虽然困意涌了上来,但由于明天需要交毕设论文的初稿,因此我还是洗了把脸,跟一同修仙的小伙伴奔向了后街。

“今晚吃什么啊?”猴子一脸诡异地笑着说。

“烤冷面!”“……”

“炸串!”“……”

“清补凉!”“嗯……”

“一大瓶可乐!”“住嘴!”

猴子在下定要减肥的决心之后,对可乐这个词就特别敏感。算了,以后还是不拿这个刺激他了。

来到了烤冷面的摊位前。“加什么?”烤冷面的大叔热情地问道。今天我索性换一个口味好啦!“我要加里脊,酸甜口味,洋葱香菜都要。”我说完就拿出了手机,开始刷空间。

一抬头,锅里多了一片里脊和一片培根,大叔正在熟练地往培根上面撒香菜。这不科学!在我印象中,猴子一直是不放香菜的。“咦,我刚才加的是啥……里脊?”

“培根啊,你穿越了吧?你看培根上放了香菜,我一直是不吃香菜的。”

“What the f……?”

我跟猴子讨论了很久这个话题,因为我明确地记得我之前每次都要的培根(不管是哪个摊位,曾经跟另一个摊位的小哥聊天,他提到他们家培根的质量很好),今天想换口味,所以点的是里脊。但是猴子和大叔同时听错的概率实在是太低,因此我不得不怀疑自己。不过还好,加里脊和加培根都是七块钱,而且我也很喜欢吃培根,于是还是提起塑料袋,跟猴子回办公室了。毕竟,图表绘制的相关代码我还没写完呢。

我们聊着聊着,聊到了 Vue 的一些反人类的设定,例如 this,我一直觉得,如果要兼容 ES5 的话,学一学 Angular 用 scope 会更好一点。话说 Vue 的数据绑定方式真奇怪,有时候就必须使用 $set,不能自动添加监视。我尝试 Patch 了一个晚上,最后还是失败了。果然,我还是没有那种可以挑战 EvanYou 大神的实力啊。

毕设检查暂时先混过去了,我又把精力转向了 Coding。刚刚被换到另一个组的我,感觉除了 CSS 和 React,其它的都要重新学起。于是经历了从傍晚开始五个小时的艰苦奋斗,我又来到了后街。

“嗯?……”

为什么清补凉的摊点会有两只妹子在干活?而且老板又跑哪儿去了……无意间一抬头,看到上面写的“招兼职”,大概明白了什么,估计今晚老板不会来了吧。

说到我为什么对老板这么执念,不得不提起两周前的那个晚上,我跟猴子惯例去后街买清补凉时发生的事情。在清补凉做好之前,我们跟老板有一句没一句地闲聊。我们无意间说出了自己的专业,老板听到“计算机”三个字,突然抬起了头,说自己也是学计算机的,很早之前毕业了,只是不是在南航罢了。临走的时候,还跟我们讨论起了 FIFO(队列)的问题。

俗话说的好,老乡见老乡,两眼泪汪汪。程序员无意间发现了另一个程序员,那可是激动的无以言表。现在去后街,别的都可以不买,但是那儿的清补凉一定要来上一碗。不知道为什么,总觉得这东西可以提神,就跟我高中时期的阿华田一样。

但是同时也有一个大大的疑问:老板看起来还算比较年轻,而且也算有点技术,为什么会在后街这种地方摆摊呢?

办公室这一片的事物变得越来越奇怪了。我记得最清楚的几件事有:

  1. 半夜的时候,隔壁多功能厅有时候会响起一段钢琴声或者是一两声架子鼓;
  2. 凌晨从后街回到艺术中心,上楼的时候,无意间在楼梯间瞥见了两个人影,看起来像一个汉子和一个妹子;
  3. 半夜写代码的时候,楼下突然传来单独的一只狗的叫声,持续了得有五分钟,听起来攻击性十足;
  4. 写完代码关灯躺在沙发上的时候,首先发现左边墙上挂的五六个相框开始移动和变形,然后在用来堵门的 KT 板上隐隐约约看出来了人脸,当我仰面朝天的时候,天花板砖构成的方格也开始经历 (x, y) => (1/x, 1/y) 的坐标轴变换——中心的区域被无限伸展外翻,四周本来广阔的空间立即被挤了进来。

所有的这一切感觉,都让我觉得很不舒服。我小的时候,闭上眼睛就会陷入幻觉,眼前会出现许多变换的图形,可以听到一些神奇的声音,但那种闭着眼的感觉是很愉悦的,而现在,则是亲眼看着、亲耳听着这一切。不过我还不能逃离这个地方,因为有无尽的任务要做。罢了,我的内心也是有阴暗面的,这儿就算有鬼,也会被我的阴暗面吓到吧。

窗外的风声始终停不下来,不过还好我比较容易入睡。闭上眼睛,脑子过滤掉外面的声音,晚安世界。

今天猴子破天荒地没有一起修仙,于是我一个人来到了后街。

“最近你来的很晚啊。”老板一边往碗里装配料,一边跟我聊天。

“是啊,最近事情比较多。”自从知道老板是程序员之后,我就特别想跟他说点什么。不如先聊一下日常好了。“我估计最近要一直这个点来了,你大概什么时候摆摊啊?”

“下午五点开始,其实应该早就结束的,但是一直有人来买,刚收进去的材料就又要拿出来,就到这么晚了。”

“我事情也挺多的。我现在在写毕设,过一阵还要帮忙给校内的信息安全竞赛出点题。”

老板似乎很感兴趣:“信息安全竞赛?是思科的认证考试那样的吗?”

老板为什么会知道这个?!

“不是啦,我们还没有搞到这么底层的东西,更多还是应用层,例如数据库注入啊,反编译啊之类的。”

“记得之前有个病毒用了各种方法来绕过反编译,就从这代码复杂度、专业度和对错误的处理上来讲,肯定不是一个简单的个人作品。”

后来我们又谈到了前一阵刚爆出来的大新闻——方程式泄露出来的一大批零日漏洞。通过聊天,感觉这个老板并不简单。我把这段经历发到了空间,周围的同学清一色的回复都是“隐约感觉不妙”……

不过老板的那句“下午五点开始”吸引到了我。我越来越相信这个猜想:老板在日常生活中是不是有一份很好的工作,然后为了体验学生的生活,早早下班后就来后街摆摊,招兼职也是为了更贴近学生,不然只是一个小摊为什么兼职的薪水并没有特别低,不对,只是一个小摊而已,为什么要招兼职啊!

“所以从外面是没法访问里面的 data 了?”“废话……不然模块化是干什么吃的?”

总是被问到很低级的问题,我也很无奈啊。关键是这个之前培训就讲过的……

“那 Vue 的双向数据绑定为什么不能绑定 window 的东西?”

我愣了一下,没想到有人会有这样的需求。但是毕竟我也是学了两周 Vue 的人了,不虚!于是我想了想,慢慢解释了起来:“Vue 双向绑定的原理是使用了 getter 和 setter,这就要求你明确列出需要监听的变量和属性。默认情况下,只有 data 是被监听的,data 就像个结界,里面的数据怎么变化都不会引发外界的反应,除非你用 event bus 或者传进来一个外部的东西来打破这个结界。”

不得不说,有时候答疑是很有乐趣的,但是碰上一些奇怪的问题,我就会没大有耐心了,例如刚才那个问题的升级版:

“那为什么 Angular 就可以?”

“Vue 用的是 Getter 和 Setter,Angular 跟它是不一样的!Angular 用的是循环 digest,监听了每个出现过的变量和属性!这么慢的东西再不行,谁还去用它。”

又过了一段时间,又发了几次彪,终于清静了。其实我挺佩服那个同学的,心理素质一定特别强。

咦,我之前要干什么来着?完了这次真想不起来了,还是先回宿舍吧。

今天深夜,办公室里又是只有我一个人。为了专心,我关了灯,戴上了耳机,争取不被周围的事物影响。然而,在修复下拉菜单的 BUG 时,我突然感觉到了哪里不对劲,猛然从座位上站了起来,绕过桌子和面前的柜子,发现了办公室的台式机前面有一个人影,佝偻着身子,一声不吭,一动不动,键盘声音噼里啪啦。显示器上显示的,则是一行行的代码。

结合之前一阵的经历,我有点方,难不成办公室真的闹鬼?!

但是我是不信鬼也不怕鬼的,于是小心翼翼地保持距离绕到了人影的侧面,借着屏幕的亮光,发现与其说是人影,不如说是衣服——眼睛的位置上是一副眼镜,上半身的位置上,黑色的短袖上用很明显的白字写着“I hack therefore I am”,下半身的位置上则是一条黑色短裤……等等,这身衣服怎么这么眼熟……?

这难道是另一个我?!

我赶忙开了灯,但是随着房间亮起来,那个人影,不,那身衣服,瞬间消失了。显示屏和台式机也都是关着的。

我赶忙打开了台式机检查,一切正常。

经过上次的事情,我不太敢继续在办公室修仙了。但是我对清补凉已经依赖到极致了,于是又拉着另一个同学来到了后街。只看到之前的那两只妹子,老板又不在。但是当我们要走的时候,老板突然拿着一提香蕉、一盒切片的菠萝过来了,紧接着递给了我俩一人一根香蕉。

“今天居然有新东西?”我一直以为清补凉的配料是固定的。

“是啊,今天的人太多,好多东西都卖完了,先用这些替上。”老板似乎并不在意这个,“再说,有时候总得跳出这个限制啊。”

我平时是个不怎么注意语言细节的人,但是这次我居然觉得老板话里有话。不管这是事实,还是只是我的臆想,老板就是一个很厉害的程序员,而且他已经知道了我的经历,刚才他用这句话来提醒我,我或者我的某一部分被困在了一个地方,需要想办法跳出来。

十一

我躺在宿舍的床上想了半天,发现了一个不愿接受的事实:我刚好被夹在菜鸟与大佬之间,没有了菜鸟的那种懵懂无知,但是又没有达到大佬的水准,只能不断通过修仙来麻痹自己,直到出现了各种可怕的幻觉。

可能我一直向往的,就是清补凉老板那样的生活吧。但是首先,我得有这个实力。

我逐渐减少了修仙的次数,不再疯狂地追求代码量,而是更多地把时间放在对新技术的研究上。

我逐渐找回了自己应有的状态,并利用闲暇时间,将自己的经历写成了恐怖小说。如果发到我的网站上,看到的人可能会或多或少有点收益吧。我微微一笑,闭上了眼睛,晚安世界。


第二天早上,我看到电脑屏幕上显示的,依旧是我网站的文章编辑器,光标还在有节奏地闪烁着。我本能地点击了“发布”按钮。“一切终于恢复正轨了。”我打了个哈欠,然后打开了自己的小项目。“上次下拉菜单的 BUG 居然拖到了现在,毕设也太占时间了。开搞!”

接下来发生的事情让我瞬间毛骨悚然:那个下拉菜单的代码,正是那天晚上我看到的“我”写出来的那段代码;执行“npm run build”,全程没有报错……

“这是什么情况?!我……”

(全文完。)

版权声明:除文章开头有特殊声明的情况外,所有文章均可在遵从 CC BY 4.0 协议的情况下转载。
上一篇: CSS 中关于 overflow 的限制和绕过方法
下一篇: 使用 PhantomJS 来实现 CTF 中的 XSS 题目

这是我们共同度过的

第 1591 天