2010年4月16日 星期五

我與影印店的邂逅

一看標題好像是要寫愛情故事似的,,,其實我只是想記錄與影印店互動的一些過程.不過說真的, 在我的人生中, 影印店真的是個不可或缺的要素!!!!至於為什麼呢, 請繼續往下看.

還記得大學要推甄研究所的時候, 推甄資料到了報名截止當天還在熬夜修改(因為那時候在出國與國內讀書之間掙扎), 直到下午兩點多匆匆忙忙到影印店輸出,裝訂..然後在快5點的時候到郵局寄出...郵局大哥還跟我保證說: x大已經收到你的報名資料.
另一次經驗則是大學快畢業的時候找的實習生計畫(summer intern program), 也是一樣的狀況, 到面試當天一大早才跑到影印店輸出, 一輸出完後就直接搭火車前往新竹面試.
另一次更誇張, 因為論文資料要趕申請碩博士論文獎的deadline, 早上11點拿給影印店說我下午3點要6本平裝本(這篇論文好死不死寫了一百多頁),,,影印店的阿姨還跟說我: 我們要進入戰鬥狀態了!!!
這次也是一樣很誇張, 明天下午要用的海報剛剛才拿去影印店輸出,,,,聽說明天中午才會拿到海報...拿不到就很囧了Orz...
不過好像經過這種rush hours的影印店我都會常常去光顧,,,大概是操的比較有心得了:)

2010年4月15日 星期四

Break Point

Break Point當然不是網球比賽中的"破發點",,,也不是在debug底下的中斷點,,,,而是改變未來會怎麼發展的時刻..
曾記得去年找工作的時候, 面試了一家很想要去的公司,
經過一的多小時的問答過程之後, 面試官問了我一句話:你的成績看起來不怎麼優秀, 又有一科英文被當, 在所有的面試者裡面大概排行居中; 又沒有對外比賽獲獎的紀錄. 就算我要用你, 上層也不一定會同意. 你是否可以說出為什麼我要用你的原因, 你有什麼淺力?

說真的, 我聽到這句話的時候恍神了一下,,,,
上大學前我連電腦如何組裝都不知道, 唯一知道的就是打電動.
上大學之後, 想說長大了, 不應該在跟家裡拿錢,,,但是又想靠"資工系"的名聲混口飯吃, 所以就跑去找電腦賣場打工, 幫客人修電腦; 從拔主機後面的電線都會害怕到可以輕而易舉的組好一台電腦開始了我的打工之旅,,, 但是電腦賣場打工的薪水不多, 所以就開始找理化科系的家教; 大二之後, 看到學長姐們都在計中打工好羨慕, 所以就跑去計中寫part-time的網頁程式, 一做就是兩年多. 雖然表現得不是很好, 但是有個很細心的老大以及很厲害又負責的學長帶領著我們, 還有一群學弟妹的一起努力, 終於有點小成果. 大三的時候, 就把在計中所學寫了一個超簡易版本的購物網站當做某堂課的期中作業. 大學專題則是換到很炫的3d-real-time rendering. 那時候還為了幫整個系統加速, 實做了一個叫做image-based rendering的做法, 很炫也很快:) 大四的時候, 修了某堂網路應用程式的課程, 實做了人生中的第一個搜尋引擎. 搜尋速度雖然不是很快, 但是嘗試了很多種的做法去測試效能的上限. 之後還因為對對單晶片有興趣, 所以跟同學一起修了單晶片實做的課程, 弄出了升旗系統的單晶片系統. 而這些成果讓我在大學畢業後就到同一家公司當實習生(intern), 還搞出一套parallel的test tool.(雖然不知道他們有沒有用就是了)....

上了研究所之後, 因為對效能的執著, 所以實做了數種資料探勘的演算法, 只是單純想要比較彼此的效能. 因為知道大學的成績不夠好, 所以對課業上事情還蠻專注的(雖然中間有許多非自願性的翹課--都是為了趕計畫), 而這個專注也讓我在碩一結束的時候, 拿到一學年數萬塊的獎學金(剛好可以繳一年的房租); 也因為修課的因素, 做了人生中第一個ftp server並支援openmp技術, 並且在兩年碩士生涯期間完成了數個大型計畫並有些順利技術轉移到財團法人單位, 並且投出了數篇的國際論文以及期刊.

不過以上這些話我都沒講, 因為在面試官問我的那一刻開始, 我沉默了.... 腦袋浮現的是一堆跟我類似的申請者, 而他們的申請文件裡面都是滿滿的書卷以及比賽獎狀.....而我的跟他們比起來, 真的苗小了一點.....之後, 面試的結果當然如預期所料,,,,,,在回台南的路上,老媽打電話過來問面試的如何, 我輕描淡寫的代過....因為我知道我的眼淚快要飆出眼框了...我難過的是: 為什麼我不敢說我所經過的一點一滴?? 已經過了一年多的今天回想起來,,,若當初不要想這麼多, 直接把自己所經歷過的事情, 一五一十的描述出來,,,結果應該不會變, 只是少了淚水跟這篇的碎碎念....

2010年3月26日 星期五

how to write an efficient code

之前寫code的時候, 遇到效能瓶頸的時候往往都訴求"multi-thread"的一個方式, 無論是自己寫pthread in POSIX或是 CreateThread in win32或者使用openmp. 但是最近才發現其實除了這些以外, 還得注意自己的coding style. 最是發現基本的要求就是loop optimization.

2010年3月23日 星期二

有一個名詞叫做"嘗試"

距離上一篇文章差不多一年了; 這一年來真的真的發生了很多事情.

在記錄過去一年所發生的事情同時, 也感謝在這些事件當中幫助過我的人; 無論你是我認識的朋友或是不認識的陌生人. :)

1. 人與人之間的相處: 有一個長輩對我很好, 無論是學業或是生活上的問題都會幫忙解決. 不過也可能是因為彼此太熟悉了, 漸漸讓我摸不清楚什麼叫做"分寸". 沒錯, 我變得很傲慢!!! 我記得有一次長輩在教導新人的時候, 我就插嘴進去; 完全不理會長輩. 大概是這件事情埋下了之後的導火線吧. 直到有一次我收到長輩寄過來的信, 信裡面提到"為學之道". 像我目前的作為就是"自以為是,未待持滿而發之; 自以為滿, 未待持滿而拒叩之; 而為學之道如叩鐘,如發弓,如田稼;叩之以待其鳴,持滿以發其弓,斂之以常其熟". 希望我這一輩子都記得這句話. 而得到這句話的後果, 就是跟人的相處上漸漸變的有點距離; 有些人希望可以多認識他/她, 但是又怕在說話上傷到對方, 然後就歷史再度重演. 不過為了符合這篇文章的主旨, 我還是得說服自己多多嘗試.


2. 出國: 自從三年前分手過後(滿三週年了, 真開心?), 就漸漸對一些新鮮事不感興趣了. 整天腦子裡面想的都是"工作, 工作, 還是工作". 有的時候一天會不停的檢查有沒有新信, 有沒有新的計畫. 可以說是忙到都忘了我是誰了. 當然, 也沒想過要出國玩. 因為工作上的關係, 有了一次機會去美國出差, 雖然出差跟旅行差不多, 不過已經忘了嚐鮮的我, 自然而然的就不想到處走走. 現在想想還真的不值得!!! 如果還有機會出國(差)的話, 一定要做些不會讓自己後悔的事情, 那就是"嘗試". 當然在旅途中, 還是發生了一些窘事. 也感謝一些朋友以及陌生人的相助; 讓我趕飛機的途中(因為沒帶台幣)還可以插隊買高鐵車票; 讓我在聽不懂老外問的問題的時候, 熱心的把問題放慢在說一次, 並且幫我cover掉一些"難以回答"的問題. 喔喔, 還有, 並不昰每個Queen U.都是英國那間Queen Mary U.; 還有不是毎個姓金(Kim)都從韓國來; 最後還有就是, 新加坡人很愛台灣. :)


3. 車子被偷: 08/09 因為大學同學聚會所以開車南下嘉義. 會開車過去的原因只是因為聚餐之後還有跟比較熟的一些同學們續攤; 也不確定在地的交通工具夠不夠, 於是就開車過去. 但是卻忘了那台車可是偷兒眼中的肥羊阿!! 才買不到三年的車就這樣被牽走了!!! 不過在被偷之前, 真的有很多預兆,,,,,,要南下嘉義前, 我爸還問我說要不要開他的車過去, 新車放家裡比較安全, 最近竊賊很猖狂; 在載完大學同學到嘉義聚餐地點的時候, 我還跟他說我爸提醒我最近竊賊很猖狂, 停車要小心; 停完車之後, 我還檢查好幾次車門有沒有鎖好; 在吃飯的過程中我還預感到車子會不會被偷, 但是我沒出來查看; 總總的因素都是預感....然後就發生了!! 這跟我說了一件事情, 就是人最忌"忘形", 而忽略了所處在身旁的危險. 也因為這件事情, 更看透了身旁的一些人. 只是要看透這些人的代價真的不小. 現在想想, 我好像真的很容易破財...不過既然會破財, 倒不如"嘗試"把錢拿去做善事, 至少是幫到需要的人而不是偷兒!!!

這三點算是今年的年度大事; 希望可以當作自己的一個警惕; 當迷失或是有小成就的時候再回來看這歷史故事, 借由警惕提醒自己 never do it again.

2009年3月29日 星期日

積極只要多一點,後悔就會少一點

這個就是我活了20多年所得到的心得.

2008年12月20日 星期六

clustering on thousands of songs ?

最近在做自己的research...然後要把數千首的音樂做分群(clustering),,,
input data是一堆mp3的音樂資料(每首約30秒), 透過imdct擷取之後可得到每秒38個frame的imdct值.
目前clustering的作法是以frame為單位做分群,,,
clustering的作法是用cast的作法....
大概評估了一下記憶體的使用量....3k * 30 * 38 * dimensions= 36M * dimensions
如果我們要建一個distance matrix, 則要 n^2 / 2 的memory size, n為matrix的dimension, 以數千首音樂為例, n = 36M.
這個需求量遠大於目前機器可以容納的physical memory 的大小, 所以透過disk的方式記錄distance matrix; 目前的話一個block 約 64M.
然後如果目前cache buffer裡面沒有這個similarity的值的話, 就更新buffer的值, 透過fully buffer I/O.
更進階的做法可以模擬OS的page fault algorithm, 來計算哪個page要被swap出去, 整個還蠻有趣的.
只是分群真的分好久....

2008年11月8日 星期六

Crawling Data in Amazon.com

最近因為research會用到music data,所以就利用Amazon提供的一個Web services(AWS) 。
第一步當然就先註冊一個userid,然後再看Amazon提供的programmer guide就可以抓data了。
不過有幾點事情比較有趣...主要的原因是因為需要music的content data,而Amazon所能提供的只有大概30秒左右的sample。當然,我還是把sample的曲目爬下來了...Orz(不知道有沒有違反著作權..不過我也只是做研究沒有商業用途)。
不過有趣的地方在於要找到某個mp3的原始url是一個耗時的地方(1. 從amazon抓html本身就耗時了; 2.要parse html找到正確的mp3 location也是個耗時的地方),所以就模擬了HTTP 1.1的作法...XD
先把系統預設(daemon thread)有10個可以跑的thread,然後每當要抓mp3 data的時候就叫醒一個thread(稱為mp3 thread)。 mp3thread只有一個動作就是抓mp3的url, 再利用stream的方式把mp3 download,然後繼續回去睡覺。daemon thread如果發現目前10個mp3thread都有再執行的話,就等待直到有其他mp3thread可以被使用為止。概念很簡單,不過卻是一個很基本的利用java做synchronize的問題。
不過mp3thread太多就會被Amazon reject掉,因為太短時間內有太多的request了..Orz