Trend Micro Codinsanity 2014參賽記

連續第三篇參賽記。

8月14日

昨天zTrix駕車帶cbmixx和我進行了San Francisco Bay Area一日遊,遊覽了Google HQ、Facebook、Stanford University、Twitter HQ和金門大橋,醒來疲憊不堪。到達San Francisco機場,zTrix和cbmixx要回北京,而我要去臺北,在登機口碰到ppwwyyxx。

8月15日

和ppwwyyxx抵達臺北。 飛機顯示屏

趨勢科技考慮得真周到,爲我們準備了接機服務。timedatectl set-timezone Asia/Taipei!我們在王朝大酒店住一晚,去年新竹夜市的美食難以忘懷,我們就動身尋找附近的一個夜市。走了幾條馬路但沒有見到夜市的影子,隨便找了一家飯館吃。 晚餐

8月16日

13點多從王朝大酒店離開,在附近的必勝客點了點外賣,在路邊吃時有種流落接頭的感覺。吃完出發乘公車到趨勢科技臺北的辦公室,碰到了其他國家的參賽隊員,之後乘車去比賽所在的新竹麻布山林。車上又遇到了幾天前DEFCON才碰到的peter50216……

到達新竹的麻布山林後主辦方宣講了時間安排、注意事項等,不得不讚嘆一下趨勢科技在細節方面考慮很周全,badge上有公司、麻布山林、酒店、頒獎典禮所在地的地址和電話。

18:00在富森進行晚餐,20:00~22:00到比賽場地進行環境搭建。比賽共24小時,第二天8:30開始,次日8:30結束。今天18:00晚餐,主辦方宣佈了規則等,隊友Mulab和zxytim也加入了,還見到了久仰的潘宇超。

20:00~22:00到比賽場地詠山館三樓進行環境搭建。每個隊伍配備了三臺臺式機和一臺筆記本電腦,操作系統是Windows 7 Professional 64-bit,電腦裏安裝了Microsoft Office和VirtualBox 64-bit,一個路由器把四臺機器連接起來。筆記本電腦裏有比賽要用到的數據,有很多加密的zip壓縮包,密碼比賽開始後再公佈。比賽期間無法訪問Internet,也不能帶有計算能力的設備和通訊工具,但可以攜帶移動硬盤等存儲設備,需要安裝的軟件或是虛擬機鏡像也可以放在裏面。因此環境搭建時,我們還要把可能要用到的工具裝到電腦裏。我犯了一個錯誤,用移動硬盤引導後chroot安裝Arch Linux誤把系統裝到移動硬盤自身所在的sda了,之後zxytim在三個臺式機上安裝了Arch Linux。我們似乎是唯一安裝系統的隊伍,其他隊都使用虛擬機鏡像。日本有一支隊伍帶了固態硬盤來。22:00環境搭建結束,我們回到住處麻布雅舍準備明天要帶到現場的工具。想到展示對於hackathon類型比賽的重要性,我開始準備JavaScript的可視化工具:d3.js、highcharts、timeline.js等。因爲比賽期間沒網,還要準備各個工具的文檔和示例代碼,d3.js在GitHub上的Gallery上有很多鏈接,趕緊代碼下載到本地,另外還有以前的項目代碼等。zxytim則準備了PyPI和Arch Linux源,ppwwyyxx還準備了Chrome的Windows離線安裝包。

8月17日

早餐後來到比賽場地,手機等要交給主辦方保管。主辦方宣講後各個參賽隊伍進行一分鐘介紹。一名參賽隊員衝破紙門進入比賽場地後比賽開始。

主辦方提供了三類數據,web reputation logs(上網瀏覽時的檢測信息,包括陽性和陰性記錄)、file detection logs(文件檢測結果呈陽性的記錄)和user labels,參賽選手需要對這些數據進行挖掘,設計一個有趣的主題,在此基礎上做些研究,必須有數據做支撐,且結果不是常識性的。

各個隊伍桌上的信封裏有規則描述和介紹數據格式的附錄,以及zip壓縮包的解壓密碼。我忘記了7z x-p選項也可以直接在命令行跟密碼,以爲要用到tty,當時也不知道unzip可以用-P指定密碼,就寫了個expect腳本解壓。因爲壓縮包很多,還用上了find ... | xargs -P。解壓出來的數據有幾百個GB。數據是tsv格式的,可以用awk搗鼓做些統計工作。爲了方便和Windows機器協作,配置了Samba。大家做了些分析,提了些想法,但是每次要動手就發現數據太髒,很多東西不好弄。大家商量19:00要想出主題來。

Mulab發現數據噪聲很大,比如有大量文件檢測記錄是和一個AVTest的license相關的,它佔到了所有記錄的15%+。

下午開始看《D3 Tips and Tricks》和d3.js的示例代碼,近17:00去睡覺了,比賽場地安置了一些紅椅子供大家休息時使用,吃完晚飯又接着睡,一直睡到22:00。後來主辦方提供了被子,大家困了有的就直接把自己包裹起來睡在地板上,沒有手機不能拍下來真是遺憾……

後來zxytim和ppwwyyxx打算強搞機器學習了,硬是提取了一些特徵。

8月18日

累了可以回住處睡覺,但是有規定一個隊伍至少留下一個人,四個人的隊伍似乎至少要留下兩個人。據說有日本某個隊伍兩名選手都想,投擲硬幣決定誰回去……

裏結束還有四五個小時時開始準備幻燈片,考慮到協作方便,得使用網頁版的。一開始打算用jmpress.js,後來改用了reveal.js。幸好這兩個庫也有所準備,否則就又要麻煩了。我嘗試把d3.js用在幻燈片上,弄成功了,照着示例代碼寫了line plot、pie chart、dendrogram等。事先沒有準備協作工具是一個失誤,編輯幻燈片時只能人工模擬令牌環。

最後一兩個小時,爲了插圖風格一致,要把Mulab的一幅圖轉成d3.js的scatter plot,還好d3.js的Gallery中也能找到,最後一個小時把bar chart也搗鼓出來了。最後半個小時,因爲展示時要使用只有Windows的筆記本電腦,Mulab裝了python3和Chrome,用python -m http.server伺服HTML目錄。

8:30結束,結束後還有screening和展示環節。回住處小憩後10:00多回到比賽場地開始screening,即在最後展示前向主辦方描述自己的成果。我看到隔壁的一個房間裏,菲律賓的一個隊伍在準備展示,想到ISC'14 SCC熬夜的南非隊,我能感受到這是一個勁敵。

大概14:30輪到我們組進行十分鐘展示。其他隊伍似乎也是很隨意的樣子,我看到隔壁的那個房間裏,菲律賓的那支隊伍還在準備。

因爲還不知道無線網密碼我就無聊地開始看Vim help了……Liadri隊的一個同學問我是不是在學Vim,他也是5年前用Emacs的,後來改投了Vim陣營,Emacs Pinky真害人……

主辦方把我們帶到一家餐廳吃晚餐,比賽期間的一些視頻已經剪輯好了,大屏幕在播放。

8月19日

8:17下樓吃飯,8:30集結去趨勢科技臺北的辦公室參觀,之後出發去臺北文創進行頒獎典禮,公司的一些高管和一些專家們介紹各個方面,然後問我們比賽的感受。大家都是吃貨,覺得零食挺多的,食物好吃,我好想說被子真舒服,現在一摸到軟軟的東西就想睡覺……之後宣佈獲獎名單,唸完Finalist獎後沒有報到我們,也就是說我們應該是前三名,隊友們都很激動。主辦方還留了個懸念,讓前三名的隊伍站起來,分別問是否覺得自己可能是冠軍。接下來揭曉第三名,依然不是我們,旁邊zuqi說這回一定要請客了!最後揭曉冠軍,是菲律賓的隊伍,我們是亞軍。

因爲入臺證有效期只有四天(我隨機搖出來了震星4,而ppwwyyxx運氣好,是震星10),今天就得回來了,而此時我的隊友們正在吃大餐吧。主辦方之前還讓我們進行20日活動選擇,一個選項是參加大數據論壇;另一個是參觀101大廈和臺北故宮等,但這些都和我沒關係……因爲我要提前離開,12:00多主辦方給我提供了去桃園機場的租車服務。

趨勢科技準備很用心,細節做得很棒,接機地點、比賽各個階段的地點都標明瞭: 接機信息 地點信息 各個隊伍的隊服顏色不同,圖案也不一樣,badge還印有頭像,值得很多舉辦比賽的組織學習。

參賽選手們有好多穿Code Jam、TopCoder Open衣服的,感覺都是算法競賽的老賽棍們,我們這支臨時組裝的隊伍能挺過初賽得以出線真是挺僥倖的。我很喜歡禁止聯網和使用通訊工具這條規則,沒有Internet,我們就要提前準備好需要使用到的工具,沒有Google和StackOverflow,準備離線文檔也是一個有趣的事。在24小時裏,做數據分析、Linux雜項任務、機器學習、繪圖、幻燈片等各種高強度任務很能鍛鍊人。感謝強力的隊友們,我們配合得很好才得以獲得好名次。市面上的各種hackathon,同伴的技術契合度是個很麻煩的問題,設計和美工是我們這些人很多都難以把握的,但作爲一個應用又不得不考慮這些,這兩個要素增加了很多不確定性,也無法避免一些隊伍提前設計好產品。Hackathon注重的更多是樂趣而非競技,這不是我所熱衷的。現在的我一直爲這些蝸角虛名而忙忙碌碌,但我享受這一過程。高中做得最明智的決定是參加信息學競賽,現在應該是參加這些五花八門競賽的時候。競技精神的最好體現就是蔣林浩學長在ASC'14結束後對大家說的:他是爲了拿第一才參加的,他push我幹活是因爲覺得我們還有希望,他放棄參加ISC'14 SCC是因爲我們沒有表現出很大的要奪冠的意願。