2014年4月11日 星期五

如何讓自己的python模組在python2和python3環境下皆可執行

考慮以下的情境:
  • 您有兩個projects,使用python語言,簡稱為PA與PB
  • PA用到別人的舊module(非用不可),用python2.7的語法,所以您使用python2.7 (M1)
  • PB用到別人的新module(非用不可),用python3的語法,所以您使用python3 (M2)
  • 兩個projects有共用的程式碼,您當然將它們抽出來,寫成您自己的module (M3)
因為python3和python2之間,有語法不同的差異,也有module名稱改變的差異,所以您的M3要寫成同時在PA和PB都能使用才行。當然拆成兩份也是可以,不過往後的管理維護上比較麻煩。

  • 化解print function和字串編碼原則的不一致
    • 在python3中,字串統一是使用unicode來儲存;在python2中則是有彈性,但是這個彈性會造成您的module要時時留意編碼問題。在使用python2的大型程式開發,其實就有公司採取「一律先轉成unicode再處理」的原則。
    • 處理方法:在程式碼開頭輸入以下,就可以使用python3的print與字串編碼原則(在使用python3時,該行不會有錯誤)
from __future__ import print_function, unicode_literals 

  • 一般性的處理
    • 在import sys之後,程式碼可以使用sys.version_info取得python的版本。如果只需要分辨python2.x與python3.x,大致上可以這麼作(臨場應變):
if sys.version_info.major == 2:
# codes for python2
elif sys.version_info.major == 3:
# codes for python3

以開utf-8檔為例,只需要 python2 的部份就好了(臨場應變,讓程式碼簡潔):
from __future__ import print_function, unicode_literals
import sys
if sys.version_info.major == 2:
    import codecs
    open = codecs.open

# ....
# 之後可以這麼用

with open(f_name, 'r', encoding='utf-8') as f_in:
    for line in f_in:
        print(line)

2014年4月9日 星期三

中藥如何幫助戒煙

要把煙戒掉,需要很大的意志力。

市面上有一些戒煙產品,例如戒煙貼片,讓戒煙者體內保持尼古丁濃度,來減少從香煙吸入焦油;例如無焦油尼古丁的煙,讓戒煙者逐漸排除對尼古丁和焦油的依賴。聽起來好像都有些道理,不過感覺速度不會很快。

最近試了中藥,十分的速效,只是科學中藥,一兩劑就有不同的感覺(不過藥方不能公佈)。它的原理是清肺,清肺之後,吸同樣的煙會有不同的味道。以前吸煙時覺得很棒的味道,變成了不對勁的酸苦味。

不管大家是用什麼方法,如果加上這樣的中藥處理,相信效果會更快更顯著。

2014年4月1日 星期二

和「skirt」相關的英文整理

  1. skirt: 裙子(n.), 裙子乃圍繞在雙腿外之物,引申有「圍繞」和「避開」的意思(v.)
    1. She wears a skirt. (國小英文)
    2. The road skirts the mountain. (道路「裙子(環繞)」這座山)
    3. The company skirted 1 billion in taxes. (這家公司「裙子(避開、繞過)」了十億的稅)

2014年3月28日 星期五

和「欠」相關的英文整理

  1. indebted:欠錢的、欠的
    1. indebted country (欠錢的國家)  indebted person (欠錢的人)
    2. I am indebted to you for your help. (我感謝你的幫助、類似我欠你一次)
    3. 讀音:in-dE-tid,b不發音
  2. debt:負債(n. 可數、不可數)
    1. one billion foreign debt (十億外債)
    2. He is in debt(他在負債中) He is out of debt (他還完債了)
    3. I owe you a debt / I am in your debt (類似我欠你一次)
    4. 讀音:dEt

2014年2月15日 星期六

胸式呼吸與腹式呼吸

現在大家都很流行說要「腹式呼吸」,
說腹式呼吸可以按摩腹部,
有利胃腸蠕動。

雖然這個觀念應該沒有錯,
但是多數好像一窩蜂的被洗腦了,
所以特作此文說明一下「胸式呼吸」與「腹式呼吸」。

  1. 腹式呼吸
    • 當我們深呼吸時,想像肺是往下擴張的,氣就會吸到深處,造成橫隔膜下降
    • 橫隔膜下降時,會擠壓到腹部,腹部會向外微微擴張
    • 聲樂家多是使用腹式呼吸(目前沒聽過不是的)
  2. 胸式呼吸
    •  當我們深呼吸時,想像肺是前後擴張的,氣就會吸到較淺處,造成橫隔膜上昇
    •  橫隔膜上昇時,會拉到腹部,腹部會向內縮
    •  有些中國功夫,練功時要求作胸式呼吸
它們有一個共同處,就是呼吸要深,才會明顯影響到腹部。
讓腹部擴張是按摩,讓腹部內縮也是按摩啊!

另外,胸式呼吸有一個比腹式呼吸明顯的好處:
作胸式呼吸時,會有擴胸和上下拉脊椎的感覺,我個人覺得有像使用牽引機的功用。
(我個人覺得這可以自我矯正脊椎,可能早就有古書這麼說了)

個人的經驗是,三不五時作個深呼吸,
自己選擇用腹式或胸式,都有助於健康。
「胸式呼吸」並不是「非腹式呼吸」,而是另一種深呼吸的方法。

2014年2月8日 星期六

真的有邪氣嗎?

讀中醫時,唸到虛與實,常會看到類似這樣的說明:「病邪入侵時,正氣與之相抗,是實症」。還有唸到得到表邪時,如果被攻下,會造成表邪入裡。今人可能會以「病毒」來解釋病邪入侵這件事。

最近在試著融會貫通所唸的東西,突然想到大家也常說的「病氣」。例如,按摩師幫客人按摩,可能會接受到客人的病氣。一般人可能會認為,這是因為距離太近而傳染。但是,如果是得到癌症,傳染說就有些無法解釋。(這類情形,一般會被解釋成巧合)

想到後來,覺得最有可能的情形,就是病氣邪氣是存在的。例如病毒入侵而不適,可能是病毒干擾了體內的氣。如此一來,很多東西就能解釋通了。我個人的看法,是病氣邪氣真的存在。

最後,和大家分享三點:
  1. 手心和腳心是病氣最容易散出的地方,探病時避免久站在該處。
  2. 有些按摩師在施術之後,會甩手散病氣,那好像真的是有用的。
  3. 如果身邊有人倒下要急救,又不敢用電擊器,可以試著用力按壓腳心的湧泉穴。這種書上的招式,平時根本沒機會使用,也不知是否有效。最近,有個高中老師用這招,真的把沒氣的同事救起來了。承1與2,處理之後要排病氣。那位老師忘了,結果也生了好幾天的病。

2014年2月4日 星期二

瞑眩反應的解釋

《尚書》〈說命〉篇上:「若藥弗瞑眩,厥疾弗療。」
  1. 瞑眩就是吃了藥之後覺得頭暈,頭不暈的話厥疾不會好。
  2. 厥疾指的應是手足冰冷的問題,起因是氣血不暢通,心熱無沒傳到四肢。
在此以搭遊輪來解釋頭暈:
  1. 遊輪啟航之後,一開始可能覺得頭暈,之後就慢慢習慣了它的搖晃。
  2. 下船之後,一開始也可能覺得頭暈,因為身體習慣了遊輪的環境,反而不適應陸地。
對於氣血不通的病人而言:
  1. 體內的氣血本應是通暢的。不通暢久了,身體就習慣了。
  2. 用藥用針之後,氣血變得通暢,身體一時反而不習慣。
這就是「藥弗瞑眩,厥疾弗療」的解釋。不過,古時候的人常是喝湯藥的,藥效較強,體內的改變較大所以會覺得瞑眩;今日醫生使用科學中藥較多,藥效通常比較弱,可能造成身體有改善,但是程度緩慢所以不覺得瞑眩。