2009年12月31日 星期四

建立開機隨身碟

現在隨身碟隨便都可以拿到,反而是CD若不是在家中,反而比較難拿到。

USB Disk Storage Format Tool是由HP提供的免費軟體,可用來將USB隨身碟格式化,並且能載入開機程式,製作出具有開機功能的USB隨身碟。非HP的電腦也能使用這個工具。

主要功能為針對USB隨身碟切割出開機磁區,該工具本身並不提供開機系統檔案,使用者需額外準備,透過該工具將需要的檔案建立到系統內,才能建立適合自己的USB開機隨身碟。

不同於Windows XP內建的隨身碟格式化功能,USB Disk Storage Format Tool除了FAT、FAT32之外,也支援NTFS檔案系統的格式化。不過該工具並不支援在NTFS檔案格式下建立開機磁區。

若要使用開機隨身碟,電腦主機也需要支援USB裝置開機才行。

[2010.09.10 補充]
因為,常在做測試,開機隨身碟中會有許多可以執行的程式。
若放在根目錄中,會整個顯的非常的凌亂。因此,我在隨身碟的根目錄中建立一個USBTOOL的目錄,裡面都是放所有測試的執行檔,但是,這樣會有一個缺點,當我要執行SPFdisk時,就必需要進入USBTOOL的資料夾或者是直接在根目錄下打USBTOOL\SPFDisk,非常不順手。

在昨天同事的介紹下,知道在進入所有的系統中,都會去尋找根目錄下的AUTOEXEC.BAT這一個批次檔,並且去執行它。
要在AUTOEXEC.BAT裡面設定PATH的話,就直接在檔案設定要執行的內容。以下就是範例:
AUTOEXEC.BAT
PATH C:\USBTOOL

參考資料:
使用usb flash disk建立開機碟
用USB工具 建立開機隨身碟
HP 筆記型電腦 ─ 如何建立可開機的 USB 記憶體隨身碟
Free Boot Disks
UNetbootin
HPUSBFW 製作可開機 USB 隨身碟
MS-DOS 之基本使用

2009年12月30日 星期三

解決在vim下可以讀取Unicode的檔案

在vim下要讀取Unicode的檔案,vim要做以下的設定
:set encoding=utf-8

但是,如此一來,在windows下的gvim選單就會出現亂碼
解決方法如下
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim


砍掉目前選單,再重讀一次,選單就不會有亂碼了。

狀態列的中文訊息亂碼,則要加上下面這一行來解決

language messages zh_TW.UTF-8

若要把menu及訊息設定成英文,就可以設定為:
set langmenu=none
:lang mes en


參考資料:
讓 vim 在 Windows 下用 unicode 選單不亂碼的方法
vim簡介及如何使用Unicode或其他編碼
Linux 底下的編碼顯示問題
Linux作業系統Vim/Vi編程提速

2009年12月29日 星期二

RamDisk和Junction

在編譯project時,因會要編譯超多的檔案,所以,對I/O的讀取會相當多次~

今天由同學那裡知道原來有一個免費的軟體,叫RamDisk可以把記憶體當作硬碟來使用~

這樣就可以減少對硬碟的讀取了!不過,缺點是每一次重新開機後,資料都會不見!(不過,這可能也是優點,這就要看資料夾怎麼使用了!)

不過,還好,我有用SVN版本控制,可以在每一次要做project前,才把資料由svn把原始碼還原,所以整體上的效能和方便性還算不錯!

以下是我做的步驟~

因為Build這一個資料夾裡面放的是compiler的產物,為了要加速編譯的過程,所以,要建立一個RamBuild資料夾,而它是放在RamDisk上,而在原本的位置的會建立一個新的Build,而它是hard link到RamBuild這一個資料夾,換句話說,這樣就可以騙過系統,當它在存取Build資料夾時,實際上是在存取在RamDisk上的RamBuild資料夾,如此一來,就可以加快編譯的速度啦~

而在Linux下有hard link的功能,但是,在windows下確沒有hard link的功能,這個時候,我們要用junction的功能,它可以讓XP具有hard link的功能

1. 暫時把d:\下的Build改名為Build_bak,並同時建立一個新的Build資料夾
% move Build Build_bak && mkdir Build

2. 在RamDisk上建立一個新的資料夾RamBuild,並且把Build資料夾hard link到RamBuild資料夾
% mkdir r:\RamBuild && junction Build r:\RamBuild

3. 把所有在Build_bak資料夾下的內容複製到Build資料夾下
% xcopy Build_bak\*.* Build\ /k /e /q /y

4. 為了計算編譯的時間,所以,預先取得編譯前的時間
% set OLDTIME=%time%

5. 開始編譯,其中,若要使用到其它bat檔,當它執行完時,再回來繼續執行剩下的程式碼,則必需要使用到call,若沒有使用call的話,而直接使用bat檔的話,則當bat檔執行完後,馬上結束,不會執行這一個bat檔剩下的程式碼
% cd Build && call MultiMake.bat

6. 取得編譯完後的時間
% set NEWTIME=%time%

7. 把編譯完成之後的結果複製到Build_bak資料夾中,這裡要注意的是,這裡的Build資料夾,因為透過junction,同時也代表在RamDisk下的RamBuild資料夾,也就是存放compiler後的產物放的位置
% cd .. && xcopy Build\*.* Build_bak\ /k /e /q /y

8. 移除Build資料夾hard link到RamBuild資料夾的特性,並且把Build_bak改名為Build
% junction -d Build && move Build_bak Build

9. 刪除在RamDisk下的RamBuild資料夾,另外,因為XP沒有deltree,必需要另外到這一個頁面下載
% deltree /y r:\RamBuild

10. 顯示編譯前的時間與編譯後的時間
% echo Start Time %OLDTIME%
% echo End   Time %NEWTIME%


以下是完整的程式碼,在bat檔中,rem是表示註解的意思
fastmake.bat
rem rename Build to Build_bak
move Build Build_bak && mkdir Build

rem create a new file r:\RamBuild, if success hard link Build to r:\RamBuild in the RamDisk
mkdir r:\RamBuild && junction Build r:\RamBuild

rem copy all the Build_bak file to Build
xcopy Build_bak\*.* Build\ /k /e /q /y

rem get the current time before compiler
set OLDTIME=%time%

rem compiler...
cd Build && call MultiMake.bat

rem get the current time after compiler
set NEWTIME=%time%

rem copy the result to Build_bak
cd .. && xcopy Build\*.* Build_bak\ /k /e /q /y

rem delete the junction folder and renmae Build_bak to Build
junction -d Build && move Build_bak Build

rem delete all the file in the r:\RamBuild
deltree /y r:\RamBuild

rem show the time before compiler
echo Start Time %OLDTIME%

rem show the time after compiler
echo End   Time %NEWTIME%


MultiMake.bat
因為,不知道什麼原因,必需要重覆nmake多次才會成功,因此,在這裡設定最大try 20次
rem because there is no-reason problem, we have nmake multi-time

@echo off

rem set the MaxTry
set MaxTry=20

rem set the current count to record the TryCount
set Count=0

:start
rem when Count is less or equal than MaxTry, Count will plus one and nmake again
rem If the nmake is fail, the process will go to start label.
rem If the nmake is success, the process will go to next line instead of going to start label.

if %Count% LEQ %MaxTry% set /A Count=Count+1 && echo this is %Count% times && nmake || goto start

IF %Count% GTR %MaxTry% (
  echo exceed MaxTry, compiler fail!!!!!.
) ELSE (
  echo Compiler success!!!!!.
)

:end


[2010.01.07 補充]
也可以使用RamDisk來加快,瀏覽器的存取~

1. 首先需要先安裝 RAMDisk 軟體,把記憶體拿來劃成硬碟使用。可以參考這裡

2. 我自己是把 RAMDisk 設成 R:\

Internet Explorer
3. 開啟 IE > 工具 > 網際網路選項 > 設定 > 移動資料夾 > 指向 R:\IECache

4. 重新啟動 IE

Firefox
5. 開啟 Firefox 後,在網址列上敲上 about:config

6. 新增 > 字串 > 鍵入 "browser.cache.disk.parent_directory" > 填上字串值 "R:\FirefoxCache"

7. 確認是否有browser.cache.disk.smart_size_cached_value,若沒有新增為數值類型,並且填上225280為其數值

8. browser.cache.disk.smart_size.enabled確定為true

8. 重新啟動 Firefox

9. 在網址列寫入about:cache
可以看到目前cache的設定

Chrome
8. 直接在Chrome在捷徑加上一個參數: --disk-cache-dir=R:\ChromeCache ("R:\ChromeCache"位置可自訂)

現在 IE, Firefox, Chrome 瀏覽時的暫存檔案都會放在 RAMDisk R:\ 上,理論上是比暫存在硬碟上快些。有興趣的朋友,不妨嘗試看看囉~

[2010.01.16 補充]
以下的bat檔案,主要是在編譯不同的檔案的時候,要使用不同的compiler,這個時候要用junction來指到不同的compiler,這一個bat可以讓使用者選擇要建立Junction資料夾或是移除Junction資料夾~

@echo off

rem build a hard link from DEVTLS to target-directory
rem redirect-DEVTLS target-directory
rem Example: redirect-DEVTLS D:\DEVTLS_Tool\NTC_DEVTLS


set /P UserSelect=1. Redirect DEVTLS 2. Remove Junction Direct (D:\DEVTLS):
if %UserSelect% EQU 1 goto Redirect
if %UserSelect% EQU 2 goto Undirect
echo Your choice out of option
goto end

:Redirect
echo ==========Redirect option==========
set /P UserInput=Please input the target DEVTLS directory(ex: D:\DEVTLS_Tool\NTC_DEVTLS):

rem test the DEVTLS exist or not
IF EXIST DEVTLS (
rem DEVTLS exists, remove junction directory
junction -d DEVTLS || goto fail
echo remove the original junction directory successfully
)

rem Test the target directory
IF EXIST %UserInput% (
rem If exists, create junction directory from %UserInput% to DEVTLS
junction DEVTLS %UserInput% || goto fail
echo build create junction directory form %UserInput% to DEVTLS successfully
goto success
) ELSE (
echo target %UserInput% doesn't exist
goto fail
)

:Undirect
echo ==========Undirect option==========
rem test the DEVTLS exist or not
IF EXIST DEVTLS (
rem DEVTLS exists, remove junction directory
junction -d DEVTLS || goto fail
echo remove the original junction directory successfully
goto success
) ELSE (
echo DEVTLS doesn't exist
goto fail
)

:success
goto end

:fail
goto end

:end
echo End of Bat File...
pause


[2010.05.11 補充]
@ECHO OFF

REM build a hard link from DEVTLS to target-directory
REM redirect-DEVTLS target-directory
REM Example: redirect-DEVTLS D:\DEVTLS_Tool\NTC_DEVTLS

REM Initial the Junction folder
REM If mark SET JunctionTarget, this bat will ask user the JunctionTarget when proceduring

SET JunctionTarget=

REM ===========================================================================
REM ==== GET&SET SOURCE AND TARGET PATH (DO NOT MODIFY) =======================

IF "%JunctionTarget%" NEQ "" GOTO JunctionProcedure
ECHO ========== SET JunctionTarget Folder ==========
SET /P JunctionTarget=Please input the target directory (ex: D:\DEVTLS):

:JunctionProcedure
ECHO ========== User Selection ==========
ECHO 1. Redirect %JunctionTarget%
ECHO 2. Remove Junction Direct (%JunctionTarget%)
SET /P UserSelect=User Select:
IF %UserSelect% EQU 1 GOTO Redirect
IF %UserSelect% EQU 2 GOTO Undirect
ECHO Your choice out of option
GOTO End

:Redirect
ECHO ========== Redirect option ==========
SET /P JunctionSource=Please input the source directory(ex: D:\DEVTLS_Tool\NTC_DEVTLS):

REM test the %JunctionTarget% exist or not
IF EXIST %JunctionTarget% (
REM %JunctionTarget% exists, remove junction directory
junction -d %JunctionTarget% || GOTO Fail
ECHO Remove the original junction directory successfully
)

REM Test the source directory
IF EXIST %JunctionSource% (
REM IF exists, create junction directory from %JunctionSource% to %JunctionTarget%
junction %JunctionTarget% %JunctionSource% || GOTO Fail
ECHO Create junction directory form %JunctionSource% to %JunctionTarget% successfully
GOTO Success
) ELSE (
ECHO target %JunctionSource% doesn't exist
GOTO Fail
)

:Undirect
ECHO ========== Undirect option ==========
REM test the %JunctionTarget% exist or not
IF EXIST %JunctionTarget% (
REM %JunctionTarget% exists, remove junction directory
junction -d %JunctionTarget% || GOTO Fail
ECHO Remove the original junction directory successfully
GOTO Success
) ELSE (
ECHO %JunctionTarget% doesn't exist
GOTO Fail
)

:Success
GOTO End

:Fail
GOTO End

:End
ECHO End of Bat File...
PAUSE


參考資料:
Gavotte Ramdisk 免費「虛擬硬碟」使用教學
密技 / 塞爆4G記憶體! Gavotte Ramdisk 32 bit XP
Junction v1.05
Gavotte RAMDisk
用gavotte的ramdisk碰到問題~求解
用mklink與junction建立資料夾連結
拿 RAMDisk 加速 Firefox, IE 的瀏覽速度
Gavotte Ramdisk 使用心得
介紹好用工具:Junction ( Windows 版的 symbolic link )

2009年12月22日 星期二

vim 分割視窗功能

使用vim來比較檔案
因為比較後的結果是使用分割視窗來顯示,所以,把它放在這一個單元
% vim -d file1 file2

例子:
一開始的檔案before.txt內容為
aaaa
dddd
cccc
hhhh


而之後的檔案after.txt內容為
aaaa
xxxx
yyyy
cccc


最後,執行以下的指令
% vim -d before.txt after.txt
會出現以下的比較畫面

紅色的意思應該是說,把左邊第二行改為右邊第二行,算是屬於修改的部分!

而右邊第三行與左邊第三行表示右邊新增一個yyyy的內容

而第五行則表示邊新增一個hhhh的內容

[2010.03.13 補充]
:split 分割視窗(可加檔名順便開啟另一檔案)
:diffsplit xxx 以分割視窗和檔案xxx做比較(diff)
Ctrl-W p 跳到前一個分割視窗(在兩個分割窗來回切換)
Ctrl-W j 跳到下面的分割窗
Ctrl-W h 跳到左邊的分割窗
Ctrl-W k 跳到上面的分割窗
Ctrl-W l 跳到右邊的分割窗

參考資料:
給程式設計師的Vim入門圖解說明

vim tab功能

在vim下,可以使用類似firefox, kkman,在一個應用程式中,可以有多個畫面!
我主要分成兩大類!

一個是使用:split:vsplit,把一個畫面同時分成兩個以上的畫面,用這一個的好處就是,可以「同時」看到多個檔案開啟!

而另一個就是使用tab的方式,雖然一次只能看到一個畫面,但是,開啟多個檔案的時候,不會讓windows最下面的開啟檔案非常的複雜~而且,檔案之間,仍然可以使用vim內建的copy功能(像是yy, p...等等指令)~而這一個也是本篇文章要提到的主題~

一次 vi 數個檔案來作編輯,預設 vim (也就是 vi) 同時可開 10 個 tab (這可以透過 set tabpagemax= 的方式設定,將它加大或減少)。

也就是說,當你想同時 vim 三個檔案 (例如 file1、file2、file3),可以:

vim -p file1 file2 file3

還可以:set tabline來定義 tab 顯示方式

tab相關的功能為:
=========================================
:tabdo
可以同時對目前的所有已開啟的tabfile執行相同的動作,這一個動作對我非常有用
例如:對目前所有用tab開啟的檔案內容把originalstring轉換成newstring
:tabdo %s/originalstring/newstring/gc

另一個例子,把所有的檔案中,有Caspar-comment的行刪掉
:tabdo %!grep -v Caspar-comment
如此一來真的可以省下非常多的打指令的時間

[start-20100307-add]
可以直接使用vim內建的功能達到,而不需要使用到外部指令
:g/.*Caspar-comment.*/d
[end-20100307-add]
=========================================
:tabn(ext)
當有多個tab的時候,在execute mode下打:tabn就是移動到下一個tab
括號的部分可以打,若不打的話,就是簡寫
或是 gt, C-PageDown也可以達到相同的效果
=========================================
:tabp(revious)
當有多個tab的時候,在execute mode下打:tabp就是移動到上一個tab
或是 gT, C-PageUp也可以達到相同的效果
=========================================
:tabs
顯示目前的所有tab的情況
=========================================
:tabnew filename
開啟一個新的tab;後面可以接新的檔案名稱
=========================================
:tabe(dit) filename
開啟一個檔案,當檔案不存在的時候,直接開啟一個新的檔案
=========================================
:tabc(lose)
關掉目前正在使用的tab分頁
=========================================
:tabo
關閉其它tab分頁
=========================================
:tab(fi)r(st)
跳到編號為1號的tab分頁
=========================================
:tabfind filename
尋找名為filename的tab分頁
=========================================
:tabl(ast)
跳到編號為最後一號的tab分頁
=========================================
:tabm [N]
移動到編號為N的tab分頁
=========================================
在vimrc內容中,加入熱鍵
" 加入tabnew, tabprevious, tabnext的快速鍵
nmap <C-t> :tabnew<CR>
nmap <C-Left> :tabprev<CR>
nmap <C-Right> :tabnext<CR>

=========================================
在新的tab頁面顯示help頁面
:tab help
=========================================
參考資料:
Vim 的小玩意: tab 怎麼玩?
vim tab 功能
My editor ,Vim
Vim7 的 <C-Left> 與 <C-Right>
VIM Tab & Space
Vim Hacks

把Vim折疊(folding)

在我要去上免費課程vim之前,我把「大家來學 Vim一個歷久彌新的編輯器」看過一遍之後,
原本我認為vim的folding是不重要的!但是,在經過上次去上過免費課程vim之後,覺得似乎有那麼一點噱頭~
所以,就打算寫這一篇文章!

突然發現,vim的文章在我的blog越來越多了,所以,就新增一個vim的tag吧~

其實,大部分就是參考「大家來學 Vim一個歷久彌新的編輯器」的內容,新增這一篇文章是可以把在學習過程中使用到的相關資訊補充在這裡!

折疊的產生
zfap 將游標所在處的那個段落折疊成一行。
zf7G 自游標所在處至全文第 7 行折疊起來。
:3,9fold 將第 3 行至第 7 行折疊起來。
5zF 將游標所在處起算 5 行的內容折疊起來。

也可以將所要折疊的部份以 Shift+v 標記起來,然以按 zf 就會將標記的內容折疊起來。

折疊的操作

zo 將游標所在處的折疊打開。open。
zc 將游標所在處已打開的內容再度折疊起來。close。
zr 將全文的所有折疊依層次通通打開。reduce。
zm 將全文已打開的折疊依層次通通再折疊起來。more。
zR 作用和 zr 同,但會打開含巢狀折疊(折疊中又還有折疊)的所有折疊。
zM 作用和 zm 同,但對於巢狀折疊亦有作用。
zi 這是個切換,是折疊與不折疊指令間的切換。
zn 打開全文的所有折疊。fold none。
zN 這是 zn 的相對指令,回復所有的折疊。

折疊的記憶
我們可以使用:mkview把折疊的情形記憶起來,下一次載入同一個檔案時就可以下:loadview,記憶起以前折疊的情況。

另外,這裡要注意一點的是,在Linux下,若你的家目錄下沒有.vimfiles\的話,就出現以下錯誤
Cannot create directory: ~/.vimfiles/view
這個時候,只要在家目錄下,新增一個.vimfiles就可以了。

而在Windows下使用GVimportable的話,就必需要在App\vim\下建立一個vimfiles就可以了~

當完成上述的步驟之後,在到execute mode輸入:mkview就可以把目前的folding情況儲存起來了!而下次打開檔案的時候,在execute mode下輸入:loadview就可以把上次這一個檔案的folding載入進來~

自動折疊
以縮行為依據
:set foldmethod=indent 就會依縮行來折疊,本來預設是 :set foldmethod=normal。請注意,此時手動折疊的設定會被停止無法使用。

以特殊的表示法為依據
:set foldmethod=expr,另外還要設定 :set foldexpr=...,可參考線上使用手冊:h fold-expr的例子。

以語法為依據
這是在定義語法(syntax)檔時同時加入折疊的定義。然後,set foldmethod=syntax就會依照這個語法定義檔去折疊,請:h syn-fold

以是否更改過為依據
這在進入 vimdiff(即 vim -d file1 file2) 時會自動進入foldmethod=diff的模式,因此要 diff 設定項設在同一個螢幕顯示才行。以便整體的瀏覽。當然要自行更改預設值亦可。預設是:

setlocal diff foldmethod=diff scrollbind nowrap foldlevel=1

這樣一來,兩個檔案相同的部份會折疊起來,沒有折疊的部份就是有差異的地方。

以文件上的標誌為依據
這是跟據文章中的標誌(marker)來做折疊。這些標誌,起於{{{,止於}}},這中間的部份會折疊起來。通常這些標誌是藏在註解欄裡頭,例如 C 程式碼的/**/之間,shell script 的#之後,Vim script 的"之後,得視程式語言的不同而定,因此一般的文章就不適合使用了。

這些預設的標誌也可以由 foldmarker 來更改,但為了文件的流通性,建議使用預設值就可以了。

當然,一些程式碼載入時再來設定:set foldmethod=marker就太麻煩了,這個設定可以設在文件內,例如:
#!/bin/sh
# 這是一個 sh script
# {{{
……
這裡是 script 內容,由 vim 打開這
個檔時,這個部份會自動折疊起來。
……
# }}}
# vim:fdm=marker:ts=2

最後一項不是很懂,留到以後再說吧~

參考資料:
把 Vim 折疊(folding)?

2009年12月19日 星期六

Vim script

按鍵對應

[實例] :map <F5> bi{<Esc>ea}<Esc>
這樣一來,只要在英文單字任意處按 F5,這個英文單字的前後就會加上大括號。

說明如下:
bi{<Esc> 按 b 移至英文單字的第一個字母處,並按 i 進入插入模式,寫入 { 這個字元,並按 Esc 鍵,回復常態模式。
e 移動至這個英文單字的最後一個字母處。
a}<Esc> 進入插入 append 模式,並輸入 } 這個字元,再回到常態模式。

需注意的是,在命令列模式前頭會有個冒號,因為在 vim 裡頭,要按個冒號才會進入命令列模式。但如果是設在 Vim script 檔裡頭當然就沒有冒號了。以上的例子也是可以對應至一些較容易記憶的按鍵,例如:

map ,b bi{<Esc>ea}<Esc>

這樣按 ``,b'' 就會有同樣的作用,但 ``,'' 及 ``b'' 之間不能相隔太久的時間,這樣 Vim 才會知道這兩個按鍵是結合在一起的。而 b 在此就代表 braces(大括號)。

如果要知道目前的按鍵對應的情形,可 :map 就會列出所有的目前按鍵對應,前面標示的記號就是各種模式的代表字母,例如 n 代表 normal,i 代表 insert。

縮寫對應
縮寫對應是把一長串的字串對應到簡單的幾個代表性字串。縮寫的對應只能用在插入模式、取代模式及命令列模式。主要用於輸入時節省時間及避免拼錯。這裡利用例子來做說明:

[實例] :ab gl GNU Linux
把 gl 這個按鍵對應成 GNU Linux。

ab 是 abbreviate 的縮寫,這樣一來,在插入模式時,只要輸入 gl,再按 Sapce 鍵或 Ctril+],這個 gl 就會變成 GNU Linux 這個字串。SapceCtril+] 的區別在於前者會多留個空白,方便繼續輸入其他文字;而後者則不會多留個空白。要注意的是,這在取代模式、命令列模式也是可以作用,如果是使用 :ia[bbrev],那只會在插入模式及取代模式有作用。

以下是一些常會用到的指令:

:ab[breviate] 不接任何參數,這會列出目前所有的縮寫對應。其中標有 `i' 的,代表作用於插入模式;標有 `c' 的,代表作用於命令列模式;標有 `!' 的,則兩種模式皆有作用。
:ab gl 這會列出 gl 是對應成什麼字串。
:una[bbreviate] gl 取消 gl 這個對應。
:ia[bbrev] 和 :ab 的定義一樣,但只作用於插入模式。
:cb[bbrev] 和 :ab 的定義一樣,但只作用於命令列模式。
:norea[bbrev] 用於防止重對應已有對應的字串。
:abc[lear] 取消所有由 :ab 所定義的對應。
:iabc[lear] 取消所有由 :ia 所定義的對應。
:cabc[lear] 取消所有由 :ca 所定義的對應。

" 設定加入函式註解的快速鍵(F5)
nmap <F5> o<Home>/*++^M^M<Home>Routine Description:^M<Home>  Description context^M^M<Home>Arguments:^M<Home>  Variable                  - the description for variable^M^M<Home>Returns:^M<Home>  EFI_SUCCESS               - operation successfully^M^M<Home>--*/<Esc>
其中^M是表示Enter動作,需要用Ctrl+v+M產生出來,其中nmap是表示只有在normal才會有作用,另外,要注意的是,上面的所有資料都是在同一行

[2010.10.10 補充]
設定在visual mode時有效的map
vunmap

參考資料:
Vim script 簡介

正規表示式 (regular expression)

* 指前所綁住的字元或字元集合,出現 0 次或 0 次以上。
\+* 作用相同,但不包括出現 0 次。
\= 指前所綁住的字元恰好出現 0 或 1 次。
\| 這是多選,就是 or 的意思,被 \| 隔開的 pattern,任一個符合的話就算符合。

\+, \=, \| 會加上一個 \,是因該字元在 Vim 就具有特殊意義,在一般的 regexp 中是 +, ?, | 就可以了,只是提醒您一下,以免搞混了! 記住 \+ 是不可數的!用辭不是很精確,只是幫助您記憶啦!

[實例] dg*
指 * 前所綁住的字元 g 出現 0 次或 0 次以上。也就是說 d(出現 0 次),dg, dgggg, dgggggggg 都是符合這個 pattern。如果您下尋找指令 /dg*,那符合這個 pattern 的字串都會被找出來。如果用在代換就要非常小心了,像 extended 中的 d 也是會被置換掉的。例如您下 :%s/dg*/test/g 的話,那 extended 這個字會換成 extentestetest。

shell 中使用的通用字元為 pattern matching notation 和 regexp 是不同的意思。dg* 在 shell 中是解為以 dg 開頭的任意字串,這就不包括 d 在內了,也就是說在 shell 中,* 是代表任一字元或字串,這在初接觸的朋友很容易就搞混,請千萬小心。

[[實例]] dg\+
dg, dgg, dgggggg 皆符合,但 d 則不符合。如果是 dg\= 的話,就只有 d、dg 這兩個符合了。

[[實例]] :%s/The\|All/test/g
全文中只要是 The 或 All 都會被替換成 test。注意,如果文中有 There 也是會被替換成 testre!要如何避免這種情形呢?下面會另述及限定使用法。

[[實例]] /123-\=4567
這樣會找出,123-4567 及 1234567。當然 123-456789 也是會被找出來。

[...] 字元集合,表示中括號中所有字元中的其中一個。
[^..] 這是上述 [...] 的補集,表非中括號內字元的其中一個。
. 除換行字元外的任一單一字元。指本身,非指前所綁之字元。就好像 shell 中的 ? 一樣。如果要指定真正的英文句點,要用 \來 escape,就是說 \. 這時的 . 是代表真正句點,而不是 regexp 中的特殊意義。其他如 \* 亦同。

[[實例]]
[Aa]
A 或 a 其中的一個。
[12345]
12345 其中的一個數目字。可用 [1-5] 來表示。連續性的數目字或字元可用 -來隔開,寫出頭尾來代表就可以了。[0-9] 就表 0 到 9 的數目字,[a-d] 就代表 abcd 四個英文字母

[[實例]] W[0-9]*\.cc
這個例子是說以 W 開頭,後接 0-9 其中一個或多個數目字或不接什麼,然後是一個句點,最後是 cc。所以 W.cc,W1.cc,W2.cc,W345.cc,W8976543287.cc 皆符合。如果要表示 W 及 .cc 間夾一個以上的數目字,要寫成 W[0-9][0-9]*\.cc。

[[實例]] .*
這代表任意字元或字串,或什麼都沒有,腦筋急轉彎,對照前面的定義想一下。當然這是不包括換行字元的。

[[實例]]
[^M] 表除 M 以外的任意字元。
[^Tt] 表 T 及 t 以外的任意字元。
[^0-9] 表非數目字之字元。
[^a-zA-Z] 表非英文字母之字元。

注意,^ 要在中括號內,且在最開頭的地方,否則另有含意。

^ 匹配行首,指其後綁住的字串,出現在行首才符合。
$ 匹配行尾,指其前綁住的字串,出現在行尾才符合。含換行字元。

不是在行首的 ^ 指的是 ^ 這個字元。不是在行尾的 $ 是指 $ 本身這個字元。

[[實例]] /^What
這樣只有在行首的 What 才會被找出來。注意! Whatever, What's 也是會被找出來。如果是 /What$ 則是在行尾的 What 才會被找出來。

[[實例]] ^$
這是什麼東東?行首也是行尾的行。ㄚ,就是空白行嘛!當然也不能說這個行是沒有什麼東東啦!空白行至少也是會有個換行字元。在後面會詳述如何消除全文的空白行。

\(...\) 記憶 pattern,可由 \1, \2...\9 來叫出。

[[實例]] :%s/\([a-z]\)\1/test/g
這樣 aa, bb, cc, dd,...zz 都會被 test 替換掉。這和 :%s/[a-z][a-z]/test/g 是不一樣的意思,後者會把 aa, ab, ac...ba, bb, bc...zz 都換成 test。也就是說 \(...\) 由 \1 叫出時會有對稱性的配對出現。

[[實例]] :%s/\(.\)\(.\)r\2\1/test/g
會將中間為 r,前有二個任一字元,後有兩個具對稱性的字元所組成的字串替換成 test。\2 是呼叫第二組 \(.\),而 \1 是呼叫第一組 \(.\)。例如:12r21,cfrfc,7grg7 等都會被替換成 test。

\< 匹配字(word)首。所謂 word 包括文數字及底線。
\> 匹配字尾。這就是前所提及的限定用法,被 \<,或 \>括住的 pattern 就會被限制住,使 regexp 不能再向右(左)擴充解釋。

在 Vim 中 \b 是表示 <BS>即 Backspace 鍵。

[[實例]] :%s/\<abbbc\>/test/g
這樣只有 abbbc 才會被替換成 test。如果沒有這樣限定,:%s/abbbc/test/g,那 deabbbcly 中的 ``abbbc'' 亦會被替換成 test。所以前面 :%s/The\<All/test/g 可換成 :%s/\<The\>\|\<All\>/test/g 這樣一來,There 就不會被替換成 testre 了!

[[實例]] :%s/\<abbbc/test/g 這樣的話,只要是以 abbbc 為首的字(word),其中的 abbbc 的部份都會被 test 所替換。注意!是指字首,而不是指行首。所以 abbbc,abbbcerd ,abbbckijuds 都符合。

\{n,m} 指前所綁住的字元或字元集合最少出現 n 次,最多出現 m 次。

這在一般的 regexp 表示成 \{n,m\}。以下會舉四種不同的例子:

[[實例]] \{最小值,最大值}
[0-9]\{3,4} 匹配至少三位數,但不可多於四位數的數目字。如:
123
12
1
123456
1234567
12345678
1234
12345

如果下 :%s/[0-9]\{3,4}/test/g 的話,那 1,12 這兩組不會被替換,因為不滿 3 位數。而 12345,則會換成 test5。123456,則會換成 test56。12345678 ,則會換成 testtest。1234567 也是會換成 testtest。123,1234 這兩組則會被替換成 test。您可以親自操作一次就知道怎麼一回事了。操作時最後加 gc 來 confirm,這樣您會更瞭解實際替換的內容。ㄟ,別忘了 u 可以回複您的編輯動作。

[[實例]] \{數目字}
xy\{20} 表示 x 後接 20 個 y。 e[x-z]\{4} 表示 e 後接有四個字元,是 x,y,z 的其中一個的組合。如:exxxx, exyyz, ezzyz, exyzz 皆符合。

[[實例]] \{最小值,}
xy\{2,} 表 x 後接至少二個的 y。相當於 xyyy* 或 xyy\+。

[[實例]] \{,最大值}
xy\{,4} 表 x 後接至多四個或更少的 y (可能沒有)。因此 x, xy, xyy ,xyyy, xyyyy 皆符合。

替代變數
代表置換時合於 patern 的字元或字串。

[實例] :%s/\d\d\d\d\d\d\d\d\d\>/ID:&/g
這樣全文中的身份證字號前就會加上 ID: 字樣,也就是說 T123456789 會被換成 ID:T123456789。還記得嗎? \d 就是 [0-9]\u 代表大寫的英文字母。加個 \>是防止 T12345678999 也被換掉。當然前面再加個 \<更保險。ID: 字樣您用中文也行!另一個好用的例子是電話號碼前加上 TeL:,就請您自行練習了!

[實例] 將檔案 3 至 7 行的資料向右移 2 個空白
:3,7s/.*/ &/
但這樣連空白行也是會插入空白字元,較高明的做法是:
:3,7s/.\+/ &/
這樣空白行就不會去動它了!想通了 .*.\+ 的意思了嗎?往前翻一下 . * \+ 的定義。

[實例] 將檔案 3 至 7 行的資料向左移 2 個空白
:3,7s/^ //
就是刪去行首的二個空白啦!

[實例] 將全文的 Edward 這個單字,前後加上中括號
:%s/\<Edward\>/[&]/g

[實例] 將全文的 Edward 這個單字,改成大寫的。
:%s/\<Edward\>/\U&/g

\U 不是代表非大寫字母嗎?喔!您搞錯位置了。\U 在 pattern 的位置的時候是指非大寫字母的樣式,即 [^A-Z],但如果是在置換字串位置的時候是指將其後的字串通通改成大寫。與其相對的是 \L,會將其後的字串改為小寫。詳細請 :h sub-replace-special。

[實例] 將全文每行最後加上 <BR>這個 HTML tag。
:%s/.*/SPMamp;<BR>/g

[2010.01.23 補充]
[實例] 把所有的字串改為1000的倍數
:%s/\d\{3\}$/000/g
:g/[0-9][0-9][0-9]$/s//000/g
感覺起來,g/應該就是把文章內容依後面的patter尋找到的資料存到暫存器中,並且,把暫存器的內容再做之後的動作(/s//000/g)。

[2017.03.03 補充]
把英文單字只保留頭尾,中間用底線取代
例:
good
help
student
school
會變成
g _ _ d
h _ _ p
s _ _ _ _ _ t
s _ _ _ _ l
參考
%s/\<\@<!.\>\@!/_/gc
參考資料:
正規表示式的應用
規則表示式的運用

2009年12月14日 星期一

在右鍵選單用「新視窗」開啟資料夾

當我們想要比對資料夾的檔案內容時,可能會分別開啟視窗方便操作,因此我們可以直接在右鍵選單中加上「在新視窗打開」的功能,只要在資料夾右鍵選單中點選這個項目,就可以開啟新視窗顯示資料夾的內容了。

1.開啟「登錄編輯程式」視窗後,在左邊窗格找到「HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell」機碼,並在該機碼上按一下滑鼠右鍵 ,從選單中點選【新增】→【機碼】。

2.將新機碼的名稱設定為「NewWindow」,然後在右邊窗格的「預設值」項目上按一下滑鼠右鍵 ,從選單中點選【修改】。

3.出現「編輯字串」對話盒後,在「數值資料」空白框中輸入「在新視窗打開」,然後按下〔確定〕。

4.接著在左邊窗格的「NewWindow」機碼上按一下滑鼠右鍵 ,從選單中點選【新增】→【機碼】。然後將新機碼的W稱設定為「command」,並在右邊視窗的「預設值」項目上按一下滑鼠右鍵 ,從選單中點選【修改】。

5.「編輯字串」對話盒出現後,在「數值資料」空白框中輸入「explorer.exe %1」,再按下〔確定〕。重新開機之後,在資料夾上按一下滑鼠右鍵 ,選單中就會出現【在新視窗打開】這個項目,點選之後就會以新視窗開啟資料夾的內容了。

※還原方法:在Step2中的「NewWindow」機碼上按一下滑鼠右鍵 ,從選單中點選【刪除】,刪除之後重新登入或開機即可。

參考資料:
一乙電腦維修站---在右鍵選單用「新視窗」開啟資料夾

2009年12月13日 星期日

皇池溫泉

星期五(12/11),我們的team有舉辦一個活動!
一起去北投皇池泡溫泉~

在泡之前,先一起吃飯,他們的粥聽說非常有名,吃起來還真的蠻不一樣的!以下是一部分的照片~




第一次那麼多人一起泡溫泉,而且是全裸的!

還好我當過兵,什麼場面我沒有見過!馬上就融入那一個場景了!

全部都泡過,有冷泉、溫泉、蒸氣室、三溫暖,算是另外見了一次世面!不錯!

這一整層都是我們的team,有參加這次的聚會有50多人~

健康結果

上個月公司檢查的結果出來啦~

異常的部分
BMI:25.2
正常標準值:18.5~24
理想體重:61.6

TG (三酸甘油脂):282
正常標準值:50~200 mg/dl

C-RP (C反應蛋白):陽性
正常:陰性

以後可能會常熬夜,先把GOT、GPT記錄下來:
GOT:20
正常值:5~40 IU/L

GPT:37
正常值:5-42 IU/L

2009年12月12日 星期六

關掉XP不必要的服務讓你的系統更安全

[系統][教學] 關掉 XP 不必要的服務讓你的系統更安全


服務其實是Win 2000/XP/2003中一種特殊的應用程式類型,不過它是在後台運行,所以我們在工作管理員看不到它。

安裝Win XP後,通常系統會默認啟動許多服務,其中有些服務是普通用戶根本用不到的,不但佔用系統資源,還有可能被黑客所利用。

查看正在啟用的服務項目

以Win XP為例,首先你要使用系統管理員賬戶或以擁有Administrator權限的用戶身份登錄,然後在「運行」中輸入「cmd.exe」打開命令行窗口,再輸入「net start」回車後,就會顯示出系統正在運行的服務

為了更詳細地查看各項服務的訊息,我們可以在「開始→控制面板→管理工具」中雙擊「服務」,或者直接在「運行」中輸入「Services.msc」打開服務設置窗口

關閉、禁止與重新啟用服務

服務分為三種啟動類型:

1.自動:如果一些無用服務被設置為自動,它就會隨機器一起啟動,這樣會延長系統啟動時間。通常與系統有緊密關聯的服務才必須設置為自動。

2.手動:只有在需要它的時候,才會被啟動。

3.已禁用:表示這種服務將不再啟動,即使是在需要它時,也不會被啟動,除非修改為上面兩種類型。


如果我們要關閉正在運行的服務,只要選中它,然後在右鍵菜單中選擇「停止」即可。
但是下次啟動機器時,它還可能自動或手動運行。

如果服務項目確實無用,可以選擇禁止服務。在右鍵菜單中選擇「屬性」,然後在「常規→啟動類型」列表中選擇「已禁用」,這項服務就會被徹底禁用。

如果以後需要重新起用它,只要在此選擇「自動」或「手動」即可;也可以通過命令行「net start Alerter 一般家用電腦根本不需要傳送或接收電腦系統管理來的警示(Administrative Alerts)
建議:停用

Application Layer Gateway Service
如果你不使用因特網聯機共享 (ICS) 提供多台電腦的因特網存取和因特網聯機防火牆 (ICF)軟件你可以關掉
建議:手動

Application Management (應用程式管理) 軟件安裝變更的服務
建議: 手動

Automatic Updates 允許Windows於背景自動聯機之下,微軟到 MicrosoftServers 自動檢查和下載更新修補程式
建議:停用

Background Intelligent Transfer Service 使用閒置的網路頻寬來傳輸數據。
建議: 停用

ClipBook (剪貼簿)
啟用剪貼簿檢視器以儲存訊息並與遠程電腦共享。如果這個服務被停止,剪貼簿檢視器將無法與遠程電腦共享訊息。
建議: 停用

COM+ Event System (COM+ 事件系統) 有些程式可能用到 COM+ 組件,像 BootVis 的 optimize system 應用,如事件檢視器內顯示的 DCOM 沒有啟用
建議: 手動

COM+ System Application 管理 COM+ 組件的設定及追蹤。如果停止此服務,大部分的 COM+ 組件將無法適當運作。如果此服務被停用,任何明確依存它的服務將無法啟動。
建議: 手動

Computer Browser (電腦瀏覽器) 一般家庭用電腦不需要,除非你的電腦應用在區網之上.
建議: 停用

Cryptographic Services 簡單的說就是 Windows Hardware Quality Lab (WHQL)微軟的一種認證,如果你有使用 Automatic Updates ,那你可能需要這個
建議: 手動

DHCP Client (DHCP 客戶端) 使用 DSL/Cable 、ICS 和 IPSEC 的人都需要這個來指定動態 IP
建議: 手動

Distributed Link Tracking Client (分佈式連結追蹤客戶端) 維護區網內不同電腦之間的檔案連結
建議: 停用

Distributed Transaction Coordinator (分佈式交易協調器) 一般家庭用電腦用不太到,除非你啟用的 Message Queuing
建議: 停用

DNS Client (DNS 客戶端) 解析並快取這台電腦的網域名稱系統 (DNS) 名稱,IPSEC需要用到
建議: 手動

Error Reporting Service 微軟的應用程式錯誤報告
建議: 停用

Event Log (事件記錄文件) 啟用 Windows 為主的程式和組件所發出的事件訊息可以在事件檢視器中檢視
建議: 自動

Fast User Switching Compatibility 在多使用者環境下提供應用程式管理,另外像是註銷畫面中的切換使用者功能
建議: 手動

Help and Support 讓說明及支持中心能夠在這台電腦上執行。如果這個服務停止,將無法使用說明及支持中心。
建議: 停用

Human Interface Device Access 啟用對人性化接口裝置 (HID) 的通用輸入存取,使得裝置啟動並維護對這個鍵盤、遠程控制、以及其它多媒體裝置上事先定義的快捷紐的使用。
建議: 停用

IMAPI CD-Burning COM Service XP 整合的 CD-R 和 CD-RW 光驅上拖放的燒錄功能,可惜比不上燒錄軟件,關掉還可以加快Nero的開啟速度
建議:停用

Indexing Service (索引服務) 本機和遠程電腦的索引內容和檔案屬性,透過彈性的查詢語言提供快速檔案存取。
建議:停用

Internet Connection Firewall (ICF) / Internet Connection Sharing (ICS)如果你不使用因特網聯機共享(ICS)或是 XP 內含的因特網聯機防火牆(ICF)你可以關掉
建議: 手動

IPSEC Services (IP 安全性服務) 協助保護經由網路傳送的數據。IPSec 為一重要環節,為虛擬私人網路 (VPN) 中提供安全性,而 VPN 允許組織經由因特網安全地傳輸數據。在某些網域上也許需要,但是一般使用者大部分是不太需要的
建議: 手動

Logical Disk Manager (邏輯磁盤管理員) 磁盤管理員用來動態管理磁盤,如顯示磁盤可用空間等和使用 Microsoft Management Console(MMC)主控台的功能
建議: 自動

Logical Disk Manager Administrative Service (邏輯磁盤管理員系統管理服務)設定硬碟磁盤及磁盤區,服務只執行設定程式然後就停止。
建議: 手動

Messenger 允許網路之間互相傳送提示訊息的功能,如 net send 功能,如不想被騷擾話可關了
建議:停用

MS Software Shadow Copy Provider 管理磁盤區陰影複製服務所取得的以軟件為主的磁盤區陰影複製。如果停止這個服務,就無法管理以軟件為主的磁盤區陰影複製.
建議:停用

Net Logon 一般家用電腦不太可能去用到登入網域審查這個服務
建議:停用

NetMeeting Remote Desktop Sharing (NetMeeting 遠程桌面共享) 讓經過授權的使用者可以使用 NetMeeting 透過公司近端內部網路,由遠程訪問這部電腦,如果你重視安全性不想多開後門,就關了吧.
建議:停用

Network Connections (網路聯機) 控制你的網路聯機
建議: 手動

NetworkDDE(網路 DDE) 為動態數據交換 (DDE) 對在相同或不同電腦上執行的程式提供網路傳輸和安全性。
建議:停用

Network DDE DSDM (網路 DDE DSDM) 訊息動態數據交換 (DDE) 網路共享。
建議:停用

Network Location Awareness (NLA) 如果不使用 ICF 和 ICS 可以關了它
建議:停用

NT LM Security Support Provider (NTLM 安全性支持提供者) 如果不使用Message Queuing 或是 Telnet Server 那就關了它
建議:停用

Performance Logs and Alerts (效能記錄文件及警示) 基於事先設定的排程參數,從本機或遠程電腦收集效能數據
建議:停用

Plug and Play 啟用電腦以使用者沒有或很少的輸入來識別及適應硬件變更,停止或停用這個服務將導致系統不穩定。
建議: 自動

Portable Media Serial Number 透過聯機電腦重新取得任何音樂撥放序列號
建議:停用

Print Spooler (列印多任務緩衝處理器) 將檔案加載內存中以待稍後列印。如果沒有印表機,可以關了
建議:停用

Protected Storage (受保護的存放裝置) 用來儲存你電腦上密碼的服務,像 Outlook、撥號程式、其它應用程式、主從架構等等
建議: 自動

QoS RSVP (QoS 許可控制,RSVP) 用來保留 20% 頻寬的服務,如果你的網路卡不支持 802.1p 或在你電腦的網域上沒有 ACS server ,那麼不用多說,關了它
建議:停用

Remote Access Auto Connection Manager (遠程訪問自動聯機管理員)當程式參照到遠程 DNS 或 NetBIOS 名稱或地址時,建立遠程網路的聯機。
建議: 手動

Remote Access Connection Manager (遠程訪問聯機管理員) 建立網路聯機
建議: 手動

Remote Desktop Help Session Manager 管理並控制遠程協助。如上說的管理和控制遠程協助,如果不使用可以關了
建議:停用

Remote Procedure Call (RPC) (遠程過程調用,RPC) 提供結束點對應程式以及其它 RPC 服務。
建議: 自動

Remote Procedure Call (RPC) Locator (遠程過程調用定位程式) 管理 RPC 名稱服務數據庫。
建議: 停用

Remote Registry (遠程登錄服務) 啟用遠程使用者修改這個電腦上的登錄設定。建議最好關了它,除非你需要遠程協助修改你的登錄設定
建議: 停用

Removable Storage (卸除式存放裝置) 除非你有 Zip 磁盤驅動器或是 USB 之類可攜式的硬件或是 Tape備份裝置,不然可以嘗試關了
建議:停用

Routing and Remote Access (路由和遠程訪問) 提供連到局域網路及廣域網路的公司的路由服務。如上說的,提供撥號聯機到區網或是 VPN 服務,一般用戶用不到
建議: 停用

Secondary Logon 啟用在其它認證下的起始程式。允許多個使用者處理程式,執行分身等
建議:自動

Security Accounts Manager (安全性賬戶管理員) 儲存本機賬戶的安全性訊息。管理賬號和群組原則(gpedit.msc)應用
建議: 自動

Server (服務器) 透過網路為這台電腦提供檔案、列印、及命名管道的共享。如果停止這個服務,將無法使用這些功能。簡單的說就是檔案和列印的分享,除非你有和其它電腦分享,不然就關了
建議:停用

Smart Card (智慧卡) 管理這個電腦所讀取智能卡的存取。如果這個服務被停止,這個電腦將無法讀取智能卡。如果你不使用 Smart Card ,那就可以關了
建議: 停用

Smart Card Helper (智能卡協助程式) 啟用對這個電腦使用的舊版非隨插即用智能卡讀取頭的支持
建議: 停用

SSDP Discovery Service 在您的家用網路上啟用通用隨插即用裝置的搜索。
如上說的,通用隨插即用服務
(Universal Plug and Play, UPnP) 讓電腦可以找到並使用網路上的裝置,經由網路聯機透過 TCP/IP 來搜索裝置,像網路上的掃瞄器、數字相機或是印表機,亦即使用 UPnP 的功能,基於安全性沒用到的大可關了
建議: 停用

System Event Notification (系統事件通知) 追蹤諸如 Windows 登入、網路、和電源事件的系統事件。通知這些事件的 COM+ 事件系統訂閱者。
建議: 自動

System Restore Service 執行系統還原功能。若要停止服務,從我的電腦→內容,[系統還原] 中關閉系統還原
建議:停用

Task Scheduler (工作排程器) 讓使用者能夠在這個電腦上設定和排定自動的工作。設定排定自動的工作,像一些定時磁盤掃瞄、病毒定時掃瞄、更新等等
建議: 自動

TCP/IP NetBIOS Helper(TCP/IP NetBIOS 協助程式)啟用 [NetBIOS over TCP/IP (NetBT)]服務及 NetBIOS 名稱解析的支持。
建議:停用

Telephony (電話語音) 為本機電腦上及經由局域網路連接到正在執行此服務的服務器上,控制電話語音裝置和 IP 為主語音聯機的程式,提供電話語音 API (TAPI) 支持。
建議: 手動

Telnet 啟用一個遠程使用者來登入到這台電腦和執行應用程式,以及支持各種TCP/IP Telnet 客戶端,包含以 UNIX 為基本和以 Windows 為基本的電腦。允許遠程使用者用 Telnet 登入本電腦,一般人會誤解關了就無法使用BBS,這其實和BBS無關,基於安全性的理由,如果沒有特別的需求,建議最好關了
建議: 停用

Terminal Services (終端機服務) 允許多位使用者互動連接到同一部電腦、桌面的顯示器及到遠程電腦的應用程式。遠程桌面的加強 (包含系統管理員的 RD)、快速切換使用者、遠程協助和終端機服務器。
建議:停用

Themes 提供使用者經驗主題管理。 建議: 自動

Uninterruptible Power Supply (不斷電供電系統) 微軟:管理連接到這台電腦的不斷電電源供應 (UPS)。
建議:停用

Universal Plug and Play Device Host 提供主機通用隨插即用裝置的支持。
建議: 停用

Volume Shadow Copy 管理及執行用於備份和其它目的的磁盤區卷影複製。
建議: 停用

WebClient 使用 WebDAV 將檔案或數據夾上載到所有的 Web 服務,M業W2WHebyRT基於安全性的理由,你可以嘗試關閉 。
建議: 停用

Windows Audio 管理用於 Windows 為主程式的音訊裝置。 建議: 自動

Windows Image Acquisition (WIA) (Windows影像取得程式)為掃瞄器和數字相機提供影像擷取服務。如果掃瞄器和數字相機內部具有支持WIA功能的話,那就可以直接看到圖檔,不需要其它的驅動程式,所以沒有掃瞄器和數字。相機的使用者大可關了
建議: 停用

Windows Installer (Windows 安裝程式) 根據包含在 .MSI檔案內的指示來安裝,修復以及移除軟件。
建議: 手動

Windows Management Instrumentation
(WMI) 提供公用接口及對像模型,以存取有關操作系統、裝置、應用程式及服務的管理訊息。
建議: 自動

Windows Management Instrumentation Driver Extensions
(Windows Management Instrumentation 驅動程式延伸)提供系統管理訊息給予/取自驅動程式。
建議: 手動

Windows Time (Windows 時間設定) 維護在網路上所有客戶端及服務器的數據及時間同步處理。
建議:停用

Wireless Zero Configuration 為802.11 適配卡提供自動設定。
建議:停用

WMI Performance Adapter 提供來自 WMIHiPerf 提供者的效能鏈接庫訊息。
建議: 停用

Workstation (工作站) 建立並維護到遠程服務器的客戶端網路聯機。
建議: 自動

把Windows XP內建的壓縮功能關掉
STEP1:在桌面左下角的「開始」按一下滑鼠左鍵,從開始功能表中點選「執行」,在「執行」對話盒出現後,在「開啟」方框中輸入「regsvr32 /u zipfldr.dll」指令,然後按下「確定」。

STEP2:如果指令輸入正確,畫面上會出現如圖中的「RegSvr32」的提示對話盒,直接按下「確定」,就可以順利將Windows XP的解壓縮功能給關掉了。

如果要重新啟動Windows XP內建的壓縮功能,則只要按照相同的步驟,在STEP2的對話盒中輸入「regsvr32 zipfldr.dll」指令,再按下「確定」即可。

參考資料:
系統 - 關掉XP不必要的服務讓你的系統更安全
把Windows XP內建的壓縮功能關掉

2009年12月10日 星期四

透過visual c++ express來debug

在Linux下,要debug可以使用gdb,雖然我不熟!

而在windows下呢?前幾天才學到可以用visual c++

express
來協助debug,單步執行、觀察某一個變數,之類的~

假設我們要trace某一個檔案,叫作HelloWorld.c

1. 先用visual C++ 2008 Express去開啟HelloWorld.c,不需要打開project檔

2. 加入中斷點,例如在Value那一行加入一個中斷點,表示會停在Value = 77;這一行指令執行前

3. 先執行shell的環境,如下圖

4. 到visual C++ 2008 Express的: 工具->附加至處理序

5. 加入目前這一個shell的環境的應用程式,可以由「標題」可以找到目前的shell是用哪一個,如下圖:

6. 接下來到shell執行helloworld這一個執行檔,系統就會自動跑到visual C++ 2008的追code環境啦

然後,就可以一步一步去追程序啦!

2009年12月1日 星期二

榮星花園附近的美食 - TO Eat List

既然住在這附近,當然要了解這附近的美食囉!

發爺燒肉
上個禮拜跟研究所的室友一起去吃的!
賣點是服務員會幫你燒海鮮,缺點就是不是女服務生幫你烤的!!

AMIGO米格墨西哥飲食文化

醬子義大利麵舖

肥牛燒肉

火燒牛

PChome休閒

嚇酷!美食網

美食地圖

灣仔茶餐廳
在錦州街上的一個餐廳,因為這一個週末是NTC的最後一個週末,所以,大家約出去吃!
還可以,不過,在結帳的時候,女服務生服務很差,我們要分開付,她一付臉很臭的樣子!(2010.01.08)我哩!最後是我另一個同事,幫她在前面收集好錢,再一起付給她!

燒麻糬 (遼寧夜市)
聽說不錯吃!改天去吃吃看~