十月3

徹底移除新倉頡輸入法

新倉頡移除不掉這個問題其實以前就有囉!只是最近 Office 2003 釋出 SP3 更新,不少用戶自動更新後新倉頡又跑出來了。(新注音移除不掉也是同樣的解決方法)

↑明明已經沒有新倉頡了


↑切換輸入法的時候卻又跑出來

解決方法:
1. 先將新倉頡(或新注音)新增回去。
2. 將下列文字存成 .reg 登錄檔,點兩下匯入。
;——————————————————————————————————-
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"CJIMETIPSYNC"=-
;——————————————————————————————————-
3. 再將新倉頡(或新注音)移除。
4. 重新開機就不會再出現了。


十月2

用 PHP 寫 RS232 串列通訊程式

tags , | Comments(12) | 4,656 views

相信經常在翻 PHP 手冊的人應該都有察覺,PHP 不只是可以用來開發網頁程式而已,很多其他語言能完成的工作 PHP 也都做的到,例如透過 PHP 的 Direct IO Functions 就可以對 Serial port 溝通,而且可以在 Windows 下執行,一般在 Windows 要實做 com port 通訊程式,大多是透過像 VB/VC++/C++ Builder 這類程式所提供的元件來撰寫,不過用 PHP 就可以很快實做出一般的功能囉!

在開始之前要先讓 PHP 支援 dio 才行,5.1.0 版之後已經將 dio 移至 PECL 了,可以到 PHP 官網下載編譯好的 PECL,解壓縮後將裡面的 php_dio.dll 放到 PHP 目錄的 ext 底下,接著修改 php.ini 加入 extension=php_dio.dll 即可。

在 Windows 底下讀取 COM1 的例子:

<?php
exec('mode COM1: baud=19200 data=8 stop=1 parity=n');
$fd = dio_open('COM1:', O_RDWR);
while (1) {
    
$data = dio_read($fd, 1);
    
if ($data) {
        
echo $data;
    
}
}
dio_close($fd);
?>

寫法跟在 Linux 用 C 寫 serial 通訊程式差不多,其中 mode 是 Windows 命令列一個設定 serial port 組態的工具(類似 Linux 的 stty),可以打 mode /? 看詳細說明,設定好傳輸率等,接著用 dio_open 開啟裝置,然後就可以做存取的動作囉!


九月30

C 語言中 printf 的問題(續)

tags , | Comment(1) | 1,911 views

前一篇當中提到了 printf 結果異常的問題,在睡前翻了一下手邊借來的「C Primer Plus」,沒想到就有提到這個問題,印象中其他書籍似乎都沒有講到,C Primer 系列果然是好書!

簡單來說就是 C 語言中,compiler 可以選擇先計算函數中的哪個參數,以增加編譯程式的效率,所以前一篇的例子:

printf("%d, %d", age, age++);

compiler 很可能會先算第二個參數,先改變了 num 數值,這樣就造成結果不如預期了。

在「C Primer Plus 5/e 中文精華版」第五章有寫道,遵循以下原則可以避免這些問題:

  1. 請勿在函數當中,對使用不止一次的參數使用遞增或遞減運算子。
  2. 請勿在運算式當中,對使用不止一次的變數使用遞增或遞減運算子。

第一點就是上面所說的例子,第二點的例子如下:

n = 3;
y = n++ + n++;

在 C 標準中並沒有定義這行程式會如何執行,是哪一個先加 1 再運算,還是都先不加,造成了含糊不清的結果,應當避免這種寫法。

九月30

C 語言中 printf 的問題

tags , , | Comments(4) | 1,724 views

今天有個學妹問我一個 C 程式的問題:下面程式的結果為何?

#include <stdio.h>
int main(void)
{
    
int age = 20;
    
printf("You are now %d, and will be %d in one year", age, age++);
    
return 0 ;
}

自認觀念還不錯的我直接就回答「20, 20」。但沒想到實際跑的答案竟然是「21, 20」,這真是出乎意料的結果啊!

馬上另外測試了其他有 printf 函式的語言,如 Java、PHP,結果也都是正確的「20, 20」,所以不知道是 C printf 的 bug 還是什麼原因,希望有人能解答。

請看:C 語言中 printf 的問題(續)

九月27

DiscWizard:免費版的 Acronis True Image

tags , , | Comment(1) | 4,187 views

磁碟備份軟體除了有歷史悠久的 Ghost,近幾年也出現了頗受好評的另一套軟體 - Acronis True Image。之前試用過的感想是速度很快,完整備份整個分區只要幾分鐘就搞定了,只可惜它也是要錢的。

不過現在硬碟廠商 Seagate 和 Acronis 公司合作,推出一個 OEM 產品叫做「Seagate DiscWizard」,採用 True Image 的核心,擁有 True Image 的基本功能,備份、還原、救援都可以輕鬆搞定。想當然爾,這只能用在自家硬碟(Seagate、Maxtor)上,其他廠牌則無法使用。

(在網站上可以看到另一套 Maxtor MaxBlast,其實是同樣的東西,只是名稱不同而已)

來看看介面吧,有沒有跟 True Image 很像?
discwizard.jpg