2009/10/14

PS3 Card 哼哼

farlandx

終於在上星期五(2009/10/09)三機制霸了! 真開心~
這是我的玩家卡XD

2009/09/15

抓yam天空部落mp3的方法

將原網址 http://mymedia.yam.com/m/#####
改為 http://mymedia.yam.com/api/m/?pID=##### 就能看到mp3路徑了

2009/08/03

XP舊注音輸入法

載點

果然還是舊的輸入法好用,Windows 7和VISTA的注音10.0實在很難用

2009/08/02

生平第一台NB - SONY VAIO SR46TD/B入手


嗯...又敗家了XD
不過這台用起來還滿順手的,巧克力按鍵好棒喔!!

2009/07/24

MessageBoxTimeout

using System.Runtime.InteropServices;
using System.Threading;

class MessageBoxTimeout
{
[DllImport("kernel32.dll")]
private static extern uint GetCurrentThreadId();
private delegate int EnumWindowsProc(IntPtr hWnd, IntPtr lParam);

[DllImport("user32.dll")]
private static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);

[DllImport("user32.dll", SetLastError = true)]
private static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

[DllImport("user32.dll")]
private static extern int GetClassName(IntPtr hWnd, [Out] StringBuilder lpClassName, int nMaxCount);

[DllImport("user32.dll")]
private static extern bool IsWindowEnabled(IntPtr hWnd);

[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]

private static extern bool PostMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

private class TimerThread
{
private readonly DateTime timeoutTime;
private readonly uint currentThreadId;
private bool terminateFlag;
private readonly Thread thread;

public TimerThread(int timeoutMillisec)
{
timeoutTime = DateTime.Now.AddMilliseconds(timeoutMillisec);
currentThreadId = GetCurrentThreadId();
terminateFlag = false;
thread = new Thread(ThreadProc);
thread.Start();
}

private void ThreadProc()
{
while (!terminateFlag)
{
Thread.Sleep(100);
if (DateTime.Now > timeoutTime)
{
EnumWindows(EnumWindowsProc, new IntPtr(0));
return;
}
}
}

private int EnumWindowsProc(IntPtr hWnd, IntPtr lParam)
{
uint processId;
uint threadId;
threadId = GetWindowThreadProcessId(hWnd, out processId);
if (threadId == currentThreadId)
{
StringBuilder className = new StringBuilder("", 256);
GetClassName(hWnd, className, 256);
if (className.ToString() == "#32770" && IsWindowEnabled(hWnd))
{
const int WM_COMMAND = 0x111;
PostMessage(hWnd, WM_COMMAND, new IntPtr(2), new IntPtr(0));
return 0;
}
}
return 1;
}

public void Terminate()
{
terminateFlag = true;
thread.Join();
}
}

public static DialogResult Show(string text, int timeoutMillsec)
{
TimerThread tt = new TimerThread(timeoutMillsec);
try
{
return MessageBox.Show(text);
}
finally
{
tt.Terminate();
}
}

public static DialogResult Show(string text, string caption, int timeoutMillsec)
{

TimerThread tt = new TimerThread(timeoutMillsec);
try
{
return MessageBox.Show(text, caption);
}
finally
{
tt.Terminate();
}
}

public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, int timeoutMillsec)
{
TimerThread tt = new TimerThread(timeoutMillsec);
try
{
return MessageBox.Show(text, caption, buttons);
}
finally
{
tt.Terminate();
}
}

public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, int timeoutMillsec)
{
TimerThread tt = new TimerThread(timeoutMillsec);
try
{
return MessageBox.Show(text, caption, buttons, icon);
}
finally
{
tt.Terminate();
}
}

public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, int timeoutMillsec)
{
TimerThread tt = new TimerThread(timeoutMillsec);
try
{
return MessageBox.Show(text, caption, buttons, icon, defaultButton);
}
finally
{
tt.Terminate();
}
}

public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, int timeoutMillsec)
{
TimerThread tt = new TimerThread(timeoutMillsec);
try
{
return MessageBox.Show(text, caption, buttons, icon, defaultButton, options);
}
finally
{
tt.Terminate();
}
}
}

2009/07/05

今天終於實現我小小的夢想了

Photobucket
這顆樹上爬滿了松鼠,雖然拍到的不多,但上面確實有將近10隻哦!!

小時候每週日老媽都會帶我跟我弟到台北靈糧堂做禮拜
討厭基督教的我,總是會在兒童主日學開始的時候逃出去亂逛
但那附近只有一個地方能讓我逛,就是大安森林公園

當時的大安森林公園才剛開始建設,很多樹都是剛移過去
所以整遍地看起來一點也沒有森林的感覺
從那時我就在心中默默許下一個願望「將來等這些樹長大我一定要來做森林浴」
之前想到這個願望的時候總是沒辦法過來

直到今天......終於實現我小小的夢想了!
果然樹都長高的樣子很棒,在雨後的樹林中漫步也很浪漫
且身旁有一個很重要的人陪著,讓我洗了一個很棒的森林浴:D

2009/06/18

夢幻逸品 - N97 <我的第一篇超不專業開箱文>

※手邊沒有好的DC或任何好的拍照工具,只好以NOKIA 5310來拍了orz,傷眼請見諒

Photobucket
主角N97與moshi ipouch手機袋的袋子

Photobucket
N97的盒子非常普通,卻散發著獨特的魅力

Photobucket
IME code,一定要拍一下的啦...雖然不知道為什麼XD

接著,我的心跳以每秒20下的心跳緩緩地打開盒蓋,那種感覺就像剛做過一樣.....

Photobucket
瞎米!?竟然還有一層!再看著上面的NOKIA.COM.TW貼紙...
彷彿好不容易解開眼前女孩的薄衫,沒想到裡面還穿著一件只印有YG mark的阿嬤衣一樣

沒關係,再接再厲...

Photobucket
終於見到它了! N-9-7!! 我夢寐以求的手機啊!!!
旁邊是隨機附贈的觸控筆和電池,這觸控筆的造型還挺酷的,光看外表還真看不出來呢

Photobucket
壓在下面的配件們與說明書,還有papago的sn哦!(啊,有手震)

Photobucket
來一張大合照~

Photobucket
N97與未拆封的moshi ipouch

Photobucket
將N97穿上衣服,充滿魅力與神秘感的完全黑色正是我的style!


小小的把玩了一下N97,到目前為止果然沒讓我失望
沒有網路上看見的滑蓋軸組裝問題,沒有白畫面的斑馬紋,手機鎖解開背光不亮只是設定問題
手機重量也比離開不久的X1輕好多
剛從WM轉到S60更不會感覺到任何LAG,操作順暢度就如同我的眼淚...停不下來啊啊啊啊啊!!

不愧是讓我賣了一堆東西才得到的夢幻逸品 - N97

2009/06/05

兩個不錯的網站
http://home.educities.edu.tw/wanker742126/index.html
http://ljh.ee.nchu.edu.tw/~cch/program/

2009/06/03

The Sims 3 初體驗

昨天一下班就開開心心跑去7-11領巴哈訂的綠水晶版
包裝做得還算不錯,綠水晶也很有裝飾價值
(我看巴哈有不少人說蓋子很鬆,所以我沒拆orz)

回到家吃完飯後大約是八點,開始安裝前發現一個很令人頭大的事
那就是DVD卡榫有夠緊,片子難拿到爆...後來玩完要放回去的時候也超難放
我很怕太用力就把DVD壓碎,因此決定下次玩完要用其它光碟盒來收了=0=

開始安裝的時候大概是八點五分吧
後來我看安裝進度有點慢,就先跑去洗澡
最後到九點十五分才裝完,有沒有這麼慢!? 說明書都快被我翻到爛掉了XD
值得一提的是,綠水晶版裡面有送一個很low的攻略
玩過前作的人可能會沒啥興趣,但我覺得裡面教人火燒小人還挺有趣的

安裝完後,我又到TheSims3.com註冊帳號與領取小車車
本來想把新的鎮也下載下來的,但有9x mb...我實在按捺不住想玩的心情啦!

PO一下我的配備
OS Windows XP sp3
CPU E8400
VGA 9600GT 512mb
RAM DDR2 800 4G (在XP只抓到3.25G)


終於..終於可以開始遊戲啦!
讀取方面,除了剛開啟遊戲需要做系統設定會比較久一點,之後的讀取就很快了
不過存檔超慢....害我不太想存檔QQ

花了一個半小時創造了以一個男小人為主加上一對兄妹的三人家庭
我的設定是:
一名內心邪惡卻又充滿正義感的矛盾小男生,立志成為一名國際間諜
因為與生俱來的好運與社交天份使得身旁的人常哭笑不得,但又很喜歡他

現在他離開學校到了新的小鎮發展,正愁身上coco不太夠時
巧遇學生時代常被他捉弄的女孩和她哥哥,他們也打算到這個新小鎮生活

女孩自從小時候看過某知名料理動畫後,非常崇拜裡頭的主角 -- 小擔家
從此她便愛上廚藝,並立志成為一名特級廚師
每當她做料理時,旁人總會隱隱約約看到金色的蛇從背後飛出來
就如同動畫片中的小擔家一樣,這代表她很有料理天份嗎?亦或是錯覺而已?
女孩也非常愛乾淨,只要看到髒亂就會像斷了臍帶的機器人般開始暴走
非得把環境整理到一塵不染才肯罷休
也許她老哥也多少受到了點影響,比一般人還愛乾淨呢

老哥是位熱愛電子搖滾樂的人,學生時代曾經組過一個學生搖滾樂團
而他們的口號「Go To KFC」到現在還被學弟妹流傳著呢
因為表演太High的關係,常常會在舞台上摔吉他或者表演用弦剔牙這項絕技
造成設備時常壞掉,在社團經費不足的情況下,只好自己修理
久而久之,他的手變得很巧,巧到能夠把100個硬幣直直的立起來哦!
現在他的夢想是成為一名搖滾巨星!

三人在小鎮相遇,也正為相同的事情煩惱著
因此他們決定,大家合資買間小房子一同生活
湊一湊正好兩萬元整,買了一間兩房一衛的小屋
小男孩比兄妹多投資一塊兩毛五,因此成為這間小屋的主導者
我想這是陰謀吧....
接下來他他還有她的生活會發生什麼有趣的事呢? 敬請拭目以待!



由於太久沒玩二代,所以我除了他們睡覺的時候都是以正常速度在玩
一邊看三個小人的動作,一邊熟悉系統
以二代主程式的觀點來比較,三代真的很棒
只是人物髮型、衣服、物件樣式仍舊很少,擺明之後會狠狠騙好幾道
除此之外,動作細節、物件精細度我都非常滿意
看到車子與路人從家門前走過才想到,三代的世界是完全開放的
把地圖拉到最大以後,感動到眼淚都快滴下來了呢
現在可以在遊戲進行時,隨意的瀏覽小鎮各處囉

最後我讓三人在第二天的報紙上找到工作後就存檔睡覺囉
雖然只有短短的三個多小時,但我在按下離開的時候心真的很癢
The Sims的魔力太強啦!!! 在遊戲的時候還一邊用MSN把姊也騙去買一套玩XD
(小發現:全螢幕模式下切到Windows的速度非常快..切回去也不用讀很久)

2009/06/01

YA! 新網誌

剛小小的修改了一下套用的CSS
網頁語言不是我的專長啊!!
看了五分鐘左右.....沒想到第一發就給我改中了XD

真是開心啊!

PTT轉錄 - 例外處理

作者: littleshan (我要加入劍道社!) 看板: C_and_CPP
標題: Re: [問題] 例外處理
時間: Sun May 31 12:26:26 2009

其實只要注意到現代化的 OOP 語言 (C++、Java、C#、Python、Ruby 等),
幾乎都提供 exception 的支援,大概就可以了解 exception 相對於 error
code 具有相當大的優勢。

Exception 最重要的優點在於你可以分離「正常程序」與「錯誤處理程序」,
讓你的程式碼變得清楚易懂。

這是一段實際存在的程式碼,來源是一個稱為 Minibase 的教學用資料庫系統。
他們使用 error code 來作為錯誤處理的方式:

while( ((SortedPage*)cur_page)->get_type() != LEAF ){
((BTIndexPage*)cur_page)->get_page_no(key, header.keytype, next_id);
st = MINIBASE_BM->unpinPage(cur_id); // 正常程序
if(st != OK)
return MINIBASE_CHAIN_ERROR(BTREE, st); // 錯誤處理

st = MINIBASE_BM->pinPage(next_id, cur_page); // 正常程序
if(st != OK)
return MINIBASE_CHAIN_ERROR(BTREE, st); // 錯誤處理

cur_id = next_id;
}

你會發現,只要你呼叫了任何會回傳 error code 的函式,你都必須在其後
馬上檢查 error code。最糟糕的是,大部份的情況下,你就算發現有 error
發生,但底層函式並不知道該如何處理,只能把錯誤往上層丟,使得你必須
浪費大量的時間去寫重覆的 if(st != OK) return ... 程式碼。只要稍微翻
一下整個 Minibase 的原始碼,就會發現一行正常程序拌隨兩行錯誤處理的
程式碼,嚴重影響程式碼的可讀性。有時甚至可以看到程式設計師偷懶的地
方:

if ((st = MINIBASE_BM->pinPage(curPageNo, curPage)) != OK)
assert(0); // 這行很慘,因為 release mode 不會有 assert error!

這種大量而重覆工作,就應該交給 compiler 來完成。Exception 的好處就在
此:當你的函式不知道怎麼處理錯誤,就不需要寫錯誤處理的程式碼,exception
發生時,會把控制權一層層往上傳遞,直到它被抓住 (catch) 為止。

有板友提到因為 C++ 沒有 GC,因此使用 exception 容易產生 memory leak 的
問題,其實 exception 可能造成的危害不只如此,因為會遺失的「資源」並不只
有記憶體。比如說已建立的網路連線、mutex、檔案寫入鎖定等等,都可能因為
exception 的發生,而導致這些資源持續被占用。GC 只管記憶體,因此無法釋放
這類資源。Java 有 GC,也大量使用 exception 作為錯誤處理,同樣也會發生這
類資源遺失的問題。

事實上,不管你如何處理錯誤,只要你要求「錯誤發生時,應該馬上中斷並回傳到
上一層」,那麼就必需面對資源遺失的問題,即使你使用 error code 亦同。唯一
的不同點在於使用 error code 時,你明確地使用 return 來離開函式,因此你比
較容易確定發生錯誤時的流程,至於 exception 就沒那麼簡單了。

為了確保你的資源不會遺失,一般來說會使用 RAII 的手法:產生一個物件,在建
構式中取得資源,並在解構式中釋放資源。比如說你原本的程式如下:

void foo(FILE* f)
{
flock(fileno(f), LOCK_EX); // lock the file
do_something(f);
flock(fileno(f), LOCK_UN); // unlock the file
}

這段程式碼並非 exception safe,因為 do_something() 產生 exception 時,其後
的 flock 操作並不會被執行,因此該檔案會保持在被鎖定的狀態。RAII 的方法如下

class FileLocker {
public:
explict FileLocker(FILE* f) : fd(fileno(f))
{
flock(fd, LOCK_EX);
}
~FileLocker()
{
flock(fd, LOCK_UN);
}

private:
FileLocker(const FileLocker&); // prevent copy constructor
FileLocker& operator=(const FileLocker&); // and copy assignment
int fd;
};

void foo(FILE* f)
{
FileLocker lock(f); // lock the file
do_something(f);
// The dtor of FileLocker will unlock the file automatically
}

不管 do_something() 有沒有產生 exception,FileLocker 物件在脫離 foo()
函式時都會進行解構,進而確保檔案會解鎖。而這也是我很鼓勵大家多用 vector,
少用 new 來達成動態陣列的原因:

void foo(int n)
{
int* a = new int[n];
do_something(a); // FIXME: may throw exception!
delete [] a;
}

void bar(int n)
{
vector a(n);
do_something(a); // a will be released even if exception occurs
}

說了這麼多,再來說說 exception 的缺點吧。我個人覺得 exception 主要有兩
項缺點:

1. 效率不佳。這邊的效率不僅僅是「compiler 為了這個功能而幫你產生額外的
程式碼」,還包含「你為了達成 exception safety 而犧牲的效能」。在
Exceptional C++ 一書中提到,若你的 class 包含其它物件,而你想寫一個
exception safe copy assignment,多半必須依賴「產生暫時物件」加上
「nothrow swapping」的手法來達成。然而「產生暫時物件」顯然會犧牲效
率,nothrow swapping 則要求所包含的其它物件配置在 heap,同樣也是犧
牲效率。

丟出 exception 讓上層函式接受,是一件很花時間的動作,因為 compiler
多半假設 exception 並不常發生,自然也不太會在這方面尋求最佳化。

2. Exception 需要在軟體設計之初就被納入設計考量內,這也是 Google 不採用
exception 的原因。已寫好、未使用 exception 的程式碼,若想改用 exception
來處理錯誤,往往會打破原本的設計架構。而這樣的程式碼勢必也無法和其它
有使用 exception 的程式碼互相合作。因此 Google 才基於實務考量,全面禁
用 exception。

動物園一日遊

上一次去動物園是十年前左右的事了,那時候企鵝剛到台灣,動物園塞滿了人

我跟一群朋友因為假日沒地方玩,加上女朋友想要看,就跑去了

前天去動物園是陪邑華去的,因為他說這輩子沒去過XD

我覺得一生中至少要去一次,雖然沒有刺激的遊樂設施,但非常適合假日去玩

重點是CP值非常高....只要60元的門票,慢慢逛竟然能夠從早上九點半逛到五點閉館!!XD


這次到動物園也有主角能看,不用說,肯定是今年最大力的貓熊大大

現在只要入場就會發號碼牌,我和邑華拿到的是10:40~10:49分

不過我們卻看了大約40分鐘吧,哈哈...熊貓真的很可愛,一舉一動都能令人看到入迷呢

閉館後,我們去台北車站那間魔法咖哩邊吃晚餐邊聊天,沒想到就這樣一直聊,聊到10點才捨得走


前天發生太多有趣的事了,只是我很懶,若一件一件po上來肯定要分上中下集啦XD

總而言之,這天我很開心,希望邑華也很開心