感謝
不知道要下什麼標題才好
Clara's blog article about birthday
朋友提及才發現,升大四的時候,好像很少有人有過生日的習慣了,蠻感謝同組組員的,應該是說,我不是一個擅長表達的人,一直不知道怎麼說自己的感謝之情。還是很感謝eating, Clara, fire7617。
想想我們這組感情也不錯,始終都是自己白目了些。謝謝大家。
---
謝天
Let's see how far we can go.
不知道要下什麼標題才好
Clara's blog article about birthday
朋友提及才發現,升大四的時候,好像很少有人有過生日的習慣了,蠻感謝同組組員的,應該是說,我不是一個擅長表達的人,一直不知道怎麼說自己的感謝之情。還是很感謝eating, Clara, fire7617。
想想我們這組感情也不錯,始終都是自己白目了些。謝謝大家。
---
謝天
written by
yen3
in
11:20 下午
0
comments
其實,每一年都會思考,我是否有足夠的資格過生日...
不知道從什麼時候開始,我覺得我少不更事的年紀太長,認為自己不甚好,從理所當然,到覺得自己應貢獻社會。在更多時候,覺得自己應該要會某些事,卻總是一事無成。雖有Josh鼎力相助,發現自己興趣為何,從imperative programming 跳到 functional programming 學習(我曾自嘲,這跟我打了九年的注音不打從嘸蝦米的基本學起其實差不多(笑))。不知為何想起國文課本所提及的一句話。
真實偉大的樸實無華
少不更事看書時,只是為了炫耀自己會了什麼,並不是一個可取的想法,現在看書的時候,只是單純想要了解一件事,到現在我不認為我理解了這句話,但是我所想,持續的努力,或許可以了解這件事。雖然一事無成,但努力前進,總有一天會找到答案,笨笨的前進,總可以讓一群人了解你笨笨的前進為何。
我曾跟Josh聊過一連串的事,才覺得自己總是浪費了一堆時間,不過我總是不後悔,因為因此我才會更珍惜當下與未來。就某個程度而言,有著一群我很感謝的朋友,我可以安靜的過生活,雖然實力不足,但更應該努力幫忙身邊的人。今年並不想和往年一樣列了一堆人名,大家不一定認識,且少列誰我都會覺得抱歉。我想說的是
希望,身邊的大家都活的平安快樂。
---
謝謝大家,今年是一個相當愉快的回憶。
written by
yen3
in
7:54 下午
0
comments
第一次買碳粉,才知道原來很貴,2650...Orz
人生因有夢想而為大,所以我正在K我印下來的兩份文件 "Introduction to lambda Calculus" 和 "Yet Another Haskell Tutorial"。
我的夢想很簡單,我想知道如何寫好程式,然後帶領一個團隊把程式寫好。我的兒時夢想很簡單,我想要寫出一個可以讓很多很多人用的好程式,我一直都因為這個原因前進。我不是一個有能力的人,我更不是聰明的人,但是我相信Randy Pausch說的兩句話
如果你認真過生活,那麼你的人生自然會帶給你答案
阻擋你的夢想必有其原因,而這道牆是讓你展示你有多麼想達成夢想。
其實在一兩個月前就知道有關Randy Pausch教授的事,但是腦中一直在思考非常多事,我想我有非常多的事想說,而這篇,只是一個開始
---
認真過生活,人生自然會帶給你答案。
written by
yen3
in
1:00 上午
0
comments
欠稿很大,預估要寫到folder後才能停一下。
環境
建議是用ghc(The Glasgow Haskell Compiler),大部分的環境都有提供binary,直接安裝即可,而ghci是一個互動介面,較為常用指令如下。
簡單的開始
如果撰寫了一個function,可以使用:t 來看其形別要求,舉個例子
Prelude> :t sum . map read . words
sum . map read . words :: (Read a, Num a) => String -> a剛開始學習,學會看type是一件非常重要的事。然而,就此打住,想先講講一些別的東西Just Function
在Haskell中最小的組成單位是function,想要表達一堆資料,可以用list(不知道對不對,不過倒是知道list沒有這麼簡單),一個function必有其input 和 output,然而,我學習的第一個問題,怎麼樣得知input和output的要求為何,如果跟C++ STL一樣,use type as an argument,必有其限制,所以:t非常的重要(因為就是拿來看型別要求),在Haskell裡,有著非常神奇的type system,有好幾次我問Josh,為什麼會如此時,卻超出我的範圍,以剛剛說的例子而言
Prelude> :t words
words :: String -> [String]
(yen3註:一個String為input,產生一個為String的List)
Prelude> :t read
read :: (Read a) => String -> a
(yen3註: 一個String為input,產生一個型別為a符合Read的要求)
Prelude> :t map
map :: (a -> b) -> [a] -> [b]
(yen3註: map是一個神奇的function,基本原理就是,input為一個list,output也是一個list,但是map會套用一個function,將list of a轉換到list of b,簡單的來說,就是對每個元素做同一個動作)
Prelude> :t sum
sum :: (Num a) => [a] -> a
(yen3註: input 為一個list,輸出後型別為a符合Num的要求)接著再回來看看原來的例子Prelude> :t sum . map read . words
sum . map read . words :: (Read a, Num a) => String -> a
(yen3註: 變的很明顯,輸入一個字串,而輸出一個型別為a符合 Read 和 Num,全部串起來做一次就會變成...)
Prelude> sum . map read . words $ "123 456"
579
(yen3註:把字串根據空白分開成為個一list,然後每個元素被讀取成某一個型別之後,sum把每個元素做一求和的動作。)
其實這一行沒有解釋的很清楚,何謂Read要求 ? 還有,轉型的時候為什麼要轉成a? 這就再說XD (因為我也不會XD) 其實就學到這裡的時候,可以猜到一件事,Haskell自己幫你做了非常多的事,很多事硬要推測到底,其實反正看不懂。看清楚一個function的要求為何,似乎變的很重要,看懂他的運作方式會更有趣每次連載都不會寫太長,基本上都是利用專題空閒寫作,我就盡量寫啦XD
---
基本上這篇的註都是大膽的猜測,但是想不到要用什麼字XD
written by
yen3
in
6:51 下午
1 comments
tag: Functional Programming, haskell, life
原本想說要用什麼 Learing about fuctnional programming using Haskell 之類的標題,但是一則是標題太長,一則是,我沒這麼專業,受到Josh Ko幫忙甚多,如果有任何錯誤是我表達不好,如果你看的懂,請出門左轉到Joshsoft留言感謝XD
What? Why?
什麼是functional programming? 簡而言之,一個programming組成的最小元素為數學性的function,在真實世界中的數學函式是沒有任何side effect,也就是說,給你一個input就會產生一個output,中間不會改變其他事。所以就某種狀況而且,這種思維非常適合數學好的人學習(我數學不好XD)。
functional programming之所以紅不起來的原因有很多,主要原因有二,第一,比起現在大部分的主流語言都來的慢,第二,如果很習慣現代的主流語言,學FP就會很痛苦(我就是那一個...Orz),但是誰都不能忽略FP本身強大的特性。在Erlang本身而言,善用了No side effect特性,以較為簡單的方法寫出平行程式。最重要的原因,現在的FP不再像以前一樣這麼慢了,但是良好的特性還是存在的。
Haskell是一個不怎麼紅而且推廣者也不打算讓他紅的語言,紅的FPL很多,Erlang, ML, F#都是,但是這些較紅的語言都允許一些現代主流語言的特性,反正都要踏入這個不紅的領域了,學比較純的東西或許比較有趣?
為什麼要學Haskell,最重要的原因,Haskell is a pure functional programming language,次要的原因,Josh Ko誘拐我成功了XD,如果夠純,或許我會從裡面學到非常多有趣的東西。
參考資料
基本上Haskell的參考資料中文的不是很多,入門的更少,看英文是一個比較好的方法,網站參考資料如下
written by
yen3
in
11:43 上午
3
comments
tag: Functional Programming, haskell, life
剛剛透過在美國的姊姊訂了一本 Introduction to Functional Programming using Haskell只能說,便宜一點點,不過還是覺得天瓏的代訂價3227有點誇張。
---
耶~期待~XD
written by
yen3
in
11:13 上午
0
comments
tag: Functional Programming, life
這是一篇有關programming的文章,不想看的可以跳過了XDXD,不過最近的我似乎很少寫這些文章。
最近一直在寫C# with .net compact framework,老實說,我一直被微軟的名詞搞的暈頭轉向,當我有問題只能靠著MSDN來解決的時候,有一種很深刻的無力感...不過我不得不說,Visual Studio .net 是一個很棒的軟體開發工具(雖然eating畫GUI時常常出現記憶體堆疊錯誤,她應該是畫太好...Orz),這部分是專題兼比賽關係,所以我大概等到比賽之後才會提及可以提及的部分,如果中華電信有保密條款之類的,我也只能說聲抱歉啦。
所以我想要提及一些我最近覺得很有趣的部分。寫程式越久只會覺得自己越來越不會寫程式,最近的興趣著重在兩個大重點functional programming 和 Refactoring。
functional programming 最近頗有復活的傾向,據我粗淺的知道(轉錄自某個老師告訴我的故事),上一次FP紅的時候是在一堆人瘋AI(Artificial Intelligence)時,Lisp是一個非常聞名的FPL,在1990年代附近一堆人在做這個題目,但是並不是有那麼實際的成果,結果做這類的題目變人人討打。FP其實專長並不止於此,就我的了解,讓你寫程式更像寫數學一樣,No side effect,lazy evaluation,等等之類的特性,使得近代的FPL極具威力,而跟現在主流的Imperative programming大異其趣,著實是一個讓我產生高度興趣學習的領域,據Josh Ko描述,有比較靠近主流的ML和pure FPL的Haskell,外加我自己所買的Erlang,我想我的學習會以後面兩個為主。到目前為止,我還是不會寫,或許過一陣子,可以自己試著寫出一堆有趣的東西。
舉個例子好了sum . map read . words $ "123 456"我當初看到這行程式碼我就哭了,這可是我第一次碰C寫的要死要活的題目,轉成簡單的C++ Code;
std::string s = "123 456";
s += " ";
int sum = 0, temp=0;
for(std::size_t i=0; i< s.length();i++){
if(s[i]>='0' && s[i]<='9') temp = temp*10 + s[i]-'0';
else{
sum += temp;
temp = 0;
}
}當然,上述的程式碼沒有做任何的最佳化寫法,不然可以用C的atoi()之類的function,重點是,再看一次FP的程式碼,光看字面就可以猜到程式的意思了(要了解沒那麼簡單,我被Josh Ko搞死了好久...Orz),以後會盡量把自己學習寫FP的筆記放上來,我想我有很大的機率會喜歡上這種程式思維。
接下來回主流Imperative programming XD,昨天嘗試的把Refactoring從第二章推進到第八章,這是一本我很少數後會後悔大一沒有買來看的書(當初錯過Effective C++也沒那麼嚴重),裡面提到種種的方法太漂亮了,從function level的Composing Method到Object之間的Moving Features Between Objects& Organizing Data等等的方法,給我在OOP上很多體悟,也再一次深深的了解自己基本功的不足,舉個例子而言,一般寫身份字號產生器時,最難處理的是每個英文數字所代表的數字,我在寫作時就提出了一個很簡單的方法
// normal writing
char c = 'a';
int value = 0;
if(c=='a') value = 10;
else if(c=='b') value = 11;
/*...*/
// better writing
const int c_value[] = {10, 11 /*...*/};
char c = 'a';
int value = c_value[c-'a'];這個方法在Refactoring也有收錄,名字為Substitute Algorithm(6.9),Refactoring並不會改變程式所要表現為何,很多時候會把一個複雜的function拆成由許多小function所組合,由專家告訴你如何測試及重構出一個更好的程式,在看這本書時,是一個很棒的體驗,縱使自己原本就會復審自己所寫的程式碼,我想我還是會不定期的看看這本書,會給我什麼體悟
學習相關OOP的運用最大的問題是,我一定得知道這些事(Design Patterns, Refactroing ...),但是我又得忘掉他,然後在需要的時候想起來,而不是為了運用而運用,但是我想,或許我會在Refactoring改變一下作法,或許我很難體會怎麼用Design Patterns,但是我想我會很樂意的使用Refactoring來學會Design Patterns,這時候就不得不提到 "重構-向範式前進(Refactoring to Patterns)",我還沒閱讀,但是我覺得或許是一個行的通的閱讀。
還有很多想提的沒有提及,就下次再說吧。
---
好長的一篇XD
written by
yen3
in
9:05 上午
0
comments
繼主機掛點之後,螢幕(Benq FP71Q+)又壞了,跟上一次死在同一個錯誤,螢幕的開關壞了,距離上一次送修一年多。
我的桌上型電腦大概整組壞完了...有一種懶的修的衝動...
---
有一種很衰的感覺...Orz
written by
yen3
in
9:05 上午
0
comments
tag: life
原本想要回彰中講Generic Programming的,不小心講成這個XD
只能說自己在認識的人面前都會爆走,顯然是一個不太好的現象,講解的主軸還是GP,不過中間穿插了許多小故事,也講解了許多自己的想法,我想在這個blog再講一次。
我遇到許多人都跟我說要努力達成某件事,但是只有少數人能達到,沒到的人不是沒有這樣子想。
如果想要對自己構成某件改變,不改變自己的生活形態是不可能的,如果只有想一想之後,生活仍然一模一樣,我想不會有什麼改變。
要認真是一件好事,我想以後如果有類似問題,我會這樣子回答的。
---
所以我連NFS都戒掉了XD
written by
yen3
in
5:59 下午
2
comments
tag: life
以前可以暢所欲言的我,似乎漸漸的消失。或許因為知道世界之大而安靜,保持更好的觀察與學習能力,在前進。
明天準備回去講我忘的差不多泛型程式設計,今天因為颱風只有中部停止上班上課。想一想還是頗要有趣的,一般都是其他地方停課的。還是說我可以就此偷懶,讓他們今天的上明天的課XD 不過人得認清現實,有這麼好嗎XD
時間充足的狀況下,我蠻願意準備這堂課給大家的。
---
似乎不會有時間充足的狀況
written by
yen3
in
9:05 上午
0
comments
tag: life
我的桌上型電腦掛的差不多了。
現在想想,這台當初升大一買的時候,可是一個不錯的配備,Athlon64 3500 + 1 GB DDR + Geforce 6200,在這台寫程式,著實十分快樂(不過那時候寫的程式老實說也不吃重),但是大一心情不好的時候,每天拿它來跑Need For Speed: Most Wanted跑到顯卡熱當為止,到大二之後,就不會這麼操了(和efang在一起了,沒時間玩XD),現在想想,大一操這麼兇的電腦,不掛也困難。
這個學期當機頻傳,不是顯示卡出錯,就是記憶體掛掉,昨天徹底掛點,開機時連逼聲都沒有,初步推測,主機板掛了,記憶體掛了一條(學弟幫忙測試得到的結果),顯卡應該也差不多了。想想,以前電腦掛掉,就會很有活力的自己下海測試,換零件,直到好為止,漸漸的,我只是想安心的寫程式,這學期用MB的時間非常長,所以連這台什麼時候掛的,我都不甚清楚,想想也甚為慚愧,疏於照顧自己的電腦,電腦也不太可能會乖乖幫你忙。
或許暫時還是以MB為主工作,等比賽比完,再來好好的修理它,總是要盡心盡力照顧好每一台電腦的。
---
感觸良多。
written by
yen3
in
9:48 上午
3
comments
tag: life
Visual Studio .net 2005 or 2008 雖有 Team Suite 協助做版本控制,但是並不是一個非常好的選擇,當然,Team Suite(2008稱為Team System)還包括版本控制以外的功能,例如說可以做單元測試(Unit Class Test),等等之類的,由於Team Suite太肥了,我決定還是朝向軟體來協助。最主要的原因,要做到Team Suite的版本控制,Server端要裝Windows Server 2003,什麼鬼...Orz
Subversion(svn) 在 OpenSource 界是一個非常常用的工具,如果在純Windows的環境下,伺服器端,可以使用Apache + svn,是一個不錯的選擇。也可使用IIS + VisualSvn,網路上可以爬文,我就不再多廢話,我是使用後者(因為Server原本就有裝IIS,不想相衝)。
在Visual Studio .net 2005, 2008,皆可使用 Ankhsvn,這個軟體為一個plug-in的形式存在於Visual Studio中,不過並不是那麼穩定,可以使用TortoiseSVN來做為輔助(雖然大部分的狀況下他比前者還重要XD)。
如何讓很多人用在Visual Studio 用svn寫同一個專案,我試出來的方法為,先讓其中一個人建好project,用svn上傳之後,其他人先用TrotoiseSVN下載下來,之後直接開啟裡面的專案檔,在Visual Studio裡面即可設定好,可直接Commit,非常方便,不建議使用Anksvn來做設定新專案的動作,通常會有一些奇怪的事發生。
設定好了,大家可以快樂的使用svn來寫同一個專案了。
---
為什麼我覺得這篇的口氣很怪啊...Orz
written by
yen3
in
8:57 上午
0
comments
tag: programming, software
其實很多事很難以解決,明明每天都忙到很晚,感覺上總是沒什麼進度。或許只能說自己太久沒有上緊發條了。
Qt其實是一個很有趣的東西,我建議自己的學弟去學習,我自己還是在Google Static Map API上打轉,pre-fetch map其實有很多事可以考慮,可以試試。
開始閱讀和運動習慣,算了,想到再寫,超多事可以寫的,下筆此刻竟一個思緒也無。
---
無狀態
written by
yen3
in
10:34 上午
0
comments
tag: life
人跟人之間的問題果然非常難,還是生程式架構比較簡單...Orz
---
雖然這次要生的架構也超難就是了
written by
yen3
in
1:26 下午
0
comments
tag: game, life, programming
雖然還有一個project要完成,對我而言,大三下已經正式邁入一個尾聲。雖然這學期寫的程式都不大,但是也不少,雖不能輕鬆應付,但是也沒有遇到多大的問題,我想,cllee帶我們去比賽,在這個學期是有產生決定性的效用的。
思考了很多事,以學業上而言,有時候人不能思考太多事情,笨笨的去做,反而會有更多的效果,對於寫程式這條路而言,我才剛開始,我並不是跟Josh一樣很努力又有很好的結果,我是一個不怎麼努力的人,且很笨(笑)。早期大一大二閱讀的書到現在漸漸用的上了,不過卻有一股心虛的感覺,越用才越發現,原來以前的自己所學是不怎麼踏實的,但是也得說,如果以前不堅持看某些書的話,現在可能更無法把事情做好了。
對我而言,我希望盡量把我的現實面對生活拖到最後一刻,一直到現在,我還是可以很熱情的學習每一項東西,雖然這每一項東西考試不會考到,對於實質的生活不一定會有幫助,但是我喜歡。ycfu跟我說,你書看太多了,應該直接下去接個project來實作才對。這句話是對的,我理論不好,我寫程式也不行,有時候寫程式,下去寫就對了,並不用思考太多能與不能的問題。
最該感謝的還是cllee老師,在我覺得心情不好啊,人生徬徨的時候,找他聊聊,總是會給我一股最直接的力量,也感謝老師一直容忍我們進度落後,暑假我會一次補回來。
smallpig老師,對我而言,他是一個講話有點毒的老師(雖然blog一點都看不出來XD),不過從他的身上學到不少的現實生活的程式設計的想法與技巧,非常感謝老師,我這學期有一半的時間在寫他要求的程式,也可見我的功力不足,但也無妨。
ycma老師,有人說他悶騷,我覺得他是對某些技術存在著狂熱的老師,unix programming上的非常精采,雖然我們一直拖課,不然會聽到更多東西,但是這些事物帶給我是全新而不同的想法,也從老師身上學到很多編程技巧,雖然老師常常被我們嚇到XD。
efang,我很感謝,心情不好的時候,總是會陪著我,我會努力寫程式的。
eating,雖然你可能覺得你做不了什麼,但是一個安心寫程式的環境非常難求,沒有你,我也辦不到。
clara,雖然你常手殘XD,不過常常從你身上學到很多很有趣的程式想法,讓我的腦子開通了不少。
fire7617,雖然你常看我不爽,但是感謝你容忍我一直犯錯,我們要一起向前衝。
gb014388,全方位的心靈導師,以後還是靠你了XD。
其實,在這學期才完全想通一件事,我一直很想認真做專題,但是專題會卡到研究所考試,我的想法很簡單,我想把專題做好的原因是,我想做好一件事,做好一件事的態度會影響我一輩子,然而,今天考研究所是一個選項,當然,沒有考上是一件可惜的事,重點是我考研究所是為了什麼。在人生的目標前面,路不只有一條,但是我要選擇我做起來不會後悔的路,如果今天沒有做好該做的事,考上研究所也是沒有用的,做好該做的事,接下來才能談下一步,能影響人生的,往往是想法,而非現實生活的事物。我會試著努力準備研究所,但是,在把這一件事做好之後。
這個學期生活非常的簡單,連愛看的日劇都很少看了(這跟桌上型一直當沒辦法抓日劇看也有很大的關係XD),事情比以前多的狀況下,如果保持同樣的生活,能做的事只會比以前更少,得要有所交換,才有辦完成自己想要做的事。
---
好零碎,不過想法只有這些。
written by
yen3
in
7:44 上午
0
comments