星期一, 10月 29, 2007

book list

今天不想念書,於是稍微整理一下

  1. C++ Primer 4/e
  2. C++ Primer 3/e 中文版
  3. Thinking in Java 4/e
  4. Thinking in Java 2/e 中文版
  5. C++ Template 全覽
  6. Concrete Mathematics 2/e
  7. The C++ Programming Language 3/e
  8. The C Programming Language 2/e
  9. Effective Java 中文版
  10. Design Patterns
  11. 物件導向設計模式 Design Patterns
  12. Computer Systems: A Programmer's Perspective
  13. C++ 標準程式庫(The C++ Standard Library)
  14. Effective STL
  15. Effective C++ 3/e
  16. C++ Coding Standard
  17. Effective C++ 3/e 中文版
  18. Effective C++ 2/e 中文版
  19. More Effective C++ 中文版
  20. Exceptional C++ 中文版
  21. Modern C++ Design 中文版
  22. STL 源碼剖析
  23. 泛型程式設計與STL
  24. 深度探索C++物件模型(Inside The C++ Object Model)
  25. The Design and Evolution of C++
  26. cwTeX排版系統
  27. The TeXBook
  28. Introduction to Algorithm 2/e
  29. 演算法導論2/e
  30. Fundamenttal of Data Structure in C++ 2/e
  31. 實戰C++: 8個別具特色的實作經驗(The Art of C++)
  32. Object-Oriented Analysis and Design 2/e
  33. 世紀末軟體革命 復刻版
  34. Assembly Language for Intel-based Computers
  35. Computer Organization and Design: The hardware and software interface 3/e
  36. Operating Systems Principles 7/e
  37. 重構 - 改善即有的程式設計
  38. 精通vi 6/e
  39. 名題精選百則: 使用C語言
  40. 鳥哥的linux私房菜: 基礎篇
  41. 鳥哥的linux私房菜: 進階篇
  42. FreeBSD 6 架設管理與應用
  43. 駭客與畫家
  44. 人月神話
  45. Digital Design 2/e
  46. System Software:An Introduction to System Programming 3/e
  47. Java學習筆記
  48. The C# Programming Langauge 2/e
  49. Computer Science an overview 8/e
  50. Word排版藝術
  51. 深入淺出MFC 2/e (Dissecting MFC)
  52. Java 網路程式設計(Java Network Programming)


---
理論上應該還有遺忘的XD

最近

返家回來過後,買了一顆硬碟,應該會跟進Josh ? 這是一件非常有可能的事(笑)

最近和好友小聊了一下,才發現很多事不如自己原來所想像的美好,不過亦無妨,隱居是一個不錯的選擇,至少這學期到現在,我還過的不錯。有時候,事情仍舊靜靜的沒有改變(笑)

最近可以說看了很多東西,但是也可以說,根本就沒有看什麼東西,不然我怎麼會半篇技術性的討論都寫不出來(學伴也要求寫少一點XD ?) 雖然看到efang的程式碼有感,可以利用class 來做到proxy class的技巧,不過我覺得這更偏向STL functor 的做法,說穿了不值一兩銀,所以不提也罷。Java是我第二次接觸,老實說,沒什麼很特別的感覺,唯一的感覺就是,他變簡單了,不過也很正常,經過比賽之後,學習任何東西比較沒有那麼害怕,更不會為自己預設立場,所以學習的算蠻愉快的。

課業勝任愉快,雖然會有些課上的很糟,有些課跟不上的情形,每次花個小時間總能輕鬆追上,我因此滿足,因為我還是想好好的看自己想看的書,或許這樣子下去,我還真的不容易升學,不過無妨,人生過的快樂就好,至少我知道我沒有在偷懶的前進就是了。不過我還是很懶的把主機板送修就是了XDXD

最近接觸的人女生居多,還好大部分都脫團了,相處愉快,總而言之,最近也沒啥大事發生。

---
又是生活文一篇XD

星期三, 10月 24, 2007

variable

這個的標準意義是多變化的,不過在編程中,一般被稱為變數,事實上大家都知道,有良好的變數命名是一件非常重要的事,如果命名不好,大概就跟你在書上貼標籤,卻寫了無意義的代碼,那麼勢必要跳到該處看懂,那麼這個標籤似乎沒什麼用,當然,善用scope rule等等,都可以讓程式的可讀性大大的提高,不過,在暑假的時候,我看到這樣子的程式碼


#define km 3
#define mm 160
#define nn 120
double f1[mm][nn][km], f2[mm][nn][km], hxu[mm][nn],
hxv[mm][nn], hmmx[mm][nn], hmmy[mm][nn];
double vecinv[kk][kk], am7[kk];

main(){
double u1[mm][nn][kk], v1[mm][nn][kk],
ps1[mm][nn];
double d7[mm][nn], d8[mm][nn],
d00[mm][nn][kk];
double clock, sumf1, sumf2,
gsumf1, gsumf2;


int i, j, k, ka, nnkk;
int nproc, myid, istart, iend, icount,
r_nbr, l_nbr, lastp, iroot;
int itag, isrc, idest, istart1, icount1,
istart2, iend1, istartm1, iendp1;
int gstart[16], gend[16], gcount[16];
}


老實說,我一開始看到差點暈倒XD 老師上課提到,有可能非科班出身的會寫出奇怪的變數命名,誰說的,科班出身的照樣寫出讓人暈倒的程式碼。

---
這程式碼真噁心...Orz

星期二, 10月 23, 2007

聰明與智慧

我蠻常聽到某人好聰明,有人好厲害,卻不常聽到某人有智慧。日前家人提起"能者多勞"的這種問題,持著反面態度,我笑了。

世界上沒有所謂的能與不能的問題,也沒有聰明與否的問題,我碰到的人或許有聰明一點的,Josh ko和我,絕對不是聰明人。為什麼? 當你做的到每天七個小時以上專心做同一件事,而這件事做不好的機率,太低了,最近我可以花三四個小時做一份作業,事實上不用那麼堅持的,只是想做好一件事。

這社會,聰明人很多,而聰明只是泛指可以很快速的解決問題,提出想法,但是,就僅止於此,而能夠從聰明中,提出開創性的見解進而改變這個社會,可謂被稱之智慧。什麼是天才?我不知道,我知道這個社會有天才,但是我沒有遇到過,我遇到一般人所稱為的強者通常都是花很長很長的時間專注在某一件事情上的結果。

或許我們可以慢慢的知道,一般人所謂的大師是如何產生的,因為他們跳越了聰明的藩籬,而跨越到了智慧開創性的領域,我或許不太能成為大師,但是,我永遠可以向大師學習(笑)。

走出來,才看的更遠,學的越多永遠只會覺得自己會的越少。

---
雖嚴重警告自己不要再寫,但是似乎沒什麼用(笑)

maibells0 生日

事實上,這就是別人不愛看我很愛寫的一種文章之一。

maibell0現在就讀台大外文系,是我高中同學,對我而言也是一個特別重要的人,當然,也可能是我朋友中少數一類組XD 雖然我很難理解為什麼他的英文會那麼好(相較於我的破英文而言XD),我也很難理解為什麼他總是說自己不好XD 可能高手都這樣?

不過在我的認知中,他曾經在我最困難的一段時間陪我渡過難關,這是誰也無法取代,但是現在總是覺得很抱歉。他的生日,我也只能慢慢的待在電腦前鍵入文字,紀念他的21歲生日。

我還是寫一段難以理解的話吧。

當生命成長趨近於毀滅,即是新生
新生,不再一代名詞
唯實際行動,重構生命


---
refectoring

星期一, 10月 22, 2007

朋友到訪

今日(昨日)哈密瓜到訪,甚為高興,稍微調整一下MacBook,使其使用更為方便,之後帶其認識環境,吃個長庚最常見的餐點,相談甚歡。

---
感謝哈密瓜幫我帶書來,我少跑了一趟台北

星期五, 10月 19, 2007

Friday

我想這不是指一家很有名的餐廳,當然也不是指牛郎,更不是魯賓遜漂流記XD

這個學期開始期待禮拜五了,呵呵,倒也不是想偷懶,雖然我從不否認偷懶在我的生活因子中,我想,禮拜五之後可以較無顧慮的做自己想做的事是一件讓人高興的事吧,雖然有時候會有拜訪朋友,或朋友來訪打斷,但無妨。

最近想買幾本書,都不便宜

  • The TeX Book
  • Compiler
  • Java Networking Programming 3/e
  • The Art of Computer Programming: Volume 1
可能等有錢的時候再去買? 最近一直都很沒錢,不如說成把錢全部花在吃的上面,說到這個,昨天又吃十元燒烤好多串XD。

這個假日沒啥大事,應該可以把預計的作業系統筆記完成,雖然做的不好,但是可以好好的練習一下。當然,有朋友來訪也是一件讓人欣喜的事,在偏遠的地方,說真的,也沒有什麼人肯來。

---
糟,懶的把桌上型電腦的主機板送修了XD

有關debug的兩三事

身為一個愛寫程式的小孩,常常debug是常有的事,為了不讓有人罵我專門寫火星文,我稍微說明一下好了,非專業解釋就是

debug 就是驗證你寫出來的程式對不對,跟算出來的數學式子驗算是同一個意思

不過很不幸的是,我從小就是一個連加減乘除都很容易算錯的小孩,這個問題一直到寫程式的時候才改善,因為算錯了,可以說式子是對的,算錯沒關係,程式錯了,總不能說我的想法是對的,但是自己寫的程式總是錯的XD 所以我的逼的自己得好好的看著自己寫的東西好好的varify一下(寫到這裡,Josh 會跟你說literate programming, functional programming language都是不錯的選擇XD),久而久之,當然有自己的一套看自己錯誤的方法,寫程式的時候,我還蠻笨的,犯的錯誤總是那幾項,總是不能記取前人(這前人還是自己)的教訓。

當然,一般人會的deubber工具,我都不會,我永遠只會一招,印出一些資訊來看看,然後自行看看是不是對的,事實上很多開發工具都有提供debugger工具,Visual Studio.Net啦,Borlad C++ Builder啦,甚至我現在愛用的Eclipse都有,但是我都不會用... 老實說,這沒什麼好炫耀的,那麼我的問題出在那? 呃,可能我太常換環境了,在這之前雖然沒啥能力但是總不想被微軟綁住,於是我就很安份的用了Dev C++好多好多年,直至我知道MinGW XD 當然,還有一個很大的原因,有時候迫不得己,程式得用vi寫,很多個檔的時候,makefile也得自己來(我還是不會寫,有沒有人要教我的XD)。

說到印出來的訊息就千奇百怪了,不過大部分我都很安份的守已的印出我想要看的,有沒有專門搞的,我室友fire7617 就蠻喜歡印 "yen3 is handsome." 或 "handsome yen3" 這種東西,呃,這種話代表非常的虛假,不過在寫苦悶的程式能搞笑的也是好事,但是我曾在笨版看過一個故事,有人印過這種訊息。

某一程式員寫程式寫到後面壓力大,又跟上司(老頭)很好,所以常在程式的除錯訊息開玩笑,有一天程式好了之後,上司拿去跟客戶demo,結果發生錯誤,跳出了如下訊息

我想台下應該是一片囧臉吧XD 不過有時候也可以知道,不一定把寫程式的人看的很神奇一樣,大家都有搞笑的一面XD


---
我下次來寫 "cllee 早生貴子" 然後給他demo ? XDXD

星期三, 10月 17, 2007

輸了,不帶遺憾的

呵呵,我想,不論是輸贏,這篇總是難以下筆的。

雖然滿懷著期望,但是總是讓大家失望,總是要說一聲抱歉的。只能說自己實力真的不足,或許當下那一刻我以為我們的演算法實作是輸人的,但是李春良老師告訴我,還有SIMD這個重要的東西被我們忽略了,一個會導致三倍的差異的指令集。

是我自己的問題,學了那麼多硬體,似乎也沒有派上用場,或許,可以藉此說服別人,我沒有什麼,我自己也知道,我也真的沒有什麼,只有一身的不要命,但是有時候得承認,我聰明才智不如人,會再努力的

下個比賽,中華電信比賽,拿第一名吧!!

---
呵,總是要有企圖心的前進

Eclipse with C/C++, Java

如何在 Windows 底下使用Eclipse 進行 C/C++,Java 進行開發
Eclipse 本身是針對 Java 的一個開發工具,但是經由 CDT(Eclipse C/C++ Development Tooling) 的載入,亦可開發 C/C++ 專案。

要安裝的有



安裝提醒
  • Java Runtime Enviorment: 直接線上安裝即可
  • Java Standard Edition: Accept後,下載安裝即可
  • MinGW: 選擇Automated MinGW Installer下載,安裝時請選擇candinate,加選g++ compiler, mingw make
  • Eclipse + CDT: 下載Eclipse Classic,和其 CDT,兩個解壓縮至同一資料夾即可,Eclipse是綠色軟體,解壓後執行Eclipse.exe即可執行


那麼接下來就是設定環境變數了
在 我的電腦(右鍵) >> 內容 >> 進階 >> 環境變數 >> 系統變數 中設定,path和classpath(如果沒有自行新增),將下列路徑新增至該值的尾端(以Java SE 1.6 Update3, JRE 1.6.03為例),以;區隔
pathclasspath
Java Runtime EnviormentC:\Program Files\Java\jre1.6.0_03\binC:\Program Files\Java\jre1.6.0_03\lib
Java Standard EditionC:\Program Files\Java\jdk1.6.0_03\binC:\Program Files\Java\jdk1.6.0_03\lib
MinGWC:\MinGW\binC:\MinGW\lib


在這邊簡單解釋一下
  • path: 為comand line底下尋找執行程式的路徑,一般而言,從所在的資料夾尋找,若找不到則開始尋找path所列出的路徑
  • classpath: 為連結程式庫時所需的路徑,一般而言,從所在的資料夾尋找,若找不到則尋找classpath所列出的路徑


上述都做好,可以享受一下Eclipse嘍

---
雖然不難,但是常跟別人說明,寫一下也好

星期日, 10月 14, 2007

念書

第一次覺得念書是一件很輕鬆的事,雖然今天沒有念到什麼,不過還是有疲倦感,事實上這個假日還是拿來念書了(笑)

學校的作業系統上的七零八落,或許還不足以形容,那麼做人只好自救了,沒有好老師也要有好用心,花了一整天念書兼整理重點,在冼鏡光先生所寫的簡報的幫忙下,我也才念了三小節,或許沒有抓到要訣,但是筆記用XeLaTeX,真的需要一點時間來適應就是了,也第一次覺得,書自己一個念念不完的感覺,或許會尋求合作之道。當然,會非常希望重點有做完的一天,這樣子又有一項資料可以開放啦,呵呵,就盡量努力嘍

呵呵,這個blog一般時候會偏向閒聊,當然還是希望偶爾可以po出一些有趣的東西

---
寫作有助於解壓XD

星期五, 10月 12, 2007

最近

又到了禮拜五,雖然還沒上課,總有喘口氣的感覺。efang回家,沒有朋友來訪,這個週末可以一人較為隨性。

最近總有追著時間跑的感覺,雖然不再像從前天天作息不正常了,但是總有一股無法帶走的疲倦感,或許,從高中以來,沒有花那麼多時間在念課內書? XD

有時候會想問自己,到底可以把心思分給多少人呢? 分給太多就忽略我覺得很重要的人,不分的話,總覺得自己過於自私,什麼時候要分給自己呢? 或許,這答案顯然不那麼重要,呵。

有一個寧靜的早晨不錯,至少還可以胡思亂想XD

---
又是廢話一篇XD

星期四, 10月 11, 2007

小考


傳說中,這是以小考聞名的學校XD

---
我該說什麼XD

星期三, 10月 10, 2007

Desktop

桌上型電腦竟然掛了,經研判是掛在主機板,是我太久沒有用了嗎...Orz

---
只剩MacBook ??

星期二, 10月 09, 2007

The Matrix Game: 16 Matrix Multiplication

最後的程式碼釋出,比賽的文件分享也告一段落啦!!

打包嘍

稍微說明一下

  • document.pdf: 此次比賽最後繳交的文件,李春良老師指導(不然我們應該寫的很難看...Orz)。
  • MatrixMult.c: 主程式,最主要用來執行16個矩陣相乘
  • Matrix.h, Matrix.c: 矩陣的相關基本工具。
  • MCPT.h, MCPT.c: Matrix Chain Product Tree,但是在此比賽中是簡化版,已建比賽資料,彈性非常低。
  • utility.h, utility.c: 一些通用工具,包括產生讀檔檔名。


事實上此次程式不甚完備,不過時間有限,但是我自己目前尚無時間修改,所以就容許我這樣子偷懶釋出吧XD

---
歡迎自由取用,轉載不需告知

Matrix Chain Product Tree with Parallel Modify

事實上整個程式和簡報參照

Heejo Lee, Jong Kim, Sungje Hong, Sunggu Lee, "Processor Allocation and Task Scheduling of Matrix Chain Products on Parallel Systems, " IEEE Transactions on Parallel and Distributed Systems vol.14 no.4, pp. 394-407, April 2003.

相關資料如下


---
歡迎自由取用,轉載不需告知

MPI Programming & MPI_Group

MPI 本身是message passing interface,是一個專門為平行運算所規範的Library interface,目前較有名的實作體有Open Source的MPICH,而幾個cluster的大廠IBM, hp 也有各自的implemenatation,不過稍微查一下,在天瓏並沒有中文書籍說明相關MPI,而英文書籍也不多,在這個比賽中,我並沒有使用任一英文教科書,我使用的書如下

  • MPI 1.1: 這份文件是Standard,所幸並不難讀,我的MPI_Group就是利用Standard和老師的協助完成學習的。MPI 1.1支援C和Fotran
  • C語言平行計算程式設計: 此份文件極具參考價值,一開始看這份會有很大的幫助,雖然在後面二維陣列的平行計算切割時,變數定義不明,但仍暇不掩瑜,此份文章由國網人士所撰寫,極具參考價值,當然,此份文件也有Fotran
沒有列出MPI 2.0是一件極遺憾的事,MPI 2支援C, C++, Fortran,支援超過500個function,也支援一些更好的平行運算特性,不過在此次的比賽中國網主機是不支援的,所以並沒有特別去研究,不過大概看了一下,有很多向下相容的function,在C++中只是多了一層包裝去呼叫C所實作的function。

MPI_Group是一個極為有趣的function series ,雖然MPI支援針對所有的CPU進行集體通訊的動作,但是若將母群體的CPU分割成數個子群體進行類集體通訊的動作,卻得依靠MPI_Group_xxx 等的function來進行子群體的定義。

一些相關function如下
MPI_Group_size()取得目前這個Group共分得幾顆CPU
MPI_Group_rank()取得目前這顆CPU在此Group的編號
MPI_Comm_Group()建立一個Group
MPI_Group_incl()從一個Group中選取一些CPU建立一個sub-group,而被選取的CPU 仍在原來的Group
MPI_Group_excl()從一個Group中選取一些CPU建立一個sub-group,而被選取的CPU不在原來的Group
MPI_Group_free()針對此Group的CPU做釋放動作,但是同時此CPU也不再屬於任何一個Group,只屬於MPI_COMM_WORLD
MPI_Comm_create()針對某一個Group(MPI_Group),建立一個Communcator(MPI_Comm)
當然,這邊只是提起一些function,還有一些很有趣的Group相關動作,例如說可以針對兩個Group做AND, OR, XOR,還有比較,再提起兩個常數
  • MPI_COMM_NULL: 用於Commucator為NULL的狀況
  • MPI_GROUP_NULL: 此CPU不屬於此Group,即會傳回NULL


範例使用方法

MPI_Group universalSet, subset; /* 宣告母群體和子群體Group */
MPI_Comm universalComm, subComm; /* 宣告母群體和子群體Communcator */

/* 設置母群體 */
MPI_Comm_group(MPI_COMM_WORLD, &universalSet);
MPI_Comm_create(MPI_COMM_WORLD, universalSet, &universalComm);

/* 設置子群體 */
int ranks[] = {0, 1, ,2, 3};
MPI_Group_incl(universalSet, 4, ranks, &subset); /* 設置完後,此4顆cpu仍在原來母群體中 */
MPI_Comm_create(universalComm, subset, &subComm);

/* 針對子群體的集體通訊動作範例 */
int a, subID;
MPI_Group_rank(subset, &subID);
if(subID==0) a = 5;
if(subComm!=MPI_COMM_NULL) MPI_Bcast((void*)&a, 1, MPI_INT, subComm); /* boardcast a 資料給subset這個子群體 */

當然,還有很多很有趣的使用方法,不過我比賽中所使用的技巧僅此而已,呵呵,有錯誤歡迎指教嘍。

---
歡迎自由取用,轉載不需告知

星期一, 10月 08, 2007

how to save a life

經過兩天的休養(睡著的時間比醒著的時間多),一餐吃下兩餐的份量(我有偉大的老媽),比賽後的身體調養算是告一段落了XD

下一步,如果聽了Josh Ko的建議,這將會是無敵大的計畫XD

星期日, 9月 30, 2007

Matrix Multiplication

在這次比賽中,我用簡單的實作碼實作出兩種Matrix Multiplication Algorithm,分別是

Matrix Multiplication: Naive Algorithm
Matrix Multiplication: Strassen's Algorithm

其中參考Introduction to Algorithm 2/e Ch28.1 28.2所做出來的簡報如下(LaTeX + beamer)
Strassen's Algorithm: Slide

---
歡迎自由取用,轉載不需告知

The Matrix: Reloaded

The Matrix: Reloaded
長庚大學資訊工程學系
指導老師: 李春良 cllee 助理教授
學生: yen3, fire7617, decay

這次的比賽對我,第一次這麼投入一件事(笑)
首先要感謝李春良老師,我很愛找他聊天,他也常常告訴我一些很有趣的事,當然不乏對於人生的態度,最該感謝時,在於我們沒有放棄時,他拉了我們一把,可謂是一代神手級老師,老師,謝謝你m(__.__)m

小祥和小花是我難得一見的好隊員,辛苦大家了,三人常常一同奮戰到四點,程式的乘法與轉Fortran的功勞居不可沒,我只想說,沒有互相,我們不能不帶有遺憾完成這個比賽,小祥小花,你們是我遇過最好的夥伴~呵

父母和宜芳在這次比賽中陪伴我一路走來,雖然在學校時,我一有心煩就會尋求避難之地,這三個月來,麻煩了

scorenn 和 Josh Ko 是我的朋友兼明師 ,在我轉C Programming Language時,兩人在編程上的概念助我甚多,讓我少走許多不冤枉路,平常或許有時間會自己走,只是比賽要節省時間,能不厭其煩被我一直詢問,是需要相當高的耐心(笑)

竹竹是一個相當神奇的學伴,她只有抽過一次學伴,呃,我自己亂抽抽了好幾次就是XD 一路上樂當後援會兼啦啦隊,常常給予鼓勵,非常感謝,mandy對於小花有非常決定性的幫助,唉,都怪我們兩個大男生不會照顧人,下次你要不要來當個隊醫之類的,專醫小花一人XDXD

當然,我不否認我是一個非常愛聊天的人,這段日子中,聊天的次數大幅度的下降,感謝大家讓我專心比賽,應該是說,讓我戒掉了這個好與不好的毛病,哈哈哈

呃,事實上從第一版180秒到第二版的111秒,到第三版的90秒,可謂是進步良多,不過90秒是不是一個好成績,我也不知道,當然,有關比賽的文章不會就此結束,我想我會發一系列的文是有關這次比賽中所學到的東西,可能一兩篇,可能五六篇,看學習的有多少了,不過,這篇才是我認為最重要的,學會感謝,人才有可能走的更遠

若要說我從這場比賽中學到什麼,程式一路走來轉換了三個語言(C++ -> C -> 一點點的Fortran) ,學了一點點MPI Programming,老實說,還真的沒有學到什麼東西,不過我從李春良老師和小祥小花上學到

堅持不放棄,才能不帶有遺憾向前衝
這點或許不難,實作起來或許就很難了(笑),中間也發生許多搞笑事,我們三個玩在一塊(還好比完小花就可以恢復女兒身了XD),也辛苦在一塊,當然,把桌面炸的跟鬼一樣也是我們的專長之一XD,這次比賽對我而言是一個美好的經驗。半夜可以唱忠孝東路走九遍,一直有人叫我請Friday,哇哈哈,至少,我們撐過來了

我也想對李春良老師說,並不是所有學生都會放棄的,相信你,我們撐過來了,雖然我們很混,但是我們不想因為一些事,就少了一位好老師,我們從來都不是好學生,但是至少,我是一個為了事情可以不要命的學生。

當然,中間身體紅燈一直亮起來,我想,賽後是該休養一陣子了,不過我又是一個閒不下來的人,天知道我那天又開始忙起來了XD

---
好零碎的感想,事實上是太多話想說了XD