2009年3月27日 星期五

富裕與貧窮

上週返家等車時,在便利超商翻了幾本雜誌,其中有個篇幅,大意是提到關於從富裕生活出身的小孩與貧困家境成長的小孩,兩者在外頭工作能力與心態處理。簡單地提到對於富裕小孩,可能相對抗壓力較差,以及過於樂觀;相對地,貧困小孩相較之下,抗壓強,但在心態方面,反而容易悲觀處理,使得壓力不斷地累積。


我覺得這段話挺有意思的,我恰好處於這兩者的中間,更可以說剛好體驗過兩邊的生活。


記得我在大學以前的生活,生活較充裕,面對未來的生活十分隨性,連指考也都非常隨性。記得國三至高三的生活,還花不少時間在網路上閒晃,或許是當時養成的生活態度,造就自己不嚴謹的求學心態,影響的層面還不小,簡單地舉例,像我的英文就非常偷懶沒學好。除此之外,在大學修課的態度也相較懶散,不少次只要能過就偷懶。


回過頭探討心態部分,我覺得富裕的生活真比較容易帶來樂觀心態,沒有生活上所謂的重擔,相對於事情的處理,有時容易過早放棄或是不負責,這些事會讓我想起為什麼外界總對七年級生標上草莓的字樣,只能說大部分的七年級生活相較於五、六年級刺比較不用擔憂的。


對於貧困的人,錙銖必較,帶來著不能失敗的壓力,往往成效不錯,卻也容易過於悲觀或保守。雜誌後面的建議恰好跟我自己的體會很像,將這類思維轉換成謹慎的規劃,只是,相較於少了霸氣,有時真的會花費比較多的時間。


另外,曾在某位學長的簽名檔瞧見:「有錢的小孩,什麼都比較會。」我覺得也挺對的,就拿資訊科系,不少人是因為家境關係提早接觸電腦,因此比別人早學,但也不用過於擔心,也存在不少強者是高中或大學後才掘起的。整體上因為資源較多,所以接觸與學習的機會廣,是不變的真理。


最後,反觀這個主題,其實富有和貧窮,並沒有什麼真正的贏家,反倒是好好地訓練自己,富裕時廣泛接觸,貧困時擅用有限的資源,也都將存在漂亮的成果!真正影響的還是個人思維,適時地給自己規劃、努力和不放棄的勇氣吧!


2009年3月20日 星期五

瞎忙的 External Sorting 經驗

什麼是 External Sorting 呢?一般寫程式會用到的 Sorting 不免是 Quick Sort、Merge Sort、Heap Sort 等,除了自己使用外,連同各大學出的作業,多是 Internal Sorting 。


簡單地說,就是把資料都紀錄在記憶體中,然後進行 sorting 的方式,都叫作 Internal Sorting 。至於什麼是 External Sorting 呢?就是當所有資料量大到全部無法同時擺在記憶體中,這時又想 sorting 時,就會用到的處理,便是 External Sorting 。


至於怎樣實作,很簡單,三個概念:



  1. 取部分資料進記憶體中

  2. 將記憶體中的資料進行排序,把結果輸出至檔案

  3. 不斷地進行 1~ 2 直到資料全部弄完。最後,將上述產生的多筆排序好的資料,進行合併的處理


假設現在有 1000 萬筆資料,且記憶體容量一次僅能處理 100 萬筆的排序工作,那就會分 10 次做排序,每次從原始資料拿出 100 萬筆出來,將之排序好後,輸出至檔案。經過上述的部分,最後會產生 10 個檔案,其各個檔案就是子部分已排序好的資料,最後,將這 10 個檔案內的資料進行合併。合併的方式,最簡單的是每次取兩個檔案,依序把資料排序與輸出。經由上述的步驟,直到檔案只剩一個。最後的檔案,就會是 1000 萬筆已排序好的資料。


這邊會用到的技巧就是使用 heap tree 。當然,效率上的追求,更可以 10 個檔案一起合併囉。這邊就是常說的 k-way merge 的技巧,也不難。


原先預定用 C 語言,三天解決它。結果前三天都在偷懶,每天大概寫 2~3 小時,結果最後開始要 merge 時,犯了一個錯!最後多花了三天進行 debug 。我犯的錯就是忘了簡單化以及過急著最佳化。這三天寫了三個版本,因為寫得過程中發現速度很慢,然後處於存在 bug 的情況下進行架構的調整,使得各個單元皆可能存在 bug ,導致 debug 時間成指數成長。彷彿從大學至今,還沒有 debug 這麼久的!最後直到最後一天,我才完成了一個沒有錯誤的版本,真的很累。


至於效能上,依週遭同學的實作經驗,基本上 sort 部分跟 merge 時間差不多才是好的結果,當然,可不行都很慢!當初,我的 merge 時間已經是 sort 時間得幾十倍,然而,我開始質疑自己的架構不夠快,因此重構,儘管重構兩次,結果仍一樣。直到最後一天所有的 bug 都解決後,洗澡時我才想到,原來我真正慢的地方是切資料的動作。後來,同學以 VS2008 的工具觀察,的確有百分之六十以上的時間會花在切資料,完全跟我想的 match 到!更加確認自己犯的最大的錯。


這次實作經驗,反而沒有替自己掙些自信,倒是重重地在自己的腳上砸了個大石頭,真痛!經過此次經驗,順道消消自己銳氣。過去還滿自信自己工作的實作效率以及成果效率的,但這一步退後又看得更遠,收穫也挺不少的。未來啊,又得回歸個人工作囉,時間得擺放在最重要的事物上了!


2009年3月13日 星期五

[寵物] 博美狗 氣喘


我家的小狗,大概養了兩年多了,博美狗。有時候跟牠玩得很高興時,牠總會發出一種似不連續的嘶吼聲,以我小時候在外頭跟那麼多野狗對抗的經驗,那種感覺像似野狗聲氣裝聲作勢的聲音,但情境並非如此,為何會有這樣的現象呢?


除此之外,今晚我家小狗又氣喘了,其現象就像這篇文章中的影片:[柚子] 有氣喘。雖然我們家人下意識都稱這個現象為氣喘,但我並不希望這真的是氣喘。其實這個現象已經有好一陣子了,只是我一直真的沒很嚴謹地看待,這次安撫過後,花點時間查資料吧!


透過一些關鍵字的查詢



有以列類似可參考的文章



另外,我看到一些需要非常謹慎看待的文章



由於我對這仍非專家,僅呈列找到的相關資訊,對於這些狀況,最好還是帶取給獸醫看看囉!(我家小狗比較像吃東西吃太快了,每次總覺得有人會搶牠食物似的)


[電影] 女孩請給我啪嘶

官方部落格:http://www.wretch.cc/blog/thelibrarian
預告片:http://www.wretch.cc/blog/thelibrarian/20754692


03/12 原本是實驗室固定的 Meeting 時間,晚間五點半,正當我們訂完便當,想說這次懶得出門,在實驗室吃一吃就能安心上路?呃,可以接著晚上的 Meeting ,約莫六點,老板走進來,第一時刻我正拿著錢以為是送便當的來了,最後,老板說今天不必 Meeting ,要大家去看看這部電影!因為,電影的成員恰恰好有幾位大學專題生!老板在實驗室跟大伙閒聊近期的規劃,我也把握時間嗑掉便當,趕在 18:30 前到了活動中心,只是,我還沒回過神,已看到長長一排的人潮,是的,大家趕著參加"女孩請給我啪嘶"的首映!


這部戲對我有很多共鳴,無論是劇情或是劇外那些努力拍片的志工,在此不討論劇情細節,留給其他人賞味的機會。


以劇情的延伸來說,大學不是在中正唸書的,剛到中正時,存在極不適應的環境,那就是女生太多了!我從國中起就待在男女分班的世界,上大學以為會好一點,可惜的,大學的應該也接近男女分班吧 XD 因此,第一次到中正時,還不太能適應男女比例較平均的環境,當時我就想了個問題,如果對於異性,扣除掉外貌後,到底還會有什麼令人想去認識的動力呢?很可惜,我還沒找到。在中正的時光,除了實驗室及修課會認識的外,我沒有認識其他異性了,算起來應該有大學多一點人,但加一加仍用不到十隻手指。


除了上述的體驗外,我碰到了一位高中學弟,他恰恰好這次劇組人員之一。


這位學弟是實力很堅強的,大二就修大三的課,所有的課程對他來說幾乎是用輕鬆兩個字,瞧見他的出色,我非常想介紹給我老板認識!因為這類人更需開導,不然容易走偏?透過一些極簡的生活分享,希望他能看到更遠的地方,所幸,幾個月前,我終於介紹他給老板認識,並且加入專題活動。


每次瞧見他為青春拼血汗時,讓我常常省思自己,發現過去的自己雖然本錢較少,但真正缺乏的是霸氣。這次拍片後,他發現自己想致力於藝術,也體悟出現況所學的,僅是工具,我覺得自己比他晚兩年體悟,當我有這樣的感觸時,我已經大四了,當時正遲疑著唸研究所或當兵,後續輾轉到了中正,讓我受益良多!當初我的大學室友只說了句話,在不同環境認識的人就會不同,正驗證著目前的經歷,學歷看似足跡,真正的寶藏是週遭的人脈。透過與學弟的分享,我也發現周遭有更多需要我拉拔的,讓我回過頭想好好照顧家人。


最後,這部片的起頭是由一群中正大學的學生,有的即將畢業,正想為自己留下些什麼,於是產生了這部趣味的故事,然而我自己呢?其實在這一年多來,也努力地想留下什麼,用自己能做的事灌溉。在民雄生活的步調、等車,甚至那星夜下的操場,都為過去的自己做了一次最佳的心靈調適。這部片,只是開始,真正的體悟是曲終人散後,靜靜地與自己對話。


2009年3月10日 星期二

[QT] 使用 VS2005 編譯 MimeParser

最近準備在 Windows 上去分析 Email 的資料,花了近兩天的功夫,找了幾套 C++ 的開發,但都沒有很如願地編好,直到今天,正式地對 QT 去編譯!


共找到兩套用 C++ 開發:



前者是 BSD License ,後者是 GPL License ,倒都還不錯!只是我比較偏好前者已完成的程式架構。然而,前者有用到 QT 上的函式庫;後者則是我丟到 FreeBSD 7.0 的機器上,並沒有順利編好,雖然內附 WIN32 的設定,但似乎有點老舊。


先把 mimetic 講完好了,細節請透過上頭連結至作者網站上觀看介紹,我只講在 Windows XP with SP2 & VS2005 編的過程:



  • 解壓縮後,裡頭有 win32 的目錄,內附 buildvc.cmd。

  • 我下載到的版本 mimetic-0.9.5 ,與內附 buildvc.cmd 所敘顯然有出入。請修改 buildvc.cmd 中 "\mime\mimetic-0.8.6p" 取代成 ".." ,這個動作是以相對路徑去取資料。修正完它,就可以執行 buildvc.cmd

  • 在執行 buildvc.cmd 前,請先設定好環境變數,例如 cl 的來源位置,若覺得很無助,那就從[程式集]->[Microsoft Visual Studio 2005]->[Visual Studio Tools]->[Visual Studio 2005 命令提示字元] 進入 cmd mode 吧!再接換到 buildvc.cmd 的目錄位置,接著執行 buildvc.cmd 吧!

  • 很可惜的,過程中就出錯了!懶得改 code ,直接去抓 mimetic-0.8.7 版!並重複上述過程,至少 0.8.7 版就編出來啦!

  • 以上是不負責編法,版本 0.8.7 大約是 2004 的,而版本 0.9.5 看壓縮日期好像 2008 年 10 月左右,理論上用新版比較好,有需要的請自行修好它,修好麻煩分享一下 XD 我太懶了


接著,當然就是跟主題比較相關的,我要編的主角是 Mime Format/Email Parser !很慘的是,又是一段路要走,我甚至在編其環境時,還偷玩超任遊戲被老板看到,哈。



  1. 安裝 QT 相關環境,這步佔了 95% 的時間!

    • 至於 QT 部分,有分商業版跟免費版,我是抓免費版,但新版的我搞不定,最後我使用舊版 4.4.3 版原始碼。

    • QT 官網


    • QT 4.4.3 版


    • 編譯它!一樣從 [Visual Studio 2005 命令提示字元] 進入,然後切換到 C:\qt-win-opensource-src-4.4.3 ,接著打 configure 後再按 y 等它設定好環境,接著再打 nmake 讓他跑!好像跑了兩個小時?雖然我也邊弄其他事啦

    • 最後,他其實沒有正常結束,但至少我知道它有編好 qmake 了。另外再設定一下環境變數,[我的電腦]->[內容]->[進階]->[環境變數] 新增 QTDIR 其值為 "C:\qt-win-opensource-src-4.4.3" 而 PATH 部分也增加 "C:\qt-win-opensource-src-4.4.3\bin"



  2. 編譯 MimeParser-1.1

    • 解壓縮擺至 C:\

    • 用 cmd 切換至 C:\MimeParser-1.1 ,接著打入 qmake !終於沒任何錯誤訊息,並且產生 VS2005 專案了!接著,你以為這樣就搞定了嗎?還沒

    • 由於裡頭用了 JBufferString.h 和 JInputStream.h 等類似的東西,需再下載 IOStreams 的開發套件!既然上兩部都無誤發現,相信這步也會很順利,一樣解壓縮完(C:\iostreams) + qmake + VS2005 編譯它,就會產生出 lib 啦

    • 切回 MimeParser 的部分,稍微設定一下 include path 後(C:\iostreams\src),就能順利進行了!




以上就差不多收工!


有了 header file 和 lib 後,接著就是抽空完成 Mail to Handle 啦。今天的工作就是玩 cmake 還有編出 MimeParser 。