今天又去爬了一次柴山
但竟然被猴子搶了我的餅乾, 可惡
呼. 這也不能怪他們, 終究是人類造成他們變成這樣的...
一整天都很開心, 希望可以持續下去
媽媽最近有點變瘦, 她一直害怕血糖太高而不敢吃東西
我是希望她能吃就多吃一點
2008年12月27日 星期六
2008年12月21日 星期日
2008年12月20日 星期六
2008年12月12日 星期五
2008年12月10日 星期三
2008年12月5日 星期五
這禮拜
禮拜一二在連上, 擔任待命班, 演演戲
禮拜三被叫到軍團的工兵組去, 在那邊充當了水電兵, 到頂樓吹風, 在工具室摸魚
聽一個快退伍的傢伙虎爛
禮拜四被派到知義去, 我想這是我軍旅生活中最後的一站吧?
在知義是一個不像部隊的部隊, 我們的工作就是負責監工.
總之又是一個新的挑戰來了...
話說軍旅, 就像在旅行阿, 我總共換過這些床位:
1.屏東龍泉
2.隘寮靶場
3.工兵學校三中隊調適
4.工兵學校二中隊受訓
5.工兵學校二中隊待撥
6.54群橋樑營裝備連待撥
7.54群橋樑營一連待撥
8.54群戰工一營三連連上
9.54群戰工一營三連衛兵排
10.軍團本部連
11.知義營區 102
12.知義營區 101
13.軍團軍官寢
14.群部軍官寢
睡過14個床位了 哈哈
2008年11月30日 星期日
2008年11月28日 星期五
2008年11月22日 星期六
25 歲了
前天在軍中過了生日
來到這個新單位, 馬上又是戰備, 又是衛兵排
我們幾個最菜的就負責打飯... 真的挺累的, 照三餐打
我覺得當小兵快樂多了, 為什麼當初要當下士呢?
總之我25歲了, 人生大概也已過了1/3了
我的另一半到底在哪呢? 有時候忽然這樣想, 算了, 就順其自然吧
今天家煌跟我說我有可能編到工程組
人算不如天算阿... 老實說我真的不想站衛哨站到退伍...整天看著車群發呆
但天曉得還有什麼變數? 無論如何還是逆來順受吧!!
媽媽, 媽媽, 您還是我目前最擔憂的阿!
今天夢到我去問醫生母親的病情, 醫生說有好轉, 使我非常的高興
真希望那不只是一個夢阿
待會休息一下就到醫院去吧
2008年11月16日 星期日
2008年11月8日 星期六
2008年11月4日 星期二
2008年11月3日 星期一
...
禮拜六日都在醫院陪媽媽
我跟二阿姨吵了架
她, 不知道為什麼總散發著一股讓我不想親近的感覺
從小就這樣, 我也不知道為什麼
------
母親因為腹水需要嚴格限水, 而且她有糖尿病, 高血壓
因此在飲食上需要相當注意, 而不是像正常人想吃什麼就吃什麼
昨天早上讓我看到母親在吃梨子, 我馬上阻止, 二阿姨就說"吃得下去才能活"之類的話
梨子, 昨天護士才說過屬於高糖份, 高水分的水果, 實在不適合母親
唉, 二阿姨總是自以為看了很多養生的書, 認為西醫只會讓母親愈來愈嚴重
講了之類的話, 我很不以為然, 於是跟她吵起來(我很小聲講話, 都是她在喊)
最後她自己不爽就離開了, 這樣也好, 母親讓她照顧我實在是不放心.
經過我昨天嚴格的水分控制(雖然還是超出醫生要求的1000cc)
母親腹水總算有點消(腹圍少了2.5cm)
今天請了一個看護, 我看得出來她是做事相當認真, 有經驗, 並且會遵從醫生指示
我才放心離開醫院
明天要收假, 早上我打算先去醫院探望一下, 在準備回營
------
今天有件事讓我很感動
阿騎剛剛打電話來問我需不需要他幫忙送回營
有這麼讚的朋友真是福氣
我的朋友都知道, 我是知恩圖報的 (教父台詞)
2008年10月31日 星期五
結訓
今天是結訓. 結束受訓的日子.
母親上禮拜做栓塞效果不佳, 醫生開始要用一種"光子刀"的方式治療
我所能做的就是好好照顧自己, 有空多陪母親, 給她加油打氣
結訓假四天, 我打算在醫院那邊住個三天, 第四天回營
我從來都不是孝順的人, 聽到母親說我很孝順, 實在是讓我很難過
我很愛他們, 但很少以行動或是言語表示, 真是糟糕阿, 我
在學校很多人都說我很悶, 我也沒辦法阿, 我總是這樣子
難道要我說一些低級的笑話嗎?(雖然有時後腦中會浮出, 但實在不想說)
如果是國中時的我大概不是這樣的, 應該算是開心果吧.
我怎麼會變成話這麼少呢?
難道是我沒辦法相信別人, 把內心的話講出來嗎?
還是我受到什麼打擊變成不太愛說話?
應該不是吧. 還是找不到與我臭氣相投的傢伙?
我自認為是一個親切的人阿, 遇到需要幫忙的人總是很少說不
也還算正直, 沒有暗算別人的念頭, 個人也覺得活得很快樂
還是說我不擅長交易? 害羞? 怕生?
我真的不曉得
2008年10月23日 星期四
2008年10月19日 星期日
2008年10月17日 星期五
2008年10月12日 星期日
2008年10月10日 星期五
2008年10月5日 星期日
2008年10月4日 星期六
2008年10月3日 星期五
工兵學校第一次放假
工兵學校的生活相當規律
跟新訓差不多"趕"
早上6:00起床,現在是冬令
6:15分集合
掃地到6:50
7:00集合上餐廳
7:30集合上教室.
大概走了30分鐘到教室
8:00上課
11:30從教室走回餐廳
12:50起床, 13:00集合上教室
13:30上課
17:30帶回上餐廳
19:00集合晚自習
20:30左右集合回來盥洗
21:30就寢
有幾個心得:
1.營戰非常遠,別想了.
2.飯菜比起龍泉好吃太多了
3.完全沒有操體能, 目前為止只拉過一次單槓
我是分配到開推土機的
機械督導士, Bulldozer 推土機, 以前施工方法與機具有學過
就是牽引機配上鏟刀, 嗯嗯, 這樣稍微有點學以致用吧
軍中的官僚文化相當不適合我
但我一直把當兵當作是一份暫時的"工作"
這樣想心情就好很多, 無論如何我都是盡量把工作做好
來這邊也認識一些人, 我想大家都還不錯
2008年9月25日 星期四
2008年9月24日 星期三
2008年9月21日 星期日
2008年9月20日 星期六
sing sing sing
在新訓中心見識了不少人
也算是還不錯的回憶,畢竟一生中也只有一次
我平時算是話不多的人,也可能是沒能找到可以讓我打開話匣子的人
聽同梯弟兄說我總是看起來很嚴肅的樣子
跟以前比起來我也變得很多,但也可能這才是真正的我
我一直在自己的世界中,就像在游泳池底下一樣
外面的聲音對我而言相當的模糊
我想要大聲唱歌 sing sing sing
2008年8月31日 星期日
2008年8月16日 星期六
2008年8月4日 星期一
2008年7月26日 星期六
2008年7月25日 星期五
2008年7月22日 星期二
Decorator - c++
Decorator
C++有些要注意的地方
像是呼叫super class的constructor要在brace前用: Base()
以及呼叫super class的method要用"::"運算子: Base::Method()
#include
using namespace std;
class IComp {
public:
virtual void doSomething() = 0;
};
class fromComp : public IComp {
public:
virtual void doSomething() {
cout << "non Deco" << endl;
}
};
class Deco : public IComp {
public:
Deco(IComp* i) : theOrin(i) {}
virtual void doSomething() {
theOrin->doSomething();
}
virtual ~Deco(){
delete(theOrin);
}
private:
IComp* theOrin;
};
class DecoA : public Deco {
public:
DecoA(IComp* i) : Deco(i) {}
virtual void doSomething() {
cout << "DecoA" << endl;
Deco::doSomething();
}
};
class DecoB : public Deco {
public:
DecoB(IComp* i) : Deco(i) {}
virtual void doSomething() {
cout << "DecoB" << endl;
Deco::doSomething();
}
};
int main()
{
fromComp* a = new fromComp();
a->doSomething();
DecoA* b = new DecoA(a);
b->doSomething();
DecoB* c = new DecoB(a);
c->doSomething();
return 0;
}
2008年7月20日 星期日
2008年7月16日 星期三
2008年7月14日 星期一
2008年7月13日 星期日
http server using python
import BaseHTTPServer
import SimpleHTTPServer
httpd = BaseHTTPServer.HTTPServer(('localhost', 80),
SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.serve_forever()
沒錯, 以上幾行就是一個http server
python提供了強大的模組庫
但我對於沒有資料類型的參數還是有點不太習慣...
後來想一想, 這根本是完全的泛型阿!
例子中HTTPServer的constructor第二個參數, 傳進去的東西是一個class
利用class委任的方式來處理...這好像是某個pattern應用..builder?
2008年7月12日 星期六
python
昨天又把python拿出來複習一下
我是看"byte of python"這個電子書, 網路上可以下載到
python是一個很有趣的動態語言
compiler interpreter
py --------> pyc(bytecode) -----------> binary code
pyc只是加快速度的手段, 執行的話是直接從.py去執行
以module架構整個程式
如果說JAVA是以class為基本元件, Python無疑是以module為元件
當然module中也可以定義函式或是類別
python是一個物件導向程式語言, 具有物件, 可以繼承, 多型
在宣告時所有的東西都是物件
更精確的說都是"object"這個class
藉由constructor或是一些built-in的(如 =123 表示數字或是 ='abc'表示字串)來達到多型
在宣告時不需要指定其類別
a = 10 #數字
b = 'bc' #字串
c = test(10) # c 是test這個class的一個物件
至於所有的reference都是object
大概是這樣 指向
object(做GC,或是一些資源管理) ------> 本體
在程式的撰寫上相當精簡
利用縮排來表示block, 挺聰明的作法..嘿
這樣就可以避免看code看到眼花, 有些人的寫作風格實在是不敢領教
判斷或是迴圈的描述如下
if a == b:
print 'yes'
elif:
print 'no'
while True:
prnit 'hello'
for obj in range(1, 10):
print obj
跟C還是有點像, 值得一提的是他的 for ... in
提供一個探訪循序資料結構的方法
python 提供了3種內建的資料結構, 相當實用
list -> alist = ['a', 'b', 'c'] #底層應該是linked list, 可以用del刪除節點
tuple -> atuple = ('a', 'b', 'c') #不可變更的list
可以用於字串處理 '%d%d%d' % ('1','2',3') -> '123'
dict -> adict = {'a':1, 'b':2, 'c':3} #hash table
另外還有對循序資料結構進行存取的方法
alist[:] -> 表示從頭到尾
alist[3:] ->從第三的元素到結束
這些存取方式都是複製一份reference出來
物件導向的部份
很單純, 很像用C寫物件導向..尤其是那個method還要提供個self這個參數XD
但語法上還算ok, 跟java一樣所有override的方法都屬於virtual
藉由特殊名稱的method來達到建構,解構,還有運算子複寫 ..ex. __init__, __del___ , __lt__
IO部份,packle這個module提供了dump跟load
那麼我想所有的object都實作了類似java的序列化介面吧.(不確定)
其他部分, 像是
lista = [2, 3, 4]
listb = [i*2 for i in lista if i > 3] #非常牛b的寫法, 實在是粉語意
print listb
還有
def powsum(power, *args):
t = 0
for i in args:
t += pow(i, power)
return t
print powsum(2, 2, 3, 4) #2, 3, 4將會被視為tuple args傳遞
還有
lambda 這玩意相當新奇, 基本上就是動態產生一個function pointer
def power(order):
return lambda s : pow(s, order)
binary = power(2)
print binary(11)
像是這樣
exec用來執行字串形式的code, 用這個似乎可以來做reflection ?
exex 'print "hello"' = print hello
eval用來評估一個字串形式的表達式
eval '3*3' = 6
assert就是斷言,
其實就是做檢查判斷是否成立, 不成立就丟出例外
是一種錯誤處理機制
2008年7月11日 星期五
2008年7月10日 星期四
Return
明天就要離開新竹了
今天去吃了趣味一下, 阿阿, 應該是最後一次了(希望)
意外得知博班學長資格考沒有過...
有點替他傷心, 但又不知道怎麼安慰
只能拍拍肩膀
總之我要離開新竹了
真高興能夠來這邊唸書, 這兩年我過得很快樂, 也學到不少東西
回想起剛來到新竹,人生地不熟
昊志帶我去找房子
多虧好爐的照顧, 常常陪我喝酒看電影以及游泳, 希望他一切順利
還有研究室學長姐的照顧, 一起去吃吃喝喝, 做做研究
然後還有對面研究室的同學, 常常去那邊吃飯,打電動...
IT組的學弟妹, 每次都是找你們吃東西, 真對不住XD
老師對我也很好, 讓我那麼早畢業~
感謝啦
交大的校園真的很美, 綠意盎然
希望以後還有機會回來
2008年7月8日 星期二
2008年7月7日 星期一
2008年7月6日 星期日
2008年7月5日 星期六
吃吃吃
前田屋燒烤跟趣味一下火鍋店
這兩家店應該是兩年來吃最多次的店了, 趣味一下應該不下10次
趣味一下的雞塊, 尤其是剛出爐的, 相當美味
前田屋, 五花豬肉則是很不錯, 肥嫩多汁
其他還有像是
生活館, DoReMe, 歐吉桑壽喜燒, 東京都日本料理, 新幹線燒烤
韓味煮義, 耀武羊威, 林記火鍋店...
西提, 城隍廟小吃, 鴨肉許, 黑貓包, 北門炸ㄍㄨㄟˋ, 披薩, KFC
清大夜市有竹塹園, 客家雞腿飯, 金芝園, 阿金滷味, 鹽酥雞, 3Q雞排, 金城廣東粥
肥仔龍鐵板燒, 銅鑼灣咖哩飯, 烤鴨
清大風雲樓的素食, 很美味
二餐是我最常吃的. 7-11, 難吃的自助餐, 多多咖啡, 二樓的麵店, 三樓的萬年自助餐
港式燒蠟, 蔥抓餅, 老陳雞排飯, 飲料店, 八方雲集, 難吃的麵店, 八寶冰
水果攤...
還有交大校園的鬆餅店, 巧克力鬆餅, 抹茶鬆餅...
學長帶我去台北士林夜市亂吃一堆東西, 雞排, 春捲, 鴨肉餅? ...
我在新竹這兩年也吃了不少東西嘛
2008年7月4日 星期五
2008年7月3日 星期四
C - 在程式運行中取得function name
在傳統的作法可能像是用
void hello()
{
printf("hello");
}
但在C99的規格中出現了 __func__ 及 __FUNCTION__ 去取得函式的名稱
改寫成
void hello()
{
printf(__FUNCTION__);
}
就可以取得函式名稱. 讓Compiler幫你處理
在 .rdata section出現了這段. 其實就是"hello"字串
00403000 <__FUNCTION__.0>:
403000: 68 65 6c 6c 6f
403005: 00 25 73 00 77 6f
the lars and real girl
早上來到研究室
想說看一部輕鬆的電影
所以我選擇了"充氣娃娃之戀" ( lars and real girl )
結果這部片一點都不輕鬆...
Lars是一個27歲的男孩, 是一個非常好的人
他因為某種原因沒辦法跟其它人交往(因為童年的因素)
因此他選擇充氣娃娃當他的女友, 起初大家都以為他瘋了
家人帶她去看心理醫師, 醫師說: 這可能是他在現實生活的絕境中所尋找的出路
而產生的妄想症, 不一定有害
於是家人開始接受他獨特的女友, 鄰居也相當配合...
最後Lars走出來了...
其實這部片子相當溫暖. Lars發現大家都愛著他, 因此才能為他跟他女友做了那麼多事情
2008年7月2日 星期三
2008年7月1日 星期二
我的左派老師
左派, 的意思有相當多種, 從wiki的解釋來看
公平的結果是左;公平的程序是右
反對自由市場造成的不均等為左;而接受之則為右
偏好一個「更大的」政府為左;偏好一個「更小的」政府為右
平等為左;自由為右
一個現世政府為左;一個宗教政府為右
集體主義為左;個人主義為右
革新為左;保守為右
法律支配文化為左;文化支配法律為右
支持跨國家團體為左;僅支持獨立國家和政府為右
國際主義和世界觀為左;國家利益為右
認為人性和社會為可變性的為左;認為它們為固定性的
認為人性本善為左;認為人性本惡為右
社會主義為左;資本主義為右
如果可以把一件事情分為兩面來看待, 世界將會容易許多
與過去看到的講述老師的電影相當不同
如:春風化雨, 這部電影中的老師是個毒蟲, 但他並沒有多壞
偶然在廁所中吸毒被撞見, 而意外發展出一段學生與老師的情節
2008年6月30日 星期一
ACM488
今天下午幫同學試了一下SAP2000的API
使用COM介面的API, 挺不錯的東西
然後寫一題簡單的ACM488
心得是英文誤解意思的話是很糟糕的事情
char* sary[] = {"0", "1", "22", "333", "4444", "55555", "666666", "7777777", "88888888", "999999999"};
int waves;
struct Wave {
int order;
int Amp;
int Frq;
void (*Draw)(struct Wave* this);
};
void Draw(struct Wave* this)
{
int i,j,k = this->Frq;
while( k > 0 ) {
for(i = 1; i < this->Amp; ++i) {
printf(sary[i]);
printf("\n");
}
for(i = this->Amp; i >=1; --i) {
printf(sary[i]);
printf("\n");
}
if( k== 1 && this->order == waves);
else
printf("\n");
--k;
}
}
struct Wave* New_Wave(int order, int Amp, int Frq)
{
struct Wave* ret = (struct Wave*)malloc(sizeof(struct Wave));
ret->order = order;
ret->Amp = Amp;
ret->Frq = Frq;
ret->Draw = Draw;
return ret;
}
int main()
{
struct Wave** wav;
int i, amp, frq;
scanf("%d", &waves);
wav = (struct Wave**) malloc( sizeof(struct Wave*) * waves);
for(i = 0; iscanf("%d", &);
scanf("%d", &frq);
wav[i] = New_Wave(i+1, amp, frq);
}
for(i = 0; i < waves; ++i) {
wav[i]->Draw(wav[i]);
free(wav[i]);
}
return 0;
}
2008年6月29日 星期日
2008年6月28日 星期六
Insertion Sort
平均時間複雜度是 O(n^2)
其它還有一些變形
insert的部份改用二元搜尋(加快insert速度)
以及使用linked list而不是用陣列(減少memory copy的overhead)
這種演算法沒用嗎? Quick Sort都比這個快
但當做學生作業似乎還不錯啊
#include
using std::cout;
#define MININT 0 // any key must grater than this
class Element
{
public:
Element(){}
int getKey() const{ return key; }
void setKey(int k) { key = k; }
private:
int key;
};
void insert(const Element e, Element *lst, int i)
// insert lst[0] -- lst[i]
// lst must have i+2 capacity, cause we inset a new element to ordered list
// assume lst[0].getKey() = MININT, make sure all keys are grater than this
{
while( e.getKey() < lst[i].getKey() ) {
lst[i+1] = lst[i];
--i;
}
lst[i+1] = e;
}
void InsertionSort(Element* lst, const int n)
// sort lst[1] to lst[n]
{
lst[0].setKey(MININT);
for(int j = 2; j <=n; ++j)
insert(lst[j], lst, j-1);
}
int main()
{
Element *lst = new Element[6];
lst[1].setKey(2);
lst[2].setKey(3);
lst[3].setKey(4);
lst[4].setKey(5);
lst[5].setKey(1);
InsertionSort(lst, 5);
for(int i =1 ; i < 6; ++i)
cout << lst[i].getKey() << " ";
return 0;
}
2008年6月26日 星期四
inline assembly
這種在C語言裡面穿插組合語言的作法實在是非常powerful
就我觀察, 一種良好的系統, 總是會提供多種solution
包含high level與low level
asm("組語" : output : input : regs);
像這樣把組合語言穿插在原本的程式
組合語言我幾乎不會, 但我想應該不難學, 因為指令相當的單純
2008年6月25日 星期三
2008年6月22日 星期日
2008年6月21日 星期六
2008年6月18日 星期三
Being John Malkovich
這個導演真是天才
好久沒有看過讓我如此吃驚的片子
imdb 7.9分 但我覺得有8分以上
講述有一個人發現一個通道可以進到某個人的身體
故事從這邊出發
這個導演真是天才
2008年6月17日 星期二
pay it forward
很久以前看過這部電影
它主要的意思是說
當你受到別人的恩惠(favor),你不一定要回報,你可以將這個恩惠施予其它人
然後遞迴
像是蝴蝶效應一般,也許有一天你會受到某個陌生人的幫助
而那個陌生人也曾受到你間接的幫助
我很喜歡這個idea
2008年6月16日 星期一
2008年6月15日 星期日
2008年6月12日 星期四
2008年6月11日 星期三
2008年6月10日 星期二
2008年6月8日 星期日
2008年6月7日 星期六
CCC-Iterator
使用C實作了Iterator
C語言實在是一個非常有趣的語言
應該說是
high level assembly ? 雖然我不太懂組合語言
但光是使用C就能感覺到他的power
#include
#define TRUE 1
#define FALSE 0
struct Iterator;
struct List;
struct List_Node;
typedef unsigned short (*Method_hasNext)(struct Iterator*);
typedef void* (*Method_next)(struct Iterator*);
typedef struct Iterator {
struct List_Node* current_element;
Method_hasNext hasNext;
Method_next next;
} Iterator;
typedef struct List_Node {
void* data;
struct List_Node* next;
} List_Node;
typedef struct List {
List_Node* head;
Iterator* (*getIterator)(struct List*);
void (*addData)(struct List*, void*);
} List;
void addData(struct List* stru, void* data)
{
List_Node* n;
for(n = stru->head; n != NULL; n = n->next ) {
if( (n->next) == NULL ) {
n->data = data;
break;
}
}
n->next = (List_Node*) malloc(sizeof(List_Node));
n->next->data = 0;
n->next->next = 0;
}
unsigned short hasNext(Iterator* i)
{
if(i->current_element->data == NULL)
return FALSE;
return TRUE;
}
void* next(Iterator* i)
{
void* ret = i->current_element->data;
i->current_element = i->current_element->next;
return ret;
}
Iterator* getIterator(struct List* stru)
{
Iterator* ret = (Iterator*) malloc(sizeof(Iterator));
ret->current_element = stru->head;
ret->hasNext = hasNext;
ret->next = next;
return ret;
}
List* New_List()
{
List* ret = (List*) malloc(sizeof(List));
ret->head = (List_Node*) malloc(sizeof(List_Node));
ret->head->data = 0;
ret->head->next = 0;
ret->addData = addData;
ret->getIterator = getIterator;
return ret;
};
int main(void)
{
List* strs = New_List();
strs->addData(strs, "John\n");
strs->addData(strs, "Paul\n");
strs->addData(strs, "Ringo\n");
strs->addData(strs, "George\n");
Iterator* i;
for( i = strs->getIterator(strs); i->hasNext(i) == TRUE;) {
printf("%s", (char*)i->next(i));
}
return 0;
}
CCC
嘗試用C實作了simple factory如下
#include
typedef void (*Method)(void);
typedef struct Interface {
Method method;
} Interface;
void good_method(void)
{
printf("good\n");
}
void bad_method(void)
{
printf("bad\n");
}
Interface* New_Product(char* type)
{
Interface* ret = (Interface*) malloc(sizeof(Interface));
if( strcmp(type, "good") == 0 ) {
ret->method = good_method;
} else if( strcmp(type, "bad") == 0) {
ret->method = bad_method;
} else {
return NULL;
}
return ret;
}
int main(void)
{
Interface* product;
product = New_Product("bad");
product->method();
product = New_Product("good");
product->method();
product = New_Product("bad");
if( product == NULL )
printf("nothing");
else
product->method();
return 0;
}
2008年6月6日 星期五
Into the Wild
中文翻譯叫做"阿拉斯加之死", 這是一個真實事件
今天我到224去看了這部電影
主角拋棄了自我想到阿拉斯加去一個人生活
但最後在阿拉斯加度過最後的3個月...
他因為誤食了有毒的植物而喪命
最後留下了這句話
"I HAVE HAD A HAPPY LIFE AND THANK THE LORD. GOODBYE AND MAY GOD BLESS ALL!"
這部電影讓我很感動
我有許多想法都跟片中的主角很像, 影片很多地方都讓我產生共鳴
有時候真的想一個人到什麼沒人認識我的地方生活
只是我沒那個勇氣一個人生活
我們人夠活著多多少少都有受到很多人的幫助
這一群人組成了社會, 社會算是國家的子集合吧
他死後兩週被獵人發現
在他的相機中發現了這張自拍照, 他真的很快樂
2008年6月1日 星期日
Doonie Darko
今天看了這一部~
非常不錯的科幻片
但我覺得一部電影要能夠成功
一定必須融合多種元素並且能夠處理的和諧
電影插曲"Mad World"很好聽
另外看了豆豆假期,邊吃飯邊看的
其中有一幕唱"喔 我的父親" 很好笑 哈哈
能夠擁有一個電影播放室應該列入我小小的夢想之一了
2008年5月31日 星期六
大概過了人生的1/3了
我今天忽然有這種感覺
老實說我還不曉得我活著要幹嘛
但總有一天我會曉得吧?
總之,已經過了人生的1/3了
我有時候會想起一堆小時候的事情
小時候我很容易做惡夢,也許現在也是
半夜總是會夢囈,然後母親總是會過來陪我睡覺
抱著母親睡覺,我不會做惡夢
幾乎可以感受到在母親子宮那種安心的感覺,非常的溫暖
那種動物本能般的感受,讓我感到很安全
2008年5月29日 星期四
看完了罪與罰
前幾天把論文修改完等著老師回復
也把Project4解決
總算可以做一些想做的事
早上把JAVA的Collection看了一下
有點想是C++的STL, 總之就是資料結構
ArrayList
LinkedList
Vector
Queue
Stack
HashSet
TreeSet
HashMap
HashTable
TreeMap
這些是比較常用的...演算法部分我應該要好好加強一下
還有作業系統
下午就開始把罪與罰拿出來看...就在剛剛終於看完了
主角從頭到尾都不認為自己犯了罪
甚至到最後還認為自己的罪就是沒有好好的犯罪
但我很羨慕主角
有深愛著他的母親、妹妹、還有索尼雅
有一個很好的朋友拉祖米興
多麼可憐的人阿...這本小說充滿了許多可憐人的人
看了新聞, 伊索比亞有許多兒童在餓肚子...比可憐實在比不完
但對於活在台灣的我, 應該要以什麼樣的態度活下去呢
我ㄧ直在想這個問題...
我討厭虛偽的偽裝
你的穿著不能代表你
你的財富不能代表你
你開的車不能代表你
你的學歷不能代表你
你的外表不能代表你
你的工作不能代表你
你的成就不能代表你
PS:主角叫拉斯科爾尼科夫, 這大概是我少數能夠記得的小說主角名子!
2008年5月27日 星期二
2008年5月26日 星期一
蟲
昨天我住的地方忽然出現一堆蟲
我記得國中的時候學校也曾經發生這種事情
不明原因, 那種蟲俗稱"大水蛾", 只有在大雨欲來前會出現
房東也覺得很奇怪, 從沒見過這種事情
我掃了一堆蟲的屍體, 房間噴了殺蟲劑, 就準備到研究室過夜
去了公共研究室看了一部電影
黃金三鏢客 ~ imdb 9分的電影, 也是我第一次看西部電影, 過去這種題材蠻多的
the good, the bad, the ugly
看完都1點多了, 看到其他三個人似乎都還精神飽滿,
我總是到了12點左右就睡了, 因為我喜歡早晨的感覺
回到研究室, 發現躺椅壞了, 不是我的錯, 他不知道為什麼就壞了
然後我拿出充氣床墊, 這玩意真不錯, 我很快就睡著了
還蠻好睡的, 起來都8點了
我做了一個夢, 夢到有個人可以改變別人的未來
然後我想到可能是我看了ptrace的文章XD
這玩意有點像是第四度空間的神
他可以任意改變位於第三度空間的程序
藉由ptrace system call. 可以dump出該程序的register
甚至還能修改該程序...
就像神改變我們的命運
2008年5月23日 星期五
2008年5月22日 星期四
2008年5月20日 星期二
沒有辦法集中精神
最近腸胃一直不舒服精神沒辦法集中
檢討了一下
1. 蔬菜吃太少
在外面不太容易攝取纖維質, 我想最近可能要跑一下二餐三樓了
據說那邊15年來沒有漲過價, 根據學長說那邊菜擺放的位置從沒變過
但便宜蔬菜又多口味清淡, 白飯不用錢. 我大概40-50就能吃得很飽
2. 吃飯太快
這是我一個很久以來的缺點, 小時候因為迷上電動玩具
常常隨便吃一吃就跑到電視前面, 但腸胃因此弄壞了, 常常在拉肚子
看看現在我吃飯的速度還是太快, 今天還被同學說"哇,吃這麼快"
我本人倒是沒什麼感覺, 怎麼辦呢, 又沒有辦法像寫程式一樣Sleep一下執行緒
前鎮子我發現一個不錯的方法, 就是在食物中加辣, 這樣我就會吃比較慢
3. 吃太飽
常常跟同學去"衝"吃到飽的店, 長久下來腸胃也受不了
呼

昨天老師問我什麼時候要口試
害我爽了一下
我說:希望在畢業典禮前
他說:那麼6月中
喔耶, 雖然高興了一下子, 但我知道接下來還有很多事情要解決
我想這就是人生, 像鬥陣俱樂部的一幕, 一直都在選擇, 直到我斷氣為止
昨天晚上我玩了一下Python這個語言, 很像script腳本的直譯式語言
語法精簡, 支援物件導向, 例外處理, 我想會繼續玩玩看
在過去這種語言不太盛行主要是cpu沒麼快, 但現在cpu資源那麼多
像這種VM語言逐漸多了起來, 它們都被編譯成byte code or whatever
它們提供很多這種語言才能提供的特性像是 reflection
然後今天去demo了JAVA的project3, 這次還蠻順利的 雖然被扣一點分
但後來又加回來^^
2008年5月19日 星期一
2008年5月18日 星期日
unforgiven
今天看了superbad (個人覺得很爛)
還有unforgiven, 這個電影是1991年的, 有些年紀了
電影沒有訴說什麼大道理, 裡面沒有什麼善良邪惡
主角是一個退休的殺手, 為了獎金重出江湖
總而言之主角是壞人, 連女人小孩都殺的壞人
但在妻子感化下他已經從良? 妻子死後他跟小孩相依為命
日子很難過, 他為了獎金重出江湖
自己一直告訴自己說: 要殺的傢伙是壞蛋, 但是誰有奪取別人生命的權利呢?
劇中主角提到: 你殺一個人, 除了奪取他目前的所有東西, 也奪取他即將擁有的
值得省思的一部片
2008年5月17日 星期六
2008年5月14日 星期三
the downfall
剛才看了帝國毀滅(Downfall)這部電影
訴說希特勒在自殺前的日子
這應該是我看過最多人舉槍自盡的影片 ><
但我覺得算是相當不錯的電影
也許歷史根本不是這樣也說不定
我國中高中的時候對歷史還蠻有興趣的
因為我最喜歡聽故事,這也是我覺得上課有趣的地方
也許因為如此我才會那麼喜歡看電影
2008年5月12日 星期一
American History X
翻譯為美國X檔案
但這是一部講種族仇恨的電影
我覺得任何心中有仇恨的人都應該看看
讓我紅了眼框兩次的電影
一次在兄弟兩人將納粹的裝飾拿下那一幕
還有弟弟被殺掉那一幕
對於那些想要挑起仇恨的人...fuck you
沒有敵人,只有朋友
2008年5月11日 星期日
2008年5月4日 星期日
今天去爬柴山
跟一個老朋友,一個新朋友一起去
柴山棧道規劃的相當不錯, 一行人一直走到雅座
沿路上有相當多猴子, 而且都不怕生, 據說還會搶人類的食物
我們從頭到尾都在聊天, 從日本旅遊, 電玩遊戲, 工作, 股票, Linux ...總之就是講個不停
中午去大立百貨公司後面巷子的一家吃壽喜燒, 雖然蠻便宜的但還是覺得新竹的好一點
吃完飯我們買了酒衝到英國領事館, 這個地方相當不錯, 靠在觀景台望著大海
聽著街頭藝人表演, 看老鷹近距離飛翔, 大口喝著啤酒, 還有什麼事情比這更快樂?
最後有點醉意的騎機車回家, 算是我第一次酒駕orz, 途中闖了好多紅綠燈
想想沒事,真是萬幸
2008年5月2日 星期五
我媽說
2008年5月1日 星期四
little fun
前陣子裝了一款olg
讓我注意到nProtect這個防止作弊的軟體
許多線上遊戲都有用這款軟體
他的其中一項功能就是擋下模擬鍵盤的api
像是SendKey這類win32 api
但它檔的下kernel mode的鍵盤模擬嗎?
對於這點我很有興趣,但並不是真的想寫什麼賣錢的外掛
結論是[真的會擋,但是有方法可以逃過]
hardware software
keyboard (i8048) -> (acpi) -> port driver(i8042) -> kbd driver(kbdclass) -> filter driver
irp, 這玩意我想有點像是軟體中斷, 由ioctl或是read write等送出, driver 再由
call back function處理, port, kdb各有一個buffer用來放置進來的資料
當irp沒有將資料讀完那些資料就會放在buffer中,等待下次再讀
實驗的方法:使用windows driver development kit
對鍵盤驅動程式(kbdclass)新增一個ioctl, 再藉由外部程式add key
使用ioctl, 傳進去一個make code buffer, 進到kernel mode
(這時已經把那些buffer copy到 kernel stack),使用syscall
然後將這些buffer包裝成keyboard data的struct, notify os
nProtect會擋下送出ioctl的process, 但是他在process執行一段時間後才會偵測到
如果我的process每次只送出少數的key呢 ;) 這樣就擋不下了
2008年4月30日 星期三
今天上課
我一直好想睡覺
好想睡
這幾天到了晚上7-8點總是很想睡覺
好像每年到了這個時期都會這樣?
去年也是, 我早早就回家睡了
今天主要在講Java Bean, 老師說這玩意非常的重要
但怎麼看,不就是Reflection的應用嗎?
另外就是大家Follow一個Pattern來Design
像是
private Color background;
public void setBackground(Color c);
public Color getBackground();
用這樣的pattern Design出來的軟體,在藉由reflection取得attribure
就可以plug-in方式加入
Java的一些IDE, NetBeans, Eclipse 都可以利用Beans增加一些元件...
作業要我們寫一個whiteboard 可以用Bean畫圖, 定義一個介面
然後要可以把屬性利用server boradcast給其他client,
恩 先把reflection弄清楚在開始寫吧
2008年4月28日 星期一
2008年4月27日 星期日
2008年4月26日 星期六
2008年4月23日 星期三
昨天上課
介紹了Reflection, JNI, JIT
Reflection是一種相當重要的機制,有點像是DLL
能夠在動態取得類別物件的資訊並產生新的物件
有點抽象,以Java而言其參考並不是像C++這樣指向記憶體
為了能夠作garbage collection他至少跳了兩次
先指向一個固定size的欄位,這個欄位放在一個表格
這個表格由一個GC執行緒管理, 這個欄位至少有指向兩個東西
一個是這個物件的資料(code seg, data seg),另一個欄位指向一個特殊的class
"Class",這個class(注意大小寫),儲存了關於這個class的Method, Filed, Superclass, Interface訊息及Static成員資料,相同類別的物件都指向這個Class
使用Class.forName(String)這個方法可以將class檔動態載入,取得其資訊
在利用Class.newInstance方法產生物件,預設是沒有建構參數,有的話要多一些手續
Reflection加上介面抽象化很容易便可以設計一個相當flexible的系統
像是Applet, RMI, IDL, Beans...
Simple Factory Design Pattern + Reflection 更能發揮其power
JNI則是C/C++與Java程式溝通的方法
透過JVM提供的一些方式呼叫/被呼叫Java函式
沒什麼道理,就是這樣用而已,知道有這個東西就好,非必要不要碰
JIT(Just in Time Compile)是一個相當重要的概念
JVM將class檔load到資料結構後,JVM其實就是用C/C++實作的
開始執行時將一部分bytecode翻譯成native code,這個地方牽涉到許多最佳化的問題
一開始是one by one mapping, 從byecode to Assembly,所花的時間是線性的
但是當一段code被執行的次數增多(JVM通常會去profileing)
會多花一些時間進行Compiler這段code以減少cpu cycle
2008年4月21日 星期一
2008年4月16日 星期三
z-words movie
http://imdb.com/title/tt0365748/
今天看了這部直得讚賞的殭屍片
之前看了這個導演的Hot Fuzz,我很喜歡他的風格
非常的Funny, 這難道就是英式幽默? 嘿 我好喜歡英國腔
其中有一段與僵屍格鬥時,點唱機撥出了Queen的Don't Stop Me Now
主角說Kill the Queen指要關掉這個點唱機
所有人都愣住(我猜以為他要人家放Killer Queen這首XD)
有感人的地方,又充滿歡樂的元素
至於為什麼人會變成Zombie, who care?(電影從頭到尾都沒有提到 哈哈)
2008年4月15日 星期二
2008年4月14日 星期一
2008年4月13日 星期日
2008年4月11日 星期五
2008年4月9日 星期三
昨天上課
發表了 HW2 & 3
真夠勁,打算用禮拜六日來寫
講到了Class檔的format
如何把java所有資訊塞到class檔.const data, code segement這些東西
Java在執行過程中擁有完整的資訊,所以可以實現Reflection機制
及一些安全性的東西(validation)
JVM在class還沒開始執行前會檢查檔案是否被修改過
由於register是一個stack,它會檢查這個stack在每個instruction的狀態
這節課讓我對JVM的design有初步認識
把一個class dump出來看看,長這樣
這是一種二進位檔的format, 有點像ELF/PE這類的東西
有標頭檔, Data, code segment, 給JVM吃的
其中Code Segment就沒有解碼了
u4 magic; cafebabe
u2 minor_version; 0000
u2 major_version; 0032
u2 constant_pool_count; 0039 (57)
constant_pool:
01: 10: Methodref(class: 15, 29)
02: 9: Field(class: 11, 30)
03: 9: Field(class: 31, 32)
04: 7: Class(33)
05: 10: Methodref(class: 4, 29)
06: 8: String(34)
07: 10: Methodref(class: 4, 35)
08: 10: Methodref(class: 4, 36)
09: 10: Methodref(class: 4, 37)
10: 10: Methodref(class: 38, 39)
11: 7: Class(40)
12: 10: Methodref(class: 11, 41)
13: 10: Methodref(class: 11, 42)
14: 8: String(43)
15: 7: Class(44)
16: 7: Class(45)
17: 1: UTF8(4,"data")
18: 1: UTF8(1,"I")
19: 1: UTF8(6,"")
20: 1: UTF8(4,"(I)V")
21: 1: UTF8(4,"Code")
22: 1: UTF8(15,"LineNumberTable")
23: 1: UTF8(3,"run")
24: 1: UTF8(3,"()V")
25: 1: UTF8(4,"main")
26: 1: UTF8(22,"([Ljava/lang/String;)V")
27: 1: UTF8(10,"SourceFile")
28: 1: UTF8(13,"MyThread.java")
29: 12: NameAndType(19,24)
30: 12: NameAndType(17,18)
31: 7: Class(46)
32: 12: NameAndType(47,48)
33: 1: UTF8(23,"java/lang/String/Builder")
34: 1: UTF8(4,"Run ")
35: 12: NameAndType(49,50)
36: 12: NameAndType(49,51)
37: 12: NameAndType(52,53)
38: 7: Class(54)
39: 12: NameAndType(55,56)
40: 1: UTF8(8,"MyThread")
41: 12: NameAndType(19,20)
42: 12: NameAndType(23,24)
43: 1: UTF8(9,"JVM test!")
44: 1: UTF8(16,"java/lang/Object")
45: 1: UTF8(18,"java/lang/Runnable")
46: 1: UTF8(16,"java/lang/System")
47: 1: UTF8(3,"out")
48: 1: UTF8(21,"Ljava/io/PrintStream;")
49: 1: UTF8(6,"append")
50: 1: UTF8(45,"(Ljava/lang/String;)Ljava/lang/StringBuilder;")
51: 1: UTF8(28,"(I)Ljava/lang/StringBuilder;")
52: 1: UTF8(8,"toString")
53: 1: UTF8(20,"()Ljava/lang/String;")
54: 1: UTF8(19,"java/io/PrintStream")
55: 1: UTF8(7,"println")
56: 1: UTF8(21,"(Ljava/lang/String;)V")
u2 access_flags; 0020
u2 this_class; 000b
u2 super_class; 000f
u2 interfaces_count; 0001
u2 interfaces[interfaces_count]; 0010
u2 fields_count; 0001
field_info fields[fields_count];
filelds[1] {
u2 access_flages; 0000
u2 name_index; 0011
u2 descriptor_index; 0012
u2 attributes_count; 0000
attribute_info attributes;
}
u2 methods_count; 0003
Method[1] {
u2 access_flags; 0000
u2 name_index; 0013
u2 descriptor_index; 0014
u2 attributes_count; 0001
u2 attribute_name_index; 0015
u4 attribute_length; 0000 002a (42)
u1 info[attribute_length];
00 02 00 02 00 00 00 0a 2a b7 00 01 2a 1b b5 00 02 b1 00 00 00 01 00 16 00 00 00 0e 00 03 00 00 00 07 00 04 00 08 00 09 00 09
}
Method[2] {
u2 access_flags; 0001
u2 name_index; 0017
u2 descriptor_index; 0018
u2 attributes_count; 0001
u2 attribute_name_index; 0015
u4 attribute_length; 0000 0039 (57)
u1 info[attribute_length];
00 03 00 01 00 00 00 1d b2 00 03 bb 00 04 59 b7 00 05 12 06 b6 00 07 2a b4 00 02 b6 00 08 b6 00 09 b6 00 0a b1 00 00 00 01 00 16 00 00 00 0a 00 02 00 00 00 0b 00 1c 00 0c
}
Methid[3] {
u2 access_flags; 0009
u2 name_index; 0019
u2 descriptor_index; 001a
u2 attributes_count; 0001
u2 attribute_name_index; 0015
u4 attribute_length; 0000 003b (59)
u1 info[attribute_length];
00 03 00 02 00 00 00 17 bb 00 0b 59 10 0a b7 00 0c 4c 2b b6 00 0d b2 00 03 12 0e b6 00 0a b1 00 00 00 01 00 16 00 00 00 12 00 04 00 00 00 0e 00 0a 00 0f 00 0e 00 10 00 16 00 11
}
Attributes count: 0001
Attributes:
SourceFile_attribute {
u2 attribute_name_index; 001b
u4 attribute_length; 0000 0002
u2 sourcefile_index; 001c
}
2008年4月7日 星期一
善與惡
今天來學校的路上剛好想到
一個人的善跟惡根本沒有辦法判斷
就像愛跟恨一樣,它們是同一種感情
我不是好人,也不是壞人
有時候會做好事,也做了不少壞事
所以評論一個人是好人壞人根本沒什麼意義
罪與罰那個主角,他基於一個善的想法
去做了一件惡的事情,最後接受法律制裁
也有看過一則新聞,有個在醫院打工的小夥子
強姦了一個準備送到太平間的女孩
但那個女的卻因此活過來,似乎是陷入某種假死的狀態
這個人基於一個惡的行為,卻導致善的結果,但他還是必須接受法律制裁
那個女孩家屬相當感謝那個小夥子還幫他打官司
------------------------------------
剛剛看了"Once"這部電影
充滿很多音樂元素的
關於愛情的處理也相當不錯
在台灣好像還沒上映
電影中捷克女孩好美...
我喜歡這部電影!
-------------
因為感冒一個多禮拜沒有跑步
今天又開始跑
...
體力變差了
..
明天早上去游泳!
2008年4月6日 星期日
Decorator
Decorator 用來將功能擴充
先定義一個介面,Decorator具有該介面,且將之擴充功能
Java的IO用到很多這個Pattern
class Base {
public:
virtual void Action(){}
};
class Decorator : public Base {
private:
Base* base;
public:
Decorator(){};
Decorator(Base* base)
{
this->base = base;
}
virtual void Action()
{
this->base->Action();
this->Add_on();
}
virtual void Add_on(){}
};
class BaseClass : public Base {
public:
virtual void Action()
{
cout << "Action:\n";
}
};
class GoodDecorator : public Decorator {
public:
GoodDecorator(Base* base) : Decorator(base)
{}
virtual void Add_on()
{
cout << "Good\n";
}
};
class BadDecorator : public Decorator {
public:
BadDecorator(Base *base) : Decorator(base)
{}
virtual void Add_on()
{
cout << "Bad\n";
}
};
int main()
{
BaseClass *bs = new BaseClass();
GoodDecorator *good = new GoodDecorator(bs);
BadDecorator *bad = new BadDecorator(bs);
bs->Action();
good->Action();
bad->Action();
return 0;
}
2008年4月5日 星期六
Composite
Composite
很難解釋
簡單的說應該像是樹狀結構
我們定義一個樹狀結構節點的介面
每個節點又包含其他節點
這些實做這個介面的物件就能夠用組合起來(如樹狀結構般)
Java SWING的component就是用這個方法設計的
#include
#include
using namespace std;
class component {
private:
listchildren;
public:
component() {
}
virtual void Action()
{}
void Trace()
{
this->Action();
list::iterator i;
for( i = children.begin(); i != children.end(); ++i)
{
(*i)->Trace();
}
}
void Add(component* child) {
children.push_back(child);
}
void Remove(component* child) {
children.remove(child);
}
};
class NodeA : public component {
public:
virtual void Action()
{cout << "NodeA\n";}
};
class NodeB : public component {
public:
virtual void Action()
{cout << "NodeB\n";}
};
class NodeC : public component {
public:
virtual void Action()
{cout << "NodeC\n";}
};
int main()
{
NodeA a;
NodeB b1;
NodeB b2;
NodeC c1;
NodeC c2;
NodeC c3;
a.Add(&b1);
a.Add(&b2);
b1.Add(&c1);
b1.Add(&c2);
b2.Add(&c3);
a.Trace();
return 0;
}
2008年4月4日 星期五
Chain of Responsibility
Chain of Responsibility
目的在將一個訊息傳遞下去
讓每個物件都判斷是否有該處理的事情
就像老闆交代一件事情下來,所有員工都問問看,有沒有人會
java awt就是使用這個pattern
有點像linked-list
#define ART 0
#define ENGINEERING 1
#define SCIENCE 2
#define LABOR 3
#define POLITICS 4
class Request {
public:
int request_type;
Request(){}
Request(int type)
{
request_type = type;
}
};
class Handler {
public:
int handler_type;
Handler* next_handler;
Handler()
{
this->next_handler = NULL;
}
void try_handle(Request* request) {
cout << "review request...\n";
if( request->request_type == this->handler_type ) {
this->handle(request);
}
if( this->next_handler != NULL ) {
this->next_handler->try_handle(request);
}
}
void set_next_handler(Handler* next_handler)
{
this->next_handler = next_handler;
}
virtual void handle(Request* request) {
}
};
class DirtyRequest : public Request {
public:
DirtyRequest() : Request(POLITICS) // 這邊算是trick, invoke superclass的constructor必須在code block外面
{}
};
class Engineer : public Handler {
public:
Engineer()
{
this->handler_type = ENGINEERING;
}
virtual void handle(Request* request) {
cout << "Engineer Soloved\n";
}
};
class Artist : public Handler {
public:
Artist()
{
this->handler_type = ART;
}
virtual void handle(Request* request) {
cout << "Artist Soloved\n";
}
};
class Politican : public Handler {
public:
Politican()
{
this->handler_type = POLITICS;
}
virtual void handle(Request* request) {
cout << "Politican Soloved\n";
}
};
int main()
{
Engineer *eng = new Engineer();
Artist *art = new Artist();
art->set_next_handler(eng);
Politican *pol = new Politican();
pol->set_next_handler(art);
pol->try_handle( new DirtyRequest() );
return 0;
}
Builder
Builder Design Pattern
用在Java的Thrad其Runnable介面即是利用Builder Design
寫Java其實你已經跟著他的步驟在使用Pattern
只是渾然不覺
使用別人寫的系統時不如花點時間思考一下
為什麼別人要這樣設計?
class Ibuilder {
public:
virtual void build(){}
};
class good_builder : public Ibuilder {
public:
virtual void build()
{
cout << "good building\n";
}
};
class bad_builder : public Ibuilder {
public:
virtual void build()
{
cout << "bad building\n";
}
};
class who_use_builder : public Ibuilder {
private:
Ibuilder *builder;
public:
who_use_builder(Ibuilder *builder)
{
this->builder = builder;
}
who_use_builder()
{
this->builder = this;
}
virtual void build()
{
}
void start_build()
{
this->builder->build();
}
};
class I_use_builder : public who_use_builder {
public:
virtual void build()
{
cout << "fair building\n";
}
};
int main()
{
// like extends Thread
I_use_builder* me = new I_use_builder();
me->start_build();
// like implements Runnable interface
who_use_builder* w1 = new who_use_builder(new good_builder);
w1->start_build();
who_use_builder* w2 = new who_use_builder(new bad_builder);
w2->start_build();
return 0;
}
Abstract Factory
Abstract Factory
跟Simple Factory不同的是
進而將Factory抽象化,實現不同的工廠
必要時工廠能夠快速的抽換
例如在版本控制或是跨平台
class Iproduct_Food {
public:
virtual void eat(){}
};
class Iproduct_Game {
public:
virtual void play(){}
};
class abstract_factory {
public:
virtual Iproduct_Food* create_Food(){}
virtual Iproduct_Game* create_Game(){}
};
class good_food : public Iproduct_Food {
public:
virtual void eat()
{
cout << "eating good food\n";
}
};
class good_game : public Iproduct_Game {
public:
virtual void play()
{
cout << "playing good game\n";
}
};
class good_factory : public abstract_factory {
public:
virtual Iproduct_Food* create_Food()
{
return new good_food();
}
virtual Iproduct_Game* create_Game()
{
return new good_game();
}
};
class bad_food : public Iproduct_Food {
public:
virtual void eat()
{
cout << "eating bad food\n";
}
};
class bad_game : public Iproduct_Game {
public:
virtual void play()
{
cout << "playing bad game\n";
}
};
class bad_factory : public abstract_factory {
public:
virtual Iproduct_Food* create_Food()
{
return new bad_food();
}
virtual Iproduct_Game* create_Game()
{
return new bad_game();
}
};
int main()
{
abstract_factory* f1 = new good_factory();
abstract_factory* f2 = new bad_factory();
f1->create_Food()->eat();
f1->create_Game()->play();
f2->create_Food()->eat();
f2->create_Game()->play();
return 0;
}
2008年4月3日 星期四
Simple Factory
目的在對一個產品進行抽象化,將其介面獨立出來
建立產品去實現這個介面
再由一個工廠產生,實作此介面的物件
C++沒有Reflection,如果要用的話應該要使用一些library
class Imust_imp {
public :
virtual void do_something(){};
};
class Imp1 : public Imust_imp {
public:
virtual void do_something()
{
cout << "I am singing\n";
}
};
class Imp2 : public Imust_imp {
public:
virtual void do_something()
{
cout << "I am playing\n";
}
};
class Simple_factory {
public:
Imust_imp* create_by_name(char* class_name)
{
Imust_imp* ret;
if( strcmp(class_name, "Imp1") == 0 ) {
ret = new Imp1();
return ret;
}
if( strcmp(class_name, "Imp2") == 0 ) {
ret = new Imp2();
return ret;
}
return 0;
}
};
int main()
{
Simple_factory *fac = new Simple_factory();
Imust_imp* a = fac->create_by_name("Imp1");
Imust_imp* b = fac->create_by_name("Imp2");
a->do_something();
b->do_something();
return 0;
}
2008年4月2日 星期三
昨天上課
講到了Awt跟Swing
一開始awt的design方式是用abstract factory這個design patten
所有的元件都是用作業系統的,一個按鈕在MAC跟在X-window顯示出來會不一樣
由於這樣做,牽涉到許多context switch會造成許多overhead(因為交給OS的componet處理)
作什麼事情,當你需要快時,就先用dirty solution,但是記著這邊有問題,以後有餘力要回來改
(有點像考試前先死記,之後再融會貫通XD)
當初發展JDK 1.0時也是抱持著這樣的想法,等Java紅了之後,他們派人來處理這塊
於是誕生了Swing
Swing的元件彈性很大,因為他們之所以看起來一樣是他們都是"畫"出來的
所以在MAC與Windows看起來都一樣,不再使用OS的widget(除了JFrame以外)
但Swing實際上也存在著一些問題需要解決,例如:因為是軟體畫的,無法有效運用顯示卡
然後提到了
paint & repaint & update & double buffering & GUI thread & M-V-C & applet & jar
當畫面需要更新: repaint -> update()
當視窗移動或改變: paint
如果你沒有override update時,java會先把你的影像清掉然候等待時機再paint
(考慮 GUI thread的安全) 這時會閃爍
要避免可以override update()方法 然後call paint( 相反也可以 )
或是用double buffering先畫在一個image再更新到Graphic
介紹了一下Model View Control的概念
例如JTree 這個swing componet將其樹狀資料(Model)及控制與外觀分開
還有applet與jar
把用到的class包成jar會比一個個去load快(這跟網路連線有關, TTL)
jar其實是zip , 有點像tar方式包裝
複習一下
tar -zxvf xx.tar.gz des
tar -zcvf xx.tar.gz des
jar很類似
2008年3月30日 星期日
Pedro Almodóvar
最近連續看了幾部他導的電影
之前看"我的母親"(all about my mother)就深深被他的風格吸引
然後看了"壞教慾"(bad education), "悄悄告訴她"(talk to her), "活色生香"(live flesh)
今天看了"玩美女人"( volver)
"想繼續找他早期的電影來看",心中有這種想法
看電影常常會改變我的一些想法
也許不會更成熟,但想法確實在改變
我也看了現代啟示錄 1979的電影
一部講越戰,在電影中到處都在批評美國政府
世界上充滿一堆偽善的人,他們做盡壞事,然後又想要自己看起來像個好人
在電影中美國政府就是這樣
但其實我看這部電影是想看馬龍白蘭度
可惜他的戲份不是很多哈哈
2008年3月28日 星期五
2008年3月26日 星期三
2008年3月24日 星期一
2008年3月23日 星期日
back again
這次回家看了三部電影
鐵面特警隊 <- 羅素克洛真男人, 讚
也是三部裡面最讚賞的電影
我很喜歡看這種看好人壞人很難分清楚的劇情
記憶裂縫(paycheck) <- sucks 大概是馬蓋先電影版,一開始鋪陳的還不錯
但中間後面就遜掉了,可惜了,動作片,我覺得我愈來愈不喜歡這種電影
子彈好像無限發,但又打不中主角,難道這就是好萊屋式的電影?
時空線索 <- 這部還不錯,跟記憶裂縫剛好相反,有一台可以看到過去的機器
但那個過去是分支的過去,也就是你可以改變那個過去,但不能改變目前
跟七龍珠特南克斯回去救悟空的劇情很像XD
坐車回新竹的路上把hw client的部分完成了
因為事先用vb.net寫過ㄧ個gui client
現在用java寫 大概一個小時多就解決了
然後呢 拿出nb看電影
我看了壞教慾
講男同性戀、戀童癖的電影
很多歐洲電影都比較敢描述一些特殊題材的電影
我很喜歡以前看的一部叫做"我的母親"的義大利電影( 冏 後來我去查 發現是同一個導演 )
風格很像
離題了,這部壞教慾倒沒有什麼什麼很露骨的部分
這位導演實在是很厲害
但是看完總是被一股強大的感情淹沒
會想哭,但哭不出來那種感覺
其中有一幕讓我印象很深刻
神父跟小男孩在樹林下,神父彈著吉他,小男孩唱著Moon River
我好像聽到天使的聲音
2008年3月20日 星期四
今天想到的一句話
對抗無知的武器 - 勇氣
其實我們對事實的本身都不是很清楚,但我們還是可以活下去,靠的就是勇氣
盜版軟體? 先用了再說,靠的是勇氣
菜不乾淨? 先吃了再說,靠的是勇氣
話說,花了一天把程式作業寫出來了,一個簡單的chat server
之前修網路程式設計就寫過類似的東西,之前是用C,這次用Java
想想看枝前我花了一個多禮拜,果然功力有小小的提升了
Java藏了太多東西了,有時候反而會掉入他的陷阱,似是而非
最簡單例子就是 if( string == "a") 這是在比memory address 而不是字串內容
String這東西根本不是原生的資料結構,他是類別,在Java類別變數可以想像成指標
還有,我把client socket關掉了,居然readLine()還是會讀到(null)而不是丟出IOException
thread programming真的不是簡單的事情
讓他們"自然死"有幾種方法,設一個變數一直檢查
或是用InterruptedException(但是必須要在sleep或wait狀態下)
或是用IOException(在做IO時)
然後catch後做安葬的動作
2008年3月17日 星期一
2008年3月12日 星期三
2008年3月11日 星期二
今天上課
之前上網路程式設計老師有說: multi thread programming 很困難
今天上課又提到一次,multi thread 我還沒有真正寫過
在linux 下用fork產生一個新的process而不用thread
process跟 thread最大差別就在 process有自己的address space, thread沒有
雖說fork但也沒有完全copy一份memory
有一些機制例如: copy on write之類的再需要動到資料時再copy
process則利用一些IPC的機制如pipe或是shared memory溝通
今天另外一個主題是Exception handling Java在這邊處理的還不錯
code 看起來更清楚了
在C常要用
#define ERRORA -1
#define ERRORB -2
code = foo();
if( code == ERROE )
{
... 做一些例外處理
}
code = bar();
if( coid == ERROEB)
{
.., 做例外處理
}
Java 則是
try
{
foo();
bar();
} catch( ERRORA) {
... 例外處理
} catch(ERRORB) {
... 例外處理
} finally {
... 只要有catch exception都會執行, 用來free一些資源
}
寫Thread最重要的就是資料要分開 分清楚!
小心不要Double Lock
2008年3月9日 星期日
Note
前幾天玩了那個手套,他用了一些Information Hidden的方法
覺得蠻有趣的 想要自己來試試看 順便練習一下C
[ hidden.h]
#ifndef HIDDEN_H
#define HIDDEN_H 1
// 在這邊藏起來了,用void*
typedef struct Hidden {
void* data;
} Hidden;
Hidden* Hidden_New();
void Hidden_Show(Hidden*);
#endif
[hidden.c]
#include
#include
#include "hidden.h"
typedef struct dataContent {
int ID;
char* name;
} dataContent;
typedef dataContent* ptrData;
Hidden* Hidden_New()
{
ptrData p = (ptrData) malloc(sizeof(dataContent));
p->ID = 577;
p->name = "Pingting";
Hidden* ret = (Hidden*) malloc(sizeof(Hidden));
ret->data = (void*)p;
return ret;
}
void Hidden_Show(Hidden* target)
{
ptrData p = (ptrData)target->data;
printf(" %d, %s \n", p->ID, p->name);
}
[test.c]
#include
#include "hidden.h"
int main(int argc, char** args, char** envp)
{
Hidden* p = Hidden_New();
Hidden_Show(p);
return 0;
}
gcc -c hidden.c
gcc -c test.c
gcc -o test test.o hidden.o
#test
577, Pingting
2008年3月8日 星期六
2008年3月7日 星期五
噁
昨天吃太多,今天也吃太多,肚子不太舒服
今天我把玩了一下之前老師買的裝有Sensor的手套
他是USB介面的,直接插上XP後就會出現"找到USB人性化裝置",支援Plugin & Play
然後利用廠商提供的Win32 DLL (包含一個.DLL 跟 .lib, .h)
這個DLL有點像是filter的東西並不是真的驅動程式,他只是一段程式
去跟Windows的驅動程式溝通,Open, Close, Read, Write,IOCTL 這些東西都看不到
而是直接提供比較高級的API,如果是Memory Mapped IO
應該是去讀取某段記憶體位址 (非虛擬記憶體)
或是Port IO就去開啟另一個特殊的位址
但應該沒有分配到IRQ, API只提供主動去讀取值
他範例的作法是透過一個Timer去取得手套Sensor的值
手套上總共有5個Sensor,測定每個Sensor的張力,表現手指的狀態
手套有預設幾組手勢,例如比Yeah就是3
我改了一下他的範例讓程式可以在某些手勢時發出聲音 ( 後來發現比中指的辨識率最高 哈哈 )
關於這個DLL, 應該是MicroSoft C++ Compiler產生的
我嘗試用Gnu C++ Compiler去include他會出現Signature出問題的Error(我試過改calling conversion還是不行)
g++ 跟 cl 產生的DLL果然是不能互通的? 也許有方法但我沒google到(但意外google到把Dll轉成static lib的東西)
其實DLL就是一段編譯好的程式,利用.h跟(.a / .lib)在你Inlude的程式裡面留個空間
當你執行(或使用)的時候在動態載入( 藉由Loader的幫忙,幫你把DLL mapped到你的程式,包含Data & Code segement )
今天晚上用Visual C++ Express 2008嘗試玩用一下
第一次對MS這麼厭惡
之前寫VB.net都沒什麼感覺,用得很爽
但為了.Net Framework, C++多出了很多莫名奇妙的東西, ref Class? &Class::Function ???
弄得我有點暈頭轉向,把以前寫的Code要port進來,我看有得改
他同時支援標準的C++跟他自己發明的一些玩意(copy Java copy 很大),.net Framework可以用很多種語言C#, VB, C++, ...
不想去搞那些東西,看他.net版本跳那麼快,還是把基礎打好要緊
.Net的程式跟Java比較大的差別是.Net編譯出來是Assembly Code, Java是ByteCode
.Net會因為這樣所以效能好一點嗎? 但也比較不好Port到其他平台吧?
對了 今天慢跑的時候 忽然想到怎麼寫論文的誌謝 哈哈
以上都是我在自言自語 沒有整理 想到什麼就寫什麼
2008年3月5日 星期三
2008年3月4日 星期二
今天上課
坐我前面那個人一直在打電動
讓我有點分心XD
今天老師介紹一下Java基本的OO部分
講到ADT其實就是Interface, Class其實是Implement後的東西
這個概念挺不錯的
還有一個東西 "volatile"這個modifer
之前修嵌入式系統在一些driver上常看到,上網查一下也看不是很懂
今天老師只解釋一下就恍然大悟了
int a;
a = 1;
a = 3;
a = 5;
這時Compiler可能會跳過a = 1 or 3讓 a 直接等於 5
但對於那些memory Mapped IO的device而言a所指的address是對應到某個裝置
( 可能是led的register )
跳過a = 1, a = 3 不是我們想要的,所以用"volatile"修飾一下告訴compiler不要亂來
2008年3月3日 星期一
2008年3月2日 星期日
master piece
最近在念 the art of assembly language
寫得真的很棒
釐清了一些以前不太了解的東西
CPU, pre-fetch, pipeline, interrupt ( interrupt vector )/ polling IO , dma, cache,
memory mappped IO / port IO
以及組合語言
而且我才念到第三章啊 ...
2008年3月1日 星期六
2008年2月29日 星期五
typedef
觀看 http://zh.wikipedia.org/wiki/Typedef
原來 在C++
宣告struct時自動已經幫你typedef加上去了
在C常常看到
typedef struct Name{
...
} Name;
這種寫法,可以在宣告時少寫"struct"
struct 跟一般變數不太一樣的地方,應該是還需要一個table紀錄一些成員的資訊
落花水面皆文章
有時候覺得看書似懂非懂,但只要實際摸過就會覺得: 其實也沒有什麼啊
2008年2月28日 星期四
Othello Game
一年多前修AI時寫的程式
昨天翻出來看一下,整理一下
之前對OO的概念還不太懂 ( 現在也沒多懂,只是稍微了解的程度 )
利用下面的方法就可以做一個可以同時當Application跟Applet的程式
當在寫一些比較不牽涉系統資源的程式,這樣做還挺不錯的( 例如Game )
實做JApplet這介面是為了瀏覽器,讓你的瀏覽器以Plugin的方式執行程式
當然要先安裝JVM及在瀏覽器上裝Plugin
public class myApplet extends JApplet {
private myApplect application;
// Application 的 Entry Signature
public static void main(String[] args)
{
application = new myApplet();
application.init();
}
// Applet 的 Entry Point Signature
public void init()
{
// 開始實作內容
}
}
至於AI的部份
用很簡單的搜尋法
heuristic function( 每個可以下的位置 ) = 可以吃的子數 * w1 + 下一回可以吃的子數 * w2 + 下一回最多被吃的子數 * w3 + 是否為C-square * w4 + 是否為X-square * w5 + 是否為邊點 * w6 ...
直接玩( 當作Applect )
http://s-web.nctu.edu.tw/users/u9516577/WWW/test.html
或是抓下來( 當作Application )
http://s-web.nctu.edu.tw/users/u9516577/WWW/Game.jar
2008年2月27日 星期三
2008年2月26日 星期二
C
C語言是一個很有彈性的程式語言
可以繁複,可以簡約
可以華麗,可以樸實
可以高階,可以低階
實在很佩服設計這個語言的人
讓我讚嘆不已
今天稍微嘗試一下簡單OOP in C, sweet
#ifndef COMMON_H
#define COMMON_H
#define SHAPE int X;\
int Y;\
void (*Draw)( struct Shape* );
typedef struct Shape {
SHAPE;
} Shape;
typedef struct Circle {
SHAPE;
int radius;
void (*SetRadius)( struct Circle* , int);
} Circle;
Circle* New_Circle( int );
typedef struct Square {
SHAPE;
int Xdim;
int Ydim;
void (*SetDimension)( struct Square* ,int, int );
} Square;
Square* New_Square( int, int );
#endif
[ circle.c ]
#include "common.h"
static void Draw( struct Shape* shape )
{
Circle *circle = ( Circle * ) shape;
printf( "drawing a circle, radius : %d \n", circle -> radius );
}
void SetRadius(struct Circle* c, int r )
{
c -> radius = r;
}
Circle* New_Circle(int r)
{
Circle *circle = ( Circle* ) malloc( sizeof(Circle) );
circle -> radius = r;
circle -> SetRadius = SetRadius;
circle -> Draw = Draw;
return circle;
}
[square.c]
#include "common.h"
static void Draw( struct Shape* shape )
{
Square* sq = (Square*) shape;
printf( "dwawing a square, area:%d\n" , ( sq->Xdim * sq->Ydim ) );
}
void SetDimension( struct Square* sq,int X, int Y)
{
sq -> Xdim = X;
sq -> Ydim = Y;
}
Square* New_Square( int Xdim, int Ydim)
{
Square* sq = ( Square* ) malloc( sizeof( Square ) );
sq -> Xdim = Xdim;
sq -> Ydim = Ydim;
sq -> Draw = Draw;
sq -> SetDimension = SetDimension;
return sq;
}
[ main.c]
int main()
{
Shape* shapeCollection[ 3 ];
shapeCollection[ 0 ] = (Shape*) New_Circle( 10 );
shapeCollection[ 1 ] = (Shape*) New_Square( 4, 3 );
shapeCollection[ 2 ] = (Shape*) New_Circle( 3 );
int i;
for( i = 0; i < 3; ++i )
shapeCollection -> Draw( shapeCollection[ i ] );
return 0;
}
[ output ]
drawing a circle, radius : 10
dwawing a square, area:12
drawing a circle, radius : 3
2008年2月24日 星期日
2008年2月16日 星期六
2008年2月13日 星期三
開始弄點論文
開始衝論文了
關於IFC
Industry Foundation Classes
有些人相信用這些東西可以用來當作一種Protocol
讓不同的Software可以溝通
他其實是一種Product的描述語言,藉由一些OO概念
以Express File或是XML存在
IfcProject -> IfcSite -> IfcBuilding -> IfcStoery -> IfcBuildingElement
不僅如此,一些如時間也可以屬性存在
他除了描述形狀,位置,能夠描述更多的東西
這個標準還在發展當中,算是有潛力成為ISO的玩意
但好像沒什麼學術的味道
我想能夠畢業就好了
白天弄論文,晚上玩我的
2008年2月11日 星期一
I will be back
要回新竹了,這次待得挺久的
身上增加了不少肥肉
應該要把他們甩掉才是
給自己一個小目標吧
每個禮拜跑15Km, 伏地挺身150下
我想自我激勵的Daemon, Priority要提高一點了XD
新竹好冷
體重不爭氣的跑到82kg . 目標75啊 orz
2008年2月10日 星期日
2008年2月9日 星期六
little hack of keyboard
過年有點無聊。嘗試玩了一下windows device driver
參考 : http://www.catch22.net/tuts/kernel1.asp
首先要下載WINDDK, driver development kit 裡面是建構driver的環境
包含 compiler, linker, 及一些lib, header
使用C語言,好像沒有用到clib ...
嘗試修改鍵盤的驅動程式
windows鍵盤滑鼠訊號傳遞大概是長這樣( 也許有錯 )
硬體 -> kbdfilter.sys -> kdbclass.sys -> Application
kdbfilter 這一個可能是某種裝置的驅動程式( 例如usb 或 ps/2 )
kdbclass 這一個接著處理鍵盤的輸入pass給Application
修改
[kdbclass.c]
VOID
KeyboardClassServiceCallback(
IN PDEVICE_OBJECT DeviceObject,
IN PKEYBOARD_INPUT_DATA InputDataStart,
IN PKEYBOARD_INPUT_DATA InputDataEnd,
IN OUT PULONG InputDataConsumed
)
{
... 省略
ULONG i;
ULONG num;
ULONG keycode;
PKEYBOARD_INPUT_DATA data;
data = InputDataStart;
num = InputDataEnd-InputDataStart;
for(i=0;i
DbgPrint("Keyboard Filter Driver Sample - keycode=%u\n",keycode );
data++;
}
... 省略
}
重點是以下兩個東東
InputDataStart 鍵盤輸入的資料,Pointer到buffer起始位置
InputDataEnd 鍵盤輸入的資料,Pointer到buffer起始位置
Scan Code
scan make 1 就是MakeCode
[ntddkbd.h]
typedef struct _KEYBOARD_INPUT_DATA {
USHORT UnitId;
USHORT MakeCode;
USHORT Flags;
USHORT Reserved;
ULONG ExtraInformation;
} KEYBOARD_INPUT_DATA, *PKEYBOARD_INPUT_DATA;
利用Debugview就可以看到鍵盤的輸入了...
從kernel mode直接取得,而沒有透過一些API
2008年2月7日 星期四
胖
我算對體重還蠻敏感的
以前我曾經很胖,從開始記得事情以來,總是被叫胖子
一直到大學最後一年才瘦下來
胖子會不會受到大家的歡迎,幾乎是一點都沒錯,但也有一些例外
但現在我差不多在標準體重了
我很能體會一些很胖人的感覺
當我很胖時,我總是認為自己"還沒那麼胖"
但這是很恐怖的事情,因為自己對事情的了解總是沒那麼正確
需要外在更可以陳述事實的東西---體重計
所以我買了一台不錯體重計,電子式的
每天照三餐量體重,隨時追蹤紀錄
我記得最重的時候...125Kg, 現在我差不多80吧?
我到底了解自己多少部份了呢
不到30%, 保守估計
剛剛看了"象人"這部電影
一個畸形的人,但他的內心卻是像一張白紙一樣...
如果身旁有這樣的人,我該用什麼態度面對他呢
2008年2月6日 星期三
deer hunter
中文名稱好像是"越戰獵鹿人"
"This story is neither an accusation nor a confession and, least of all, an adventure because death is not an adventure to those who stand face to face with it. It will try simply to tell of a generation of men who, even though they may have escaped its shells, were destroyed by the war..."
把西線無戰事的序拿來解釋這部電影,再適合不過了
2008年2月5日 星期二
Taxi driver
勞勃狄尼洛看著窗外,慵懶的開著計程車
一部充滿自省味道的電影
主角因為患有失眠的毛病,所以半夜在開計程車
興趣是看看情色電影,他認為自己是一個孤獨的人
他嘗試去接觸別人,但得到冷酷的回應,人與人之間總是充滿誤解
有一天她忽然有一些想法,I should do something
他準備暗殺一位總統候選人,這邊也許是為了報復那位誤解他的女生,不過他沒有成功
最後他殺進一個私娼寮,一個充滿雛妓、毒蟲、混混的地方
他想要幫助一個叫Aries的女孩,有一次她想要逃離那個地方,但是在車上被boss拉回去
他想要幫助她離開那個地方
非常值得一看的電影!
2008年2月1日 星期五
2008年1月31日 星期四
2008年1月30日 星期三
2008年1月26日 星期六
2008年1月24日 星期四
2008年1月23日 星期三
2008年1月21日 星期一
2008年1月20日 星期日
Parklife
在學校超過一半時間不是在我的研究室
這也算是一種Parklife吧?
像FPE或是GameMaster這種軟體能夠attach process
然後scan memory的值並加以修改,感覺是很危險的東西
這跟program安全性有相當關係吧?
下面這篇文章有個老兄介紹的很詳細
http://www.codeproject.com/KB/cs/sojaner_memory_scanner.aspx
之前上課聽老師說整個process在32位元的電腦正能用的其實大概2G
剩下的都是kernel的東西佔去
算了 有機會在研究一下
對了 我想是該開始運動了,加油啊!
我不想做什麼鬼替代役 讓我去部隊吧 我不介意吃虧
2008年1月19日 星期六
2008年1月17日 星期四
friendship emptying?
有沒有那種曾經很要好的朋友
過了一段時間,就完全沒有聯絡
就算MSN遇到也不會打招呼
為什麼?
人跟人之間的關係真的那麼脆弱嗎?
還是每個人都沒有勇氣當那個ice breaker?
就我所知
All the relationships are emptying and temporary
無論是怎麼堅強的情感的繫結
2008年1月16日 星期三
2008年1月11日 星期五
ESD期末project---orz
---- 1/9 , 1/10
經過兩天在網路上搜尋
目前能做的方向就是
使用Linux running on PXA270
使用Creator母版上的Codec
使用PXA270 LCD/ CODEC Driver
使用Linux 的Networking
接下來
實做簡單的SIP protocol 只要能接收,撥打就好
怎麼把16bit 的voice data 用RTP包起來
VoIp Client / Server 程式撰寫, Keep it Simple
有必要修改CODEC的 Driver
重點就在SIP Protocol的Implemnet 跟CODEC !!
-- -- 1/11
目前可以用PAX270與Linphone Talk了, 在PXA270弄了個UDP Server
但是SIP protocol 要怎麼做? 網路找還是自己寫?
-- --1/12
放棄自己寫,無盡的尋找..看看有沒有比較不複雜的SIP stack
liboSIP 太複雜
PJSIP 這個也許可以參考參考
繼續尋找,今天看了11:14這部電影,裡面有各種巧合,但是輸兩根槍管很多
-- --1/13
現在我想也許嘗試Cross Compile ,Linphone 也許可行
用的是1.2版, arm-linux-gcc 3.4.1, 因為pxa270是arm架構的
編譯完成, 在pxa270上也可以跑, 除了沒聲音以外
我想是audio device driver的問題, /proc/asound 底下確實是有東西的
char device , Major Num , Minor Num
mknod /dev/dsp c 14 3
mknod /dev/mixer c 14 0
用以上這兩行解決這個問題
完成可以打出去/ 收進來了 ! 高興得跑到對面研究室找人家來看
最困難的地方完成了,剩下介面
目前為止還沒有寫到半行程式( 除了那個Udp server )
自由軟體萬歲!
今天看了"哥哥我還要"電影,有些地方還蠻好笑的
---- 1 /14
簡單介面完成了,不用藉由電腦就可以溝通
期末project 最基本的要求 終於達成
接下來要挑戰其他bonus嗎?
FPGA / DSP / Video .... ?
---
2008年1月7日 星期一
2008年1月5日 星期六
2008年1月4日 星期五
2008年1月3日 星期四
2008年1月1日 星期二
西線無戰事
昨天把這本書看了一遍,很有趣的一本書
節錄一些我覺得不錯的文字
西線無戰事,翻譯 by 蔡憫生
最聰明的只有窮人和思慮單純的老百姓。他們知道戰爭會帶來災難,而富人本應更能洞悉戰爭之惡果的,卻載欣載奔地投入戰爭的洪流。
卡辛基說,那得歸因於他們所受的教養。那使他們愚昧無知。
當他們繼續大放厥詞時,我們卻在目睹生死離別。當他們在教誨報效國家是偉大的情操時,我們則早已體認到垂死的掙扎是更強烈的情感。
兩國交戰應像是熱鬧的節慶,就如鬥牛般,可以收門票,也有樂隊助興,然後兩國的各部會首長及將領們穿著泳褲,拿著木棍,到競技場內,
自己去打個痛快。能倖存者,他的國家就贏了。這樣乾脆多了,也比目前這種讓不相干的人廝殺,拼鬥的安排,公平多了。
人類基本上是種野獸,只不過披著禮儀的外衣,就像麵包塗上奶油一樣。
若在平時能讓你隨意挑選工作,有什麼職業可以像帶兵一樣恣意整人而不會被揍得鼻青臉腫?只有在軍中能這麼搞。
而在當老百姓時越是卑賤的人,得勢之後越是會亂搞。










