星期日, 1月 20, 2008

No comment

這是我在學弟妹版上po了一篇文章的預期,這篇只是興之寫至,不會有任何reponse是預料中的事,不過,身為一個學長,該告知學弟妹的事,該幫忙的,我們還是得做,原文轉錄如下


[閒聊] 寫程式的兩三事

各位學弟妹好,我是資工三,知道我的可能不多,不過也
不重要(笑)。

我是一位喜愛寫程式的人,當然,我曾經也是遇到很多問題
最大的問題是,我平常該怎麼練習寫程式這件事?

多閱讀,多思考,多寫程式是很重要的事。

多閱讀是無法避免的,如果以後想要走資工這條路,就得看
原文書,當然,從高中上來要變成完全閱讀原文需要一點時
間,中文書是輔助你學習,但是不是主導你學習,最新的訊
息還是只有原文書才有(侯捷says: 不讀原文不是你混不
下去,不然就是你不想混了。)

換個角度來思考,如果想要做好一門學問,真是的該好好讀
完一本書的,如果長期適應補習班的填鴨式教學,是否已經
喪失自己學習好一件事的機會?如果只想應付考試,是一件
非常容易的事,重點是,這四年過去之後,對自己留下了什
麼呢?

讀原文書的方法很簡單,以Absolute C++ 3/e為例,相
信大家都知道for, if, else之類的語法了,不妨從此
看起,因為懂了,看起這些片段比較容易抓到重點,也比較
沒有懼怕感,看久了,就習慣了,當然,一開始需要花很長
很長的時間,我記得我第一次看原文書時,一小時只看了
兩頁XD 也可以自己先試著看懂程式碼,再看內文,相信對
於抓住文章重點很有幫助。

如果一件事一下子就可以做好,那麼相信別人也辦的到,
唯有自己做很久的事,才能一點一滴的創造出差異。

當然,如果想要進階閱讀的話,我推薦
# C++ Primer 4/e 中文版(寒假會出)
初學者如果有不懂之處,看個中文也不壞 XD?

多思考的話,我們略過,不然這篇文章會過長XD 有興趣
歡迎找我討論XD

多寫程式的話,不妨多練習,而我們可以有下列目標。
# 老師上課所提及的程式可以試著重寫
模仿老師上課的程式,不妨一個一個字的重打,增
加熟練度,學習是從模仿開始。寫完之後可以自己
把課本蓋上,自己再重寫一次,是一個可以讓自己
快速熟悉程式概念的方法。

# 寫寫書上的練習題
我不否認,教科書上的練習題都蠻無聊的(尤其是
Absolute C++ XD),那麼可以看看中文書上
的習題,都還蠻好寫的,簡單的可以寫一寫,多少
可以增加對語法的練度,困難的也可以當作磨練
自己嘍。如果真的覺得很簡單或者是想看看世界

推薦書籍
@ 名題精選百則-使用C語言 冼鏡光著

# 寫寫網路的練習題
事實上最直接推薦的還是ACM,上傳程式碼之後
會幫你執行該程式碼,判斷對錯,由於題目難度
參差不一,我蠻建議可以先從簡單題練習起,但
是也蠻複雜的,如果有興趣的歡迎與我聯繫XD。

如果想要了解,可以先看看這個網頁
http://axp1.csie.ncu.edu.tw/~rick/acmguide/

推薦網站
@ ACM http://acm.uva.es
@ Lucky貓的acm園地 (ACM 部分中文題目翻譯)
http://luckycat.kshs.kh.edu.tw/


事實上只是想閒聊一下,想不到還是寫太長了(笑),不過如
果對寫程式有興趣,歡迎與我聯繫,或者是來blog逛逛(笑)


---
美好的世界就是期待奇蹟

星期六, 1月 19, 2008

錯覺


剛剛把書架上的書都拿下來,才發現,原來學校的書架也蠻大的XD

---
為什麼以前一直覺得很小XD

HashTable - 以簡單的STL實作之

嗯,我還是覺得用template比較好,畢竟可以完全把事情抽象化是一件很有趣的事,在這一次的程式中簡單的使用到functor和template partial specialization(用在產生hash value)上,參考了不少書只能寫出這樣子的程式,甚感慚愧,事實上寫這個程式我只是想回復使用template的手感,不過感到的最可惜的是下面這個程式碼

template<class T, class EV>
ostream& operator<< (ostream& out, HashTable<T, EV> rhs){
for(unsigned int i=0; i<rhs.u.size(); ++i){
copy(rhs.u[i].begin(), rhs.u[i].end(), ostream_iterator(out, " "));
out << endl;
}
return out;
}


code

應該有辦法避開這個for loop,使用STL應該有辦法的才是,只能說自己能力不足,這個寒假可以好好玩一下

---
我還是玩心很重XD

hashtable的簡單實作

讓我們談談如何實作一個簡單的hashtable

嗯,剛好我最近在複習怎麼玩C++的STL,也有學弟問,我想可以討論一下hashtable怎麼使用C++實作。由於學弟妹皆沒有template的概念(這是很可惜的一點),所以我們就不用template啦。

首先,我們大概說明一下hashtable,大概需要怎麼樣的資料結構

  • hashtable(廢話XD)
  • linked-list
  • dynamic array
以這一次學弟妹問到的bookmark為例,如果我們要做一個hashTable,那麼我們會希望有一個array,來儲存整個hashTable,所以我們會寫如下的程式碼
class bookmark_hashtable{
public:
bookmark_hashtable(int s);
/* ... */
private:
int _size;
bookmark_linklist* u;
};

bookmark_hashtable::bookmark_hashtable(int s=57){
/*
* 當決定整個array的size之後,隨之動態分配一個新的linkedlist array
* 每一個array element 皆為 linkedlist,而array index即是自己需
* 產生的hash value。
*/
_size = make_next_prime(s); // int make_next_prime(int num)並未定義,自行撰寫XD
u = new bookmark_linklist[_size];
}

bookmark_hashtable::~bookmark_hashTable(){
/*
* 當object life time end,記得delete dynamic array
*/
delete [] u;
}


這時候就興起一個疑問了,bookmark_linklist從那裡來,呃,基本上第一份作業有關url的實作,稍做改變即可,不過基本架構如下。
struct bookmark{
/* ... */
};

struct bookmark_node{
bookmark data;
bookmark_node* prev, next;
};

class bookmark_linklist{
public:
/* ... */
private:
/* ... */
bookmark_node* start;
};


那麼我們還需要做什麼? hashTable的架構已經完成了,接下來就只有增加功能,如果bookmark_linklist的功能寫的足夠,bookmark_hashtable應該都能直接支援。例如說

void bookmark_linklist::add_data(bookmark data){
/* ... */
}

/* 如果bookmark_linklist::add_data已實作之則我們可以寫 */
void bookmakr_hashtable::add_data(bookmark data){
int index = hash_value(data);
u[index].add_data(data);
}


匆促之下臨時寫成,有問題歡迎多多討論XD

---
還是有template比較好玩XD
08/01/19 05:58PM 聽說很多學弟妹對linked-list不熟,我想起來我以前寫過XD

星期五, 1月 18, 2008

計畫

寒假計畫好像很簡單,就三本書吧XD

  • Introduction to Algorithm 2/e
  • Computer Orgranization and Design: the hardware and software interface 3/e
  • C++ Primer 4/e 中文版(基本上是當故事書看,如果寒假拿的到的話XD)


就這樣,希望能開一連串的連載嘍XD

---
希望不要跳票 XD

星期四, 1月 17, 2008

寒假

開始啦,不過很多事情尚未確定,預計的計畫都是讀書,所以暫緩po出XD

星期二, 1月 15, 2008

以後再說

看到學弟妹的版上說一個學期五次作業很多...? 我自己試程式的次都遠遠超過

---
算了,考完再說...Orz

星期一, 1月 14, 2008

早晨

其實現在也不算早了,只是剛好這是期末考前的空檔XD 天氣轉冷的當下,其實很怕自己睡過頭XD

有時候仔細想想,每個人總是會有想把自己的事做好的時候,有人做好了,有人做不好,心有餘力而不足的事其實常發生,對我而言,其實這算不了什麼,我有些科目可以high pass,有些科目可以被當掉,我可以玩VHDL玩到整夜沒睡,我也有翻到書就掛點的記錄。

學生的最大好處就是,學校允許學生犯錯,但是不代表可以一直犯錯XD,應該是說,當我們在做多種嘗試時,可以由於很多因素犯了錯誤,進而學習,到了社會,可能就沒這個好處了。所以在我們當學生時,記得多嘗試,多學習,多接觸不同的人群,我覺得這樣子還蠻有趣的。

事實上PageRank升到1我還蠻高興的(看清楚,我沒有廣告XD),因為總覺得很平凡的自己,可以因為這個blog認識更多的朋友,從以前到現在,我還蠻喜歡抽學伴的(交了女朋友之後也是XD),因為我從他人身上,看到不同的人生(我只是愛聊天XD),不然我怎麼可能知道,政大無熱水XDDD。

有時候常常在想,我做的跟資工無關耶,我要不要改行當張老師算了XD DJ也不錯,還是,無業遊民每天嘴炮 XD

就算閒聊一下嘍XD

---
早起會讓心情好一點~

星期六, 1月 12, 2008

YUI


這是一個日本歌手,從Music Static 2007.2006 SuperLive 看起來很安靜的樣子,但是一看她演唱起來,整個人有亮起來的感覺,這次因綠際會,聽到她的第一張專輯 FROM ME TO YOU ,聽她的歌不能只聽太陽之歌喔,她可是有很多歌可以聽的,推薦 Merry Go Round(FORM ME TO YOU), CHE.R.RY(Can't Buy My Love)

---
我不懂日文,別問我歌唱什麼XD

Page Rank


這個是Josh的pagerank,我覺得有這個分數是很正常的事,恭喜恭喜,然後接下來是....
這是怎麼一回事...Orz 我又做了啥壞事了XD

---
開始懷疑pagerank了XD

星期五, 1月 11, 2008

小聊一下

雖然我不是頂認真的做知識管理的CMS,但是如果使用XAMPP + Drupal ,的確可以很輕鬆的把CMS架好,讓架好一個CMS的付出成本降至極低。

anyway,架站那麼容易了,架CMS的重點是什麼呢? 是你想讓這個CMS所扮演的角色,我蠻認同老師在課堂講的一段話

Web 2.0是以使用者為主的應用,但說穿了,這是將Client-Server架構發展到極致下的結果。

結果是一個很簡單的,當我看到PC World上的年度最讓人覺得失望的科技,Social Network名列第八,倒也不是一個讓人覺得太訝異的結果。只是發展到一種極致,我的興趣不是網路,不然以我不怎麼靈光的腦子來思考,網路的下一個未來在那裡? p2p似乎還是存在一點問題,並不是每個人都有固定的實體ip,只要這個問題存在,Server還是有必要存在的,但是如果每個人都有實體ip,具有不可變更性的話,你在網路上的所做所為是受到監控的,每個人該不該有自己的ip也是一個兩難的問題,誰喜歡被監控呢?

回到正題,當我們架設CMS時,定位是什麼呢,我跟老師說的是,我不想做大眾市場,市場機制很早就證明,把市場做大不一定會賺,但是如果做出市場區隔,或許可以保有一定的活力,所以我跟老師說了,該做的CMS是小眾的固定的,知道對方是誰的,和現有的存在CMS大異其趣。有一個原因是,被人做爛了,還有一個很大的原因是,當把一個知識市場做大時,貢獻的相對比例就降低了,如果不考慮從中獲利的因素,我比較喜歡小眾市場。因為一旦把市場做大時,就有人想要從中建立屬於自己的影響力,在小眾市場中,比較不需要這樣子的角色。

台灣的獨立音樂,就是一個很好的例子,看起來很小,但是加以分析,可以從中得知,如果可以做到一定的市場分隔與規模,獲利百分比不見得會比流行音樂來的低,如果今天獨立音樂有著一群有著mp3仍然會買正版CD的人,跟流行音樂,大家抓就好的人而言,我相信獨立音樂買CD的人較多,與其阻擋盜版,不妨試著建立屬於自己的市場,消費者是可以被教育的(這就讓我想到,張懸把聽歌的人稱之為聽眾,而李玟稱之為歌迷,兩個皆為我親耳聽見:) ),又扯遠了

只是閒聊,就當作廢話一則吧


---

只是有人說聽不懂我說的,我就隨興說說...XD

做壞事

昨日與Josh討論到很多事,有時候,能當上教授,除了本身的實力,還有一些額外的因素,當然,這會顯示這些事情很複雜,我們就跳過吧。

至於志向問題,我想不論是一個理論家,實作家,理論與實作並重的人,都有其發展的空間,決定好就去做吧。

另外也順便討論一下到底要怎麼樣的程式才能灌爆別人信箱,他之前試著做過,用Ruby做的,因為有內建套件,所以很方便,我想想,就用Java的Socket Programming部分做出來,也很簡單(不到三十行),不過事實上會卡在一些問題,現在大部分的Mail Server並不支援直接登入使用SMTP寄信,不過倒也還好,如果用一個浮動ip,然後再隨機尋找可以的就好了,比較大的mail server不行,我想還是有很多中小企業或中小學校沒有關掉? 這也是有可能的,不過當然,這是就技術層面來討論,實際上不會去做的,當然,也不會放程式碼XD

----
測試時,我的信箱多了好多信XD

星期四, 1月 10, 2008

看到鬼

這是真的嗎?

---
從Josh那邊看到的XD


印刷廠的排程趕不上,到一月底才會上架,譯序很讓人期待,雖然沒有某些東西我會很想炸人,那麼現在是預購時間嗎,書商應該要,預購有特價啊,送海報之類的(敲碗~)XD

星期一, 1月 07, 2008

最近

最近,沒啥大事發生,就是一直寫程式吧!? 聽說還有兩隻程式要寫 XD 不過都算是小事了,只是最近朋友寫程式落入一個我難以理解的狀況,我只能說,做事乃循序漸近之行為,絕對不是瞻之在前,忽之在後,君不見萬丈高樓平地起,豈有蓋空中樓閣的道理。

雖然擔心,但是也無法說什麼,只能說繼續努力了。期末考近啦,也希望自己翹課能翹少一點了XD

---
我為什麼要寫的文言不文言,白話不白話呢...Orz

星期日, 1月 06, 2008

Google Code

今天小摸一下,可以把程式碼集結成一個地方,也可以讓人搜尋,不太清楚怎麼用,但是一個project有100mb的檔案空間,我想我可以用很久很久,然後也可以直接下載,我想以後檔案會放這裡,比較好整理。

也因應Google Code和Picasa,訪客留言區,所以小小的調整的一下sidebar的版面配置

---
當然,還是全部都是free

星期六, 1月 05, 2008

用GooglePage存的檔案,最近又可以下載了,似乎是在我把音樂移掉之後的事,看來Linkin Park魅力不小,大概以後不敢放音樂在上面啦,保持可以正常下載就好。

所以我之前猜的是錯,原來google還是開放自由連結的,所以我還是會繼續放在那裡吧XD

---
剛好可以偷懶了XD


12:06 PM 發現好像蠻多人在找我放的新版個人代表圖(這絕對不是我畫的,不過我很喜歡),會不會再爆掉啊...Orz
01/06 06:39 PM把圖移回學校了,應該不會有事了XD

以UDP實作RDT

花了很多時間之後,實作出以UDP實作reliable data transfer的半成品(因為我覺得並不是那麼完美),檔案僅供參考嘍,以Java實作之。

code(Google Code)

還是一樣,歡迎自由轉載,無需告知,不過最近班上在寫這個作業,應該不會有人找到這裡來XD?

好像變成某些關鍵字第一名了XD

---
但是還是因為這個東西搞了一個禮拜...Orz

星期三, 1月 02, 2008

RDT二三事

建立在一個假設上,ack packet完全不會loss掉的話,那麼事實上單個packet transfer的RDT,已經做的差不多了,所以接下來該考慮實作如果連ack packet都不見時該如何處理。課本事實上用了一個偷懶的方法,反正在一定的時間內沒有收到ack就重傳,也是一個不錯的選擇XD

---
事實上有點語無倫次的感覺


02:29 AM 事實上sendPacket設定一下就可以達成這個要求了,我剛剛在想什麼,竟然認為很難,看來腦袋有錯亂的傾向XD

星期二, 1月 01, 2008

寫程式

寫程式就是一個可以把阿匹婆變成林志玲的魔術

---
但是寫程式不是魔術靈XD

星期一, 12月 31, 2007

寫程式之餘

RDTACKPacket ackSizePacket = null;
do{
sendPacket(sendPackets.get(0), clientSocket, IPAddress);
ackSizePacket = receiveACKPacket(clientSocket);
}while(!(ackSizePacket.getPakcetNumber() == 0 && ackSizePacket.getACK()));

寫RDT之餘,看到這一段程式碼,發現每一個function 都是自己撰寫的,也就是說這一段程式碼是我寫的程式碼的組合技XD 看起來也蠻有趣的

---
寫完會更有趣XD