星期四, 1月 15, 2009

有關File I/O的兩三事(1) - 不算開始的開始

這篇是技術文,不想看的可以跳了XD 這篇是寫給初學者看的,也是我這幾天寫程式的心得,所以高手可以改錯XD。會想寫這樣子的文字是從SmallPig及cllee老師中所提及的File I/O方式,做一個論述。

大部分的書本都會提及如何在記憶體中操作程式,但是對於File I/O僅提及如何讀取,寫入,其實也相當正常,因為換作是我來寫,我也不知道要寫什麼額外的,然而在實作呢?

重要問題: 為什麼File I/O如此重要?
有趣的問題: 如何把binary tree寫入檔案,又從檔案中讀取建立binary tree呢?

先回答重要問題,回到基本計算機概論本身,常識會告訴你,記憶體中的資料只要一斷電就消失,而硬碟不會(但是硬碟容易壞XD),如果你要保留你的程式某些資訊,勢必是要寫入檔案中的,在有趣的問題中,binary tree小的話,每次重算倒也沒有什麼,但是如果是相當大量的資料呢,不寫入是不行的,而我想把有趣的問題拖到晚一點再回答。

那麼一般狀況下怎麼寫檔案?

  • 直接寫
    號稱人類最直覺的做法XD,想寫什麼就寫什麼,通常人看的懂,電腦很難看懂XD

  • binary file
    其實我也不知道怎麼稱呼XD,將C/C++中的struct直接以binary的方法寫入檔案(人看不懂,電腦很容易看懂XD),在一般狀況下稱為fixed file format,一般常見的檔案格式都是採用此方法,會有一個header在檔案的一開始,做為檔案的描述。

  • XML
    用一堆tag組成的檔案(人看的懂,電腦也看的懂,可是...XD),只要程式中具有XML parser,就可以慢慢的得到檔案想要傳遞的訊息,其實XML最常用的是在於網路中的訊息交換,在近期的檔案格式也相當常見。

先來慢慢討論第二項吧,這邊以C語言為範例(yen3 <- 不擅長C),假設今天struct如下。

typedef struct _Node{
int n;
char s;
} Node;
如果我們寫了這樣子的程式碼
    print("%d", sizeof(Node));  //output: 8
從這邊得到一個非常有趣的結果,結果是8 bytes而不是5 bytes,原因很簡單,因為要align memory,一個word是4 bytes,如果只有char時無妨,還是只有1 bytes,但是如果加入int時,那麼就要變成2個words為8 bytes,所以其實這個struct寫成
typedef struct _Node{
int n;
char s;
char unused[3];
} Node;

效果是一模一樣的。


利用這個例子,我想說明的是,如果要寫binary file,就要對每個byte斤斤計較放在檔案的那個位置,倒也不是為了節省記憶體(雖然某部分原因也是),而是為了支援File Random Access,Binary FIle的最大好處是,由於format固定,相當容易做到random access(在C中使用lseek(不過這是Unix System Call),在C++中使用std::ifstream::tellg(), std::ofstream::tellp()),只要每筆資料size固定,只要算出檔案相對的byte即可存取,相當方便。

那binary file壞處為何? 如果當初設計的File format不足以支援現有需求時,該如何因應? 有些File format會設計一些保留bytes,或者是延伸檔案格式,總而言之,如果要擴充時還蠻不方便的。


---
下回分解XD

星期二, 1月 13, 2009

Mac OSX 上的 vim 安裝 taglist


今天心血來潮想要在vim上裝一個taglist,發現一直裝失敗,後來才成功了XD

方法如下


  1. 下載taglist,之後把相關檔案對應複製到/usr/share/vim/vim72/ 下,兩個檔案複製到各別的資料夾

  2. 安裝最新的ctags直接安裝即可

  3. sudo rm /usr/bin/ctags (移掉,這是舊版,新版裝在/usr/local/bin 下)
    sudo ln -s /usr/local/bin/ctags /usr/bin/ctags (然後重新連結到新版去)

  4. 在vim中開原始檔試著打:TlistToggle 理論上可以用了XD


---
一波三折XD

星期三, 1月 07, 2009

It all starts here.



其實每次看到這句總是百感交集。因為這是cllee在比賽一開始跟我們說的一句話。

今天是系上專題展,其實心情一直不好,總是會想到"穿著西裝的猴子"之類的寓言XD。但是看到很多老師心情會很開心,因為我很確定,我盡了力在關心我所要做好的事。

很幸運的,得到系上專題展第一名及最佳人氣獎。

其他組其實做的很不錯(這句話倒不是空談),3D視覺模擬的這個主題,我不覺得我能做的好,跌倒偵測這個主題,一路看過來,decay和mandy真的花了非常多心思,我非常佩服。

當今天有學弟對我們的專題展發出讚嘆時,我只跟他們說,現在做不出來沒關係,要有以後能做出來的豪氣。但更慚愧的是,應該要做出更好的東西。

要相信自己並不差,對自己充滿自信並努力前進,方能開始。不要忘了在這時的記憶。

It all starts here.

相簿

---
大家辛苦了 , 小祥生日快樂~哈哈哈

星期日, 1月 04, 2009

高微

高等微積分XD

yen3: 要把數學學好要學什麼比較好呢?
ycma: 修高微

yen3: 要把數學學好要學什麼比較好呢?
Josh Ko: 學高微 XD

yen3: 你和ycma講的話都一樣耶
Josh Ko: 對數學有認知都會這樣子說 XD

---
XD 最近閒聊文每篇都有人回耶,直到現在才發現XD

星期五, 1月 02, 2009

日期


在這場考試中,最複雜的是...報名。

---
有沒有專人可以代理報名事務XD

星期四, 1月 01, 2009

新年

今年的跨年待在學校,並沒有像前兩年一樣,去了淡水和台北:) 平靜是一種幸福。

縱觀全年,這是我推掉最多事,也是我遇到最多事的一年,而今年仍然一事無成,哈哈,我的大學生活,參加了兩個比賽,沒有得獎,研究所考試,也即將炸掉,但不後悔,因為這是我要的生活。

當我聽到某位老師念博士時,前四年一篇論文都沒有產出,到了第五年一口氣生了四篇的時候,說真的,我很難想像這四年累積下來的壓力。想到及此,顯然我不夠會忍耐,因為我知道我自己還不夠好。我很希望,在考試結束之後,繼續自己想要做的事,用自己的熱情完成想要做的事。

其實一直希望自己對某個領域做出貢獻,但是顯然現在還不是時候。是該重新開始,放低身段,累積並前進。

撐到最後一刻,完成這個該死的研究所考試。
走向Compuer Architecture這條路,由硬到軟去證明Programming Language。
參加FLOLAC '09,以學員的身份參加,哈哈哈,應該會被當掉XDXD,所以希望不要被當掉XDXD。
寫出真正能夠幫助人的程式

---
明年此時就知道我完成多少事了XD

星期六, 12月 27, 2008

最近

好久沒有寫blog了。可能自己懶性使然吧XDXD

研究所考試越來越近了,但是我依舊沒有進入狀況,總是想著要把學校作業做好,有一種兩頭燒的感覺。在宿舍始終睡不好,半夜室友才會開門回來,我總是最早躺在床上,而最晚入眠。

最近想外宿,如果在林口長庚醫院附近有好房子可以通知我嗎,謝謝XD

或許,這一切的事該結束了,我會繼續念書念下去,但是用我的方法,因為我屬於我自己,不屬於任何事。

若要我說大學最重要的事是什麼,在大三之前我會說,態度正確及學習如何學習,但是更值得花整個大學時間去探究的是,找到自己想做的事,啟發自己的熱情,如果沒有找到,常常會努力一下子就懶病發作了,這就不好玩了。

我還沒調整至最佳狀態,但是會盡一切努力的。

---
似乎很多事。

星期六, 12月 13, 2008

這個領域很缺人

本來想寫成嚴肅文,我們來寫搞笑文好了XD

系上某位老師: 資工不要做硬體了啦,做硬體是做的贏電機系喔。
yen3: 嗯...

系上某位老師: 資工寫軟體沒有用,外面都嘛是搞硬體。
yen3: 嗯...



這一陣子,我對於我的研究領域為何很不清楚,於是跟了蠻多老師聊天。

gwchen: 來做生物資訊吧,這個領域很缺人。
yen3: XD

ycma: 來做IC Design吧,這個領域很缺人。
yen3: XD

jdwei: 來做多媒體資訊領域,這個領域很有趣。
yen3: XD

Josh Ko: 來做Programming Language吧,這個目前也只有sinica iis在做而己,這個領域很缺人。
yen3: XD

結論: XD

---
完全不知道XD

星期二, 12月 02, 2008

基礎

我所認知的一個programmer要能夠達成三件事: 用數學做深度思考、用英文描述的四平八穩、用程式語言寫的高度藝術。

我很喜歡數學、英文及編程,很不幸的,我喜歡的事我都做的不甚好,會持續努力嘍,在這三個目標還沒有達成一定水平之前,我都會認為我還在打基礎。

有感

---
lay out lay 到死 XD

星期日, 11月 30, 2008

Time Complexity

這個問題非常的簡單,不過最近在對這個做練習,我做個簡單的筆記好了。

Algorithm所提的Complexity分為Space Compleity和Time Complexity

先談談Space Complexity,我覺得爭議還蠻大的,以fundamental of data structure in C/C++裡面所提及的計算,皆以programming language所佔用的記憶體做為計算,這對於新一代的程式語言,並不是具有良好定義,所以我想就此略過。

而Time Complexity的計算方法,可參考OOPS: Introduction to Algorithm 2005 Spring, Asymptotic Notation (這一堂課到2008都有,老師都同一個,可以看 這裡)。

而對於Recurrences Time Complexity的方法有如下幾種

  • Substitution method: 代入然後猜測最後的結果
  • Recursion tree: 把整個Recursive的狀況畫出來,依序得到一個結果。
  • Mater Method: 當T(n) 符合某個型式時即可使用。


最有趣的是Master Method,定義如下。

簡而言之,就是要比較n^{log_b^a}和f(n)的大小,那個函數的成長速度較快,就取用那一個,當然,這只是一個大概的描述,因為當兩者成長速率相似時(Case 2,允許差一個log^k_n),蠻常聽到有人叫他"老大定理",其實我比較喜歡Master翻譯成"主要",似乎會更為貼切。



至於其於兩個方法,Recursion Tree本身最主要的重點為,這顆tree不可能長成一個balanced tree,所以很難算出很直接的值,大部分都是算出整顆樹的高度,用逼近法算出Time Complexity。而Substitution method也很直觀,帶入後觀看規律,猜出公式即可得證哩



---
感覺上很像隨便寫寫XD

星期四, 11月 27, 2008

稱呼

這個,似乎最近越來越多人叫我老大、大哥...etc 呃,個人無意混黑道,叫我yen3就好XD

不過也還好,大部分都是學弟妹叫的,我認識的學弟妹也不多啊,昨天與一個大二的學弟聊天,沒有什麼很實際的感想,只能說,自己持續努力了。

感謝竹竹提供的東西,非常感謝,唉,時間過的越久越覺得自己像米蟲一樣啊,什麼都不會。

---
感冒中。

星期三, 11月 19, 2008

幫忙的藝術

我不覺得我有什麼資格可以提這件事,不過仍然很想提一下XD

前幾天聽到有人提及師大資工有一個學弟高中就用Ruby寫了一個查榜系統還因此上了電視,後來考上師大資工。非常好,我高中的時候尚屬於混吃等死的白目死小孩年代XD。

我大一剛進我們學校資工系時,意氣風發,樂於助人,交作業前的一個晚上曾經有15個msn,後來我就養成交作業前一個晚上去打籃球的習慣XDXD 不過當然,由於我到後面就生氣了,從那個時候,跟班上大部分的人處的很平淡到現在(說現實一點叫做,沒有在往來。)。

我想這不是最主要的原因,最主要的原因應該是我太白目XDXD,哈哈。但是後來這些年我遇到一些人,對於是否要幫忙這件事,我一律回答,只幫忙有價值的問題; 反面而言,請學會拒絕沒有價值的問題。

何謂有價值的問題,很簡單,單看這個提出問題請求幫忙的人自己下過多少功夫了,沒有所謂難的問題或簡單的問題,只有好問題和沒有價值的問題。所以當有人問我時,我常常說,這是一個好問題XD。

如何學會拒絕? 在我的經驗中,大部分的人是吃軟不吃硬的,請柔性拒絕,當然,也有人很白爛的,請視情況罵他xxx,說老子不幹了。絕大部分的狀況如果我不想回答這種問題,我就會,嗯...我想想,我可以改天再回答你嗎? 這個問題我當下也回答不出來。抑或是,我最近有蠻多事要忙的,可能沒辦法處理你的問題,你要不要等過幾天?

我個人認為,只要是朋友有難,我就會盡其所能的幫忙,不管我身處什麼樣的狀況(事實證明,這種想法有時候會把自己搞的很慘,不過常常會得到意外的喜悅:)),對於自己不熟的或者是不想幫的,學會拒絕的藝術與幫忙的藝術是一樣的重要的。

當然,像我大一樣,直接跟所有人說,我不幹了,我不幫這種鳥事,有時候不一定是好效果,喜歡寫程式的人,有時候是會從不喜歡慢慢變喜歡的,這樣子等於直接封殺了所有的可能性,就有點可惜啦XD,很想說,以後遇到這種情況時,可以發一篇類似"與妻訣別書"的感人文章,讓別人不好意思麻煩你,也是很不錯的XD。

---
又閒聊了XD

星期日, 11月 16, 2008

服務

最近有太多事想要寫,反而不知道要寫什麼,不過隨著準備研究所考試,這個blog的更新會越來越慢XD。

最近有朋友電腦壞掉,所以對這個名詞蠻有感覺的,以前的我很不喜歡品牌桌機,覺得平平同樣的價格,為什麼品牌電腦會賣這麼貴? 同時會覺得為什麼國外比較喜歡品牌電腦?

其實大部分買電腦與組電腦的人,都把服務視為一個無形的成本,其實服務應該是要花錢的,當然,用盜版軟體就免費啦,所以很多人去光華買零件組一組cost-down下來,其實差不多只有花掉很多時間及硬體部分的錢(以時間管理而言,學生時間真的很多XD),服務呢,如果你有好人,就有好人替您服務,如果你本身就是好人,那麼更不用說了。

不管買MacBook還是買一般的筆電,其實售後服務,我都得說,我不知道效率為何(我的上一台筆電送修三次,都很快),但是我得說,至少都有一個明確的點可以送,可以收,然後balabala就回來啦,很方便。一般所組的桌機,壞了,小則自己重灌,大則檢測硬體,送修換掉,其實這些都是很無形的服務成本,但一般人愛免費啦,所以就會導致,我只是想拿電腦做一件簡單的事(上網、聊天、交報告)。就變成,想要過的好,百般武藝不可少。

所以會有人說,Apple的電腦除了漂亮,就貴,阿婆關心(Apple Care)又要花很多錢,其實這些事都把隱形的軟體成本與服務去掉了。當然我不否認,Apple電腦售價是比較高一點,但把這些成本加回來之後,覺得貴不貴就變成見仁見智了。

現在的電子產品是越來越精密,也蠻容易壞的,這幾年,我比較會把售後服務也考慮進來,因為服務也是成本的一部分。

不要小看這些成本啦,你欠那些好人的便當與飲料,記得該請一請,不然以後外面公司的服務成本價位表看到你會哭哭喔XD

科科(這純粹是應景XD)

---
閒聊一下。

星期一, 11月 10, 2008

趕工失調

我在趕工寫作業之下,竟然寫出這麼GY的寫法,不太好玩...Orz

ifstream& readWavFile(char* filename, WavHeader& header){
ifstream* infile = new ifstream;
infile->open(filename, ifstream::in | ifstream::binary);
infile->read(static_cast(static_cast(&header)), sizeof(header));

return *infile;
}


---
真不懂自己為什麼會這樣子寫...Orz

星期日, 11月 09, 2008

神經水管與髮絲

這當然不是指真實神經,真實神經細胞很複雜,我也不太能理解這是一個怎麼樣的東西。

神經像水管有好處,排水比較方便,沒有爆炸的危險,由於粗了點,對於外界觀感較為輕鬆直覺,然後常常會做對一些事(不自覺的),也常常做錯一些事(不自覺的)。

神經像髮絲有好處,細水長流撐比較久,當然有爆炸的危險,對於外界非常敏感,然後常常會做對一些事(或許有感覺),也常常做錯一些事(或許有感覺)。

今天晚上,你要那一種神經呢XD?

---
單純白爛啊XD

星期五, 11月 07, 2008

Do As Infinity - For the future

To eating: for the future

MV

誰だって一度は大空を飛べるさ
今日から君の限界目指せ
For the future

やりたい事をガマンしてたり
よせばいいのに大人ぶったり
断る事もできなかったり
ホンとの君は
何処へ行ったの?

教科書通りの
人生 なーんて
うんざりするでしょ
さぁ 行こう!!

誰だって一度は大空を飛べるさ
今日から君を今 見せてよ
For the future

あと少しでまた強くなれるさ
輝く瞬間を駆け抜けよう
For the future

僕等 自由なんだ
さぁ 行こうよ

誰だって一度は大空を飛べるさ
今日から君の限界目指せ
For the future
さぁ一度はあの空を飛ぼうよ
今日から君の限界目指せ
For the future
さぁ一度はあの空を飛ぼうよ
フルスピードで限界目指せ
For the future

每個人都有一次機會可以飛上天空
從今天起就以你自己的極限為目標 For the future

想做什麼就別再忍耐
不要假裝自己很成熟
不懂得如何拒絕別人
真正的你到底在哪裡?

一如課本上所寫的 人生 難道不會
讓你受不了 來 出發吧!!

每個人都有一次機會可以飛上天空
從今天起就以你自己的極限為目標 For the future
沒有時間讓你再嘆息
用全速朝向極限前進 For the future

名為人生的故事
這劇本是你在當主角
如果有任何的不滿
儘管自己來重新寫過

不要什麼都沒做 就在怨東怨西
這樣怎麼會開心 來 出發吧!!

每個人都有一次機會可以飛上天空
從今天起就以你自己的極限為目標 For the future
只要再努力一下就可以變得更強壯
奔向閃耀的那瞬間吧 For the future

我們 是自由的 來 出發吧

每個人都有一次機會可以飛上天空
從今天起就以你自己的極限為目標 For the future

給自己一次機會飛上天空吧
從今天起就以你自己的極限為目標 For the future
給自己一次機會飛上天空吧
用全速朝向極限前進 For the future

---
幹,今天踩到狗屎...Orz

星期三, 11月 05, 2008

平靜

這幾天生活過的一團糟,今天是重新開始了。

---
習慣了。

星期六, 11月 01, 2008

沒有優選

輸了沒關係,不要輸掉自己的熱情與靈魂

這是我對我的人生最佳註解,其實比較擔心的是cllee,他每次看我們輸了就會很難過。

I have a passion for Computer Science so I don't give up anything what I want to do.

---
How to save a life.

星期五, 10月 31, 2008

耗能

有一種筋疲力盡的感覺

---
什麼事都不想做。

星期一, 10月 27, 2008

專題結束








睡不著,於是起床寫些東西。在下筆的此刻還是沒有完整的照片。這裡是複賽回顧,對於我在於決賽的表現,我只能說

我在這一個禮拜多所犯的錯誤,遠超過這三個月的總和。

分工不很明確,做事也不很好,把自己累的半死,卻總有閒置人員,只能說,自己做的太差了,或許事情不具有分割性,但是分配不均或不好總是對的描述,在這裡我想跟所冒犯的人道歉。我一有壓力或很累時很明顯,因為臉會垮掉,心情會不好,會不想說話或無目的碎碎念或自嗨,這些症狀在決賽這週通通跑出來了,也謝謝大家對我的包容。

eating 是整個過程中最讓我覺得驚豔的人,她的耐心與時間管理程度超出一般人太多太多,她處理的GUI極為漂亮,美工能力一流,文件撰寫相當流暢,學習新事物很積極(我看她用photoshop覺得一切都好神奇XD),雖然她大三上就擔心自己的能力是否能勝任這個專題,不過在種種事情中她都表現的勝任有餘,在這個專題過程中,我受到她的許多幫助,非常感謝。

Clara 在整個專題中有著絕佳平衡力,她主要負責程式設計、資料庫整合、GPS API使用、簡訊API開發、文件撰寫等等,最後的決賽簡報由她負責,我不覺得換作我去報告會比她好(我的專長是和老師吵架XD),穩定度極高,在整個專題的合作過程中相當愉快,如果有發生任何問題,絕對是我的錯,不是她的問題。

fire7617 有著很好的爆發力,雖然中間發生很多不愉快,是我工作分配的問題,他在OCR開發中付出的心力,還有決賽中影片的剪輯,及生動的表演,如果有機會,我願意再和他合作。

gb014388 是一個人際關係的極佳調合劑,不管發生任何人的問題,我總是麻煩他,他在整個決賽過程中所表現出的美工能力一流,雖然描述只有了了數語,但是很難說明什麼我和他的情感。

yen3 我自己,負責嘴炮和寫程式,在這個專題上談不出做了什麼,所以努力寫感謝文。沒有他們,就沒有我。

Chun-Liang Lee 是我大學最尊敬的老師,在我大學最白目的時候,他跟我說"做事不只有對不對,還有好不好",開啟了我的自我學習之路,在整個專題中,沒有老師,我無法成為一個有用的人(莊子:以無用為大用),提到老師,我難以下筆,因為能說的事真的是太多太多了,老師在最後寫與我們的文字寫著

Expecting the Glory to Come
Hi guys:

比賽終於在昨天告一個段落, 在結果公佈之前, 我想要告訴大家, 你們都是 No. 1!
You guys have done a wonderful job!
Let's expect the coming of the glory.

我想跟老師說

老師,你是我心目中最好的老師!!

在整個比賽中,有苦與樂,有笑與淚,無論如何,到今天總算是雨過天青了。我的大學生活,在去年的矩陣運算競賽中和今年的中華電信比賽,兩個拿上自己的全部來賭的夏天,堅持做好每一件我想做的事,我的人生才有價值,也因為賭上自己的全部,我才能看清自己的能力。或許

我不相信自己,但我相信這個團隊
也感謝母親與efang對我無私的支持,也感謝這blog的讀者,太多人可以感謝,所以不謝天XD,謝謝各位。


---
有照片時會補照片。