Feeds:
文章
留言

Archive for 2005 年 11 月

袁相忱牧師傳記﹝活祭﹞

Read Full Post »

原本打算使用 Scripting.FileSystemObject 元件來取得一些用戶端的資料,結果建立該物件的時候就出現"Automation 伺服器無法產生物件",網路上繞了一圈發現原來是"安全性"的問題,不過想想也是合理,如果 Microsoft 沒有對這個加以防範,有心人士可以對使用者的電腦允取允求,甚至將整台電腦的資料刪掉,不過,如果真的要使用該元件也不是沒有辦法,就是請使用者如附圖所示將"啟示不標示為安全的 ActiveX 控制項"改為開啟或提示,不過我個人還是建議頂多改為"提示",如果改為"開啟",可能逛到不該逛的地方,你的電腦就被入侵了。

Read Full Post »

立體成像技術

今天看自由時報的時候,介紹到一則新聞關於中央大學的教授完成了立體成像技術,哇~ 真是太炫了… 不需要特殊的設備,只要光源照射上去就可以出現立體影像,讓我想到科幻片中的那個立體影像一樣真是太棒了,將圖片節錄如下:
 

 

資料來源:

http://big5.chinataiwan.org/web/webportal/W3799218/Uwhatnot/A145689.html

http://tw.news.yahoo.com/051128/43/2kyxf.html

 

Read Full Post »

不同行程透過DLL共享資料

今天看了李維寫的"C++ Builder 程式設計要訣-精修篇",其中的 package 章節提到 DLL 無法達到不同行程間的資料交換,不過就我查考的資料在我的 Windows 2000 上可以透過 DLL共享資料,可能是作業系統的支援程度不一樣,因為書中出版的時間點是 Windows 95/NT 的時代,我並未在該版本的 Windows 上進行測試,也許當時 Microsoft 對於 DLL 的支援並不需要跨行程。回到主題,如果不同行程之間要透過 DLL 共享資料,必須在要共享的資料前後加上如下的宣告:
#pragma data_seg ("my_share_area")
int count = 0;
#pragma data_seg()
#pragma comment(linker, "/SECTION:my_share_area,RWS")
#pragma data_seg 是用來宣告共享區段,#pragma comment 是告訴聯結器宣告區域具有讀(R)寫(W)共享(S)屬性。如此一來,不同行程載入這個 DLL 到自己的行程中,這個區域宣告的變數只會存在一份,所以,只要在公開的函數中存取該區域的變數,就可以達到在不同行程間的資料共享。附圖是我用 VC6 寫的 DLL,並用VB6, BCB6 和 C#寫的程式,顯示的數值是從 DLL 中取出的,每按一下按鈕DLL中的 count 值會遞增 1,可以透過這三個不同的程式來了解不同行程資料共享的可行性。
透過 DLL 來達到資源共享其實本質上也是透過記憶體映射檔來實現的。
附註:
當我撰寫這個範例程式的時候,因為採用不同的開發工具,所以我將 DLL 分別複製到不同的專案目錄下來測試,發現一個我還不太能夠理解的行為,雖然使用的 DLL 一樣,可是 DLL 的位置不同(副本),程式的資料共享就會失敗。我想這個和記憶體映射檔也許有關,改天再確認一下。

Read Full Post »

關於 DDK 的資料收集

Read Full Post »

[PHP] ISBN 檢測

今天看了一本"密碼傳奇"的書,書中提到 ISBN 檢測編碼是否合法的方式,方法相當的簡單,必須符合下面三個規則:
1. 編碼由數字組成
2. 長度必須是10碼
3. 將編碼字串10各字元,由左至右依序乘上 10,9,8,7,6,5,4,3,2,1,然後加總的數值可以被 11 整除
 
下面是用 PHP 完成的簡單測試程式:
  function isISBN($ISBN) {
  $VALID_LENGTH  = 10;
  // 資料長度檢測
  if (strlen($ISBN) != $VALID_LENGTH) {
    return false;
  }
  // 檢測
  $crc = 0;
  $power = 10;
  for($i=0; $i<$VALID_LENGTH; ++$i){
   $crc += intval($ISBN[$i])*$power;
   –$power;
  }
  if ( $crc % 11 == 0) {
   return true;
  }else{
   return false;
  }
 }
 echo isISBN("9577175805")?’true’:’false’;
 


補充說明:
ISBN 格式的代表意義
ISBN 可將字串分成四組 9 577 17580 5
第一組代表書籍出版的國家
第二組代表出版社代號
第三組代表出版社內部統計數目
第四組戴比檢測碼
 
 

Read Full Post »

今天逛 Microsoft 的網站的時候發現這個工具,雖然我現在依然使用 office 2000,不過誰知道哪一天會用到呢?但是我的 word 2000 本身就支援繁簡轉換…. 為什麼 office 2003 還要額外下載… 怪哉
 
下載位址:

Read Full Post »

朋友酒醉後的方向盤

那天朋友生日去唱歌.結果因為不勝酒力.中途就先閃人了
一上車就發現 哇靠….我的寒兜陸<方向盤>ㄋ .
害我氣的問候他老媽
X的 XXX XXX 現在的小偷真是奇怪.沒把車偷走.卻把我ㄉ寒兜陸幹走
搞不清楚這裡是誰的地盤……….是中華民國政府的ㄋ
一氣之下我拿起我的電話………報警.警察問了我一些無聊的問題:
警 :是什麼時後被偷的.
回 :不知道(廢話嘛!又不是小偷.我哪知.)
警:是剛剛嗎?
回:應該是吧.(廢話!難道是去年喔)
警:你是車主嗎?
回:恩..(靠.不然我是路人甲嗎?)
警:身分證字號
回:xxxxxxxxxx
警:電話
回:09xxxxxxxx
警:你用什麼手機
回:SHARP(我用什麼手機關你屁事ㄚ.你乾脆問我多少錢買的好了…..結果….)
警:跟我一樣也.你買多少錢?
回:忘了(哇靠…準…我打算改行去算命 鐵口直斷)
警:那你人在哪裡?
回 :在車上.(廢話!不然還在你心理喔)
警:那附近有沒有可疑的人.
回 :不清楚.(到底你是警察還是我是警察)
警:你是第一次報警嗎?
回:恩..(我沒事幹麼常常報警ㄚ)
警察問完就說:你待在那不要走.我們馬上派人過去處裡.
大概3 分鐘後警車到了.
然後……
(我第一次看到警察發飆…..)
警說 :先生.喝很醉喔!
回:還好啦.不過頭很暈
警:還好….我看是很不好…你這個混蛋.你坐在後座.怎麼會有寒兜陸啦.
回:喔…………………..
害我一直道歉.然後跑回去包廂.

Read Full Post »

 

前幾天聽到廣播,主持人開放 Call in..

主持人:
「請問您叫什麼名字呢?」

聽眾:
「eVonne」

主持人:
「e小姐您好」

(聽眾心裡暗罵,我是英文名字叫 eVonne,不是姓e)

Read Full Post »

Borland C++ Builder 提供一個相當方便的 TRegister VCL 元件,方便開發者讀寫系統登錄檔,這個元件的功能比 VB 提供的 RegXXX 系列的函數功能強的多,使用前必須先引入 #include <Registry.hpp> 才能使用 TRegister ,下面是的程式範例是讀取登錄檔中的 Run 和 Runonce 紀錄,透過 callback 方式顯示資料。
 

// callback
typedef void (*EventListRunValues)(const char* key, const char* value);
typedef void (*EventListRunOnceValues)(const char* key, const char* value);
 
/* 列舉系統開機自動執行(每次)
 *
 * 參數:
 *   EventListRunValues: callback 函數,第一個參數為 key 名稱,第二個參數為 key 的值
 *
 * 備註:開機自動執行的 Key
 *   HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun
 */
void listRunKeys(EventListRunValues callback){
  AnsiString S;
  TRegistry *Registry = new TRegistry();
  TStringList* itemSet = new TStringList();
  try{
    Registry->RootKey = HKEY_CURRENT_USER;
    Registry->OpenKey("Software\Microsoft\Windows\CurrentVersion\Run", false);
    Registry->GetValueNames(itemSet);

    for(int i=0; i<itemSet->Count; ++i){
       S = Registry->ReadString(itemSet->Strings[i]);
        callback(itemSet->Strings[i].c_str(), S.c_str());
    }
  }__finally
  {
    delete itemSet;
    delete Registry;
  }
}
/* 列舉系統開機自動執行(一次)
 *
 * 參數:
 *   EventListRunValues: callback 函數,第一個參數為 key 名稱,第二個參數為 key 的值
 *
 * 備註:開機自動執行的 Key
 *   HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunonce
 */
void listRunOncesKeys(EventListRunOnceValues callback){
  AnsiString S;
  TRegistry *Registry = new TRegistry();
  TStringList* itemSet = new TStringList();
  try{
    Registry->RootKey = HKEY_CURRENT_USER;
    Registry->OpenKey("Software\Microsoft\Windows\CurrentVersion\Runonce", false);
    Registry->GetValueNames(itemSet);

    for(int i=0; i<itemSet->Count; ++i){
       S = Registry->ReadString(itemSet->Strings[i]);
        callback(itemSet->Strings[i].c_str(), S.c_str());
    }
  }__finally
  {
    delete itemSet;
    delete Registry;
  }
}
 
 

Read Full Post »

Older Posts »