優化小插曲 下篇

2016・冬・續

學校課業

畢業門檻共計二十四學分,每堂課原則上都是三學分,意即要修八堂課,其中一部分可以選修外系碩班課,而我卻傻傻地全選資工碩班的課。大部分的人都是每學期修三到四門課,最後一學期專心做論文,前提指導教授派發的助教工作夠輕鬆,而不是每週都來亂的情況。

而這學期一開始有打算修英文課,開給碩班的英文課不外乎有很多系來修,對於我這種渣渣而言還稍微困難了些,但沒想到第一堂課的互動,在互動過程中回答問題時,讓我的人生增添了 黑歷史 ,隨後的分組成了邊緣人,於是我,退了。

計算機圖學

這裡只描述過程中的心情,實作細節有機會再發文

之前在大學時,課程中 GameMaker 這套軟體上弄遊戲就快崩潰,靠著小夥伴編寫劇本,自己兜弄 UI 設計與美工,討論如何做出適當的效果,反覆地測試運行流程,那時用了一整個學期,請參考 Github,那門課可說是我唯三拿到低於九十分的系上課程 (其中兩個是專題,也許是我嗆老師不懂設計、太過古板)。

第二個作業使用 Unity3D 開發,拉個 GUI 弄得昏天暗地。在物理引擎設定上,質量大小、推力反應、空氣阻力、碰撞動量 … 等,這些估計數據的感覺全還給老師,瞬間覺得自己是個蠢貨,怎麼調都不對。搞了幾天都弄不定,還好有小夥伴古古教我怎麼用,不然還真的會崩潰一陣子。

《田中君總是如此慵懶》

期末專案跟小夥伴古古一組,著手渲染技術之一的 Radiosity Github,用各式優化技巧和 WebGL、OpenGL 呈現作品,有機會我們再來談談大量的優化技術吧,將老師給的程序利用編譯器優化到極致!隨後再平行它!

演算法設計與分析

雖然沒修這門課,看著學弟去修這門課的作業,又知道助教是之前修平行的古耕竹同學,追求效能極限的對手!有對手就會成長,永不滿足!

其中一個作業是計算 0/1 背包的最佳解,課程中使用 branch-and-bound 算法,可想而知這種搜索法還是會還是會退化的。不管哪種寫法都是 NP-Complete,因此只能做常數優化,如何加速背包問題請參考《淺談背包問題 (0/1 Knapsack Problem) 優化那些事》那篇。花了好幾天加速他們的作業,用優化後的 DP 計算就能完爆他們早期的剪枝版本,在數據範圍小的時候,剪枝版本仍然比較好。

為了加速應用,使用了 DP 達到理想最佳解,為了加速這個 DP 計算,額外使用了 DP 優化計算,又為了優化 … 不斷地遞迴下去,最後達到貪心收斂?

「但我的愛和努力都還不成熟」- 斯特拉的魔法

還有另一個 TSP 銷售員旅遊問題的實作優化,有空我再來跟大家說說吧。

優化心情一覽

摸遍上百人的 Code,還原所有學過的知識,偷學技術並變成自己的招式,Gate of Codeylon!

「Gate of Bootylon」

連續幾週都在高喊加速!你怎麼改,我就怎麼追。當成功加速時,就擺上切嗣大叔

「固有時制御 二倍數 Time Alter Double Accel」- Fate/Zero

隔日發現第一名被奪走時,高喊奪回誓言「妹子被暴搜搶走!不行,我一定要攻下她。」

斯特拉的魔法

反反覆覆地,每天心情有如三溫暖般地洗禮,時時刻刻都無法鬆懈,我們越來越逼近真理,內心相當雀躍。古助教看著我與學弟們的競爭,也加入討論,感覺相當地不錯。

M <<「我在追求真理」
K >>「好好栽培學弟,學弟就是你的真理」
M <<「?」
K >>「真理還分性別嗎?」
M <<「…」

學弟們最後加速剪枝到優化後的 DP 無法追到。深感可惜,在沒有滿足鴿籠原理的情況下,我找不太到卡暴搜的測資。相反地,若很容易做到鴿籠原理,莫名其妙可以快個十幾倍。他們加速剪枝,我利用減少計算量加速,彼此都獲得更進一步的討論,有人討論果然可以走得更遠更快。

「想要走得更遠」- 吹響吧!上低音號

最後這些題目被我們放在批改娘系統上,測資有卡實作邊界處理不好程序。雖然我不是最強,但在這第一學府就要成為最強,任何亂來的解法見一個斬一個,動用腦中所有的智慧生出最強的測資!啊,好像把別門課的作業弄壞掉了。當然作業只求計算正確,速度不要太離譜,這一點我們還是無法違背課程需求,要求每位同學與我們一起加速和探討似乎都錯了什麼。

實驗室雜談

教授語錄

「實作細節一點也不重要,根本沒人想聽」
「別太相信論文」
「理論都正確,但你做的有什麼用?」

紀錄心中的困惑

這一年,我越來越不能理解這奇怪的要求。當不想講細節的時候,又被問要怎麼做,細節大多都沒有乾淨的理論描述,完全依賴在計算機架構上,不同的架構又是另一套參數,講起來沒完沒了。

當被質疑報告的論文正確性時,偏偏那一篇還是 tier-1 conference (曾經最高的國際會議) 來的論文,到底是信還是不信呢?那我們被要求投那個國際會議時,又要秉持什麼樣的態度才合適。從研究論文開始,我也明白很多論文的部分成果有瑕疵。無妨地,我們可以理論推測那是很簡單的,但礙於篇幅有限。

當想做出一篇很有用的論文時,我覺得這困難到想休學不讀,根本沒有機會遇到有用的且可以寫出論文的機緣。所以當時跟老師談論到想休學,老師卻說論文隨便寫就發一篇,這樣隨便發一篇真的有用嗎?這麼說起來,我的人生好沒用呢。

「不是都怪你太弱嗎」- 3 月的獅子

白色聖誕前奏

公司的大哥大姐打算在聖誕節辦活動,要來個交換禮物又是卡拉歌唱比賽,櫃檯姊姊和其他 AE 姊姊談論這事情時,恰好就在旁邊聽著。

A >>「打算辦交換禮物活動,妳覺得如何」
B >>「我覺得交換禮物不錯呀」
Morris 思考中
A >>「妳看看 Morris 好像不太行耶,主管 X 是打算換成卡拉歌唱比賽」
A >>「他們是不是不太願意花時間去挑禮物,他們工程師都這樣」
Morris 思考中
B >>「Morris 好像撐不住了」
A >>「比賽這種就不是每個人都能參與,有輸有贏的,好好的聖誕節為什麼要這樣?」

咱只是在思考這些活動的複雜度而已,行不行也不是我能決定的,喜歡估算的心錯了嗎?對於我來說負擔太大,不僅不會唱歌,連買禮物的品味都成問題。最後耗費一個週末只思考禮物要買些什麼。

「是從什麼時候開始的呢 會感覺聖誕好痛苦」- 3 月的獅子

這學期在學校大大小小的事物都跟古同學有關,學弟常常要跟我描述是古學長 (演算法設計助教) 還是古學姊 (物聯網助教和計算機圖學一起修課),同時他們兩位又有在我當平行助教的時候一起修平行課,稱呼方法搞得我好混亂,但跟這群有趣的傢伙同一屆不容易也很幸運。

跟學弟們討論到底要買什麼禮物作為交換,並抱怨著自己聖誕節魯到不行。此時,學弟突然說「你不是在追古學姊嗎?」當下的我愣了一下,學弟馬上補一刀「難道是追古學長嗎?」等等,這聽起來越來越不對勁,看來這兒已經沒我說話的餘地,學弟們的這套想法讓我不知所措。

「嗯 我會努力的」- 斯特拉的魔法

週末買公司要求的禮物時,學弟學長們再三交代「不買給『她』嗎」?心想「她」到底是誰,在旁人的催促下,內心相當煎熬,我不懂的事情太多,對於沒有錯過的問題,完全不知如何下手解決,行動與常識近乎零,類似當機地直接跳過無法執行的部分。於是在聖誕的前一週,跑了數間店買了數個禮物準備。

不管送給誰,送不出去就在聖誕節自己拆,自己買的禮物自己拆,做好邊緣人的心理建設。同時,週末也順便補實驗室另一個女生生日蛋糕,請學弟騎車帶我去買蛋糕,畢竟去年她們替我慶生,這回有學弟們一起在實驗室,買蛋糕也不尷尬,這週末真是忙碌呀。

從此之後,學弟問任何話題,一提到「學姊」總要特別小心地回答,他們總是在刺探我的心意,無意也變有意。在一旁的實驗室「學姊」看著我慌忙地回答與再三確認不時在一旁偷笑。「也許,他們把你的潛意思說出來了。」在這陣子,我想我回答什麼都不是。

隨著聖誕逼近,學長學弟一直在催促我何時要送「很多人週一就開始送了,你怎麼還不送」我只能再三地反問「到底是想要我送給誰啦」想著適合自己品味的禮物,若要與眾不同,肯定是朝著送記憶卡內附程序,並留言到「這是我加速三倍快的程序,拜託了,請回禮追我」的那種。

「要我故意輸掉嗎?」- 3 月的獅子

最後在聖誕前幾天,也就去公司上班的前一天把禮物送出去,這下你們就不會再撈叨我了吧?至於在聖誕節前一日,因為被要求上台唱中文歌而內心受創好幾天,有必要把聖誕節搞得如此繁複嗎?

跨年尾牙

實驗室尾牙總會問跨年打算怎麼過

M「反正沒人約,應該在實驗室過吧!」
A「學長,不用擔心,我們都在實驗室」
B「實驗室由我們守護,你放膽出去約吧,記得遊戲角色開著幫我放輪」
聽起來有點感動又有點頹廢是怎麼回事 …
M「約誰?」
B「當然是學姊」
… … …
M「你們認真的嗎?」
B「當然」
一群在旁邊偷笑
實驗室學姊對 M 說「你是認真的嗎?」
… …. … …. .. …
M「嗯,失敗了,跟你們過吧」

「明天早上能陪我一下嗎」- 吹響吧!上低音號


2016・冬・終

Read More +

優化小插曲 上篇

2016・冬・始

想想論文

第一階段

在學長的催促下,一時興起想個論文題目,加上所學的一些技巧來實作資料結構,再搭配資料加速的方式,就能在某些約束大小下灑亂數,沒有平行的版本就能比序列化版本快上一點,但平行版本並沒有想像中成正比地加速,一不小心就被 data layout 打到殘廢,被 imbalance 的問題搞死,沒弄好 scheduling 根本玩不下去。

論文可比想像中的困難多了,大多有用的技巧沒有理論,實務上的技術卻不被看好,對這個世界感到失望啊!

「那可比想像中的困難多了」- 斯特拉的魔法

找了一篇別人寫的論文拿來平行,接著在平行處理根據現在的計算機架構設計。若沒有設計好資料結構和算法,效能遲遲無法引出來,有時還牽涉到實作成面的技巧,各方面都要顧及。

然而,實作總是不被看好的那一塊,大部分的論文都沒有提及或提供代碼,其他的論文到底可不可信?這一點深感疑惑啊!說不定早就錯得離譜,還一直誤導未來的讀者,當然我自己也不例外。至於如何解決這些問題,也許從一開始就是無解的題目呢。

「從一開始就是無解的題目呢」 - 果然我的青春戀愛喜劇搞錯了。

有一次大學長回實驗室,無聊問有沒有題目可以寫,於是拿了想要做的論文題目過去,三十分鐘就想到兩年前那篇論文怎麼做,再過三十分鐘的話我就不用做了,或許我們競賽時的題目,就是別人花費好幾個月所寫的論文結果。開始膽怯自己能力所寫的論文是多麼地無用。

儘管如此,著手實作論文再加上自己的算法設計,開始進行大量的優化探討,快還要再更快!如果寫不出教授滿意的論文,至少自己滿意就好。

第二階段

從沒想過會因為論文關連,再次翻起去年因可能沒畢業而著手的研究項目,降時間常數、降空間常數 … 等各種版本的實作。當初研究一點也不透徹,需求才是推動發展的主因!

「我真是半吊子吶」 - 3 月的獅子

研究中使用位元壓縮技術,將二元樹的記憶體配置弄得更好,又不能失去原本的操作性質,又要支持高效平行操作。折騰了好幾天,終於在常理測資範圍下,空間壓縮近 4 倍,平行加持下改善 25% 效能。回過頭來看看自己做了什麼,怎麼想都覺得很變態。

「啊!」- 斯特拉的魔法

第三階段

因為需求一週就看了三四篇論文,連續過了好幾週,嘗試抽絲剝繭找到能用的工具,論文也許就是炒大鍋菜,但沒人告訴你加什麼料最好,更沒有人告訴你炒出來的那盤菜是否已經有人做過,做過就不能發論文了,一切只能靠自己,感覺起來就像在賭博,指導教授不見得有空理你呢。

實作技巧發揮到極致時,讓我們結合所有理論吧!一切皆為 $O(1)$ ,在平行上也 $O(1)$ 給你看。在十一月時,這一切發展得並不順利,根據理論推導的實作效能並不好,是不是有哪個傢伙的論文寫壞掉了?

「一個個都這樣 氣死我了」- WWW.WORKING!! 迷糊餐廳

實習工作

工作機會

實習工作在完全不懂的電路設計自動化 Cadence 公司,每一個名詞基本上只有電機系畢業的學生懂,而我卻要在設計工具上撰寫客製化的功能,聽起來是多麼不可思議。實習的日子裡,同時在思考自己適合哪一類型的工作環境,是否能在這種大公司工作,還是小公司下工作快樂些。

那些沒上研究所的小夥伴都跑去找工作,而我卻在論文迷惘下找了份實習,體驗一下未來的工作和生活型態是否為所需。聽者小夥伴如此地抱怨:

「快把我變成社畜!不,算我求你了」友人如此哀求道
「這種需求我從來沒見過!」

某天早上六點收到一封信,看著英文的信封標題,想說一定是沒有分類成功的廣告信,社畜就這麼一如往常地去上班!等待編譯如此地漫長,打混之際來看封信 … “Google 面試邀請,下周可談”,基於各種因素,最後還是辭退了這次邀請,畢竟沒學歷沒英文,實在無法讓自己滿意地去面試工作。

「噓!」- 吹響吧!上低音號

有些人覺得我浪費面試機會,但我足夠認識自己無法滿足他們的需求,現在還不是時候。你們才是更有機會的不是嗎?你們都擁有我想要的部分。

他們當時是藉由 Github 和 Blog 找到我的,努力經營自己的成果吧!總有一天,有人會因此欣賞你的。若沒有,就作為自己的最後一份驕傲吧!

工作環境

主管總是很有耐心跟我解釋顧客的需求和工具使用。身為一個工程師,對產品完全不熟悉怎麼跑測試,每一個元件之間的數學關係,多對一還是一對多,英文名詞聽得霧煞煞,有些還牽涉到多形和壓縮索引的格式。

相比從家教學生那兒聽來的,在一般公司就得自己摸,摸不好還要被主管嫌,而主管只會加油打氣,一點方向和意見都不給,甚至還導向錯誤的發展方向。仔細想想,這兒的工作環境挺不錯的。更沒想到公司在月底會替我們新進員工買生日蛋糕慶生,被排到十一月員工的慶生,心中很納悶明明過了快一個月,遲遲無法反應過來。

「生日禮物」遞上
「??」
「來一下,來吃生日蛋糕」
「???」

「不管怎麼看 都是有人想找我茬」- 吹響吧!上低音號

各個 Team 的成員和主管都有來,要求我們說些願望什麼的,對於咱這個肥宅而言,一夥人吃蛋糕的場景可說是零經驗,心中的小鹿都不知道消失到哪了。


2016・冬・上・結束

Read More +

轉折序曲

2016・秋・始

雜務生活

上一屆的學長被拖到七月最後一天才口試結束,快八月底才送論文離開,實驗室雜務頓時落到身上來,心情非常複雜。離開的學長留了了一句話「不用擔心,你永遠有學長!」的確,當兵休學的學長們還不確定何時回來,目前還有數不出來幾屆的學長,前人所經歷的驚濤駭浪無法想像。

不過對我來說,在這一年內轉變好多,已經可以自己騎腳踏車去光華採購實驗室器材,從一個不出門買東西的肥宅是相當挑戰的。然而,決定要買什麼仍然非常非常困難的,目標求在各種約束條件下,能購入物品價值在未來可能所需的期望值最高,這問題在競賽中的約束相當多,用到現實生活中,連輸入都不給!

助教生涯結束

起初,因為沒有人願意接 PF 課程助教,實驗室成員首先發難接下,當下也不確定其他助教的素質,還是暫時性地接下來。就算是簡單的 C 語言,也不會每個大學畢業都很熟悉,連我也是半吊子的,要教台灣第一學府的莘莘學子們,沒有能力也要有責任學會,壓力並不小。

開學初助教名單尚未決定前,打開信箱十封中有八封都是助教工作相關的,沒意外地,第三輪噩夢即將開始,當然,助教這裡沒有必過法寶,寄信詢問是沒用的。

「我給你加油」- 這個美術社大有問題!

當助教聽起來不錯,但自己的未來呢?心想論文連個底都沒有,覺得自己做什麼都是在逃避。按照普遍的流程來看,不少人題目決定好就陸續在剩餘兩學期慢慢做。

也許,很多朋友會說「去找指導教授討論看看」當然,我也這麼嘗試過,教授總是回「自己回去想想」我想研究是一個人的戰爭,不然就沒有研究能力吧?別以為老師總會給你方向。如果你遇到貴人給你指點,不妨多留點感恩的心吧。

「完全無法溝通」- 這個美術社大有問題!

先不談論文內容要寫些什麼,對我來說用英文寫才是最大的難關,於是老師今年連課程小考題目描述都不寫,叫助教輪番用英文寫,每一週都要替學生寫小考題目,為了領區區的七千元,寫題目描述、生測資、提供解答一手包辦,處理學生雜務外,還得處理額外的系統維護和新功能加入。

用「學生本業是學習,不是賺錢!」安慰自己,花了兩三天寫好的英文描述,上陣前被 PF 全改掉,嫌我們描述複雜且沒邏輯順序,條列式描述全被改成好幾段的故事描述。我想學生們也很困惑,到底是來練英文的,還是來學寫程式的,條列式不是很容易編寫程式嗎?我自己認為,初學者在英文單詞對應邏輯判斷的 邊界條件 非常難適應。這些不是我追尋的理想,也不是我喜歡的交流學習方式,再加上有實習工作來找我,於是推辭掉了助教工作。

「我要推辭掉」- 這個美術社大有問題!

推辭掉助教工作後,在職班博班學長向我問道「要不要去他們公司實習,目前論文也沒有方向吧?」仔細想想,換點環境做事也許能找到些什麼,於是帶著零基礎的英文去了外商公司實習,對方不嫌棄我這一部分讓我好感動。每週花個兩天到公司上班,其餘日子就在實驗室處理雜務接電話,教教學弟如何寫 C。

然而,去公司實習的過程並不順利,指導教授 PF 向我要求走學校正常管道,心裡這麼想

「什麼是正常管道呢?產學合作嗎?」
「透過產學合作計畫不知道要申請多久,而產學合作當作論文發展的一部分嗎?」
「去年看著產學合作的情況,又不給數據進行實驗,猜想數據情況寫論文,他們也不採用得到的理論」
「系辦轉發的徵學碩的實習生的公司徵人信都有,為什麼我就不能去外頭看看?」

老師只回了我一句「這可能是違法的,你還有領實驗室計畫的薪水」當下的我非常不能理解,這是嫌我工作時數不夠?別的實驗室研究生不一定有薪水可領,那我也沒有一定要領的使命。與其擔心我不領實驗室薪水會餓死,先想想一個月六千連吃飯都不夠,還不能外出打工的道理都不能理解,又不是在台北有家住。都來台北讀書了,那一點點錢的約束還不如自由點更省錢。

結果,老師擔心我助教時數不夠 「助教簽退時間不能造假」,更問我 「當初找你來做什麼的?」,畢竟系統大部分是我寫的,不然學弟們又要花一個學期從零開始撰寫系統。回顧當時問助教意願時,我只回了「能不當嗎?」心情更加地複雜,為什麼用這樣的口吻反問我這些?

「明明『活著』才是最痛苦的」- 橘色奇蹟

最後,相信自己所做的事情沒有錯,向系辦申請助教離職手續。

指導學弟

雖說沒有接任助教一職,看著碩一學弟們弄小考題目、出測試資料到編寫程式風格,經驗和見解沒有預期中的多,於是夜間指導碩一學弟寫程式、操作環境,講著怎麼寫比較好、比較不容易出 bug、要怎麼抓 bug,多設計某個算法可以更快。回頭一想,是不是太過嘮叨了?

可是我好想從討論中挖掘更多更好的想法啊,在上研究所的這一年裡,能討論的對象大部分都不是現實生活身邊的人,跟著網友們學習。現在,請帶著愚蠢的我前進吧!

「真說起來我自己都不清楚自己對什麼感興趣」- 斯特拉的魔法

本實驗室管理機器是最麻煩的,大部分的經歷中都不會有管理伺服器,出事解決的經驗更少,而我也是學長慢慢指導和自己投入大量時間才會一些。當然,剩餘這一年中要把伺服器交給學弟!

在某一夜中,看學弟順利裝了兩台 server,卻莫名其妙卡在第三台無法安裝,於是一個一個排除可能性。

  1. 發現無法讀取 USB 開機,重新燒錄後的結果,仍無法抓取,連燒錄軟體都讀不到。
  2. 拿 Live 檢查的 USB 隨身碟,BIOS 自動偵測 bootable 裝置一時還沒反應,開機在失敗好幾次才進入 Live,隨後又偵測不到。
  3. 拿新的 USB 隨身碟燒錄最新版 iso,停在特定檔案燒錄十幾分鐘未果。(看來是壞掉)
  4. 回頭拿舊的 USB 隨身碟燒相同的 iso,順利進入並成功安裝!

不玩啦!一直重複開機一個小時過去、兩個小時過去 … 壞了兩個 USB,開新的還有問題,人品差到不行。

「看吧 這個世界中哪裡都沒有你的容身之處」- 3 月的獅子

與同學相聚

在十月的某個周末,我們來了個高中數學組的小小聚會。不知不覺經歷了五、六年,同學們各個厲害,有當警察在賺錢、目標當老師的、更有著決定往更高學府鑽研的,每個人說著自己的目標和生活的那份自信,讓我好羨慕!只有我找不到其他要做的事情,就只是寫覺得有趣的程式,卻不知道如何賺錢以及人生的下一步在哪。

「找不到其他要做的事情」- 3 月的獅子

網友軼事

在 2016 秋這個時候上映動畫《你的名字》,靠小夥伴們訂票,這是我們圖片幕後團隊久違的聚會。在去看之前,那些情人氣氛早就在各處醞釀,而我走在人群中會被嘲笑吧?

「我就是覺得 自己在人群會被嘲笑」- 斯特拉的魔法

平時我有玩線上遊戲〈楓之谷〉,有一位好友在國中時認識,在研究所的時候再次在網路上被搭話,才發現早在好幾年前就認識,談著談著,好像只有我記得那段日子的事情。常常會發現某些事情,我記得太過清楚,甚至連自己在娃娃車上誰推我去哪裡玩,買些什麼都記在腦海裡。

雖說是女網友,說特別也倒沒什麼,不過有男朋友的人還傳封訊息「走 我們一起去看」給我,當下的我還正在同一建築物參加表親的婚禮,而她還說著自己一個人去看電影的情況。後來還發現到,因碩二搬到學校附近住,她居然還住在附近,能推薦些吃的給我知道,生病時還能幫我找間診所。

機緣可說是巧妙呢


2016・秋・結束

Read More +

轉折前奏曲

2016・夏・始

前言

距離上次寫日記已經超過六個月,大學時期還能一個月寫一篇,一到研究所就沒辦法隨心所欲發揮。這也收到不少朋友抱怨到部落格怎停了,其一原因在於寫一篇耗費數個小時,想做的事情太多,不想做的事情更多,在這些事情交替之下,寫一篇看似有內容的文章變得相當困難,也許這就是逐漸步入社會吧!怪不得有些人一進公司工作,接著就音訊全無,不久的我也會這樣吧,能繼續耍廢打混的日子不多了。

雖說沒辦法耗費心思寫文章,但還會在 Facebook 上發動態,不用擔心,接著就讓我整理一下這幾個月的動態吧!

想要追到

拿著在高等編譯器學到的知識,針對以前運行效果不佳的資料結構進行優化,有著更快更好的目標,想要追求到妳的那份心情無法抑制。研究算法與寫題目,就像追妹子一樣困難,也可以選擇兩方,但咱的目標不多,先優化下去追,追不到再嘗試開平行追!別說我犯規,有時候需要點不折手段,你說是吧?

七月時 —— 加速 Delaunay 三角剖分計算,實作平行版本的前置作業,優化弄得萌萌哒停不下來。

「現在的我 不想讓這個後悔留到 10 年後一直殘留」- 橘色奇蹟

學長畢業潮

才隔了一年,學長接二連三地畢業、休學、換實驗室,不像當初大學可以擁有三年的學長,來一年就要準備接管實驗室的一些雜事,當一屆只有一個男生時,管機器之類的顯得孤單。有一次一個人扛著 2U 伺服器回來,裡頭硬碟和四張顯卡都插滿笨重處理器,才發現一旁的警告標語要求兩人協力安裝,頓時才發現大家都要離開這兒,剩下我這一個不堪用的傢伙。

在這難熬的碩一升碩二暑假,還能每天看得到大二同學認真刷題,維護機器不能停,又不時想著自己的未來在哪,論文又要寫些、做些什麼。儘管如此,熬過一年也突破當初在這裡的誓言,早在一年前,休學與離開一事充斥在腦海裡,若沒有各位的支持,說實在難以在這環境下活著。

「謝謝你們 我現在又有勇氣了」- ReLIFE

至強融核

想必每個人看到這中文翻譯名稱,都會覺得太酷了!

暑假都在忙著裝 Xeon Phi (中文翻譯: 至強融核),參考各個網站提供的資訊,在一些奇奇怪怪的環境下安裝,弄了好幾週才開始寫在別於 GPU 的環境上寫平行,最後看到 200 個核心同時運行,內心相當激動。至於,這些研究對於論文有沒有幫助又是另一回事,過度期待是不好的,畢竟買來的 Xeon Phi 版本屬於 Knights Corner (騎士號角),直到 Knights Landing (騎士登陸) 才是比較能抗衡 GPU 的版本。感謝各方的幫助,才完成環境設定,這中間充滿了 BUG 啊!

「各位看到、聽到、體驗到的 BUG 只不過是冰山一角,真的。」
「沒有 BUG 的改版就像我的女朋友,沒有存在過。」

「今天要向大神告白」- ReLIFE

接著,當然要在還有學長的時候,嘗試把 Xeon Phi 弄上 OJ 上,讓我們好好地挑戰平行極限,看看不同的平行環境的極致效能。然而,評測方法不常被討論,這變得是只能由自己定義,除了這些外,運行模式也不好處理,因為屬於協處理器,也可以提供特殊的運行流程,心中總沒有一個底。至今,由於尚未需要實驗,又暫時擱淺一陣子,只有出出例題來玩玩,但編譯器本身就有所不同,能加入的暗示也不一定有相同行為,這些都是很困難的。

「就算遇到困難 只要有你在 我一定能努力活下去」- Re: 從零開始的異世界

暑期外出

在這暑期的最後一波,小夥伴約我參加 COSCUP 2016,看到一堆 LLVM、一堆 js 以及非常非常多的 Pokemon Go,不少講者先讓附近站點灑花後才開始講,好讓大家不會太無聊。最大收穫是能在前端跑接近原生的 C/C++,會議提到的 emscripten 也許能來個前端 OJ,來個壯烈的分散架構吧!

這次會議應用周邊有一堆 hubot,這不得聯想先前亂搞的 AIML 和 live2D 初階應用,感覺有很多有趣的玩法。在大神們提到一堆網頁架構,需要將之前寫的整份砍掉才行,先破壞再創造,追求效能極致的道路。最後,活動收尾還是來個板橋高中桌遊團,在 Inker 的指引下,得知有一本《あなたの知らない超絶技巧プログラミングの世界》神書,讓你不只會 C,還會讓你成為魔法師!

(✪ω✪) - 這個美術社大有問題!


2016・夏・結束

Read More +

走在平行道路上-後篇

到頭來,最好的平行就是不交流,最好的進展就是不溝通。-Antisocial Parallelism

崩壞季節

在學期後半段,「四月是你的謊言,五月是否要換題目,六月是否要重新來過」聽到這些是否能明白我在說什麼呢?沒錯,就是傳奇的碩二崩壞日子,若是以畢業導向來讀研究所,花個一年或一年半修課,剩餘時間還要產出論文,想而知壓力是如此地大,有些領域甚至要實作一個系統,那麼忙碌程度就明顯不同,學長們崩壞的日子越來越近。

平行助教

追求優化極致

課堂作業的平行題目大多都是純數值計算,相當枯燥乏味,但優化技術屬於編譯器範疇,對於平行課程而言,只需要知道概念就能交差,對於這一點我也無可奈何,數次詢問老師是否要以速度作為評分標準,得到的回答都是「不」,心中帶點傷心,很想鼓勵那些寫得不錯又願意花時間鑽研的同學。看到沒有鑽研的同學嫌這門課簡單、好混,真的好想拉著他們一起來研究。

與同學互動

相較於往年的平行課程,今天很多題目都被設計可以 Online Judge,但有批改娘後,同學在半夜用不錯的想法寫出較快的程序,剛睡醒的我馬上發現自己寫的程序不斷地被幹掉,又花了一個下午加上現有知識再追回去。反反覆覆地過著這種日子,每天醒來都會畏懼最好的寫法會使用什麼樣的概念。心裡過得很痛苦,即使如此我也挺開心的,同學不嫌棄廢廢的我球員兼裁判,還願意在我出的題目下花時間,在下非常感動。

「即使如此我也挺開心的」-《Re: 從零開始的異世界生活》

當我拚命優化 local memory 存取,卻在替同學 debug 時發現意外地加速,於是新境界到來,順便跟同學交流一下加速部份,甚至連開檔時間都要省!一起追尋神乎其技的感覺非常不賴。

效能進展 3571 ms (24-core CPU) -> 2567 ms (GPU, partial local memory) -> 2472 ms (GPU, full local memory) -> 1675 ms (GPU, full local memory + work group opt) -> 967 ms (GPU, global memory + I/O opt + embedded kernel code)

「來吧 快和我一起來修行吧」-《田中君總是如此慵懶》

「看著秒速被拉近,從 profiler 中看出當前問題卡在 memory bandwidth & usage,要著手這一塊優化了對吧。」

「就算是 1 μs,也省給你看!」

「又有人刷新速度極限,睡覺時收到訊息很想裝死。要是再強一點就好了,又要等價交換什麼了嗎?只剩下生命了啊」

「相互學習競爭,別的實驗室好厲害啊,一不留意效能就輸了,得快點想辦法。」

「遇到第一次執行時慢 800 ms 左右,接下來都執行相同輸入又不見這消失的時間,難道是所謂的 library cache miss ? 可是執行檔不到 1 MB 耶。」

「照理來說,演算法迭代到後期的收斂是可預測的,所以硬體能猜測的效能會加快,從平行的結果卻是越跑越慢嗎?明明一開始贏了,後來卻輸了,咱不明白啊,一定是寫壞掉了」

「一早起床就發現相當疲勞,一打開批改娘就發現排名被刷掉。如果贏不了,起碼不能輸,不然這樣有辱實驗室之名!M 之神啊,請賜予我力量活著。不然沒有信心活下去 …」

「動用腦中所有的智慧考慮這個問題」-《熊巫女》

事實上,這名跟我拚搏的學生只有一位 R04922075 古耕竹同學,就與 tmt514 談論的結果,一門課只需要有一位同學認真與助教一起學習就好,「一名足矣!」的精神已經深植我心。

後來才知道他之所以能在長時間拚搏都是因為住在實驗室裡,醒來就可以寫程式做實驗,累了就在實驗室睡,聽起來可是研究最高生活境界,當然聽起來是個廢人似的,但能省下龐大的住宿費相當吸引我,再加上在台北這種鬼地方,還得忍受每天一個多小時的通勤,先不談住宿有多昂貴,學校研究生宿舍不夠住真的不方便,不像以前中央大學,也許地理位置偏僻,研究生宿舍還一堆空位等著人去住呢!除非指導教授收不到學生,否則進住實驗室這件事情我還做不到啊。

「我做不到啊」-《田中君總是如此慵懶》

出題考驗

老師每週只要求同學們撰寫幾支小程序,套用平行有快就好,但時候發生平行反而慢,或者不如預期效果時,通常是因為平行撰寫後,導致編譯器的優化等級起不來,可是老師又不想讓同學學習優化,在兩頭難的情況下,只好進行自主研究,包裝成線上評測只是單純方便實驗,為了減少 IO 導致實驗不準確,可是費了相當大的心力在思考如何出題。

「你就隨便研究一下,然後自學吧!」-《田中君總是如此慵懶》

在沒有任何經驗傳承下,大部分的程式碼都被學長摧毀,拼湊零碎的知識弄成一題,再寫各種版本進行測試,調校參數進行實驗,簡直是在做大規模的研究似的,每天都如此反覆地度過好幾個星期。

「現在我的心裡已經裝不下你了」-《田中君總是如此慵懶》

思考如何解題、設計題目時,總會瞬間 CPU 全滿,誰也無法搶資源!這樣的日子過久了,覺得身心相當疲勞。

「現在的我需要休息」-《熊巫女》

到了學期後半,步入分散式計算的領域,但不知道能不能用單元測試的想法,建構出一套測試 Hadoop 題目的系統,雖然沒辦法完全模擬群集計算的環境,作為驗證程序正確性也有一定可靠性。採用 Hadoop Streaming 的方式進行 Judge。

曾經未完成的夢,是否在這裡能找到答案?

超艱難修課進行式

期中考

迎來在台大第二次期中考,遲遲無法適應這邊的考試方式,一部分原因也許是在以前學校大多都有考古題撐腰,而現在屬於無依無靠的情況下,又加上題目是一坨英文,看錯題目意思的機會太高,而在答題速度方面考試時間上會來不及,期中考變得一項大挑戰。其中一門課提供開書考,甚至允許同學上網搜尋答案,但是一打開試卷,突然冒出了一題「請看以下這一篇論文,然後回答下列問題」頓時的反射動作是直接跳過,經常看的英文論文通常是十幾頁在跳,考試時間兩個半小時,沒時間耗在這。

然而,在考試結束後,老師特別講到「作為一個研究生,看論文的能力很重要的」於是特地被老師點出來「你怎麼沒寫那一題呢?」只能苦笑地回應,在心中暗自地述說『因為我怕英文啊』那一題佔了 10% 成績,連看都沒看就放棄了,而那張試卷寫到最後一刻才把所有題目寫完,到底該不該慶幸沒去看那一題呢?

「我一點兒也不知道」-《熊巫女》

心靈打擊

這陣子受到強烈打擊,原因可以歸納出以下幾點:

  1. 大學長火速交了女朋友並且擺脫魯蛇行列
  2. 弄了半天的環境,被橫插一行突然 PASS
  3. 寫得程序在不知名的情況下被女同學說很醜
  4. 程序一直寫不好、不快
  5. 愚蠢至極

碩二學長則一直在暗示要抓交替,如報帳和財務管理、伺服器管理 … 等,準備進入三者皆無的狀態,徹底用到廢掉。

「你真的被詛咒了嗎?」-《Re: 從零開始的異世界生活》

新生活挑戰

由於助教薪水大概一個月七千,但發送方式不是學校支付,拖了好幾個月才會到,當然一個月七千在台北吃飯,若要吃點好的,一個月七千一點也不夠,都到了這把歲數,還是要想辦法養活自己的一小部分吧。於是小夥伴表示「薪水到現在都還沒發出來,一個月六千哪能過生活。」最後在小夥伴的催促下,Morris 打開家教網找零工啦。但打電話是多麼令人害怕得一件事情 …

「我絕對不會這麼失敗的」-《田中君總是如此慵懶》

被學長推去面試家教,明明都已經鼓起勇氣出發,卻又過程中潑冷水。去也不是,不去也不是,這搞得我好混亂,到底還能相信這世界什麼地方?

「妳這麼關心我,真不好意思,其實你不用太在乎我的,我喜歡一個人待著。」-《田中君總是如此慵懶》

白活系列

加速 NPC

「同樣都是人類,為什麼差距這麼大!」-《線上遊戲的老婆不可能是女生》

當年在 NCPC 搞不出來的 Problem I Christmas Gifts (NP-hard),在賽後用 DLX 運行效果不錯,在啟發函數加上延遲標記更是屹立排名前數位已久。最近又因為平行把題目挖回來討論,在去年釣到大一學弟來解,便以飛快的速度擊破測資,最後達到加速 20x。再把當初需要跑 30 秒的測資來運行,現在只需要短短的 50ms。而都這麼快了 … 應該不用平行吧。

動態規劃

為了出題目,根據研究論文後的結果,出了一題常見的動態規劃題目,也就是 matrix chain multiplication,儘管算法最終可以加速到 $O(N^{\log_2 3})$,但在 30 年前就存在 matrix chain multiplication 的 $O(N \log N)$ 作法,那在 $O(N^3)$ 套了一堆剖分方便平行到底在窮忙什麼?

「當面對諸多選項時,我實在不曉得到底該選哪一個才不算錯。」當一個 Flag 打開之後,瞬間掉了不少 Performance …

近期活動

最近才把原本要出題目的測資補起來,論文誇張的加速似乎是跟非常非常蠢的版本比較,但快個兩三倍仍相當值得,編程複雜度也是增加兩三倍。各種層面的題目都已經全數實作好放上批改娘上提供線上評測。心想當研究一直發展下去,難道都不會窮盡?清單上的靶子長得越來越奇特,研究學者果真是一群變態啊。

「我已經失去活下去的信心」-《田中君總是如此慵懶》

學期最後一堂 Workshop 結束,心裡總算舒坦了些,不用每周在廢物的羞恥 play 下度過。感謝上課同學們賜教予我!

「謝謝」-《田中君總是如此慵懶》

Read More +

走在平行道路上-前篇

前提摘要

這學期修課過得相當恐懼,期初上課就受到多方刺激,因為許多課第一堂都問說以前有沒有學過什麼,易想而知地,對學店逃出的我而言,只能默默在心中說「有聽過這個詞嗎?難道就沒辦法修課,這樣子根本沒有課程可以修。」幸好地,雖然沒有受過台大大學部課程的指導,大部分的內容以前都自己研究和玩過。

回頭看看,那些英文授課以及期末實作論文之類的,內心恐懼越來越深,而在下學期要報英文論文,學長因為連發音不正確或者用詞錯誤受到老師的深入指導,每一次開會都久戰一個多小時。而連基礎英文都只能靠 google 翻譯,為了確信實驗結果,都必須親自實作一番才行。腦子不斷地去喘測未來,估量這學期不間斷地抗戰的生活,然後還要受到老師嚴厲地批判。

接下來,就以圖文的方式回顧這一學期吧!

解題相關

逐漸地放下在 UVa Online Judge 的刷題日子,更沒有參與各種線上例行賽,由於曾經寫非常多的題目,仍然有不少人經常來詢問題目,不管是學校課程或者是 UVa 上的舊題目都會被拿來問。然而,有一些特殊案例是拿著世界總決賽等級的題目來問,一看就知道要寫個天昏地暗,說不定還不會的題目呢。

「來,請吧」-《為美好的世界獻上祝福》

只是比別人稍微努力一點,對於高難度的題目反應是相當慢的。當然,我還是盡力回答,不過那陣子還要趕作業,閒暇時間一點也不想再開題目,一開下去不知道會不會一整天就過去,這樣可就沒辦法好好寫作業,滿腦子都是揮之不去的題目。所以有忽略一些人的提問,在此向大家說聲抱歉。

實驗生活

燃燒經費

從碩一剛進來時,碩班學長已經擔任採購財務管理已經兩年,為什麼是兩年呢?這些就要留給本人來說,事實上這裡很多人都充滿兩年以上的回憶,若要成為這裡的一分子,負擔是非常沉重的。每學期都要消耗實驗室經費,經過半年的我仍然幫不上學長,沒有研究目標就不知道要怎麼樣的實驗環境,能提出的採購項目原則上都不會通過。

「對不起,我太沒用了」-《蒼之彼方的四重奏》

那一陣子,由於要架設實驗室的群集計算,花了好個星期都沒辦法把網路架設好,一部分原因都是因為想要在虛擬機器如 Xen 上面維護,這時候網路設定和應用程式之間的權限開放變得困難,這些牽涉到軟體設計,參數總是不如預期地運作。

為了解決管理介面每天都睡不好,每到實驗室看著旁邊吵到不行的伺服器,不想接觸那無法運行的廢鐵們。這時候就提案買個 安眠藥 之類的,可想而知地被老師打槍,因不久之後因為課堂要使用,建造不起來的壓力非常大,再加上實驗室已經沒人有架設經驗,對系統比較熟的蕭大帥還要忙著畢業論文,只好用毅力嘗試架設。這故事的最後,採用原生的方式完成,暫時先別為了防止系統掛掉而採用虛擬化技術保護。

巧遇英文

蕭大帥學長看我破爛的英文,設想推薦我學習英文的方法,例如去學校語言中心聽力練習,或者到圖書館借閱英文文法書籍,又或者參與大一英文課程,然而都因為時間點不對,而且修課過重而沒有動力參加,英文帶來的恐懼對我來說不是一時造成的。但是看英文字幕的動畫不是問題,可惜地歐美翻譯速度慢,再加上翻譯味道對不上,一部分是文化上的不同,這導致要找到對應詞彙困難,有機會再來採用英文字幕看新番吧,擷圖一定非常有趣。

「You were asleep for 15 years but still have a silver tongue」-《只有我不存在的街道》

路人搭訕

每天過著早上九點左右到實驗室,晚上十一點左右回住的地方,其一原因是要避免上班族群和補習班下課學生。每天過著像上班族往常的通勤生活。

在某次下雨的夜晚,看到窗外的雨停了,便拿著來滴著雨水的傘提早離開,快速地走在人行道上,突然一旁有聲細語傳來「你正要回家嗎?」轉過頭來看,原來是名剛打完工妹子,心想『還好不是什麼怪人,但主動跟我搭話也有一點怪人成份吧?』心中充滿地慌張回道「是的,剛從實驗室離開。」

「哦,你是研究生嗎?我剛從打工那裡下班。今天都沒有少收錢,超開心的,之前經常少收錢」帶著愉悅的語調回道
「辛苦你啦,你在活動中心打工嗎?」因為沒見過面的面孔,為了確定身分還是問些資訊來吧。
「嗯嗯,在麥當勞打工。」
『…』帶有疑惑地,可是我一點也沒印象,去過幾次麥當勞,但店員的年齡對不上的。
「不過我都在內場忙,所以可能沒有見過吧。」

聊著聊著都走到捷運站上,一路上只應答一些簡單的句子,突然來個人靠在身邊聊天,難免不受到驚嚇。到了捷運站,一般都直接走樓梯而沒有特地走到有電扶梯的入口,也許就因為要跟著我走

「可以借我攙著嗎?」她攙著我的胳膊走下去,這時候幼小的心靈受到沉重打擊。
「你有在練肌肉嗎?感覺是有肌肉的觸感 …」
「沒啦!」聽到內心不斷地尖叫、嘶吼,這一切都來得太突然。

「確實在啊,腦子不正常的孩子。」-《為美好的世界獻上祝福》

看來經常到實驗室打混的日子,導致逐漸地看到幻覺,總算可以達到擴充實境的地步,由衷地敬佩自己。

算法數學分析

經由學長的推薦,選修陳文進老師的「演算法數學分析」課程,這門課可說是各種演算法常見的數論技巧,在競賽中也非常容易見到,但從看過數學家是如何定義這些符號以及運算性質,這門課可說是增廣嚴謹數學定義與工具的好課。

然而,每週寫起作業來非常刺激,雖然水泥數學課本〈Concrete Mathematics〉大部分都有提供解答,但是解法就不太明確,有提供驗證答案正確性的參考,於是乎有各種神妙的解法,甚至不用套用課程所講的一些技法,老師也非常鼓勵同學用一些已知的知識來推論答案,有時還比教科書來得簡單扼要。

寫起作業每次大概花了一天到兩天,每週一個章節,老師沒講到的章節要自行閱讀,難度不會太高,花點時間坑一下基本上都能完成。作業推論則是經過一個星期的哀嚎,有時候六日推不出來,放著過好幾天才突然想到,數學的美妙近在眼前卻總是差一步就能推出。

「大家就愉快地化為塵土吧」-《為美好的世界獻上祝福》

由於這門課已經很久沒開,沒法找到合適的人選擔任助教,而常見的球員兼裁判的人選卻不選這門課,於是每週作業大家輪著改。有一次我改大家的作業,看到許多神奇的寫法,但也非常地痛苦,腦補了好幾十分鐘仍猜不出這傢伙在寫什麼,而我們寫程式的人,又經常失去一些數學常識,如 程式的等號和數學的等號是不相同的。若這門課程有助教,這助教一定會崩潰的!

奴工打雜

老闆又叫我把批改娘架設給 Data Structrue and Algorithm (簡稱 DSA) 課程使用,雖然跟他們實驗室要了一台 伺服器安裝,經過三番測試終於架設起來,只有稍微跟他們說明如何建置題目和加入使用者。畢竟是做免錢的,剩下就看他們造化。

沒想到最後還是採用老方法,繼承他們 DSA 去年的腳本改作業,畢竟要設置批改系統非常不容易。而上次交給電機系使用,他們成功地運作這到讓我感到意外,資工系反而沒有花時間架起來玩。

過了不久收到 DSA 課程來信要徵助教,想到已經擔任一門課助教,再一門會往生,有人還認為我會想去當 DSA 的助教呢?若是當了,早就來一場助教與學生之間的效能拚搏,想到若要協助架設批改系統,多麼令人感到戰慄。

《無彩限的幻影世界》

超艱難修課挑戰

清明連假都在寫作業,每天都看似好像有點進展,程序仍然沒辦法跑。覺得程式越寫越退化,退化到與組語奮戰。覺得各課程作業非常噁心,一年抵四年所學,都覺得快被後輩看起來認定是個廢物。如果寫不出來,是不是都是我的錯呢?

「不全都是你的錯嗎?」《好想大聲說出心底的話》

看著作業需要的 LLVM API,看不懂文件只好猜呀猜,針對文件窮舉各種英文姿勢,歷經崩潰的驗證思路後,才察覺流程果然有點詭異,確定描述上的瑕疵後,換個思路打掉重來吧!也許還需要寫點測試,才能知道到底有沒有寫對。於是作業又再次進入輪迴,進度從零開始!

平行助教

提前研究

在學期開始前,預想而知地會受到老闆指派當平行程式助教,從上學期 C 語言程式助教那時開始,平行設計的課堂題目就開始實驗,把平行題目放上批改娘系統上,沒想到大一新生也有嘗試去解決那些題目,台大新生的學習能力遠遠超出我的想像。

研究如何平行程式不算難,但是寫得好與壞差別很多,大部分的情況都會快上一些,慘的時候甚至會慢上數倍,經過一層層地解析,研究為什麼會變慢,慢是因為什麼因素所導致?是架構嗎?還是運行流程?又或者是算法重複計算?當遇到瓶頸的時候,只能埋頭苦幹地研究,深刻地體會到研究並不會提升智力,只是增加知識層面而已,像我這種笨蛋卻過著研究生活,怎麼想都奇怪呢!

「也不會提升智力了」-《為美好的世界獻上祝福》

優化挑戰

平行不只有平行,牽涉到硬體架構,隨著平行的需求所進行的算法設計,若整個算法對硬體友不友善,將會影響程式的快慢。最常見的就是快取問題,第一個遇到的是 Structure Of Array / Array Of Structure 的不同,針對使用層面,沒想到他們居然會差異到 10 ~ 20% 效能差異,也就是遠本跑 50 秒的程式,居然可以提升到 40 秒內跑完,若要發這種論文,想必需要知道很多硬體設計。

「Study Hard」-《無彩限的幻影世界》

製作批改系統

如果沒有正常執行完畢,莫名其妙伺服器的內存量增加,也找不到地方砍,重啟顯卡也沒辦法解決,眼睜睜地看著內存爆炸。OpenCL 要製作成 Judge 題目還有一段路要走,每次 Judge 就重新啟動 Server 是最慘的抉擇。

「這跟說好的不一樣啊?」-《Re: 從零開始的異世界生活》

大致上知道 Memory Leak 的出現點,不管是程序有錯或被強制中斷都來不及執行釋放,少釋放一個物件造成內存少 100MB,經過兩三百個案例就得重開機。暫時解決方案是寫腳本偵測記憶體用量,指定超過用量自動重開,一旦沒寫好將變成不斷地重開。

好不容易架設好批改系統,但是測速度有嚴重的啟動損耗,有時候在沙盒裡面運行還特別慢,當只裝 nVidia driver,啟動 OpenCL 基本消耗一秒多。為了使用 Profiler,意外地安裝 CUDA 相關插件,頓時啟動消耗變成毫秒等級。為了解決這奇怪的現象,還一度把伺服器搞壞,整台重灌才順利解決。

《為美好的世界獻上祝福》

Read More +

神境求生六十天

過了好幾個月沒有寫 Blog,原來說來話長,但絕不是沒有內容可寫,部分生存活動可以在 Github commit 上面見到。大部分時間都在處理批改娘系統 (Judge Girl Online Judge) 的架設,接著都在弄大一程式設計課程的練習題設置,由於追加功能的關係,寫網頁耗掉大量時間,強迫症總是讓我想討戰極限,套一句最近常講的「做好做滿」如果不能做好做滿,敷衍了事就對不起自己的靈魂!

進了台大什麼都不會、什麼都聽不懂,這些事情都已習慣。大學畢業之後,剩下的求學生涯都是 Bonus Time,那段等待死亡的時間看清自己能力的侷限,因此哪敢在這裡奢求什麼,大部分的人都是來求碩士畢業,而我呢?到底是來這裡做些什麼事情?

助教人生

《迷糊餐廳》

開學前幾週才跟幼琳老師 (翼世界站長) 把系統架好,架好之後陸陸續續開始有學生開始上來寫程式,既然是台大學生肯定是很厲害的,畢竟在這四年不斷地被台大學生擊潰,學生中起碼有幾位有如神一樣的存在。有趣的事情有很多,如「雞兔螃蟹同籠問題,好多因為螃蟹十隻腳算不出答案來詢問 … 不是八隻嗎?」看到新血們的努力,心中澎湃的情緒湧出,這些傢伙很快就比我更厲害了。

《迷糊餐廳》

但這件事情還沒有結束,由於幼琳老師換實驗室 (原因在這裡不能說,台大各種黑暗面),而其他學長因為其他雜事不接 TA 的工作,變得老師開得課只有我一個是實驗室的,其他助教是由老師從別的實驗室找來,但操作文件不夠完善,其他 TA 能幫忙的事情並不多,幼琳老師又要應付新實驗室的計畫,然後就開始活著孤立無援的生活。感謝的是,有幾位待畢業的學長 (待畢業原因不能說) 和已經順利畢業的學長偶爾會來實驗室,有問題還可以請他們幫忙看。

《野良神》

逐漸地發現這雜事相當耗時間,儘管這類疲勞是快感,但其他助教幫不上忙讓我有點生氣,明明都是有領錢的,而且它們還有台大原生種,雖然系統上不會操作,但修改題目描述、寫 C 程式驗證和生測資總是沒有下文,原本以為會主動冒出來的,看來總覺得我一個人幹就好,最後幾天看不下去,只好認賠殺出,他們都沒有競賽經驗,這一點令人擔憂。

老師出的小考題目有點競賽水準,絕不是以前大學亂學的語法小考,這一點讓我很興奮也很失望,原來台大學生這麼厲害,幾週內就把好幾個學期的內容學完,失望的地方在哪呢?準備小考題目事件繁重的任務,每一週小考生殺大權都在都在我手上,兩班快兩百人的分數,要是測資沒有處理好,抱怨聲會席捲而來。一個人處理這些事情,心裡好慌好無助,原來大家都為了畢業而努力,其他小事先擱著吧,而我為此犧牲吧。

巧遇劇場

《全部成為 F》

在台大碰巧遇到高中學弟,一下就是四年不見。

「好久不見」
「你怎麼會在這?」似乎沒法理解我為何在這裡
「我也在想『我為什麼會在這 …』」

暗地裡訴說

《四月是你的謊言》

因為題目太難而抱怨被學生責 ,你們是最強的也要成為最強的不是嗎?而真正強的人都忙著自己的事情無法教你們,只能由我來了,真的對不起啊。

Read More +

不懂的點滴

對研究所本身並沒多大的興趣,但仍一不小心有那個資格讀研究所,接著就被眾人催促去讀,的確我在此外沒有專長,但也不表示對這非常擅長,「有些事情,不試試看怎知道。」此話一出,無可奈何。

好不容易畢業,第一個問題除了找教授收留,另一個困擾是住宿,台大抽宿舍在我暑修英文時已經結束,連抽的資格都沒有,扣除掉北北基的同學,中籤率也只有 10% 左右,咱對此也沒有太大想法,每個月算住宿費 5000 到 8000 左右,而外頭找房子也差不多是這個價錢,套房則是接近萬元。

在還沒找到住宿的地點,暫時在別人家暫住一陣子,對台北生態相當不適應,每天搭捷運上下已經成了日常生活,每日開銷多一個麵包錢,以前中央住宿去便利商店要 15 分鐘的路程,現在若要吃點好的,看來要走比較遠去覓食,看到自助餐簡直是救星,也許能連續吃一個月!

研究所想要做什麼?第一次找教授目標就是算法相關,這麼說有點模糊,那用點排除法,網路硬體比較不能測試,個人對其不太感興趣,無法實作表示無法錯誤,更無法驗證理解。或者是數學梯度相關的機器學習、類神經網路,以前線代、微積分沒學好的債務,研究所估計是還不完的。

後來看到平行及分散式的實驗室,感覺實驗內容範圍可以接受,做好在裡面休學的心理準備,原本打算找純算法的教授,但被教授說請三思,的確我這種半吊子的算法理解很危險,那做點稍微應用的。當然平行分散這種加速方法,有很多替代方案,加速計算 = 減少算法複雜度,兩邊可以同時做,但算法設計的概念就不同,死亡 flag 插得穩穩。

進實驗室還有點緊張,在人生地不熟的環境生活,丟個垃圾都覺得麻煩,這裏人有著什麼樣的文化、必須做什麼樣的事都不懂,看著實驗室牆上的 LL 和其他動漫壁紙以及防潮箱的各種手辦,帶有一點親切感,沒想到這兒也有這樣的風情。看著實驗室的一角,充滿紙張的桌面,碩二學長再三問我「確定要選這個實驗室嗎?畢業機率去年好像是 38% 的樣子。而我們這一屆折損了一些人。」學長的話語聽來略帶威嚇,看來我走不出去了。

嗯 … 不久之後要跟教授約中午買便當過去談話,說這幾週做了什麼有趣的,便當問題是一重大挑戰,要是不仔細想想,絕對送坑給教授吃。而今天聽即將學長跟老師談話,沒想到老師打錯學長的名字,學長一度覺得「老師連我的名字都沒記住,還要下星期交出大部份的論文,其實我都只有實作,然而那還不完全,根本沒辦法下筆。」看著學長不斷地訴說學術的黑暗面,他說他要從打開窗戶跳下去,那樣的畫面已經自動浮出。

找教授的第一步,首先被問的是每個科目學了什麼,專題選了什麼,接著問道我解題目有沒有碰過跟實驗室相關的,接著又問近幾年 IOI 的問題有沒有碰,PTC 排程的問題有沒有看到,如果沒有就去寫寫吧!於是找完教授的幾天,過著一如往常的解題生活,順道開了幾個題坑,把以前一直沒解決的問題依序處理。

如果我還活著,下次再做生存回報吧。突然跳下去什麼的 …

Read More +

在醒不來的夢中探索

前情提要

某 M 成功在最後一刻內完成服務學習時數,卻英文畢業門檻待在學校暑修英文,為期長達三周,每周一到五每天上六小時的課程,是否會改變某 M 什麼呢?

暑修英文篇

在六月盛夏,看著同學們匆匆忙忙地走向人生下一階段的道路,學校逐漸空無一人,認識、見過的人越來越少,儘管是臉盲的我,想不出名字、不確定是不是見過面的人的次數也變少,想必是更沒機會遇到真正的人吧。

《吹響吧!低音號》坐無法實現的夢是非常愚蠢的

暑修開始的第一天,老想著「只有愚蠢的自己會遇到這種遭遇」清幽無人的早晨,看著外頭在這一學期耕耘的稻田,在稻田小路中騎著腳踏車出門上課成了另一股滋味。在第一次課前,順道去便利商店拿網路訂購的書《程式設計的解題策略》,這個暑假能做出不同於去年嗎?儘管沒有特別的回憶或收穫,看看新書也許還不錯,但好像沒有曾經那股傻裡傻氣的衝勁。

《吹響吧!低音號》那麼快樂的時間就要結束了啊

很久沒到綜合教學大樓,想著裡面有為數不少的語言中心,那便是一場深入敵營的戰鬥,原本想在教室外看看新買來的書籍,想著與世隔絕的數學問題,好安慰心靈。沒想到能遇到曾經住宿在一起的轉學生。

「嘿!你也來了。」好久沒遇到人這樣打招呼。比起班上同學,住宿一段時間的差異是很明顯的,雖然不同科系,曾經那段在宿舍互相抱怨的日子相當回味,若遇到班上同學,由於不算熟識,聽取抱怨時還要多想想。
「你為什麼來了?英文不是不差嗎?」
「是啊,但是管院的英文門檻太高。同學還跟我說『考前一天弄一下聽力閱讀,就拿七八百』」
「這種事情我也明白,鄉民常說到用猜的都有五六百,我都開始懷疑這個世界。」

平時自己想著一個簡單的數學問題不斷打轉,甚少去注意那些禮節,大多時候擔心別人正在忙,不打招呼應該比較好,說不定我還認錯人,也許他根本不認識我,不增加別人困擾!聊著聊著未來和現況,道出自己的我是話癆吧。

《吹響吧!低音號》怎麼感覺就我的特別大

第一門課是為前測而來,發現有不少的學生也來修英文,看著助教和老師匆匆忙忙地換了大教室和準備上課事項公布,正式開始之前,老師似乎非常意外地有這麼多學生。

「怎麼這麼多人,我們班有五十多位同學,你們有多少是大四生?舉個手一下。」老師問道。
「!」坦蕩蕩地舉了手,對於英文這種小事,早就羞恥感全沒了。
「哇,還挺多人的。為什麼你們要等到最後才來解決這個?」台下躁動了一下,想必在場都有各式各樣的原因。
「萬一暑假沒開這門課,你們打算怎麼辦?」老師接著問道,偷偷細語地說「就延畢吧!」
「好吧,暑假這門課有點趕、時間有點緊湊,所以大家要主動積極一點。」老師帶有苦衷地說道。
「不知道你們未來在外面會遇到、需要什麼英文。這門課就當作離開前的訓練吧。」

《吹響吧!低音號》

其實咱們都明白「主動積極一點」暗示著什麼,也就是沒有人會去管、必須得自己來,那我們又是因什麼原因聚集在一起?大多不就是自己來失敗了嗎?

過了不久,按照規定每天閱讀兩篇文章、寫兩篇英文摘要,提交給線上檢測系統,「英文也有檢測系統?」大部分 ACM 競賽的人大多都有這樣的疑惑,對於模稜兩可的語言評分是一件很困難的事情,儘管系統不甚完美,對於「這群英文廢物」而言相當和藹可親,只要騙過系統就完事。畢竟這是學校花錢購買的系統,咱們也不好多說什麼。

過了兩周,雖說一天繳交兩篇,實際上跟英文搏鬥是個難事,專注力無法像寫程式那樣一直運轉,因為寫程式明白一點「停下來可能就寫不出來。」因此一天總要花個四五個小時寫一篇單字不算難、語法錯誤連篇、邏輯不通的作文,拿著 google 翻譯與系統抗衡。

每天爬起床的第一個想法是「還是寫寫英文好了。」做什麼都提不起勁,已經過了兩周,每天催眠自己提交英文,除了系統回報,很希望聽聽人的意見,不然每天上一個全英網站,看著系統回饋的英文訊息,這段日子就像活得世界只有一個人似的。

除了英文摘要,最後一階段好像是寫作,所以比較困難吧。如果要問為什麼英文選擇題答不好,常有人說是日常生活用語,儘管單字看得懂,沒有那所謂的普遍日常,那要怎麼回答問題,每個選項都可以接受。

《銀魂》大家,永別了

過去的我已經不在。

Read More +

我的世界在路上 外出紀錄

前言

隔了一周,又跑中原參加一場講座。門檻壓力好可怕、好可怕,別人輕易跨過的事實成為令人怯步的記憶。人生總有那麼一兩個小事,會發現自己就是那 1% 不到的缺陷,那微乎其微基因突變雖不足以殺人,但足以折磨心理。

這一天,帶著平淡的心情出發,路程上想著一道題目,坐在陌生的圖書館中,時而發愣地等待靈感的出現,上帝並沒有給予我太多,那愚蠢又怪異舉止是在與內心世界掙扎的反應,在一旁的人群也許覺得是個怪人,人滿為患的情況下,身旁的位置總是空的,也許多慮了吧。

在講座開始前,把自己出在 zerojudge 的題目 b414, b416 寫了幾個不同解法,即使網路上有一些片段心得,有些事情還是得親自嘗試才能更加地體會。題目告一段落後,放下心去參與接下來的講座。

感謝舉辦活動的同學,願意讓我這外校生參加講座、特地向學校申請證明給我,以為這世界的人都朝著進度服從,規定之外、不在規定內事情都沒辦法做,「麻煩別人」對我而言需要 勇氣

《吹響吧!低音號》那時,我明白了

狀態

這次邀請的是旅行作家 Terry,聽到「旅行」「作家」兩個關鍵字,曾經在網路上瀏覽的文章給予的感覺,就是一個陳腔濫調的講座對吧?

事實有點不一樣,怎麼說呢,在正式開始前他分享了幾個小故事,說著他去分享講座、所遇到的人,講座中他給予別人什麼樣的經驗,而別人又是如何改變自己。在不同的國中小演講,他發現環境影響一個人的夢想,不能跟哥哥姊姊一樣聰敏的學生 A,在另一個領域演說、作文上有所才能,參與不少演說比賽的 A,卻突然不參與任何比賽,這件事情讓老師有所顧慮,父母那一句「功課要跟哥哥、姊姊一樣好,之後才不會像我一樣。」類似的話語使得 A 放棄自己的才能,而去想辦法在功課上與哥哥姊姊一樣好。

聽到這一半段,心想「這也是我放棄比賽的原因嗎?」還是 EVA 那一段話「不能逃避!不能逃避!」的掙扎,「無法做得比別人好,那就放棄吧。」回響著。

《吹響吧!低音號》不甘心地快死了

他這麼對 A 說「那你有發現你的作文演說比哥哥姊姊來得好嗎?」,學生應答「有。」接著 Terry 回了一段有趣的回答「那跟爸媽要求哥哥姊姊要在這一塊做跟你自己一樣好?」這時突然茫了,原來打破僵局這麼簡單,摸摸鼻子,暗自竊笑一番,笑著自己為什麼預期不到這樣的回答,把別人要求自己當作習慣,要求別人成了反常舉止,以後好好要求別人做得比我還好!像我如此笨拙的人,大家一定可以做得比我還好。

「演講時,跟那群小朋友說什麼大道理『要堅強、不要逃避、面對挫折沒有什麼大不了』他們聽不懂的啦,倒不如講講,踩過各種狗類型的屎分享,再去跟踩鳥屎的反應差別,還會有同學跟你分享踩牛屎的體驗呢。」

《飆速宅男》

他曾經想要單車環島,卻苦於沒有單車,將一段訊息說了出來,於是有 Terry 朋友從花蓮載了一台單車到台中給他,Terry 覺得也奇怪,那要怎麼把單車還給 Terry 朋友呢?Terry 朋友居然回答道「騎回花蓮給我吧!」聽到這一句我也傻了,住花蓮的我都清楚搭火車到西部都嫌煩,繞了半個台灣是很長的。對角線的最近距離是很短,但那段山路爬坡不是好方案。

「一生中總會有那麼幾個壞朋友,當你要去做一件事情時,在一旁煽火推你, 就好像死的是你,不是他 。也會有幾個好朋友,總會在你身旁告誡你,那樣做很危險的!不要不要啦!」- Terry

《Fate/Stay Night UBW》幹得好,你們這群壞朋友 (誤配)

大眾化的描述還真有 Terry 的風格,搭配肢體表達那該死的壞朋友,要跟聽者有所共鳴果然要這麼做吧!「說大道理我不懂,但你這麼一說我好像就明白」的那種心情,這方面我還得多學學呢。

「瘋子和勇氣只有一線之隔,而我常常是瘋子那一塊。」於是他出發了,在四、五天內穿過中央山脈到了花蓮,又經過好幾天才能下床走路,他在一年之初做了一件瘋狂的事情呢,今年的我又做了什麼創舉呢?寫寫心得、代碼、出個題目都不算什麼,咱居然 出門 聽了這場演講!我的一小步是人生的一大步。

曾經是在一家公司上班的 Terry,做在小小辦公桌的他,那時都有著一個普遍的夢想「幹掉老闆,那個位子就是我的!」這夢想是每個工程師的心言。29 歲的他第一次出國,不做幹掉老闆的夢想,出門玩玩最近火熱的 Gap Year 的舉止,看看有什麼更有趣的自己,並不是花錢出門看看別人,在別的地點用自己的努力換資源活著,拿著自己街頭賣藝的才藝,出去招搖撞騙? (笑笑就好),跟著朋友來個計劃「收集微笑」放映一段有趣的影片,看了好一陣子各國人的微笑影片,不自覺地自己也跟著笑「看著別人微笑,你的嘴角是否上揚了?」

前輩們要是過著更有希望的生活,我想我也可以過得很有希望,誰來替前輩們找到工作啊。

藉由沙發衝浪找旅宿,交換人生經驗、文化,他就這麼帶著烏克麗麗發送請求住宿,附加黑暗中華料理才藝「反正他們多數也不知道真正的中華料理,只要說我做的一定是中華料理就行了,太鹹、太油、太甜一切都沒問題的。」這樣招搖撞騙真的沒問題嗎?這時候暗自竊笑著,也許真物也不是那麼重要了,帶著自己有一點點的經驗,非專業都沒問題。

《果然我的青春戀愛物語搞錯了》世上到底有沒有真心呢

「交談怕什麼嗎?語言不好?有 Google 翻譯就行啦,這又不是考試。」想到英文考試就是一肚子的痛,Google 翻譯真的好用,翻譯品質不會是最好,能溝通就行啦!「而且沙發衝浪偏好找老人,因為老人說話慢,談話比較能聽得懂的啦!」這樣的出國技巧還真是磨練的淋淋盡致,真是無比佩服這位 計畫通 ,看似和藹可親的面容下,居然藏著一顆腹黑的心。

「這樣七十多歲的人都出國沙發衝浪」甚至在台灣 Terry 家住宿過,還隨手打著毛線。人啊,學個技能、改變第一步是困難的,但也沒有什麼不可能,那七十多歲的老騷包,還特地擔心跟著 Terry 一起拍攝影片的服裝呢,覺得衣著不好看還在那挑來挑去,身為一個教職退休的老人,要在彼此認識的小鎮做出收集微笑的活動,那還真是 害羞 呢。七十多歲的老人都在街頭做著平時只有年輕人做的事情,我是否也可以做點不一樣的?

《吹響吧!低音號》你一個人臉紅個什麼呢?

「成功不能複製,失敗可以學習。」要讓家人支持自己出國嘗試,要做些什麼?首先,先來個小旅行,逐漸地把時間拉長,讓家人明白你自己可以解決問題,對外宣稱「台灣是熱情的國家,遇到問題只要敢發問,就會有人幫忙。」對自己小孩是怎麼說「外面可怕,要小心陌生人,要注意場合。」這兩面情要怎麼讓孩子理解,到底是求助於人好、還是不求於人好?也許當前問題要先解決這個呢。

有比別人多一個機會到外處學習,回來要怎麼 分享經驗 呢?「說說自己遇到的問題,順道說說如何解決,這樣的內容才有人看啊,老媽肯定會講『看吧,就說會遇到這種情況』,分享那裏有多好玩、那裏長得如何,很少人想去聽的。」這一點到沒錯呢,覺得在 FaceBook 是一個反常的存在。不管如何,就是不喜歡看一個沒有整理過的長時間紀錄片,一定會打瞌睡。

節錄

  • 「出了遠門忘了帶錢,沒法賒帳,回家一趟也太遙遠,現場演奏怒賺菜錢,回頭結帳!爽。(高傲貌)」
  • 「旅行是一個機會,可以理解到自己的專長、發掘自己的可能性,是個機會,沒有一定。」
  • 「曾經為了搭個便車,在路旁等了五、六個小時,若你去問問女孩子通常等了多久『10 分鐘』沒錯,女孩子受到幫助的機會非常高啊,在我等了一個小時後,甚至想女裝一下,看能不能提高搭乘機率啊。」
  • 「不要說只有女孩子危險,男孩子在外搭便車也是很危險的啊,哪有什麼比較強壯什麼的,大家都是人吼。」
  • 「你看到男性提供者限定女性沙發衝浪,女性們怕不怕,若限定男性沙發衝浪,你說男性們怕不怕。怕啊。」

結論

在場聽者不多,講者仍講得相當有生動,沒有被空位的壓力屈服,話語讓我整個人都熱血起來。講著講著,好像能踏出第一步了,「對不起,看到離近的兩大門檻前,還是選擇退一步,在逃離畢業資格考前,沒辦法像用 Google 翻譯那樣地活著。」這場講座是個有趣的經驗,不僅僅是人生未來挖掘方法,也看到如何作為一個講者去描述事情的方法。

《灰色樂園》這輩子都將銘記於心

Read More +