星期日, 12月 28, 2008

好用的雨刷

相較於這支超不耐用的雨刷這支雨刷我整整用了一年三個月。所以安托華的雨刷所然要價250元,相對起來比起在B&Q的花了199元買的雨刷只用了一個多月,顯然安托華的划算一點。

不知是安托華的運氣比較好,還是汽車專賣店的品質其實比大賣場的品質能夠好一點。個人覺得
大賣場因為要上架費、管銷費用等,品質先不論有沒有顧到,至少賣家的利潤一定非常低。至於汽車精品店的通路我就不怎麼清楚了。不知是否會在Cost down下犧牲品質。


DSC_6909


接下來的接力的長期雨刷追蹤是Tido軟骨雨刷,這是Made in Taiwan的喔。希望能打敗大陸製造的雨刷。

星期日, 11月 16, 2008

今年夏天最大的成就

我不曾請過游泳教練,所有的泳式就靠著親朋好友的教導完成自由式、蛙式以及立泳,好歹練成丟到水池撐個幾十分鐘淹不死的程度。至於姿勢好不好看、速度快不快、游起來效率高不高就不在要求範圍內了。

今年夏天,尤於老婆在社區的泳池內請救生員,我就趁這個機會去晨泳,晨泳時經常只有我一個人獨享整個泳池。於是我就請救生員泳姿的問題。救生員(其實是老闆)相當在行,一下就指出我姿勢的錯誤地方,使得我原先游的相當慢的自由式大有進步。原先我的自由式只要游個五十公尺就覺得很喘了,經過指導後,游個二百公尺大概不成問題,不過因為還沒有養成習慣的關係,很多時候會到了要換氣的時機而忘了換氣而導致換氣不順。這個問題我覺得不大,畢竟是習慣的養成,只要多加練習就可以了,總比之前是連方法都不曉得的好太多。

二弟將今年夏天的後期的我的自由式拍了下來,說實在的,我自己都覺得進步非常多,很得意呢。

Treo 650

Palm這間不長進的公司多年前推出Treo 180 PDA phone (單色160*160 resolution), Treo 270 (彩色160*160 resolution),演化到Treo 600 (彩色160*160 resolution, 不可更換電池)。我一直都不曾心動過,一直到推出這支劃時代的手機,可說是改進了所有的缺點。 彩色320 *320 解析度,可更換的電池,再加上超有涷頭的電池,我充一次電大約可以使用四天。所以雖然拿起來像磚頭,可是反應速度快,功能強大。剛上市時價位約在台幣二萬二左右,我在2005年三月份參加Palmislife的團購以入手價18000購得。

三年半過去後,新的手機如雨後春筍般的冒出,Palm這間不長進的公司只再推出了因為Treo 650是含鉛製程的無法在歐盟販售的Treo 680以及2008年推出的低價小巧版本Centro。我看著外殼越來越舊的Treo 650,心中完全沒有想要換機的念頭,只覺得這支手機怎麼這麼耐用又好用。這在拍賣網站上可以證明,只要是堪用的Treo 650手機,拍賣價沒有低於五千元的。這在電子產業裡真是不可思議的高價。

沒想到因為原廠皮套的損壞,讓我的外殼急速損毀,等到我查覺到是因為皮套破損的關係導致外殼的過度磨擦後,外殼已經破裂了,還好以前的同事讚助我一組外殼。結果我在換完外殼後,一時腦殘手賤又拿起WD-40往LCD screen噴,這一噴整個LCD screen就被我噴成暗暗的。外殼雖然換新,但LCD確變成無亮度,隨後再網上四處尋找有無可換的LCD,甚至曾經想要送原廠維修花上USD170美金更換良品確因為這支當初是美規電信業者機而不納入Palm的維修體系內而作罷。最終於大陸託小弟買得取代零件。但是這大陸賣的零件不是很好,會有觸控偏移的問題(果然是黑心商品的集散地啊),再加上因為嘗試拆裝LCD module可能過於多次,我的Treo 650終於宣告掛點,電話雖然能接能打,但螢幕已經變成完全無輸出了。所有的努力在這裡終於劃下句點,我的Treo 650搶救大作戰計畫終告失敗。

後續:面對這支服役我整整三年半的手機,心中說真的還是有感情在的。為了能讓它能繼續發揚光大,我在PalmIsLife網站上以殺肉機的名養義賣出800元價位,捐款就直接充做網站的經費了。

Treo 650 LCD module
剛換完新殼但是LCD暗淡的Treo 650

再補上之前外殼已經不行的老Treo 650

KICX0899

星期二, 8月 19, 2008

Identify USB/IDE/SD Mass Storage Device (Disk Drivers)

Mass Storage Device會被認成是一個Disk,如果要知道這顆Disk是屬於USB或是SATA/IDE Interface,透過標準C Library或是File Management或是Disk Management都無法得知,這些資訊被隱藏起來了。

我寫了一個C++ Class利用Windows Setup API取得系統內有幾個USB Type的Disk。如要判斷是否為Secure Digital或是IDE可自行另行判斷。

massstorage.h

#pragma once

/**
This is the Mass Storage Device Class Library.

Support Help Function to Mass Storage Class.
*/
class CMassStorage
{
public:
CMassStorage(void);
~CMassStorage(void);
/**
Identify a volumn name is exist or not.
\param volname input volumn name
\return true if exist, 0 do not exist.
*/
int isVolumnNameExist(const CString & volname);
/**
Overloaded help function, to supply more argument
\param volman to be identify
\param drv driver letter if the identified voluman exist.
\return true if exist, 0 do not exist.
*/
int isVolumnNameExist(const CString & volname, CString & drv);
int getUSBMsc(void);
};




massstroage.cpp

#include "StdAfx.h"
#include "MassStorage.h"

#include
#include
#include

CMassStorage::CMassStorage(void)
{
}

CMassStorage::~CMassStorage(void)
{
}


int CMassStorage::isVolumnNameExist(const CString & volname)
{
CString dummyDrv;
return isVolumnNameExist(volname, dummyDrv);
}

int CMassStorage::isVolumnNameExist(const CString & volname, CString & drv)
{
TCHAR disk[MAX_PATH]= _T("C:\\");
TCHAR drvltr; // driver letter
TCHAR buf[MAX_PATH];

// scan the disk from C to Z
for (drvltr = 'C'; drvltr <= 'Z'; drvltr++) {
disk[0] = drvltr;
DWORD dummy;
if (GetVolumeInformation(disk, buf, MAX_PATH, &dummy, &dummy, &dummy, NULL, 0)) {
// the driver exist, check the logical volname.
if (volname.CompareNoCase(buf) == 0) {
drv = disk;
return TRUE;
}
}
}
return FALSE;
}

/**
Return the USB mass storage device number
If there are any errors, the returned USB number is still 0.
This function check the device identify if prefixed by "USBSTOR"
\return number of USB mass storage device.
*/

/**
For other GuidClass, search Microsoft for "System-Supplied Device Setup Classes"
*/
DEFINE_GUID(driverGuidConst, 0x4d36e967, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18);


int CMassStorage::getUSBMsc(void)
{
HDEVINFO hdevinfo;
GUID driverGuid = driverGuidConst;
int nousb = 0;
const static WCHAR USB_MASS[]=_T("USBSTORE");

// Get the device setup class handler, for disk driver.
if (INVALID_HANDLE_VALUE != (hdevinfo = SetupDiGetClassDevs(&driverGuid, NULL, NULL, DIGCF_PRESENT ))) {
// Retrieve every instance of this class.
int index = 0;
SP_DEVINFO_DATA data;
data.cbSize = sizeof(SP_DEVINFO_DATA);

while (SetupDiEnumDeviceInfo(hdevinfo, index, &data)) {
ULONG buflen;
// Get the size of device ID buffer.
if (CR_SUCCESS == CM_Get_Device_ID_Size(&buflen, data.DevInst, 0)) {
// if the device is exist, then buflen > 0.
if (buflen > 0) {
WCHAR * buf = new WCHAR[buflen];
CM_Get_Device_ID(data.DevInst, buf, buflen, 0);
if (0 == wcsncmp(USB_MASS, buf, sizeof(USB_MASS)/sizeof(WCHAR))) {
nousb++;
}
delete buf;
}
}
index++;
}
// must free the handle to device information.
SetupDiDestroyDeviceInfoList(hdevinfo);
}

return nousb;
}


星期三, 8月 13, 2008

如何在Blogger裡內嵌程式碼

忘了那裡看到的,原始程式的出處在http://code.google.com/p/google-code-prettify/

使用方法很簡單,可以參考http://google-code-prettify.googlecode.com/svn/trunk/README.html

簡略介紹如下:< >
  1. Download source code, 放在一個固定伺服器,目前我有一個Hinet Myweb 伺服空間,在可預見的未來我大概都不會取消,所以你可以直接使用,位置在http://double.myweb.hinet.net/web/prettify.css and http://double.myweb.hinet.net/web/prettify.js
  2. 在你的Google Template裡,加上


  3. <link href="http://double.myweb.hinet.net/web/prettify.css"
    type="text/css" rel="stylesheet" />
    <script type="text/javascript"
    src="http://double.myweb.hinet.net/web/prettify.js">
    </script>


    在你template裡,尋找<body>,改成

    <body onload="prettyPrint()"> ......</body>


  4. 當要post code時,直接使用以下格式,其中的lang-html可以為lang-cpp, lang-html....等格式。


  5. <pre class="prettyprint lang-html">...</pre>



目前支援的語言格式有"c", "cc", "cpp", "cs", "cyc", "java", "bsh", "csh", "sh", "cv", "py", "perl", "pl", "pm", "rb", "js", "html", "html", "xhtml", "xml", "xsl"。 對我來說已經相當夠用了。

星期一, 6月 23, 2008

nop? 為什麼程式裡有nop?

今天心情不太好,就多寫一些。

常寫Firmware(韌體)的人應該很常看到這個指令。不是以組合語言的指令nop,就是以c函數_nop_()的方式存在。nop望文生義,是no operation的縮寫。可是電腦的存在就是要來計算的,什麼時候要用到nop呢?

第一個情況是用來做短暫的delay,尤於這種delay在不同時脈上很難計算,所以通常適用於短期的等候上,這種情形不在今天的討論內。

我想要提的是,尤於firmware經常要存取硬體暫存器(register),其實通常在先人或前輩的慘痛教訓之後,你會看到如下的程式。

int rega _at_ 0x800; // 這是fixed address hardware register
rega = 0x55;
_nop_();
rega = 0x80;


這程式是要對某個register下一連串的指令,但是為什麼會中間加一段nop?
先人慘痛教訓千萬不能隨意修改,看不懂的code決對不要去動,你如果覺得這段code毫無義意就輕易拿掉你就會發覺原本會跑的程式不會動了。甚至你拿起LA仔細量起timing都不會發覺為什麼有需要在兩行指令內加上delay,硬體的速度並沒有那麼慢,那這是為什麼呢?


rega = 0x55;
rega = 0x80;


大部份的原因是因為compiler是optimize過的,它認為rega一個記憶體變數,你先寫0x55, 下一行指令又直接設成0x80,夠聰明的編譯器就自動省略第一行指令。變成

rega = 0x80;


那當然不會運作,於是工程師就加上nop指令,讓不是那麼聰明的編譯器不要將這行指令優化省略掉。就是你看到的結果。

故事到這裡還沒有結束

對於解決這種問題加上nop並不是正解,那怎麼辦呢?你會碰到的問題聰明的工程師早就有人跟你遇到同樣的問題。C/C++ 為語言設計了volatile modifier。這是修飾data storage的保留字,宣告變數為volatile就是宣稱此變數為揮發性的,也就是它的值是有可能隨外在環境改變,相對一般變數,你只要一存入,不去改它它會一直保持住,這種變數是non-volatile,編譯器可以任意優化不用怕出錯。而針對這種可能會隨著時間變動的register,你可以宣告成volatile,強制編譯器每次看到此變數一定要去做動作,這樣才不會出錯。

所以我們的程式最終的結果變成如此

volatile int rega _at_ 0x800; // 這是fixed address hardware register
rega = 0x55;
rega = 0x80;


volatile modifier不只用在硬體變數,只要有變數在你的thread內執行期間內有可能被改變(或者是被另一個thread),都適用加上這個volatile關鍵字來確保你程式的正確執行。

星期四, 5月 29, 2008

C++ programming language constant type

可以宣告一個data type為constant


const int bufSize = 512;


但是不能宣告一個沒有初始值的const data type,這很合理,因為宣告後就不能再改了。


const int bufSize; //compiler error here


那也不能宣告一個pointer指到const data type, 否則就可以經由pointer 修改constant data type.


const int minSalary; // 什麼都漲,只有薪水是固定的
int * pSalary = &minSalary; // error here.
*pSalary+=100000; // 如果可以的話多好


但是可以宣告一個const pointer type指向data, pointer的值本身可變動,也就是可以指向任何data value,但是你無法經由這個pointer去改變指向的data value, 因為pointer本身是constant type的。


const int * pConstInt; // pointer is constant
pConstInt = minSalary; // OK, can point to a constant value
int maxSalary; // this is not a constant value
pConstInt = &maxSalary; // OK too, can be point to a non-constant value.
*pConstInt += 5000; // 哈哈,不要妄想。你不能從這個pointer去改值。


利用這個特性,const pointer data type所指向的東西無法經由pointer修改。這在C++這種基本上所有的function call都是call by value的方式很好用。有時想要傳一整個structure, 但是又不想函式更改structure裡的內容,這時就可以將pointer 加以const 宣告。


func(const largestruct * pVeryLargeStructure) {
... do something you want here...
... 10000 lines of code below,
... but the sturcture pointed by VeryLargeStructure will not be changed.
}

你可以宣告一個const pointer,pointer本身值不能改變,但是指向的data type可以被改變,我沒有想到什麼時候會用到這樣的特性來解決問題。


int * const ptrNotChanged = &minSalary;
ptrNotChanged = &maxSalary; // error here.


其實寫程式寫了這幾年,雖然使用const這樣的keyword看起來微不足道,但是確可以減少debug的時間,一但養成良好的習慣,在你一開始定義的函數的同時就知道不可能改變傳進去的參數時,就加上const modifier,不但可以防止自己出錯的機會,對於將來自己或是別人來維護你的程式時,更是有很大的幫助。

星期五, 5月 16, 2008

好用的網路備份方式 - Mozy (a EMC company service)

參照我的備份方法 ,這裡的備份主要還是備份到外接式硬碟機。再佐以燒錄成光碟的方式,可是用久了(我一年才備份一次光碟),我光碟還是跑出好多張不曉得怎麼處理的光碟。況且以這樣的方式其實沒有異地備份。萬一出亂子的時候(備份就是要預防出了亂子的時候)還真是麻煩。

EMC是一間非常有名的儲存備份公司,他推出了網路備份的服務,你只要申請一個帳號,它就先給你2GB的網路儲存空間,下載安裝好它的備份程式後,它就默默的在背後幫你備份。不只這樣,這間公司的備份軟體使用介面極佳,很多細節都有考慮到給一般的人使用。


舉例來說,備份不是使用檔案夾的關念來選擇,而是檔案類型。
mozy_backupset

或是平常資料已經整理的很好了,你覺得類型不好用,想用自行檔案的方式來選擇。
mozy_filesystem

至於什麼時候備份的選項也是很聰明,可以自動選擇在電腦不忙的時候自動備份。
mozy_schedule

一旦裝好之後,只要電腦有寛頻,基本就可以不用理會,它會自動備份,完全不用操心。至於復原的方法也很方便從手冊上讀來也是很方便,基本上這是一家備份軟體做的非常好的解決方案,加上有EMC加持,我覺得沒有什麼理由不用,更加上如果你只備份2GB,它還不用錢。

如果你覺得不錯,想要申請,也覺得我這篇介紹不錯,申請帳候麻煩點一下我的連結https://mozy.com/?code=3SDB5A或是在建立帳號時,填入referral(介紹人)3SDB5 這個代號。被介紹人以及介紹人都可以增加250MB的儲存空間。

星期二, 4月 22, 2008

Borland C++ 3.1 link with c startup module and default link library

最近重操舊業,寫起早期的DOS程式,有很多技巧都已經忘光了,所以也吃了不少苦頭。找到原因後,趕緊記錄下來,希望下次再遇到時就不用再摸索一次了。

在IDE的環境,只要將CPP or C 的Source Code加入Prj內,Borland C++會自動將你處理後續的動作。如果要能更有彈性一點,就要自己做了。尤於我要與組合語言撰寫的library連結,所以內建的project management不怎麼適用,所以只好自行撰寫makefile。以command line bcc 先行以 -c 只編譯不 link,最後再一起與assembly object code連結。但是就算只有單純的一個空的main()函式,單純只compiler, link 時仍然需要link C startup module 與run time library。但是怎麼知道startup module 與 run time library 是那一個就有點麻煩了。早期的lanuguage help system 都寫的不太多,總是要猜一下,這樣一猜又猜掉我一天的時間.....

DOS program 有一件事很重要,要注意memory model, 這在32 bit programming 是連聽都沒聽過的事。所以compiler時,就要先指定memory model。以BC++來人說,即是


接下來要Link指明連結link large starup code and run time library, 分別是c0l.obj 與 cl.lib。


其中Link 時切記注意有順序關係的,我因為偷懶,一開始沒有將c0l.obj放在Link裡的第一項,Link雖然沒有錯誤訊息,但是執行是會發生異常現像,為此又搞了一段的時間來解決此問題。

如果不是很確定makefile要怎麼寫,borland++的bin folder內有提供prj2mak.exe 提供將project 檔轉換成makefile。雖然是borland C++ 內附的make utility 在使用的,不過大同小異,參考一下總是有幫助的。

星期二, 3月 18, 2008

北橫摔車,第一次做農夫的經驗

犛田,可是一項特別的技藝,一般的車禍可不算是犛田。

2/28假日早上,不知道為什麼睡不著太早起床,在吃完早餐、看完報紙後老婆小孩都還在床上睡覺。想了一想太久沒有去跑車,跟老婆報備一下,就決定往北橫出發去跑跑山路。尤於是剛結束差不多一個月的雨季,加上天氣冷,摩托車真的很久都沒有騎了,因為天氣冷,於是在盤算要穿什麼衣服,就在這裡加加減減,結果就忘了穿戴護膝,一直到了上了快速道路才想到護膝沒有穿,懶得再掉頭回去穿護具,因為就又造成後來的膝蓋擦傷。

一路上跟著車流跑,沿路碰了幾輛直接超過我的重機,一直到過了角板山之後,進入狹小的山路範圍內,此時就沒有什麼車了。我就這樣一個彎道又一個彎道繼續騎,複習及回味一下重機高扭力的出彎平順感。就這樣一個接一個彎道,我也不斷的進檔退檔,然後就在一個看起來不怎樣的彎道,降檔入彎傾斜,準備順勢出彎,一加油,後輪就突然失去抓地力,只感覺到為什麼我的視野一直往水平方向傾斜,再也拉不直,就突然驚覺,S**T.........我摔車了。

因為車速實在不快,我估計應該只有30出頭,剛摔完沒多久對向這時也來了一輛計程車,乘客很熱心就下來幫我牽車到旁邊放好。因為速度實在是不快,車子從倒地後大約只滑了4公尺左右,所以也沒去撞到什麼東西,純粹就是單純的犛田,快速的檢視了一下自身有沒有受傷,發覺左膝的褲子內外兩層全破了,上半身完全沒異狀,回家後隔了兩天才發現衣服左手外側也有輕微傷痕。手有手套、頭部有安全帽。全身除了忘了戴上護膝受了點小傷外,一切都沒事。再檢查一下車子,左側的防倒球被削掉一塊,引擎外殼有點擦傷,左側的方向燈又鈄了一點,這下子車子前後左右的方向燈幾乎全被被我摔過了,後方因為有裝防摔馬鞍袋,所以也沒什麼外傷了。


摔車之後決定不再往前,直接回家,一直回到家才跟老婆跟小朋友說我摔車。這時昭毅光幃就都很有興趣的問我會不會痛之類的。我把破皮的地方給他們看,跟他們講不怎麼痛,但是補了一句,面子比較痛。昭毅一開始還聽不懂我在說什麼,我就舉例給他聽,你在一群人前面,本來可以很帥的過去,結果不小心跌跤,這時生理上不怎麼樣,心理可是很糗呢。

Photo_022808_003
摔車的地方;小彎道加上速度慢,實在料想不到會在這裡摔。

被削掉的防倒球
被削掉的防倒球

捨身護主的馬鞍袋
捨身護主的馬鞍袋

引擎蓋的擦傷
引擎蓋的擦傷

星期四, 3月 06, 2008

大型重型機車的路權

自從96年11月1日起,政府終於開放了大型重型機車行駛一般的快車道,快速道路除了少數幾段外,也幾乎全數開放。可是另人錯愕的是,也取消了行駛機車優先道的權利。先不論這件事是否對錯。至少我在一開始實施的時候,很努力的想要依照我是大車的風範,不要走機車道。可是做了一段時間之後,就發覺"有人會逼車"。什麼意思,就是汽車認為摩托車沒什麼事跑來擋在我前面做什麼,不管是按喇叭或是靠的很近想要把你擠到慢車道或邊線,反正就是要你讓開。當然,這種人不太多,我估計可能一千輛車之中才會有一台,可是只要是這種比例,你就是會碰到。以我每天騎去上下班的程度來說,嚴重時幾乎一天可以碰到兩台。一旦被逼車,我也開始思考是不是真的照汽車的方式騎車,畢竟這在台灣還是很奇怪的事情,尤其是在南台灣,一堆機車優先道,當塞車時,難到你不去走機車優先道?這太奇怪了。

Mobile01網站裡,經常有人在批評重機怎樣怎樣,這時就有不少文理思惟比我的好的人士跳出來講話,以下就是由tansywen一篇文章討論掛紅牌的重車,是不是交通規則都比照汽車! 我覺得可以道盡騎重機的心酸與無奈啊。徵得tansywen的同意,我將他的文章轉貼在此。
------------------ cut here -----------------------
以下文章由tansywen發表於mobile01上。

其實,重車不過是一台大一點的機車而已,
只是在台灣被妖魔化了,
想想如果當年沒有禁止進口的話,現在還會有這種話題嗎?

我隨便想想,就想到以下這幾點,也就是政府與大眾冠在重車上面,莫須有的罪名與理由:

1.禁止進口20年:當年因為全球石油危機,一紙行政命令讓150CC以上的機車在台灣消失20年,中間幾年有無數的團體要求合法進口,但官員們以150CC以下機車以足敷國人使用為由繼續禁止,直到2002年後為了加入WTO政府被迫開放,02年首批開放,直至去年底才匆匆通過重機條款,中間這幾年政府在幹麻?
禁止進口20年,這20年中黑牌車橫行,表示市場仍在,而當年翩翩少年盼到如今兩鬢飛白,終於也等到了這一天。

2.不合理稅金:在進WTO之前,由當時的立委朱星羽提案通過,150CC以下機車免牌照稅,但150CC以上加稅,尤以1000CC為例,牌稅高達23000元,比同排氣量汽車高,在當年重機尚未進口的情況下,無異議通過,尤其造福一般民眾,卻為將來重機合法進口埋下伏筆,合法進口後此稅制立刻成為焦點,交通部推給財政部,財政部推給地方政府,甚有官員以重機牌照稅為地方重要財源之一,反對降稅,但有趣的是在02年之前,到底地方政府從重機裡面抽到多少錢?經過兩次降稅後,現已比照汽車稅率。

3.ARTC驗車,一車一驗,除非代理商進口,否則買到的車每壹台都是經過ARTC強姦過,驗不過下次再來;所有進口的車輛在國外早已檢驗完成,但偉大的政府不予承認,一定要車主再花一筆錢,以台灣的標準再來一次;驗車費當然含在售價裡。

4.快速道路試辦:經由立委的幫助,95年政府終於開放試辦台72 68作為將來重機行駛快速道路的準備,250CC以上重機都能行駛,試辦一年;
一年後政府已採樣不足以及重機9成以上未開大燈為由續辦一年,再一年後政府擬再續辦一年,理由同前,政府以為全國的重車騎士通通住在竹苗地區,但兩年來均未發生重機A1交通事故,顯見快速道路是適合重機行駛;有趣的是,試辦時規定250CC以上機車可行駛,但去年11月1日正式開放重機上快速道路,卻規定排氣量需550CC以上,令所有550CC以下車主無不氣結,類似兩個人努力兩年同時考上大學,但只錄取一人,另一個比較瘦的不錄取理由為早上下雨,為什麼早上下雨不能入學?沒為什麼,就像550CC以下為什麼不能上的道理一樣。

5.96年1月29日,經由總統令頒布立法院第6屆第4會期第16次會議修正『道路交通管理處罰條例』第92條之修正條文,自『總統令 總統府公報』頒布施行6個月後,其大型重型機車應比照小型汽車相關之路權,開放全國各縣市『快車道、廢除兩段式左轉、市區高架快速道路、東西向快速公路』路權,附帶決議方式,要求交通部在兩年內完成相關配套措施,評估開放大型重型機車行駛高速公路可行性,以及兩面車牌。自此,重機路權進入一個混亂不明確的狀況中;首先,1.自總統令頒佈以後,交通部竟無聲無息,當作沒事一樣不作為,逼得全促會起來強行要在8月11日通車,逼交通部表態,交通部不得不重視,趕緊協調改在11月1日通車,這就是典型的政府做事像擠牙膏,不施加壓力是什麼也沒有的。2.而因為政府把重機路權比照汽車是政府偷懶不做事,比照汽車並非當初的訴求,而莫名的550CC界線讓黃牌的存在顯得沒有意義,因路權與小綿羊無異,為何不直接變白牌?3.52條修正案中的附帶決議意義為參考用,可不須執行,但政府執意實施兩面牌政策,因比照汽車之故,大眾皆認為此舉實為找重機騎士麻煩,重機車種百百款,沒有重機有前車牌之設計,法條規定車牌為鋁製,放置車頭為殺人利器,而為了放置前鋁牌而需改裝車體,改裝車體責任警政署推給ARTC,ARTC卻不敢背書此改裝安全無虞,故最後決議為全台首創軟性貼紙車牌。另一附帶決議為兩年內完成相關配套措施,評估開放大型重型機車行駛高速公路可行性,待兩年後政府是否執行如兩面牌積極?4.為了不讓政府以紅牌重需發包製作為由再度延後通車,再一次史上僅見的,紅牌印刷費由民間自行出資製作;5.中華民國交通法規從來沒有過一種,就是昨天不做會罰錢,但今天開始做了會罰錢;我在說什麼咧?就是重機兩段式左轉,昨天說的是為了保護重機騎士安全,今天是管你去死非得直接左轉不可,那麼是昨天政府承認做錯了,還是今天政府是錯的?相信這種法條反差性絕對是前無古人而後無來者。6.因為比照汽車管理,所以開放快速道路,但開放與否由地方政府決定,作法上是原則開放例外禁止,但當重機騎在機車道時他說你是汽車,當禁行快速道路的時候他說你是機車,永遠都是政府說了算,很多縣市沒有很多快速道路,對於住在這些地區的騎士們,開放路權反而更限制更多了,現在的重機法條規定是汽車,但又沒有汽車的完整路權,這種半吊子的法條全是因為交通部制定太多限制機車路權所造成。

7.因為比照汽車管理,原本停的好好的北市立停車場月租300,96年12月1日起因為變成汽車了,月租暴增為4800。政府說法是因為一般機車格重機無法停放,又因為重機數量太少並不適合立刻規劃重機專屬停車格,因為比照汽車管理,所以規定必須停在汽車停車格,一輛一格,市立停車場不愧為公家機關,寧願機車格空空,也要把重機趕出去。而私人停車場各管各的,他說不能停汽車格,重機也沒輒。

8.桃園機場航廈路段非國道,但卻禁止重機進入,因為這時候是以機車管哩,交通部回函理由是惟航廈特區係為國門所在,也就是說你可以開一台20年快報廢的4輪噴煙鐵銹車去接機,也不能騎一輛200萬的DUCATI去接機,因為那是國門所在。

9.騎車上路會被無知的民眾開車鱉車,彎道灑油,上01會被一票所謂駕駛道德管理委員會謾罵責難,台灣上下不是一個對重機友善的地方。

10.最後搞得重機不是機車也不是汽車,管理用汽車管理,法律名詞是大型重型機器腳踏車;車價又貴稅金又高。

11.政府解釋重機路權,何時以機車管理何時以汽車管理為政府權責,外人無法得知。以上是我想到的,當然其中也許有誤,但八九不離十,也歡迎各位訂正補充。風風雨雨這麼多年,討論的時間花費無數,而這麼的一切只是因為,不過是騎個車而已嘛~

星期日, 3月 02, 2008

北海道秋季行-Day5 (Last Day)

今天是待在日本此行的最後一天了,尤於飛機是下午二點左右,加上交通時間、還車。其實今天沒有多少時間觀光了。吃完飯店所提供的豪華早餐之後,逛了逛知名的札幌電視塔。雖然是很有名的電視塔,可是我還是不覺得這有什麼好看的。加上看看時間差不多後,就取車慢慢前往機場還車。

此時又發上了一件很糟的事,GPS不動作了,老是出現一個訊息告訴我們不能設定,前幾天也有發生過,不過停車停了一陣子之在我亂搞之後莫明奇妙的就好了,這次再發生實在搞不懂為什麼還是不動作,請了停車場的人、飯店的人來看,沒有人搞的定這系統,最後看就連日本人也束手無策,只好放棄導航,所幸地圖顯示及定位的功能都還在,於是純粹只看地圖猜測應走的方向就出發了。

就這樣沿路開啊開,往機場方向基本上我是很有把握沒什麼問題,可是我的目的不是機場,而是機場附近的租車中心,就這樣開到機場我可是沒把握回的到租車中心,就在此時,昭毅眼尖看到路旁有一間Toyota展示間,而且上面也有一個綠色的"R"標誌,雖然不曉得跟Toyota租車有沒有關係,還是就開了進去。一進去雖然語言不通,不過畢竟是業務部門,裡面的人非常客氣,大概了解我們的問題之後就非常客氣的嘗試幫我們解決問題,工作人員果然是汽車行業混過的,一看到訊息馬上就手剎車拉起來,一拉起來GPS就恢復正常了。此時我才晃然大悟,原來光是停車、打P檔,都是沒有用的,GPS的警告是要我們手剎車拉起來才能操作,可是問題來了,之前幾天手剎車沒有拉起來一樣也可以操作啊。

不論如何,感謝了賣車中心的工作人員之後,又可以導航了,此時設定好目標前往租車中心,心理就踏實許多,前往還車的途中,也先需要先加油,小朋友非常興奮因為是自助式的加油站,一直要玩油槍。到了機場後,之前買的果汁還喝完,因為想說在中正機場時禁止攜帶液狀瓶罐,所以卯起來勁來將剩下的果汁喝一喝。一直到通關才發現日本的安檢好像不管果汁這些有的沒有的,但是果汁早已經喝下肚了,只好帶著飽飽的水肚通關。就這樣結束了五天的日本之行。

DSC_6198
GPS不能操作的錯誤訊息。

DSC_6206
用油槍玩槍戰。

DSC_6214
猛灌果汁。

星期四, 2月 28, 2008

北海道秋季行-Day4

早上起床後到了旅館附設的餐廳吃早餐,旅社的餐廳就是很傳統的日式榻榻米,要席地而坐,除了我們家的小朋友之外,還有另外的日本小妹妹,但是大體來說,這間旅社以中老年人較多,小朋友真的是少數。我覺得我們家也沒有大呼小叫,也是輕聲輕語並沒有影響他人,即便是這樣,當我們坐下後,有一位穿著傳統日本服裝,頭上還綁著一圈布的的年輕人,居然將他的餐盤拿走,換到另一條桌子坐。我是搞不懂我有做出什麼不雅或不適宜的舉動,頂多就是說著他聽不懂的話吧。

不管那位沒禮貌的日本年輕人,吃完後收拾收拾去找找野生狐狸加上散散步,就只再看見幾隻零星的狐狸,於是就出發了。今天的最終目的是札幌的旅社,看了看地圖,挑了沿路會經過的景點,設定好GPS,就出發了。沿路的風景也都還不錯,主要是會穿過羊碲山這個風景點,這附近很多滑雪勝地,晚了幾個月後我弟就帶全家這住小木屋加上滑雪差點發生雪難

沿路慢慢開車,順著路往札幌的方向前進,路上也有不少風景區,也在路邊看到不少的野生狐狸,隨著一路上一直出見在旁的羊蹄山,山頂上隨時都有一圈雲,偶爾露出的一點小空隙可以看到山頂上的積雪。加上進札幌市區的大塞車,我們終於到了札幌市晚上要住的旅館了。大旅館的好處就是設備真的是不錯,可是因為是市區,就算是房客一樣要加上一千日幣的停車費。停好車,打點好一切,全家就出外覓食了。

昭毅從一到日本就一直想吃握壽司,可是這幾天的早晚餐都是旅社提供的標準日式餐點,中餐因為都是待在風景區,幾乎都只有拉麵的選擇。一直到今天晚上,就是在市區內了,應該找的到壽司了吧。就這樣沿路找啊找,看到的選擇其實不少,有各式各樣的居酒屋、速食,但是要找純壽司店其實不多,其實應該不能講不多,是價錢看起來不太驚人不多。就這樣找啊找, 終於找了一間壽司店號稱老店進去吃了,這頓飯吃起起頗貴,應該是一萬多日幣吧。不錯吃,但是我覺得沒有特別好吃,比起前陣子吃差到福島的市區內的小居酒屋吃到的料理遜色許多。不過不論如何,這頓日式壽司總算是實現了我看日本料理東西軍及將太的壽司後的願望了。

DSC_6107
前晚下榻的旅社

DSC_6111
沿路的超市,照例進去採買,小朋友特準每天吃一支冰棒。

DSC_6121
基乎整天可見的羊蹄山,山頂可見積雪。

DSC_6141
神仙沼,此時老爸頭痛的厲害,正躲在車上睡覺,小朋友就在附近的公園玩起來了。

DSC_6167
另一個角度再看羊蹄山,其實這時已經過了好幾個小時了,隨時都有一圈雲在上面。

DSC_6172
札幌的有軌電車。



檢視較大的地圖

星期三, 1月 30, 2008

北海道秋季行-Day3

今天的行程就是在洞爺湖附近的景點昭和新山及有珠山,除此之外就是附近的景點隨處晃晃,記得晚上跑到二股ラジウム温泉就對了。


Again,這個景點離洞爺湖非常近,開車約十分鐘左右就到了,這裡的停車場也大,當然也少不了很多遊客。我想一定很多人都來過這地方。


DSC_6010

DSC_6011

DSC_6013

這裡有纜車,加上我們的時間實在是太多,當然要去山上晃晃囉。
隨著纜車上昇,也到了一個展望點,這裡尤於位置比較高,加上秋季風有點大,連日本人都很少走出纜車站,接下來就往規劃的步道開始走,享受良好的風景,在這裡一邊可看見洞爺湖,另一邊就是太平洋,加上這裡算是火山口,風景其實相當不錯。

DSC_6028 拼接

隨著乾淨的步道繼續往上走,實在搞不懂為什麼日本人可以將這種觀光地區整理的那麼乾淨,步道上可能因為風大,沒有樹葉也就算了,連步道外也看不到什麼讓人看起來覺得髒亂的地方。

DSC_6034

DSC_6035

我是覺得不怎麼冷啦,可是小朋友已經哇哇叫,拿了老婆的手套不肯還媽媽,後來折衷,一人帶一支。其實老婆有幫小朋友準備毛手套,可是昭毅覺得手套還不夠暖,哨著要戴媽媽的厚手套。

DSC_6037

小光幃很高興的先到了台階的高點,然後就坐在那裡等我們,看起來實在很可愛。

DSC_6038

DSC_6039

DSC_6040

到了最高點之後,觀察到還有繼續走往觀察火山口的步道,我本來還想繼續走,可是這裡的風實在很大,加上有點小毛毛細雨,小朋友紛紛抗議不想再繼續走下去了,想回到文明的地方(這時才大約離開纜車站三十分鐘的路程而以)。

DSC_6041

DSC_6042

DSC_6043
可以看到隨著崚線可以通到遠風的觀察台。

既然不能前進,在折返的路上,居然飄起雪來了。看到飄雪,老爸比小朋友還興奮。
DSC_6046
馬路上有白白的小點就是雪。

接下來,拍了張漂亮的波斯菊、喝了超香濃的優酪乳之後,前往今天的旅館。這間旅館在深山中,就在開往的路上,路越來越小越偏僻,然後就乎然看見日本狐狸出現在馬路中,當然狐狸一看到我們的車就馬上跑掉了,還在嘆息沒有快速的拿起相機拍到狐狸的照片,轉過彎到了旅館所在地。突然發覺至少超過五隻狐狸正在旅社外遛達呢。晚上旅社關門後,可以看見狐狸就在門外可能想要找東西吃。旅館主人告知這些狐狸是野生的,不是他們養的。

DSC_6060
波斯花園田園,什麼人都可以進去。

DSC_6071
超好喝的優酪乳,背後是洞爺湖。

DSC_6106
旅館外的野生狐狸。

DSC_6084
今晚所住的旅館。

星期五, 1月 25, 2008

ACPI Sleeping State Definitions

ACPI 針對系統、Device等定義了各種不同的Power management。其中對於Sleep State的描述如下。其中Definition的欄位是我從ACPI specification 3.0b裡抄下來的。最右邊的"意思是..."欄位是我的註解。







StateDefinition意思是...
S1The S1 sleeping state is a low wake latency sleeping state. In this state, no system context is lost (CPU or chip set) and hardware maintains all system context.CPU 停止執行,Cache內容已經清掉,但是仍然維持供電,所以CPU的內容仍然都在(register)。
S2The S2 sleeping state is a low wake latency sleeping state. This state is similar to the S1 sleeping state except that the CPU and system cache context is lost (the OS is responsible for maintaining the caches and CPU context). Control starts from the processor’s reset vector after the wake event.CPU暫存器以及Cache的內容會丟失,所以當小睡片刻後,再被人叫醒時,OS需要將之前CPU各個暫存器(也就是程式執行到什麼地方)的內容恢復,然後繼續工作。
S3The S3 sleeping state is a low wake latency sleeping state where all system context is lost except system memory. CPU, cache, and chip set context are lost in this state. Hardware maintains memory context and restores some CPU and L2 configuration context. Control starts from the processor’s reset vector after the wake event.這個階段睡的更死了,CPU的內容不但已經不見了,連南北橋的設定值一併都關閉,週邊幾乎除了只剩下記憶體仍舊持續供電外幾乎全數關閉。所以在被叫醒時,BIOS要負責再重新初始化南北橋晶片組,回復CPU睡著前的狀態。這在Windows叫"待命"(Suspend, Suspend to RAM)
S4The S4 sleeping state is the lowest power, longest wake latency sleeping state supported by ACPI. In order to reduce power to a minimum, it is assumed that the hardware platform has powered off all devices. Platform context is maintained.這是更進階的睡覺模式,基本上跟關機是一樣的狀態。所以的工作狀態全數關閉。記憶體、週邊全數進入關機模式,但是系統的狀態仍然還需要存在。可是既然所有的電都關閉了,那工作狀態要存在什麼地方?當然是Non Volatile Memory,也就是HDD之類不需要供電仍然能儲存資料的儲存設備。這在Windows裡叫"休眠"(Hibernation or Suspend to Disk)。
S5The S5 state is similar to the S4 state except that the OS does not save any context. The system is in the “soft” off state and requires a complete boot when it wakes. Software uses a different state value to distinguish between the S5 state and the S4 state to allow for initial boot operations within the BIOS to distinguish whether or not the boot is going to wake from a saved memory image.這基本上已經是關機了,因為系統沒有儲存跟工作有關的任何資訊,要再重新工作唯有開機一途。

星期二, 1月 15, 2008

北海道秋季行-Day2

睡了一晚安穩的覺,隔天起來,先吃早餐。這好像也是我第一次在傳統的日式旅館裡吃的日式早餐。

菜不錯吃,可惜還是乾飯,如果能有台灣的稀飯的話大概更好啊。
DSC_5846

吃完後,再去泡了一次湯,這時就可以清楚的望見太平洋了。可惜池子的水有點燙,無法久泡。不過泡起來已經算是相當舒服的。這間旅館的服務好,人也不多,我個人相當喜歡這種形態的旅館。如果還有機會來北海道,我想我還會再來住一次。

收拾行李準備出發了。旅館服務人員又來幫我們照相。
DSC_5855

DSC_5856

今天的行程要走山路前往俱多樂湖、地獄谷,然後抵達洞爺湖旁的旅館。
沿途可見馬路兩旁的楓葉,奇怪不知道為什麼日本的馬路看起來那麼乾淨?

DSC_5861

應該是遇見的第一個可拍照的熊出沒注意牌子,很興奮的拍照紀念。這是北海道很自豪的一項特色,有良好野生動物環境才能有這樣的警告標語。不過小朋友倒是很擔心真的會有熊跑出來,一直很擔心的回頭看。也是因為這樣的警語太多了,小朋友很害怕,後來有山裡的小步道,小朋友走一下就不要走了,一直想要回到車上。

DSC_5875

沒多久到達大湯沼上方的公路,看到此行覺得最漂亮的風景。滿山谷的楓葉,紅、黃、綠的樹葉加上火山口的蒸氣,白色的溫泉,灰色的石頭再加上冷冽的空氣,在現場好像是置身於畫中一樣。同時我也覺得很奇怪,為什麼這麼漂亮的風景沒有什麼遊客。現場可說是只有我們一家人。稍後到達地獄谷之後我就知道是怎麼一回事了。

DSC_5879

DSC_5878全景照片

大湯沼是一個國家公園的,停車要七百日幣的樣子(糟了,真是晚一點寫馬上就忘了正確數字),但是不用門票,旁邊還有註明,因為不收門票,所以停車費就是拿來維護的費用,請大家支持之類的告示。附近有很多步道可以走,照例小朋友不喜歡這類的活動,所以我們繼續往下走,就發現還有一個天然足湯的地方。離開馬路走在山徑裡十五分鐘左右就可以到。

DSC_5905

路途中另有一座泥火山,昭毅旁的告示寫,就在2007年的5月才又爆發一次,噴出來的泥漿還不低耶。

DSC_5908

足湯到了,結果全家又在這裡混了一個小時左右,直到下起小雨才離開這個地點

DSC_5909

DSC_5912

到達地獄谷之後,才發覺遊客都跑到這裡來了,各式各樣的旅遊團都有,從中國、香港、韓國來的遊客在這裡到處都是。遊覽車一車一車的到來。我才發現,原來剛剛在大湯沼那裡,由於山路太小,是禁止大型bus上山的,難怪剛剛那裡沒什麼遊客。這是就不禁慶興起來還好是自行租車來遊玩。

DSC_5950

稍事休息後,繼續前往洞爺湖,小朋友此時已經體力不支在後座呼呼大睡,只剩老爸老媽醒著,天色也越來越暗,突然洞爺就出現在眼前,好像是在高山裡的湖泊的感覺。

DSC_5969

靠著GPS的幫助,很輕易的找到事先預定的旅館SunPalace太陽宮殿

晚餐一樣是在旅館裡預訂,享受一下難得的奢華。為什麼會訂這間是因為這間有一個很大的水上世界,有不少滑水道,老婆想說小朋友一定喜歡這樣的環境,就訂下了這間。另外溫泉池也相當多,總共有十幾個大大小不一的池子。大飯店果然是有大飯店的好處,晚餐的菜色也不錯,相當好吃。隔日的早餐也很有水準。在這種地方,講中文根本不是問題,可是我還是不太適應有服務生來幫我提行李。在日本到底要不要給小費啊?

KICX0723