技术部的门虚掩着,门缝里透出一线白光。
苏小暖在门口停了一步,用指节在门板上叩了两下。没有回应。她又叩了两下,力度比第一次大了半寸。门缝里传出一个声音,语速很快,每个字之间的间隔短得像被压扁了:“门没锁,自己推,我手上有胶。”
苏小暖推开门的时候,看到了一幅不太常见的画面。
陆晨曦坐在操作台前面的转椅上,双马尾一左一右搭在肩头,左边那根的发圈松了半圈,橡皮筋滑到耳垂下方的位置,右边那根还是紧的,两边的马尾高低差比平时多了一指宽。白色实验服套在连帽卫衣外面,卫衣的帽子没有塞进领口里,帽兜鼓鼓囊囊地堆在后颈的位置,把实验服的后领顶出一个不规则的突起。实验服的袖口卷到小臂中段,露出一截细瘦的腕骨,左手腕内侧有一道被键盘边缘磨出的淡红色印痕。鼻梁上架着那副细黑框眼镜,镜片左上角的那道细划痕在屏幕光下格外清楚,像一条干涸的河道。
她的双手没有放在键盘上。右手食指和拇指之间捏着一小管透明的胶水,左手掌心里托着一块指甲盖大小的黑色塑料片,塑料片的边缘有一道新鲜的断口,断口的截面泛着灰白色的毛边。她正在把那块塑料片往键盘旁边的一个小支架上粘,胶水挤出来的时候手抖了一下,一滴胶水落在食指指腹上,她低头看了一眼,没有擦,继续粘。
“你在修什么。”
“代码把USb接口的塑料挡板咬碎了。”
苏小暖走近了几步,看到键盘旁边那个小支架上确实有一个USb接口的位置空着,金属触片裸露在外,旁边散着几粒黑色的塑料碎屑。操作台角落里蹲着一只灰白色的猫,体型不大,尾巴盘在爪子上,耳朵尖有一小撮黑毛,正用一种事不关己的表情盯着屏幕上跳动的光标。猫脖子上系着一根红色细绳,绳子上挂着一颗指甲盖大小的铃铛,铃铛是哑光的,摇起来不响。
“你养猫了。”
“代码自己跑到技术部门口的。我喂了它一次,第二天它抓了一只老鼠放在我键盘上。我觉得它在交房租。”
陆晨曦把塑料片粘好,用指尖按了按边缘,确认牢固之后松开手,把胶水管拧上盖子,扔进笔筒里。然后她转过身来,面对着苏小暖。转椅的轮子在地砖上滚了半圈,发出“吱”的一声。
苏小暖站在操作台侧面,雾霾蓝真丝衬衫的温莎结还卡在锁骨正中间,丝巾尾端垂在胸前,纹丝不乱。她看着陆晨曦,没有绕弯子。
“举报信是你发的。”
陆晨曦把眼镜摘下来,用实验服的衣角擦了擦镜片,然后重新戴上。镜框在她鼻梁上留下了两个浅浅的凹痕,凹痕的皮肤颜色比周围略浅,是常年戴眼镜压出来的。
“是我发的。”
“你没有跟任何人说。”
“没有。”
“为什么。”
陆晨曦从转椅上站起来,走到操作台另一侧,那里有一台联网的笔记本电脑,屏幕亮着,上面是一张复杂的网络拓扑图。图上的节点用不同颜色的圆圈标出来,连线是细白色的,从中心向四周辐射。她伸手在触摸板上点了一下,拓扑图放大,中心节点“观镜文化”周围的连线变得清晰起来,其中三条线分别指向“深镜科技模型服务器”、“加密邮箱备份节点”、以及“远山资本旧档案”。
“周远航以为他能在旧地址重建远山资本,但他不知道深镜科技的服务器在收购前就已经被我做了标记。”
她的手指在屏幕上画了一条线,从观镜文化的节点延伸到深镜科技模型服务器的节点。
“他让沈知远用那套模型处理任何一张脸,处理后的文件里都会带有隐形水印。水印不会被肉眼看到,但用我们自己的检测工具扫一遍就会显形。这个水印的编码逻辑是深镜科技在v2.3版本里内置的,他们没有在公开版本里启用,但内部版本里一直有。我收购的时候把内部版本的编码逻辑保留了。”
苏小暖的目光从拓扑图上移开,落在陆晨曦脸上。
“你在收购之前就知道他们会用这套模型。”
“对。林瀚决定收购深镜科技的时候,我就想好了后门要怎么留。收购合同里有一条条款,要求深镜科技交出所有版本的技术文档,包括内部测试版。周远航不知道这个条款的存在,因为签合同的时候他已经从远山资本离职了。他以为他拿到的还是公开版本,但实际上沈知远在机房里操作的每一个文件,都在我们的监控范围内。”
陆晨曦走到操作台前面,把那只灰白色的猫从键盘上抱起来,放在肩膀上。猫在她肩头蹲稳,尾巴从左边垂下来,搭在实验服的袖子上,耳朵尖的黑毛蹭着她的耳垂。她伸手在键盘上敲了一串命令,屏幕上弹出一个日志文件,密密麻麻的记录铺满了整个窗口。
“沈知远在观镜机房里调用了十七次模型。其中五次输入了赵晓月的人脸数据,三次输入了苏雨晴的走廊监控截图,两次输入了周远航自己的照片用来测试模型稳定性,剩下七次是空跑——他在校验模型的输出偏差。这个人的技术不差,他在深镜科技做标注组的时候,标注准确率是百分之九十九点七。”
苏小暖把目光从日志文件上收回来。
“所以你发举报信的时候,已经确认了他操作的内容和调用的记录。”
“确认了。举报信里附了完整的调用日志、周远航的加密邮箱备份密钥、以及沈知远在航天城检修口的维护登记记录。网信办只要打开观镜的服务器比对一下,就能确认举报属实。”
陆晨曦敲了一下回车键,日志文件关掉,屏幕回到桌面。桌面背景是一张非遗基地银杏树的照片,夏天拍的,叶子绿得发亮,树下面蹲着一个人影,背影很小,只能看到灰色的卫衣帽子和马尾辫的轮廓。
“我发举报信的时候没有告诉林瀚,因为这件事已经不需要他亲自处理了。他已经替那道被换掉的脸完成了它的轮廓,剩下的部分应该由技术来完成。”
苏小暖站在操作台侧面,双手垂在身侧。她的目光在陆晨曦脸上停了一会儿,然后移到那只灰白色的猫身上。猫在陆晨曦肩头蹲着,尾巴从实验服的袖子上垂下来,末端的毛微微卷曲。猫的眼睛半眯着,瞳孔在屏幕光下缩成一条细线。
“你平时写代码之前都会问我,要不要加这个功能,要不要留那个接口。这次你什么都没问。”
陆晨曦把猫从肩上抱下来,放进操作台角落的一个纸箱里。纸箱里垫着一件旧卫衣,灰色的,袖口磨出了毛边。猫在卫衣上转了两圈,蜷成一团,尾巴搭在鼻子上。
“因为这次不是加功能。这次是决定什么时候启动一个已经存在的功能。后门是我留的,启动权限在我手里。林瀚说过会用,我就留了。什么时候用,我可以在任何时候决定,不需要提前告诉他。”
她把纸箱往操作台里面推了推,然后转过身来,面对着苏小暖。她的站姿很直,双马尾在肩头轻轻晃动,左边那根的发圈已经滑到了耳垂下方,头发散开了几缕,贴在她颈侧。她的脸被屏幕光照得很清楚,下巴尖而短,颧骨不高,面颊带着年轻女孩特有的饱满弧度,皮肤是久坐机房之后那种缺乏日照的白。镜片后面的眼睛很大,瞳仁是深褐色的,虹膜边缘有一圈浅浅的琥珀色。
“苏小暖姐,你是不是觉得我越权了。”
苏小暖摇了摇头。
“林总说,那道后门的用途不是被决定好的,是被等待的。你等到了周远航登录加密邮箱的那个凌晨,然后你做了决定。你没有越权,你只是比你平时更敢做一些。”
陆晨曦的嘴角微微动了一下,幅度很小,但苏小暖看到了。
苏小暖把这段对话转述给林瀚时,已经是傍晚了。她站在办公桌对面,雾霾蓝衬衫的温莎结还卡在锁骨正中间,丝巾尾端垂在胸前,纹丝不乱。但她的站姿比下午放松了一些,重心落回左脚,肩膀的线条没有下午那么绷。
林瀚听完之后,没有评价,只是说:“她在技术部里留了一道收口。那道收口不需要通过任何人来确认,因为它已经在她写代码的时候被完成了。”
他转过身来,拿起桌角那杯已经凉透的薄荷绿茶,喝了一口。茶是赵晓月昨天泡的,薄荷的凉意还在,绿茶的涩味更重了。他把杯子放回桌面右上角,和那排文件对齐。
“她做那道后门的时候问过我一句话——‘如果有一天需要追踪那套模型,你会不会用。’我说会。她说‘那我留一道’。她没有告诉我什么时候启动,因为那道后门的用途不是被决定好的,是被等待的。”
苏小暖站在那里,看着他把那杯凉茶喝完了。她没有说话,只是微微点了一下头,然后转身走向门口。走到门边的时候她停下来,侧过头。
“林总,陆晨曦的猫叫代码。它今天早上抓了一只老鼠放在键盘上。”
林瀚把茶杯放下,嘴角微微动了一下。
“那只老鼠是从哪儿来的。”
“技术部后面的杂物间。陆晨曦说代码在帮她清理机房的零食。”
苏小暖推开门走了。高跟鞋踩在走廊地砖上的声音渐渐远去,节奏均匀,鞋跟和地面之间的摩擦声很轻,像是被什么东西吸收了。
林瀚坐在椅子里,把桌面上的手机拿起来,翻到陆晨曦的对话框。最后一条消息还是今天早上那条关于周远航Ip的汇报。他打了一行字:“代码今天抓的老鼠,是你喂的还是它自己抓的。”
陆晨曦的回复在十秒后过来:“它自己抓的。我给它买了猫粮,它不吃,非要抓老鼠。我觉得它在嫌弃我的猫粮太便宜。”
林瀚打字:“明天让食堂给它煮一条鱼。”
陆晨曦:“不用。它刚才把老鼠放在我键盘上之后,又跑去杂物间了。我怀疑它想再抓一只给我当房租。”
林瀚看着屏幕上那行字,把手机放在桌面上,锁屏。屏幕暗下去,映出他自己的脸。他站起来走到窗前,拉开窗帘。院子里的银杏树在暮色里只剩一道深色的轮廓,枝丫光秃秃的,一片叶子都没有。树根旁边那片泥土上的白色石子还安静地待着,嫩芽在夜风里轻轻晃动,叶片上的锯齿纹路被路灯照出模糊的边缘。
他看了一会儿,然后拉上窗帘,回到办公桌前坐下。抽屉最底层,七样东西并排放着。他拉开抽屉看了一眼,锁好。钥匙从锁孔里拔出来,放回西装内袋。
窗外非遗基地方向传来夏丽蝶的拍手声,节奏比昨天慢了一些,可能是孩子们放学了,她在收拾场地。拍手声间隙里混着刘仙仙工作室里传来的钢琴声,林悦在练一段新的旋律,音符断断续续,但每一遍都在同一个地方停一下,像是在等什么。
林瀚翻开桌面上的《星途影城二期预算表》,把目光落在下一行数字上。台灯的光圈里,桌面右上角那排文件边缘对齐,间距一致。那只空了的茶杯旁边,放着一颗赵晓月昨天留下的太妃糖,糖纸是透明的玻璃纸,里面包着一颗棕色的糖。他把糖拿起来,剥开糖纸,放进嘴里。太妃糖的甜味在舌头上化开,和薄荷绿茶的余涩撞在一起,变成一种说不上来的味道。
他把糖纸折成一个小方块,放在文件架上,和那排文件的边缘对齐。糖纸在灯光下泛着透明的光,折痕处有细碎的虹彩。
福利回放:陆晨曦(技术部操作台前)
她坐在转椅上的时候,白色实验服的下摆从椅面两侧垂下来,盖住了大腿中段以上的部分,只露出膝盖以下的小腿和脚踝。牛仔裤的裤脚塞在一双黑色高帮帆布鞋里,鞋带系得不对称,左脚比右脚多绕了一圈。实验服的面料在屏幕光下泛着一层极淡的冷白,从肩线到腰侧的过渡被直筒剪裁遮住了大半,但从侧面能看到腰线的轮廓在布料下隐约起伏。卫衣的帽子堆在后颈的位置,帽兜的边缘蹭着她的下颌线,露出一截脖颈,皮肤在冷光里泛着近乎透明的白,能看到淡青色的血管走向。
她弯腰粘塑料片的时候,实验服的前襟垂下来,露出一小截灰色的卫衣下摆,卫衣的螺纹收口贴在牛仔裤的腰线上,腰身的弧度被坐姿微微下拉,后腰处露出一线皮肤,被实验服的后摆遮住了大半,只在扭动身体的时候若隐若现。她的双手在操作台上移动得很灵活,手指细而长,指节不突出,指甲修剪得很短,甲床是淡淡的粉色。食指指腹上那滴胶水已经干了,在灯光下泛着一小片透明的光。
她把猫从键盘上抱起来的时候,手臂内侧的肌肉微微绷紧,实验服的袖口从手腕上滑下来,堆在小臂中段的位置,露出一整截前臂。前臂的线条细而直,皮肤薄而透光,肘关节内侧有一小块颜色略深的茧,是常年托着笔记本电脑看代码磨出来的。猫蹲在她肩头的时候,她的肩膀往一侧微微倾斜,重心落在右腿上,左腿放松,胯部往一侧偏了半寸,实验服的下摆被这个动作带起来一角,露出牛仔裤包裹下的胯骨轮廓,弧度柔和而清晰。
她站起来走到联网电脑前的时候,双马尾在背后甩出一个弧线,发尾扫过实验服后背的布料,留下一道转瞬即逝的静电痕迹。右边那根马尾的发圈突然绷断,橡皮筋弹到地上,头发散开来,垂在肩头和后背上。她没有立刻去捡,只是伸手把散开的头发拢到耳后,露出完整的侧脸。耳廓的线条从正面看很清楚,耳垂上没有耳洞,耳后的皮肤有一小片被发圈勒出的淡红色印痕,印痕的边缘在慢慢消退。
福利回放:代码(技术部的猫)
它蹲在操作台角落的纸箱里,灰白色的毛在屏幕冷光下泛着一层极淡的银。体型不大,蹲着的时候脊背弓出一道柔和的弧线,从后颈到尾根,弧度流畅而饱满。尾巴盘在爪子上,末端的毛微微卷曲,尖端有一小撮黑毛,和耳朵尖的黑毛呼应。瞳孔在屏幕光下缩成一条细线,虹膜的颜色是琥珀色的,边缘有一圈极淡的绿。
它从纸箱里站起来的时候,前腿先伸了一个懒腰,脊背往下压,臀部往上抬,尾巴翘起来在空中画了一个圈。毛从肩胛到腰窝的位置有一道浅浅的分界线,是常年蜷缩睡觉留下的痕迹。它跳到键盘上,爪子在键帽上踩了一串乱码,然后蹲在键盘正中间,尾巴从键盘边缘垂下来,末端的毛扫过操作台的金属表面,带起一阵极轻的静电。它歪头看了一眼屏幕上的光标,伸爪去碰,爪子按在屏幕上,留下一个梅花形状的油印。然后它跳下键盘,跑向杂物间的方向,尾巴在空中画了一条直线,末端的黑毛在门口的光里闪了一下。