中關村的攤主把機箱搬上櫃台時,先用袖子擦了擦頂蓋的灰。
機器從一家外貿公司淘汰下來,486dx2,主頻六十六兆赫茲,八兆內存,四百二十兆硬盤。機箱右側有一道凹痕,軟驅讀盤時像咳嗽,顯示器邊角微微偏色。旁邊那台擦得發亮的奔騰機要貴上兩千七,馬飛連第二眼都沒看。
老板開價四千六。
馬飛拆開機箱,檢查電容和硬盤接口,又讓機器連續跑了四十分鐘內存測試。
老板起初很有耐心,二十分鐘後開始催,說機器出門以後概不退換。馬飛沒有關測試程序,又從包里拿出一張自帶的啟動軟盤,運行磁盤掃描。
屏幕上很快跳出壞簇。前半段只有三個,越往後越密,最後一共四十二個。老板探頭看見數字,伸手就想按復位鍵,被馬飛擋住。
“標簽上寫的是完好硬盤。”
“二手機哪有一點壞道沒有?給你便宜一百。”
“索引文件寫到壞區,便宜一百也會把幾天的數據一起丟掉。換櫃台下面那塊同容量的。”
老板的臉沉下來︰“你怎麼知道下面有?”
“剛才拿螺絲刀時看見的。封條日期比這塊晚半年。”
旁邊等裝機的兩名學生也圍了過來。老板沒再爭,把備用硬盤裝上。馬飛當著他的面重新跑了一遍掃描,又讓他在收據背面寫明七天內非人為故障可換。
“四千二,帶十四點四K調制解調器。”
“那東西單賣六百。”
“硬盤有壞道,電源風扇也該換了。”
老板瞪著他︰“你到底做火箭還是修電腦?”
“窮的時候都得會。”
最後成交四千三百元,送兩張空白軟盤和一根電話延長線。
調制解調器原本不在贈品里。老板把收據遞過來時,馬飛指了指開著的機箱︰“電源風扇軸承響,您不換也行,把那只積壓的十四點四K給我。”
“你連積壓都看得出來?”
“包裝上去年的灰比今年厚。”
老板盯了他半天,罵了一句做火箭的買電腦最麻煩,還是把調制解調器塞進紙箱。臨走又追出來,問全文檢索做成以後能不能幫他把庫存單也查快一點。
馬飛在收據背面記下櫃台電話。這是他付出四千三百元以後,拿到的第一個潛在客戶號碼。
搬機器回宿舍那天,趙海幫他抬上三樓。兩個人把沉重的顯示器放到桌上時,馬飛的存款只剩四百多元。
舊書桌承不住顯示器,左前腿發出一聲輕響。趙海罵著扶住桌面,馬飛找來兩塊廢木板墊在下面,又用鐵絲把橫撐重新扎緊。忙完以後,兩個人的手上全是灰,晚飯時間也過了,只能去門口小攤分一碗加了雙份面條的湯面。
趙海把碗里的荷包蛋夾給他︰“四千多都花了,別明天餓死在機器前面,所里還得給你報工傷。”
馬飛把蛋又夾回一半︰“你抬顯示器,也算項目成本。”
“你真瘋了。”趙海喘著氣說,“這東西頂你一年工資。”
“所以不能讓它閑著。”
電話線從走廊值班室臨時接進來,每晚十點後才能使用。馬飛向管理員交了押金,答應詳細登記通話時長。第一次撥號時,調制解調器發出尖銳而奇怪的握手聲,像兩台機器隔著黑暗試探彼此。
連接成功︰ bps。
屏幕上的字符一行行出現。
他沒有撲向未來記憶里那些熟悉的算法論文。第一晚只做三件事︰測量線路實際吞吐,記錄斷線頻率,下載一份公開目錄頁。
四十七分鐘里斷了三次。
值班室門外還有兩個人等著給家里打電話。每次線路斷開,管理員都敲門提醒他計費表還在走。馬飛把第三次斷線的時間記完,主動掛斷,讓排在後面的女工先打。她抱著剛睡著的孩子,只說了三分鐘,問老人吃藥沒有,便把听筒還回來。
“你接吧,孩子一會兒醒。”她說。
馬飛重新撥號時,把下載器的第一條需求改成︰斷線後不得從頭計費。
一個不到三十Kb的文件因為每次從頭傳輸,最終耗費了二十多分鐘。若照這種方式抓取網頁,系統還沒建立索引,他就會先被電話費拖垮。
馬飛關掉連接,開始寫下載器。
他選用c語言,看中的是現有編譯器穩定,也能直接管住每一塊內存。程序先讀取遠端文件長度,再把內容分成小段;斷線後只請求缺失部分。服務器若不支持分段,就把已經驗證的塊保留在本地,重新連接時至少避免重復處理。
第一版在凌晨兩點編譯通過。
第二版解決校驗錯誤。
第三版仍會在電話線路出現短暫噪聲時把半截標簽當成正文。
馬飛沒有繼續。他必須在七點前睡兩個小時,白天還要做噴注器改型計算。
接下來三天,他每天只推進一個最小環節。
文本清洗。
詞項記錄。
文檔編號。
最簡單的查詢合並。
未來的他知道倒排索引、鏈接分析、分布式存儲會怎樣改變搜索,但這台機器不允許宏大。八兆內存扣除系統和編譯器,真正留給程序的不到五兆。任何“先全部讀進來”的設計都會立刻崩潰。
他把索引切成許多小段,逐段寫盤,再在查詢時讀取必要部分。速度不快,卻能運行。
星期四深夜,系統收錄了三百一十二份本地資料︰研究所允許公開的技術目錄、幾份高校bbS文章、手工錄入的期刊摘要,以及從公開站點下載的少量頁面。
馬飛輸入第一個測試詞︰“轉子振動”。
屏幕停頓三秒,返回九條結果。
第一條是正確的論文摘要。
第二條只有“轉子”。
第三條把“振動試驗”拆成了兩個毫無關系的片段。
第七條是一篇討論電風扇維修的文章。
馬飛看著結果,忍不住笑了。
這些錯誤一個比一個具體︰切分、詞距、語料範圍,每一項都能單獨拿出來改。
他終于有東西可以帶去見甦雨桐。
第七條那篇電風扇維修文恰好是趙海抄回來的。趙海被他從上鋪叫下來,看完結果,拍著桌子說機器至少知道電風扇也會振動,比他想的強。
“那第一條呢?”馬飛問。
趙海看了半天論文摘要︰“一個字也看不懂。”
“所以結果對不對,不能只問做程序的人。”
周五傍晚,他把程序、索引和測試語料分別復制到三張軟盤。第二張盤在校驗時出現錯誤,他重新格式化,仍不放心,又做了一份紙質文件清單。
出門前,趙海從上鋪探出頭。
“約會?”
“程序測試。”
“跟誰?”
“一個比程序難糊弄的人。”
計算機房在教學樓四層。馬飛提前十分鐘到,甦雨桐卻已經站在門口。她接過軟盤,沒有問他用了什麼算法,也沒有夸他真的做出了東西。
她只問︰“有測試日志嗎?”
馬飛把紙質清單遞過去。
甦雨桐翻到最後一頁︰“只測了你自己知道能搜到的詞?”
“目前是。”
“那不叫測試。”她推開機房門,“那叫表演。”
馬飛跟著她走進去。
管理員按下牆邊的計時器,紅色數字從四十開始往下跳。
甦雨桐沒有踫他列好的九個測試詞。她從書包里取出兩頁折過的紙,攤在鍵盤旁,最上面一句是︰火箭抖得厲害。
馬飛把三張軟盤按順序排好,拉開椅子坐下。