氣質出眾的開放源碼CMS – Drupal

處於日前這個知識經濟爆炸的時代,個人、企業需要處理更新的內容與日劇增,過往繁複的內容處理流程,隨著時間與組織的成長,讓太多過時、錯誤的內容無法及時更新,以難以正確挖掘長久累積的資訊,找出並修正過往資料。 CMS 正是為此問題而衍生,並提供全面的解決平台。包含了完整的內容管理流程,從友善、簡易的內容創作介面,經由散布、刊登到最後的彙集與管理,以及客制 化的網站管理架構,內容刊登的呈現模式,以及使用者的導覽方式等。筆者在此與各位分享一套以PHP開發的開放源碼CMS — Drupal. 
Drupal 
Drupal(droo-puhl)是荷蘭語“druppel”的發音,英語意指微量、簡潔的意思。其原始碼 版權宣告採用GNU GPL。秉持著協同、標準化、開放源碼、高品質、容易使用、模組化彈性設計及低資源需求為設計宗旨。目前的版本有三個分支(4.5.x、4.6.x以及 4.7.x),相對軟體的支援程度如下表: (表1) 

作業系統 
所有版本皆相容於BSD、GNU/Linux與Windows。 

PHP程式語言 
4.5.x版本:必需使用PHP 4.1以上版本。    
4.6.x版本:必需使用PHP 4.3.3以上版本。 
4.6.x版本:必需使用PHP 4.3.3以上版本。 

Apache網頁伺服器 
所有版本皆支援Apache 1.3.x及2.0.x版本。 

資料庫 
所有版本皆支援MySQL 3.23.17以上版本,也相容於MySQL 4。但對於MySQL 5的支援上仍存有一些問題。所有版本皆支援PostgreSQL 7.3以上版本。 

Drupal也提供了完整的線上手冊,若欲深入研究,可參考官方網站(http://drupal.org/)或台灣中文支援站(http://tw-drupal.info/)。 國內外已有相常多的文章、論文與著作,討論如何評估與分析CMS。諸如以小中型企業為主的《Open Source Content Management Systems for Small and 
Medium-Sized Enterprises》<註一>,或是中大型企業為主的《How to evaluate a content management system》<註二>。從簡單的幾項分析項目到複雜至極的數學矩陣<註三>皆有,端視個人與組織的需求而定。 嚴謹的評比,必需考慮組織架構、目標,或管理人員與技術人員等面向。在本文中,僅以程式開發者的角度,簡化繁雜的分項評比,提供常用的分析項目,並說明Drupal在此項目上見長的特性。 
1.中文支援 
目前仍有許多開放源碼軟體並未針對中文進行額外處理。諸如中文化介面的翻譯、中文字串搜尋的問題等。若需要對此軟體作事後中文修正,則需付出更多的人力成本。 Drupal在其原始碼底層直接以UTF-8設計,以解決多國語言上的問題,也能夠處理繁體中文的搜尋問題。中文化介面的翻譯上,也有熱心的社群<註四>提供中文化的版本。 
2.效能 
執行效能對於營運的正常運作有顯著的影響,如何以最低資源成本,最快的處理速度,發揮至可接受的程度,也是評估上常見的議題。 Drupal使用Apache、PHP與MySQL/PostgreSQL建置而成,在速度與穩定性上,已為許多企業所青睞並採納。在資源成本上,相較於plone官方網站建議至少1GHz處理器與512MB記憶體而言<註五>,在硬體需求上較小。 
3.安全性 
筆者在此探討狹義的安全性,即專注於CMS本身的軟體層面上。網路上充斥著SQL injection與XSS(Cross Site Scripting)等攻擊,對於網站的永續經營、顧客資訊與敏感文件的保護帶來衝擊。這個問題視該開放源碼軟體在開發過程中,對於輸入驗證等安全項目關心的程度。 Drupal對於安全性有較嚴謹的態度,相較於其他開放源碼CMS而言,至今發現的安全漏洞較少,而且其開發者與擁護者眾多,使得臭蟲與安全回報制機上較完備。 
4.維護性 
維護性泛指擴充性、人力資源與平台轉移等,這些都是組織會考慮的項目。組織採用開放源碼軟體時,往往會擔心軟體終止開發、未來功能擴充需求、技術人員難尋或將來平台轉移等問題。 Drupal 擁有相當多的擴充模組、樣版及元件可直接套用。在技術上,採用了Smarty Engine,使得程式與內容分開管理,對自行開發擴充套件上,提供了很大的彈性。在人力資源上,Apache、PHP與 MySQL/PostgreSQL等,在台灣擁有廣大的社群與使用者,開發、維護上的任職或外包上較不成問題,而隨著組織發展需要將內容轉移至其他平台,也有其相對應的程式或模組可用。 
開始安裝Drupal 
在安裝Drupal前,請讀者確定環境已有GNU/Linux或BSD等作業系統,並且已經安裝好Apache、PHP及MySQL等必需之軟體。筆者的建置環境如下: 
(表2) 

作業系統 
FreeBSD 6.0 

網頁伺服器 
Apache 2.0 

程式語言 
PHP 4.4 

資料庫 
MySQL 4.1 

CMS 
Drupal 4.6.6 

目前Drupal繁體中文版僅提供4.6.0以及4.7.0兩個版本。Drupal 4.6.0版本有嚴重的安全漏洞,而4.7.0尚在測試階段。因此,筆者建議若要求穩定性為主,則選擇4.6.6穩定的英文版本;若要求中文化介面為優 先,則可選擇4.7.0繁體測試版,待正式版釋出後再行更新亦可。 
第一步:下載原始碼 
取得Drupal軟體原始檔<註六>後,解開至Apache網頁內容目錄下。GNU/Linux常見的目錄是/var/www/html,FreeBSD則是/usr/local/www/data。 
(指令) tar -zxvf drupal-4.6.6.tar.gz mv [...]

專案計畫軟體for mac

ganttproject
http://www.ganttproject.biz/
專案的可用資源、里程碑、任務/子任務,以及任務的起始日期、持續時間、相依性、進度、備註等等功能。 相關資訊: GanttProject 是以 JAVA 撰寫。 支援平台:Windows,Linux, Mac OSX 授權方式:GPL … 

工程師IT環境剖析

[軟體工程師何時轉職 ?]
每一個寫程式的人心裡都明白, 這工作不可能做一輩子。不單單是體力及腦力問題, 最重要的是寫程式, 經濟價值實在有限。
我不會否認有很多的程式高手, 但重點不在於你有多優秀, 而是有多少老闆願意付出和你努力成正比的薪資來顧用你。不是沒有這種工作, 而是如同鳳毛麟角, 而且, 這種工作通常你也做不久, 因為壓力太大, 消耗青春太劇烈了。
退一步來說, 你也不值得付出這麼多, 在良好的SA及SD的規劃下, 工程師只要達成一般標準, 就可以解決掉九成以上的軟體開發需求, 除非是機緣巧合, 或是你很有興趣, 否則另外那一成的工作, 你是很難有機會碰上, 或者, 就算碰上, 也沒法子養活你一輩子。
軟體工程師總有一天要轉職的, 這是他們的宿命。
當要轉職時, 他們有幾個選擇, SA, SD, SE, 出去當老闆及換一行等諸多選擇。看起來雖多, 但其實晚景淒涼, 因為寫程式都是關起來寫, 長期自閉的結果, 當他們想轉職時, 很難擁有足夠的人脈來支撐他們換個前途光明的事業。一般人羨慕IT人的高薪, 卻不曉得只是寅支卯糧, 沒有妥善的規劃, 後勢看跌的。
前面的五個選項, 基本上最後兩項只是充場面, 只有少數人才能選那兩個, 大多數軟體工程師還是要在前三者中選一個來發展的。
SA看起來最風光, 未來也是潛力最好的, 但很遺憾的, 軟體工程師裡, 只有少數人適合這個職務。因為這個工作是很需要和別人打交道的, 而好的軟體工程師通常這一點非常不擅長。
因此, 如果你自認為擅於溝通, 三姑六婆都是你的紅顏知己, 邏輯能力不錯, 又對管理有興趣, 那麼SA是你很好的選擇, 程式功力並不是你要考慮的重點。
相對的, 你對使用者介面很有心得, 而且在美感上也獲得了同事的一致讚賞, 程式功力也有那麼一點自信, 討厭和不是搞IT的人打屁聊天, [...]

SE細說

就某種角度來看, SE對PM而言, 算是萬金油, 只要做IT專案, 那就一定用得上, 差別只是要選那一個專業的SE而已。系統建置安裝要SE, 使用者環境要SE, 甚至到硬體選擇及佈建, 都要用到SE, 有什麼IT專案跟這個沒有關係呢 ?
當然, 雖然SE是到處都吃得開, 但相對的也是專案裡面最沈默及少有聲音的一群。他們的工作基本上就是建構出一個可以執行系統的環境, 系統要如何展現, SE可以給SA和SD一些建議, 但建議時機通常都是在系統運行出了些非系統可以掌握的問題後。
系統工程師基本條件上, 和SD最為接近, 但有一點不同, 就是不需要有很好的軟體開發經驗, 也就是不太需要會寫程式。但要對作業系統, 服務器系統, 網路運用環境有相當程度的瞭解。
SE通常是三者中最為博學一員, 好的SE雖然不一定要程式寫的呱呱叫, 但卻不能對編程一無所知, 對作業系統及開發工具也要有一定的熟悉度, 甚至部份網管有關的工作也要有所涉獵, 所以算得上是專案裡的萬金油。
在專案裡, SE所要執行的工作如下:
· 規劃及建置系統執行環境
· 安裝及設定使用者端環境
· SERVER安裝及設定
· 提供環境設置竟見給SA及PM
· 最佳化系統可靠度及效度
· 撰寫可靠度及效能測試計劃書
· 對電腦及相關週邊設備有一定熟悉度
而一名SE則有下列基本要求:
1. 至少熟悉一種作業系統, 尤其是讓系統的設定及微調等相關技術
2. 至少熟悉一種網路伺服器作業系統, 對如何設定及最佳化熟悉
3. 曾任軟體工程師職務一年以上或熟悉一種開發工具
4. 對網路環境有一定的認識, 尤其是一些通訊設置
5. 熟悉可靠度及效能的評估方法, 並瞭解與系統環境相關之設定
基本上, 如果擁有了像SD一樣的技術背景及個性, 但在美學上實在令人不敢恭維, 那麼SE算是極佳的選擇了。一般而言, SE的下一個生涯規劃, 會比較偏重於技術性兵種, 像是DBA或是網管, 對於IT產品比較有狂熱或愛好的人, SE是極佳的出路。
[在專案中的運用時機]
基本上SE是萬金油, 只要是IT的案子裡就一定要塞一個SE進去, 因為沒有IT專案不需要使用工程技術的, 差別只在使用何種工程技術而已。在套裝軟體的導入專案裡, [...]

SD細說

一般來說, SD在生涯規劃裡, 並不是SA或是PM。當然, 一定要硬來一次也沒有什麼不可以, 但要走這條路, 就要趁早轉職, 因為SD畢竟是較為幕後的工作, 在與客戶的溝通協調上, 並不會有太高的要求, 也較不需要公司管理層面的全局觀。
表面上看起來, SD沒有SA那麼多的工作要求, 但實際上SD是最需要天賦的工作, 不管是畫面的構成, 操作的手順及調整, 甚至於元件的定義及物件的規範, 全都需要一些天賦。很多軟體, 功能很強, 但怎麼看怎麼不順眼, 或者怎麼用就怎麼憋扭, 功能帶來的效益, 全都被這些毛病給遮蓋掉了, 這就是SD的問題。
另外, SD也扮演了系統最佳化的推手。SA所規劃出來的要求及佈置, 都只是邏輯上的構思, 在不同的工具上, 可能有更好的方法可以表現, 也可能會難以展示, 這都需要藉由SD對使用環境及開發工具的瞭解, 來進行調整和規劃。
舉例來說, 同樣是一套財務軟體, 在WINDOWS XP, MAC, X WINDOWS下, 就會有很不一樣的展現模式和技巧。如果再搭配上不同的開發工具, 如C++, JAVA, .NET, PHP, …那差異更多。對SA而言, 這些東西他都不用去考慮, 但SD就不同了, 這些不同的地方, 並不僅僅只是如此而已, 有時還會包括了開發成本及時間問題, SD的重要度, 由此可知。
在一個客製化專案裡, SD的工作內容如下:
· 設計畫面元素規範
· 設計頁面結構及規則
· 設計系統操作畫面, 並編定欄位規範及防呆處理
· 設計權限管理與系統操作機制
· 撰寫使用手冊
· [...]

SA細說

做軟體開發專案規劃時, 常會碰到助理問我一個問題, SA,SD和SE的差別在那裡 ?
這個問題我以前也有過, 還頗為困擾, 系統分析和系統設計及系統工程到底有什麼差別 ? SA和SD的工作又有何不同 ? 這兩者的養成教育又有何差異 ?在過去, SA,SD及SE的確很難區分, 甚至這些角色常常會透過軟體工程師來混合發展。
隨著IT領域的發展, SA,SD及SE漸漸的成為了大型專案必需要的專業分工, 這三者間是有相當的差異的, 不管是養成過程, 甚或是未來的發展, 都大相徑庭, 而要成為一名稱職的PM, 是要能區分出這三者的差異, 才能妥善的安排工作的。
[SA,系統分析師]
SA是 System Analysis 的縮寫, 一般稱為系統分析, 主要的工作就是透過一系列的分析工作, 把客戶想要的結果產生方式, 以各種文件表達出來, 讓開發團隊可以根據這些文件實作出這個結果。
這樣的解釋比較文縐縐一點, 用個通俗一點的方式比喻, 就像是要做出一道宮保雞丁時, 就會有食譜一樣, 裡面會介紹需要的材料及做菜的順序, 然後裡面也會強調要以怎樣手法才能產生出某種效果, 以促進色香味。
這樣的過程裡, SA是較為偏重於在工作流程和處理邏輯的, 透過SA, 開發團隊才可以理出整個系統的架構, 一種做事的脈絡, 以及系統和工作間的關連性, 最重要的, 是這些結果都會被SA呈現在文件中, 而非放在少數人的腦袋裡。
SA不僅止是要針對電腦裡的東西去運作及規劃, 還包括了現實世界裡的實體流程及組織。在很多的情況下, 配合新系統的組織及流程, 是要由SA來執行的。總結起來, 在一個開發案裡, SA執行以下的工作:
· 藉由系統需求書, 使用者的現有標準作業流程來建立出符合期望的新作業流程及搭配流程的系統功能及模組規劃
· 依據功能及模組規劃案, 定出初步的資料庫內容及系統與使用者間的權限搭配規範
· 定出各個軟體零件的規範, 如物件, 函數庫, [...]

論 SA/SD 的角色與定位

我常在許多軟體公司與專案經理們討論軟體人員的職掌時,發現到,耶? 怎麼我所認知的 SA/SD 與他們實際的工作內容大大不同。嗯,所以我想就針對 SA/SD 來給個正名與定位吧。
SA, 系統分析師(System Analyst),是對設計中(Under Design)的系統來作分析,既然是分析,那麼,應該是需要 “剖開” 系統內容,來對其系統內部的結構組成元素,以分析其脈絡。所以我覺得系統分析師,也可以稱之為 “結構分析師(Structure Analyst)。
系統分析師的工作,是著重在系統的內部,應該是要能找出與描述系統組成結構的靜態(Static)元素,並利用元素,動態組合以滿足系統外部的功能需求。也就是說,靜態面的結構元素,與功能面的行為(Behavior)描述,均是屬於系統分析師的範疇。幾個主要的產出,包括類別(Class)圖、循序(Sequence)圖、資料庫的 E-R(Entity-Relationship)圖,是 SA 所該負責的,而且,上述的產出是偏向於建立領域概念的模型(Domain Conceptual Model),並非為與平台相依的軟體規格模型(Software Specification Model),與平台相依的軟體模型,是屬於 SD(System Designer) 的範疇。
而一般軟體公司對 SA 的定位,是在於對客戶端操作者(Operator)與領域專家(Domain Expert)的需求訪談。但是,需求面是屬於系統外部的功能面觀點,我一直不認為這是屬於 SA 的工作,正確地來說,這應該是 “需求分析師(RA, Requirement Analyst)” 的範疇。
有趣的是,我發現到,一般對 SA 的要求,還需要包括對使用者介面(User Interface)的設計,為何會需要 UI 的設計? 我想應該是與 SA 訪談的對象,都比較偏於層級比較低的終端操作者,而這些操作者,會很重視 UI 的操作,卻很少能正確地說明系統真正要的功能,往往都是以局部操作者的角度來看待系統。
我發現到,一般軟體公司對 SA 的角色定位太過模糊,以致於 SA 根本就搞不清楚他們要做的是到底是屬於系統外面的工作,還是屬於系統內部的工作。如果能正確地將系統外部的需求分析與系統內部的結構分析作區分,需求分析由 RA 負責;結構分析由 SA 負責。如此,才能界定與釐清系統內與外的工作。
至於 SD,系統設計師(System Designer),焦點仍就於系統內部的結構,與 SA 所不同的是,SA 所建構的是屬於偏向於領域的概念模型;而 [...]

RA SA SD

RA / SA / SD 的工作與特質

RA(Requirement Analyze)需求分析
>工作內容:
對使用者或 Key Man 進行訪談,以使用者角度了解並定義流程及需求,或針對現行作業中於資訊化過程中可能造成窒礙難行的方案進行流程轉化與修正。
>角色特質:
溝通引導強、思緒條理優、臉皮耐心夠。
>產出:
作業流程圖 DFD、系統功能表Function List、系統雛型Prototyping(使用者介面需求)、使用者需求文件 URS、需求追溯 RTM。
SA(System Analyze)系統分析
>工作內容:
依 RA 所產出URS 文件及RFP、會議紀錄等,轉化為系統程式面需求,此時需評估使用者需求轉化為系統後的可行性、合理性,若具有該專案或產業 Domain Know How 於系統需求面的描繪會更趨明確。
>角色特質:
溝通技巧棒、具技術 Sense、思緒邏輯強、撰文表達好。
>產出:
系統雛型Prototyping(整合客戶流程及介面需求)、軟體需求文件 SRS 、SIT 測試個案、需求追溯 RTM。
Use Case、Use Case Specification、Activity Diagram。
SD(System Design)系統設計
>工作內容:
由SA 產出之SRS及Prototyping 進行軟體細部設計,針對開發程式語言的特性進行軟體規格設計,除以完成系統功能為目的外,需考量系統的擴充彈性、可用性、可靠性、效能性、維護性等。
>角色特質:
技術能力強、組織能力好、工具應用佳。
>產出:
系統設計書SDD、Unit Test 測試個案、需求追溯 RTM。
Class Diagram、Sequence Diagram、Table Schema、ERD。