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是因为我们没有表现出很大的要夺冠的意愿。