星期四, 7月 02, 2009

最近


一直到今天,期末作業告了一個段落,同時也代表我大四下課程結束,可以繼續完成我的大學總回顧。

為了慶祝大學畢業,買了 FILCO 茶軸鍵盤當成自己的禮物,其實一直都很想買這個鍵盤,只是沒有什麼好理由,如果沒有意外就不會再換了(小白就是遭遇了意外,不見了...Orz),再加上 Logitech MX1100(原來的 MX1000 掛了),還有現役的 DELL 24 吋螢幕,形成現在的工作環境。

不過由於剛完成這些課業一段時間,所以這幾天會好好休息,有事請這幾天後再找我吧,我想也是該稍微停下來一下想想接下來要做什麼了。

花在 plurk 的時間上太多,這也是我要改進的地方,或許應該試著不要堅持把所有的訊息都看完,不然真的很浪費時間,可是又很難的過濾想看的訊息,或許還要試著找一個模式吧。


---
雜記。

星期二, 6月 30, 2009

ACM 532 - CHCRC

今天翻檔案時,翻到我在高中時,寫的 ACM 程式碼,果然有夠醜的,貼出來讓大家笑笑 XD

#include <stdio.h>
#define N 35

char maze[N + 2][N + 2][N + 2];
int a, b, c, fsp = 0, tsp = 0, qt = 0, qf = 0, times = 0;
int i, j, k;

struct use {
int x, y, z;
} sp[N * N * N * N];

int zero() {
for (k = 0; k < N + 2; k++) {
for (j = 0; j < N + 2; j++) {
for (i = 0; i < N + 2; i++) {
maze[i][j][k] = 0;
}
}
}
return 0;
}

int input() {
for (i = 0; i < a; i++) {
for (j = 0; j < b; j++) {
scanf("%s", maze[i][j]);
}
}
return 0;
}

int start() {
for (i = 0; i < a; i++) {
for (j = 0; j < b; j++) {
for (k = 0; k < c; k++) {
if (maze[i][j][k] == 'S') {
sp[fsp].x = k;
sp[fsp].y = j;
sp[fsp].z = i;
return 0;
}
}
}
}
return 0;
}

int run() {
i = fsp;
j = tsp;
while (1) {
if (maze[sp[i].z][sp[i].y][sp[i].x + 1] == 'E')
return 0;
if (maze[sp[i].z][sp[i].y][sp[i].x + 1] == '.') {
maze[sp[i].z][sp[i].y][sp[i].x + 1] = 'R';
j++;
qt++;
sp[j].x = sp[i].x + 1;
sp[j].y = sp[i].y;
sp[j].z = sp[i].z;

}
if (maze[sp[i].z][sp[i].y][sp[i].x - 1] == 'E')
return 0;
if (maze[sp[i].z][sp[i].y][sp[i].x - 1] == '.') {
maze[sp[i].z][sp[i].y][sp[i].x - 1] = 'R';
j++;
qt++;
sp[j].x = sp[i].x - 1;
sp[j].y = sp[i].y;
sp[j].z = sp[i].z;

}
if (maze[sp[i].z][sp[i].y + 1][sp[i].x] == 'E')
return 0;
if (maze[sp[i].z][sp[i].y + 1][sp[i].x] == '.') {
maze[sp[i].z][sp[i].y + 1][sp[i].x] = 'R';
j++;
qt++;
sp[j].x = sp[i].x;
sp[j].y = sp[i].y + 1;
sp[j].z = sp[i].z;

}
if (maze[sp[i].z][sp[i].y - 1][sp[i].x] == 'E')
return 0;
if (maze[sp[i].z][sp[i].y - 1][sp[i].x] == '.') {
maze[sp[i].z][sp[i].y - 1][sp[i].x] = 'R';
j++;
qt++;
sp[j].x = sp[i].x;
sp[j].y = sp[i].y - 1;
sp[j].z = sp[i].z;

}
if (maze[sp[i].z + 1][sp[i].y][sp[i].x] == 'E')
return 0;
if (maze[sp[i].z + 1][sp[i].y][sp[i].x] == '.') {
maze[sp[i].z + 1][sp[i].y][sp[i].x] = 'R';
j++;
qt++;
sp[j].x = sp[i].x;
sp[j].y = sp[i].y;
sp[j].z = sp[i].z + 1;

}
if (maze[sp[i].z - 1][sp[i].y][sp[i].x] == 'E')
return 0;
if (maze[sp[i].z - 1][sp[i].y][sp[i].x] == '.') {
maze[sp[i].z - 1][sp[i].y][sp[i].x] = 'R';
j++;
qt++;
sp[j].x = sp[i].x;
sp[j].y = sp[i].y;
sp[j].z = sp[i].z - 1;

}
if (qt <= 0 && qf == 0) {
times = -1;
return 0;
}
if (qf == 0) {
qf = qt;
qt = 0;
times++;
}
maze[sp[i].z][sp[i].y][sp[i].x] = 'R';
i++;
qf--;
}

return 0;
}

int main() {
zero();
while (scanf("%d%d%d", &a, &b, &c)) {
if (a == 0 && b == 0 && c == 0)
break;
input();
start();
run();
times++;
if (times != 0)
printf("Escaped in %d minute(s).\n", times);
else
printf("Trapped!\n");
fsp = tsp = qt = qf = times = 0;
}
return 0;
}

---
其實大一有重寫,大概 7x 行就結束了 XD

星期日, 6月 28, 2009

CLRS

從 fr3@K 的 Google 分享項目 看到 Introduction to Algorithm (CLRS)把 Multithreaded Algorithms 的章節免費讓人下載之後,連來連去發現

要出第三版啦啦啦啦~出來之後,一定要扛一本精裝版回家(握拳)

這也是繼強者的 blog 說計算機組織聖經 Computer Organization and Design: The Hardware/ Software Interface 4/e 出現之後,最讓我期待的一本書了,已經重量級的兩本書都出了,還會有什麼新書呢,真是令人期待(笑)。


---
什麼時候會有 The C++ PL 4/e XD?

星期六, 6月 27, 2009

返家

從端午節之後一直到現在才返家,姐姐從美國代買的書也到手了,共計有

  • Parallel Computer Architecture: A Hardware/ Software Approach
  • Peopleware: Productive Projects and Teams 2/e
  • Mathematics And Plausible Reasoning Volume I: Introduction and Analogy in Mathematics
  • Mathematics And Plausible Reasoning Volume II: Patterns of Plausible Infference

看來會有個充實的暑假 XD


---
火車誤點 50 分 ...Orz

星期一, 6月 22, 2009

LaTeX 與 Word

每次看到這兩個名詞排在一起時,我有一些想法。LaTeX 做出來的文件很漂亮,也很專業,要變更好也容易,雖然學習門檻較高,但是就我而言,我還是很喜歡用 XeLaTeX 系列來製作文件與簡報。Word (OpenOffice 為 Writter),入門門檻較低,那怕是不太會電腦,也能夠用暴力法做出大部分的人都能接受的漂亮文件。寫到這裡,我不禁思考

養出一個會用 LaTeX 排版的人成本有多高? 而 Word 讓大眾能更輕易的製作文件,是否又有這麼差?

身為一個資訊系學生,我還是義無反顧的為了最高品質而使用了 LaTeX ,但是看過我寫文件的人,有人覺得,很酷捏,寫文件跟寫程式一樣,也要 compile,也有人覺得,為什麼要這麼麻煩的去生成一份文件 XD? 其實沒有什麼絕對的論點,只是,當我們正視電腦所帶來的便利時,為什麼我寧願選擇越活越回去 ?(在這邊假設用 LaTeX 是越活越回去的話 XD),回到其他人的層面而言,我真的覺得 Word 沒什麼不好的,雖然在很多小細節上的處理不佳,但是一般狀況下,真的有人在意嗎?(我們也不能說不在意就是對的) 到底,在新舊技術交錯的時候,身為一個資訊系的學生又處於什麼地位呢 ?

我和 efang 曾經都和 ycma 學過 C Programming, 當然,ycma 的 C programming 是 1978 年的 style,我用的是 1989 年的 C standard,某程度上造成了她的困惑,我最近常常在思考一個問題,從 1990 年到 2009 年也將近 20 年了,想法不可能沒有進步,而 ycma 用 1978 年的寫法也無不好,我只是覺得,身為 2009 年的學生,是不是更應該進步一些 XD? 當然,也沒有任何事可以證明,新的就會比較好,不過身為一個學生,就應該努力嘗試。


---
思考

星期四, 6月 18, 2009

夜唱


我大學只有兩次夜唱,看到這張照片就充滿感觸。(這也是我大學所認識的同班同學全部了 XD)


---
我不會忘記你們的。

期末

Artificial Intelligence: Min-Max Tree
Computer Arithmetic: High-Speed Multiplter, Final Project
還有一個禮拜多 XD


---
寫完就畢業啦 XD

星期四, 6月 11, 2009

閱讀

我看書不會很快,大概只有中文小說比較快,一小時一百多頁吧,其他都慢到爆炸 XD

我的英文大概退化到大家說英語的程度,讀原文書的時候,我還是蠻習慣拿鉛筆和直尺畫線,我認識的頗多老師都是會畫線的,不過常看到誇張的時候,如果書的密度夠高的時候,整頁都是線也是不太舒服的 XD 所以有關程式設計的書我還是不免俗的畫個線,以 Thinking in Java 4/e 為例,在說明 Concurrency 時,以浴室和洗澡人當例子,我只在該段的旁邊註,略 XDXD。 所以其實要不要畫線,端看該本書的資訊密度為何,太高就不用畫了,不過也是有認識接近不畫線的,Josh Ko 我記得是如此(錯了要跟我說 XD), ycma 也是喔 XD,不過我自己仍是想畫就畫,不想畫就不要畫,偶爾寫個自己的註記是我的習慣 XD

看看別人的閱讀習慣也蠻有趣的,有時候看看別人,會覺得自己沒什麼效率,只好努力的用時間和改變習慣來換了 XD


---
雜記 XD

星期一, 6月 08, 2009

最近

在此,跟最近覺得我很衝的人道歉,是我不會控制自我脾氣,如果有什麼話直接的冒犯到,請直接跟我說,我會虛心接受。

最近還是覺得自己是一個一無是處的人。縱使不管再怎麼努力就有如不會游泳而溺水中不停掙扎卻越來看不見水面上的光亮。除了自己什麼都不會以外,我不知道怎麼幫自己下註解。

今天比較早回宿舍,因為一些讓人覺得不會生氣,但是無奈的事,我不是一個很重要的人,不要對人呼之及來,喚之及去,要給其他人給予應有的尊重。也很感謝馬麻,是一個很好的人,我還是會持續的感謝及幫助,若要說我學會什麼,我得說,感謝是一個很重要的力量,學會感謝,才有可能學會前進。然後


繼續寫作業,我不要我的期末炸掉啊啊啊~~~~~


---
所以其實重點是最後一句 XDDX

筆記: ssh 登出後 process 持續執行

nohup ./a.out > test.txt &

有這種指令,以後就方便多了 XD


---
我不要再用自己的電腦跑了啦...Orz

星期三, 6月 03, 2009

媽

yen3: 家人跟我說,我會講話的第一句話是 "媽" XD
gb014388: 你確定後面沒有 "的" XD?


---
如果有,我從小就看的出潛力了...XD

出錯

#include <iostream>
#include <boost/shared_ptr.hpp>

class TestA;

void printTestA(TestA* a){
std::cout << a << std::endl;
}

void printTestA(boost::shared_ptr<TestA> a){
std::cout << a << std::endl;
}

class TestA{
public:
TestA():x(0){}
void test(){
printTestA(this);
printTestA(boost::shared_ptr<TestA>(this));
}
private:
int x;
};


int main(){
boost::shared_ptr<TestA> x(new TestA());
x->test();
std::cout << x.get() << std::endl;
}

這樣子的程式碼會出錯,正在想怎麼解決 XD
好像有解,下午來菸酒菸酒~


---


這個問題其實是 boost::shared_ptr 遇到 this 會發生什麼有趣的事 XD
大鳥 在 comments 中解釋了為什麼會錯,感謝他(感覺比自己寫的還清楚,我就不重寫了 XD) fr3@K 有提到 enable_shared_from_this 是最佳解

對我而言,我利用這個機會好好看了一下 Boost smart ptr,看完才發現,離自己夢想中的 memory management ,還是有一段距離,這個問題在 mailing list 有人討論,也有人提出解法,官方建議兩種解法,一種是加入 weak_ptr,在建立此 object 時,利用 weak_ptr 指向自己,另外一種是 fr3@K 提的,其實這兩種方法殊途同歸,只是後面有包裝,當然,就我自己而言,我實在是不想為了解決這個問題再繼承一個 XD,但是自己寫也沒有多好。

這個 library 的邏輯我猜想是如此,要嘛你就全用(使用 boost::make_shared<T> 建立更好),使用 shared_ptr<T> ...etc 來管理,然後從頭用到尾,weak_ptr 就會出現在這種時候(在我下筆的此刻,雖然我知道它的用法與目的,但是還是不知道使用時機為何),如果想要在 C++ 使用懶人的方法來用記憶體,我們必需更努力的學會這個 library XD,身為一個學生,不太知道外面世界怎麼樣,只能說,盡量學習嘍 XD


補充一下修改後的程式碼:
#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/weak_ptr.hpp>
#include <boost/make_shared.hpp>

class TestA;

void printTestA(TestA* a){
std::cout << a << std::endl;
}

void printTestA(boost::shared_ptr<TestA> a){
std::cout << a << std::endl;
}

class TestA{
public:
//TestA():x(0){}
void test(){
printTestA(this);
printTestA(boost::shared_ptr<TestA>(weak_this));
}

static boost::shared_ptr<TestA> create(){
boost::shared_ptr<TestA> u = boost::make_shared<TestA>();
u->weak_this = u;
return u;
}
private:
int x;
boost::weak_ptr<TestA> weak_this;
};


int main(){
boost::shared_ptr<TestA> x = TestA::create();

x->test();
std::cout << x.get() << std::endl;
}

星期一, 6月 01, 2009

片段

昨天開始寫回顧,卻很難寫出隻字片語,我的回憶總是存在於片段,也睡不太著,邊睡邊想出我想要寫的架構為何,希望今天能寫出比較完整的東西。


---
回顧。


11:39 大綱大概擬定出來了,看來要寫好多天 XD

星期日, 5月 31, 2009

復工

不知道自己己經頹廢多久了,從今天開始復工吧 ... 積極休息後總是要更積極的前進。


---
一堆事可以做了 XD

星期三, 5月 27, 2009

邯鄲學步

寫 C++ 的只有四種人

  • C++ 當 C++ 寫
  • C++ 當 C 寫
  • C++ 當 Java 寫
  • C++ 亂寫

---
看別人 code 有感...Orz

星期一, 5月 25, 2009

單眼相機、腳踏車與 ipod


其實這些都是現在很紅的東西 XD。

我沒有單眼相機,不過我有一台很複雜的相機 Nikon Coopnix 5000 ,這台是我國中考上高中之後我爸送我的相機,基於它沒有壞而且很好用的理由,我一直用著它到現在,不過電池都沒有電了,一直是我很大的困擾 XD。我一直到高中畢業前,我都在彰化就讀,所以騎腳踏車對我而言也是一件很稀鬆平常的事 XD。我沒有小筆電,不過我前後有 Acer TravelMate 3210 (現在是 efang 在用),與現役的 MacBook 2.16g ,我也有一台 ipod touch 32GB,很不巧的,我買完就一路漲價漲到現在還沒有跌回來過 XD

先從數位單眼來說好了,在 Canon EOS300 D 出來前(第一台以 30k 的價格破壞市場的單眼 XD ),我看著父親用 D100 (父親是個攝影師),其實貴的是鏡頭,我本來也很喜歡攝影,但是在紅了之後,我反而不想碰了XD 關於攝影這件事我跟父親爭論過,我的論點其實很簡單,如果執著於攝影技巧與美感,反而忽略了相片本身所要表達的,我一直都很佩服國家地理頻道的小女孩照片,但是我覺得我拍不出來這樣子的照片,所以我就不照了XD

我從國中後開始有了自己的腳踏車,但是自己一直到高中後才會放雙手騎單車,我的高中是彰化第二高學府,所以其實我還蠻享受騎腳踏車飆上去的快感 XD 到了北部之後,想騎腳踏車卻沒有辦法 (我不想跟砂石車搶路,台北的公車太恐怖...Orz),到我大二大三之後,騎單車紅了,我也不想騎了,總覺得我對於現在紅的東西,並不是這麼喜歡。

我在升大四的時候買了一台 ipod touch,它可以上網沒有錯,不過我喜歡的只是很單純的音樂同步,其實我連遊戲都很少玩 XD 我喜歡 itunes 帶給我的音樂體驗,真的還蠻方便的,就跟我很久很久之前說,我買 MacBook 是因為有一個良好的 GUI 和很好的 BSD Kernel 可以用,我覺得這一切都很方便。當然, Mac 很貴是一個既成事實,或許下一次會考慮用 ThinkPad + Linux ,現在的 GNOME 也可以做到非常方便的地步 (如果驅動程式沒有問題,我真的覺得現有的 Linux 相當的不錯)

現在我慢慢喜歡上跑步了,我對於現在會紅的東西始終沒有興趣,希望跑步不會紅才好 XD


---
雜想

小精靈


gb014388: 小精靈屬性就是,當有需要的時候都會存在,然後問問題都會有回答與幫忙的屬性。
yen3: 幹,聽起來很像好人啊 XD


---
謝謝 snake 畫圖送我 :)

星期日, 5月 24, 2009

YAMAHA YST-M101

YAMAHA YST-M101 是我電腦第一付比較好的電腦音響,也是我一直用到現在的電腦音響,我有很多篇想寫,偏偏先寫這篇了XD

在很久很久以前(大概十年前 XD?),我是一個國中小毛頭,我不知道錢怎麼用,音響有多貴的年代,我看到這一付 YAMAHA YST-M101 單純只是覺得 YAMAHA 聽起來不錯的樣子,一對 990,好像不貴,我就買回來了XD 結果沒有想到,是陪伴我到現在最久的電腦配備,用久了也捨不得換,電腦都不知道換幾台了。但是不得不說,這個音響,表現的聲音非常清楚,或許我是木耳也有可能,如果有人有看到在賣的話,歡迎跟我說,我想再買一個回來XD


---
亂寫一通XD

星期日, 5月 17, 2009

很多天飲食

禮拜四: 晚餐: 燒烤8支 @ 泗元燒烤 ($80), 刨冰 @ 某店 ($40)。 合計: $ 120


禮拜五: 早餐: 炒麵 + 中杯奶茶 @ 牛角坡 ($60) + 午餐: 培根雙層牛肉堡套餐 @ 實踐大學正門附近的好吃漢堡店 ($210) + 晚餐: 羊肉炒麵($40)。 合計: $ 310


禮拜六: 早餐: 炒麵 @ 牛角坡 ($40) + 晚餐: 水餃15粒 @ 桃園火車站附近的水餃店 ($60), 烏龍綠 @清新 ($25) + 點心: 雞蛋糕 @ 路邊攤 ($30)。 合計: $ 155


禮拜日: 午餐: 大麥克餐, 四塊麥克雞塊 @ 麥當勞 ($140) + 晚餐: 豬肉炒麵 @ 醬騷有味 ($70), 烏龍綠 @ 清新 ($25)。 合計: $ 235


---
都還吃蠻貴的XD

星期六, 5月 16, 2009

Star Trek


Space, the final frontier.
These are the voyages of the starship Enterprise.
It's continuing mission: to explore strange new worlds,
to seek out new life and new civilisations,
to boldly go where no one has gone before.


---
美好未來。