2012年12月2日 星期日

快打旋風


最近又重新迷上了快打旋風

我國中時開始真正迷上這個電動,那個時候是快打旋風二代,記得國三時的暑期輔導,每天都會先到教室集合點個名,點完名後就把自己的桌椅拿去藏好,再從學校垃圾場裡的一個投垃圾的小洞爬出學校,前往電動間開戰

有一次爬到一半學校警衛狂衝過來,我正要開始爬,當下真的很緊張,想說我如果開始爬會不會被他衝上來抓到,後來我假裝自己是路人,就說我下課閒晃到這附近看見幾個人在爬牆,結果還被抓到訓導處審問了老半天,組長先是威脅一陣,後來又叫我邊半蹲邊想那些人是誰

不過我打死不認,一直說那幾個爬牆的我就是不認識,再蹲也想不出來,結果後來組長也沒辦法只好放了我,現在想想這事蠻好笑的

那時真的很迷電動,還有一次玩完回家,到晚上寫功課時才發現拿錯書包,很慌張地坐車回去找書包,小時候課本不見之類的小事都覺得很緊張,長大後覺得根本沒有什麼,小時候老師們都會很嚇唬小孩,都說被記過以後會找不到工作之類的

那個時候很窮,一道五元覺得超貴的,所以只跟電腦打,然後死了也絕不接關,都要把接關讀秒按掉再從第一關開始玩,這樣一個五元可以玩比較久

一直到高一還是常常在打快打旋風,不過好像到高二還是高三的時候就不流行了,到高三的時候我去電動間都是玩侍魂,後來阿扁就開始抓電玩了,我還有次打電動遇到警察臨檢,人生第一次坐上警車,被帶去警察局讓我爸領回,後來電動間就全部都關光光了,想想阿扁做這事真是有夠智障

我上班的地方有個區域放了很多電動,其中一台最熱門的就是這台快打旋風四代



我在公司有三個台灣好友,四個人有點像South Park裡那四個死小孩,每天在公司混在一起,互相幹譙跟聊八卦

三人裡面除了一位沒有童年的數學銀牌同事,其他兩位加上我都有深厚的快打基礎,一開始是跟這幾個台灣同事隨便打個幾場,後來漸漸開始跟他們以外的其他同事打,發現公司裡竟然有許多強者,我本來自以為自己快打旋風很強,沒想到自己竟是井底蛙,隨便就被其他同事幹爆了

後來發現了公司裡竟有一個聯盟,有個人寫了個網頁排賽程、計算戰績,就像網球一樣還有積分排名,真是太認真了!,而且這幫人下班後還會一群人帶著人手一支的搖桿,到會議室裡面研究招式

我跟另外幾個台客後來就加入這聯盟一起比賽,每天都要跟另一名選手打三局,然後每週有季後賽,贏的人就是該週冠軍,小弟我非常弱,但是上週有好好練習,有打進季後賽,但是遇到強者還是馬上被打爆了

快打裡面我最喜歡的角色是怪獸跟印度人,從國中起我就用這兩個人玩,以前大家都是用龍、肯或是阿力固,我就是偏偏喜歡用大家不用的冷門醜怪人,現在四代多了很多新人,也有很多新的玩法,我的招式都是從二代出來的,所以一開始都輸很慘,後來有漸漸學會四代的一些招,不過像focus還是cancel什麼的,腦子裡雖然知道有這些,但真正打的時候就想不到要用,只會用一些老派的二代打法

快打旋風真的是一個很棒的遊戲,從國中到現在,算算已經二十年了,春麗的生日是設定在1968年,都已經從當年的少女變成44歲的歐巴桑了,真是令人感慨,不過快打還是像當年我國中時玩的一樣,還是好好玩


2012年11月25日 星期日

上班以來做過的事


畢業開始工作,一轉眼就三年半了,上班以後、生了小孩之後,很多事情都改變了,我也很少在這邊寫文章,寫上一篇已經是一年半前的事了

最近我覺得我應該再回來寫些網誌

就先來回顧一下我畢業之後在Facebook做的事情,我的職稱是Software Engineer,就是一個普通的軟體打雜工人,這種工作在矽谷非常平凡,路上隨便一堆都是靠這種技能討生活的人

因為我不是Computer Science背景,之前沒有太多軟體的經驗,剛加入Facebook的初期對我而言是個辛苦的過程,不過很有趣,我一下學會了很多事情,在Facebook的新訓中心出來之後,我加入了Data Infrastructure組

這一組負責的是後端資料的儲存和計算,儲存和計算的數量相當龐大,儲存上可以到100PB (1PB = 1000TB)以上,計算上,一個計算可以到幾百個TB的輸入輸出資料,因為這樣龐大的數量,所以這不是件簡單的事情,要從幾百個硬碟裡讀資料出來,在幾百台電腦上計算後,再寫到幾百個硬碟裡,不但要夠快,還要安排不同計算工作同時進行

在這個組我除了打了很多小雜工之外,做了三件比較大一點的事

第一件事,收集每台電腦上的資源使用狀態,然後用這個資訊來改進排程器的效率,(排程器就是一台負責安排其他上千台電腦要做什麼事的老大電腦),排程器知道那些電腦有比較多資源,就可以把計算排給他們,知道那些電腦已經忙到爆炸,就不要送計算給他們,而且收集了每個計算的實際實用資源,這樣可以對資源做有效的管理,防止人為浪費,實際工作包含寫一個在每台電腦上監控資源的程式,還有改變排程器的演算法去使用這些資訊,這件事是我剛到這個組的第一件工作,我覺得很不錯,因為做這件事讓我對Linux和系統資源,(CPU, memory, IO)等等有了一些了解

第二件事,利用錯誤更正碼來改進儲存的效率,之前有說到這些資料可以到上百個PB (1PB = 1000TB = 1000,000GB),保存這些資料一年花的錢是非常驚人的,如果能減少儲存,就能省下可觀的錢,一般儲存的方式是把一個資料塊(256MB)複製三個複本,再把三個複本放在三台不同機器上

為什麼要這樣做呢?,假設你的硬碟平均用三年壞掉一個,你如果有一萬個硬碟,一天大概就會有十個壞掉,所以一定要有複本,而且要能在電腦壞掉時馬上復原複本的數量,不然一定會損失資料

我們做的改進就是不使用三個複本,我們存一個複本再加上一些錯誤更正碼,因為我以前是學通訊的,所以我對錯誤更正碼有一定的了解,其他同事對這方面可以說是完全不懂,我開發了在這上面用的Reed-Solomon Code(某種錯誤更正碼),還有一些監控和修復的邏輯,這個改進不但讓空間變小,容錯的能力也變更強,這讓公司省下了很多錢,這邊有一篇文章介紹這個技術,作者是我很尊敬的強者同事
https://www.facebook.com/note.php?note_id=468211193919

第三件事,開發新的工作管理和排程架構,本來整個工作管理和資源分配是在同一台電腦上做的,這台電腦沒辦法管這麼多事,常常爆炸重開,這一重開的結果就是浪費好幾千台電腦好幾個小時的CPU時間,我們的改進就是把工作管理分散到好幾台電腦上,只有一台電腦只管資源分配,這邊有篇文章介紹這個
https://www.facebook.com/notes/facebook-engineering/under-the-hood-scheduling-mapreduce-jobs-more-efficiently-with-corona/10151142560538920
我和另外兩位同事開始了這個計畫,我寫了整個排程器和一些接收工作的邏輯,做這個計畫十分有趣,因為能從頭開始寫了很多新的程式,和其他兩位同事討論和設計這個分散式系統,讓我學到了很多分散系統架構上面的知識,這套系統後來申請了專利,我也是四個發明人之一

去年九月時我離開Data Infrastructure加入了Database Engineer,在那邊做的也是資料,不過不是後端的資料,而是直接給Facebook使用者即時讀寫的資料,在這一組我參加了一個初期的計畫,我不確定能不能說在這個組做的事情,所以就不說了,以前在Data Infrastructure做的事情,因為Open Source,所以我才確定我能說我做了什麼

在Database Engineer組我讀了一些MySQL和HBase內部的程式碼,讓我學到很多資料庫內部的知識像B-tree、LSM-tree等等,還有對Facebook用大規模MySQL+Memcache,建成的後端有了一些了解

今年六月底,我離開Database Engineer,加入Search Ranking,這一組做的是搜尋結果的最佳化,在這一組做的事情,大部分都是不可說的,不過我最近做了一件事,這事是可以說的,我對Facebook的中日韓搜尋做了一些改進,之前你找中文人名,大部分的結果都是讀音接近的名字,但不是你搜尋的名字,我最近把這個問題修好了,各位最近有沒有發現中文搜尋變好了呢?

我覺得自己很幸運畢業後轉了行,而且能到Facebook工作,除了經濟上面有好的回報,工作本身也非常有趣,一下子你的寫的程式就能被上億人用到,是很有成就感的事情,公司對員工也非常照顧,有免費三餐、洗衣服、健身房等等小福利,讓生活變得很方便

在這邊順便幫公司廣告一下
https://www.facebook.com/careers/