下一章 上一章 目录 设置
40、遗嘱,或说是灾难备份 她真的不是 ...
-
Vital意识到事情不对劲的时候,是早上八点半。他前一天晚上十二点多就睡了——无人码头二期硬件部署方案刚交上去,连续熬了几个大夜,昨晚终于把最后一个存储节点的兼容性问题解决掉,回到公寓冲了个澡,头发都没吹干就栽进枕头里,一觉睡到天亮,连梦都没做一个。
醒来第一件事是摸手机。屏幕亮起来,通知栏里躺着几条消息——技术中心群聊里有人在讨论新到的FPGA开发板,莫妮卡发了一封关于Puls季度报告的邮件,还有几个供应商的未接来电。他一条一条划过去,然后停住了。
佐伊的手环离线了。不是“数据同步延迟”那种离线,不是“蓝牙断开”那种离线,是设备本身被从手腕上摘下来了——心率曲线在凌晨三点四十七分戛然而止,变成一条灰色的虚线,一直延伸到屏幕最右端,像一条走到悬崖边突然消失的路。他盯着那条灰色的虚线看了几秒钟。手环是他带着穿戴设备小团队手搓出来的。他知道这条线意味着什么——不是没电了,没电会有最后一条低电量推送;不是信号断了,信号断了数据会暂存在本地。是有人把腕带扣解开了。佐伊从来不解那个手环。洗澡戴着,睡觉戴着,出差爬塔吊戴着,在荷兰跟供应商开会戴着,充电的时候都只是把手搁在无线充电底座上,不妨碍她继续打字。安东尼让她调阈值的时候她讨价还价到117,但她从来不解。
他退出监控界面,打开邮箱。手指划了一下屏幕,未读邮件列表从上往下滑。供应商的确认函、技术中心的周报、一封来自荷兰的会议邀请——然后他看见了。发件人Z.Prince@BeaconCare.co.uk。时间,03:15。标题——没有标题。
Vital点开那封邮件的时候手指是稳的,但他能听见自己的心跳,在安静的公寓里,砰砰砰砰,像有人在他耳膜上敲鼓。
邮件没有正文。一个字都没有。只有两个附件。第一个是一个密钥集——码头系统核心代码备份,她一个人扛了两年多的那套调度算法,从底层数学模型到上层接口协议,每一行代码的访问权限,每一个节点的加密证书,全部打包成一个文件。第二个是一个BeaconCare预警系统的管理员账号——不是她平时用的那个,是另一个,权限更高,高到可以修改系统底层的阈值参数,高到可以把整个预警逻辑关掉再重启。Vital盯着屏幕,拇指悬在手机上方,一动不动。
邮件没头没尾,像是早就写好了,放在草稿箱里,隔一段时间更新一次,把最新的代码版本替换进去,把最新的权限配置更新一遍,然后在某一个凌晨,在某个需要做出决定的时刻,点了个发送。
他几乎一瞬间醒了——不是从睡眠里醒过来,是从一种“以为一切都很完美”的错觉里醒过来。
他拨了安东尼的电话。忙音。不是“正在通话中”的那种忙音,是响了几声之后被按掉的那种忙音。他又拨佐伊的。关机——不是手机关机的那种关机,是拨过去直接转语音信箱的那种关机。
他从床上弹起来。牛仔裤套上,T恤套上,袜子穿了一只,另一只找不到了,光着那只脚踩进运动鞋里。帆布袋——他的帆布袋永远在门口鞋柜上,里面装着充电宝、备用手机、手冲壶和咖啡豆,他一把抄起来甩到肩上,拉开门冲出去。走廊里的声控灯被他跑过去的动静一盏一盏点亮,又一盏一盏在他身后熄灭。电梯太慢,他直接拐进消防楼梯,脚步声在混凝土台阶上炸开,三层,两层,一层。大堂的门被他一把推开,四月底伦敦清晨的冷风灌进来,他打了个哆嗦,才发现自己忘了穿厚外套。
他没回去拿。跑到街边,手机掏出来叫车,手指在屏幕上戳了四次才把定位戳准。车来了,他拉开门坐进去,报地址的时候声音是抖的,“去BeaconCare.”
司机从后视镜里看了他一眼,没说话,踩下油门。他从帆布袋里摸出手机,又拨了一次安东尼。还是忙音。
他开始翻聊天记录。三个人的群聊,最后一条是佐伊回的一个猫点头的表情包——那是前天的事了。他往上翻。佐伊发的消息很少,大部分是他发的——利物浦港的寄居蟹、布里斯托的炸鱼薯条、费利克斯托的海鸥。她偶尔回一个表情包,猫点头,猫叹气,猫把脸埋进爪子里的那个。再往上翻,是心率报警那次。三个人几乎同时打电话,同时占线,然后她拉了这个群,发了一条“海鸥”。他盯着那个“海鸥”看了很久。
然后手机震了。屏幕上跳出安东尼的名字。
他接起来,手指在屏幕上划了两次才划到接听键。“喂?”他的声音像被人掐着脖子挤出来的,又紧又尖,尾音往上飘。
电话那头有监护仪的嘀嘀声。规律,稳定,一下,又一下。
“没事。”安东尼的声音很低,像是一夜没睡,声带被疲惫磨掉了一层釉,露出底下粗糙的陶土。“她在医院,还活着。”
Vital张了张嘴。他有很多问题想问——在哪,怎么了,什么时候的事,为什么手环摘了,为什么发那封邮件,为什么你不接电话,为什么她也不接,为什么,为什么,为什么。
但他一个都没问出来。他听见安东尼的声音里有什么东西。不是慌乱,安东尼从来不慌乱。是一种很深很深的、被什么东西坠着的疲倦,像一个人在齐腰深的水里站了一整夜,水面上看起来是稳的,但水底下两只脚一直在用力撑着,撑到肌肉都在发抖。
“你们在哪儿。”他最后只问了这一句。
“心内科监护室,CCU。你到楼下了给我打电话,我下来接你。”
电话挂了。Vital把手机从耳边拿开,看着屏幕上的通话记录。通话时长,四十七秒。
车窗外,伦敦正在醒来。街边的咖啡馆刚把遮阳篷支起来,报亭的老板在往架子上摆当天的报纸,一个穿西装的男人边走路边打领带,领带被风吹到肩膀上,他歪着头夹住手机,空不出手去拨。
这座城市和昨天一样,和前天一样,和Vital来伦敦之后的每一个清晨一样。但它不一样了。他说不清哪里不一样,可能是光的颜色,可能是风的温度,可能是他胸口那个一直在往下坠的东西——从收到邮件的那一刻就开始坠,一直坠,坠到安东尼说“还活着”的时候,它停了一下,然后继续往下坠。
司机从后视镜里又看了他一眼。这个年轻人在后座上弓着背,两只手攥着手机,指节发白。司机把油门踩深了一点。
车停在BeaconCare侧门的时候,Vital扫了一眼计价器,随便按整数付了钱,没等找零就推开车门。他在人行道上站了几秒,手指悬在手机屏幕上方,悬在安东尼的名字上。然后他把手机锁屏了。他不知道监护室在哪一层,但他知道怎么找到安东尼——他在大厅里扫了一圈,看见导诊台后面坐着一个穿浅蓝色制服的护士,正在往电脑里录什么东西。Vital走过去急匆匆的问:
“心内科监护室。CCU,在哪儿?”
护士低头查了一下,报了楼层和方位。他转身就走,走了两步又回来。“谢谢。”然后继续走。
电梯门开的时候,他看见了安东尼。
安东尼靠在护士站对面的墙上,两只手插在夹克口袋里,夹克拉链拉到胸口,露出里面深绿色刷手服的领子。他的头发是乱的,眼睛下面有一圈很深的青灰。不是熬夜写病程的那种青灰,是一整夜没有合过眼、并且在这整整一夜里每一分钟都在想事情的那种青灰。他看见Vital从电梯里出来,从墙边站直了身体。Vital快步走过去,走到离安东尼还有两步远的地方,停住了。他有很多话想说——她怎么了,什么时候的事,那封邮件是什么意思,她为什么要发那封邮件,她现在怎么样?
但他什么都没说出来,因为他看见了安东尼的眼睛。那双眼睛里有一种他没见过的东西。是一种深沉的疲惫,就像西西弗斯。他在推一块总是被命运拨下悬崖的巨石,一次又一次。
“她…她发邮件给我。”vital先开口了,声音比他自己以为的要沙哑些。话还没说完,眼眶已经红了。
“邮件?”
Vital点头,有点狼狈的吸了吸鼻子。他把手机掏出来,点开那封邮件,屏幕转向安东尼。
没有正文,两个附件。密钥集和管理员账号。安东尼看着屏幕,看了几秒钟。然后他把视线从屏幕上移开,移向走廊尽头的窗户。
“她九十点回来的。回来的出租车上吐了,她觉得累,以为是出差累了。”安东尼说,声音很慢,一个字一个字地,像在从一堆碎玻璃里捡出还能拼成形状的几片。“她把行李全都留在了前台,前台想陪,她没让,只寄存了行李,还说了谢谢。然后自己回27楼,洗完澡。十二点开始发热寒颤。胸痛不缓解。三点半,她敲了我值班室的门。”他顿了顿。“手环,是她自己摘的。摘之前,把邮件发了。她都那样了,不敢给我打电话。她小时候就那样,说我可能在抢救,不能打扰我。”
Vital他张了张嘴,但安东尼没等他问。
“她早就想过会有此刻了。”安东尼说话的节奏不疾不徐,但言语完全像一场憋了一整夜后的倾倒,他想说的快一点,但是太累了,说不动,只能一边想一边慢慢讲,“她把那封邮件放在草稿箱里,隔一段时间更新一次。不是一天两天了。从她第一次独自出港口的差,就开始写了。她跟我说过,如果她哪天倒下了,系统不会跟着她一起倒下的。她把这个叫做灾难备份。”
安东尼的眼神看着窗外,像在自言自语。
“她有一次躲在我办公室吃糖,更新了一版文件,然后跟我说,预警系统按照这个路径,不用大改,至少还能坚持十五年。我问她然后呢,她说,然后她该开第三次胸了,瓣膜寿命到了。”
“我叫她闭嘴,我跟她说十五年后还有下一个十五年。”
“今天凌晨,她已经抱着最坏打算来找我。”安东尼的手指在窗玻璃上蹭了蹭,蹭出一道水汽,很快又散了,“她自己比其他人都清楚自己是什么情况,比普通主治都更明白应该怎么做。她担心自己是心内膜炎,担心自己的第三次开胸要提前到来了,担心自己醒不过来,但就算这样,她不打算打扰其他任何人。”
“还好,这次运气好,坏东西还没来得及缠上她的瓣膜,她可能不用那么快上手术台。”
安东尼把视线转回来,深吸了一口气,拍了拍vital的肩,这只大金毛一样的男孩在自己面前泣不成声的样子,就像…他经常见到的那种家属。
“她都清楚,都算过。可能唯独没算过你收到这份邮件是什么心情。我希望你…原谅她。”安东尼吸了吸鼻子,自己的眼泪也在眼睑里打转,“她真的不是故意的,那会儿她高烧39度多,大概已经烧糊涂了。”