2007年11月10日 星期六

我在美國的第一週

美國, 是一個一直以來就想要來拜訪的國度,
11/3, 就是出發前往美國的日子, 心情很緊張也很激動,
又捨不下親愛的HONEY以及才滿4個月大的妮妮,
因為工作的關係必須飛到美國矽谷,
來到了C公司這邊.

C公司就是Google囉~~~
這裡真是一個很不錯的地方,
來到這裡, Google就幫我們準備好了一台Mac PC,
不僅如此, 還提供了很不錯的環境給我們,
有舒適的公寓, 還有專用的車輛,
更有享受不完的食物~~~~~

但是再這裡的生活步調就會比台灣緊湊一點...
因為我們是來工作來學東西的......

這一週的感覺很不錯, 如果有機會在Google上班的話,
我想一家人的生活都靠公司就夠了,
該有的該想的她都幫員工照顧到了...

我想這才是一家真正值得待的公司呀~~~
不過要可以進的來還真的得是天才才可以吧~~~

做做夢吧~~~~

2007年10月17日 星期三

妮妮會翻身了

當要下這個標題的時候,
其實心裡是很開心的~~~

在稚齡不到3個半月的妮妮, 她就已經會自己翻身了...
說給人家聽每個人都不相信, 但表演給人看,
個個都驚訝~~~~

怎麼這麼快~~~, 這是從每個人的嘴裡說出來的,
當下看看每個人的表情, 都露出了驚訝的樣子~~~
身為父親的我, 臉上流露出欣喜的表情~~~

我想, 我知道, 我了解,
妮妮一定不會辜負我的期望的~~~
她一定會是很優秀的一個小朋友的...

在我的心裡, 已經打定主意,
一定要好好培養她, 給她一個安全無虞, 快快樂樂長大的環境,
我想這就是我應該做好的工作吧~~~

2007年8月27日 星期一

剪頭髮囉

根據習俗, 免不了也要替我們家妮妮剪頭髮囉,
但為了保留有頭髮的印象, 就一定要來比較個,
剪髮前剪髮後的大改變, 到底有多大呢?

看倌們就自行比較吧~~

我是覺得剪髮前的雞窩頭, 又天生又自然, 很難忘的~~
檢髮後又可以檢視一下頭型有沒有照顧好~~~

果然, 有照顧有差, 頭型好得很耶~~~
希望一直維持下去囉~~~

夜深了, 想睡覺了, 睡前也要把照片都上傳完畢唷~~~

剪髮前, 剪髮後~~~

2007年8月6日 星期一

小妮妮滿月囉

時間過的真快, 不知不覺小妮妮就已經滿月了,
現在的身高 56cm, 體重 3900 gm,
已經漸漸的脫離新生兒的成長曲線了.

很高興, 所以就想要把這好消息分享給大家知道~~~

說真的, 當爸爸的感覺還真的很不錯,
再辛苦在累也都會覺得值得, 我想這就是所謂甜蜜的負擔吧~~~
臉上跟嘴上總是會掛著一付 『有女萬事足』或『有子萬事足』的感覺,
跟人家說的是一樣喔~~~

總之很開心就對囉~~~

滿月相簿連結

2007年7月20日 星期五

妮妮寶貝 - 綿羊頭

小妮妮已經兩週大了,
從出生到現在的狀況都很不錯,
體重現在 3500gm, 身高 53~54公分,
已經漸漸的趕上進度了,
不再是出生時嬌小的小妮妮了~~

這幾天, 天天覺得不一樣,
真的是像人家說的一暝大一寸喔~~~

這裡有個連結可以看到小妮妮的近況喔,
還有個搞笑的綿羊頭照片喔~~~

2007年7月10日 星期二

小妮妮出生了

7/4號, 這是一個令美國人歡欣鼓舞的日子,
對我和Maggie來說是一個特別的日子,
因為小妮妮在今天出生了, 她自己選了一個時辰,
我們幫他選了一個日子.

小妮妮出生時的重量是 2650 gm,
外觀正常無異樣, 出生時間是下午4點28分,
是個健康的小寶寶, 活潑好動的小寶寶,
其實只要她健康, 對我和Maggie以及家人來說,
那就足夠了.

7/7號, 小妮妮跟Maggie媽咪一起出院,
回到了家中, 住在我們幫他佈置好的遊戲床,
開心的開始在家裡展開她的人生的第一步.

小妮妮, 歡迎加入我們家.

小妮妮生活照

2007年6月22日 星期五

期待的心

期待的心......
隨著時序的接近, Maggie也開始休產假了,
小妮妮距離報到的時間越來越接近,
隨時可能會出現產前的徵兆.

心情既是期待, 又是緊張,
深怕有哪些東西沒有準備好的~~~

先前我都會把"船到橋頭自然直"這句話, 一直的掛在嘴邊,
但是現在, 我必須把這句話收起來,
畢竟, 隨著時序的不同, 心態的調整,
所要面對的情況也不再相同, 所以就不可以在這般的無關緊要了...

是的, 現在是時候了, 而我也已經準備好面對這個情況了,
不管情況如何, 我會一直守候在Maggie身邊,
守候在小妮妮的身邊, 看著她長大~~~

小妮妮, 為了妳的到來, 爸媽已經做好準備了,
準備展開我們的新生活囉~~~~

2007年6月4日 星期一

淡淡五月天

淡淡五月天,
五月就這樣過去了...

以前的五月天, 都還是會有寒流來襲,
今年的五月天, 卻是酷熱無比,
氣溫高達33~35度, 真的是不一樣了...

以前五月天都是我換工作的時候,
今年的五月天, 依舊是我換工作的時候...
不同的是, 今年到了股王報到,
心中是倍感欣喜, 也期待自己在這裡也會有好的收穫...

以前的五月天, 都是平順的五月天,
今年的五月天, 卻帶來了一些不平靜...
在經過小偷光顧的事情之後,
所有人對這樣的事情都開始警覺起來,
門窗也裝上了警鈴裝置, 鐵門鐵窗也都加強許多,
也去認養了一隻流浪狗來協助看家,
希望的是這不平靜的五月天就可以像以前的五月天一樣,
平平順順的, 安安心心的過去...

五月天過去了, 六月天就來了,
小妮妮就快要出生了, 希望這一股欣喜的氣氛,
可以蓋過這鬱悶的五月天, 也為接下來的日子帶來新的生氣...

期待生氣蓬勃的六月天, 也期待充滿希望的六月天~~~

2007年5月14日 星期一

不開心的母親節

剛剛吃完母親節的慶祝餐會,
回到家後也沒察覺到有任何異樣,
我還是在客廳拿起了我的相機把玩了一番,
照了幾朵花, 還有植物來看看,
之後睡個午覺, 打個麻將遊戲,
都經過這麼多事情, 看似平凡無奇的生活模式...

突然間一看窗外, 發現隔壁的破房子的圍牆上怎麼架上了一隻木頭,
才驚覺到是不是有遭小偷了~~~
隨後到隔壁的破房子一看, 卻發現阿婆房間的鐵窗被破壞,
鋁門窗的玻璃也被破壞, 心想這下不妙, 趕緊去樓上檢查一下,
便一股惱兒的的跑上樓上去看, 才發現到主臥室被翻過了,
我結婚的黃金都不見了, 損失大概現值 10 萬元,

還好我們不在家的時間不長, 不然我的損失會更重,
因為我沒有帶相機出去, 那隻相機價值好幾萬.

不過這次的事情讓我們覺得, 臺灣的治安真的是很不好,
到處都有死角, 也看出透天厝的缺點, 所以要買屋還是要買公寓好,
而且要有層層安全管制的比較好.

母親節本來是個很開心的日子,
卻遭逢到這樣的事情, 把所有的心情都弄亂了,
不過事情過了, 還是得重新理好頭緒, 重新開始生活...

如果那一天小偷被抓到了, 我一定要去好好懲罰他一頓,
好好的報一下老鼠冤~~~, 讓小偷嚐嚐我的厲害~~~~

2007年5月9日 星期三

新工作, 新的開始

到宏達電報到已經滿一個星期了,
感覺不錯, 雖然沒有足夠多的教育訓練,
沒有足夠好的福利, 但比一比還是不錯的,
尤其看到未來的年終跟年中分紅(員工分紅)的數量,
就覺得很心動, 很期待.

期待為來自己也可以享受那樣的回饋,
嗯~~~~要好好加油~~~

最近在努力學Java, 還挺簡單的, 觀念和 C++很像,
所以上手的速度很快, 希望未來可以寫出很讚的程式喔:D

2007年4月18日 星期三

離職

關於離職~~~
其實不就是這麼一回事~~~

交接, 跑流程, 以及和同事吃個惜別飯局~~~~:P

明天就是最後一天了,
該交接的動作大致都完成了,
不但整理了交接文件, 還準備了所負責的專案相關的軟體架構,
好讓聰明的工程師可以很快的接手並且上手:)

雖說要離職了,
該盡的責任與義務還是得要做到,
該說的話, 該做的事情都得做到好,
就算是有傷人的話, 還是得說:p

說傷人, 其實也還好, 也不就就是要讓當事人警惕吧~~~哈哈......

好的主管會接受你的想法並衡量未來該怎麼做,
那如果是不好的主管, 其實連說機會都不要給:P
因為對牛彈琴呀~~~呵呵......

那關於離職的心情呢 ?
我想應該是個好心情吧~~~
可以好好休息, 充個電, 再往新的工作在出發.
Go, Go, Go~~~

我相信我可以做得很好的...

宏達電, 我來了, 我未來的夢想也許就會在這裡成真了:P

2007年3月28日 星期三

GDI+ how to?

Today, I will show all of you how to create a dialog or control which can using GDI+.

For this case, it really quite simple.

Here I have to provide a simple template class which can be the base class of your
GDI+ dialog or window.

Header file is display below:

GdiPlusHelper.h

===========================================================

#ifndef __GDIPLUS_H__
#include
#endif

#pragma once

// link with the library
#pragma comment(lib, "GdiPlus")

using namespace Gdiplus;

template
class CGdiPlusHelper{
public:
CachedBitmap* cached_bitmap_;
// cached offscreen bitmap into which all the drawing goes
Graphics* mem_graphics_;
// memory graphics
Bitmap* mem_bitmap_;
ULONG_PTR gdiplus_token_;
RECT m_rcClient;
T* m_pT;

CGdiPlusHelper() : cached_bitmap_(NULL),
mem_bitmap_(NULL),
mem_graphics_(NULL)
{ m_pT = static_cast(this); }

// call this puppy to invalidate your window!
void SetDirty()
{
if(this->mem_graphics_)
{
delete mem_graphics_;
mem_graphics_ = NULL;
}
if(this->mem_bitmap_)
{
delete mem_bitmap_;
mem_bitmap_ = NULL;
}
if(this->cached_bitmap_)
{
delete cached_bitmap_;
cached_bitmap_ = NULL;
}
}

protected:
int ReSize(/*BOOL& bool_handled*/)
{
//bool_handled = FALSE;
m_pT->GetClientRect(&m_rcClient);
SetDirty();
return 0;
}
int Paint(/*BOOL& bool_handled*/)
{
CPaintDC pdc(m_pT/*->m_hWnd*/);
Graphics graphics(pdc.m_hDC);

ReSize();
int int_width = m_rcClient.right - m_rcClient.left;
int int_height = m_rcClient.bottom - m_rcClient.top;

if((int_width <= 0) (int_height <= 0)) return 0; // nothing to do here.... if(bool_double_buffering) { if(!mem_bitmap_) CreateOffScreenGraphics(int_width, int_height, &graphics); // draw from cached bitmap to window if(graphics.DrawCachedBitmap(cached_bitmap_, 0, 0) != Ok) { // make the bitmap again (display parameters changed) SetDirty(); CreateOffScreenGraphics(int_width, int_height, &graphics); graphics.DrawCachedBitmap(cached_bitmap_, 0, 0); } } else this->m_pT->Draw(&graphics, int_width, int_height);
return 0;
}

int CreateGDIPlus(/*BOOL& bool_handled*/)
{
// init GDI+
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(&gdiplus_token_, &gdiplusStartupInput, NULL);
//bool_handled = FALSE;
return 0;
}

int DestroyGDIPlus(/*BOOL& bool_handled*/)
{
// get rid of all the gdi+ data
if(cached_bitmap_)
{
delete cached_bitmap_;
cached_bitmap_ = NULL;
}

if(this->mem_bitmap_)
{
delete mem_bitmap_;
mem_bitmap_ = NULL;
}

if(this->mem_graphics_)
{
delete mem_graphics_;
mem_graphics_ = NULL;
}

// and shutdown gdi+
Gdiplus::GdiplusShutdown(gdiplus_token_);
//bool_handled = FALSE;
return 0;
}

void CreateOffScreenGraphics(int int_width, int int_height, Graphics* pGraphics)
{
if(!int_width !int_height)
return; //don't have anything to do.
// create off-screen bitmap
mem_bitmap_ = new Bitmap(int_width, int_height);
// create off-screen graphics
mem_graphics_ = Graphics::FromImage(mem_bitmap_);
// draw to offscreen graphics
m_pT->Draw(mem_graphics_, int_width, int_height);
// now create the cached bitmap
cached_bitmap_ = new CachedBitmap(mem_bitmap_, pGraphics);
}
};

================================================================
T , can be your Dialog or control,
For example:

#include "GdiPlusHelper.h"

class CTestDialog: public CDialog, public CGdiPlusHelper
{
......
void Draw(Graphics* pGraphics, int nWidth, int nHeight);
};

or

class CTestCtrl: public CWnd, public CGdiPlusHelper
{
DECLARE_DYNAMIC(CTestCtrl)
......
void Draw(Graphics* pGraphics, int nWidth, int nHeight);
};

Is it simple?

Cheers,

Andrew

2007年3月27日 星期二

奇怪的公司

最近很奇怪說~~~

公司的網路禁止下載BT就算了,
連宿舍的也不可以用, 有沒有搞錯呀~~~

工單發不出去, 就教人家不要用網路下載東東,
不要玩網路遊戲, 用的人就要發揮公德心,
挖勒~~~~

那那個假日值班的人, 卻不在工作崗位上,
被連Call不到的傢伙, 到現在卻都還沒有被懲處,
太誇張了~~~

現在就因為那個該被懲處卻還沒被行刑的傢伙抱怨一下,
老塞就叫大家不可以用網路玩遊戲, 下載東西,
這是沒道理~~~

反正是個很奇怪的公司就對了~~~

唉唉唉~~~~

對了~~~

那個人也做過一些很倒楣的事情...
比如說: 洗澡的時候停水, 此時此刻正是滿身泡泡的狀態~~~
哈哈哈哈~~~真是太好笑了說:P

2007年3月14日 星期三

低落的心情

唉唉唉~~~

本來以為這個星期待在新竹會很愉快的,
豈知一通突如其來的電話,
就要我在明天一早在台南上班, 去處理問題,
盡然還質疑我說, 客服主任工程師叫我回來我就回來~~

哇勒~~~
哪裡有問題本來就該去哪裡處理, 這邊已經拖很久了,
而且我回來也都有跟主管報備, 是我錯了嗎?
shit~~~

那就算了, 現在還要我明天就要出現在無塵室去幫他找問題,
好讓"哈巴" 可以在下星期的會議中要進度報告,
讓我難得有機會跟家人好好相處的時間都要剝奪掉,
真是有夠過份的~~~

這下我辭意更堅定了...
原本想要在4月初提離職的, 現在看來,
勢必要提早了, 一點都不想給他們好臉色看~~

面對這樣對員工尖酸刻薄的公司, 面對這樣的老闆,
選擇離開才是唯一的道路...

這也難怪大家都想離開, 大家都不想幹了~~~

經營一家公司的基本原則就是人才,
如何照顧好員工, 關心員工, 獎勵員工,
才可以為公司帶來動力, 這樣的經營手法似乎在這裡都是看不見的...

所以現在我的立場是, 不會再替這個公司想了,
一切只為自己想好了~~~

再見, 晶X~~

大家結束合作的日子就不遠了~~~

哈哈哈~~~~~

2007年3月9日 星期五

最新詐騙手法

今天挺好笑的,
出現了一堆笑話, 也有人接到詐騙電話..

好笑的是, 有人開了104卻留得不是自己的電話, 結果留的是主管的電話.
很妙吧~~~ 難怪工作的機會遲遲沒有著落... 哈哈~~~~

詐騙的手法又更新了,
今天有人接到了這樣的電話.. 真實事件, 我還幫忙查了台北市警察局的電話來查詢的~~~

內容大致如下:
=====================================================
早上,手機突然響起∼

我:喂∼你好!

對方:請問是 X 先生嗎?

我:是的,請問你是?

對方:你好,這裡是台北市警局,想請問你一下,

你為什麼在X月X日沒來到庭說明?你沒收到傳票嗎?

我:(心裡一驚!)傳票?沒阿...沒收到阿... 什麼事嗎?
(心想:這是詐騙集團吧...)

對方:我們在幾天前破獲以XXX與YYY為首的詐騙集團,
裡面有以你的名字在XX銀行與YY銀行開的兩個帳戶,進行詐騙收款。
我是這起案子的偵辦警員,因為你在X月X日沒到庭說明,
所以我現在打電話問你。

我現在先核對一下你的資料...你是 X XX先生吧...
身份證字號是XXXXXXXXXX吧∼住址:XXXXXXXXXXXXXXXXX

我:是阿...沒錯...(按∼連我的身份證字號都知道...真的假的...)

對方:因為前些日子你沒到庭說明,我現在要釐清你是嫌犯還是受害人。
我正在作筆錄,我們之間的談話,現在也有做錄音。
我將會把相關的資料交給法官,看你需不需要到台北來出庭說明。

我:(心裡存疑)你可以把案件交給我們這裡比較近的警察局,我過去說明作筆錄可以嗎?

對方:(有點生氣)我是這件案子的偵辦警員,你叫我交給誰?
我現在要釐清說你是嫌犯還是受害人,你不要想太多...
因為這裡有五百多位跟這件案子相關的人,我們現在正在過濾中。
你心裡有這樣的防備之心我們可以理解。但是我現在要釐清案情所以要請你
配合說明一下。

我:(心裡有點驚,半信半疑)好!.. 你可以給我你的資料嗎?

對方:好,我是台北市警局犯罪調查科二組組長陳文華,警員編號46049,
我們住址是臺北市延平南路96號。

我:請稍等一下,我記一下,可以在重複一次嗎?說慢一點...因為我寫字有點慢...

對方:好,我是台北市警局犯罪調查科二組組長陳文華,警員編號46049,
我們住址是臺北市延平南路96號。你可以等一下在記,我會再重複,
但請你先回答一下,你有在XX銀行與YY銀行開過戶嗎?

我:沒有!(有點信了ㄝ...)

對方:那現在你有資金流動的銀行是哪幾家?請小心回答,
因為如果我們查到有你說的這幾家以外的銀行,我們會先凍結你的帳戶!
凍結三個月。跟你確認並釐清案情。

我:喔..我有在XX銀行與XX銀行有帳戶!(心防被攻破了~愚蠢的行為一)

對方:我們會查明這兩家你的帳戶中,是否有不尋常的資金流動,
也要查明是否有相關被害人匯款到你的帳戶中。我們懷疑你的個人資料有外流出去。

對方:你有辦現金卡或申請信用卡嗎?因為你的資料有外流,
所以我想釐清一下所有可能的外流管道。

我:我持有XX的信用卡一張∼( 愚蠢的行為二)

對方:沒有其他家了嗎?這家以外的信用卡我們會予以凍結以保障你的財產安全!

我:謝謝你...

對方:請問一下,你有因為缺錢而販賣你的資料給他人嗎?

我:沒阿...沒有過...(按!...我還需要幹這種事嗎?)

對方:那請問一下,你有在大型賣場申請過會員,或在中華電信申請市話或網路嗎?
因為我在過濾清查受害者時,有受害人的資料是以這樣的方式流出去的

我:有阿....我有在新竹X賣場申請過會員,也有申請中華電信的ADSL。

對方:因為你第一次沒到庭說明,我們請你在12月25日到台北市法務部執行處
第三偵查庭到庭說明。 但是如果我和法官的書記官今天可以把你的部分釐清,
你25日就不必來了。

我:(心裡還是半信半疑)沒關係阿..我可以上台北說明,因為現在在電話中,
我不清楚你的身份有些比較私人的部分我不便說明。

對方:不用這樣麻煩!等一下我會請法官的書記官打電話給你,你跟他說明一下,
因為他是我們的上級單位,出不出庭會由他們來決定,看是不是能釐清你的犯罪部分!

我:(按...你爺爺我犯啥罪...頂多上網抓片片而已)可以...但是私人的部分我也不便
在電話中說明。

對方:我等一下請法官的書記官跟你聯絡!請保持你的聯絡方式暢通!
-----------------------------------------------------------------------------

接下來,趕快衝回座位上上網查一下台北市警局的電話(網路萬歲),然後撥過去,通了∼

我:你好,我想請犯罪調查科二組組長陳文華聽一下電話!

警察:(楞了一下!)這是詐騙集團,有很多人都打電話過來找他,我們這裡沒有這個人,
你沒留郵局的帳號或轉帳出去吧∼ 我:沒有阿!(鬆了一口氣∼)你確定嗎?

警察:你會打過來確認,要相信我們!不要被他們騙了....也不要惹毛他們。

我:謝謝你!
-----------------------------------------------------------------------------
(兩分鍾後,我的手機又響,顯示的號碼為0267206661)

我:喂∼你好!

對方:你好,我是台北市法務部偵查庭的書記官。

我:(不等他說完)我查清楚了∼根本沒有你們這些人∼喀∼(電話掛掉)
接下來...連續撥了五~六通電話過來,我都直接掛掉沒聽∼ 事後,
我又撥到台北市警局報警...請他查一下0267206661這支電話。
警察說這不是我們國內的電話∼ 這件事折騰了半天...終於宣告落幕......
過程中,雖然心裡有所防備...但是還是被套出一點東西出來..... 事後,
趕緊打到不小心透露出來的相關金融機構處理詢問,
並立即設定信用卡的資料查詢密碼及凍結預借現金的權限∼ 幸好,
有想到要問對方的資料,隨即查證(網路萬歲)... 若沒上網查相關的聯絡方式...
再接到那位詐騙書記官...我不知道會發生什麼事......
請各位小心....... 現在...除非有警察現身過來抓我....
否則..我都不會信任何打我手機的陌生人了........
按~....死詐騙集團..... 下面附上我上網查的詐騙記錄.....

http://0rz.tw/392hj

本文出處:
http://diary.blog.yam.com/damianho/trackback/2507716

2007年3月8日 星期四

想離職

有這個想法的興起,
其實就是要呼應先前發佈的 "想讀書" 一文.

有感離家太久, 放老婆一人在家, 肯定不是什麼太好的決定,
但是為了賺錢仍得有所取捨.

現在, 小公主即將誕生之際, 身為乃父的我,
有豈能置之不理呢?

於是乎, 興起了想離職的念頭~~~

不過念頭歸念頭, 付諸實行的動作到也是進行的挺快的, 哈~
轉眼間, 好的工作已經落袋了...

目標直指數家百元俱樂部的公司,
說運氣好也是, 說有實力也是, 但自己的努力更實在...
不過好處是除了可以賺更多的奶粉錢之餘,
也會有時間去實現2008唸書去的想法...
是不是一舉多得呢?

所以付諸實行的日子也快要到了,
在晶彩的日子應該要開始倒數了...

.........3, 2, 1~~~ 耶, 離職囉~~~哈哈..

高興的太早了:P

原來如此 - 個性怪異的源由

有此一說, 話說XX公司執行副總是個變態狂~~
==============================

日前聽說了這件事, 覺得有點不可思議, 於是上網查詢, 卻發現了意想不到的結果...
主人公 - 錢XX 外號(錢X)

結果竟然發現, 他他他... 是五年前男扮女裝到三溫暖偷窺的變態博士,
天哪~

來XX公司快兩年了, 這還是第一次聽到說, 聽說來3年以上的人都知道, wow~~~
看來這已經是XX公司的不傳之密了:P

俗話說: 若要人不知, 除非己莫為
應驗在錢X的身上, 真是貼切.

還是專心做好自己的本分吧~~不要想東想西, 免得搞出這樣的醜聞,
不但不能杜絕, 還可以傳頌永久說, 畢竟這是網路所帶來的風險呀~~~

值得慎思~~~~

PS. 難怪此人喜好Fire員工於自己的隨心所欲呀..哈哈

詳全文:
http://tw.myblog.yahoo.com/missjulianacd/article?mid=455&prev=457&next=81&l=f&fid=27

2007年1月5日 星期五

想讀書

想讀書?

最近這個念頭一直在興起...
看著新進的同仁, 每個都頂著國立大學的碩士學歷,
看著104裡面每個股價高過100元的公司, 要的都是碩士...

以前想說沒錢不要唸那麼高, 唸到大學應該就足夠了,
但是現在的情況不同了...

大學生掩腳目...
不, 碩士生掩腳目...
這樣的形容真貼切...:P

雖然自己告訴自己, 學歷比不過經歷,
但人家會說老經驗的比較會拿翹??? 是這樣的嗎?
總歸是拼不過學歷高的...

看來進修一途是注定的,
不然, 等到失去了競爭力才後悔的時候,
就來不及了~~~

努力吧~~~2008 唸書去...

離現在還有點早吧?

不, 不早了, 現在就要開始準備了,
不然等到到時候再準備, 可又是...
年復一年又一年呀~~~

:P

Andrew 隨筆

Nice MFC control - CEditCtrl

Today I want to share all of you one basic control of MFC which is inherit from CEdit ctrl,
this control can help you to take care of data type verification, for example, once you define the data type to be "int" (the naming inside control is "EN_DATATYPE_INTEGER"), no matter you have input any character in, it will just recognize the allowed char by data type, the others will be reject, if over range, it's will warning you automatically.

Is it useful?

let's take a look about this control. :)

Definition:

enum enDataType {
EN_DATATYPE_ALPHABET = 0, // Standard C++ naming rule
EN_DATATYPE_INTEGER = 1, // int
EN_DATATYPE_UNSIGNED_INTEGER = 2, // unsigned int
EN_DATATYPE_DOUBLE = 3, // double
EN_DATATYPE_UNSIGNED_DOUBLE = 4, // unsigned double
EN_DATATYPE_NONE = 5 // original CEdit behavior
};

From now, You just need to call SetEditDataType(EN_DATATYPE_INTEGER), then the data type of CEditCtrl will become "int" and no longer support the other data types anymore.

Till now, I believe as smart as you should understand why I can said this control can support many data types.

One place you have to read it more detail is OnChar(),
This function block is defined and qualified the input rule of CEditCtrl class, so you should be read it very carefully to understand the know how of it.

How to use it?

Here I support 2 way for you,
1. Using DDX_Control to manage it
2. Use SubclassDlgItem()

below is the source code:

EditCtrl.h
=======================================================
#pragma once

// CEditCtrl
namespace nsAuxLib {

class CEditCtrl : public CEdit
{
DECLARE_DYNAMIC(CEditCtrl)

// This is define how many data types can be judge by this control
enum enDataType {
EN_DATATYPE_ALPHABET = 0,
EN_DATATYPE_INTEGER = 1,
EN_DATATYPE_UNSIGNED_INTEGER = 2,
EN_DATATYPE_DOUBLE = 3,
EN_DATATYPE_UNSIGNED_DOUBLE = 4,
EN_DATATYPE_NONE = 5
};

public:
// Constructor and Destructor
CEditCtrl();
virtual ~CEditCtrl();

private:
enDataType edatatype_;
CString maxvalue_;
CString minvalue_;
CString defaultvalue_;

public:

// Define the current data type for the current object
inline void SetEditDataType(enDataType eType)
{ edatatype_ = eType; }

// Define the initial values of default value,
// minimun value and maximun value
inline void SetMinMaxValue(CString strDefault,
CString strMin,
CString strMax)
{
defaultvalue_ = strDefault;
maxvalue_ = strMax;
minvalue_ = strMin;
}

// Check Range function can return the result status back
bool CheckRange(CString strMin, CString strMax);
bool CheckRange();

double GetValDouble(bool bool_unsighed = true);
int GetValInt(bool bool_unsighed = true);

void SetValDouble(double dblvalue, bool bool_unsighed = true);
void SetValInt(int intvalue, bool bool_unsighed = true);

CString GetValText();

enDataType GetEditDatatype()
{ return edatatype_; }

protected:
DECLARE_MESSAGE_MAP()
public:

// Event handlers table
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnEnChange();
afx_msg void OnEnKillfocus();
};

}
=======================================================

If you are interesting about this control, you can email to me,
I will send it to you a.s.a.p.

Cheers,

Andrew

好文共賞 - 你吃『晚餐』了嗎?

你吃『晚餐』了嗎?
如果可以, 我希望我能再吃一次『晚餐』。

我記得去年的時候, 想要待在家裡吃飯。
那或許只是我懶得出去而已吧。

我走下樓梯,走進廚房, 看見老媽依舊在站在那煮飯。
這麼多年來,都是如此 …

我坐在客廳那看著電視,等著老媽煮好飯。
老媽煮好以後,叫我去吃飯。
我添好飯坐在飯桌前。
想叫老媽一起吃飯,

老媽說:「你先吃就好,我等你爸回來再吃。」
我依舊的回答說:「喔,那我先吃了。」

為什麼說依舊呢?
因為就當我偶而幾次待在家裡吃飯的時候,
每當我問老媽,她都是這樣的回答我。

這麼多年了,從未變過。
而我… 卻也一直不知道為什麼。

有一次,我問老媽:「為什麼你不先吃呀?」
老媽回答我說:「你老爸他每天在外面辛苦工作,回來又一個人在那吃飯,
我會不忍心啊。」
我這時候不知道說什麼了…
我那時候,好像是默默的把飯吃完吧。

過不久,有天晚上,老媽的舊病又復發了,
在晚上11 點多的時候,送往急診室。
我也是隔天回到家裡才知道的。

那天,我總覺得少了什麼。
我那天的晚餐就隨隨便便的吃了,吃完後,我騎著車到醫院去,我走進病房內,
老媽就問我:「你晚餐吃了沒阿?」
我回答說:「我剛剛有吃了。」
說完以後,老媽似乎才露出安心的表情。

這時候,老爸把我叫到病房外,用著很嚴肅、很悲傷的語氣跟我說:
「你媽的病,大概是不會好了。」
那時候,是我第一次看到,老爸的眼睛紅紅的。

回到家裡,我發現,原來我還記得怎麼哭泣。我忘了我哭了多久 …

過不久,老媽死了…

老媽在醫院的時候,最後跟我一句話:「以後晚餐要記得吃喔,別再隨便
在外面吃了,試試自己煮煮看。」
「不要讓你爸一個人孤獨的在那吃飯。」

說完以後,老媽死了…
我又再一次哭了,眼淚 …沾滿了病床上的床單,
似乎也沾滿了老爸跟一旁的醫護人 員。

如果可以 … .我多麼希望老媽可以再煮晚餐給我吃。


這篇故事,只是我感慨現在人的不懂事罷了。

父母對我們的關心,絕對是真的!

以前的人常說:「考試一百分,不如孝順多一分。」這句台語的俗話,
或許你也曾聽過吧。但你做到了嗎?

※ 『晚餐』是要跟家人一起吃,才能叫做『晚餐』。※
我常找藉口說自己好忙好忙好忙,
其實吃一餐飯又用你多少時間呢?
好好珍惜父母親及關心你的人

2007年1月4日 星期四

How to know your child appcication is running?

The subject what we want to discuss now is how to verify your child application is running or disappeared, for this case what we will do?

Follow below steps:
1. we can use the function called EnumProcesses() to get a list of all PIDs running status.
2. calling OpenProcess() to get a handle to the passed-in process ID
3. calling EnumProcessModules() and GetModuleBaseName() to get procedss name

after you finished above 3 steps, you can know your all child process running status.

below code is the sample function:

bool IsProcessRunning(LPCTSTR process_name)
{
DWORD aProcesses[1024]; // Array of process IDs
DWORD cbNeeded; // Byte count returned...
DWORD cProcesses; // The number of 'em obtained
DWORD dwExitCode = STILL_ACTIVE;

unsigned int i;

// Get a list of all current PIDs running
if(!EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded))
return false;

// Get the count of PIDs in the array
cProcesses = cbNeeded / sizeof(DWORD);

// Print the name and process identifier for each process
for(i = 0; i < cProcesses; i++)
{
char szProcessName[MAX_PATH] = "unknown";
// Get a handle to the passed-in process ID
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION
|PROCESS_ALL_ACCESS,
FALSE,
aProcesses[i] );

// Get the process name
if(hProcess)
{
HMODULE hMod;
DWORD cbNeeded;

if(::EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded))
{
::GetModuleBaseName(hProcess,
hMod,
szProcessName,
sizeof(szProcessName));
}

if( stricmp(szProcessName, process_name) == 0)
return true;
}
}
return false;
}

you can also copy this paragraph code into your project, to enrich the power of your application.

2007年1月3日 星期三

How to get the language id in MFC

If we want to know which language id is we are using now,
Some of you may asked this question. Especially, your program have to support
multi-language.

Below code is the sample code:

WORD GetSystemLanguageID()
{
return LANGIDFROMLCID(::GetSystemDefaultLCID());
}

After calling this function, it's will return one WORD datatype information,
For example English : 0x0409, Traditional Chinese : 0x0404

From now, I believe that you should understand how to use the result.

Cheers.

How to display the System Message by error code From GetlastError() in MFC

今天討論的主題是, 如何在MFC的程式裡, 顯示 System Error code 的真正含意.
通常我們會使用 GetlastError(), 來取得系統錯誤碼, 但取回的錯誤碼, 又該如何顯示其中的含意呢?
在此我們引用了一個 FormatMessage() 的MFC函式.

以下是範例:

std::string FormattingMessage(DWORD error_code)
{
LPVOID lpMsgBuf;
std::string ret_string;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
FORMAT_MESSAGE_FROM_SYSTEM
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
error_code,
0x0409, // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL);
// Display the string.
ret_string = "[WINDOWS SYSTEM WARNING] - ";
ret_string += (LPCTSTR)lpMsgBuf;
// Free the buffer.
LocalFree( lpMsgBuf );
return ret_string;
}

其中 Default language的部分, 填入 NULL 則會根據你的語系來決定,

如此若ErrorCode = 32; 則會顯示
[WINDOWS SYSTEM WARNING] - The process cannot access the file because it is being used by another process.