2013年1月19日 星期六

我的健身設備

現在我幾乎都在家裡訓練,因為比較方便又省時間。加上現在天氣變很冷,所以最近都不在外面跑步,我超怕冷。今天我要來介紹我家裡的健身設備

前院

現在比較少在前院訓練,因為很冷,但天氣好的時候在前院訓練真的是很不錯,因為空氣比較好。單槓是我自己鎖上去的,因為我的電鑽很爛,鑽的時候手痠死了,不過裝完後非常穩,在上面搖來搖去也不會有任何鬆動的感覺。單槓很高,要跳上去才抓得到

我在這常做的一個訓練:
「蹲伏起立引體向上」* 100
就是一個蹲伏起立後跳上去拉單槓,做一百個


車庫

我超愛車庫,之前的人生中一直住在公寓裡面,以前沒有住過有車庫的房子。直到去年買房子後,才知道車庫的好,可以放東西,可以運動,可以在裡面修理東西、搞東搞西的 (還可以創業)。我最近都是在車庫訓練

車庫有個裝在天花板的單槓,也很穩,不過沒有前院的那麼高,這個伸手就能摸到


可調式啞鈴是我買過最貴的器材,記得好像花了接近四百塊,底座一百五十塊還要另外買,長椅可以拿來做臥推,以前還沒買跳台的時候也拿它來當跳台用


Parallettes查中文翻譯查不到,我是拿它來做倒立伏地挺身,這樣可以加大活動範圍。槓鈴我拿來做挺舉,就是把槓鈴從地上拿到頭頂,雖然不重但活動範圍很大,做一百個也是會累死人的。這東西很便宜,Amazon加上運費才50塊


這個現在很少用了,因為單槓加上吊環也可以做dip

我買了這麼多東西,如果有人問什麼東西最值得買,我覺得是單槓,其他東西都可以不用。練胸肩、三頭肌就做伏地挺身,嫌不操的夠就做單手伏地挺身,跳躍伏地挺身,倒立伏地挺身。練下盤就做蹲站、蹲跳、單腿蹲站、單腿蹲跳。只有背部,沒有設備很難練到背,我想不出什麼方法可以徒手練到背。拉單槓對強化背部很有效

再來第二個值得買的就是跳繩,因為很便宜又不佔位,練雙迴旋跳繩非常有效


2013年1月12日 星期六

畢業後的第一篇paper

最近我們跟USC的研究人員合發了一篇Paper
http://smahesh.com/HadoopUSC/
講的是一種用在分散儲存系統的糾錯碼

我來用白話介紹一下,不過會有點長,要有耐心跟好奇心的小朋友才可以看下去哦。(之前在另一篇<上班以來做過的事>有簡單介紹過一點點)

分散儲存系統就像是現在很流行的詞「雲端」,可以把大量的內容存到這系統裡,這系統裡面的構成是上千上萬台電腦,最終會把你在客戶端的內容存到系統中某台電腦的某個硬碟上,這樣的系統存在相當多複雜的問題,像是怎麼分配那個檔案存在那台機器,怎麼讓很多人會同時讀寫

其中一個困難的問題就是:在機器故障的時候,怎麼讓系統還能正常工作

為什麼機器故障這麼重要,如果你家裡一台電腦一年才壞一次,照這速率,Data center裡的幾千台電腦,每天都會壞掉幾十台


上圖取自paper,顯示在Facebook一個3000台機器的機群裡,每天故障機器的數目。如果說我們對故障不做任何處理,讀寫就會失敗,還有可能會永久失去資料

一般的做法把資料分成小塊,每個小塊都存三個副本,這樣子如果有一個副本壞了,可以去讀其他兩個副本,而且在這時候要快點再多複製一個副本,以保持副本數為三,這方法可以抵抗兩台機器同時故障,但三台就不能保證,這方法的缺點就是三個副本會讓成本變三倍

我們在Facebook做了一個Project叫做HDFS-RAID。不同於三個副本的方法,我們用的是一份原來的副本,再加上一些糾錯碼(Error Correcting Code)。糾錯碼在通訊領域是已經非常成熟的技術,在DVD、WIFI、3G,有通訊的地方就有這技術。你想想看DVD為什麼常常刮得亂七八糟還是能看,就是歸功於這個技術

這個方法的好處有兩個,第一就是空間變小很多,因為加上的糾錯碼只有副本的0.4倍大,原本變大三倍的資料變得只有1.4倍,第二就是容錯能力變強,原本可以抵抗兩個錯誤,現在可以抵抗四個錯誤,也就是能在四台機器同時故障的情況下讀取

因為我的背景是無線通訊,做這件工作讓我學以致用,非常開心。在一次Hackathon裡我就寫好了ReedSolomon(某種糾錯碼)的encoder/decoder,之後又用了以前學過的矩陣計算的方法讓它加快許多,現在這些Code都已經上線跑了很久,節省了很多儲存成本,為公司省下了可觀的金錢

但是這方法有一個缺點,就是修復的時候,要讀取十個不同的副本才有辦法修復一個副本,也就是說修復的成本增加了十倍,在我們的系統中讀取是硬碟的讀取,是一個重要的資源,而且修復時間短是很重要的,因為沒修複之前如果有更多機器故障,就有可能失去資料。在一般通訊中的用的糾錯碼(像DVD、3G用的),通常讀取是沒有成本的(這些資訊通常已存在電路的暫存之中),所以這種問題和通訊的問題是很不同的

跟我們合作的USC教授學生們想出了一個新的糾錯碼可以降低讀取的成本,並且跟我們一起測試這些糾錯碼的好壞,我本來覺得這些學information theory的人應該是眼高手低,但是他們很快看懂code而且自己改了很多東西,讓我很驚訝,而且這個教授對實務的問題很有興趣,他一直說他想解決真正的問題,他的理論也很強,讓我很佩服,我覺得做研究就應該做到像這樣才有意義

不過這個Project已經是一年多前的了,學術界的速度龜慢,一年前做的東西到現在才發表,我早已經換到不同的組,做完全不同的事了

Paper和source code可在此下載


2013年1月4日 星期五

Pomodoro專心法


最近習得了一個增加工作效率的方法,覺得有效,來分享一下

最近我覺得上班變得很沒效率,很難專心,常常到處看看,讀信或看Facebook,或看股票、看特價網站或用訊息聊天,尤其遇到比較棘手的工作,就會這邊摸摸那邊拖拖

幾年前曾經讀過一本講克服拖延的書叫做<Now Habit>,還在這裡寫了心得,我重讀了這本書,希望能提升一下效率,書裡面有個重要的觀念就是以「專注的半小時」為工作單位,重讀完之後我就想找個計時的app來用,在找app的時候找到了一個關鍵字叫,「Pomodoro Technique」

Pomodoro Technique是一種時間管理的方法,跟<<Now Habit>>類似,非常簡單,基本上就是先跟自己宣告,說我接下來的半小時就是要做某件工作,例如:找某個Bug,寫某個Feature,寫篇Blog,做投影片,再來就按下半小時的計時器,在這段時間內,除了這件事之外,不能做別的事,例如不能上網看個股票,回個Facebook message之類的,如果想到有什麼重要的事,就寫在一張紙上,然後馬上回到這件事情上面,如果真的不得已被打斷的話,就要重新計時,直到計時完成半小時,就是「完成了一個Pomodoro」

我覺得這方法的好處就是能真正的專心,因為中間如果分心了這半小時就不能算,所以到最後只有專心的時間會記錄下來,如果一天完成了四次,就是完完整整的二小時的專注時間,二小時完全專注可以做很可觀的事,比東摸西摸八小時來得強多了

通常我完成幾個Pomodoro後,會給馬上自己一些獎勵,看看特價網站之類的,給自己心理上建立一個正回饋

除了專注半小時之外,這個方法還強調一個短時間的休息,專注半小時之後休息五分鐘再開始下一次,然後連續做完幾回

用這個方式工作之後,工作的單位就可以用Pomodoro的數量來計,例如可以規定自己一天要完成幾個Pomodoro,也可以記錄自己一週每天各完成幾個Pomodoro,這樣可以追蹤自己的工作效率

這裡有幾個Pomodoro apps可以試,有的可以幫你記錄一天完成幾次,不過我最後用的是這一個

名字的來由,Pomodoro是義大利文的蕃苆,因為料理計時器常設計成蕃苆的樣子,所以以Pomodoro來當作Timer的意思,叫「Timer Technique」聽起來太遜,所以找個延伸義的外來語Pomodoro,一時之間聽不懂就能嚇嚇人,感覺就比較強大




PS. 本篇文章,就是我用一個Pomodoro寫出來的

Update: Web版的Pomodoro TImer: http://tomatoi.st

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/


2011年3月4日 星期五

宅男健身教室


我常常檢查本站的流量,發現本站最多人觀看的文章,是這個系列的兩篇:六塊腹肌怎麼練,我想一部分原因大概是因為本人為了讀者不惜犧牲色相,所得來的流量(其實也沒多少人看)

總之我想大家似乎對健身有興趣,本人雖然說不上是專家,但是力量、耐力和柔軟度應該遠在平均之上,因為我每天早上都會花一小時運動,這就是勤能補拙,我對於鍛練身體的方法算是小有研究

我每天早上都會照表操課,現在的課表是,一週長跑四天(一、三、四、六),重量訓練二天(二、五)、瑜珈一天(日),我每隔幾月就會重新計畫一次課表,我的訓練以這三種為主,有時長跑多些、有時重量多一些,因為長跑和重量基本上是兩門相剋的武功,所以我沒法跑很快(身體太重),肌肉也不夠大(長跑燒肌肉),但是我的目標是身體的平衡、健康、年輕,不是在比那些數字

我做這些運動的原則就是:簡單、方便、有效,準備工作要最少,要馬上就能開始做,要我花半小時開車來回健身房是絕不可能的,我跑步都是一開家門往外就開始跑,重量訓練和瑜珈都是在客廳邊看電視邊做的,我覺得只有維持它的簡單,才能夠持續,一件事一旦麻煩又花時間,就很難持久

今天我就要來分享一個重量訓練的具體方法給各位阿宅,這個運動是我目前每個星期二的課表,這個訓練非常非常簡單,只要一句話就說完了

每隔五分鐘,做30下伏地挺身、拉10下單槓,重複十次

就這樣,共計300下伏地挺身、100下單槓,總共花五十分鐘,很簡單吧,我通常還會順便用netflix看個影集,這兩種運動幾乎可以練到上半身所有的肌肉,而且所需的裝備非常的少,只要有一個單槓和一個計時錶就可以

我要先強調單槓非常非常重要,一定要有,必備!,用自身的體重做重量訓練,一定要用到單槓,不然沒辦法練到背的肌肉,背的肌肉非常重要,背闊肌是上半身最大的肌肉,比胸肌還大,這是一定要練的,練上半身肌肉沒練到背,就好像吃西餐沒吃主菜的牛排一樣,很多人覺得單槓好像很麻煩,但只要去買這種裝在門上的單槓就可以了,我查了在台灣的奇摩拍賣就有在賣,關於單槓的另一個問題就是,很多人可能連一下都拉不上去,你可以準備一張椅子,腳踏上去用一些力輔助來拉,慢慢地你會發現你不再需要這椅子了

至於伏地挺身,有當過兵的應該都不陌生,但是我從以前當排長就看過很多人伏地挺身亂做一通的,身體根本不直,下去的時候也不夠低,我連上帶體能常常做到一百下以上,但是大部分人根本就亂做,不但醜,而且又沒有效果,浪費時間,做伏地挺身的要訣就是,眼睛看前面、身體打直、還有心要誠實,不要騙自己說自己可以做五十下、一百下,然後亂做,先講求動作標準,再求多,一下都做不了的人,可以先用膝蓋著地做

另一個重點就是你要有一個可以每五分鐘就響一次的錶,可以去買這種計時器,我自己是用跑步用的錶,只要任何有interval功能的錶都可以,設定成每五分鐘就叫一次,每次這錶一叫,你就做30下伏地挺身、10下單槓,然後休息

至於要做幾下,你可以依自己程度調整,例如每輪10下伏地挺身、3下單槓,重點就是你每一輪做完時都要覺得自己快死了,一下也做不了了,那才夠,沒有的話就只是浪費時間,你想想時間都花了,就要操個夠本才行,不要客氣

希望各位阿宅都能擁有強健的體魄

--------------
宅男的星期二課表
器材:單槓、計時器
運動:計時每五分鐘,做30下伏地挺身、10下單槓
重複十次
--------------





2011年3月2日 星期三

Facebook Comments Plugin

Facebook有一個comments plugin
它是一個可以讓你放在自己的網頁上面的元件
功能是讓人以Facebook帳號在你網頁上留言
(見本文最底)

這個的好處是
一、方便:留言者不需登入就可留言
二、打廣告:留言者的朋友可能會來看或留言,一傳十十傳百
三、防止小白留言:Facebook有真實身份和朋友,比較不會亂搞

我在這邊以Blogger為例
教學一下怎麼放Facebook comments

步驟一:到Facebook生成html碼,點下面這個連結
貼好資料,按下Get code就行了,把這框框裡的code貼在記事本裡


步驟二:按Blogger右上角的Design
在設定的畫面中,選Design->Edit HTML

步驟三:插入Code,這一步有點小麻煩
1. 選取Expand Widget Templates
2. 找到這一行文字:div class='post-body entry-content'
3. 把剛剛存在記事本的Code貼在這一個標籤之後,如下圖
4. 把href="你的網站" 這一段文字去掉,取代成 expr:herf='data:post.url'
(如果略過4.每一篇post都會共用同一個留言版)

這樣就大功告成

天啊,寫這教學真累,比上班還累,累死我了

Update: 剛剛有留言的朋友,因為我還正在摸索中
之前設定錯誤,所以url有點問題,不能正確導回文章
經過修正後,這個問題解決了,現在都正常了
但是之前的留言卻沒法顯示了,非常抱歉

Update: 關於這個功能的Video介紹

Update:這邊有關於各種social plugin的介紹

簡單的東西有效,但很難商業化

昨天去參加活動,有人跟我說以前一直看我文章,但後來就停更了,其實沒有停更,我只是都換去 FB 分享了,因為 FB 才是流量所在,加上 FB 算法對外部連結的排序不太友善,所以我都沒在這邊寫了,想繼續 follow 我的人可以去下面兩個地方找我: fb.com/p...