星期六, 2月 16, 2008

溫度

在長庚桌上都會佈滿寒氣,連帶我的MacBook運轉時出現難得一見的超低溫,37度XD

---
之前有過打開只有22度 XD

星期四, 2月 14, 2008

Valentine's Day

今年的情人節,沒有意外。不過尚可以說是過的平平安安,因為都在睡覺...Orz,還是來點首歌曲好了,Linkin Park - Valentine's Day

Valentine's Day, Linkin Park, Miniutes to Midnight(2006)
My insides all turn to ash, So slow
And blew away as I collapse, So cold
A black wind took them away, From sight
And held the darkness over day, that night

And the clouds above move closer
looking so dissatisfied
but the heartless wind kept blowing, blowing

I used to be my own protection, But not now
Cause my path has lost direction, Somehow
A black wind took you away, From sight
And held the darkness over day, That night

And the clouds above more closer
looking so dissatisfied
and the ground below grew colder
as they put you down inside
but the heartless wind kept blowing, blowing

So now you're gone
And I was wrong
I never knew what it was like
To be alone

On a Valentine's Day
On a Valentine's Day
On a Valentine's Day
On a Valentine's Day
On a Valentine's Day

(I used to be my own protection)
On a Valentine's Day,
(But not now)

On a Valentine's Day

(Cause my mind has lost direction)
On a Valentine's Day,
(somehow)
On a Valentine's Day

(I used to be my own protection)
On a Valentine's Day,
(But not now)
On a Valentine's Day

(Cause my mind has lost direction)
On a Valentine's Day,
(somehow)

事實上我的狀況跟歌所描述的完全不像,但是我還是非常喜歡這首歌曲。

---
以前或許很像XD

星期三, 2月 13, 2008

Mac OS 更新

昨天得知有Mac OS 10.5.2更新,但是一更新完,我就陷入"login loop",於是乎我就上網求救啦,結果有好心人告訴我原來官方可以尋找答案,但是捫心自問,我不太會下英文關鍵字就是了,官網是這樣子說的

If Leopard is installed
Start up from the Leopard Install DVD and perform an Archive and Install installation (and select Preserve Users and Network Settings).

簡單的而言,你重灌就對了XD 今天和JC見面,順便借了Leopard光碟重灌(我的放在桃園...Orz),於是乎修復好了。

去掉這點奇怪的原因,10.5.2真的讓人感覺好很多了(或許是心理作用? XD),至少Adobe Printer可以用了,之前都不能用...Orz。

---
麻煩一場XD

星期二, 2月 12, 2008

function object

首先,心愛的MacBook無法開機,感到非常的心痛,偏偏光碟在學校,只好等回學校再說了。心痛歸心痛,文字還是得寫的。

function object 到底威力何在,抑或是說,重要角度為何。

function object(functor) 是泛指利用overloading operator(),而讓一個class能像function一樣使用,但是擁有更多的彈性,一般書上都會寫,由於class擁有data member,所以functor可以有local state。 舉個例子而言

#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;

class Print_Call{
public:
Print_Call():t(0){};
int operator()(){
return ++t;
}
private:
unsigned int t;
};

int main(){
generate_n(ostream_iterator<int>(cout, "\n"), 5, Print_Call());
}

首先要注意的是Print_Call(),此行是為了喚起default constructor,而不是function call(一開始我的確搞錯XD)。事實上我們可以寫一個比較簡單的等價呼叫,來試試
int Print_Call(){
static int t=0;
return ++t;
}

int main(){
generate_n(ostream_iterator<int>(cout, "\n"), 5, Print_Call);
}


那麼再來看generate_n的原始碼(我稍微重寫了一下)
template<typename OutputIterator, typename Size,
typename Generator>
OutputIterator
generate_n(OutputIterator _first, Size _n, Generator _gen){
for(;_n>0;--_n, ++_first){
*_first = _gen();
}
return _first;
}

在C++中,operator * 和 operator () 皆可做overloading的動作,所以*_first可以是一個trival pointer或是一個iterator,而_gen(),只要能夠支援operator() function call即可,也就是,traditional function 或者是function object 皆可支援,有了最大的共通性,重點是,如果可以寫成function obejct,加上template,就會形成Generic Programming的一部分,因為可以針對很多的共通動作寫成template function object,省下不少麻煩,而STL內建的function object並不多,但是可以用組合技來達成自己要的效果,要怎麼使用組合技呢,重點就是function adaptor了。

不過當然,function object不是沒有缺點,很大的缺點就是,如果為了配合Generic Algorithm,可能會寫出很多一次性的function object,這在程式碼上會變的較難維護,Java的inner class是一個不錯的選擇,而在Boost中也有提出良好的解決方案,可以看一下Joshsoft: Lambda Expressions in C++0x,不過如果想偷懶不想使用function compose, bind,當然可以自己寫一堆function object,也不會有人說你犯規,只是以後好不好維護而己(也還好XD)。

寫到這邊吧,本來還想寫function adaptor,只能說待下回分解了。


---
不知道有多長耶XD

體悟

現在比較能了解Josh為什麼有關程式的文都那麼長了,因為敘述一個完整的思考所須的文字不會太少...

---
所以我決定下次要寫長一點XD

有感

這是一篇Generic Programming 的文章,不是生活文,不想看的可以跳過了XD

今天又把"泛型程式設計與STL"看完一次,對於大一自己的大膽假設,感覺到非常的有種,對於member function adaptor 的說法,我真是白癡到一種境界,不過我也不打算重新說明,因為以前的blog就寫過了。

對我而言,C++ Standard Template Library 用嚴謹的Concepts所組成,STL的六大組件則使用了這些 Concepts 發展成嚴謹的組件,而且非常的明快易讀,捨棄了OO的hierarchy方法,而使用了類似Mathmatical functions 的 f(g(x)) 作法,將整個程式庫壓平,不過背後所帶來的成本,非常高,環環相扣的呼叫,雖然在Compile Time 會化身成如你手工精鍊的一般,但無法針對特定資料的最佳化,還是無法克服的,不過寫到這裡,若要針對資料高度最佳化,不妨尋求OOP的這一塊。

STL的入門關鍵技術有三,一是template,二是type traits,三是operator overloading。

第一個我就不廢話了,沒有辦法針對data type做到generization,就不用玩了XD 而我們先把type traits略過,這可以講一整篇了,先說第三個operator overloading,也是Java的GP無法做到的。為什麼operator overloading那麼重要?

因為operator overloading不僅讓 class 更像一個 real type,也可以讓 class 像一個 function,但是可以比function做更多的事。

最大的原因是,我們可以overloading "()",也就是說,如果對以一個class做operator() 的定義,這個class可以做為一個functor,而也因為我們可以對眾多的 operator 做獨立定義,很多時候的溝通,只要用這招就可以搞定了,如果這招搞不定,而需要用另外的方法時,template + type traits就出場了,在這邊就暫且不論。

不過回到比較簡單的話題,學好STL還是很難的,因為組件不少,目前唯一的想法是,寫完一次程式碼,再盡最大極限來使用STL裡面的概念轉換之,轉換個十多次之後應該會好一點,不過目前當下的我應該是沒有什麼機會。

說多了,下次想到再寫吧。

---
寫完有大陸人的感覺?XD

星期一, 2月 11, 2008

最近

我看我可以幫最近開一個系列文了XD 這個標題幾乎是我懶的想標題的避風港XD

這幾天看小說, 睡覺,還蠻自在的,終於回到桌子上打電腦了XD 也是一件不錯的事,預計這禮拜三回彰中一趟,禮拜四有事,禮拜五回學校,宣告下學期的來臨。睡覺睡很多,但是有助於思考,讓自身回到一個簡單的狀態也是一件不錯的事。雖然最近這陣子Mac OS常當,到底什麼時候要出10.5.2啊XD。報怨完了,也沒啥正事XD

有學弟跟我提及C/C++到底重不重要這個問題,呵,就我自己而言,我覺得非常重要,只是初學C++的人要過很久很久才能摸到應用程式,應該是說,一般的書也不會寫說,如果你要用C/C++開發某些功能應該用什麼喔。所以我稍微列一下我現在所能碰到的,事實上我沒有用C++開發應用程式過,但是要我選擇, C++/ Java 仍是我的首選(笑)。

  • GUI Programming: 在Windows上有VS可以選擇,但是跨平台上則有QtGTK,如果上述都不喜歡,可以考慮一下wxWidget
  • Network Programming: 可以使用ACE,當然,也可以使用Unix 上的Socket Programming
  • 3D Programming: 在Windows上有DirectX可以用,而OpenGL是跨平台的

族繁不及備載(而且我還沒有提System Programming XD),但是我所能接觸到的就會學不完啦,語言的重要程度是看你想拿語言來做什麼,沒有一個程式語言能夠解決所有事的。

回到一般生活上,回學校的生活似乎有點趕,不過也還好,打算看看上課狀況再調整吧,比賽的進度還蠻趕的,如果不要落後,大概每天都要蹲實驗室吧,不過也無妨,多寫點程式總是好的。

一起加油吧!

---
沒什麼組織的文章 XD

星期日, 2月 10, 2008

電子之星

這是一本短篇推理小說集。

我一直以為這是推理小說,但是看完之後的感覺是,這是很像推理小說的一般小說XD。主角在書中被人稱之為萬事通,專門解決問題,看完這本的第一個感覺是,會讓我想到宮部美幸,不過這位作家的書我也只看過兩本,分別為模仿犯Level 7

事實上石田衣良和宮部美幸有可能會被我歸類成同一種作家,他們都想藉由推理小說的架構來表現出現代日本的社會問題,直接講有什麼社會問題,並不是沒有人理會,而是所能使力的部分太少,如果不能深入分析,恐怕一般人不予以理會。

我不太清楚東京池袋在日本是什麼定位,不過根據wiki來看,是一個繁華的地方,這句話或許很普通,但是就我個人的感覺。

繁華伴隨著黑暗。

台北是一個很繁華,但我始終不能適應台北,也是同一個道理吧(笑)。我看書沒有一定的習慣,通常是隨機取樣,所以我沒有看過池袋西口公園123 XD 但是從這本書而言,我看到了比較輕鬆而且是美好結局的敘述方式(要看相反的可以看模仿犯XD),想要了解日本社會的架構,不妨多讀讀這兩位作家的書,我從閱讀這些書,學習蠻多的。

---
不過要有時間就是XD

戰慄遊戲

這是一本驚悚小說,不過很精采,但是我也得承認,我比較少看這種小說。

整個故事的人物架構非常簡單,一個專門寫暢銷小說的作家,跟一個瘋狂連續殺人犯的書迷,在作家發生車禍之後,被書迷要求重寫小說橋段,地點也很簡單,大部分只在該連續殺人犯的屋子裡,更精確的來說,只在囚禁該作家的房間。而故事的結束伴隨著死亡。

死亡方能結束這扭曲的關係角力。

這本書不很薄,不過故事架構很簡單卻不失其張力,閱讀蠻愉快的,我花了一個晚上看完,不過這本書不能帶給我什麼啟發就是了,但是享受故事往往就是一件很不錯的事。

---
寫心得(這不能稱之為書評XD),我還須要很多的練習XD