Windows Vistal SP1 台灣版終於在前天正式上線了,有用 Vista 的朋友可以到台灣微軟的下載中心抓了,不過完整的安裝版有 500MB 左右,已經安裝所有 Vista hotfix 的可以直接由 Windows Update 安裝,就不用抓這大的檔,會快一點。詳細的更新的內容可以上微軟網站去看,主要就是把核心改成與 Windows Server 2008 一樣、改善檔案複製的效能、DirectX 10.1、新的 WGA及新的 search 功能,而外觀倒是沒有太大的變化,我一連安裝了三四台 PC,都蠻正常的,沒有什麼問題,各位應該可以放心更新。
下載頁面
緊接著 Vista SP1 的發行,幾天後,也就是 Ubuntu 8.04 正式版的發行了,用 ubuntu 的朋友也可以考慮更新你的系統囉。
2008年4月21日 星期一
2008年4月18日 星期五
Ubuntu 7.10 + VirtualBox 設定 USB 裝置出現 "Could not load the Host USB Proxy Service (VERR_FILE_NOT_FOUND)."
ubuntu 7.10 下使用 VirtualBox 時,欲設定 USB 裝置時,會跳出 "Could not load the Host USB Proxy Service (VERR_FILE_NOT_FOUND). The service might be not installed on the host computer." 訊息,表示沒有權限。這個問題其實是因為 ubuntu 7.10 預設把使用 USB 的權限關了。解決方法如下:
1. 開啟 /etc/init.d/mountdevsubfs.sh
2. 找到這段文字:
3. reboot 後再使用 VirtualBox 就不會有此問題了。
參考自 http://scout-jj.blogspot.com/2008/01/ubuntu-710-virtualbox.html
1. 開啟 /etc/init.d/mountdevsubfs.sh
$sudo vim /etc/init.d/mountdevsubfs.sh
2. 找到這段文字:
#
# Magic to make /proc/bus/usb work
#
#mkdir -p /dev/bus/usb/.usbfs
#domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
#ln -s .usbfs/devices /dev/bus/usb/devices
#mount --rbind /dev/bus/usb /proc/bus/usb
將 comment 去掉成為:
#
# Magic to make /proc/bus/usb work
#
mkdir -p /dev/bus/usb/.usbfs
domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
ln -s .usbfs/devices /dev/bus/usb/devices
mount --rbind /dev/bus/usb /proc/bus/usb
3. reboot 後再使用 VirtualBox 就不會有此問題了。
參考自 http://scout-jj.blogspot.com/2008/01/ubuntu-710-virtualbox.html
2008年3月28日 星期五
[note] Qualified name 與 Dependent name
這是 C++ template 中對於名稱的兩個最主要的命名方式,
Qualified name:當一個名稱被以 :: 或 . 或 -> 給指明其作用域時,這個名稱稱為 qualified name (受飾名稱)
Dependent name: 當一名稱受控於某個 template parameter 時,這個名稱稱為 dependent name (受控名稱),例如 T 是個 template parameter 時,std::vector<T>::iterator 為一個 dependent name;而當 T 是個已知型別時(如 int),則 std::vector<T>::iterator 為一個 nondependent name。
參考自 C++ Templates 全覽 (侯捷譯)
Qualified name:當一個名稱被以 :: 或 . 或 -> 給指明其作用域時,這個名稱稱為 qualified name (受飾名稱)
Dependent name: 當一名稱受控於某個 template parameter 時,這個名稱稱為 dependent name (受控名稱),例如 T 是個 template parameter 時,std::vector<T>::iterator 為一個 dependent name;而當 T 是個已知型別時(如 int),則 std::vector<T>::iterator 為一個 nondependent name。
參考自 C++ Templates 全覽 (侯捷譯)
2008年3月24日 星期一
C++ Templates 的源碼檔案組織方式
在傳統的 C/C++ 程式設計中,我們通常把型別及函式的宣告式放在表頭檔 ( *.h header files),定義式放在實作檔 (*.c *.cpp)中,但是這種運作方式在 C++ templates 中會讓聯結器不能正常工作,因為函式的定義與宣告被放置於兩個不同的檔案,使得該 template function 無法被俱現化,解決的方式大概可分成三個:
1. Inclusion Model:將函式的定義直接寫在 header file,這也是最佳的處理方法。
2. Explicit Instantiation:新增一檔案,加入明確俱現化 template 的敘述,並引入實作檔。
3. Separation Model:使用 export 關鍵定,將 template 匯出。
1. Inclusion Model:將函式的定義直接寫在 header file,這也是最佳的處理方法。
2. Explicit Instantiation:新增一檔案,加入明確俱現化 template 的敘述,並引入實作檔。
3. Separation Model:使用 export 關鍵定,將 template 匯出。
2008年3月14日 星期五
[Note] gcc 中 ISR 及 SIGNAL 的差別
筆記一下,
ISR 與 SIGNAL 都是用來指定 interrupt service routine 的巨集,
它們的差別就是:沒有差別。
SIGNAL 是舊的寫法,也就是為了相容舊的程式碼而保留下來的,
在寫新的 code 時,請用 ISR
ISR 與 SIGNAL 都是用來指定 interrupt service routine 的巨集,
它們的差別就是:沒有差別。
SIGNAL 是舊的寫法,也就是為了相容舊的程式碼而保留下來的,
在寫新的 code 時,請用 ISR
2008年3月4日 星期二
[note] Vista 開啟休眠功能
因為 Vista 預設的關機模式並沒有休眠,而是睡眠 (相當於 XP 中的待命),必需手動將它打開,以管理員身份打開命令提示字元,執行 powercfg -h on,在開始功能表裡就會多一個休眠了。
2008年2月16日 星期六
2008年2月15日 星期五
用 Visual Studio 2005 開發俱 UAC 機制軟體
Microsoft 在 Windows Vista 中新增了一個重要的安全機制,就是 User Account Control (UAC),也就是軟體在執行會用到受保護的資源時,會跳出一個對話方塊詢問是否執行,確定後就會以 Administrator 身份來執行程式,雖然麻煩了一點,不過也帶來可靠的安全性,然而在 Visual Studio 2005 中要怎麼使用這個機制呢?
1. 首先,開啟專案屬性的頁面, 在安全性這個分頁中,將 "啟用 ClickOnce 安全性設定" 勾選,然後在方案總管中就會出現一個名為 app.manifest 的檔案
2. 編輯 app.manifes,在 <security> 與 </security> 中,加入以下項目:
3. 存檔後重新編譯,產生的執行檔就俱有 UAC 機制了。
1. 首先,開啟專案屬性的頁面, 在安全性這個分頁中,將 "啟用 ClickOnce 安全性設定" 勾選,然後在方案總管中就會出現一個名為 app.manifest 的檔案
2. 編輯 app.manifes,在 <security> 與 </security> 中,加入以下項目:
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
其中 level 的值可以是:
asInvoker:不要求權限,使用 parent process 的權限。
highestAvailable:要求 parent process 的最高權限。
requireAdministrator:要求 Administrator 權限。
3. 存檔後重新編譯,產生的執行檔就俱有 UAC 機制了。
2008年2月9日 星期六
[Note] PHP6 去除的功能
這篇也是從 RunPC 上看來的,因為 PHP4 已停止維護 (請見...),有考慮要升級到 PHP6 的網管人員們可別太衝動,因為 PHP6 移除了一些東西,在升級之前可能要先測試一下原本的 Code 能不能在 PHP6 中運作,以下為移除的項目:
1. register_globals
2. register_long_array 與 $HTTP_*_VARS
3. Magic Quotes
4. safe_mode
1. register_globals
這大概是最嚴重的,原本只要把 register_globals 設成 On,就可以很自由地存取全域變數,無論它是從何而來,而現在取消了這項功能,程式員必須很清楚地指明變數的來源,雖然會帶來很多麻煩,卻帶來了安全。
2. register_long_array 與 $HTTP_*_VARS
取消了 register_long_array 的設定,並連帶取消 $HTTP_GET_VARS 及 $HTTP_POST_VARS 變數。
3. Magic Quotes
原本若開啟 magic quotes,則系統會幫你的特殊字元加上 '\' ,不過這是在過去為了處理中文字需要的,PHP6 已全面使用 unicode,自然就不需要 Magic Quotes
4. safe_mode
取消 Safe Mode,必免讓程式員誤解它的功能。
[Note] String 與 StringBuilder 之效能
.NET Framework SDK 中提供了另一種特別的 String 類別,其名為 StringBuilder,當你有大量字串要"連接"起來時,可以使用 StringBuilder 來提昇效能,因為如果你宣告一個 String 變數並給它值,日後要改變值的話,就要放棄原本的那塊記憶體,而再配置一塊新的記憶體來存放新值,如果改變值的動作很頻繁則會大大地降低效能,而 StringBuilder 就是用來解決這個問題。
這期的 RunPC 做了個實驗來比較兩者的差異,一開始原作者分別使用 String 與 StringBuilder 來連接大量的靜態子字串如下,結果效能居然是 String 較佳,而差異大概有十倍,這是怎麼回事呢。原因在於我們連結接是靜態的字串,Compiler 在 編譯時期就會幫他們做最佳化,而連接在一起,所以 String 的 Case 等於什麼都做,當然比 StringBuilder 快很多,接著我們改成動態字串 (Run Time 才決定的字串),效能比較就如我們預期,由 StringBuilder 獲勝。
因此,在你決定用 String 或 StringBuilder 時,最好先考慮一下字串被"決定"的 時機,在 Compile Time 或是 Run Time 呢?
這期的 RunPC 做了個實驗來比較兩者的差異,一開始原作者分別使用 String 與 StringBuilder 來連接大量的靜態子字串如下,結果效能居然是 String 較佳,而差異大概有十倍,這是怎麼回事呢。原因在於我們連結接是靜態的字串,Compiler 在 編譯時期就會幫他們做最佳化,而連接在一起,所以 String 的 Case 等於什麼都做,當然比 StringBuilder 快很多,接著我們改成動態字串 (Run Time 才決定的字串),效能比較就如我們預期,由 StringBuilder 獲勝。
因此,在你決定用 String 或 StringBuilder 時,最好先考慮一下字串被"決定"的 時機,在 Compile Time 或是 Run Time 呢?
public string ConnectStrings_string( )
{string tmp = "" ;
tmp += "11111111111111111111111111111111111111111111111111111111111" ;
tmp += "2222222222222222222222222222222222222222222222222222" ;
tmp += "3333333333333333333333333333333333333333333333333333" ;
// 中間略
tmp += "100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100" ;
return tmp ;
}
public string ConnectStrings_stringbuilder( )
{StringBuilder tmp = "" ;
tmp.Append( "11111111111111111111111111111111111111111111111111111111111" );
tmp.Append( "2222222222222222222222222222222222222222222222222222" ) ;
tmp.Append( "3333333333333333333333333333333333333333333333333333" );
// 中間略
tmp.Append( "100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100" ) ;
return tmp.ToString( ) ;
}
訂閱:
文章 (Atom)