歡迎跟我連絡

本頁最下方有Web MSN可以直接跟我交談喔!
免安裝程式...哈哈 歡迎聊天

2008年3月21日 星期五

2008阿里山花開了!

2008/03/22 天氣:多雲時陰 溫度:18度C
請了一天假,阿里山走走...因為3/23花季要開始了,不想人擠人...
早上08:00台南出發,快11點到阿里山森林遊樂區,人不多不少剛好...
先吃了午餐,開始賞花拍照...
花約莫開了1/3,只要有花開的吉野櫻樹下,就一定擠滿拍照留念的遊客...
白色的吉野櫻,打扮的美美的,綻放枝頭...春天來了



慈雲庵[一葉蘭]優雅的姿態

下午4點,好大的山嵐,擋住了回家的路,慢慢開...6點半到家.

WindowXP開機程序

當打開電源啟動電腦時,電腦將會啟動存放在BIOS中的POST(電源啟動自我檢測,Power On Self test)程序,POST主要的工作是對電腦各硬體設備做好初始設定與基本測試工作,以確保電腦能正常運作.例如確認記憶體大小及硬體設備(鍵盤、顯示器、磁碟機、Parallel Port、Serial Port、系統時間等)是否存在及運作正常,一旦電腦執行完本身的POST程序之後,其它裝在電腦中帶有自己BIOS(Basic Input/Output System)的介面卡(通常是顯示卡),也會執行其自定的POST工作程序.
結束完POST的檢測工作後,接下來會根據定義在BIOS中的開機順序來選擇開機裝置,通常BIOS定義的搜尋順序是[Floppy][HDD][CD-ROM][USB],使用者可以根據實際需要自行修改BIOS開機裝置搜尋順序,則其將會進行如下圖所示開機裝置順序的尋找動作:

但是以目前的多數的電腦,通常會以硬碟作為開機的Boot Device.
當硬碟被決定為開機裝置後,BIOS會將位於開機硬碟的第一個磁區(即MBR,CHS[001],Cylinder/Head/Sector)前面446 Bytes的啟動程式載入記憶體中執行,此時BIOS就將執行權交給MBR而功成身退了.MBR中的啟動程式之主要工作是搜尋MBR中的硬碟分割表(Partition Table)記錄,以找到啟動分割區(Active Partition)所在位置,即硬碟分割表中的各分割區記錄的第一個Byte(啟動狀態)若標示為80(16)者,則該硬碟分割區即為啟動分割區(又稱為系統分割區),一個硬碟最多只會有一個分割區是啟動分割區.若MBR無法從硬碟分割表中得知系統分割區的位址所在或硬碟分割表己毀損,則會顯示[Invalid partition table]錯誤訊息.

當MBR啟動程式從硬碟分割表中得知系統分割區(System Partition)所在位址後,其會將位於系統分割區之開機磁區(Boot Sector,即該分割區的第一個磁區)中的開機程式(Boot Program)載入到記憶體執行,並依照開機程式中的設定去找尋NTLDR程式的所在位置,以便載入NTLDR檔案到記憶體執行,並且同時將控制權轉交給NTLDR而結束MBR啟動程式的工作.

NTLDR是一個隱藏唯讀系統檔案,也是NT系統的開機管理程式,其主要負責的工作有控制[作業系統的選擇][硬體的檢測][WXP作業系統的核心程式載入]等。
NTLDR會尋找並載入Boot.ini、Bootsect.dos、Bootsect.w40、NTdetect.com、NTbootdd.sys等檔案.
首先會先載入Boot.ini,開啟作業系統清單,讓User選擇進入的作業系統.(如果只有一個OS,你部會看到這畫面)

然後載入NTdetect.com,偵測目前電腦安裝了那些硬體元件及其相關的設定資訊,並將其所收集到的資料建立成硬體清單(H/W List)傳遞給NTLDR使用.以備核心初始化階段(Kernel Initiation Phase)建立H/W註冊機碼時使用.一般來說,Ntdetect.com會偵測下列硬體元件:匯流排/介面卡類型、顯示卡、鍵盤、通訊埠(Communication Ports)、平行連接埠(Parallel Ports)、軟碟、滑鼠等裝置,同時還會收集系統韌體資訊,例如系統的日期和時間。下面就是載入NTdetect.com時的畫面.

但是如果你有多個硬體設定檔的話,

在載入NTdetect.com前會先出現這個畫面

到底要啟動哪些裝置或這些裝置到底要使用什麼樣的設定,還有那些服務要啟動,那些服務不啟動,這些都是定義在硬體設定檔中.
接著NTLDR將會載入WXP的核心程式Ntoskrnl.exe到記憶體,但並未將其做初始化(Initialize)的動作,此時也正式進入了核心載入階段,接下來就會載入硬體抽象層(Hardware Abstraction Layer)Hal.dll的程式碼至記憶體。接著再將控制權交給Ntoskrnl.exe,就是我們常在[工作管理員]看到的兩個最重要的Porcess,
[System Idle Process]及[Taskmgr.exe](Task Manager)

這樣就開機完成了.

2008年3月20日 星期四

Dual Boot in WindowXP

前文提到了Window XP的開機程序,要怎做到Dual Boot呢?
其實也經有約略提到,載入Boot.ini後,開啟作業系統清單,讓User選擇進入的作業系統,如下畫面:



就是Boot.ini,可以設定作業系統清單.通常你可以於[C:\]這裡找到它,或是利用[系統設定公用程式]([開始][執行],輸入[msconfig])去檢視它.

以我的Boot.ini為例,內容如下:

NTLDR載入我的Boot.ini後,會出現
[Microsoft Windows XP Professional]
[Microsoft Windows XP Embedded]
讓我選擇,若不選會直接進入,等30秒後會進入[Microsoft Windows XP Professional].
語法介紹:
Boot.ini 檔案是由[boot loader]和[operating system]兩部份[Section]所構成
[boot loader]
timeout:設定於x秒鐘後未選取的話,則使用預設作業系統進入.(與default搭配)
default:預設的作業系統.(與timeout搭配)
[operating system]
multi(a)disk(b)rdisk(c)partition(d)\WINNT="e"
  (a):定義開機分割區所在的硬碟控制器(Disk Controller)編號,第一個有效的編號為0(0,1,2...).
  (b):這個值永遠是 0,即保留未用之意.
  (c):定義開機分割區在(a)硬碟控制器下所在的實體硬碟編號,第一個有效的編號為0(0,1,2...).
  (d):定義開機分割區在(c)實體硬碟下所在的分割區編號,第一個有效的編號為1(1,2,3..).XP的分割區編號是先由主要分割區(Primary Partition)起算,然後再計算至邏輯分割區(Logical Partition).
  (e):作業系統名稱,可以自由命名.
大致的設定就這樣,就可以使用Dual Boot,還有一點你的作業系統要灌進去那個Partition喔.不然有選項,還是無法開機,哈哈...

把網頁登錄到Google前,你必須知道的10件事

原文網址 10 things you should know before submitting your site to Google
簡單翻譯節錄如下:
這十點考慮的重點主要是如何讓Google更容易將你的網頁編入索引,讓別人更容易找到你的網頁
01. 如果你的網頁有展示頁面,記得要有一個可以跳過的文字連結.(Google無法解譯你的Flash網頁,所以你一定要有TextLink才可讓Google By Pass)
02. 確認沒有無效的連結.(這是很基本的)
03. 檢查 TITLE 標籤.(TITLE不僅用來搜尋,也會出現在瀏覽器最上方,ㄧ個適當的標題對爬文者和讀者都好)
04. 檢查 META 標籤.(謠言關於Google不關心MATA標記不是絕對正確的,有效的關鍵字跟描述是很重要的)
05. 檢查 ALT 標籤.(ALT 標記大概是網站的被忽略的方面,此部份與Google的圖片搜尋有關)
06. 檢查頁框[Frame].(如果有頁框,則網頁很有可能不會被全部編入Google索引)
07. 你有動態生成網頁嗎?( Google正在限制他們所編入索引的動態網頁[PHP, ASP]數量,可以考慮增加一些靜態內容在網站中)
08. 規律地更新內容,不要讓它停滯不前,甚至使用 META標記告訴 Google 重新回來的頻率.
09. Robots.txt .(這個文件如果適當地使用是一種強有力的資源)
10. 暫存與否?(Google 貯藏一些網頁為快速存取)



關聯文章:如何讓Google找到你的Blog

如何讓Google找到你的Blog

當你辛辛苦苦的完成的你的部落格,當然希望有人看的到,但是除了知道你網址的人看的到以外,如果也想讓其他人利用搜索引擎找到你的Blog,要怎麼做呢? 就讓Google幫你的忙吧!
方法1:先到這裡去Google網站登錄網頁

將你的網址完整的輸入在上面欄位,再加一些關鍵字(Key Word)在下面欄位(可以多個關鍵字用逗號隔開),然後按下登錄網址.然後就慢慢等吧...你的網頁就遲早有一天會出現在Google搜尋的內容裡,聽說會很久...-_-"(半年)

方法2:申請的Google帳號,然後到Google網站管理工具然後登錄進去...
畫面如下,輸入你完整的網址後,按下新增

然後進到這個畫面,先選擇"新增中繼標記"的項目,然後複製下列的中繼標記,然後將它貼到您網站首頁的第一個 <head> 區段 (第一個 <body>區段之前),如下圖

範例:

然後儲存你的網頁,開瀏覽器看看有沒有問題(只要可以開啟來就好了,不會有什麼變化),然後回到剛剛管理工具頁面,按下[驗證],如果你有加成功,就會顯現驗證成功,表示你的動作都是正確的.
接下來,還是等待喔.不過會比方法一快很多約48~72小時,你就可以利用Google搜尋你的Blog標題看看,應該會看到喔.
像我的,我也是等了約3天,就出現了

我利用[雨季 尋羊冒險]去搜尋,感動耶...>*__*<,不僅看到我的網頁在搜尋結果裡,還排在很前面耶(第一頁第二位),如果你的網頁雖然有出現,但是排在後面,怎麼辦呢?
哈哈,利用關鍵字[改善網頁排名]的關鍵字去Google搜尋看看吧!一定有解答....

關聯文章:把網頁登錄到Google前,你必須知道的10件事(關鍵)

TinyURL.com

Tiny[形容詞]極小的;微小的
URL[電腦]全球資源定位器(Uniform Resource Locator)
所以TinyURL:極小的URL
這個網站可以將你[一拖拉股]的網址名稱做極小化的動作

例如:http://www.mapquest.com/maps/map.adp?ovi=1&mqma
p.x=300&mqmap.y=75&mapdata=%252bKZmeiIh6N%252bI
gpXRP3bylMaN0O4z8OOUkZWYe7NRH6ldDN96YFTIUmSH3Q6
OzE5XVqcuc5zb%252fY5wy1MZwTnT2pu%252bNMjOjsHjvN
lygTRMzqazPStrN%252f1YzA0oWEWLwkHdhVHeG9sG6cMrf
XNJKHY6fML4o6Nb0SeQm75ET9jAjKelrmqBCNta%252bsKC
9n8jslz%252fo188N4g3BvAJYuzx8J8r%252f1fPFWkPYg%
252bT9Su5KoQ9YpNSj%252bmo0h0aEK%252bofj3f6vCP
我想只有極少數的吃飽閑著的人有興趣記下來吧....
看看TinyURL後 http://tinyurl.com/6

怎麼做呢?看看網頁畫面


將你那串複雜的網址,剪下然後貼入視窗Textbox中,然後按下[Make TinyURL]
就可以得到Tiny後的URL
以我的網址為例本來是http://nelsonliublog.blogspot.com/
TinyURL後變成http://tinyurl.com/35xt37
兩組Link是相同的網頁,但是簡單多了
如此一來,因為所有的網頁都是TinyURL.com開頭,你只要記下35xt37這個字(序號)就可以了,是不是很方便呢?

其實原理很簡單,TinyURL裡用轉址的動作,你輸入的網頁他會寫入資料庫,然後產生一組序號,以我剛剛的例子來說,序號就是35xt37,此序號會一同寫入資料庫並對應的原來的網址,當你進入http://tinyurl.com/35xt37後,它就搜尋35xt37相對應的網頁然後連結開啟...哈哈,就這樣而已
但是,這樣的服務為我們帶來的好處真是不少
好東西介紹給大家.....

2008年3月19日 星期三

XP Embedded - Target Designer

前幾篇文章中提到的XP Embedded步驟很快的再說明一下
(1)利用TAP(Target Analyzer)取得,Target Machine的PMQ File(硬體描述及驅動程式組態檔)
(2)使用Component Designer將PMQ匯入並檢查XP Embedded Database中是否有相容的元件,最後產生SLD File.
(3)使用Component Database Manager將SLD匯入XP Embedded Database,成為一個H\W Component.

進入今天正題,首先打開Target Designer
首先你會看到最左邊視窗會顯示你所匯入的H\W Component,如紅色底線顯示的元件,因為我匯入3個,故可以看到3條紅線所標記的元件


接下來,稍微介紹一下只要的視窗畫面
(1)左邊:這個部份是用來將所有XPE Database內所有的Component做列表的視窗

(2)中間:是我們選用將來要安置在Target Machine的元件列表區,所以你可以由左邊視窗將元件拖曳到中間視窗

(3)右邊:當我們點選中間視窗的選用元件後,這裡會顯示該元件的一些屬性或描述,你可以根據你的需求進行細部的修正

首先我們將我們的H\W Component拖曳中間視窗

這樣一來,我們就已經完成一個最最基本的XPE OS了,就是不載入任何Windows元件,僅僅載入所有硬體的驅動程式,雖然很簡陋的OS,但這不就是我的的初衷嗎?開機後直接進入我們的AP,其他本來就不是我們要的.
在進行Dependency Check及Build Image前我們先看一些設定.
首先在[Tool Bar][Tools][Option]中,[Dependency Check]Tab中,[Auto-Resolve Dependencies]是否Checked.這很重要,因為沒有選用的話,對初學者來說你會在Dependency Check時,發生數百行的錯誤訊息,你要一個個的去修改及選用某些Component.

接著執行[Tool Bar][Configuration][Check Dependency]或是[F5],然後Target Designer開始幫你進行元件相依性檢查.這個動作的目的是叫Target Designer幫你將你選用元件的更底層元件引入.比方說,你有網路卡,Target Design會針對這個元件去將一些TCP/IP,Net Service....等元件引入,不然你無法在你的Target machine上使用網路相關的功能,就算你有驅動程式也沒有用.


Dependency後,有6個錯誤發生,這是因為有些元件你必須自己決定,在Task視窗Double Click Message後,Target Designer會提供你選項讓你決定.你要選用的元件,像是OS Loarder通常會選NT Loader,語系的選項你就自己看著辦[選的越多你將來的XPE會用龐大,夠用就好],其他的選項只要選關於[NTFS]及[FAT]即可,至於Window Logon選那個Standard的即可,每個元件確定後按[Add]就可以.

這時候你可以看看選用元件視窗,Dependency Check前,就那麼一個,現在呢?成千上萬的元件被引入了.

哈哈,有點誇張吧!的確,XP的環境的確是很複雜,但是這也是XPE提供給我們快速建構OS的方式,我們不必為那些東西煩惱,只要透過Target Disigner的Dependency Check幫我們處理這一塊東西,但是不可諱言的Auto-Resolve Depenency也用他自己的觀點引入了一些沒有用的東西.業界目前也有人在幫客戶OS瘦身的服務[移除多餘元件],聽說是以Mb計算收費的,哈哈,越說越遠,繼續下一步....
因為剛剛我們手動決定了一些元件,再做一次Dependency Check,結束後應該是沒有任何錯誤了.
接下來,準備Bulid Image,[Tool Bar][Configuration][Build Target Image]按下出現以下畫面

這裡有兩個路徑要輸入,一個是你Image要放在哪裡?(自己決定吧)
另一個就是Build LOG要放在哪裡,這裡要注意一下,絕對不可以選用跟上面同一個路徑,會出問題,因為Bulid前,Target Designer會先砍光Image資料夾內的東西,你如果把LOG放在這裡,因為LOG File會被Lock寫檔,所以會出錯,只要選一個不同於Image資料夾就好了,別自找麻煩.
Build Image成功後,你可以到該資料夾去看,會有下列東西出現

資料夾:3個
Documents and Settings , Program Files ,WINDOWS
檔案:4個
NTDETECT.COM ,ntldr , boot.ini , WERUNTIME.INI
除了WERUNTIME.INI,我是因為用評估版開發環境才會有的檔案,正式版是沒有的.
其他東西是不是很熟係呢?沒錯,他就是我們常看到的磁碟C底下的東西.
下一步,就是把這些東西COPY到Target Machine的磁碟C,這個要自己想辦法了.說簡單不簡單,說難也不複雜,各位看倌自己看著辦.如果你是初學者,或許不知道我再說什麼,把一個COPY的動作說的那麼神秘,但是你想像一下,你的Target Machine是沒有OS的硬碟喔,要透過一些方式把東西COPY進去,有時還需要將硬碟格式化,並將其C Partition設成Active.....這裡需要一些硬體知識才可以完成喔....
如果Copy完成後,準備FBA(First Boot Agnet)了,機器打開電源後就會自動開始進行安裝作業,安裝畫面比起安裝XP時,簡陋了一點,但是我想這不是重點,哈....
拍幾張FBA給大家看看.....





FBA完成後會自動重開機一次,這是啟動後的畫面,什麼都沒有的WindowXP


大功告成了...
這就是最基本的XPE OS,再來就看你要拿它做什麼了...
基本上XPE就是客製化的WindowXP,XP能用的程式就可以在XPE執行(當然包括.Net Framework亦是元件之ㄧ,你可以在Target Design時選用,或是FBA後安裝進去,讓你的AP可以Call Framework Function).另外一些只要有XP驅動程式的硬體也可以裝在XPE上使用.
以後再利用機會介紹Custom Component & Custom Shell,我想這才是XPE的真正用途,在Build Image時,m預先掛入自己的Component(AP),或是自己的Shell(不使用Windows Explorer Shell)....
使得每次開機後直接自動執行它的工作,這就是嵌入式系統的真正工作....



2008年3月18日 星期二

Sony Ericsson XPERIA X1

Sony Ericsson又有新款手機準備問世了,介紹如下
(1)採用 Windows Mobile Professional 6.0 系統
Sony Ericsson 第一款採用 Windows Mobile 6.0 Professional 的 PDA 手機,對於以往堅守 Symbian 陣營的 Sony Ericsson,可說是具跨時代的意義。XPERIA X1 乍看之下為直立式的設計,然而橫向滑蓋以後可見 QWERTY 按鍵,旗彎曲的弧度被 SE 稱為「Arc slider」,即圓弧狀的滑蓋設計。
(2)HSUPA 高速上傳
XPERIA X1 採用自家最高階的 3 吋觸控式螢幕,解析度並高達了 480x800 pixels 的 WVGA 水準,全新的「XPERIA 面板」則可以觸碰操作 3D 介面。此外,XPERIA X1 還支援完整的通訊網路,除了 GSM 四頻和 WCDMA、HSDPA 之外,X1 也首度支援 HSUPA,上傳的速度最高可以達到 5.7 Mbps,比 HSDPA 上傳的 384Kbps 還要更快,而 X1 也可透過 Wi-Fi 802.11b/g 來無線上網。
(3)高效能娛樂性
XPERIA X1 採用了高達 500MHz 的 ARM CPU,將比過去的 P1i 效能提升更多。在娛樂功能方面,X1 支援 320 萬畫素的 AF 相機,MP3、AAC、WMA 音樂格式播放,還有 3.5mm 規格的標準耳機孔,內建的記憶體為 400MB,而且可以擴充 microSD 記憶卡,是 Sony Ericsson 首款不採用自家 M2 規格的手機。
兩張X1相片....蠻美的....又心動了


慢慢走,欣賞啊

日復一日,不知不覺的已經春暖花開了.

每天騎著車上下班,眼睛不是注視著紅綠燈就是盯著前車保持距離.

突然頭一撇,發現花開了......


我們總是忙碌著,匆匆的經過,原來很多美好的事物,近在咫尺

只要你願意停下你的心 駐足一下下

2008年3月17日 星期一

DOS下,如何使用滑鼠

C語言廣泛的被運用在很多低階的開發,如今的OS幾乎都已經進入到[視窗環境]了,Console Mode已經算是式微的東西了.但是你知道嗎?這些式微的東西,竟是這些視窗環境,線上遊戲...的幕後功臣.因為一些機緣,今天有機會再把這些東西拿出來看看,也分享給有興趣的人...

我想沒有滑鼠的話,我想很多人都沒辦法操作Windows吧.
在Dos模式中,你要怎麼去使用它呢?

在C語言中,你必須先Include這個<dos.h>
像是這樣 #include <dos.h >
然後就可以使用這個函數 int86()
函數原型:int int86(int intno, union REGS *inregs , union REGS *outregs)
滑鼠的中斷位置是""0x33"
以下有些範例提供參考:
宣告廣域(Global)變數
union REGS i,o;
(1)確認驅動程式是否載入
int SubCheckMouseLoadedStatus(){
   clrscr();
   i.x.ax=0;
   int86(0x33,&i,&o);
   if(o.x.ax == _NORMAL) //Not Loaded
   {
      printf("No Mouse Available...Please Check it!");
      return(_ERROR);
   }else{ //Loaded
      return(_NORMAL);
   }
}
#基本上進入Windows都會載入滑鼠驅動程式,如果真的要在純DOS下開發的話,可能需要自行至你的滑鼠官方晚站下載驅動程式
(2)顯示滑鼠游標
void SubEnableMousePointer()
{
   i.x.ax=1; //Enable = 1
   int86(0x33,&i,&o);
}
(3)隱藏滑鼠游標
void SubDisableMousePointer()
{
   i.x.ax=2; //Disable = 2
   int86(0x33,&i,&o);
}
(4)顯示滑鼠座標
.......
i.x.ax = 3;
int86(0x33,&i,&o);
while(!kbhit())
{
   SubDisplayMousePosition(o.x.cx,o.x.dx);
......
}

void SubDisplayMousePosition(int x,int y)
{
   gotoxy(62,23); //到螢幕某顯示資訊
   textcolor(15); //設定Text Color
   cprintf("x:%2d y:%2d ",1+x/8,1+y/8); //除以8 可得Text Mode的座摽
}
螢幕的原點是位於左上角(1,1)
(5)抓取使用中滑鼠按鍵
......
SubDisplayMouseButtonStatus(o.x.bx);
......

void SubDisplayMouseButtonStatus(int s)
{
   textcolor(15);
   gotoxy(72,23);
   if(s == 0)//沒有任何鍵被按下
   {
      cprintf("L:%c R:%c",176,176);
   }else if(s==1){ //左鍵按下
      cprintf("L:%c R:%c",219,176);
   }else if(s==2){ //右鍵按下
      cprintf("L:%c R:%c",176,219);
   }else if(s==3){ //左右鍵同時按下
      cprintf("L:%c R:%c",219,219);
   }else{
      cprintf("L:%c R:%c",176,176);
   }
   textcolor(current_color);
}

參考文件:
Mouse Programming

MSN狀態(我在線上時,可以跟我交談喔)