星期二, 4月 28, 2009

DOM

最近在寫研究所的研究計畫,需要用DOM處理HTML,目前是採用simplehtmldom這個class來處理。不過今天赫然發現這個class不會把text node當成children,所以跑DFS會漏掉tag以外的部份,如

<a>aaaaaa<b>bbbb</b>aaaaa</a>

在做DOM traversal的時候,a節點底下的child只有b,b可以看到內文bbbb,但外面的aaaaaa就無法用他提供的DOM traversal方法去找。class的原始碼大約1000行,可惜現在程度差,雖然大概看懂這1000行程式碼中自己關心的部份,但要改卻還沒想好改法,因為這個class把處理garbage(如HTML中的註解)和處理text node的部份混在一起,很難分開.....

好在剛剛想到了hack,直接用Regular expression把<和>中間的字全部都去掉好了XD 全文連結

星期一, 4月 27, 2009

影像診斷

過完影像診斷後,接下來是兩個禮拜的精神科,之後clerk就結束,就要當實習醫師上場了。

一開始聽到影像診斷課很多,本來感覺還有點糟糕。因為個人看過不少科,不願意教學,但也不願意放學生自由,於是就故意派許多沒意義的作業叫學生做:比如刀房罰站,或是點名蓋章,佔住學生的時間。不過這禮拜的影像診斷科倒是很充實。

前三天科內幫我們介紹了各種臨床上會看到的片子。包含CxR、KUB、CT、MRI。令人開心的一點就是科內很刻意挑了一些不走放射科也會看到的片子,也就是說以後不管走哪科,這禮拜學到的東西都適用。CxR的部份拜吳錦桐老師上的課所賜,老師點名起來問還可以唬爛的過去,其他的片子我的閱讀技巧就不是很好....

科內的教學氣氛個人感覺很棒,雖然有某位小兒科的大師故意挑了很多神片來考,比如看起來像RDS的CxR,其實是肝臟穿過橫隔膜。或是一張看起來像NG放歪的肺炎,其實是後縱膈長了neuroblastoma。除了這位老師以外,其他老師的教學都上得很開心,雖然該老師也提醒了我許多不足的點就是XD 全文連結

星期一, 4月 20, 2009

Gigabyte

聽朋友wugstorm說:技嘉的板子用料都不錯,但就是一大堆小問題,最近還嚐到了不少。

我家中兩台機器都用技嘉主機板。上次E2140想超頻,結果北橋過熱的悲慘故事記憶猶新。所幸現在因為找到某解碼包,居然不用超頻也可以順利播放某些高容量高壓縮影片,所以E2140的超頻模式理所當然的解除,就什麼問題也沒有了。

這次的問題發生在另外一台780G文書機。我想用780G開800*600全低特效打L4D,結果竟然好幾次打沒多久就整台機器斷電。本來懷疑是power出問題,不過打電話去問Ragwing才知道原來一樣是技嘉的板子北橋過熱的問題,只是前一張是不超頻就OK,這張卻連正常使用都有問題....結果後來跑去光華買了個4*4小風扇,用膠帶貼在北橋晶片上問題才解決。

中間還有個小插曲,在我發現電腦會斷電,還沒打電話給ragwing之前,我嘗試利用Super_PI去操電腦,以排除是CPU過熱造成的當機。結果Super_PI帶來了好消息和壞消息。壞消息是跑沒多久,用Core_temp看兩個核心都會破100度!!好消息是100度跑一段時間竟然沒當機,所以排除了當機是因為CPU問題。但這溫度也太離譜了。後來才知道,我第二張技嘉的板子當初買來CPU插槽的地方有兩片長條小紙片,那是用來墊高CPU用的:技嘉CPU插槽使用的富士康塑膠CPU底座,高度的設計不正確,導致CPU插上去以後高度太低,沒辦法跟風扇底部緊密吻合,不論用多少散熱膏都一樣。問題是我把那兩條小紙片拿去丟了=.=

最後我這個問題的解法,是自己找厚度適當的紙片,把它剪出四個角落的形狀,在不擋到針腳位置的情形下放在CPU的插座上,以墊高CPU的高度。這樣「修正」以後再開Super_PI,CPU的溫度上限就變成65度左右。

技嘉的板子,小問題真多QQ 全文連結

星期日, 4月 12, 2009

Data binding

這個禮拜繼續寫學姐的code,現在系統已經能夠快取新聞的完整內文,還可以用Flex寫出來的Viewer來和後端的PHP Script做溝通。

這件事情之前寫病理實切片系統也做過。不過那時是PHP直接輸出JPEG,然後用loader把PHP視為JPEG載入。這次是作到後端前端交換文字資料。

本來想說又要做需要花很多時間且bug很多的小Parser。不過查詢文件後發現有XML Binding這種技術:只要PHP端能輸出XML,前端的Flex viewer就能把傳回來的XML視為陣列或物件直接存取。不用寫Parser,連DOM Traversal都不必,ACtionscript好~方~便~啊啊啊啊啊啊啊啊啊

更神的是,還有一項技術稱為DataProvider,只要將UI的component(如DataGrid)的DataProvider指向XML變出來的陣列,且該陣列有設定[Bindable] metatag,那麼當該陣列變動的時候,UI component的內容也會自動改變。原理是Flex compiler會自動幫你產生getter和setter,並且在setter中幫你丟出事件。

倘若沒有Event-driven programming,那coder就要自己攔截所有可能發生改變的地方,或是用function模擬getter和setter,但這樣syntax就很醜且變數和getter/setter不能一視同仁。但有了Event-driven programming卻沒有Data binding的話,coder還是要自己寫程式處理資料的變動。有了兩者,要自動把XML轉成陣列,Flex只要寫零行程式,要加上Data binding,也只要一行程式。只要弄懂這個方法,以後程式內部的資料流動就非常方便XDDDD

現在把我丟回去寫C/C++,我大概會有回到上古時代的感覺吧..XD 全文連結

麻醉科

這週是去麻醉科見習。

麻醉科的見習生活就累了點,因為有位醫師盯得非常緊,人一定要一直在刀房XD。在刀房中最重要的大概就是看麻醉開始的過程。之後就是一直盯著monitor看病人的vital sign....不過後來該盯人醫師指出:看病人是要我們研究一些刀房儀器的用法,如呼吸器為甚麼PEEP要調正,呼吸速率怎麼給,肺泡壓力怎麼給...等。所以不算沒學到東西啦。

麻醉科也比較電knowledge,好在組內有個knowledge很強的myk同學,所以被電還不會整組都沉默。但跑完整個麻醉科,我還是搞不懂那麼多藥物之間的差別到底在哪裡。學醫學了六年,記憶力還是不行,挫折感還是重,唉...俗諺說:「上帝給你了一扇門,他就會關掉你所有的窗戶」大概就這個意思吧XD。上帝給了我比一般人好一咪咪的寫程式技術,就把我其他素質打成零了XDDD

麻醉科的生活,整體算是偏累,不過回家就沒有太多的事情要做,可以念自己的書或打電動,比起當初在外科某陳醫師手下見習時,每天要念Sabinston到半夜兩點才能睡,明天七點半又要到醫院的生活比,還是相對快樂非常多。

下禮拜是急診科。 全文連結

星期四, 4月 09, 2009

星期一, 4月 06, 2009

Flex source code reading - 1

Stack trace示範教學

昨天找到了Flex原始碼分析的影片,今天就看了約30分鐘(我還要讀麻煩的麻醉共筆囧),今天看到的總結一下:

首先影片的開頭,慣例性的擺上Flex和為什麼要念source code的introduction。有趣的部份是主講的歪國人先生slide套了星際大戰:天行者路克原本是個.Net程式設計師,他有個夢想是有一天可以擁有屬於自己的component,但因為.Net的class library是close source + proprietary的(我知道現在不是XD),非常難以擴充修改,他的PM覺得跟別人買close source的component就好,於是,路克先生每天都要忙很多雜事:確認維護合約,跟對方的工程師溝通,Hack他買的Component,解決修改之間造成的衝突。有一天,他遇到了一個謎樣的男人,告訴他有Flex這個東西,只是當他要把好消息告訴他的PM之時,他發現帝國已經宰了他的team,於是,他只好到大師那邊去受訓,學習閱讀Flex source code之道。這部份看了讓人精神振奮,很有趣的Introduction啊,要是大堂課也那麼有趣就好XD

後來歪國人先生開始展示他的魔術了。如何理解Flex component:比如一個按鈕,他的Life cycle呢?Life cycle是一個我之前都沒注意到的概念,要先想一個component從出生到滅亡大概會拿來做什麼事情,才不會在密密麻麻的source code間見樹不見林,在你看source code之前你就要先理解他!回到歪國人的演講,怎麼瞭解一個按鈕他的程式碼怎麼跟其他元件互動?答案是:1.繼承他2.stack trace。寫個子物件繼承按鈕,然後寫個子物件方法覆蓋母物件的方法,但內容除了印一行除錯訊息外就直接呼叫母物件的方法。那行除錯訊息就印出stack trace:哪個物件那一行程式碼呼叫了他。之後按下執行,實際上去玩弄那個按鈕,就可以看到按鈕的某特定方法是怎麼和其他東西互動的。搭配source code的命名方式和一點點經驗和猜測,馬上就能弄懂按鈕的設計在搞些什麼鬼。看見方法實際上動起來跳舞給你看是很棒的經驗,比躺著不動的source code有趣多了。

除了繼承的技巧之外,剩下的印象就是IDE和DisplayObject。IDE是Flex Builder 3。一樣的一套IDE,在歪國人手上拿來開發的速度就是和我不一樣。歪國人用了一些靈巧的快捷鍵,就可以快速作到我原本要花很久時間的雜事:如找出某物件的母物件到底在哪個原始檔,快速瀏覽這個物件的介面等,我要花五分鐘的事情歪國人只要兩秒。IDE在正確的使用下可以提昇如此驚人的效率提昇,難怪大家要用方便的IDE了。除了可以節省時間,把時間用於珍貴的開發而不是雜事之外。還可以節省精力。優美、臭蟲少的程式以及媲美造化的設計源自於充滿精力的程式設計師。當程式設計師覺得很累時,如被醫院的VS電的亂七八糟,他什麼爛code都寫得出來。

總之,這位歪國人先生展示的是一種和我完全不同的層次,如果說我設計的是小磚塊,那他設計的就是房子了。設計房子牽涉到更多的學問:團隊合作、理解別人,快速的抓住複雜物體的架構...這些都是我目前欠缺的。

最後一句話紀錄DisplayObject。DisplayObject是opensource Flex framework和底層flash VM的交接口,以上。 全文連結

星期日, 4月 05, 2009

Reading the flex source code

連結

或是



Flex開放原始碼已經很久了,而且我讀到的書大多都對Flex SDK原始碼中的OOP設計讚譽有加。只是雖然看別人讚譽的熱血沸騰,但我對大型軟體的分析實在是不行啊...市面上的書又是越高深的就越少,教Hello World的肯定一大堆,詳細教Component和Data Binding的就比較少。至於實際把原始碼拿出來分析的就更沒有了。

這東西一定要好好收看,看完後應該能功力大增XD 全文連結

星期六, 4月 04, 2009

Secret of Mana

這是最近在玩的一款遊戲,也算頗有歷史了。

故事的主線還蠻老梗:有個叫Mana fortress還什麼的要被釋放了。然後主角無意中撿到了一把稱為Mana sword的魔劍,因為這把劍禁止拔出,就被轟出了村莊,順路踏上蒐集道具,拯救世界阻止Mana fortress的旅程。

值得紀念的特殊之處在於我很少打ARPG,很久以前打過的Twinsen's Odyssey算是一款,不過那款有些謎題太機車所以就沒繼續下去。這款遊戲和我以前打過的Twinsen's Odyssey相比,敵人算是頗多,路上隨便走就是一大堆怪,好處是練等很順,壞處是打久會煩orz

遊戲的「週期」還蠻規律:村莊引發事件->冒險->打BOSS->村莊引發事件->....,相對就單純了些,劇情也沒什麼特殊,但整體遊戲性還不錯,目前快速通關中。

附上幾張遊戲相關的圖:





全文連結

星期三, 4月 01, 2009

科學研究證實玩FPS遊戲有助改善視力!

從ptt和聯合報轉來的,不是愚人節新聞喔XD


來自美國羅卻斯特大學的研究人員日前在Nature Neuroscience雜誌上發表了一篇論文,宣稱玩快節奏的射擊遊戲可有效提高玩家的視力水準。


來自美國羅卻斯特大學的研究人員日前在Nature Neuroscience雜誌上發表了一篇論文,宣稱玩快節奏的射擊遊戲可有效提高玩家的視力水準。

一般觀念都認為,小孩玩太多遊戲會有損視力,尤其會導致近視。但這項研究顯示,類似《CS》、《使命召喚》、《Left 4 Dead》等FPS遊戲卻是鍛鍊肉眼對比敏感度的絕佳方式。所謂對比敏感度(contrast sensitivity)是一種常用的視力測試標準,主要觀察肉眼發現細微灰度變化的能力,對於夜間駕駛、閱讀等活動極為重要,正常情況下會隨著年齡增大而逐漸減退。

主持該研究的羅卻斯特大學教授 Daphne Bavelier表示,一般情況下,對比敏感度無法透過訓練來提升,必須以佩戴眼鏡或鐳射手術方式來矯正,但測試發現,玩家在FPS遊戲中找尋目標並瞄準射擊的過程,卻是一種絕佳訓練,這種訓練雖不能真正提高肉眼的成像功能,但卻能讓大腦更有效利用視網膜成像訊號來分辨物體。

為證實這個理論,Daphne Bavelier和組員進行了兩項試驗。首先,對兩組發燒遊戲玩家分別進行對比敏感度測試,其中一組是死忠FPS玩家,另一組則並不熱衷快節奏的射擊遊戲。測試結果顯示,FPS玩家在對比敏感度測試中的成績高於另一組達50%。但這項結果又會引發另一個爭議:究竟是玩FPS讓他們視力更好,還是因為本來就眼力好才讓他們愛上射擊遊戲?因此,接下來的第二項試驗則請兩組非FPS遊戲玩家各進行50個小時的遊戲訓練,第一組玩《使命召喚》,第二組則玩一款同樣畫面華麗的非動作遊戲,結果第一組訓練後的對比敏感度提高了43%,而第二組玩家則完全沒有提升。

更重要的是,研究證實這種效果並非短期性的,Daphne Bavelier表示,“透過FPS遊戲訓練得到的對比敏感度提升可持續幾個月,甚至幾年,表現出明顯的長期效果。”不過,如果FPS玩太多,是否仍會出現反效果?Bavelier教授則回答,“就視力而言並不會,但對於你的社交生活來說就很難講了。”

CNET Networks原文報導 全文連結