2007年12月20日星期四

物件導向關聯式資料庫

關聯式資料庫管理系統( RDBMS, Relational Database Management System, 如mySQL, MSSQL等)是大家比較熟悉的資料庫系統,以database-table-field-record等概念來集合成資料,以field間的relation來建立table互相的關聯。但是這樣的形態有一個與實際世界的gap,也就是物件的class特性,因此而出現了物件導向的資料庫系統(OODBMS, Object-Oriented Database System, 如Caché)。

RDBMS與OODBMS的拉鋸戰,總是RDBMS勝出,最主要是因為有ER-Model及易懂的SQL等完整而簡易的工具來操作,因此雖然與實際世界有gap,但比較容易學習。

OODBMS是啥?看看以下的展示:
http://www.maddash.net/videos/intersystems/cache_demo/

也可以由這裡去找OODB的資源:
http://odbms.org/

另外的一個理論就是Object-Relational Database,使用RDBMS來建立OO的概念,這種作法就牽涉到Object-Relational Mapping,將物件與關聯式資料庫間做對映。

以上RDBMS、OODBMS、ORDBMS三種技術,到底有哪些優缺點呢?下次再談 ...

標籤: , ,

繼續閱讀:台灣搜尋引擎優化與行銷研究院

2007年12月12日星期三

於Windows XP環境安裝dotProject (二)

上一篇文章已經探討過在Windows XP使用AppServ 2.5.9來安裝dotProject繁體UTF8中文版,如何正常顯示Gantt圖的方式,現在再來討論dotProject其他需要修正的地方,也就是發送email錯誤的修正。

要正式啟用dotProject,需要先做以下步驟:

(1)先更改admin的資料,包括正確的email address
(2)建立公司、建立部門、將admin設到某公司某部門下
(3)建立專案、建立任務

以上主要目的是要測試dotProject是否能正確發送email


(1)新增任務或任務日誌時,勾選發送email,submit出去出現以下錯誤

ERROR 001
Fatal error
: Maximum execution time of 30 seconds exceeded in C:\AppServ\www\dotProject\classes\libmail.class.php on line 461

當你去設定系統管理->系統配置,修改為SMTP發送,並輸入正確SMTP Server後,問題仍舊一樣 ...

(2)而在新增ticket(問題跟蹤單)時,送出email通知也出現以下錯誤

ERROR 002
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\AppServ\www\dotProject\modules\ticketsmith\do_ticket_aed.php on line 89

Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\dotProject\modules\ticketsmith\do_ticket_aed.php:89) in C:\AppServ\www\dotProject\classes\ui.class.php on line 510



ERROR 003
Fatal error: Maximum execution time of 30 seconds exceeded in C:\AppServ\www\dotProject\classes\libmail.class.php on line 465

關於ERROR 001:
表示在libmail.class.php無法去發出email
我們打開libmail.class.php (在dotProject/classes下)發現

$this->transport = dPgetConfig('mail_transport', 'php');
$this->host = dPgetConfig('mail_host', 'localhost');

他並沒有去抓dotProject的config,直接設成php方式接localhost

關於ERROR 002:
do_ticket_aed.php亦使用libmail.class.php方式發送email,也沒有去抓dotProject的config

關於ERROR 003:
去修改dotProject的系統設定maximum timeout也沒有用

由以上可以知道dotProject這個版本的發送mail方式並不統一
在dotProject的系統管理下去設定SMTP並不能解決問題

最後的測試結果,在盡量不修改dotProject程式情況下,以下為解決方式:

(1)修改php.ini
[mail function]
; For Win32 only.
SMTP = yourSMTPServer
smtp_port = 25

(修改完重新啟動Apache Server)

(2)修改do_ticket_aed.php (在dotProject/modules/ticketsmith下)

原程式碼
mail($ticketNotification[$priority], $AppUI->_('Trouble ticket')." #$ticket ", $message, "From: " . $CONFIG['reply_to'] . "\nContent-type: multipart/alternative; boundary=\"$boundary\"\nMime-Version: 1.0");

修改成
mail($email, $AppUI->_('Trouble ticket')." #$ticket ", $message, "From: " . $CONFIG["reply_to"] . "\nContent-type: multipart/alternative; boundary=\"$boundary\"\nMime-Version: 1.0");

(3)將libmail.class.php修改
原程式碼
var $charset = "us-ascii";
var $ctencoding = "7bit";
var $receipt = 0;

修改成
var $charset = "utf-8";
var $ctencoding = "8bit";
var $receipt = 0;

(4)修改ticketsmith下的view.php
在if (@$type_toggle @$priority_toggle @$assignment_toggle)
的前面加上以下程式碼

$author2 = $author;
$position = strpos($author2,"<");
$position++;
$author3 = substr($author2,$position);
$author4 = rtrim($author3, ">");

然後把兩行
mail($ticketNotification[$priority], $AppUI->_('Trouble ticket')." #$ticket ", $message, "From: " . $CONFIG['reply_to'] . "\nContent-type: multipart/alternative; boundary=\"$boundary\"\nMime-Version: 1.0");

修改成
mail($author4, $AppUI->_('Trouble ticket')." #$ticket ", $message, "From: " . $CONFIG['reply_to'] . "\nContent-type: multipart/alternative; boundary=\"$boundary\"\nMime-Version: 1.0");

經測試,送出正確email
但尚有些問題待解決,如ticketsmith的followup.php的錯誤,如發送email通知時,如何發出通知給task所有人/被指派人或ticket所有人/被指派人 ... 過陣子再談了。

標籤: ,

繼續閱讀:台灣搜尋引擎優化與行銷研究院

於Windows XP環境安裝dotProject (一)

dotProject是一款開放源的專案管理系統,由dotProject.net團隊所開發設計。他的功能主要用來管理專案執行時的績效與時程,並且俱有詳細的權限管理與模組結構,更重要的是可以使用多國語系,在繁體與簡體中文的支援上,除了pdf列印尚未解決之外,其他中文顯示都比其他同類產品來得方便使用。

dotProject除了有官方正式版外,尚有繁體與簡體的更正版與語言包,但是經測試結果,在不同的PHP環境與不同的作業系統,相同版本的dotProject需要不同程度的修正。因此在此,先以Windows XP環境搭配AppServ/Apache2Triad兩種伺服環境來說明安裝的程序。

Windows XP下使用AppServ來安裝dotProject繁體中文版

Appserv 2.5.9版 : http://prdownloads.sourceforge.net/appserv/appserv-win32-2.5.9.exe?download

dotProject繁體中文版 (dotProject_2.1_RC2_20070529_UTF-8_Chinese版本): http://rt.openfoundry.org/Foundry/Project/Download/?Queue=238

(1)把以上軟體下載解壓縮後備用

(2)安裝AppServ (假設安裝於 c:\appserv目錄下,主機為localhost)
設定MySql character set為utf-8 unicode

(3)把dotProject目錄(dotProject_2.1_RC1_20070423_UTF-8_Chinese_by_Markwu)複製到c:\appserv\www目錄下,更名為dotProject以方便使用

(4)開啟http://localhost/phpmyadmin
登入後新增資料庫,名稱為dotProject,選擇utf8_bin語系

(5)開啟http://localhost/dotProject
按下"Click Here To Start Installation and Create One!"
按下"Start Installation"

(6)在Database User Name輸入root
在Database User Password輸入你安裝AppServ時設定的密碼
按下"Install db & Write cfg"
會出現兩個Warning:

Warning: include_once(C:\AppServ\www\dotProject/includes/config.php) [function.include-once]: failed to open stream: No such file or directory in C:\AppServ\www\dotProject\db\upgrade_permissions.php on line 7

Warning: include_once() [function.include]: Failed opening 'C:\AppServ\www\dotProject/includes/config.php' for inclusion (include_path='.;C:\php5\pear') in C:\AppServ\www\dotProject\db\upgrade_permissions.php on line 7

以上Warning尚無重要影響,可暫不理會

(7)刪除或重新命名c:\AppServ\www\dotProject\install目錄

(8)進入http://localhost/dotproject/ 重新整理頁面
出現登入畫面,輸入帳號 admin、密碼 passwd

呵呵....出現如下畫面



(8)選擇projects->Gantt
出現如下畫面,甘特圖無法顯示




甘特圖無法顯示主要有幾個因素: memory與php library沒有正確設定

memory問題牽涉到兩個地方: php.ini與dotProject system configuration

(9)先來解決memory問題
到php.ini (位置在 c:\windows目錄下) 找到
memory_limit = 8M

修正為:

memory_limit = 16M (或32M, 64M, 128M, 256M)

16M應該大致都沒有問題

然後到開始->設定->控制台->系統管理工具->服務
把Apache 2.2重新啟動

(10)回到http://localhost/dotproject/
選擇projects->Gantt,重新整理畫面

應該可以看到以下畫面




(11)如還沒出現甘特圖,再到dotProject的System Admin->System Configuration
把Memory Limit for Gantt設為16M (與php.ini的memory_limit設成相同數值)

再看看甘特圖是否正常顯示
(修改php.ini記得重新啟動Apache)

就Windows XP/AppServ環境下,應該可以正常顯示

(12)現在把英文轉到中文
到dotProject的User Admin->edit (如下圖)




選擇edit preferences (如下圖)




把locale改成Traditional Chinese (Taiwan) (如下圖)




再看看甘特圖是否正常顯示中文 (如下圖)



標籤: ,

繼續閱讀:台灣搜尋引擎優化與行銷研究院

2007年12月5日星期三

PGP Key 的使用與管理

在前面文章談論過郵件與檔案加密:PGP,本篇文章再來說明一下關於key的使用細節與管理需注意的事項。許多人使用了PGP來加密與簽章,但因為沒有把key的概念弄清楚,因此最後常常搞得放棄使用PGP。因此希望本篇文章可以讓大家很愉快的使用PGP來加強網路安全性。



首先來談談public key(公鑰)與private key(私鑰)。

(1)public key(公鑰)與private key(私鑰):
當你初次使用PGP軟體,所產生的key ring(鑰匙圈)便包括了公鑰與私鑰,鑰匙圈裡可能有你的公私鑰與你朋友的公鑰。你的公鑰是給別人用的,例如對方要傳送加密檔案給你,就必須使用你的公鑰來加密。而對方接到你的簽章文件,就必須使用你的公鑰來確認。

私鑰是你自己用的,例如配合收件對方的公鑰與你的私鑰用來加密文件,而你要簽章文件就用你的私鑰。

而這個公鑰因為是給別人用的,你可以放在大家都取得到的key server或傳送給對方均可,並且當key ring重建就必須重新release給對方。

(2)對於公鑰的sign:
對於朋友的公鑰,你可以sign (也就是使用你的私鑰對這個公鑰確認),sign後會產生DSS signature或DSS exportable signature,表示這個公鑰是確認無誤的。

為何要對公鑰作sign的動作呢?正常情況,這個sign的動作不會對加解密有影響,主要是提高安全性而已。

假設你持有甲的公鑰A,經sign確認使用無誤,如果你的私鑰沒有外流的話,有sign過的公鑰A應可保證沒有問題。如果當你有一天去key server update甲的公鑰,發現有新的甲公鑰B出現,這個甲的公鑰B是真的嗎?(如果沒有sign的話,你可能不會發現公鑰A與公鑰B有不同,如果公鑰A有sign過,當出現公鑰B上就不會有你的signature)。

如果使用假造的甲公鑰B,你加密文件就可能被另外的人解開,反而甲自己打不開。

什麼時候會出現假公鑰?就是被Hacker入侵或被管理者盯上 ...這些人可以利用甲的郵件去傳送甲的假公鑰到key server,然後再截取用假公鑰加密的密文。

所以sign公鑰是可以提高安全性,讓使用者分辨哪些是核對無誤的公鑰。

(3)master key與subkeys:
private key(私鑰)又分成master key與subkeys,前者用來簽章,後者用來加解密。一個私鑰只有一個master key,但可有許多subkeys。並且subkeys的remove會影響原本用舊的subkeys加密的文件,也就是原本可以解密的文件會因更換subkey而不能解開。

為什麼要有subkeys?而且可以有許多subkeys?也是提高安全性。

(4)Split key:
split就是把鑰匙分成許多把,只有全部合起來才能做解密與簽章。
如果一把鑰匙A split成兩把鑰匙後,就有一個公鑰與兩個share key B,C
當要做簽章或解密時就必須同時兩把鑰匙都取得,才能完成動作。

標籤: , ,

繼續閱讀:台灣搜尋引擎優化與行銷研究院