2007年3月27日 星期二

時 間

過去的旅程.
一去不返
        不能等待~~
 
但要追求更好的旅程--
 
 
  有念英文,時間很快過。

  沒念英文,時間也照過    (成寒)
 

Q:填克漏字時.空格以外的字眼睛都要注意跟嗎?
A:我認為最好眼睛要看著字
  因為這是在練習〔快速閱讀〕
  不僅是做克漏字而已
 

 

2007年3月26日 星期一

看 Linux kernel 應具備的首要觀念是?

看 Linux kernel 應具備的首要觀念是?

jollen 發表於 March 24, 2007 4:09 PM

Linux kernel 是狀態機還是結構化程式流程?

作業系統(Operating System)的研究,我們以 Linux kernel 的探討來說明一些應有的正確觀念。

對於 Linux kernel 的研究,最經常聽到有人提起「kernel source code」的研讀與分析,並且最常看到的研究方式為「尋找 kernel 進入點,並依照程式流程(flow)做循序研究」,不過,這卻是一種「大部份情況下都錯誤」的研究方式。

由於電腦系統是一種 foreground-background system,並且 Linux kernel 是在此系統上的作業系統,因此整體的 kernel 行為是「control patch」,也就是「控制權的轉移」與「系統狀態的改變」,並不是「程式(函數)流程(flow)」,或是「程式結構(structure)」的問題;最近有朋友問起這方面的議題,正好也在進行 Linux device driver 的 training,因此特別整理這則日記,來與大家分享,若有任何論述上的失誤,或是有不同的觀點,歡迎在這裡留言分享。

許多人對於「作業系統」的觀念可能真的有點薄弱;具體來說,對於 kernel 內部原理的研究,其方法應該是:

1. kernel 的開機階段,是以「流程(flow)」的角度來做討論。

2. kernel 完成開機後,會執行 init process,由此正式切換到 F/B system 的觀念,也就是整個系統是一個偌大的狀態機,整個系統內部是一連串複雜的控制權轉移動作。

最近朋友希望我能針對「kernel 的執行流程」做簡單介紹,但是這個問題在命題上應當有修正或是觀念澄清的空間。由於電腦本身是一種 foreground-background system,因此 foreground 的工作會影響 CPU 將控制權移交到 background 的哪一個部份;如果把 user-space 當成 foreground,kernel-space 當成 background,那麼整體系統便能以下圖表示。

Background 受到 foreground 行為的影響,拿以下二個 process 為例,雖然執行結果相同,但因為 foreground 內部的行為不同,因此 control path 也會不同:

/* Process P */  int main(void) {    char buf[] = "Hello, World!";     printf("%s", buf);    return 0; }    /* Process Q */  #define STR "Hello, World!"  int main(void) {    char *buf;     buf = malloc(strlen(STR)+1);    strcpy(buf, STR);        printf("%s", buf);    return 0; }

此時,仍是以「流程圖」邏輯來思考的話,當然無法領會箇中奧妙。簡單二個不同的 process,CPU 將控制權移轉到作業系統的路徑(也就是 kernel 執行了哪些程式碼),居然有這麼大的差異。如果再把排程器(scheduler)加入,那麼整個控制路徑很可能「不同時間執行同一程式」也會不同。Tricky!

以研究方法來說,命題時觀念的失誤,終將無法得到正確且完善的結論,因此「希望就 kernel 的執行流程」做討論的命題,應當做修正,並且給定一個更明確的題目;再者,若無法體認 kernel 是一個大型的狀態機,而仍以「流程與程式結構」的觀念來思考,除了在問題的描述會有相當大的誤差外,可能也會對「如何了解 kernel source code」的方法摸不著頭緒。

由此可知,整體系統在 kernel 開完機並執行 init process 後,就必須針對其「行為」做分析與研究,而不是徘徊在「結構化 C 程式」的圈圈裡;這個觀念證明了「逐行看 code」並不是研究 kernel 原理的正確方法。

Kernel 本身的行為是一連串複雜的狀態改變與控制權轉移,因此是狀態機的觀念。至於,研究方法是採用流程或是控制路徑的觀念進行,就看我們想要讀的是哪一個部份的 source code。前面提到研究 kernel 的二個階段與方式,當中的轉捩點為 init process,接續 init process,建議可先由 program execution(process creation)的觀念開始切入,以了解整個作業系統的行為。

所以,kernel 的研究,是以其動態(run-time)時期行為(behavior)的分析與觀察為主。

來源: www.jollen.org

--jollen

2007年3月24日 星期六

用 Gmail 作 GTD:GTDGmail (GTD:Getting Things Done)

用 Gmail 作 GTD:GTDGmail

好久,好久,沒有寫GTD相關的東西了…….

43 Folders看到的:GMail + GTD = GTDGmail

GTDGmail 是一個 Firefox的extension,主要是用Gmail這個服務的一些特色,來作為GTD的一個實踐輔助軟體。

這個 extension 利用了 GMail 的一些特色,包括 label(標籤),coversation(會話群組)等來快速把GTD需要的功能給實作出來。當然, GMail本身就可以作為一個很好的Inbox collector,尤其是當你很倚賴Email時。再說,Gmail的大容量和內建的搜尋功能也都很適合GTD,信件夾檔則可以用來存放其他類型的資料和文件。這樣子想一想,似乎還比我現有的solution來的方便和簡單。

以下呢,是我試用 1.11版的小教學,有興趣的人可以一起玩玩看。

先下載 GTDGmail 這個 extension,安裝完後重新啟動 firefox,會跳出一個歡迎畫面:

GTDGmail evaluation

然後登入你想用來作GTD的Gmail,會發現左邊出現一個第一次安裝的提示區塊:

GTDGmail evaluation

而且主畫面區在每個會話群組後也多了一個小小的「GTD」符號,最下面也多了一個「 Print Hipster PDA Cards [GTD]」的按鈕。

GTDGmail evaluation

點一下前面提到的那個安裝提示區塊,會跳到 label(標籤) 的設定區,為了省事,可以直接點那些連結自動產生對應的Label。

GTDGmail evaluation

再來,是設定 Filter(篩選器)。

建立兩個主要的 filter,如下所示:

GTDGmail evaluation

完整的安裝方式也可以參考Installation Guide

接下來,來試試看實際使用的流程吧:

新增 task:
到撰寫郵件,會發現多出三個連結: Send Email,Send Myself a Task,跟 Send Myself a Reference,幹嘛的應該很清楚了。

GTDGmail evaluation

點一下 Send Myself a Task 吧。
然後輸入一下要做的事

GTDGmail evaluation

寄出後應該就在收件匣裡看到剛才產生的task,而且套上了 S:Action的標籤。

點進去後,就可以輕易地依據工作的完成狀態//進度來新增/刪除不同的 tag,然後下一步行動(Next Action, NA)則可以用回覆該封mail的方式來進行。

GTDGmail evaluation

再回到收件匣,右上那一排 GTD Review 可以快速地列出符合tag 的mail(task),非常適合作為 review。

GTDGmail evaluation

我簡單地玩了一下,其實功能蠻簡單的,不過GTD的規則本來就不複雜,難的是把這規則真正落實在日常生活的實踐。GTDGmail對我而言最吸引人的部份,就是可以方便地在task/NA/ref中夾帶檔案(因為email可以夾檔嘛),在處理上不用再額外到電腦硬碟裡找對應的檔案。這一點是我目前以PDA作為主要GTD實踐平台上,所遠遠不能及的。

未來的版本會再有什麼改進,我不是很確定,不過我現在確定的是,如果沒有了網路,這一切就沒啦。所以…..我還是先暫時在我的PDA上落實GTD就好,這GTDGmail嘛,還是先試著玩玩就好。等到某天3G非常普及,我用的PDA又可以輕易地無線上網(不管是用 802.11 還是 GPRS/3G),到時再透過PDA的browser,連上Gmail,搭配這個extension來實作GTD(唔….好像有點疊床架屋啊…..)

 

2007年3月20日 星期二

別人對軟體業的想法

[別人對軟體業的想法]
莘莘學子與軟體業新進請聽聽在下的十招∼對於這十招提供了一些
基本的解釋也希望能以詼諧的方式幫助各位加深印象∼相信這十招
各位經過更多歷練後會有更多解釋∼所以把這篇從原篇中獨立出來
,希望能方便讀者參考:
 
第一招:看到問題唸十次
 a. 確認你記得問題下次還記得
 b. 確認你瞭解問題,沒有漏掉什麼要求
 c. 確認你以後踫到類似問題,還會想到它
 d. 確認你連做夢都會想到它∼悲慘的程式設計師宿命∼
 
第二招:程式不會寫,先開始寫註解
 a. 例用註解將問題描述,將問題做分析
 b. 把分析方法與解法都 document 起來∼對你自己最有益處
 c. 直接註解而省略白紙,由註解行數的改變,讓你老闆知道你有在努力做∼
 c. 人家是用照片寫記憶∼程式設計師是用文件寫記憶∼
 
第三招:解法不會寫,先寫工具
 a. 一個複雜的問題,尤其是面對演算法相關的所謂困難部份,如果能把工具(諸如模擬)
  寫出來,這樣是比較容易找出解法的∼
 b. 工具總是可以拿來重覆利用的∼這會讓你越寫越輕鬆∼
 c. 寫工具也是一種重要練習∼
 
第四招:整個問題不會解,先解會解的
 a. divide and conquer(偶稱它為個個擊破法) 不用多說,不知道網上查也會知道∼
 b. 就像寫論文一樣,如果無法提出所有問題的統一解決方法,限定一些條件來解
 c. 還有有時候一下就想最困難的問題,一來浪費進度、二來心情不佳、三來老闆可能把
   預算砍了因為沒有結果∼所以先解會解的是經驗上的金玉良言∼因為一來你花了
   20%完成了80%超越進度,老闆來拍肩膀了,二來你解了簡單問題心情大好,更
   覺得整個問題也沒什麼大不了,說不定困難問題因心情好(沒有專牛角尖)也就想
   到而解決了,三來老闆看你有成果說不定常拍你肩膀哩∼(老闆這時候真好騙∼可惜
   薪水不好騙)
 
第五招:查網路、問別人、看書獲取各種解題的資源
 a. 想想偶們還在用193x的理論,當然問題絕不可能只有你才踫到,一定粉多人早就
   見過了∼只有你踫到的通常是你自己寫出來的bug∼
 b. 這是群策群力的時代,多找資源、人家的經驗和別人幫忙∼
 c. 對應於b, 現在這個社會最忌諱單打獨鬥, 那代表你不能 team work∼
 d. 增加知名度、人緣∼ Social 粉重要∼切記∼切記∼
 
第六招:暴力法求解再找最佳化
 a. 先求有再求好∼
 b. 有成果人家才看得見∼不然做不出來,中間再怎麼完美都沒有用∼
 c. 暴力法通常是最白痴也最有效的辦法∼
 d. 有時白痴解法最好∼因為只有呆子在演東西給傻子和電腦看∼你還期待有什麼
   人會看你的程式?偶們高貴的使用者嗎?
 e. 一代萎人瞪小平同志說過:「黑?、白? 會抓老鼠的就是好喵」
 
第七招:多印追蹤資料少偵錯
 a. 講得粉白話∼就是要你可以節省出問題找錯的時間∼這樣才有更多時間解決真正
   是問題的問題
 b. 因為有追蹤資料 (trace information)不僅你可以找問題,別人也才可以幫你找
   出問題,想想吧∼如果 compiler 只告訴你程式錯,而沒告訴你大約是哪裡它踫
   到錯∼你要花多少時間解決一個打錯字的問題
 c. 真正的問題也常能由追蹤資料找出蜘絲馬跡
 d. 養成習慣,不要等到當了還在想怎麼寫追蹤資料的程式碼或可以重覆發生的方法∼
 e. 你是壞人喲∼幹嘛壞怕留下線索∼還是你是蜘蛛精,「偶揮揮手不帶走一片data而
   當機」所以,人家是照相機抓得住偶,程式設計師是用 bug 抓往住偶∼偶不是故
   意幫那家快倒的、沒有「即時更新技術」的公司打廣告∼
 
第八招:多讀、多寫、多想、多說
 a. 多讀,像第一招,有時候會幫助你瞭解問題的所在或 think out of box,讀也包括
   讀參考資料∼
 b. 多寫,熟能生巧∼工欲善其事,必先利其器∼
 c. 多想,解法大部份還是要腦袋想出來,即使是人家的也要腦袋理解、吸收
 d. 多說,只有在你能表達出問題所在,才表示你真正瞭解問題∼只有你能表達出你的知
   識,那個知識才是你的∼
 
第九招:學會改進重於學會重寫
 a. 任何時間都要學會成本控制∼不然你就沒有經費∼
 b. 當來練習學會維護別人寫得爛程式∼以後踫到再怎麼爛也看得懂∼
 c. 為什麼爛-用註解的方法記錄下來,有機會(成本效益考量)再改進-記住是改進,不
   是重寫
 d. 由這種維護的痛苦加深寫好程式的方法和印象∼真是歹命呀∼;)
 e. 工作機會要找改進的粉多,完全寫新的粉少∼
 
第十招:記得備份
 a. 即使BMW也會 Crash,那「軟∼」體會可能都不當機嗎?有誰說他家有裝避雷針不
   怕閃電、有水管(PVC)把電源線和所有線包起來不讓老鼠咬∼還有說他寫的程式永
   遠不會當 (如果是,偶送你Taiwan No 1封號 的病毒∼)
 b. 讓電腦忙一下讓腦袋休息一下,對大家都好∼
 c. 還是記得備份∼遠方又傳來哀嚎:「神啊∼請讓偶記得備份∼」
 
大約解釋一下,聽得懂的請消化吸收、聽不懂的當偶是說笑話也可以∼希望大家能把軟體產
業走得更進步∼

2007年3月3日 星期六

日本建議與中國合作開發東海油氣田

日經:日本建議與中國合作開發東海油氣田
2007-03-02 14:05  
 
新聞來源:法新社
日經新聞今天報導,日本建議與中國合作開發爭議的東海油氣田海域內大片廣闊地區,以期解決兩大亞洲強權迭起衝突的爭執焦點。