2009/10/31

人生第一次的員工旅遊~第二天~

20091017

山上的早晨真的是很安靜的,直到了旅館了morning call 我們才不捨的起床,到了餐廳吃了早上的自助Bar image image

接下來離開了溪頭~迎向我們這個旅程第一個「名產店」

image image

為什麼名產店外要放隻這麼大的恐龍,我也不知道,不過我們就像一群迅猛龍,掃光了這家店的名產..

接下來就是前往 桃米生態村~

image image

為什麼叫生態村呢,因為他們村民抱持著對生命對土地善良的態度 orz

image image

還有他們在九二一之後,善心的日本人千辛萬苦從日本帶回來的紙圓柱,用了n個巨漢,才蓋成的「紙教堂」,椅子可以支持一千多公斤呢~

image image

這邊環境真的很漂亮,如果住在裡面不用介意金錢與遊客(誤)的困擾,應該是很不錯的,這裡的裁種也不用農藥,而且他們把作物種植在石頭間,也沒有鳥會吃,因為台灣的鳥已經習慣了吃整理好的農地..

由於桃米村是九二一之後再重建起來的,所以有一個九二一的紀念館~

image image

接下來到了吃午餐的時候 ~由於在桃米村有許多蜻蜓,還有台灣1/3的青蛙種類,所以路邊常會見到這兩種特別的裝飾~

image image

在看完九二一紀念館後,我們徒步走到今天午餐的餐廳,對有點「鐵腿」的我們,是有點小考驗..

image image

在步入餐廳的時候,會看到百香果懸掛在支棚上,這邊的路旁的攤販都會擺著一袋50的百香果,看來是當地的特產,可惜在餐廳沒有吃到。

image image

這裡的餐廳外擺著青蛙樣式的椅子,連廁所也做成青蛙的樣子 ~

吃完午餐,就接著迎向接下來的景點「日月潭」,真的在日月潭看到了許多的遊客

image image

接下來就是坐船遊湖的行程了

image image

往湖中的玄光寺前進~這邊的茶葉蛋真的很好吃~所以一定要幫茶葉蛋合影一下(誤)

image image

image image

日月潭的紅茶也是蠻有名的,不過上圖的紅茶不太合我的味,可惜沒有拍到賣紅茶的正妹~

image image

下一個景點 ,跟B車的同仁,交換坐船,坐在船頭看著湖景,迎著風真的很舒服~

image image

來到這邊的商店街,喝著導遊介紹的紅茶,其實不太好喝,剛好遇到美食節目來這邊拍攝~

回程的時候又坐回原本的船上

image image

這張照片一定要記念一下的 實在是旅程中最經典的畫面 XD

image image

我們住的飯店是大淶閣

image image

窗外的風景真的很漂亮,雖然浴室的廉子沒辦法整個檔住~

image image

晚上的餐廳,吃的還不錯,炸的蹄膀還蠻好吃的~

image image

來到日月潭,一定要吃的就是總統魚啦,刺還蠻多的,我是覺得肉還蠻嫩的,不過好像其他人不這麼認為~

image image

飯後的活動就是慶生啦,鄭妹妹的願望是「希望再有一隻小狗狗布偶陪她原本有的小狗布偶布丁」真是超極可愛的願望~另外還有賓果遊戲,我也中了一千元,運氣真是不錯~只不過兩條線也是很難中的啊~

image image

當然飯後一定要運動一下的,所以又開始了Shopping的活動~這個晚上應該是買最多的時候了,一直往下走到了碼頭邊看著水舞與音樂的表演~

image image

真的是很漂亮的夜晚~本來想拍全景照的,結果失敗了,不過還是很漂亮的

接著回到了飯店,買了大淶閣樓下天仁茗茶的日月潭紅茶,真是好喝,還有大家買的魯味,我也拿出準備的餅乾,大家一起看著電視,來不及看就結束的職棒,還有利用網站殺人的電影

一定要感謝的 老板娘(空白加敬語)辛苦的幫大家按摩。邊看電視邊按摩,真是太舒服了~

另外,在這個當下讓我知道了,原來自已沒有玩音樂節奏遊戲的天賦(我總是會被初音的舞蹈所迷惑)

一直到了十二點多,大家才依依不捨的回到各自的房間~

第二日完

人生第一次的員工旅遊~第一天~

這次的員工遊旅,本來是打著先報名,不行去就不去的心情報名的,畢竟專案離推出的時間已經很近了!

沒想到還是順利成行了,第一次的員工旅遊真的很開心,也讓我留下許多完美第一次的回憶!!

20091016(第一天):

早上七點就要到公司集合,七點半就要發車。所以我五點就起床了,洗個了澡,睡不太好,因為怕自已睡過頭遲到。

六點多到車站 ,買個了飲料,還買了買一送一泡菜口味的可樂果,意外的不錯吃,本來以為六點十五有車,結果車子的發車時間是六點十分,下個班次就六點半了(囧)。

本來以為六點半發車到公司會遲到,沒想到禮拜六的早上,車子意外的少,不到七點就到台北了,到公司大概七點十五分,時間蠻剛好的,吃過了總經理請吃的早餐,就逾快的發車了。

第一站是到紫南宮

紫南宮因為有親戚在那邊開店,所以每年大概都會過去一次買些東西。所以第一站真的引不起什麼興趣,讓當初在看行程表的時候,看到第一個是紫南宮,就沒心情往下看了(囧)。

image image

不過紫南宮的人潮還是不少的,這邊的發財金是蠻有名的,百峻、偉賓、老闆娘都借了發財金,希望他們來年能夠賺的飽飽的(因為同個案子,就等於大家發財 XD)。

另外金碧輝煌的廁所也是蠻有名的,裡面還做了噴泉~

image image

請大家吃了在竹山很名的竹筍包,我也是很愛吃的,每年回來都會吃,只是沒想到中午的餐廳又吃到了一次 XD

image

小小聲說:看圖片真的只有我一個拳頭大小沒錯吧…

接下來中午吃的是金竹味,有當地南投的名產,像是筊白筍、竹筍包,另外還有魚也是三天中最好吃的~

image image

接下來的第二個行程就往溪頭前進啦~

image image

這就是我們住的地方,很漂亮吧,呼吸著山上清新的空氣~接下來就往山上的神木區前進吧

image image image

(流浪腳~就是流籠囉~)

在高空走廊上,隨手可以碰觸的樹尖,穿梭在薄霧之間~留下了高空走廊大家腳的合影

imageimage

另外發現了人型無尾熊一隻 ^^

image

到達神木的時候,雖然霧已經變成了有點小雨,但是我們一群人,在那邊跳啊跳的自high著~

image image

下山的時候經過銀杏林

image image

不知道是不是最近太久沒運動了,腳有點酸痛的感覺..

image image

吃飯的餐廳,晚上看起來真的很漂亮,另外在吃飯的時候比賽快速喝啤酒的活動,拿到了第四名~

晚上的時候,還有生態解說員帶領我們去看螢火蟲、青蛙,在夜色漫步,跟在白天爬山,多了一種輕鬆的感覺~

回到了旅館,大家聚集在房間中,吃著白天買的零食,看著職棒兄弟象打到十七局,第一次看著這麼久的棒球,隨著比賽的進行,聽著大家愉快的討論,真著有種朋友一起度假溫馨的感覺~

隨著比賽的結束,大家也疲累的回到了各自的房間~享受山上的夜晚~

2009/10/17

四核心新電腦

不知道是不是最近基隆的連夜雨,讓我的電腦又把一台螢幕弄壞了,我家裡已經擺了兩台壞掉的CRT了!本來打算等到 Win7 推出之後,再打算換個電腦,但是這次有了這次的機會(?),就打算一次把螢幕跟主機換掉,以下是我的配備列表!!

CPU: AMD AM3 Phenomll X4-620/2.6G/95W/45nm/L2Cash 512KBx4

主機板:技嘉MA785GPMT-UD2H/RGB+DVI+HDMMI/雙通道DDR3 1800+/內建顯示卡 ATI Radeon HD 4200

記憶體:金士頓DDR3 2G 133 x 2

螢幕:BENQ G2220DHA 40000:1 22吋

Case 機殼:CoolerMaster RC334

電源供應器:Be Quite! E6-400W

價錢:16900

最近的電腦真是便宜多了,從原本的一核心就直接跳到四核心了。也代表現在的電腦設備貶值的速度加快了,所以沒有買顯卡的原因,因為最近也沒有特別想玩的遊戲,等之後需要再補顯卡的部份。

可惜是我沒有注意Benq這台是使用D-Sub接頭,但是這個價錢也是很低了,本來想買19吋的,想想也覺得夠用就好了。

我使用的主機板、機殼、電源供應器,都算是比較中上價錢,所以這個價錢還可以更低一些。再補一個便宜的顯示卡、光碟機、硬碟。差不多的價錢也可以組一台完整可以打打小遊戲的上網文書用電腦。

偷偷打一下最近的心得:

最近遊戲快要推出了,正在經歷需要修bug與行銷部門兩重的時間排程推擠,雖然工作這麼多年,但是第一次遇到真是讓人覺得新奇(?),希望接下來的工作順利!!更重要的是找漂亮的代言人啊~~

2009/06/20

[程式]目錄監控原始碼

最近更新了顯示程式方式,也好久沒有更新了。

這是我在KWallPaper 中使用的目錄監控Class。

由於在寫這程式時,曾參考上網路上的許多範例,因此在此分享與回饋~

在取得檔案變動時,我是將其變動放入一個queue中,如果直接寫入資料庫,延遲的時間,會造成後面的檔案沒有監控到。

此程式碼還有許多不足之處,歡迎批評指教,謝謝


#include "StdAfx.h"
#include ".\directorymonitor.h"
#include "ImgManager.h"

unsigned __stdcall DirectoryMonitorThreadCallback(LPVOID lpParm)
{
CDirectoryMonitor* pObj = (CDirectoryMonitor*) lpParm;

if( !pObj )
{
_endthreadex( 0 );
return 0;
}

pObj->RunThread();
_endthreadex( 0 );
return 0;
}

CDirectoryMonitor::CDirectoryMonitor( CImgManager* pOwnter ):
m_pOwner(pOwnter),
m_hCompletionPort(NULL),
m_ulCompletionKey(0),
m_hDir(NULL),
m_pBuffer(NULL),
m_nBufferSize(0)
{
memset( &m_Overlapped, 0, sizeof(m_Overlapped) );

}
CDirectoryMonitor::~CDirectoryMonitor(void)
{
if( m_hCompletionPort )
{
//The thread will catch this and exit the thread
PostQueuedCompletionStatus(m_hCompletionPort, 0, 0, NULL);
Sleep(1000);

for( unsigned int i = 0; i < m_nThreadCount; ++i )
{
HANDLE nThread = m_vecThread[i];

//wait for it to exit
WaitForSingleObject(nThread, INFINITE);
SAFE_CLOSEHANDLE(nThread);
}
m_hCompletionPort = NULL;
m_vecThread.clear();
}
SAFE_CLOSEHANDLE(m_hDir);

SAFE_DELETE_ARRAY(m_pBuffer);
m_nBufferSize = 0;
}

bool CDirectoryMonitor::Initialize( const TCHAR* szPath )
{
m_strMoniDir = szPath;

m_hDir = CreateFile( m_strMoniDir.c_str(), // pointer to the file name
FILE_LIST_DIRECTORY, // access (read/write) mode
FILE_SHARE_READ|FILE_SHARE_DELETE|FILE_SHARE_WRITE, // share mode
NULL, // security descriptor
OPEN_EXISTING, // how to create
FILE_FLAG_BACKUP_SEMANTICS|FILE_FLAG_OVERLAPPED, // file attributes
NULL // file with attributes to copy
);

if ( INVALID_HANDLE_VALUE == m_hDir )
return false;

SYSTEM_INFO SystemInfo;
GetSystemInfo(&SystemInfo);

m_nThreadCount = 1; //SystemInfo.dwNumberOfProcessors;

m_hCompletionPort = CreateIoCompletionPort(
m_hDir, // Handle to a file opened for overlapped I/O completion.
NULL, // existed Handle to the I/O completion port.
(ULONG_PTR)&m_ulCompletionKey, // CompletionKey
m_nThreadCount // NumberOfConcurrentThreads
);

if( NULL == m_hCompletionPort )
return false;

m_nBufferSize = 4096;//2*(sizeof(FILE_NOTIFY_INFORMATION)+MAX_PATH);
m_pBuffer = new char[m_nBufferSize];

if( !_callReadDirectoryChanges() )
return false;

for( unsigned int i = 0; i < m_nThreadCount; ++i)
{
HANDLE nThread = (HANDLE)_beginthreadex( NULL, 0, &::DirectoryMonitorThreadCallback, (LPVOID)this, 0, NULL );

if( NULL != nThread )
{
m_vecThread.push_back( nThread );
}
}

KLOG( LOG_DEBUG, _T("DirectoryMonitor : %s"), m_strMoniDir.c_str() );

return true;
}

void CDirectoryMonitor::RunThread()
{
BOOL bSucceed = FALSE;
DWORD dwBytesReturned = 0;
TCHAR szFileName[MAX_PATH] = {0};
TCHAR szNotiryFileName[MAX_PATH] = {0};
DWORD dwAction = 0;

while(TRUE)
{
::Sleep(1);
LPOVERLAPPED lpOverlapped = &m_Overlapped;
bSucceed = GetQueuedCompletionStatus( m_hCompletionPort, // [in]Handle to the completion port of interest.
&dwBytesReturned, // lpNumberOfBytes
&m_ulCompletionKey, // lpCompletionKey
&lpOverlapped, // lpOverlapped
INFINITE // dwMilliseconds
);

if( NULL == lpOverlapped )
break;

if(!bSucceed || 0 == m_ulCompletionKey )
continue;

FILE_NOTIFY_INFORMATION * pNotify = (FILE_NOTIFY_INFORMATION*)m_pBuffer;
DWORD dwNextEntryOffset = 0;

do
{
pNotify = (FILE_NOTIFY_INFORMATION*)&m_pBuffer[dwNextEntryOffset];

dwNextEntryOffset += pNotify->NextEntryOffset;
dwAction = pNotify->Action;

memset( szNotiryFileName, 0, sizeof(szNotiryFileName));
_tcsncpy( szNotiryFileName, pNotify->FileName, pNotify->FileNameLength);
szNotiryFileName[pNotify->FileNameLength / sizeof(TCHAR) ] = '\0';
_stprintf( szFileName, _T("%s\\%s"), m_strMoniDir.c_str(), szNotiryFileName );

if( m_pOwner )
m_pOwner->NotifyFileChange( dwAction, szFileName );

}while ( 0 != pNotify->NextEntryOffset );

_callReadDirectoryChanges();
}
}

bool CDirectoryMonitor::Release()
{
return true;
}

bool CDirectoryMonitor::_callReadDirectoryChanges()
{
if( m_pBuffer )
{
memset( m_pBuffer, 0, m_nBufferSize );
}

BOOL BRet = ReadDirectoryChangesW( m_hDir, // hDirectory. Handle to the directory to be monitored
m_pBuffer, // [in, out] Pointer to the formatted buffer in which the read results are to be returned.
m_nBufferSize, // [in] Length of the buffer pointed to by the lpBuffer parameter, in bytes.
true, // bWatchSubtree
FILE_NOTIFY_CHANGE_FILE_NAME| // [in] Filter criteria the function checks to determine if the wait operation has completed.
FILE_NOTIFY_CHANGE_DIR_NAME|
FILE_NOTIFY_CHANGE_CREATION,
NULL, // lpBytesReturned. For asynchronous calls, this parameter is undefined.
&m_Overlapped, // [in] Pointer to an OVERLAPPED structure that supplies data to be used during asynchronous operation.
NULL ); // lpCompletionRoutine

return BRet == TRUE ? true : false;
}


以上,歡迎參考~


2009/04/05

[更新]KWallPaper 版號 115

好久沒有更新文章了,這次的KWallPapery 增加了一些新功能,歡迎大家取用~

 

此次更新只需更新「KWallPaper.exe」與「Config.txt」,DB不需更新

下載:

 

更新項目如下..

  1. 監視目錄變動,當使用DB下的Load_Path,會同時監視目錄下的檔案變動,減少讀取硬碟的時間。
  2. 取消固定時間重新掃描硬碟,只有開始時讀取硬碟,理由如上。
  3. File選項增加
    • File Open 開啟目前圖片
    • File Delete 刪除圖片,丟入垃圾桶
    • Folder Open 開啟目前圖片目錄
  4. Config.txt 內容新增
    • BackGroundColor 設定背景顏色(數值 0 ~ 65535)
    • ImageTransMode 圖片品質轉換,0 速度快,品質最差; 5 速度最慢,但品質最好