2008年7月29日 星期二

右腳只是輔助的 (2)

距受傷的日子正好四週整。

上週末照慣例又去讓中醫師複檢,這回可以動的幅度又進步了。回家後開始練習走路,雖然走久了會痛,但腳踝能動的幅度一天比一天多,真難想像兩週前會痛到無法站,一起床腳踝又會因為血往傷口流而超痛。現在雖然右腳走起來相當地不靈敏,至少可以一拐一拐地走了,只不過走路速度比用拐杖還慢...。週圍的人看到我能走後,都用神奇的眼光看著我,這...只是普通的走路,我本來就可以走的啊!

2008年7月15日 星期二

Python class mthod

Python 原本沒有 class method,只有 instance method,這在一些情況下不方便,比方 factory method。後來 Python 的改版做了修正,詳細的說明見 static methods,以及後來的改良語法 decorators,兩篇文章的說明淺顯易懂,我就不在這轉述了。感謝 Aethanyc 介紹。

decorator 不只可改善 classmethod 語法,還可以協助當 function wrapper,用來做 log、檢查參數。官網的例子很讚,值得一看,這裡摘錄一段 singleton 的做法:

def singleton(cls): instances = {} def getinstance(): if cls not in instances: instances[cls] = cls() return instances[cls] return getinstance @singleton class MyClass: ...

有興趣的話可以對照 Ruby 版的 cache,Python 應該也能寫出類似的東西。我很喜歡這種由外包裝的寫法,寫起來很乾淨,完全不會影響到原 function 以及 call function 的 code。

2008年7月13日 星期日

查 Python 函式的方法

學程式語言的首要問題就是如何查函式,個人認為有良好的查函式介面,才容易推廣程式語言。

像 Java 有 JavaDoc,可從 Sun 官網查詢(個人喜歡用別人包好的 Windows Help 檔);PHP 官網也有便利的查詢介面;C 在 Unix 上可用 man page(硬漢工程師才用 C,啃點 man page 不是問題!); 個人覺得Ruby的官網文件不怎麼好查,不過用 Ruby 直接查到是滿快的。比方我記得有個 p 開頭的函式可以消掉陣列最後一個元素,開個 irb(interactive interpreter)這麼打即可:

[].methods.grep /p/

查到正確名稱後,再用 ri 查詳細用法,相當順手。

Python 在這方面弱了一些,這裡整理一下我目前的做法(從 Scott 那學來的)。首先,一定要裝 ipython(功能強大的 interactive interpreter),之後就可以利用 code completion 來查名稱,例如:

n [2]: a = “”

In [3]: a.sp
a.split a.splitlines

In [3]: a.split?
Type: builtin_function_or_method
Base Class:
String Form:
Namespace: Interactive
Docstring:
S.split([sep [,maxsplit]]) -> list of strings

Return a list of the words in the string S, using sep as the
delimiter string. If maxsplit is given, at most maxsplit
splits are done. If sep is not specified or is None, any
whitespace string is a separator.

注意,直接打 “”.sp 再按 TAB 是沒用的,因為 ipython 要按下 ENTER 後才能猜測先前輸入過的變數型別為何。名稱後加「?」可以叫出 __doc__ 內的說明。

若想像 Ruby 那樣搜尋特定函式名稱,得透過 __dict__ 或直接用 built-in function dir(),__dict__ 位存有 class 內的 methods 和 fields,下面的效果和 Ruby 相同:

print [s for s in dir([]) if "p" in s]

2008年7月11日 星期五

右腳只是輔助的

昨天老媽多事 (多事的總是老媽) 幫我在腳指擦膏藥,說是退瘀血,如果一直抗拒試藥的話,老媽會生氣。只好討價還價,像是要擦的話只能擦腳指,別擦腳踝;或是能不能明天再擦,別今天擦。結果又擦太多藥,害我午夜12點時腳指燙到得爬到浴室沖泠水,有擦過按摩膏藥的人,也許有體會過這種涼到發燙的神祕感覺。至於腳指發燙的唯一的好處,大概是燙得我感受不到韌帶的傷吧...。

今早去給中醫復檢,腳踝的可活動範圍又變大了,腫也有消,只不過傷最重的韌帶卻變痛了。不知道是不是因為上面的腫消了,它才可以開始發威(韌帶吶喊:「終於看到我了吧!!」),還是保養不當,所以變嚴重了,反正就相信醫生囉。

由於復原情況是正面的,今天除了推瘀血外,另給我 BONUS:「足背按摩。」痛得我微微冒汗,醫生說是穴道的痛,可以消炎。我覺得痛的程度可和韌帶最痛處相比,難怪綜藝節目裡的腳底按摩都痛得哭爹喊娘的,絕對不是節目效果,真的是言語無法描述,沒體會過無法相信的痛。另外醫生說我藥膏貼太久了,皮膚紅腫有過敏,得暫時少貼藥膏。

晚上回家後韌帶還是一樣痛,不太能碰地,這幾天有時可站,有時不能站,不過感覺上目前應該是有變好吧。希望明天可以站,這樣左腳的負擔會少一些,不過在左腳受傷前,我想右手手掌會先受傷吧,今天就有一點小狀況了。總之,目前唯一的心願是八月初可以不用拐杖走路,這樣行動就輕鬆多啦。

備註

雖說多事的總是老媽,母親也是最偉大的。在老媽細心的照料,大幅減輕少隻腳的不便。我可不是怕老媽看到這篇賭氣不幫我拿東西煮飯,才在這補好話的哦。

2008年7月10日 星期四

急性腸胃炎

才剛回台北,一週就生一種病。

前天中午開始發燒,最高燒到 38.9,間間段段地退燒又燒,原以為是腳傷引起的,但後來又覺得好像是胃,昨天晚上爸媽帶我去長庚看內科,陳碩為醫生說是急性腸胃炎,回想前天中午吃了夜市的水餃,可能是這樣吃壞肚子吧。雖然說醫生很有耐心,問了一些問題,不過光憑問診,簡單地聽一下腹部,就判斷是急性腸胃炎,感覺滿不踏實的,加上我胸腔很悶,心臟無力會痛,這部份醫生沒給什麼建議,只說胃漲消了後應該會好。另外醫生說可以喝舒跑加溫水,舒跑太濃了,加水稀釋後效果和打點滴差不多。我試的結果,滿有效的,肚子稍微餓就喝一些。另外要注意的是,水喝太多會導致電解質失衡,可以靠稀釋的運動飲料適度地補充,。

回家後先吃一次藥,飯前吃消漲止吐的藥,飯後吃消炎藥,結果有好一些。西藥真是神奇,一吃下去身體馬上有反應。以前吃西藥雖然會減輕症狀,但副作用也很明顯,像是頭昏、胃不舒服,這次吃的是胃藥,一吃下去心跳馬上加快,不太舒服。洗澡用熱水沖背時發現胸腔有舒服一些,深呼吸時比較不會痛,就用熱毛巾敷了一陣子,感覺好多了。我懷疑是前幾天撐拐杖背太酸,請家人幫我按摩,按太多次結果有點受傷,所幸熱敷一陣子,睡一覺後就好了。

睡覺期間出了不少汗,早上起來已好得差不多了,至少有精神和老哥說些沒營養的屁話。中午已有食慾吃稀飯,目前感覺滿好的,倒是右腳踝又開始痛,大概是昨天為了方便右腳碰地太久,又受傷了吧,腳背到是消腫了,在小指和無名指處可看到滲過去的瘀血,只剩下最嚴重的部份是腫的。

雖說回台北後就一直不順,不過換個角度想,在台北生病有家人照料,比照新竹方便多了。加上是剛口試完生病,這個時間點正是最佳生病時間。接下來還不少延遲的事要處理,但應該會愈來愈好吧。

2008年7月6日 星期日

理論與現實

這篇只是描述剛遇到的小例子,不是要探討什麼大道理。

這段話說得太有道理了,先引用一下:

In theory, there is no difference between theory and practice. But, in practice, there is.

By Jan L. A. van de Snepscheut 

剛才很快樂地實作別人的方法來補我的碩論實驗,結果遇到一個作者沒考慮到的情況,於是程式就噴了。理論上這是不會發生的,但實務上因為浮點數的誤差,造成這個 bug。看來得用強硬的方式解掉。

舉個類似的例子說明我的情況,用 Quadtree 存地理性資料時,當一個 region 內的資料數量超過上限時(比方每個 region 不要超過五個點),會把該 region 切成四個 sub-region,理論上可以無限地切下去直到所有 region 的數量都小於給定值。

事實上,當一部份點很散(造成起始 region 空間很大),而大部份點極為密集時,切到後來會因為 region 空間過小,浮點數不精確,而使得某些點「不屬於」任何 sub-region。比方說 region 左上角的 x 變成 296.999999999988,寬度則切為 1.82751591637498e-11,結果四個 sub-region 拼不回原來的 region。

幸好我有加 assertion 檢查是不是所有點都在切開的 sub-region 內(如同廢話般的檢查),不然寫到後面 debug 時就慘了。隨手養成的好習慣,總會在無形之中救了自己。

2008年7月5日 星期六

用左腳踩踏板的日子

今天來了久違的試彈,五音不全。

若要把錯歸在左腳踩踏板沒fu,似乎有些牽強,主要還是太久沒練,連基本的音都丟三落四。而且還是彈不出感覺,《夏影》在夏日環境威能加持下,有好一點,可是重覆彈第三、四次時,又彈回從前的死樣子。琴彈得順的話,會覺得左右手是連在一起的,有種音符波浪層層串起的舒暢感,分不出是左手在動還是右手在動,像彈《Tifa’s Theme》、FFX OP 和《Memory of Mother》時就有這種感覺,但《夏影》怎麼彈都沒輒,各段的味道抓不出來。

題外話,早上起來背部上方很酸,右手掌有點痛,看來是撐拐杖的影響,至今已用了三天,昨天用得量也較高。右腳快好啊,至少也要能站,這樣可以減輕不少負荷。說腳的力量是手的三倍,看來是一點也沒錯,右腳歷經二十年寒暑的功夫,不是雙手可以輕易替代的。反過來說,右腳再練個數十年也不能敲鍵盤,各有所長。...真是廢話般的感觸。

2008年7月3日 星期四

邁向單腳的日子

別看錯字啊,不是「身」,是「腳」。

前晚打籃球時,穿慢跑鞋又求好心切,守太賣力結果在空中絆到攻方的腳,跌下來時腦袋一片空白,右腳踝超痛,請旁邊的人扶我到旁邊休息。幸好在場有些人有受過救生員訓練,急救措施滿好的,立刻冰敷、用繃帶固定。休息一會兒後爸媽來載我,到國泰看急診(掛號時間過了...),外科醫師照了 X 光後說看來沒問題,三天後再回來看骨科。接著去給熟識的中醫師(有國術底)看,國中時脊椎側彎給他橋過,滿有效的。中醫師說有點錯位,待後天消腫後再來橋回去。

結果這兩天腳一下消一下腫,交替地抬腳和冰敷,中途最好的情況可以雙腳站立,但後來又變更嚴重。因為右腳沒法站,在家裡得用雙腳拐杖撐著,用單腳跳移動。武俠小說裡什麼鐵拐武林前輩,把拐杖當手腳輕鬆使用,騙鬼!單腳加拐杖真是超難移動的,深刻體會到平時的無障礙空間有多重要,在醫院使用身心障礙用的廁所,感受到這些設備的必要性。有些事沒親身體驗過,不了解它的重要性。

這幾天看著我的腳消腫過程,老媽比我還急。初期我看著腳腫起來,覺得還滿新奇的,大的時候有右腳踝腫到半個拳頭大吧,腳背也會變胖。後來看到麻痺了,反正沒腫到一個程度也不會痛,別碰地就好。今早起床後腳又變腫,老媽急著叫老哥送我去國泰看骨科。再多照兩張 X 光後,醫生說有輕微骨頭裂傷,要打石膏,不然怕之後會移位。由於晚上要找中醫師復診,所以先回絕西醫的建議,簽個單子表示西醫已建議我要打石膏,但我仍在考慮。

晚上給中醫師看,中醫師聽我們說 X 光指出有裂傷,他說錯位不急,待骨頭復原後再看看。中醫師幫我輕輕地推幾下腫脹處,腳踝神奇地消腫,我終於看到久違的腳背凹槽,之前都是圓滾滾一片。不過待中醫師弄好藥膏後,腳踝又腫回去,又看不到腳背凹槽。後來敷好藥,拿了幾片藥膏,就回家了。說先吃幾天消炎藥,之後再開長骨頭的藥給我。

想想還是先用繃帶固定腳就好,打石膏太不方便了,又重又悶熱,腳養又不能抓,很難想像這樣包一個月會有多不舒服。總之先聽中醫師的建議,過幾天再看看。照目前的情況來看,說最好一週後才能站,一個月後才能走,不過實際情況也得視復原狀況,希望明天開始不要再腫了。還有,在右腳康復前,不知道左腳和雙手撐不撐得下去,兩天下來左腳超累的,真難想像少一隻腳的影響有這麼大。