Windows2003有兩種遠端控制方式
1.遠端桌面連線
2.Terminal Server
遠端桌面連線就類似VNC一樣,將Server的display和keyboard, mouse 重導到遠端的pc,讓你可以控制Server
Terminal Server則是提供一個Windows 2003的service給每一個Client,讓每一個client好像可以有自己的Windows 2003一樣。
可以看出 遠端桌面連線,同一時間僅能有一個user連入。
Terminal Server則不限。
所以MS在Terminal Server上有加入License,依照提供的連線數收費。
所以啟動Terminal Service比較麻煩,還要啟動Terminal License Server。
遠端桌面連線就比較容易設定了,
2003server已經將Client端的安裝程式準備好,在 C:\Windows\system32\Clients\TsClient。
help上說明直接把這個folder開放,讓client pc能讀取,安裝。
星期一, 7月 31, 2006
星期六, 7月 29, 2006
Flac - encoding
因為拿到的格式是ape,沒有方便的播放器(其實是因為他的codec不是opensource.)。
所以要換成其他格式..
先用ape 的程式解成wav檔(size很大)。
再到flac去download win32版的,包含tool 跟front end。但是front end好像是用VB寫的..所以要VB runtime跟MSCOMCTL.OCX。
但是installer沒有含這兩個,所以要自己download (如果system李沒有的話)
http://download.microsoft.com/download/5/a/d/5ad868a0-8ecd-4bb0-a882-fe53eb7ef348/VB6.0-KB290887-X86.exe
http://members.home.nl/w.speek/download/MSCOMCTL.ZIP
這樣就可以run flac front end了。
雖然flac installer 在install 的過程中會要求這,要求那的...例如..會要你去download winamp。
但是結果winamp還是不能play flac..
最後還是用flac.
從wav到flac...size大概是1/2...奇怪,沒有很小..不是應該是要1/4嗎?
所以要換成其他格式..
先用ape 的程式解成wav檔(size很大)。
再到flac去download win32版的,包含tool 跟front end。但是front end好像是用VB寫的..所以要VB runtime跟MSCOMCTL.OCX。
但是installer沒有含這兩個,所以要自己download (如果system李沒有的話)
http://download.microsoft.com/download/5/a/d/5ad868a0-8ecd-4bb0-a882-fe53eb7ef348/VB6.0-KB290887-X86.exe
http://members.home.nl/w.speek/download/MSCOMCTL.ZIP
這樣就可以run flac front end了。
雖然flac installer 在install 的過程中會要求這,要求那的...例如..會要你去download winamp。
但是結果winamp還是不能play flac..
最後還是用flac.
從wav到flac...size大概是1/2...奇怪,沒有很小..不是應該是要1/4嗎?
星期五, 7月 28, 2006
reseal - Part II
上次說完XPe 為甚麼需要reseal這個動作,還有需要的component。
現在來看看FBReseal.後的動作。
FBreseal 可以在任何時候執行。
執行fbreseal 後會馬上return,好像沒發生任何事。
但是要等一下(約30 sec),出現"fbreseal complete" 對話盒,要求reboot。
做完 reseal 後本來就只能 resboot。
reboot,但是要注意,一旦關機,要在他開機前馬上把電源關掉。
這時候就可以把那個reseal的hd image ghost起來了。
如果讓他boot,他會出現"Prepare Windows start"的畫面,一下子,然後進入Desktop的藍色畫面,之後好像當機一樣(但是游標還可以動),約2 min後 開機完成。
可以用 ipconfig/all 看看SID (就是HostName)變成OEM-XXXXXXX了。
而且每一台的SID的XXXXX都會不一樣。
現在來看看FBReseal.後的動作。
FBreseal 可以在任何時候執行。
執行fbreseal 後會馬上return,好像沒發生任何事。
但是要等一下(約30 sec),出現"fbreseal complete" 對話盒,要求reboot。
做完 reseal 後本來就只能 resboot。
reboot,但是要注意,一旦關機,要在他開機前馬上把電源關掉。
這時候就可以把那個reseal的hd image ghost起來了。
如果讓他boot,他會出現"Prepare Windows start"的畫面,一下子,然後進入Desktop的藍色畫面,之後好像當機一樣(但是游標還可以動),約2 min後 開機完成。
可以用 ipconfig/all 看看SID (就是HostName)變成OEM-XXXXXXX了。
而且每一台的SID的XXXXX都會不一樣。
ToDo List..
- CG - Stream Server - playing video on ...
- installing Windows 2003 on upstair's 4-way server
- setup a CE building environment on Server
- setup a XPe building environment on Server
使用NTLDR boot DOS
目標是要做到這樣啦,不知道能不能…
先看這一篇 http://www.bcpl.net/~dbryan/ntfs-dual-boot.html
說得很清楚,大意就是:
同一顆hd create兩個primary partition (用spfdisk或其他linux上常用的partition tools)。
第一個primary partition format成ntfs,安裝XP。
第二個pimary partition format成fat16,安裝dis。
這樣,只要改變active partition,就可以決定用xp還是dos開機。
然後用debug取出dos那個partition的boot sector,存成一個檔案,
把檔案copy到xp那一個partition去,ntldr要用這個檔案來 boot dos那一個partition。
修改xp parition中的boot.ini,加入一行dos的選項。
先看這一篇 http://www.bcpl.net/~dbryan/ntfs-dual-boot.html
說得很清楚,大意就是:
同一顆hd create兩個primary partition (用spfdisk或其他linux上常用的partition tools)。
第一個primary partition format成ntfs,安裝XP。
第二個pimary partition format成fat16,安裝dis。
這樣,只要改變active partition,就可以決定用xp還是dos開機。
然後用debug取出dos那個partition的boot sector,存成一個檔案,
把檔案copy到xp那一個partition去,ntldr要用這個檔案來 boot dos那一個partition。
修改xp parition中的boot.ini,加入一行dos的選項。
ghost 2003 seems using xpe..
以前try過,要256M RAM才能run的ghost 2003,今天又拿來try一次(屈服了engineer的"download式開發法"),發現,boot cd 好像是進入 xpe呢。
星期三, 7月 26, 2006
complain - about tool's version and ghost...
純compain!!
.
用ghost作為deploying的工具,但是ghost是run在dos下的。所以要準備兩個system : xp for accessing pendrive and network.
and
dos : for recover ghost image.
而且ghost那個還要準備好hd space,讓ghost hd時有存放空間。所以ghost那個還要讓Xp那個能access到,這樣才能將image送出?
天哪,作embedded system的know-how竟然是在這些一關卡一關的environment上,而且還是因為這些跛腳的environment和腦殘tools間互相對不起來....
這麼麻煩也就算了,竟然...一大堆都是用 8.0 壓的image到後來竟然用 9.0 來壓。
8.0又不能解9.0的image...然後..deploy的data都是內涵8.0的ghost。
是怎樣?
而且都不是有license的(有license的是ghost 2003跟ghost 10.0)。
真是煩透了,這跟技術有任何關係? 還是在考驗 誰比較熟大陸的download site?
超級無聊。
作MS的東西就是麻煩,困難點也就是tool而已,因為一堆不清楚的架構和framework,所以要找到對應的tools,實際developement tools中又甚麼都沒有。要另外找。
對應實際configure image的動作(一堆mouse click)的困難度,好像know-how都在"去那裡找這些3rd party tools 和讓他們能run" 上頭。
用ghost有甚麼好處? backup disk image有一些opensource的tool可以用,可以在linux下使用。linux下也ready一堆pendrive, network connection的function。甚至fat 的tool也有。
更不用說好好的ghost 8.0幹嘛改9.0 ? 有任何好處? ( show-off "我找到free的9.0 ?" )
真不是software engineer的態度..
Cloning XPE Image - Reseal
Windows 系統都很奇怪的需要一個unique name和 security ID (SID)。
這個SID在XPE中是由FBA在系統第一次boot時產生的。
而FBA只有在第一次boot時會執行,
也就是說,把boot完後的disk image cloning下來。會造成所有clone的系統有相同的SID。
但是拿FBA執行前的image來clone,就代表所有clone的機器第一次開機時,都需要跑一段很長的FBA。
以上兩種方法,都很不合算。
為此,XPE提供了一個component : System Cloning Tool (在Software -- System -- System Service -- Base )
最重要的就是"reseal"這個function.
reseal 就是通知運行中的XPE把系統準備好,修改成可以cloning的狀態。
然後,developer可以控制下reseal 命令的時間:
XPE把FBA的動作分成1200個階段。 讓你讓你決定在哪一個stage下reseal command。
所以這個設定變成沒用。
FBRESEAL這個command可以讓development在系統boot up,的任何時間(當然,是在FBA後)下reseal的命令。
所以developer可以對boot up的系統作一些額外的application安裝,設定。然後再執行reseal command。把image freeze and prepare for cloning。讓cloning的system也包含這些設定。
FBRESEAL的command format如下:
FBRESEAL [-autologon | -keepall | -keepdomain | -keepmounted | -keepnet | -keepuser]
autologon - 維持autologon的狀態
這個SID在XPE中是由FBA在系統第一次boot時產生的。
而FBA只有在第一次boot時會執行,
也就是說,把boot完後的disk image cloning下來。會造成所有clone的系統有相同的SID。
但是拿FBA執行前的image來clone,就代表所有clone的機器第一次開機時,都需要跑一段很長的FBA。
以上兩種方法,都很不合算。
為此,XPE提供了一個component : System Cloning Tool (在Software -- System -- System Service -- Base )
最重要的就是"reseal"這個function.
reseal 就是通知運行中的XPE把系統準備好,修改成可以cloning的狀態。
然後,developer可以控制下reseal 命令的時間:
XPE把FBA的動作分成1200個階段。 讓你讓你決定在哪一個stage下reseal command。
但是這也是說好玩的,你只能設0或是1200,否則在FBA時會crush設成 0 的時候代表在FBA作任何動作之前就下reseal命令。這也代表沒下。
所以這個設定變成沒用。
這就是奇怪的地方,實際用途與表面意義相差180度實際上設為stage 0是要配合FBRESEAL.EXE這個command。
FBRESEAL這個command可以讓development在系統boot up,的任何時間(當然,是在FBA後)下reseal的命令。
所以developer可以對boot up的系統作一些額外的application安裝,設定。然後再執行reseal command。把image freeze and prepare for cloning。讓cloning的system也包含這些設定。
所以設為0原意為無用,實際卻有大用....Orz下完fbreseal後就要關機了,然後用Ghost 將image ghost起來。
FBRESEAL的command format如下:
FBRESEAL [-autologon | -keepall | -keepdomain | -keepmounted | -keepnet | -keepuser]
autologon - 維持autologon的狀態
TUX magazine is going be be Not-free
今天收到一封通知的EMail...
現在,TUX要收錢了,但是由於你過去對TUX的支持,將免費再送你一年,到2007 July。
之後,會通知您將要過期了,並且提供你一年12其9.95美金的優惠。
TUX其實做得蠻不錯的,跟LJ有很好的市場區隔。一個近技術,一個近使用。
但現在看來...大概Linux和OpenSource越來越靠近一般大眾,這一類型的讀者也越來越多,所以TUX收錢也有利基存在。
還是不錯啦,看到OpenSource的相關產業可以賺錢。我們才會有雜誌可以定,不然,向以前的天充一樣...多可惜。
This week you'll notice a change in TUX. It will move from being a大意是說..感謝你對TUX支持,過去TUX是由LJ的熱心支援,所以能免費訂閱。
free digital magazine to a paid one. Your current complimentary
subscription will be extended for 12 issues (expiring after the
July 2007 issue). That being said, this is just a note to let you
know what's happening -- there's nothing at all you need to do
today. Your free subscription will continue to be delivered to you
as you had originally requested.
When your subscription does expire, we will send you a notice
offerring you an opportunity to renew at our paid rate of just
$9.95/12 issues. In addition, since you've been a long-time (and
apprecited!) loyal subscriber, we'll make certain to offer you a
very special gift if you do decide to renew at that time. Again
though, there's nothing for you to do today. Your free subscription
to TUX will continue through July 2007.
We started TUX in 2004 because we felt strongly it was a needed
publication within the Linux community (many of our Linux Journal
readers would write in asking for exactly this, and truthfully, many
of our own staff members wanted to learn more about their Linux
desktops also). We invested revenues from our other publication,
Linux Journal, to make it possible. We've seen it as a labor of
love. Today, however, 15 issues later, we need to turn TUX into a
self-supporting publication and that's why we are asking for our
readers' help.
We promise to put more heart and effort into TUX with this
conversion. In the coming months, you can expect several new topics
and article series introduced by TUX Editor Kevin Shockey.
Please let us know how we can make TUX better for you. We strongly
encourage your feedback and suggestions; please send to..
現在,TUX要收錢了,但是由於你過去對TUX的支持,將免費再送你一年,到2007 July。
之後,會通知您將要過期了,並且提供你一年12其9.95美金的優惠。
TUX其實做得蠻不錯的,跟LJ有很好的市場區隔。一個近技術,一個近使用。
但是最近LJ上的技術文章漸漸變少了,漸漸向TUX靠近,不曉得是因為換了主編,還是Linux真的越來越容易了?我以前以為TUX就是LJ從投稿文章中,選出比較近使用者的部份,集合成的一份雜誌。所以不用收錢。
但現在看來...大概Linux和OpenSource越來越靠近一般大眾,這一類型的讀者也越來越多,所以TUX收錢也有利基存在。
還是不錯啦,看到OpenSource的相關產業可以賺錢。我們才會有雜誌可以定,不然,向以前的天充一樣...多可惜。
星期二, 7月 25, 2006
google maps, Wikipedia - about this WWIII
Google Maps和維基百科真是不錯。
幾分鐘 就能瞭解最近的以巴衝突。(雖然好像已經打了幾十年..)。
幾分鐘 就能瞭解最近的以巴衝突。(雖然好像已經打了幾十年..)。
- 原來 沒有 "巴勒斯坦" 這個國家呀,"巴勒斯坦" 和 "以色列+黎巴嫩" 的地區是重疊的。(Google Maps查到的地區就是...但是沒寫出Palestine)
- 原來 這次實際上,就是以色列和黎巴嫩在打。
- 原來 以色列的四周都是阿拉伯人,也就是他們所謂的"異教徒"的國家。
- 原來 現在還有爭議的地區就是 以色列和黎巴嫩邊界的Shebaa Farms地區(Wikipedia也有地圖)。
- 原來 巴勒斯坦原來和以色列各佔50%的土地,後來巴勒斯坦發動戰爭想驅逐以色列,結果大敗,以色列把所有土地都拿下,造成巴勒斯坦不見。雙方戰爭不斷。
-- 這部份也有人說是以色列實行擴張政策,所以四次挑起戰端。 - 原來 看起來好像就是以色列四周的阿拉伯國家都在資助黎巴嫩和巴勒斯坦,希望把猶太人趕出去,美國人則資助以色列,希望藉此從阿拉伯地區的石油獲得好處。
- 原來 巴勒斯坦人現在好像就是在"加薩走廊"的地方成立自治區。
EWF : Enhance Write Filter - what XPE differ from XP
Enhance Write Filter (EWF) 是XP Embedded獨有的機制(和XP相比)。
他的功能是在所有的file io (類似Linux的VFS)中,加上一個Filter,分離read, write的動作。
並且可以控制這個read write動作。
例如 : 控制所有write到hd的動作到ram 中,這樣HD的內容就永遠不會被改變。
同時,在作read時,要將RAM一併考慮,將HD + RAM = final 的動作做出來。
這樣就可以做到 : 將所有執行時期的hd 更動,都留存在ram中。而讓其上的application沒有感覺。
當system reboot後,所有RAM的資料都會消失,所以系統還是維持在hd最初的install狀態。
要使用EWF,要將"Enhance Write Filter"加入target中。
要管理EWF,要將"EWF Manager Console application"加入target中。
要使用有利用到EWF的application,要把"Enhance Write Filter API"加到target中。
Enhance Write Filter有幾個參數要設定,和你要使用的EWF 模式有關。
最基本的就是設成RAM Overlay。
Overlay Type : RAM
就是像上面提到的一樣,將 modification 存到RAM中,不要對HD作修改。
其他可以設定 Overlay Type : DISK,是另外create一個partition,將修改存到disk中。
EWF Partition Size in KByte 就是在將Overlay Type設定為DISK,要使用多大的partition來存放修改的部份。
所以OverlayType:RAM時,這一項就可以設成0。
Start EWF Enabled : 第一次啟動就要將EWF啟動起來?
啟動後,可以用ewfmngr來控制/檢查ewf。
ewfmngr.exe在 c:\windows\system32
啟動後,開啟CMD,到c:\windows\system32..
還有Boot Cmd ,代表下次開機時,給ewf的comand。
用
同理,用 "-disable"的話,下次開機ewf就會關閉。
ewf的開/關只有在開機時能夠設定。系統運行中 無法改變。下完command後要reboot才會生效。
所以來看看 -commit 命令..
commit命令有點類似 sync,就是將RAM的部份synch到hd中。
假設系統ewf是enable...
更詳細一點說明,commit動作會在poweroff時將ram sync回hd。
也就是說,commit後,把電源拔掉(不循正常關機步驟),所有modify也不會sync回hd。
還有.. -nocmd ,是將ewf的boot command清除,所以不管commit前後有多少modification,下了 - nocmd後,因為boot command是 No Cmd,所以所有資料在reboot後也不會sync回hd。
.... 上面這一點是很迷惑的地方.
還有,即使使用RAM overlay,照理overlay 不會使用到HD。但是ewf還是會需一塊約32k的partition (Neil甚至說最好保留2M),據TS說明,這是一些RAM Block的pointer 的set。指向那些RAM overlay。
所以在create partition時,要預留一些unpartitioned space讓ewf使用。
同時因為一個HD有4個primary partition的限制,所以也不能把partition都create光。要留一個給ewf用。
查ewf會在protect的partition後面create一個system id 45的小partition。
所以XPe boot後的HD,用XP disk manager看會看不到system id 45那一個partition,導致刪除不掉,用partition Magic和Norton disk partitioner也一樣。
------ spfdisk 可以看到。
他的功能是在所有的file io (類似Linux的VFS)中,加上一個Filter,分離read, write的動作。
並且可以控制這個read write動作。
例如 : 控制所有write到hd的動作到ram 中,這樣HD的內容就永遠不會被改變。
同時,在作read時,要將RAM一併考慮,將HD + RAM = final 的動作做出來。
這樣就可以做到 : 將所有執行時期的hd 更動,都留存在ram中。而讓其上的application沒有感覺。
當system reboot後,所有RAM的資料都會消失,所以系統還是維持在hd最初的install狀態。
這個在Linux上,可能用cramfs,解開到RAM。或是區分出需要保護和不需要保護的folder,安排到hd或ramfs中。可以作更細的調整。EWF除了保護hd,將所有modification排除。還可以暫時將這個功能關閉,將RAM sync到HD(MS叫commit)。
當然,也可以做到像EWF一樣,完全保護的功能:一些LiveCD就是這樣。
要使用EWF,要將"Enhance Write Filter"加入target中。
要管理EWF,要將"EWF Manager Console application"加入target中。
要使用有利用到EWF的application,要把"Enhance Write Filter API"加到target中。
Enhance Write Filter有幾個參數要設定,和你要使用的EWF 模式有關。
最基本的就是設成RAM Overlay。
Overlay Type : RAM
就是像上面提到的一樣,將 modification 存到RAM中,不要對HD作修改。
其他可以設定 Overlay Type : DISK,是另外create一個partition,將修改存到disk中。
EWF Partition Size in KByte 就是在將Overlay Type設定為DISK,要使用多大的partition來存放修改的部份。
所以OverlayType:RAM時,這一項就可以設成0。
Start EWF Enabled : 第一次啟動就要將EWF啟動起來?
啟動後,可以用ewfmngr來控制/檢查ewf。
ewfmngr.exe在 c:\windows\system32
ewfmngr partition -command
partition - 就是ewf保護的partition,例如C:, D:
command - 就是要對partition的動作,如disable, enable, commit,
啟動後,開啟CMD,到c:\windows\system32..
ewfmngr c:會顯示出目前C:上ewf的狀態,ENABLE或是DISABLE,
還有Boot Cmd ,代表下次開機時,給ewf的comand。
用
ewfmngr c: -enable可以將Boot Cmd設定為ENABLE。這樣下次開機時,EWF就會開啟。
同理,用 "-disable"的話,下次開機ewf就會關閉。
ewf的開/關只有在開機時能夠設定。系統運行中 無法改變。下完command後要reboot才會生效。
所以來看看 -commit 命令..
commit命令有點類似 sync,就是將RAM的部份synch到hd中。
假設系統ewf是enable...
1.modify 1然後reboot, modify 1 和 2 都會sync回hd。跟你下commit的時間無關(因為commit只能在boot時動作)。
2.-commit
3.modify 2
更詳細一點說明,commit動作會在poweroff時將ram sync回hd。
也就是說,commit後,把電源拔掉(不循正常關機步驟),所有modify也不會sync回hd。
還有.. -nocmd ,是將ewf的boot command清除,所以不管commit前後有多少modification,下了 - nocmd後,因為boot command是 No Cmd,所以所有資料在reboot後也不會sync回hd。
.... 上面這一點是很迷惑的地方.
還有,即使使用RAM overlay,照理overlay 不會使用到HD。但是ewf還是會需一塊約32k的partition (Neil甚至說最好保留2M),據TS說明,這是一些RAM Block的pointer 的set。指向那些RAM overlay。
所以在create partition時,要預留一些unpartitioned space讓ewf使用。
同時因為一個HD有4個primary partition的限制,所以也不能把partition都create光。要留一個給ewf用。
查ewf會在protect的partition後面create一個system id 45的小partition。
所以XPe boot後的HD,用XP disk manager看會看不到system id 45那一個partition,導致刪除不掉,用partition Magic和Norton disk partitioner也一樣。
------ spfdisk 可以看到。
Some Helping Utility for building XP Embedded
使用XP Embedded 和Linux最大的差異是: 內容隱晦不明,工具東缺西缺。
像要將3rd party driver安裝進入target image,竟然要分析安裝的步驟。
因為 3rd party 可能為了方便使用者,或是怕被發現他的application是用VB寫的,通常會用一些花錢買的install wrapper包起來,變成一個Setup.exe。
讓你只能行那個Setup.exe,同時祈禱希望他不會惡搞你的registry, ini。(像在install file中發現ctor.dll這個被列為spyware的dll是怎樣...)
XP E的 component editor,是將driver, application包裝成component的工具,利用這個工具,才能管理你的target image,否則,開發XPE的動作就會變成"安裝XP"一樣的無聊沒知識。
但是 component editor在包裝driver時,又只懂得 inf檔。又沒又說明 component designer是怎麼動的(一切都是menu. button..按來按去)。
怎麼辦? 找 driver 廠商提供另一個格式的安裝檔?
這應該是最好的方法了,本來,作為一個供應商,應該會為他的客戶提供這樣的服務。
但是
在有些時候就行不通,例如..公司一直延遲付款(甚至不付)。或是...
怎麼辦?
這時就需要一個tool,幫忙 "監視" driver的安裝動作,然後看看能不能自己寫個inf。讓component editor轉成component.
這就是一個 -- "費心隱藏起來 再費心打開來" 的例子。
浪費的都是engineer的生命,這些沒營養的東西 - engineer 費心的把installation process包裝隱藏,tool programmer費心的寫一個installation monitor工具。 embedded engineer費心的去找到這些東西...
像Linux就不會,即使沒有提供source, Makefile 讓user install from source,所提供的安裝動作都是script file,哪些file會裝到哪裡,清清楚楚,即使有以.o release的module,也會清楚的列出。drive就是driver,不用費心再搞一些無關的躲貓貓...
扯了這麼多。其實要說的是,因為這樣,msdn有一頁,專門說一些building XP embedded需要的一些tools,在 http://www.microsoft.com/china/MSDN/library/Mobility/embedded/WXdnxpesplxpe3rdparty.mspx?mfr=true
有志浪費生命的工程師,可以去看看.... (我就有去看 Q_Q )
像要將3rd party driver安裝進入target image,竟然要分析安裝的步驟。
因為 3rd party 可能為了方便使用者,或是怕被發現他的application是用VB寫的,通常會用一些花錢買的install wrapper包起來,變成一個Setup.exe。
讓你只能行那個Setup.exe,同時祈禱希望他不會惡搞你的registry, ini。(像在install file中發現ctor.dll這個被列為spyware的dll是怎樣...)
XP E的 component editor,是將driver, application包裝成component的工具,利用這個工具,才能管理你的target image,否則,開發XPE的動作就會變成"安裝XP"一樣的無聊沒知識。
但是 component editor在包裝driver時,又只懂得 inf檔。又沒又說明 component designer是怎麼動的(一切都是menu. button..按來按去)。
怎麼辦? 找 driver 廠商提供另一個格式的安裝檔?
這應該是最好的方法了,本來,作為一個供應商,應該會為他的客戶提供這樣的服務。
但是
在有些時候就行不通,例如..公司一直延遲付款(甚至不付)。或是...
怎麼辦?
這時就需要一個tool,幫忙 "監視" driver的安裝動作,然後看看能不能自己寫個inf。讓component editor轉成component.
這就是一個 -- "費心隱藏起來 再費心打開來" 的例子。
浪費的都是engineer的生命,這些沒營養的東西 - engineer 費心的把installation process包裝隱藏,tool programmer費心的寫一個installation monitor工具。 embedded engineer費心的去找到這些東西...
像Linux就不會,即使沒有提供source, Makefile 讓user install from source,所提供的安裝動作都是script file,哪些file會裝到哪裡,清清楚楚,即使有以.o release的module,也會清楚的列出。drive就是driver,不用費心再搞一些無關的躲貓貓...
扯了這麼多。其實要說的是,因為這樣,msdn有一頁,專門說一些building XP embedded需要的一些tools,在 http://www.microsoft.com/china/MSDN/library/Mobility/embedded/WXdnxpesplxpe3rdparty.mspx?mfr=true
有志浪費生命的工程師,可以去看看.... (我就有去看 Q_Q )
星期一, 7月 24, 2006
XPE : Minlogon - login automatically with system user
上次說到XP的boot process中,最後交給 Winlogin
Winlogon 就是使用者login程式,同時管理有關"權限"的問題。
在XPE的target designer中,需要選login program:
Minlogon
Winlogon
Winlogon就是標準的login prompt,Minlogin是小型,縮減版的login promt。
因為小,所以有些限制,可以參考MSDN有關Minlogon的說明: http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1XPEMinLogon.mspx?mfr=true
XPE中提供了一個Minilogon MACRO,選用這個MACRO (預先定義好的一組compoment),可以做出約15M的小image。
Minlogon最好配合"Custom Shell Component",自訂開機時 UI。這一部份在MSDN的另一頁有說明: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xpehelp/html/xetskcreatingcustomshellcomponent.asp
Winlogon 就是使用者login程式,同時管理有關"權限"的問題。
在XPE的target designer中,需要選login program:
Minlogon
Winlogon
Winlogon就是標準的login prompt,Minlogin是小型,縮減版的login promt。
因為小,所以有些限制,可以參考MSDN有關Minlogon的說明: http://www.microsoft.com/china/MSDN/library/Mobility/embedded/USdnxpesp1XPEMinLogon.mspx?mfr=true
- Minlogon永遠不會出現login prompt,MinLogon永遠以System User的權限自動login。
- Minlogon不具有user account管理功能,所以不支援filesystem的權限管理欄位,同時也不具有login domain的能力。
- Minlogon的開機時間少10-15sec,footprint也比較小。
- 當選定Explorer Shell作為Minlogon的default system shell時,因為Explorer會include Winlogon的所有元件,所以這個情況下,footprint並不會比較小。
..實際上,選用Minlogon,再選Explorer Shell作system shell時,dependency check會自動將Winlogon加進去,造成兩個login program需要disable一個的情況,所以...一定要用Minlogon時,不可以用explorer Shell作System Shell....有點蠢...
XPE中提供了一個Minilogon MACRO,選用這個MACRO (預先定義好的一組compoment),可以做出約15M的小image。
Minlogon最好配合"Custom Shell Component",自訂開機時 UI。這一部份在MSDN的另一頁有說明: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xpehelp/html/xetskcreatingcustomshellcomponent.asp
Research,, and waiting to be bought..
DigitalTime
http://tech.digitimes.com.tw/ShowNews.aspx?zCatId=417&zNotesDocId=BA5700E75CC621F9482571AA00561F32
各公司漸漸都不需要RD了,自己投資太麻煩,風險也太大,到不如在需要時再買個不錯的公司,來得保險又快速。
http://tech.digitimes.com.tw/ShowNews.aspx?zCatId=417&zNotesDocId=BA5700E75CC621F9482571AA00561F32
.....剛回來時在一家超級大廠做新產品的開發,不過後來因為大廠對於新產品的決策舉棋不定而離開。再一次,Scott感受到的又是心態的問題。果真被千哥猜到。
這些大老闆的確試著想從製造轉往創新研發發展,不過因為長期以來沒有什麼累積,基礎實在太薄弱。而且研發和製造是不同的故事,製造可以在短時間內做出規模,帶來收益;但是研發不是一蹴可幾,時程和成果也不是全然能夠掌控的。當老闆對著研發專才問起回收的問題,而且這種事一而再再而三地重演時,戲就唱不下去了。
這就是心態的問題,台灣的產業界被大環境驅使,不得不轉型時,心態上究竟是不是ready面對研發的種種面向,包括它是個砸下銀彈不知道成果何時出現的事業,或者投資下去的報酬率難以預估,或者科技研發人才究竟要多少,才足以做出自己想要的樣子來,面對這些問題,大老闆們 ready了嗎?
即使有遠見、有心的老闆們下定決心了,面對台灣欣欣向榮的股票市場,面對投資大眾的不斷質疑,面對股價亳不留情的波動,面對媒體常常自以為是的大肆批評,老闆們,承受得住嗎?
各公司漸漸都不需要RD了,自己投資太麻煩,風險也太大,到不如在需要時再買個不錯的公司,來得保險又快速。
C++ GUI Programming with Qt 4
Qt 3那本已經出了好一陣子,但是Qt SDK opensource 版是Qt 4的,
現在Qt 4終於出了。
Trolltech 7/17 公佈的。
這本是基於Qt4.1 的內容來說明。
內含新的Appendix:
- Item View Classes
- Creating Plugins
- Embedded Programming
- Introduction to C++ for Java and C# Programmers
天瓏已經有在賣了..
http://tlsj.tenlong.com.tw/WebModule/BookSearch/bookSearchViewAction.do?isbn=0131872494&sid=31577
最近Tolltech 還release一個mobilephone的Qt platform。含一個x86的emulator,可以download image 下來。配這一本書,應該不錯。
星期日, 7月 23, 2006
wavpack : hybrid
wavpack,和flac一樣,一個opensource, 無損的音樂縮格式。
那位甚麼又要開發一個一樣功能的opensource 軟體?
差別是:他是用hybrid的方法,
所謂hybrid就是,他將壓縮後的資料分為兩部份: lossy + correction。
lossy,就像他的名字一樣,是一個壓縮比大,有損的結果。
correction ,就是補正lossy file的對應資料。
所以lossy + correction 就可以 ....這句話不知道怎麼寫..
那位甚麼又要開發一個一樣功能的opensource 軟體?
差別是:他是用hybrid的方法,
所謂hybrid就是,他將壓縮後的資料分為兩部份: lossy + correction。
lossy,就像他的名字一樣,是一個壓縮比大,有損的結果。
correction ,就是補正lossy file的對應資料。
所以lossy + correction 就可以 ....這句話不知道怎麼寫..
星期六, 7月 22, 2006
默默..
1970年時,德國的作者就預知了將來社會的模樣,所以寫下這樣一本書。
不過這小小的一本書 也沒有辦法挽回 世界的潮流..
30年後,灰衣人果然佔領了世界...
不過這小小的一本書 也沒有辦法挽回 世界的潮流..
30年後,灰衣人果然佔領了世界...
所以我們這些可憐的工程師,就要每天待在公司,雖然跟家人住在一起,一天中也見不到幾次面,主管一天到晚說 "我們已經比人晚起步了,怎麼可以比人還不努力呢?".
市面上一些 XX週刊,X下雜誌,每次報導一些 XX的成功人士,都會提到他們都有一段 每天睡在公司的日子,將生命都貢獻給公司...
其實,這些人成功,最大的功勞應該歸功於他們的家人,願意犧牲自己的生活,那些成功人士一點都不值得尊敬。他們只是 灰衣人的忠實顧客罷了..
灰衣人的顧客越多,社會也就越來越糟糕..
星期五, 7月 21, 2006
XP Boot Process
這一篇寫的剛剛好 (不太多也不太少)
BIOS -- read MBR of harddisk,將控制權交給MBR的code。
disk MBR -- read MBR of active partition,將控制權交給他。
partition MBR -- 去自己partition的root 中找 ntldr 這個程式。把控制權交給他。
ntldr 進入protect mode,找到boot.int,依照內容決定要到哪裡去load kernel。
當boot XP時,ntldr會找到Ntdetect.com去偵測系統硬體,然後依照boot.int的內容找到partition,到 Windows/System32去load kernel: Ntoskrnl.exe 和必要的dll : Hal.dll。
控制權交給Ntosknl.exe
Ntosknl.exe啟動後,啟動Winogon.exe,
Winlogon.exe啟動Lsass.exe (Local Security Administration)。
顯示Windows歡迎畫面。
顯示login dialog
BIOS -- read MBR of harddisk,將控制權交給MBR的code。
disk MBR -- read MBR of active partition,將控制權交給他。
partition MBR -- 去自己partition的root 中找 ntldr 這個程式。把控制權交給他。
ntldr 進入protect mode,找到boot.int,依照內容決定要到哪裡去load kernel。
當boot XP時,ntldr會找到Ntdetect.com去偵測系統硬體,然後依照boot.int的內容找到partition,到 Windows/System32去load kernel: Ntoskrnl.exe 和必要的dll : Hal.dll。
控制權交給Ntosknl.exe
Ntosknl.exe啟動後,啟動Winogon.exe,
Winlogon.exe啟動Lsass.exe (Local Security Administration)。
顯示Windows歡迎畫面。
顯示login dialog
Need Some Space for EWF
NL 說FDISK DOM時,要預留2M的空間給EWF。
使用磁碟管理 create partition,NTFS 檔案系統,啟動壓縮。設定使用中。
將build好的image copy到 DOM的partition。
因為啟動壓縮,所以ntdlr 要將壓縮取消。
其他的folder, file都照co。
這樣就完成了XPe的 boot dom。
可以拿來開機了。
但是這樣的DOM,第一次開機時,會自動執行"First Boot Agent",大概會花30 min。才會完成所有 target DOM 建制步驟。
開機... XP 畫面 .. 淡藍色 w mouse 約20sec .. First Boot Agent progress bar...
使用磁碟管理 create partition,NTFS 檔案系統,啟動壓縮。設定使用中。
將build好的image copy到 DOM的partition。
因為啟動壓縮,所以ntdlr 要將壓縮取消。
其他的folder, file都照co。
這樣就完成了XPe的 boot dom。
可以拿來開機了。
但是這樣的DOM,第一次開機時,會自動執行"First Boot Agent",大概會花30 min。才會完成所有 target DOM 建制步驟。
開機... XP 畫面 .. 淡藍色 w mouse 約20sec .. First Boot Agent progress bar...
TAP.EXE : different result in differnet environment
TAP是XPe提供,用來偵測target system hardware device的tool。
但是,同樣的target board,run不同的OS,有沒有裝週邊,都會造成不一樣的結果。
也就是說,上面run Win2000, XP prebuild environment,XP,..etc。
執行TAP.EXE,得到的device.pmq會不一樣。
同時,
系統有沒有install driver也會不一樣。
有沒有插上週邊也會不一樣。
所以要得到tagret system比較標準的device.pmq,最好在上面install XP,並且把實際會用到的週邊(touch panel, wifi, camera...)都裝好,然後 run TAP.EXE。
...還真是莫名奇妙的開發步驟呀....
但是,同樣的target board,run不同的OS,有沒有裝週邊,都會造成不一樣的結果。
也就是說,上面run Win2000, XP prebuild environment,XP,..etc。
執行TAP.EXE,得到的device.pmq會不一樣。
同時,
系統有沒有install driver也會不一樣。
有沒有插上週邊也會不一樣。
所以要得到tagret system比較標準的device.pmq,最好在上面install XP,並且把實際會用到的週邊(touch panel, wifi, camera...)都裝好,然後 run TAP.EXE。
...還真是莫名奇妙的開發步驟呀....
why Reiser4 is not in the kernel
還特地建了一個網頁來說明
結果是因為 kernel developer 們認為code 還不夠stable呀.
大概是說. 因為2.6是一個stable kernel develop phase,所以放進去的code必須要有一定程度的stable。讓user能安心使用。
而Resier4 因為是一個build from the ground (從頭開始寫)的file system,所以 雖然已經寫了很久,已經算是堪用,但是還是不夠stable,必須要更compiant with vfs 。所以沒有merge into 2.6。
據說以前的經驗,很多 buggy code在merge into kernel source後,code mantainer debug的動力就降低了,所以kernel developer 希望藉著延後merge的動作,促使 Reiser4 的programmer更快速的debug,讓他進入stable階段。
另外 還說,這是一個open source的世界呀,即使main kernel developer沒有把他納入,但是,如果有人覺得他夠好,已經可以用了,大可自己加上patch,推出自己的distribution,而他如果真的夠好的話,就會有更多的distribution加入。 最後 kernel developer也必定會加入他。 open source 社群是一個自由民主的社會。
結果是因為 kernel developer 們認為code 還不夠stable呀.
大概是說. 因為2.6是一個stable kernel develop phase,所以放進去的code必須要有一定程度的stable。讓user能安心使用。
而Resier4 因為是一個build from the ground (從頭開始寫)的file system,所以 雖然已經寫了很久,已經算是堪用,但是還是不夠stable,必須要更compiant with vfs 。所以沒有merge into 2.6。
據說以前的經驗,很多 buggy code在merge into kernel source後,code mantainer debug的動力就降低了,所以kernel developer 希望藉著延後merge的動作,促使 Reiser4 的programmer更快速的debug,讓他進入stable階段。
另外 還說,這是一個open source的世界呀,即使main kernel developer沒有把他納入,但是,如果有人覺得他夠好,已經可以用了,大可自己加上patch,推出自己的distribution,而他如果真的夠好的話,就會有更多的distribution加入。 最後 kernel developer也必定會加入他。 open source 社群是一個自由民主的社會。
星期三, 7月 19, 2006
DirectX 2006/6 download path
因為MS的WGA,所以一些東西都不能download了,下面是 directx 9.0c 2006/6版本的下載位置
http://www.softwarepatch.com/windows/directx.html
其實也不確定是不是真的是2006/6的,ms網站上最新的version寫的是 DX. 2006/7
很麻煩。
但是VIA很奇怪,做了有加速功能的chip,卻又不公開使用的介面。..
http://www.softwarepatch.com/windows/directx.html
其實也不確定是不是真的是2006/6的,ms網站上最新的version寫的是 DX. 2006/7
很麻煩。
但是VIA很奇怪,做了有加速功能的chip,卻又不公開使用的介面。..
愚蠢! 原來是Power的問題
覺得奇怪,好像ps2的power輸出不夠,開機接上mouse,就開不了機。
有時候接上keyboard也開不了機。
更扯的是,開完機後,一按mouse,竟然就reset,不然就是blackscreen,系統沒反應。
把kvm 加上adaptor後,有好一點。
之後和Leo借了Power (server的),OK。一切都沒問題,接上CDROM也OK。
比較一下兩個power:
有時候接上keyboard也開不了機。
更扯的是,開完機後,一按mouse,竟然就reset,不然就是blackscreen,系統沒反應。
把kvm 加上adaptor後,有好一點。
之後和Leo借了Power (server的),OK。一切都沒問題,接上CDROM也OK。
比較一下兩個power:
.難是兩個都是200W的呢。
+12V : 4A 16A
-12V : 0.3A 0.8A
-5V : 0.2A ?
+5VS : 1.5A 2A
+5V : 14A 21A
+3.3V : 7A 18A
Site Memo : chroot.org : Taiwan Hacker's org
原來台灣也有hacker org。http://www.chroot.org/
網站裡有很多漂亮的文章喔(pdf檔),台灣的hacker果然是比較頻平易近人的。:)
圖因為..
為甚麼hacker網站都要是黑底綠標,紅Title ?
沒有粉色 系的hacker網站?
(真的有的話,看起來應該會更噁心吧...:P)
網站裡有很多漂亮的文章喔(pdf檔),台灣的hacker果然是比較頻平易近人的。:)
圖因為..
Down for Maintenance所以下次再貼囉。
Blogger is temporarily unavailable due to planned maintenance.
This maintenance will last one hour from 5 pm to 6 pm (PDT)
為甚麼hacker網站都要是黑底綠標,紅Title ?
沒有粉色 系的hacker網站?
(真的有的話,看起來應該會更噁心吧...:P)
星期二, 7月 18, 2006
fotocom cd 350 - usb hd box - sucks
到pchome定了這個 嵩剛 usb 2.0 hd box,特價 999 (但也不是最便宜的hd box)。
今天收到,晚上接上 hd後,還ok,只有說 "不知名的partition",所以我把所有partition都刪除,重新create一個,然後format......超慢....到46%的時候,hd 停了,又動,好像power接觸不良一樣,然後,就沒動靜了。
hd好像沒過電一樣。
我按了按面板的button,沒反應。
換一科hd,也一樣。
只好到pchome去留言了..
真差,連這樣low tech的東西也作成這樣,早知道就買一些4, 500 便宜的就好。
寫下來,希望以後 要買的人,能搜尋到這一篇 作為參考。 Q_Q..
還有保佑我一樣在pchome買的kvm 能撐久一點呀....拜託拜託...
C3VCM6 - VIA C3/C7 mini-ATX
C3VCM6,用的chipset是CLE266,
VIA的site : http://www.via.com.tw/en/products/chipsets/c-series/cle266/
C3VCM6沒有完全follow 這一個system diagram,沒有用內建的MAC。
SuperIO跟AudioCodec也不一樣。
北橋:8623/CE
NIC: RTL8100C
MultiIO: ITE8705F/GX
driver download: http://www.viaarena.com/default.aspx?PageID=2
CLE266 VGA driver for XPE SP2 : http://www.viaarena.com/default.aspx?PageID=420&OSID=24&CatID=2500&SubCatID=101
8235 Audio Codec for XPE SP2:
http://www.viaarena.com/default.aspx?PageID=420&OSID=24&CatID=2540&SubCatID=104
VIA的site : http://www.via.com.tw/en/products/chipsets/c-series/cle266/
C3VCM6沒有完全follow 這一個system diagram,沒有用內建的MAC。
SuperIO跟AudioCodec也不一樣。
北橋:8623/CE
Socket 370南橋:8235/CD
內含Apollo Pro266T
Graphic--功能好像蠻強的..
有100M ethernet - 但是板子沒用Audio:ALC655
USB2.0 root x 3 (port x6)
HSP Modem
DirectSound compatible audio controller
RTC w RAM
5 PCI master - 板子只有一個slot
NIC: RTL8100C
MultiIO: ITE8705F/GX
driver download: http://www.viaarena.com/default.aspx?PageID=2
CLE266 VGA driver for XPE SP2 : http://www.viaarena.com/default.aspx?PageID=420&OSID=24&CatID=2500&SubCatID=101
8235 Audio Codec for XPE SP2:
http://www.viaarena.com/default.aspx?PageID=420&OSID=24&CatID=2540&SubCatID=104
使特林引擎,3500 NT -- 真想買
星期一, 7月 17, 2006
不要在註冊時留下任何個人資料..
咕嚕美食網已經因為管理者經營不善倒閉了,所以說呀.... 那些要輸入身份證字號的網站,你又怎會知道他沒有這一天?
本身網站的架構只是簡單的模組,這幾年完全沒有去注意資料安全管理;
只是以營利為目的,後來老闆還因為破產和積欠地下錢莊債務而跑路.........@@
所以盡量不要因為一些網路活動而留下自己的個人資料。
.......
Skype Protocol has been cracked
這一篇(http://www.voipwiki.com/blog/?p=16)寫的。
中國的一個公司做的,已經實際可以運作,作者已經可以跟他們implement的code通話。
據說,他們將不會支援Skype's Super Node technology,也就是說,不會當其他user的relay。
因為Skype在中國是不合法的(?還是說不受歡迎?),所一這個reverse engineering的動作在中國並不違法,反而還可能大受鼓勵。
同時,瞭解了protocol後,中國地區更可有效的block skype。
厲害的應該是Skype的作者吧,他每次都可以在技術失效錢 先將他賣出,skype在去年已經賣給eBay了,他的前一個p2p 軟體也在被告前賣出。
Code大概部會像DVD john那樣release出來吧,不然,就會有一大堆真的skype mobile phone(or TV)了。
中國的一個公司做的,已經實際可以運作,作者已經可以跟他們implement的code通話。
據說,他們將不會支援Skype's Super Node technology,也就是說,不會當其他user的relay。
因為Skype在中國是不合法的(?還是說不受歡迎?),所一這個reverse engineering的動作在中國並不違法,反而還可能大受鼓勵。
同時,瞭解了protocol後,中國地區更可有效的block skype。
厲害的應該是Skype的作者吧,他每次都可以在技術失效錢 先將他賣出,skype在去年已經賣給eBay了,他的前一個p2p 軟體也在被告前賣出。
Code大概部會像DVD john那樣release出來吧,不然,就會有一大堆真的skype mobile phone(or TV)了。
星期日, 7月 16, 2006
billing machine run Windows
find source site with netselect-apt
在google搜尋一下就有說明了。
可以是stable, testing.
我執行, stable的結果是:
testing的結果是..
unstable的結果是..
奇怪,很少台灣的feed site...
moto網站建議把這幾個source list file save在 /etc/apt中,真正的source.list用link 指定到其中之一,比較方便。
netselect-apt會根據apt 設定,所以如果apt有設定proxy,netselect-apt也會經過proxy
netselect-apt testing後面testing就是你要的?
可以是stable, testing.
我執行, stable的結果是:
# the main Debian packages.
deb http://ftp.tiscali.be/pub/debian/ stable main contrib
# Uncomment the deb-src line if you want 'apt-get source'
# to work with most packages.
# deb-src http://ftp.tiscali.be/pub/debian/ stable main contrib
# the non-US Debian packages.
deb http://debian.nctu.edu.tw/debian-non-US/ stable/non-US main contrib
# Uncomment the deb-src line if you want 'apt-get source'
# to work with most non-US packages
# deb-src http://debian.nctu.edu.tw/debian-non-US/ stable/non-US main contrib
testing的結果是..
# the main Debian packages.
deb http://mirror.aarnet.edu.au/debian/ testing main contrib
# Uncomment the deb-src line if you want 'apt-get source'
# to work with most packages.
# deb-src http://mirror.aarnet.edu.au/debian/ testing main contrib
# the non-US Debian packages.
deb http://linux.cdpa.nsysu.edu.tw/debian-non-US/ testing/non-US main contrib
# Uncomment the deb-src line if you want 'apt-get source'
# to work with most non-US packages
# deb-src http://linux.cdpa.nsysu.edu.tw/debian-non-US/ testing/non-US main contrib
unstable的結果是..
# the main Debian packages.
deb http://mirror.pacific.net.au/debian/ unstable main contrib
# Uncomment the deb-src line if you want 'apt-get source'
# to work with most packages.
# deb-src http://mirror.pacific.net.au/debian/ unstable main contrib
# the non-US Debian packages.
deb http://ftp.tku.edu.tw/OS/Linux/distributions/debian/non-US/ unstable/non-US main contrib
# Uncomment the deb-src line if you want 'apt-get source'
# to work with most non-US packages
# deb-src http://ftp.tku.edu.tw/OS/Linux/distributions/debian/non-US/ unstable/non-US main contrib
奇怪,很少台灣的feed site...
moto網站建議把這幾個source list file save在 /etc/apt中,真正的source.list用link 指定到其中之一,比較方便。
netselect-apt會根據apt 設定,所以如果apt有設定proxy,netselect-apt也會經過proxy
retrieve another character encoding archieve
用Windows就是麻煩,有些zip檔是其他語系的,所以解不開。
只好借用Linux。
先傳到linux上,用unzip解開。
如果可以 cd 進去的,就ok,也可以rename folder name (用putty copy-paste 輸入foldername)。
如果不能cd 進去的,就要copy到apache www data folde,用browser 來看。
然後用 wget 192.168.x.x/[unzipped foldername] -r -nd 來抓
-r 是recursive的意思
-nd 是說不要聯foldername也建立,否則又進不去了
只好借用Linux。
先傳到linux上,用unzip解開。
如果可以 cd 進去的,就ok,也可以rename folder name (用putty copy-paste 輸入foldername)。
如果不能cd 進去的,就要copy到apache www data folde,用browser 來看。
然後用 wget 192.168.x.x/[unzipped foldername] -r -nd 來抓
-r 是recursive的意思
-nd 是說不要聯foldername也建立,否則又進不去了
星期六, 7月 15, 2006
delete unqualified named folder in Windows
很重要的,趕快記下來。
有些用zip 解開的檔案會有一些奇怪的字,導致沒法delete....
再這 http://www.shsh.ylc.edu.tw/~taichis/wp/20060705/446 有寫方法..
在cmd 下用 dir/x 顯示8.3 檔名,然後 del 那個8.3格式的檔名,就可以刪掉
有些用zip 解開的檔案會有一些奇怪的字,導致沒法delete....
再這 http://www.shsh.ylc.edu.tw/~taichis/wp/20060705/446 有寫方法..
在cmd 下用 dir/x 顯示8.3 檔名,然後 del 那個8.3格式的檔名,就可以刪掉
Full Read-Write Linux NTFS Driver : OpenSource
7/14 linux-ntfs-dev anounce ntfs-3g的ntfsmout 跟libntfs 已經測試完成。
很有趣的的是anouncer說,因為他要去北極探險了,所以,雖然可能還有些問題,他還是先release好了 ,以防萬一。
http://sourceforge.net/mailarchive/forum.php?thread_id=23836054&forum_id=2697
有full installtion instruction.
很有趣的的是anouncer說,因為他要去北極探險了,所以,雖然可能還有些問題,他還是先release好了 ,以防萬一。
http://sourceforge.net/mailarchive/forum.php?thread_id=23836054&forum_id=2697
有full installtion instruction.
星期五, 7月 14, 2006
some problem about QCOM
使用便宜的 主機板,配上QCOM的usb wifi。
結果一些機器常常發生QCOM的Wifi MAC Address 讀取 0xFFFFFF的狀況...(9/600)
查QCOM wifi dongle上有一顆AT46,大概是MAC Address的EEPROM吧..
Th 1 先生說,EEPROM的I/O pin腳要接pull high,否則power up時,mcu的pin腳或許會有不規則波形,影響到EEPROM,導致EEPROM被reset或修改(10000隻猴子在type writer上亂打,有機會會剛好打出一本 莎士比亞全集)。
QCOM當然是不會給線路圖囉,實際上 QCOM當初的contact windows也已經離職了。
所以,只好請Eng自己量一下...
LEO用全域搜尋法,用三用電錶量2,3,4 pin是否和哪一個 device是短路的....
目前 LEO量測出... DI pin 有一個電阻到VCC,但是沒有焊...@_@ ... (costdown 到這個程度 ???)
LEO 繼續量VCC , DI, power up的暫態時序。
星期四, 7月 13, 2006
more .. about Marketing..
「三星品牌做了三十多年,但是真正的轉機就是在手機,三星手機的高檔的形象與產量,把三星品牌形象整個翻過來,」李焜耀提高語調地說。這個不知道是個人的觀點,還是有甚麼依據?
明基將獲得西門子在GSM、GPRS以及3G等領域內的領先關鍵專利技術,同時還有西門子2000多人的研發團隊。相對 於明基手機目前800人的研發團隊而言,這絕對是如虎添翼,對此,李焜耀也毫不掩飾內心的欣喜:“這些研發人員平均工作經驗超過10年,如果我們自己來培 養的話,5年都不夠!”沒有想到...工作經驗多,所以薪水也多...
其中,一一三名為研發人員,與研發相關的部門也有二十八名員工裁撤,換句話說,此次裁員有超過一百四十名、將近五一%是研發人員。屬於PM功能的Category Management部門,計畫裁減八十二名,至於中央功能部門也將有五十四個職位遭到刪減。所以,最後這些研發人員都被裁了,剩下一些有"就業保證"的,在保證過期後也會走路。
相對於九個月前明基董事長李焜耀對於德國研發團隊能力讚不絕口,BenQ Mobile卻持續縮減德國研發人員,據了解,持續裁撤德國研發人力,是將成本高昂的德國研發基地,逐步移往成本相對低廉的台灣與中國計畫的一部分,也讓BenQ Mobile今年將減少約二成的產品開發計畫。
本來 一份錢一分貨,東西好,研發時間就會長。
不然,就找些design house 的solution 兜一兜,設計一個炫的殼,不就最快最省錢?
西門子的RD都走路後,BenQ的手機大概還是和以前一樣吧....
星期三, 7月 12, 2006
boot CE on VMWARE via SBOOT
因為vmware的NIC : PCNet32 不在CE的bsp 中,所以要用Serial Port來download image。
Follow Tutorial : CEPC 的部份,作boot disk。
因為沒有Floppy,所以follow上一篇,download vfd (virtual floppy disk),create一個image : floppy B。
follow tutorial ,將cepc boot install在floppy B。
在作好的 cepc boot floppy 中有readme (其實就是DOS boot disk)。說到Serial Boot 使用sboot作bootloader,只會用 IO Address : 0x2F8 作download,所以要先將VMWARE的serial port,在bios set中設定為 0x2F8。
Platform builder,將CEPC BSP的OS build好,設定 serial download:
Target -- Connectivity -- Download (Serial : 選一個port) -- Setting (8-N-1, NO FLOW CONTROL).
下面 transport也一樣設 Serial,選一個 port。
選Attache Device -- 出現一個waitting request的dialog.
VMWARE使用floppy開機,floppy用剛剛用vfd做好image。
開機後,出現item選項,選 boot from sboot。
看看platform builder的waiting request dialog有沒有動靜,,,要等2-3分..開始有download.. 2%..
很慢,整個image (41M) download完約要52min.
download完後就開始執行啦(在platform builder的debug output window可以看到 loading dll的log。
完成
剛開始發生問題的幾點是..
Follow Tutorial : CEPC 的部份,作boot disk。
因為沒有Floppy,所以follow上一篇,download vfd (virtual floppy disk),create一個image : floppy B。
follow tutorial ,將cepc boot install在floppy B。
在作好的 cepc boot floppy 中有readme (其實就是DOS boot disk)。說到Serial Boot 使用sboot作bootloader,只會用 IO Address : 0x2F8 作download,所以要先將VMWARE的serial port,在bios set中設定為 0x2F8。
Platform builder,將CEPC BSP的OS build好,設定 serial download:
Target -- Connectivity -- Download (Serial : 選一個port) -- Setting (8-N-1, NO FLOW CONTROL).
下面 transport也一樣設 Serial,選一個 port。
選Attache Device -- 出現一個waitting request的dialog.
VMWARE使用floppy開機,floppy用剛剛用vfd做好image。
開機後,出現item選項,選 boot from sboot。
看看platform builder的waiting request dialog有沒有動靜,,,要等2-3分..開始有download.. 2%..
很慢,整個image (41M) download完約要52min.
download完後就開始執行啦(在platform builder的debug output window可以看到 loading dll的log。
完成
剛開始發生問題的幾點是..
- sboot只會使用 0x2F8 port作image download polling,所以要變更VMWARE serial port iobase
- platform builder的target-connectivity的serial port setting,default是hardware flowcontrol。要改為沒有flow control
- 進入sboot後,會出現jmp to 0x?????然後就好像當機,要等一陣子(2~3min),platform builder的request dialog才會出現progress bar。
- 完成download後,VMWare是black screen,看了platform builder的debug output才確定還在run
Virtual Floppy Disk : VFD - Opensource software
一個使用file作為floppy image的driver。可以在windows 中顯示出 floppy disk 。
可以用在很多沒有floppy的系統上 (現在還有機器有floppy的嗎?)。
download後 解開,執行 vfdwin.exe (gui介面),或 vfd.exe (console介面) 進行安裝和設定。
INSTALL
START
Driver0 - Change (Assign Driver Letter : B)
Driver0 - Open (ImageFile : ?, File, Create)
檔案管理員就可以看到Floppy B了。
可以用在很多沒有floppy的系統上 (現在還有機器有floppy的嗎?)。
download後 解開,執行 vfdwin.exe (gui介面),或 vfd.exe (console介面) 進行安裝和設定。
INSTALL
START
Driver0 - Change (Assign Driver Letter : B)
Driver0 - Open (ImageFile : ?, File, Create)
檔案管理員就可以看到Floppy B了。
bootloader for CE x86 platform
CE在x86上可以用的bootloader有很多種(依照他所在的位置和功能)
- 在 BIOS的flash上,取代BIOS的 : romboot
- 在 HD (floppy?)的MBR:bios loader
- 在 HD (floppy?) root partition中:loadcepc.exe
星期二, 7月 11, 2006
Debian Sarge Testing.. support VMWARE share USB
剛剛發現 Debian Sarge Testing 可以支援VMWare的USB 裝置。
也就是說,在VMWARE中 安裝Debian Sarge Testing,插入USB裝置時,在VMware的USB裝置中會出現,也可以選disable。
所以就可以用拇指碟啦。
以前沒有upgrade到testing的話,不行這樣用。
也就是說,在VMWARE中 安裝Debian Sarge Testing,插入USB裝置時,在VMware的USB裝置中會出現,也可以選disable。
所以就可以用拇指碟啦。
以前沒有upgrade到testing的話,不行這樣用。
CE 5.0 Platform Builder - some idea...
CE 5.0 的 Platform Builder是一個IDE,包含 :
在 "非emulator"的環境時,要實做bootloader (floppy),然後用ethernet來作remote image download,remote application debugging.
.... 試試 CEPC 有沒有可以用VMWare來run..
- Configure and build CE OS : 選擇BSP和kernel, User Component組合成一個OS image。
- SDK generator : 根據制定好的OS build出一個SDK,讓eMVC的programmer可以用這個SDK來開發程式。
- Emulator : 一個x86的emulator,可以test run image和 run application
- Simple Project manage : user application 簡單的create, build
在 "非emulator"的環境時,要實做bootloader (floppy),然後用ethernet來作remote image download,remote application debugging.
.... 試試 CEPC 有沒有可以用VMWare來run..
Google了一下,原來很多人都有這樣的想法,但是因為VMWare的ethernet card是AMD的PCnet ,CE沒有支援。.
VMWare的Linux下lspci 出現 ethernet card是 PCnet32 79C970.
所以到AMD的網站去download,AMD PCnet有兩種 PCNet PCI和PCnet-Home.
PCNet PCI是100Mb,PCNet-Home是for embedded system,只有10Mb。
Linux sourcecode中 driver/net下pcnet32.c 可以看到 PCNet PCI和Home都是用這一個source。
AMD的網站可以download到PCNet-Home的driver source,但是是for CE 2.1的
所以? 從Linux Driver,參考 Home的Driver和CE Help中Migration Driver from ???
Something about platform builder : build process
當使用Build OS - Buils and Sysgen時,會用Build.exe作build的動作。
Build.exe 搜尋folder內是否有..
Build Run-Time Image的動作分為以下部份:
所有plateform build的library和3rd party提供的sourcecode會被整合在一個run-time image檔: Nk.bin。
Compile Phase
Build.exe 搜尋folder內是否有..
- dirs這個file,如果有的話,到dirs所寫的目錄作一樣的操作
- sources這個file。,如果有的話,呼叫Nmake 來build sources所指的sources files。
Build Run-Time Image的動作分為以下部份:
- Compile Phase
- Sysgen Phase
- Release Copy Phase
- Make Run-Time Image Phase
- Generate Header file
- Link Modules
- Copy Modules to Release directory
- Generate run-time image
所有plateform build的library和3rd party提供的sourcecode會被整合在一個run-time image檔: Nk.bin。
Compile Phase
將sourcecode compile成static library,將 .rc 檔compile成 .res,並且依照localize的設定作轉換。Sysgen
根據Catalog的內容SET/CLEAR Sysgen的變數,這個動作是由 Cesysgen.bat 完成的 (這個file在project folder的Oak/Misc下。噁...emulator 停掉了,要reboot Windows 才行...
CE Platform Builder Installation
先安裝CE 5.0 Platform Builder,會安裝platform builder和CE System。
同時會有一個選項是Test Code - 會得到比較多的CE source code,需要額外的license。
完成後,按"F1",出現help document。
Welcome to Windows CE 5.0 -- Tutorials -- 有三個Tutorial,沒有硬體的時候用Emulator試試。
Set Active Project 要選debug,才會有debug message。
"Build and Sysgen" : 開始build target。
Target -- Connectivity Options -- Kernel Service Map --
Download : Emulator
Transport : Emulator
Debugger : KdStub
...懶得寫了..都是一些奇怪的東西...
Target -- Attach Device 就可以看到Emulator開啟,剛剛的image download到emulator上,開始執行。
完成,不run的時候,從Target -- detach device就可以停止。
同時會有一個選項是Test Code - 會得到比較多的CE source code,需要額外的license。
所以要額外的$$才可以拿到多一點的source code安裝時會詢問SN,所以要先準備好。
安裝是可以安裝,直接勾選"Install to HD"
完成後,按"F1",出現help document。
Welcome to Windows CE 5.0 -- Tutorials -- 有三個Tutorial,沒有硬體的時候用Emulator試試。
很詳細...step by step..Platform -- Setting -- Build Option中有一個"Enable Full Kernel Mode":Thread 是要run在User Mode還是Kernel Mode,在Kernel Mode的話,kernel會省略掉security checking,所以performance會比較好(一點),但也因為如此,system被惡意軟體攻擊的機會也比較大。
Set Active Project 要選debug,才會有debug message。
"Build and Sysgen" : 開始build target。
..很久...但是有log,有一段會停止log,看起來幾乎像是完成一樣..但是還沒有,status bar右邊可以看到"building"的指示...可以用來辨別是否build 完成..很久... 3.0G +2GRam 竟然還要 30 min.完成後,接著作Emulator download image and testing.....一個小時了,還在build...
Target -- Connectivity Options -- Kernel Service Map --
Download : Emulator
Transport : Emulator
Debugger : KdStub
...懶得寫了..都是一些奇怪的東西...
Target -- Attach Device 就可以看到Emulator開啟,剛剛的image download到emulator上,開始執行。
完成,不run的時候,從Target -- detach device就可以停止。
星期一, 7月 10, 2006
Porting FlashPlyer to Linux : a real hard thing.
因為實在太多人要flash player了,所以google了一下,看到這一篇..據說是flash player的desginer (programmer) 的blog "Porting the Flash Player to "alternative platforms" : 其中的一段..
接著提到實做部份..
最後,....
所以flash player還真是一個"訂做"的繪圖平台,也大概是這樣,才可以用最小的資料,達到最漂亮的圖型展示,所以,才會有這麼多人為了單純的追求"炫"而使用他。
不過,也可以看出 如果有圖形加速功能的機器,大概就可符合flash player的需求,只是需要重新寫"大量"的code吧!
...真他媽的難,比porting到OSX難多了。Porting一個console的program到Linux所作的是一堆瑣碎的事,Porting media application到Linux 簡直就是惡夢。所以困難點之一 就是因為Linux是完全的多樣化OS,不像OSX跟Windows一樣,有統一的介面。
從sound support開始,我們要考慮很多sound standard(ALSA, OSS, aRTs, ESD, etc),GUI/Windows Framework也是一堆(X11,QT,GTK, copy and past.etc),然後是IME(如果linux真有這種東西的話..),font support更是全面性的問題,其他還有很多 分枝 出來的標準。
還有...要不要考慮PowerPC, x86-64 ?
接著提到實做部份..
...Linux的compiler是gcc,所以原source code中以intel compiler style寫的MMX 指令部份會完全不能用。現在的flash player執行速度可以接受,主要就是在MMX 的code。如果將MMX的code改由C來作,效能會減少50%。....哇!接著就是sample code,真正的sample code,說明一段code,intel notation,轉到C,然後是AT&T(gcc) notation, SSE,甚至是PowerPC的AltVel,
最後,....
看過以上的說明,如果你覺得還好...那,你就是Macromedia目前急切需要的人了,我們找Linux的programmer有好一陣子了(但是到現在還是沒有找到適合的,..我猜他們都到Google去了吧..),最好,他們還是在家中工作的coder,因為這工作需要每天和Macromedia的team合作。
如果你覺得不錯,就快來吧 (還真的附有申請的link..)。你不請可以在Linux上作些有趣的是,甚至 還有薪水拿喔
所以flash player還真是一個"訂做"的繪圖平台,也大概是這樣,才可以用最小的資料,達到最漂亮的圖型展示,所以,才會有這麼多人為了單純的追求"炫"而使用他。
不過,也可以看出 如果有圖形加速功能的機器,大概就可符合flash player的需求,只是需要重新寫"大量"的code吧!
星期五, 7月 07, 2006
How do that know the real marketsize ?
競爭對手愛爾達科技董事長陳怡君就直言,「去年(收費網路影音服務)整體市場規模才二億五千萬元,今年至多成長到三億五千萬元,他們說的『數字』幾乎不可能出現。」這些人好厲害,都知道市規模是多少,還知道成長的限制,不知道是怎麼調查來的...
星期四, 7月 06, 2006
X protocol - begin
X Windows 由Server經由socket 聽取 client 的 request,在螢幕上繪圖。
X Server除了負責螢幕的繪圖動作,同時還負責mouse, keyboard的輸入,將這些輸入動作經由socket利用event傳給 client。
X Sever太大了,所以拿nanaX 的code來看。配合 "X Windows System Protocol"
srvmain.c 的 GsSelect( ) 中的GsHandleClient( ) 負責從stream中讀取command,parse and execute.
GsHandleClient 中 的nxReq 就是Request : ref protocol "Request Format"
extension 的定義不在X protocl 的core protocol定義中。
hilength - length 合併成一個24 bit的data,代表request packet的length (這個跟X protocol 講的好像不一樣,X protocol用一個16 bit的欄位代表,單位是4 bytes)。
ref /usr/X11R6/include/X11/Xproto.h 有類似的宣告:
這127個 operation 就是X Server提供的core protocol (?),可以對照pdf sect.9 的內容,解釋每個operation的動作和argument。
從這裡可以看到XServer提供的功能都是很基本的 。
--- 從Wiki上查到。X protocol 能一直維持 128個,不被增加的原因是X Server的設計理念: "如果不是 非他不可, 否則不用把他加進來"。
效能瓶頸大概有兩部份:
Client/Server架構就....不知道要怎麼解決了...
X Server除了負責螢幕的繪圖動作,同時還負責mouse, keyboard的輸入,將這些輸入動作經由socket利用event傳給 client。
X Sever太大了,所以拿nanaX 的code來看。配合 "X Windows System Protocol"
srvmain.c 的 GsSelect( ) 中的GsHandleClient( ) 負責從stream中讀取command,parse and execute.
GsHandleClient 中 的nxReq 就是Request : ref protocol "Request Format"
typedef struct {reqType : opcode , 128 ~255 reserved for extension.
BYTE8 reqType; // opcode
BYTE8 hilength;
UINT16 length;
} nxReq;
extension 的定義不在X protocl 的core protocol定義中。
hilength - length 合併成一個24 bit的data,代表request packet的length (這個跟X protocol 講的好像不一樣,X protocol用一個16 bit的欄位代表,單位是4 bytes)。
ref /usr/X11R6/include/X11/Xproto.h 有類似的宣告:
typedef struct _xReq {接下來 Xproto.h 就宣告"Request codes",定義了1~127 的Code Name (Operation)。
CARD8 reqType;
CARD8 data;
CARD16 length B16;
} xReq;
這127個 operation 就是X Server提供的core protocol (?),可以對照pdf sect.9 的內容,解釋每個operation的動作和argument。
從這裡可以看到XServer提供的功能都是很基本的 。
--- 從Wiki上查到。X protocol 能一直維持 128個,不被增加的原因是X Server的設計理念: "如果不是 非他不可, 否則不用把他加進來"。
效能瓶頸大概有兩部份:
- Client/Server架構,decode/decode和透過socket傳輸,比較花時間。
- X Server本身提供的command很少。沒有辦法利用到hardware加速功能。
Client/Server架構就....不知道要怎麼解決了...
devfs is gone
在 http://www.kroah.com/log/2006/06/29/#2006_06_29 看到,kernel 正式將devfs 的支援移除了 ( http://article.gmane.org/gmane.linux.kernel.commits.head/82801 )。
因為udev 更好的原因(?)。
對embedded system來說,devfs 不錯,不用手動建dev node,也不用寫script。所以root image建起來比較簡單。
但是這個"簡單"卻是由"修改device driver"來完成的,用devfs的話,以前的 driver都要修改。
還有麻煩的 device name問題,要統一。
大概是這個原因,所以不適合在desktop以上的大(相較於embedded)系統吧。
LDD 這本書還有說明devfs呢,看來,只有在 2.4的 kernel會有用了。也還好。因為為了size的關係,一些小embedded 用linux的還是 2.4。
實際devfs也挺麻煩,拿到driver都要改 ---- 除非他原來就有support (到現在沒看到過..)。
因為udev 更好的原因(?)。
對embedded system來說,devfs 不錯,不用手動建dev node,也不用寫script。所以root image建起來比較簡單。
但是這個"簡單"卻是由"修改device driver"來完成的,用devfs的話,以前的 driver都要修改。
還有麻煩的 device name問題,要統一。
大概是這個原因,所以不適合在desktop以上的大(相較於embedded)系統吧。
LDD 這本書還有說明devfs呢,看來,只有在 2.4的 kernel會有用了。也還好。因為為了size的關係,一些小embedded 用linux的還是 2.4。
實際devfs也挺麻煩,拿到driver都要改 ---- 除非他原來就有support (到現在沒看到過..)。
星期三, 7月 05, 2006
Success - Shutdown Windows, in C++ with ExitWindowsEx
以下是Code:
不知道是甚麼問題....是不是argument 沒有加上 POWEROFF - 0x08 ?
的確,ExitWindowsEx 的argument使用
// shutdown.cpp : main project file.執行後就會關機了,但是power不會off,會到..."現在可以自行關機了..."
#include "stdafx.h"
using namespace System;
using namespace System::Runtime::InteropServices;
[DllImport("kernel32.dll")]
extern "C" int* GetCurrentProcess(void);
[DllImport("advapi32.dll")]
extern "C" int OpenProcessToken(int* ProcessHandle,unsigned long DesireAccess, int** TokenHandle);
typedef struct _LUID {
unsigned long LowPart;
long HighPart;
} LUID, *PLUID;
[DllImport("advapi32.dll")]
extern "C" int LookupPrivilegeValue(char* lpSystemName, char* lpName, PLUID lpLuid);
typedef struct _LUID_AND_ATTRIBUTES {
LUID Luid;
unsigned long Attributes;
} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
typedef struct _TOKEN_PRIVILEGES {
unsigned long PrivliegeCount;
LUID_AND_ATTRIBUTES Privileges[1];
} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;
[DllImport("advapi32.dll")]
extern "C" int AdjustTokenPrivileges(int* TokenHandle, int DisableAllPriviliges, PTOKEN_PRIVILEGES NewState,
unsigned long BufferLength, PTOKEN_PRIVILEGES PreviousState,
unsigned long ReturnLength);
[DllImport("kernel32.dll")]
extern "C" unsigned long GetLastError(void);
[DllImport("user32.dll")]
extern "C" int ExitWindowsEx(unsigned int uFlags, unsigned long dwReason);
const int SE_PRIVILEGE_ENABLED = 0x00000002;
const int TOKEN_QUERY = 0x00000008;
const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
char *SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
const int EWX_LOGOFF = 0x00000000;
const int EWX_SHUTDOWN = 0x00000001;
const int EWX_REBOOT = 0x00000002;
const int EWX_FORCE = 0x00000004;
const int EWX_POWEROFF = 0x00000008;
const int EWX_FORCEIFHUNG = 0x00000010;
int main(array<System::String ^> ^args)
{
int* hToken;
TOKEN_PRIVILEGES tkp;
if( !OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken) ) {
Console::WriteLine(L"Failed!!\n");
return 0;
}
LookupPrivilegeValue(0,SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivliegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, 0, &tkp, 0, (PTOKEN_PRIVILEGES)0, 0);
if(GetLastError() != 0){
Console::WriteLine(L"Error!\n");
return 0;
}
if(!ExitWindowsEx(1,0)){
Console::WriteLine(L"ExitFail\n");
return 0;
}
Console::WriteLine(L"Hello World");
return 0;
}
不知道是甚麼問題....是不是argument 沒有加上 POWEROFF - 0x08 ?
的確,ExitWindowsEx 的argument使用
EWX_SHUTDOWN | EWX_FORCE | EWX_POWEROFF就會自動poweroff了
More on Shutdown
這一篇msdn是Shutdown的步驟 :
BOOL MySystemShutdown()但是是用SDK 寫的。
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
// Get a token for this process.
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return( FALSE );
// Get the LUID for the shutdown privilege.
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get the shutdown privilege for this process.
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS)
return FALSE;
// Shut down the system and force all applications to close.
if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,
SHTDN_REASON_MAJOR_OPERATINGSYSTEM |
SHTDN_REASON_MINOR_UPGRADE |
SHTDN_REASON_FLAG_PLANNED))
return FALSE;
return TRUE;
}
要找一找這些typedef的原型是甚麼...
可以用Visual Studio , New 一個Win32App,加入API Name,就可以用 Go to Definition .. 到declaration 的地方Visual Studio 和 CodeWarrior, SourceInsight 不一樣,winbase.h
不需要build project就可以做到cross-ref edit(browse)HANDLE GetCurrentProcess( ) : kerne32.dll這麼多typedef ,怎麼找 @_@....
BOOL OpenProcessToken ( // int
HANDLE ProcessHandle, // void*
DWORD DesiredAccess, // unsigned long
HANDLE* TokenHandle // void**
) : advapi32.dll
winbase.h
BOOL LookupPrivilegeValue : ( // int
LPCTSTR lpSystemName, // wchar_t
LPCTSTR lpName, // wchar_t
PLUID lpLuid // ----- structre
) : advapi32.dll
typedef struct _LUID {
DWORD LowPart; // unsigned long
LONG HighPart; // long
} LUID, *PLUID;
win
BOOL AdjustTokenPrivileges( // int
HANDLE TokenHandle, // void
BOOL DisableAllPrivileges, // int
PTOKEN_PRIVILEGES NewState, // --- structure
DWORD BufferLength, // unsigned long
PTOKEN_PRIVILEGES PreviousState, // --- structure
PDWORD ReturnLength // unsigned long
) : advapi32.dll
typedef struct _TOKEN_PRIVILEGES {
DWORD PrivilegeCount; // unsigned long
LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY]; // --- structure, ANYSIZE_ARRAY = 1
} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;
typedef struct _LUID_AND_ATTRIBUTES {
LUID Luid; // --- structure - prev
DWORD Attributes; // unsigned long
} LUID_AND_ATTRIBUTES, * PLUID_AND_ATTRIBUTES;
winbase.h
WINBASEAPI
DWORD // unsigned long
WINAPI
GetLastError() : kernel32.dll
winuser.h
BOOL WINAPI ExitWindowsEx( // int
UINT uFlags, // unsigned int
DWORD dwReason // unsigned long
) : user32.dll
利用Visual Studio來找... Create一個Win32 Form App.
到sourcecode...按右鍵就有 - Goto Definition.
在windef.h中有定義
HANDLE : void*
BOOL : int
DWORD : unsigned long
...其實直接在Visual Studio中用 Go to Definition..反覆 就可以到 type definition的地方。
.NET and COM : Interoperability
More about Interop in Managed , Unmanaged C++
上一篇不能動,應該說是沒效,系統不會shutdown。
所以從基本開始。
原來這種呼叫以前SDK 的DLL的動作叫 Interop.
MSDN 這一篇有範例跟說明 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcwlkSysimportAttributeTutorial.asp
第一段: 從Managed Application 呼叫 Unmanaged Code.
範例是呼叫 User32.dll的 MessageBox
EntryPoint說名function的進入點,如果沒寫,default就是與function同名。
CharSet 會讓呼叫時依據執行平台的內容 呼叫MessageBox或是MessageBoxW。
之後就是copy MessageBox的 declaration..並且加上 extern "C"
但是我用VC++ Express + Platform SDK 2003 Server build上面的example,會出現Unicode沒定義的錯誤。
把 CharSet = Unicode改為 CharSet=CharSet::Unicode後就OK了。
這一篇有個更簡單的..
呼叫User32.dll的 GetSystemMetrics
一樣,先宣告GetSystemTime argument的structure。
但是原WORD keyword已經不支援,所以要改成short。
同樣一篇,接著是"Dealing with String,似乎可以解決uncode的問題..(因為他直接使用MessageBoxW):
執行結果,即使使用中文String也ok,所以大概是可以吧。
所以使用Win32API的方式大概是..先找到API所在的DLL,再找到API的prototype。
將原Win32 SDK的argument type name改為Managed C++ typename (where is the conversion table ?)。
就可以直接使用了。
所以從基本開始。
原來這種呼叫以前SDK 的DLL的動作叫 Interop.
MSDN 這一篇有範例跟說明 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcwlkSysimportAttributeTutorial.asp
第一段: 從Managed Application 呼叫 Unmanaged Code.
範例是呼叫 User32.dll的 MessageBox
#using <mscorlib.dll>DllImport用來告訴compiler有個function在User32.dll中。
using namespace System::Runtime::InteropServices;
// for DllImportAttribute
namespace SysWin32
{
[DllImport("user32.dll", EntryPoint = "MessageBox", CharSet = CharSet::Unicode)]
int MessageBox(void* hWnd, wchar_t* lpText, wchar_t* lpCaption,
unsigned int uType);
}
int main( )
{
SysWin32::MessageBox( 0, L"Hello world!", L"Greetings", 0 );
}
EntryPoint說名function的進入點,如果沒寫,default就是與function同名。
CharSet 會讓呼叫時依據執行平台的內容 呼叫MessageBox或是MessageBoxW。
之後就是copy MessageBox的 declaration..並且加上 extern "C"
但是我用VC++ Express + Platform SDK 2003 Server build上面的example,會出現Unicode沒定義的錯誤。
把 CharSet = Unicode改為 CharSet=CharSet::Unicode後就OK了。
follow 這一篇
Specify a Character Set,用CharSet.Unicode,結果出現 mscorlib.dll::interopService::CharSet 沒有 . 動作,所以改為CharSet::之後就自動出現幾個Charset property 可以選了 :)
這一篇有個更簡單的..
呼叫User32.dll的 GetSystemMetrics
// compile with: /clr.這一篇是structure argument的例子 kernel32.dll的 GetSystemTime.
using namespace System;
using namespace System::Runtime::InteropServices;
value class Win32 {
public:
[DllImport("User32.dll")]
static int GetSystemMetrics(int);
enum class SystemMetricIndex {
// Same values as those defined in winuser.h.
SM_CXSCREEN = 0,
SM_CYSCREEN = 1
};
};
int main() {
int hRes = Win32::GetSystemMetrics( safe_cast<int>(Win32::SystemMetricIndex::SM_CXSCREEN) );
int vRes = Win32::GetSystemMetrics( safe_cast<int>(Win32::SystemMetricIndex::SM_CYSCREEN) );
Console::WriteLine("screen resolution: {0},{1}", hRes, vRes);
}
一樣,先宣告GetSystemTime argument的structure。
但是原WORD keyword已經不支援,所以要改成short。
#include "stdafx.h"和原來文章的code不一樣的的方式,WriteLine的argument有用__box prefix,compile時出現 error : __box需要 /clr : oldstyle,所以我就把他拿掉了。
using namespace System;
using namespace System::Runtime::InteropServices;
typedef struct _SYSTEMTIME {
short wYear;
short wMonth;
short wDayOfYear;
short wDay;
short wHour;
short wMinute;
short wSecode;
short wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;
[DllImport ("kernel32.dll")]
extern "C" void GetSystemTime(SYSTEMTIME* pSystemTime);
int main(array<System::String ^> ^args)
{
SYSTEMTIME *pSystemTime = new SYSTEMTIME();
GetSystemTime(pSystemTime);
Console::WriteLine("Current Month is {0}", pSystemTime->wMonth);
return 0;
}
同樣一篇,接著是"Dealing with String,似乎可以解決uncode的問題..(因為他直接使用MessageBoxW):
#include "stdafx.h"和原Example不一樣得的方式 MessageBox argument char* 在example是String *,但是compile出現System::String cast問題,參考前一個例子,用wchar_t代,結果出現 char[10]不能轉換成 wchar,才改用char *。
using namespace System;
using namespace System::Runtime::InteropServices;
[DllImport("user32.dll")]
extern "C" void MessageBox(int hWnd, char* lpText, char* lpCaption, unsigned int uType);
int main(array<System::String ^> ^args)
{
MessageBox(0,"Hi There!","888",0);
Console::WriteLine(L"Hello World");
return 0;
}
執行結果,即使使用中文String也ok,所以大概是可以吧。
所以使用Win32API的方式大概是..先找到API所在的DLL,再找到API的prototype。
將原Win32 SDK的argument type name改為Managed C++ typename (where is the conversion table ?)。
就可以直接使用了。
星期二, 7月 04, 2006
Shutdown Windows in VC++ 2003 with CLR
Shutdown的API是 ExitWindowsEx( ),屬於user32.dll
.NET中要使用dll 要先用 dllimport
只有在msdn sample code中找到C#的example
然後在這一篇中提到Managed C++中使用 DLL 的方法:
所以修改一下,大概是..
加上
然後就可以在source code中使用
好像還有3個 Win API要call ...目前只有找到C#的example..
http://www.chinaaspx.com/comm/dotnetbbs/Go.aspx?Forum_ID=6&id=73121&PPage=1&Action=next
.NET中要使用dll 要先用 dllimport
只有在msdn sample code中找到C#的example
然後在這一篇中提到Managed C++中使用 DLL 的方法:
所以修改一下,大概是..
加上
using namespace System::Runtime::InteropServices;取代prototype 宣告。和
[DllImport("user32.dll", EntryPoint="ExitWindowsEx") ]
extern "C" bool ExitWindowsEx( int flg, int rea );
const int EWX_LOGOFF = 0x00000000;作flash const宣告。
const int EWX_SHUTDOWN = 0x00000001;
const int EWX_REBOOT = 0x00000002;
const int EWX_FORCE = 0x00000004;
const int EWX_POWEROFF = 0x00000008;
const int EWX_FORCEIFHUNG = 0x00000010;
然後就可以在source code中使用
ExitWindowsEx (EWX_POWEROFF | EWX_FORCE , 0x00030001 );.!!在NT 以上系統不能這樣作,要先取得適當權限後才行。
好像還有3個 Win API要call ...目前只有找到C#的example..
http://www.chinaaspx.com/comm/dotnetbbs/Go.aspx?Forum_ID=6&id=73121&PPage=1&Action=next
^ and gcnew : not MS specific, a New C++ standard
上次我以為 ^ 和 gcnew 是MS 自創的,結果是我自己太孤陋寡聞...
有個新的東西叫 Managed C++,但是語法和C++差異太大,所以又有Managed C++ Extension和C++/CLI ,讓Managed C++繼續有C++的語法。
這兩個東西 :^ 和gcnew 就是C++/CLI的語法。
gcnew和 以前的new類似,但是gcnew 是managed,也就是說,有類似 java 的garbage collection,不用programmer操心什麼時候要delect。
為了和new出來的object有所區別,gcnew 出來的object reference就用 ^ 代替 *。
google了一下,出現了一堆... Stan Lipman竟然離開BellLab進入MS了....實際上Managed C++,Managed C++ Extension和C++/CLI 甚至.NET 好多地方都混用...不知道真正的差異在哪...目前好像只有MS的compiler有支援C++/CLI,其他都沒有(gnu也沒有)....ECMA standard是free的...
Software Engineer的功課真是寫不完呀....Q__Q
Oreilly 這一篇文章有說明 Managed C++
有個新的東西叫 Managed C++,但是語法和C++差異太大,所以又有Managed C++ Extension和C++/CLI ,讓Managed C++繼續有C++的語法。
這兩個東西 :^ 和gcnew 就是C++/CLI的語法。
gcnew和 以前的new類似,但是gcnew 是managed,也就是說,有類似 java 的garbage collection,不用programmer操心什麼時候要delect。
為了和new出來的object有所區別,gcnew 出來的object reference就用 ^ 代替 *。
google了一下,出現了一堆... Stan Lipman竟然離開BellLab進入MS了....實際上Managed C++,Managed C++ Extension和C++/CLI 甚至.NET 好多地方都混用...不知道真正的差異在哪...目前好像只有MS的compiler有支援C++/CLI,其他都沒有(gnu也沒有)....ECMA standard是free的...
Software Engineer的功課真是寫不完呀....Q__Q
Oreilly 這一篇文章有說明 Managed C++
some googling about anubis gates
彈簧腿傑克
威廉‧艾希布雷斯 William Ashbless
拜倫
狼人
彈簧腿傑克(Spring Heeled Jack)英國民間傳說於維多利亞時代的人物。最早的紀錄據稱是在1837年,之後從倫敦到雪菲爾和利物浦都有目擊報告,從倫敦郊區和英格蘭中部向外擴散,1850年至1880達到高峰。科律治 Samuel Taylor Coleridge ?
一般相信其消失於1904年。許多宣稱已確定他的身分,但無一能釐清真相,因此依舊無法解釋。
威廉‧艾希布雷斯 William Ashbless
拜倫
狼人
SerialPort Class in .NET Framework - finally
聽說在.NET framework 2.0終於有SerialPort Class了,
所以不用再去用甚麼CreateFile,或是用一些奇怪廠商的OCX,dll..
以下是sample code,從http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=229270&SiteID=1 copy來的
Microsoft 真是軟體工程師的惡夢呀。
雖然稱作是C++,但是卻多了一個 ^ operator。而且還非要用不可。
如果真的大家都要這樣惡搞,那要ANSI協會幹嘛?
大概是希望讓programmer認為..." 反正已經不是C++了,既然要重學,而且學只有microsoft支援的變種C++,那不乾脆就學C#好了。 "
所以不用再去用甚麼CreateFile,或是用一些奇怪廠商的OCX,dll..
以下是sample code,從http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=229270&SiteID=1 copy來的
The following is very simple example of how to user SerialPort in C++.這個example必須要在CLR下才能執行( File--New Project -- CLR console)。
using namespace System;
using namespace System::IO::Ports;
int main(array<System::String ^> ^args)
{
SerialPort^ serialPort = gcnew SerialPort(
L"COM1",
9600,
Parity::None,
1,
StopBits::One);
serialPort->>Open(); // 這一行Example忘了寫。
serialPort->WriteLine("Hello World");
serialPort->Close();
return 0;
}
Microsoft 真是軟體工程師的惡夢呀。
雖然稱作是C++,但是卻多了一個 ^ operator。而且還非要用不可。
如果真的大家都要這樣惡搞,那要ANSI協會幹嘛?
大概是希望讓programmer認為..." 反正已經不是C++了,既然要重學,而且學只有microsoft支援的變種C++,那不乾脆就學C#好了。 "
Visual C++ Express
全名是Visual C++ 2005 Express Edition
不是Visual C++ .NET Express
不是Visual C++ 2006 Express
原來用CLR 寫的Form Application 就是 .NET 呀。
Form Application 屬於 .NET Framework 中的一個類別庫。(class library ?)
.NET framework = Common Language Runtime + Class Library.
Common Language Runtime
可以將class compile成dll,使用的program (client)只要include dll進來 (用 using "..\CompCs.dll"),不用再準備 header file。
所以Windows Form application compile出來的大概就是CLR用的byte code。
所以只能有CLR支援的function囉?
能不能直接呼叫Win32 API呢?
不是Visual C++ .NET Express
不是Visual C++ 2006 Express
原來用CLR 寫的Form Application 就是 .NET 呀。
Form Application 屬於 .NET Framework 中的一個類別庫。(class library ?)
.NET framework = Common Language Runtime + Class Library.
Common Language Runtime
好像是一個有JIT功能的VM。藉由這個VM run的code叫managed code。Class Library
古老的code可以藉由load 這個VM來執行(呼叫?) 已經寫好的managed code function。
大概就是一些寫好的component,好像只能由CLR這個VM來執行...不能像以前的DLL, COM, OCX等直接link夠奇蹟,Console.WiteLine(S or L 竟然不一樣,如果用S,compile時要加上/clr。
可以將class compile成dll,使用的program (client)只要include dll進來 (用 using "..\CompCs.dll"),不用再準備 header file。
所以Windows Form application compile出來的大概就是CLR用的byte code。
所以只能有CLR支援的function囉?
能不能直接呼叫Win32 API呢?
星期一, 7月 03, 2006
VC Express and Platform SDK
VC Express 只能build console program 和使用 CLR 的FORM designer 程式。
安裝platform SDK後,就可以呼叫Win32SDK(因為有header file和libary了),注意,是SDK喔,也就說 Charles Petzold那一本書的寫法。
以下是 VC++ Express FAQ
安裝platform SDK後,就可以呼叫Win32SDK(因為有header file和libary了),注意,是SDK喔,也就說 Charles Petzold那一本書的寫法。
以下是 VC++ Express FAQ
- Visual C++ 2005 Express Edition 有包含「最佳化編譯器」嗎?
有,Visual C++ 2005 Express Edition 與其他 Visual Studio 2005 版本一樣,含有相同的核心最佳化編譯器。但是其中一些新擴充的最佳化功能 (例如 Profile Guided Opitmization) 只會在 Professional 與更高階的 Visual Studio 2005 版本。- 我可以利用 Visual C++ 2005 Express Edition 測試版建立什麼樣的應用程式?
使用 Visual C++ 2005 Express Edition 測試版,您可以建立原生與受管理的應用程式。使用 .NET Framework,您可以輕鬆創造 Windows Form、主控台與類別程式庫應用程式。下載 Windows Platform SDK (免費下載),您可以建立善加利用 Win32 API 建立應用程式。Web 開發人員應該使用 Visual Web Developer 2005 Express Edition.- Visual C++ 2005 Express Edition 包含 MFC 與 ATL 嗎?
沒有,MFC 與 ATL 並不包含在 Visual C++ 2005 Express Edition 中。MFC 與 ATL 將會包含在其他 Visual Studio 2005 版本中。- 我發現有些 Express 產品有發展套件。Visual C++ 2005 Express Edition 的入門套件在哪裡?
目前尚未有任何完整的 Visual C++ 2005 Express Edition Beta 2 的入門套件,但是 Visual C++ Express 可以用來建立許多目前的現有的 C++ 專案。- 為什麼 Visual C++ 不支援 ASP.NET Web Form?
ASP.NET 的 Web Form 指令碼撰寫,並非 C++ 團隊的支援專項。基於我們對客戶的重要使用模式之瞭解,才會做出這項決定。一般而言,C++ 開發人員與建立動態產生的網頁之間沒有關連。相反的,這些開發人員建立的是驅動這種往業的高效能元件。C++ 元件當然也可以藉由 ASP.NET 的 Web Form 從這種網頁叫用。此外,C++ 可以用於呼叫或公開 ASP.NET 的 Web 服務。
ffmpeg : probe - mpegts
static int mpegts_probe(AVProbeData *p)
{
const int size= p->buf_size;
int score, fec_score;
#define CHECK_COUNT 10
if (size < (TS_FEC_PACKET_SIZE * CHECK_COUNT))
return -1;
score = analyze(p->buf, TS_PACKET_SIZE *CHECK_COUNT, TS_PACKET_SIZE, NULL);
fec_score= analyze(p->buf, TS_FEC_PACKET_SIZE*CHECK_COUNT, TS_FEC_PACKET_SIZE, NULL);
if(score > fec_score && score > 6)
return AVPROBE_SCORE_MAX + score - CHECK_COUNT;
else if(fec_score > 6)
return AVPROBE_SCORE_MAX + fec_score - CHECK_COUNT;
else
return -1;
}
很奇怪...
analyze是...
static int analyze(const uint8_t *buf, int size, int packet_size, int *index).裡面有一個偉大的用法??state[]這個local array 可以用argument packet_size最為array size。
{
int stat[packet_size];
int i;
int x=0;
int best_score=0;
memset(stat, 0, packet_size*sizeof(int));
x=0;
for(i=0; i<size; i++){
if(buf[i] == 0x47){
stat[x]++;
if(stat[x] > best_score){
best_score= stat[x];
if(index) *index= x;
}
}
x++;
if(x == packet_size) x= 0;
}
return best_score;
}
這個analyze( )的功能是?
Visual Studio Express - installtion
主要是講VC而已。
選CLR的話,可以build .NET的program。使用form designer。
但是很奇怪的是...以上在win2000 build出來的code竟然不能再XP上run ...
- download VC.IMG,用rar解開,run setup。
- 安裝完後,說要裝platform sdk,所以去download 2003 server platform sdk (可是我只是要寫XP的application,,有差嗎?)。
download psdk時要小心,除非你的adsl很快,否則不要download install那一頁1.多M那個program,他會用網路安裝,要follow page link 到 Full download那一頁,download 12個CAB檔下來再裝,比較保險。
download下來的cab檔要自己一一解開,再run setup - 安裝完畢..接著是很奇妙的設定修改動作,follow getting start with VC express..
- 把platform sdk的bin, include, lib 都加到visual studio的path中
開啟 Tool-Option-Project and Solutions - VC++ Directories.
在右邊Show directory for :- 在bin 加入platform sdk /bin folder的path
- 在include加入include
- 在lib加入lib
- 把user gui library dll加入 project dependency
修改 Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults 的 corewin_express.vsprops 把AdditionalDependencies="kernel32.lib"
改成AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib"
- 這一段有奇怪,有一篇有寫,有一篇沒寫,就是把 C:\Program Files\Microsoft Visual Studio 8\VC\VCWizards\AppWiz\Generic\Application\scripts\1033的default.js中
LinkTool.AdditionalDependencies = "kernel32.lib $(NoInherit)";
comment掉(有兩個地方出現)。 - enable win32 application wizard : 修改 \Microsoft Visual Studio 8\VC\VCWizards\AppWiz\Generic\Application\html\1033\AppSetting.htm的 441 - 444 行,comment掉
// WIN_APP.disabled = true;
..
// WIN_APP_LABEL.disabled = true;
// DLL_APP.disabled = true;
// DLL_APP_LABEL.disabled = true;
- 把platform sdk的bin, include, lib 都加到visual studio的path中
選CLR的話,可以build .NET的program。使用form designer。
但是很奇怪的是...以上在win2000 build出來的code竟然不能再XP上run ...
星期日, 7月 02, 2006
The Anubis Gates (捏他)
阿努比斯之門,果然是 非好看的科幻(應該說是奇幻)小說。
劇情非常複雜,有需多支線,但彼此都緊密的連結在一起,
重要的是,整個故事又跟很多歷史事件相連(因為本來就是個有關時光旅行的故事嘛)。
除了巫術這一點(但是使用的也不過分),就只有時間之門這個奇幻設定了。所以內容一點也不牽強。
以下紀錄一下故事內容:
劇情非常複雜,有需多支線,但彼此都緊密的連結在一起,
重要的是,整個故事又跟很多歷史事件相連(因為本來就是個有關時光旅行的故事嘛)。
除了巫術這一點(但是使用的也不過分),就只有時間之門這個奇幻設定了。所以內容一點也不牽強。
以下紀錄一下故事內容:
19世紀埃及巫師為了將英國人趕出埃及,所以用巫術召喚anubis神附身,企圖將地獄之門打開,卻意外開啟了一連串的時間之門。同時召喚者也成為有附身能力的狼人。20世紀的癌正末期富商研究歷史發現巫術與時間之門的巧合性,進而找出利用時間之門回到過去的方法。
富商聘請當時的歷史學者一同回到過去,學者被當時巫師的地下團體抓住,無法跟隨其他人回到現代。
當時倫敦出現的長毛狼人原來就是當初施術失敗的狼人巫師。利用附身能力,不斷和被害人交換軀體。
富商和一位學者舊識再度進入19世紀,原來富商想利用狼人協助他將癌症末期的身體換掉。
學者與其舊識相遇,但兩人被狼人交換身份,學者身在舊識的身軀中。而狼人則以學者身份向富商談判。
巫師創造拜倫分身,控制分身,企圖引起應國內亂,再召喚火神引起大火。計畫被學者破壞,學者與拜倫成為朋友。
富商與狼人結盟,在英國累積財富,但最後兩人被一位狼人附身過的受害者的女友所殺。
學者消滅巫師的組織,最後以另一身份留在19世紀英國。
以上只是大約的劇情內容,實際書中有更多枝節巧合,讓整個故事結構非常緊密,各因果關係毫無牽強之處。大概是因為他是奇幻小說,所以作者有更多使用的工具吧。
唯一看起來的缺憾大概是編排,在同一章節中換段落或場景時,應該要多一些空白,或是加上直線比較好。否則要看一段之後才會感覺到。
訂閱:
文章 (Atom)
網誌存檔
-
▼
2006
(434)
-
▼
7月
(70)
- Windows2003 遠端桌面連線
- Flac - encoding
- 糟糕...亂搞的結果...
- try .. blogspace 中文?
- reseal - Part II
- ToDo List..
- 使用NTLDR boot DOS
- ghost 2003 seems using xpe..
- complain - about tool's version and ghost...
- Cloning XPE Image - Reseal
- TUX magazine is going be be Not-free
- google maps, Wikipedia - about this WWIII
- EWF : Enhance Write Filter - what XPE differ from XP
- Some Helping Utility for building XP Embedded
- XPE : Minlogon - login automatically with system user
- Research,, and waiting to be bought..
- C++ GUI Programming with Qt 4
- 颱風 - 凱米
- wavpack : hybrid
- 這個布丁也好吃的
- 默默..
- 蠻好喝的健酪 藍莓
- XP Boot Process
- Need Some Space for EWF
- TAP.EXE : different result in differnet environment
- why Reiser4 is not in the kernel
- DirectX 2006/6 download path
- keroro mp3 player
- 愚蠢! 原來是Power的問題
- Site Memo : chroot.org : Taiwan Hacker's org
- fotocom cd 350 - usb hd box - sucks
- C3VCM6 - VIA C3/C7 mini-ATX
- 使特林引擎,3500 NT -- 真想買
- turn on ATX Power without using Mainboard.
- 不要在註冊時留下任何個人資料..
- Skype Protocol has been cracked
- keroro - 全員敬禮..
- billing machine run Windows
- find source site with netselect-apt
- retrieve another character encoding archieve
- delete unqualified named folder in Windows
- Full Read-Write Linux NTFS Driver : OpenSource
- some problem about QCOM
- more .. about Marketing..
- boot CE on VMWARE via SBOOT
- Virtual Floppy Disk : VFD - Opensource software
- bootloader for CE x86 platform
- Debian Sarge Testing.. support VMWARE share USB
- CE 5.0 Platform Builder - some idea...
- Something about platform builder : build process
- CE Platform Builder Installation
- 不好吃 : 辣白菜拉麵
- Porting FlashPlyer to Linux : a real hard thing.
- How do that know the real marketsize ?
- X protocol - begin
- 北韓如何挽回經濟,賺取外匯?
- devfs is gone
- Success - Shutdown Windows, in C++ with ExitWindowsEx
- More on Shutdown
- .NET and COM : Interoperability
- More about Interop in Managed , Unmanaged C++
- Shutdown Windows in VC++ 2003 with CLR
- ^ and gcnew : not MS specific, a New C++ standard
- some googling about anubis gates
- SerialPort Class in .NET Framework - finally
- Visual C++ Express
- VC Express and Platform SDK
- ffmpeg : probe - mpegts
- Visual Studio Express - installtion
- The Anubis Gates (捏他)
-
▼
7月
(70)