第 4 章

CTO的眼不見為淨

CTO的眼不見為淨 illustration

CTO在公司附近一家咖啡店等我。

不是發訊息,不是打電話,是直接說「我在那家咖啡店」。像是約吃飯,像是老朋友,像是三年來我倆在同一個專案裡隱形共生這件事終於要浮上水面談一談。

我推門進去的時候認真聞了一秒。

這個時間點不是下午茶,店裡沒幾個人。CTO坐最角落的位置,面前一杯美式,幾乎沒動過。我坐下來,等他先說話。

他先把視線從窗外收回來看我,然後做了一件我沒預料的事——

他站起來,繞過桌子,幫我把椅子往後拉了一點。

不是開玩笑那種。是真的拉。動作自然得像是他平時也會這樣對別人。

「你今天應該沒吃什麼。」他說。不是問句。

我確實沒吃。早上那通電話讓我胃裡像塞了石頭,午餐直接跳過,下午在茶水間對質的時候感覺整個人輕飄飄的。

CTO重新坐回去,雙手交疊放在桌上。那件工程師機能外套的拉鍊拉到底,領口露出一截設計師款襯衫領子,在咖啡店暖黃的燈光下顯得有點不合時宜。

「我直接說。」他說。

「平台倒閉之後,合約提前終止。雲端服務商那邊會發正式通知,但技術上來說,從今天起算,三十天內所有數據會被標記為可覆蓋狀態。」

我聽著這句話,每個字都認識,拼在一起有點像外語。

「意思是——」

「意思是三十天。」他打斷我。「三十天之後,這些數據在物理上就沒了。不是『刪除』那麼簡單,是『可覆蓋』。就算有人想恢復,連痕跡都找不到。」

我低下頭看桌面。木質的,紋路很明顯,有一條細細的裂縫從這頭彎彎曲曲爬到那頭。我在那條裂縫上用指甲輕輕划了一下。

他沒催我。

沉默大概持續了十秒。也可能更久。咖啡店背景音樂放的是一首節奏很慢的爵士,我聽不出來歌名,但我突然覺得這個音樂很不適合這個場合。

「我知道。」我終於抬起頭。「所以我需要把東西移出來。」

CTO的表情沒變,但我看到他右手食指在桌面上輕輕動了一下。

「你有這個能力,我知道。」他說。「但你也要知道代價。」

「什麼代價?」

「資料庫的root權限我已經收了。」他說這句話的語氣像是在說「今天天氣不錯」。「你要備份資料,技術上只能透過應用層的介面去爬數據。速度慢,限制多,而且——」

他停頓了一下。

「而且所有操作都會留下Log。」

我懂他的意思。我在備份的同時,也在留下一筆自己能看見的鐵證:我上過哪些帳號、爬過哪些資料、什麼時間、什麼IP。這些Log在系統關閉之前一直活著,管理層隨時可以調閱。

「你是在提醒我不要動?」我問。

「我是在提醒你:你可以動。」他說。「但你動的每一個步驟,都是你自己決定的。系統沒有指示你去做,文件沒有批准你去做,我個人也沒有建議你去做。」

我張了張嘴,又合上。

他在畫防火牆。我懂了。他坐在這裡跟我說這番話,不是為了幫我,是為了在萬一出事時他能乾淨地雙手一擺:啊?那個啊?我不知道啊?

但他還是來了。親口告訴我三十天這個數字。親口告訴我Log會留著。親口告訴我可以動手。

「你知道。」我看著他的眼睛。「你知道為什麼這三年平台風控一直沒把我十幾個號封乾淨。」

CTO沒說話。

「因為它只封情節惡劣的。大量的中度造假它當自然流量波動。」

他終於端起那杯美式喝了一口。咖啡應該早就涼透了,他的表情沒有任何變化。

「這個行業就這樣。」他放下杯子。「大家都在衝量,都在加水,都在讓數字看起來比實際大。風控部門不是看不出來,是看出來也懶得動。」

「為什麼?」

「因為划不來。」他說得很直接。「封一個號,要走流程,要人工審核,要留記錄。但如果是『自然流量波動』,什麼都不用處理,年報還能多一筆『平台流量健康增長』。」

我忽然很想笑。不是開心那種笑,是那種「這一切太荒謬了所以只能笑」的笑。

「所以這三年我沒被封號,不是因為我技術好,是因為我運氣好?」

CTO看我的眼神有一瞬間的複雜。

「都有。」他說。

那我這運氣用來幹嘛,養了一堆號結果養的是自己。

我們又沉默了一會。這次比較短。

「我記得你帶過一個號。」他突然說。「帳號名有點像人名,不是那種數字加字母的組合。」

我心臟跳了一下。「阿志?」

「對。阿志。」他點點頭。「有一次財報洩露那件事,平台被質疑DAU灌水,我調後台資料排查,結果看到一個號在相關帖子底下連發了十七條評論,句句都在帶方向。我當時覺得奇怪,仔細看了一下,發現那十七條評論的IP全部都——」

他比了個手勢。

我知道他接下來要說什麼。

「對。」我說。「同一個IP段。因為是同一個房間。」

CTO沉默了一下。

「十七條。」他說。

十七條來自同一個IP,我以為自己很聰明。

「後來我追了這個帳號一段時間。」他繼續說。「發現它在平台上是個『真人』。」

「……什麼意思?」

「它發的文章有人看。有人留言。有人跟它互動。它有粉絲,那些粉絲是真人。」他看著我。「我不知道阿志是你養的。三年了我從來沒查出來。但我知道阿志是真的。」

我忽然覺得喉嚨有點緊。

「你是說,就算我不在幕後操作,這些帳號——」

「這些帳號是真的。」CTO說。「至少,在這個平台上,它們是真實存在的。它們累積了內容,建立了關係,留下了別人的人生。這不是假的。」

我想起阿志。

阿志是我最早一批帳號之一。當時老闆只給了我一台紅米工作機,讓我「先跑通一個號」。我設定阿志是個三十五歲的台北人,興趣是露營和咖啡。三年下來,阿志發了兩百多篇遊記,有些篇章底下有真實的留言和互動。

有個粉絲叫小真的,每次阿志發咖啡店的文章都會留言說「下次帶我去」。阿志回過她「好啊,找時間」,然後就再也沒有然後了。

小真後來自己開了一間咖啡店。

我在後台看到她發的第一篇文,定位在台北市大安區,圖片是一杯拉花拿鐵,配文是「三十歲給自己的禮物」。我盯著那張圖看了很久,想說如果阿志還在,可以去幫她按個讚。

但阿志是我。

所以我一直沒有按。

「三十天。」CTO站起來。「你要備份就快點動手。」

他也站起來。

「還有。」他整理了一下外套的領口,那截設計師襯衫領子在咖啡店暖黃的燈光下顯得有點不合時宜。「那些帳號——如果可以——」

他沒把話說完。

但我懂了。

「我知道了。」我說。

他點點頭,轉身走向門口。玻璃門在他身後合上,空氣裡還留著一點美式咖啡的苦味。

我坐在原位,心裡開始算。

三十天。十二支手機。六百個核心馬甲。每一個帳號底下有內容,有粉絲,有互動記錄。我要怎麼在三十天內把這些全部移出來?

而且不能留Log。

我在腦中過了一遍技術棧。Auto.js腳本可以寫,但爬速度太慢,而且要過API限流。那個平台我熟,申請開發者帳號的話可以拿到更高的接口權限——但開發者帳號要用公司主體申請,公司都快倒了,估計也申請不下來。

我需要繞路。

我想起阿志。不是那個三十五歲的台北人阿志,是另一個阿志。

以前鄰居家的狗叫阿志。那是只土狗,每天早上都會在巷口等我放學。我後來轉學離開了,再後來聽說牠老了,走的時候睡在牠最喜歡的那棵榕樹底下。

我也不知道為什麼在這個時候想起這件事。

也許是因為那個阿志是真的。狗是真的,喜歡我是真的,牠存在的幾年時間是真的。那棵榕樹底下的土是真的,底下沒有任何雲端備份,牠的樣子只存在於我的記憶裡。

但那就是全部了。

我的十二支手機也是真的。

它們存在於我的房間裡,存在於那些永遠亮著的螢幕中,存在於阿志的咖啡文章和小真的咖啡店之間那個我永遠沒有按下去的讚裡。

我從口袋裡摸出手機,打開備忘錄開始列清單。

三十天。六百個帳號。每個帳號平均一百篇內容。假設我每分鐘能備份一個帳號的核心數據——不包括那些長帖子的圖片和附件——那也需要十個小時。

實際上每分鐘一個帳號是不可能的。而且我的手機矩陣一旦開始全速運轉,網速會變慢,IP可能會被標記,那些我費盡心思構造的不規則操作間隔全部會被平台風控抓到。

所以要慢。要像人一樣慢。要看起來像真的用戶在瀏覽,然後在瀏覽的過程中把資料偷偷拷出來。

我想了一會兒,在備忘錄裡打下一行字:

「第一階段:分批次提取核心馬甲的粉絲列表和互動關係圖。」

然後我又打下一行:

「第二階段:下載所有長帖的文本和圖片。」

第三行:「第三階段:整理成一個可離線閱讀的格式。」

我盯著這三行字,心裡有個聲音在問:然後呢?

然後呢?備份完了之後呢?這些數據存在哪裡?誰會來看?

我不知道。

但這些記憶是我的。

我關掉備忘錄,站起來,走向門口。

外面天快黑了。我該回家,回家打開那十二支手機,開始這場三十天的漫長搬家。

我在推門的時候回頭看了一眼那杯CTO留下來的咖啡。杯子空了,但杯底殘留著一圈深褐色的印記,在咖啡店暖黃的燈光下像一隻沒有邊緣的戒指。

像是某種約定。

我走出去。