下午四点,林深语和陈慧芳面对面坐在客厅里。
小宇被隔壁阿姨接走了。走的时候他回头看了林深语一眼,什么都没说。他的眼睛还是那种安静的黑,不哭不闹,只是看着。林深语冲他点了一下头,他就跟着阿姨走了。
客厅里很安静。阳台上的窗帘拉着,阳光从缝隙漏进来,在地板上画出一道细长的光带。那部修好的手机放在茶几上,屏幕朝上。
陈慧芳盯着手机,像是在看一个随时会响的炸弹。
“陈姐,”林深语开口,“你先生留下的程序,我们修复了。里面有两段视频。”
陈慧芳抬起头。
“一段是给小宇的。一段是给你的。”
陈慧芳放在膝盖上的手慢慢攥紧,指节发白。她没有说话。
“在给你看之前,我需要告诉你几件事。”林深语的声音很平稳,不急不缓,“你先生写的那个程序,设定每晚零点启动。不是闹鬼。是他用投影技术把自己的影像投在卧室门口。”
“每天晚上零点。连续七个月。”陈慧芳的声音很轻,“他……”
“他本来想把程序设定到小宇五岁生日那天自动停止。但他把那一行代码注释掉了。”
“注释?”
“就是让程序一直跑下去。不停止。”
陈慧芳的嘴唇动了一下,没有发出声音。
“程序有一个bug。投影亮度不够,声音也出不来。所以小宇每晚看到的,是一个模糊的、沉默的影子。”
陈慧芳低下头,看着茶几上的手机。屏幕上的光照着她的脸。她的眼睛红了,但眼泪没有掉下来。
“他说什么。”
“给小宇的祝福,他录了很多遍。每一遍都没说完。”林深语拿出自己的笔记本,翻到记录的那一页,“他最后一次录的时候,已经是凌晨。他对着镜头说:‘小宇,爸爸要走了。你要好好长大。听妈妈的话。爸爸爱你。’”
“他说完了。”陈慧芳说。
“他说完了。但他以为自己没说好。他在代码里写了一行备注:‘程序可以有bug,但爸爸的爱不能有。再试一次。’”
陈慧芳捂住了嘴。肩膀在抖,但没有声音。
林深语等她慢慢平静下来,然后继续说。
“他还录了一段视频给你。”
陈慧芳的手慢慢从嘴上移开。她的眼睛已经红了,但看着林深语的时候,目光是清醒的。
“他在里面说什么。”
“我放给你看。”
林深语拿起手机。解锁,输入密码,点进程序目录。她找到了那个叫“for_chen”的文件。手指悬在播放键上方。
“陈姐。他录这段话的时候,是去世前三天。凌晨四点多。”
陈慧芳点了一下头。
林深语按下播放。
周明的脸出现在屏幕上。他没有看镜头,低着头,在看手机上的照片。拇指慢慢划过屏幕。光线照在他脸上,眼镜反射着屏幕的光。
“慧芳。”
他叫了一声。声音很轻,不像练习。像是躺在她旁边说话。
“你要是看到这个,说明我没录完。”
他停了一下。手指还在划照片。
“给小宇的祝福,我录了好多遍,都说不完。你知道的,我这个人嘴笨。”
他笑了一下。
“但你不一样。你会说话。小宇以后有不会说的话,你可以教他。”
他翻过手机,看着那张合照。看了很久。
“慧芳。这四年,谢谢你。你跟我在一起,受委屈了。”
“我没什么能留给你的。这个程序写得不好,我知道。但我想,至少让它帮我把这句话带到。”
他终于抬起头,看着镜头。
“对不起。我不是故意走的。”
视频结束。
画面定格在他的脸上。嘴张着,还有话没说完。
陈慧芳没有动。她坐在沙发上,双手放在膝盖上,眼睛看着定格的画面。
客厅里很安静。楼上有小孩在跑,脚步声咚咚咚地传下来。楼下有人在炒菜,油锅的滋啦声隐隐约约。老城区的下午永远有这些声音。永远有人在生活。
陈慧芳开口了。
“他查出病的那天,是周四。”
她的声音比刚才更轻,但更稳。
“那天晚上他回来得很早。平时都要加班到凌晨,那天八点就回来了。他买了菜,做了红烧排骨。小宇最喜欢吃的。吃完饭他陪小宇玩积木,玩到小宇睡着。”
她停了一下。
“然后他坐在沙发上,坐了很久。我问他怎么了。他说没事,项目上线累的。”
“那段时间他瘦了很多。我以为是真的加班。他的工作一直很累。游戏公司,项目上线前几个月,天天凌晨回家。我说你换个工作吧。他说等这个项目做完就换。”
她的声音开始发抖,但依然在说。
“他没告诉我。”
“他一个人去医院。一个人拿报告。一个人知道。”
“他每天晚上加班到凌晨,其实是在写这个……”
她看着手机屏幕。
“写这个告别。”
陈慧芳的眼泪终于掉下来了。不是崩溃的哭,是一滴一滴地掉。她用手指擦掉,然后又掉下来。
“他连死都不让我陪着。”
林深语没有说话。她知道这时候不需要说话。
过了很久,陈慧芳重新开口。
“你知道我最气他什么吗。”
林深语看着她。
“不是他瞒我。是他到最后都觉得对不起我。他跟了我四年,给我做了四年饭,把小宇带大。他到最后,录视频跟我道歉。说对不起,受委屈了。”
她笑了一下,眼泪顺着笑容的弧度流进嘴角。
“他有什么对不起的。”
林深语低下头,看着自己笔记本上写的那行字:“执念可能不在亡者,而在生者。”
她在这行字下面又加了一行。
“也可能,两边都在等对方放下。”
陈慧芳把手机拿起来。屏幕还亮着,周明的脸定格在那里。她的拇指划过屏幕,很轻,像是在摸他的脸。
“林警官。”
“你说。”
“那个投影,你说他能蹲下来和小宇一样高。”
“对。他把投影高度设在零点八米。正好是你儿子躺下后的视线高度。”
陈慧芳点了一下头。她把手机轻轻放回茶几上。
“今天晚上。放给小宇看。”
林深语看着她。“你确定。”
“嗯。”
陈慧芳的声音不抖了。
“他不是故意走的。他录了十七遍。他用尽所有办法,只是想告诉我们这句话。如果我拦着不让小宇看,他那些凌晨就白熬了。”
她站起来,走到阳台上。窗帘被她拉开了一条缝,阳光一下子涌进来,照亮了茶几上的手机。屏幕暗下去了,但阳光打在碎裂的纹路上,像一张密密麻麻的蛛网。
陈慧芳站在光里,背对着客厅。
“他就是这样的人。嘴笨,不会说话。但答应了的事,一定会做到。”
“他答应过要跟小宇说生日快乐。”
“他做到了。”
傍晚六点。市局技术科。
顾铮把鉴定报告最后一段打完。他敲下句号,然后靠在椅背上,从头到尾读了一遍。
技术鉴定结论:
“经数据恢复与程序分析,报案人所述‘鬼魂’实为死者周明生前编写的一段全息投影程序。程序因代码错误导致投影模糊、音频缺失。经修复后,程序可正常运行。程序内含两段视频文件,经鉴定均为死者本人录制。
补充说明:程序文件夹底层发现隐藏代码一段,编码风格与主体程序明显不同。已提取,待进一步分析。”
他把光标停在最后一段。
“隐藏代码”这一段,他犹豫了一下要不要放进正式报告里。按规程,与案件核心事实无关的技术细节不需要写入鉴定结论。但他还是写了。
然后他在报告末尾加了一行附注,不属于技术鉴定范畴,但也没有删掉。
“本案所涉技术手段表明:报案人所目击之‘鬼魂’,实为一段载有未竟之言的全息投影。死者生前反复调试程序,未能修复bug。但其录制完成之内容,已完整表达其意愿。”
他把报告保存,打印,装进文件袋。
然后他打开另一个文件夹。一个加密的文件夹。
文件名:hidden_code_analysis。
他把从周明程序底层提取的那段隐藏代码拖进分析工具。代码很短,不超过五十行。不是投影相关的功能。不是音频相关的功能。它在程序目录里藏得很深,调用路径被刻意改写,像是不想让人轻易发现。
顾铮第一次看到的时候,以为是周明从哪个开源社区扒下来的测试代码,忘记删了。
但他仔细看了第三遍,发现不是。
这段代码的风格很旧。不是编程语言旧,语言本身是通用的。旧的是写法。变量命名习惯、缩进方式、注释格式,都带着一种十年前的痕迹。现在的程序员不这么写。不是写不出来,是没有人会这么写。习惯变了。
他盯着代码里的一个变量名:
“lingyu_timestamp”
这不是英文。不是拼音缩写。是拼音全拼。
灵语。
顾铮靠在椅背上。
十年前的程序员。鹿鸣镇。林深语。
他打开微信,给林深语发了一条消息。
“隐藏代码的初步分析结果出来了。编码风格十年以上。不是周明写的。是被人植入的。植入方式隐蔽,不破坏程序主体,只调用了一个函数。函数功能,在你的手机靠近程序运行设备时,自动激活一个调试界面。”
发送。
对面显示“正在输入”。
然后停了。
然后又显示。
然后消息进来。
“什么调试界面。”
“还没解开。需要更多时间。”
“今晚之后,我要去看。”
“可以。”
顾铮把手机放在桌上。他重新打开那段隐藏代码,一行一行地看。
窗外天色渐暗。技术科的灯自动亮了。
他的手机屏幕又亮了。是林深语的回复。
“顾铮。谢谢你没有删掉那段备注。”
顾铮盯着这行字,拇指悬在键盘上。打了几个字,删掉。又打,又删。
最后他只回了一个字。
“嗯。”
他把手机扣在桌上,拿起文件袋,走向门口。
走廊尽头的窗外,夕阳正在下沉。云层被烧成了金红色,压在城市的天际线上方。滨城的傍晚永远很短暂,金红褪去就是暗蓝,暗蓝之后就全黑了。
离零点还有五个小时。