2007年10月1日

修正Reset Registry to default問題

藉由更動TOC中變數來判斷是否要將系統回復為預設值

AP部分:將TOC中bReserved[3]的值設為0X45

TOC *p;
BYTE InBuf[2048];
DWORD psize,val=0;
if(::KernelIoControl(IOCTL_READ_TOC, NULL,0,&InBuf, 2048,&psize))
{
p = (TOC *)InBuf;
p->bReserved[3] =0x45;
::KernelIoControl(IOCTL_WRITE_TOC, &InBuf, 2048,NULL,0,&psize);
KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0, NULL, 0, NULL); //reboot device
}


##CONTINUE##
Driver部分:

  • 在IsAnyKeyDown()加入判斷:若值為0x45則將系統回復為預設值

if(toc->bReserved[3] == 0x45)
{
RETAILMSG(1, (TEXT("#####toc->bReserved[3]=%d \r\n"),toc->bReserved[3]));
return TRUE;
}
.........


  • 在XXXDaemon中加入判斷:若值為0x45,則將PETestFolder刪除,並將值設為0避免重複作回復預設值的動作!

if(toc->bReserved[3] == 0x45)
{
if(::KernelIoControl(IOCTL_READ_TOC, NULL,0,&InBuf, 2048,&psize))
{
p = (TOC *)InBuf;
p->bReserved[3] =0;
::KernelIoControl(IOCTL_WRITE_TOC, &InBuf, 2048,NULL,0,&psize);
}
hFind = FindFirstFile (L"\\My Flash Disk\\PETestFolder", &FindFileData);
if(hFind != INVALID_HANDLE_VALUE)
{
FindClose(hFind);
if(EmptyDirectory(_T("\\My Flash Disk\\PETestFolder"),TRUE))
{
RemoveDirectory(_T("\\My Flash Disk\\PETestFolder"));
}
}

2007年9月20日

[轉貼]滿街都是iPod跟iPhone‧漫談UI界的逆向工程

出處:HandyUI.com
作者:陳文剛


逆向工程(Reversed Engineering)普遍存在於各個領域,尤其在台灣,各行各業的高手們,更是樂此不疲。大廚師喜歡到處吃吃喝喝,用舌頭跟鼻子去破解各地美食的料理秘方;電影工作者喜歡把經典橋段拿來重複播放、快轉倒轉、慢動作格放,反覆地推敲每一個走位跟運鏡。就連裕隆老總嚴凱泰都曾發生過類似的趣事,他在正式代理Armani前,就曾經把Armani西裝丟給港台一流的打版師傅拆解研究,直到怎麼組都組不回原樣時,他才心甘情願地放棄自行生產,專心做代理銷售。

每個人看到好東西時,心裡自然都會想著:「媽阿,這是怎麼辦到的?」也因此,人們都會渴望把美好的東西拆解,把它的外表一層一層地撥開,直到搞清楚這是怎麼一回事為止。這個過程就像拆禮物一樣,一層一層的包裝被打開,外觀越來越接近物品本身應有的大小跟重量,最後露出禮物的一瞬間,謎底終於揭曉,這可是相當迷人的經驗。「喔,原來是這樣做的阿!」這樣的讚嘆聲,就在最終破解的那一刻,發自內心地冒了出來。人類最原始,那種窺探、追根究底、搞懂怎麼做的本能渴望,就在這樣的過程中,一次又一次地被徹底滿足。


##CONTINUE##
就像上面所提到的,逆向工程的過程裡,充滿了驚喜與刺激,既知性,又充滿挑戰性。不過,從 UI Design的角度來看,搞懂怎麼做(know-how),跟知道為什麼要這樣做(know-why),其實是天差地遠的兩件事。

在UI界,逆向工程這檔子事也是常常在發生,每天都在做,只是抄得多抄得少,或是依賴程度高低的差別而已。設計手機介面的時候,拿起Nokia或是Sony Ericsson玩看看,參考一下人家輸入法是怎樣做的;或是設計相機時,拿起 Canon或Nikon,看看人家的人臉對焦框是方的還是圓的,合焦時會不會變色?久而久之,所有類似產品的介面都長得很像,用起來都一樣,沒有特別好,也不會特別差。由於這種狀況每天都在發生,所以部分的介面設計師,很可能已經習慣於大量地參考別人,然後小幅地改善自己。



從模仿中學習,其實是個必經的歷程

從現有案例中學習,其實是件好事,也或許可以當作是蹲馬步般的基本功。舉個例來說,要一個沒吃過義大利菜的人,做出好吃的義大利式燉飯 (Risotto),或是要一個沒玩過遊戲軟體的人,憑空設計出一款多人線上角色扮演遊戲 (MMORPG),那都是相當困難,甚至天方夜譚的事。

介面設計師在開始著手設計前,當然要對該產品,或是同一領域的其他產品,有清楚的認識。在介面設計流程裡,這個知己知彼的過程與方法,就叫做競爭者分析 (Competitor Study)。通常在做產品定位,或是進行設計前,都會先跑過一次分析,搞清楚現有產品的優勢劣勢,以及自家產品的機會點。

在做介面設計的競爭者分析時,最簡單的方法是,找來各家產品,快速比較一下設計風格、資訊架構、互動效果等,一個表格或是幾張slide大概就可以搞定。另一種比較嚴謹的做法則是,把整個介面設計的元素全部拆解開來,重製出一份UI flow,並且將layout跟icon全部攤開,把各種互動設計都分門別類,一個一個做比較分析。後者的做法,跟所謂的逆向工程,其實沒什麼兩樣。

經過上述的拆解與分析之後,簡單如iPod,複雜如iPhone,內部的操作流程跟介面設計元素,都可以攤開來一覽無遺。這時候要抄要改,幾乎都像扒滷肉飯一樣輕鬆 (其實也沒這樣輕鬆,苦工夫一堆,又會被告,千萬別傻傻地去做)。至於要參考哪個部分,如何轉化成自己的設計,則完全看設計師自己的功力與經驗。

就像前面舉做燉飯,或是研發線上遊戲的例子一樣,做介面設計時,要是不做點競爭者分析的功課,就很可能會閉門造車,搞出類似重新發明輪胎的糗事 (歷史上,輪胎的外型曾經被重新發明很多次,方型的,雪橇型的都有,但是弄到最後,事實證明還是圓的最有效率)。透過逆向工程的手段,去快速學習、了解競爭者特性,是非常有效率且必要的做法。莫內、梵谷、畢卡索,哪一個沒有畫過靜物素描,沒有揣摩過大批翻製的石膏像?從模仿中學習,是人類進步的重要技能,在科技快速發展的今天,更是得不停地模仿,不停地踩在別人既有的基礎上,追求實質的進步。



掌握關鍵本質,才能夠舉一反三

只不過,模仿應該只是手段,而不是最終目的;知道如何做得一模一樣,跟了解背後的原理原則,真的是天差地遠的兩件事。

舉個實際的例子來說,有時候我們常會看到許多四不像的產品規格,去找PM討論時,總會聽到:「XX大廠就是這樣設計的,我想他們這樣做,一定有他的原因跟道理,我們照著這樣做比較安全。」 更厲害的PM則會融會貫通、旁徵援引,說出一套道理來:「我會想拿掉電源開關,是因為iPod也沒有電源開關;至於這裡要長按兩秒鐘,是因為PDA也都是長按兩秒鐘;而且我還加了閃七下的燈號提示,這是我們自己發明的,非常friendly,跟Canon的印表機有異曲同工之妙。」

這樣噴飯的對話常常出現,每回聽到這些謬論,除了心裡苦笑之外,也很懶得去反駁。老實說,我不太能夠接受「XX大廠這樣設計,一定有他的原因跟道理」這種說法,太籠統,而且也太馬虎行事。在搞不清楚別人為什麼這樣設計之前,就一股腦地抄,抄到最後就像拼裝車一樣,東拼西湊,重看不重用。

好的介面設計師不只懂得欣賞好產品,具有一眼就看出關鍵概念的鑑賞力,而且更懂得將這些精采地設計概念消化吸收,重新轉化成新的設計,比過去看過的更精練,更貼近使用者需求。夠水準的介面設計師,絕對不會只從Apple, Nokia等公司產品找靈感,更大一部分的啟發來自於日常生活,來自於人類歷史當中所有的經典設計。

舉個例來說,在思考手寫輸入介面的可能性時,我們會去參考Windows Mobile、漢王、蒙恬,或是甚至是iPhone的觸控螢幕鍵盤。但是在此同時,我們更關注的是,手、筆跟紙的關係。我們觀察人們長久以來怎麼樣用筆紀錄,如何在紙張上頭註記,如何塗改,如何銷毀。漸漸地會發現到,現有的手寫輸入介面都不夠好,連市面上最棒的產品也頂多在及格邊緣,離感動人心還差的遠。這時候,精采的就來了。從競爭者分析中看到現況,找到機會,然後透過設計師的經驗與巧思,就有可能設計出一套全新的手寫輸入介面,一舉超越現下的所有產品,或者你要說是,有史以來的所有產品也可以。

這就是具備鑑賞力、觀察力,並且掌握關鍵本質的奇妙功效。同樣是做競爭者分析,同樣是逆向工程,不明就裡地抄,跟了解原理原則後的全新設計,很可能就是地獄與天堂的差別。在這一點上,台灣廠商的逆向工程技術確實很先進,但是少了創意,少了理想與堅持,最後很可能開發出的全是一堆me too,或甚至比me too還差的產品,真的是很可惜。

2007年9月19日

XXX7600 : Fix Calibration

  • 讀取Registry儲存值:
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("HARDWARE\\DEVICEMAP\\TOUCH"), 0, KEY_QUERY_VALUE, &hkey) != ERROR_SUCCESS)
return 0;

dwSize = sizeof(str);
lResult = RegQueryValueEx(hkey, _T("CalibrationData"), NULL, &dwType, (LPBYTE)str, &dwSize); //query registry value


##CONTINUE##
  • 分割字串,並計算與預設值的差值總和(每一點座標相減)
pStr = wcstok(str, seps);

for (i=0; pStr != NULL; i++)
{
wcscpy(token[i], pStr);
tokennum[i]=_wtoi(token[i]);
pStr = wcstok(NULL, seps);
}

for(i=0;i<10;i++) sum =" sum"> 50)
bMAXVal = true;
}
if(sum > 400)
{
lResult = RegSetValueEx(hkey, _T("CalibrationData"), NULL, REG_SZ, (LPBYTE)defaultval, dwSize);
RegCloseKey(hkey);
bMAXVal = true;
}
else
RegCloseKey(hkey);

  • 若差值總和過大或其中一點差值大於40則在進入系統後重新做校正。

2007年9月8日

時間管理軟體試用:iGTD


iGTD是由bartek bargiel發展出來的mac上時間管理軟體,GTD(Getting Things Done)則是由David Allen發展出來的時間管理系統,主張事情應該利用工具來紀錄,而不應該記在腦中!


##CONTINUE##
有關GTD可參考:



Getting Things Done

作者︰David Allen






搞定! 2分鐘輕鬆管理工作與生活




相關網站:
GTD的概念在於把可以同時處理的事情集合在一起,可以利用場合的概念,把我們有的雜事加以分類,例如電話、電腦前處理、Mail等,這樣就可以批次來處理!

在twhsi的網站上提供了幾個實用場合參考:
  • 電話聯絡
  • 電腦相關
  • 閱讀及寫作
  • 規劃思考
  • 當面聯絡
  • 自己動手
  • waitting
  • someday/maybe
iGTD也是以此概念來處理,在iGTD中Context可以視為各種的場合,而每個待辦的事項則稱為task!每個task都可以設定其輕重等級!


iGTD也提供了同步的功能,可以與iCal同步,若再搭配iCalViewer,則可以將事情列在桌面上,隨著事情的輕重等級,會以不同顏色區分!


另外,iGTD也提供了tag的功能,可以為task加上tag,再透過smart folder的功能,就可以將所有與此tag有關的task列出,這項功能就可以用在案子的管理上,看看目前還有那些task尚未解決!

2007年8月29日

Provia A1 GPS



##CONTINUE##
  • Samsung 800 x 480 resolution widescreen touchscreen 7-inch display
  • Navigation uses super-detailed, razor-sharp 3D maps, complete with models of buildings and other landmarks.
  • It has a "picture-in-picture" (PIP) mode, so you can simultaneously watch a movie and get directions.
  • a DMB receiver so you can receive over-the-air (OTA) digital television broadcasts.
  • DivX, XviD, H.264, WMA, WMV, OGG, mp3, MPEG-4, and a bunch of other formats.

2007年8月27日

心智圖軟體



##CONTINUE##
免費跨平台 : FreeMind

  • 新版本0.9.0Beta2 Release!
  • 使用上蠻直覺好用,Tab鍵新增子結點,Enter鍵新增平行結點。
  • 跨平台,PC或Mac上皆可使用。


免費線上版:Mindomo
  • 介面較美觀,免費版已提供Map style以及加入圖式、圖片功能。
  • 有提供類似標籤雲功能:Boundary Shape
  • Flash 介面
  • 連線速度滿意。
  • 提供分享功能。
  • 可輸入FreeMind檔案。
  • 免費版僅提供三個私人檔案!


Mac版:NovaMind
  • 介面華麗,並提供許多免費的圖示。
  • 無免費版,最便宜的需要49 USD。
  • 目前試用中,輸入介面還是覺得FreeMind好用。

2007年8月2日

Something about including managed code to OS Image

在MSDN上提到:
The MODULES section specifies which Windows Embedded CE-based modules are included in the run-time image, and how they are loaded into the memory table as established in the MEMORY section of the Config.bib file.

This section can contain up to 2,000 modules, which consist of a two-part combination of source code and data.

Note:
Do not include managed code in the MODULES section. This is because the kernel does not load managed code. Instead, managed code is opened as a memory-mapped file by the .NET Compact Framework. Managed code must be included in the FILES section.

##CONTINUE##
至於甚麼是Managed Code? Unmanaged Code? Native Code?可以參考這篇文章!Managed, Unmanaged, Native: What Kind of Code Is This?

因此,在platform.bib中,必須將要加入的Managed Code加在Files Section而不是在Modules Section!