:::

輔大動漫社OPED點播單

布丁布丁吃布丁

輔大動漫社OPED點播單

clip_image002

  • 題名:輔大動漫社OPED點播單
  • 建置時間:2006~2007,2010

我大學時參加了輔大動漫社,並在動漫社中開啟了「動漫OPED放映會」的活動。活動內容很簡單,大家點播想要播放的影片片段(甚至是自己做),然後湊齊這些影片,最後借個演講廳來播放。我已經畢業將近四年,但是這個活動仍然大受學弟妹好評,而且像是傳統一樣地延續了下去,讓我感到非常地意外。

OPED點播單是一個資料庫系統,社員可以利用瀏覽器在網頁上進行點播,而活動負責人則可以在點播單上篩選出最終選入的歌單。程式語言是PHP,資料庫是MySQL,這是一個很小型,但對活動進行有相當大幫助的一個系統。

以往活動中都是由我個人來維護OPED點播單,後來我將之以InnoSetup包裝成安裝檔,供學弟妹輕易地在Windows系統上建立OPED點播單的伺服器。

儘管只是一個小型的系統開發,而且不是正式的應用,不過也算是我個人的作品之一,所以在此留下記錄。


前言

本系統是由輔漫老人布丁開發,為了協助動漫OPED放映會進行而做的點播系統(以下簡稱OPED點播單)。OPED點播單本身以PHP與MySQL架構而成,我把他跟XAMPP與AMPstart結合成可直接執行的網頁伺服器版本,方便對於伺服器設定不熟的學弟妹們,也能夠自行動漫OPED點播單。

安裝需求

網路環境

以下兩者其中之一即可擔任伺服器

  1. 固定IP
  2. ADSL
硬體需求
  • 平時電腦即是長時間開機,就當作是P2P附加的流量吧。流量應該1天不到10KB。
  • Windows 2000/XP (Windows 7上測試起來好像會有點問題)
  • Pentium III以上等級
  • 所需硬碟空間約300MB

OPED點播單下載與安裝

  1. 下載OPED點播單(大約50MB) 
  2. 請直接執行OPEDrequestSetup.exe,開啟安裝程式

OPED點播單安裝精靈

clip_image002[4]

安裝精靈操作很簡單,一直按下一步也可以完成。就不用多說了。

clip_image004

安裝完成之後,安裝精靈會提示您「安裝DynDNS Updater」,請打勾並且完成安裝。

安裝動態網址DynDNS Updater

動態網址讓我們可以用fjuacg.servebbs.org來連到你的電腦,而不用在意你到底是固定IP還是ADSL的浮動IP。

clip_image002[8]

如果你沒有在安裝精靈中安裝DynDNS Updater,你也可以點選「開始/程式集/輔大動漫OPED點播單/安裝DynDNS Updater」來安裝

開始安裝之後的操作介紹如下:

clip_image004[6]

clip_image006[4]

image

使用預設設定即可。

image

Intstall the DynDNS Updater as a Windows Service請留空白。

image

Destination Folder是安裝的資料夾,你可以自行決定安裝位置。

image

Run DynDNS Updater請打勾。然後系統會開啟DynDNS Updater。

image

填入帳號與密碼。

image

以後開機的時候就會自動啟動DynDNS Updater。

設定防火牆

OPED點播單使用50080連接埠來提供服務,以避免跟原本電腦正常服務使用的連接埠相衝突。為了避免被防火牆阻擋,我們要手動開啟50080連接埠。如果最後無法開啟OPED點播單網頁,那麼大多數問題都是被防火牆阻擋了。

防火牆大致上分成軟體跟硬體兩種,除非你電腦網路是透過硬體的無線基地台(或是其他router),那麼一般情況下都只要設定軟體防火牆即可。

因為軟體防火牆眾多,難以確定實際上你安裝的是哪一種,故以下只說明講解Windows防火牆(Windows XP版本)跟卡巴斯基Kaspersky Anti-Virus 6.0防火牆的設定方式,如果是其他情況的話可以再來問我。

Windows防火牆開啟50080連接埠
  1. 開啟「控制台」中的「Windows防火牆」
    clip_image002[10] 
  2. 進入「例外」(因為我預設沒開啟Windows防火牆,所以下面的訊息應該跟你的不太一樣)
    clip_image004[8] 
  3. 點下「新增連接埠」
    clip_image006[6] 
  4. 請填入「名稱: OPEDrequest」、「連接埠編號: 50080」、選擇「TCP」,如下:image 
  5. 在「程式和服務」裡面找到「OPEDrequest」已經新增且勾選,按下「確定」之後,就完成設定防火牆的工作。
    clip_image012[4]

卡巴斯基Kaspersky Anti-Virus 6.0開啟50080連接埠
  1. 開啟卡巴斯基主程式,點選「駭客防護」
    clip_image002[12] 
  2. 點選「防火牆」
    clip_image004[10] 
  3. 進入「設定」
    clip_image006[8]
  4. 進入「封包篩選規則」
    clip_image008 
  5. 按下右邊的「加入」
    clip_image010[4] 
  6. 規則名稱輸入「OPEDrequest」,勾選「本機連接埠」,再點下「輸入連接埠」
    clip_image012[6] 
  7. 輸入「50080」,按下「確定」。
    clip_image014 
  8. 按下「確定」
    clip_image016 
  9. 確定清單當中出現了「OPEDrequest」之後,切換到「區域」
    clip_image018[4] 
  10. 隱形模式必須全部都取消打勾,然後按下「確定」
    clip_image020 
  11. 按下「確定」,設定完畢
    clip_image022[4]

啟動OPED點播單

  1. 請點「開始/程式集/輔大動漫OPED點播單/啟動OPED點播單」
    image 
  2. 程式會自動幫你開啟伺服器,請等候30秒,網頁會自動開啟。
    clip_image002[14]
  3. 網址分成兩種:
    1. 內部測試用網址:http://localhost:50080
      只有你自己能夠連線,其他人無法開啟。僅供測試用。備份/還原資料時,必須使用此網址。
    2. 正式網址:(問問輔漫幹部要不要開放吧,畢竟這算是私下的小活動)
      如果要其他人能看到你的網頁,必須用此網址。
      使用此網址必須啟動DynDNS Updater,並照上述步驟完成設定即可。
  4. 如果看到以下網頁,表示你開啟成功了。
    clip_image004[12]
  5. 但如果看到以下網頁,則表示你開啟失敗。可能是防火牆沒有設定的緣故,請聯絡布丁處理這個狀況。
    clip_image006[10]

關閉OPED點播單

clip_image002

請在Windows工具列右下角工具圖示當中,找到AMPstart的圖示。並按下右鍵,選擇「Exit」,則能夠關閉OPED點播單。

新增OPED點播單代次

確定OPED點播單可以開啟之後,我們才可以進一步地去設定OPED點播單的內容。本說明僅教你如何新增OPED點播單代次,其餘的新增、修改功能,就讓你自行去摸囉。

  1. 進入OPED點播單左下角的「管理介面」
    clip_image002[16]
  2. 點選「選擇使用」下拉選單,選擇「新增」
    clip_image004[14]
  3. 請把右欄資資料都填寫完畢,如果不會填沒關係,稍候可以再來修改。然後按下「新增」,系統會跳出確認視窗,按下「確定」。
    clip_image006[12]
  4. 按下「確定」
    clip_image008[4]
  5. 輸入預設密碼:fjuacg
    clip_image010[6]
  6. 新增完畢,點選標題回到首頁。
    image
     
  7. 這樣就是新一代的OPED點播單囉。
    clip_image015[4]

備份/還原OPED點播單

clip_image002[18]

請先啟動OPED點播單之後,再來開啟「開始 > 所有程式 > 輔大動漫OPED點播單 >備份還原OPED點播單」。

clip_image004[16]

隨後會開啟此網頁,網址固定是「http://localhost:50080/export.php」。您可以在

此下載備份檔案,或是上傳檔案以進行還原的動作。還原時會把原本的資料全部刪掉、再新增還原的資料,所以以前的資料會毀掉,請務必注意。

必須注意的是,備份/還原資料的功能,只有安裝電腦本機端才能執行喔。 (more...)

軟體構築美學──棕地應用程式開發指導原則讀後感想

布丁布丁吃布丁

軟體構築美學──棕地應用程式開發指導原則讀後感想

image

Kyle Baley、Donald Belcham 著;蔡煥麟、張簡才祿 譯

  • 出版商:悅知
  • 出版日期:2010-10-20
  • 台幣定價:$650
  • 語言:繁體中文
  • 頁數:528
  • ISBN:9866348784
  • EAN:9789866348785
  • 網路書店連結:天瓏網路書店博客來書籍館

某天我在逛天瓏書局時意外翻到這本書,書中提及了許多我以前就很在意的議題,包括程式開發的環境配置、如何將物件導向設計模式應用到開發中。更重要的是,該書要改善的「棕地應用程式」正是適用我多次開發的真實情境。讀完之後,我發現這本書給我了比預期還要多的啟發,所以我想藉此機會寫一下這本書的讀後感想,也作為整理自己所學的一個記錄。


標題與內容

這本書內文翻譯得很好,但就是「軟體構築美學」這個標題下的太差,很難一眼就搞懂作者到底要講什麼,而且也很容易跟其他書籍混淆。

原文的標題是「Brownfield Application Development in .NET」,直譯就是「棕地應用程式──以.NET語言開發」,但就市場銷售來說,這個讓人無法直覺理解的標題也不太妥當。

先不論標題如何,該書就是環繞在「棕地應用程式」的改善上。作者是以.NET程式語言開發,時常使用Visual Studio IDE來講解,主要是開發安裝在桌面端的應用程式。但是作者是以概念性、原則性的方式說明各種作法的含意,因此很容易讓人將作者的開發技巧轉換到其他的程式語言上。

該書分成兩大部分,Part I說明開發環境,而Part II才是開始寫程式碼。以下我稍微摘要各章的內容,並加入我自己的感想,讓大家對該書有一些基本的認識。


認識棕地應用程式

建築領域所說的棕地(brownfield),指的是一塊年久失修的荒蕪建地,如果將這塊地好好整理一番,則仍可能恢復其利用價值。對軟體開發人員來說,棕地應用程式(brownfield application)指的是一個既有的軟體專案,此專案可能因為用了一些不好的開發方式、結構、或設計而產生許多問題,但若經過仔細的整理和重構(refactoring),還是有機會起死回生。

以上引用自該書的第一章的第一段。簡單來說,接手別人寫好的程式碼繼續改進,通常就是一個棕地應用程式。作者更進一步地說明棕地應用程式的三個基本元素:

  1. 既有程式碼:棕地應用程式中會有大量的、已經寫好的程式碼。但是可能因為有些問題,而現在有一群專屬的團隊在積極地想改善它。
  2. 差勁實務作法所造成的汙染:程式中到處都是看起來不太正常的技術債(technical debt)需要改善,大多都是前人一再拖延而沒有寫好的地方。
  3. 仍有改善或重複使用的潛力:儘管有些問題,但棕地應用程式仍有改善的價值。反之,如果該應用程式已經沒有救了,那麼它會被歸類到「老舊系統」。

我翻到這邊的時候就深深地被這本書吸引住。我認為現在進行開發工作很少是重新開始(該書稱之為綠地應用程式),而是幾乎都是接手別人的程式碼,再來開發自己想要的功能,例如我以開放原始碼系統DSpace為基礎進行開發就是如此。嚴格說來,這並不符合上述的棕地應用程式定義,因為DSpace寫作架構良好,並沒有明顯的污染問題,至多只是應用功能無法達到專案的需求,因此仍需要開發。

大多數時候,公司的工程師要接手其他工程師開發的系統,實驗室的學弟要接手學長的論文系統,而這些以少數人力開發出來的程式,都是屬於典型的棕地應用程式。我們遇到棕地應用程式仍然是比重新開發還來得多,不可忽視棕地應用程式的問題。


Part I 開發環境

Part I 開發環境包括以下五章:

  • 第02章:棕地專案的版本控制
  • 第03章:持續整合
  • 第04章:自動化測試
  • 第05章:軟體度量與程式碼分析
  • 第06章:瑕疵管理

對我來說很意外的是,在我過去的認知中,講到開發環境,要嘛就是指非常針對特定程式語言的IDE、要嘛就是專案開發的方法論,但是該書講的卻是更實在的開發環境──能夠建立信心的開發環境。

程式開發的環境

該書先探討許多棕地專案都會使用的版本控制系統VCS,指出傳統簽出、簽入式VCS與具備合併、分支、標籤功能的VCS應該如何使用。

持續整合則是一臺時常進行自動化編譯與測試的伺服器。它負責告訴專案成員現在在VCS中的程式碼是否可用。而持續整合用在不需要編譯的直譯式程式語言上的時候,我認為可以用自動化測試來取代編譯,這也是Ruby on Rails教我的想法。

自動化測試則是基於敏捷開發的概念,藉由單元測試與整合測試來為應用程式抓出臭蟲並改善。

以上三章提到的都是非常重要的議題,而比起單純的專案管理方法論,這些技巧更是能夠確實地提昇專案開發的穩定度,帶給工程師、專案經理、老闆與客戶們信心。讓程式開發就像是坐著一輛穩定的跑車,能夠讓駕駛安心地開往目的地的感覺。

開發以外的環境

更進一步的,作者導入軟體度量與程式碼分析的概念,講述我們常常聽到的「程式碼涵蓋範圍」、「循環複雜度」、「類別耦合度」等指標要如何用於專案開發。

然後作者在瑕疵管理中敘述如何面對瑕疵,以及「達到零瑕疵」原則對於提昇專案組織文化的價值所在,這讓我對於瑕疵報告系統又有了全新的認知。

作者不僅僅只是對程式開發的環境提出指導,也更關注在進行開發的工程師、專案經理遇到程式碼以外的實務問題。我並沒有太多與他人合作開發的經驗,但仍不難想像實際開發時專案成員對於瑕疵所帶來的恐懼以及會如何應對。

正視開發環境中會遇到的問題,並逐步著手改善。這是我認為該書相當有價值的原因之一。而且光是Part I 開發環境,就佔了這本書的一半。


Part II 程式碼

經過半本書漫長兩百多頁的開發環境,Part II總算要關注應用程式真正要處理的程式碼了。在Part II開發環境中包括以下六章:

  1. 第07章:在專案中導入好的物件導向實務
  2. 第08章:應用程式的重新分層
  3. 第09章:鬆散一些:降低程式碼的依賴性
  4. 第10章:重整使用者介面
  5. 第11章:重構資料存取
  6. 第12章:管理系統外部的依賴

在剩餘的兩百多頁中談論如此多的議題,該書並沒有辦法相當地深入探討,但是他卻比專門探討程式開發(例如設計模式)的書籍更加地實用──由於廣泛地討論各種議題,因此適合作為程式開發的入門、回顧、反省,並且更能將這些開發技巧應用在實務上會遇到的各種問題。

可測試的物件導向設計

一開始,作者像是老生常談一樣地帶我們複習了物件導向,而且是「適合實務的物件導向用法」──是的,因為太多人還是用程序導向在寫物件導向的程式。封裝、繼承、抽象化、多型等物件導向基本概念,你學過,我學過,龍五也學過,不過很多學校課程也只會教到這邊而已。

實務上到底應該怎麼用物件導向呢?作者給我們幾個好的程式應該有的能力指標:

  1. 可維護性:一切好的程式應該有的基礎出發點。
  2. 可讀性:讓程式碼容易讓人閱讀。接手棕地應用程式的工程師,閱讀程式碼的時間通常比動手寫的時間還要多。
  3. 可測試性(Designing for testability):程式能夠進行個別的、自動化的測試。
  4. 擴充性:讓程式碼在需要加入新行為時很容易修改。
  5. 可逆性(reversibility):任何設計決策都能輕易回復。
  6. 調適性(adaptability):確保變動發生時不用大幅度重寫。

就如許多程設教科書會講的一樣,這些能力指標也是相當抽象的概念。作者介紹了各種好的程式的開發原則與作法,其中最實在的概念,大概就是「可測試性」了。儘管Part II廣泛地討論各種程式碼設計原則,但大多都會回到「想辦法讓程式可以被自動化測試」的概念上,我也覺得這是一個相當實際的指標。

以實務問題來應用設計模式

第8章討論應用程式的分層、第9章教讀者如何降低程式碼的依賴性,作者從實務中會遇到的問題著手,引進各種設計模式來解決這些問題。

許多以「設計模式」為主題的程設書籍,例如Head First的深入淺出設計模式,大多是為講解「設計模式」而講解,儘管深入淺出設計模式真的寫得很好,但看完之後還是會覺得不知道何時該應用於哪種實務問題上。

相反地,該書作者以設計模式來解決棕地應用程式會遇到的問題,這讓我對設計模式有了更具體的印象。作者不是很深入地探討設計模式,不同程式語言也會有不同的實作方式,不過這是一個很好的入門、索引。畢竟我們想要學的程設技巧,都是為了解決實務上會遇到的問題,而不是為了使用設計模式才想要去學設計模式。

儘管設計模式的作法沒有深入的探討,但是作者仍有具體的程式碼舉例。作者在降低程式碼的依賴性一章以電影評論的拼字檢查功能來舉例,帶著讀者一步一步將程式拆解,以依賴反轉原則(dependency inversion principle)設計介面(interface)、以依賴注入(dependency injection)降低耦合度,將一個隨處可見的棕地應用程式改成更為良好的程式。

不得不說令我汗顏的是,儘管我以為我自己已經對設計模式、正確的物件導向有所了解,但是在看該章一開始介紹的棕地應用程式時,我真的覺得自己也只會寫出那樣的程式碼,而且不知道其中的問題所在。當作者一一剖析之後,我才有如夢初醒的感覺,同時也深深地反省著自己的功力不足。

使用者介面、資料存取與系統外部依賴的重構

許多程設的教科書只會講到上面的原則性理論,而本書還深入使用者介面、資料存取的設計、以及使用系統外部依賴的議題。

這邊談到的使用者介面並不是介面設計,而是在討論很多工程師都會把商業邏輯(business logic)跟介面寫在一起的問題。這在開發AJAX應用的時候更是讓人苦惱不已,某些邏輯判斷到底要寫在JavaScript,還是寫在後端程式中呢?作者帶我們認識了MVP(Model-View-Presenter)與MVC(Model-View-Controller)設計模式,而在會保留使用者狀態的應用程式中,適合使用MVP,例如桌面端應用程式;傳統的網頁程式則是普遍採用MVC。依此推論,我想以保留使用者狀態為賣點的AJAX應用,應該也可以用MVP的方式來設計也說不定。

在第11章資料存取主要討論DAL(Data Access Layer,也就是MVC中的Model),作者斥責預存程序(store procedure,在資料庫中寫的邏輯判斷程式),建議商業邏輯應該集中,並且大力讚賞ORM(Object-relational mapping)。說真的,我在用過Active Record這種ORM的設計之後,也認為作者的建議實在是中肯到不行。

外部系統依賴的問題中,作者建議以Proxy、Adapter、Facade等設計模式來設計「反腐敗層」(anti-corruption layer)。而如果將目光縮小到專案內部,內部依賴也是可以利用作者介紹的各種設計模式,將內部元件區隔、模組化,以降低內部依賴的程度。

以上三個議題都比前面的原則性指導更貼近實務操作,作者將各種會遇到的問題一一剖析、探討,讓程設從實務需要的技巧更深入到程式的品質。隨著實例看作者是如何改善、為何要如此修改的敘述,讓人獲益良多。


持續改善

該書的最後一章並不談程式,而是回歸到了整體開發環境中的基礎點:要如何持續改善。

該書談論了各種程設的技巧與作法,儘管有其價值所在,但每個看過的人應該都會先在心中打退堂鼓,抱著:「我真的做得到嗎?」「這種作法真的能持續下去嗎?」的疑惑。至少我就是這樣覺得。

在最後一章中,作者點出這個困惑。作者並不是要實務上立刻大轉彎,馬上加入版本控制、持續整合、自動化測試等機制,而是建議讀者緩慢、持續漸進地改善。

我們需要清楚的知道目標,並計劃如何達成目標,而不是「我們想要讓事情變得更好,所以就加入單元測試」,而是要不斷的推動這個專案,讓最後的結果可以盡量貼近我們當初的期望。

然後最後這一章舉了相當多案例,帶讀者回顧整本書的內容要如何應用在實務上。即使是像作者如此老練的高手,還是不斷在專案中碰得一鼻子灰。但是堅持品質、持續改善,儘管專案成果可能很難讓客戶理解這之中的好處,但是團隊的成員素質卻會因此逐步提昇、變得更有自信。

看完持續改善一章之後,我就決定在把這本書還回圖書館之後,自己再去買一本擺入書櫃中。當我要開始開發專案時,或是專案碰到困惑時,我想這本書都可以給我一些實務上的建議。更重要的是,我希望藉由該書在書櫃上的身影,讓我不會忘記對於持續改善的堅持。


優良的翻譯

最近讀了一些歐萊禮的程式書籍,說實在的,歐萊禮的翻譯通常都會讓人覺得奇怪。有些是翻譯的不錯,不過像是這種比較實務性質、又牽扯到各式各樣議題的書本,我通常會有需要腦內自動校正翻譯的覺悟。

但是這本悅知文化出的書中,譯者蔡煥麟跟張簡才祿翻譯得真的很好,我幾乎找不到看起來很奇怪的地方,閱讀起來毫無阻礙。不僅是程設專案的專有名詞翻譯貼切(時常標註英文原名也是相當的貼心),而且作者幽默的笑點也能讓人看了會心一笑。這讓該書中的眾多案例讀起來像是小說般的有趣。

以下節錄一段讓我印象最深刻的敘述,這是持續整合中的假設案例:

現在,假設我們開發流程已經有自動化建置程序,只要有人簽入程式碼,就會自動執行下列動作:
  1. 取得最新版程式碼
  2. 編譯程式碼
  3. 透過電子郵件通知團隊這次的建置結果
所以當傑克森簽入程式碼的時候,我們的自動化建置程序便會啟動,並且立即在第2個步驟(編譯程式碼)出現錯誤。然後團隊成員會收到電子郵件,知道程式碼出了問題了。我們甚至設定讓電子郵件的內文顯示最後一次簽入的人是誰,在這個例子當中就是傑克森。
現在得用上我們的建置失敗規則了。麥可、小劉、阿輝,以及其他團隊成員都停下了手邊的開發工作,也許去喝杯咖啡什麼的。他們多半會閒晃到傑克森的辦公室隔間開點小玩笑,也許送他一個小東西,例如,一隻象徵失敗的橡皮鴨,暗示他就是最近造成一次建置失敗的人。傑克森看見一群人朝他這邊走來,嗅到了嘲弄的味道,才想起自己之前忘記取出新版的程式碼,於是趕緊做了必要的修補。在第一個人踏入他的隔間之前,他就已經迅速修正完畢,並執行了正確的簽入程序。現在,他可以心安理得地等待命運之神的降臨。

感想

在寫論文的時候,我嘗試自己進行開發一個綠地應用程式專案。儘管在開發之前我讀了一些程設的書,學習設計模式與專案管理,但是開發過程中,我還是得承認自己真的禁不住「走捷徑」的誘惑,在程式碼中留下了一堆技術債,而我只能絕望地看著程式碼向下沈淪。現在,他已經是個標準的棕地應用程式,雖然我不知道未來會不會有人繼續想要改善它就是。

反省當初,儘管我在論文中找來了PHP與JavaScript的IDE,但是並沒有建構起良好的開發環境。Dropbox雖然有版本控制,但跟VCS比起來還是有很大的差距。自動化測試只有Model可以測,我到最近才知道,原來JavaScript跟前端UI也有一套自動化測試的方法。更進一步的,應該要搭配程式碼覆蓋率與持續整合的作法,鞏固程式碼的穩定性。

雖然我希望將我的論文系統以開放原始碼的形式發佈,但他真的很不像是外面人家做的開放原始碼專案。下次起頭時,我還是應該好好看看別人是怎麼做的,以開放原始碼專案的形式好好地開始規劃。

最後,看完這本書之後,我有一種想要再執行一個開發專案的衝動。我想實作這本書中介紹的各種方法,只要我熟悉這些方法,我就能夠帶給團隊其他的工程師,提高大家的程設能力。

題外話,雖然該書是以.NET來撰寫,但書中多次提到Ruby on Rails框架在自動化測試上的好處,而我也很想做做看大家認為能夠快速開發的Ruby on Rails,到底會是多麼快速。

還有好多想要做,還有好多想要學的事情呢。


結語

「軟體構築美學」一書,並不是專案管理的書。專案管理是成功專案的一部分,但是專案管理看再多,程設的等級還是很難進步,開發系統依然像是高空走吊橋,令人驚心膽跳。

現實環境中,很多開發環境都會讓人難以確實地提昇程設技巧。實務上的問題會變成以交際手段來搓過,工程師的能力還是很難提昇。我們這邊的開發團隊,儘管老師給了我們很大的自由,但我覺得在程設開發的能力上還是不夠。在我們這樣有自由、有時間的環境都是如此,在外面中小企業中,沒有經驗的程設顧問、老闆也不見得願意提供資源、而其他工程師也不一定想要配合,這些情況都很容易想像的出來。

即使如此,我還是想要進行更好的程式開發,用有效率、穩定的方式開發出高品質的系統。現在的我,並沒有能力帶領大家。不過,我想還是可以先將「軟體構築美學」作為目標,一步一步地踏實前進,想辦法增進自己的實力吧。

(more...)

師大圖資博士班筆試感想

師大圖資博士班筆試感想

image

隨著政大今年也成立了以檔案實務為賣點的博士班之後,圖資界的博士班已經有了臺灣大學圖書資訊學系師範大學圖書資訊學研究所政治大學圖書資訊與檔案學研究所三所學校了。

我是三月中畢業,在一團焦頭爛額的事情中赫然決定要報考博士班。然而在搬家跟畢業的混亂中,準備備審資料、構思研究計畫是很麻煩的事情,而且報名費又貴(臺大2500元,師大跟政大都要筆試1500元+口試1500元),在一堆莫名其妙的考量之後,最後我只報了師大跟政大。

在師大博士班考試結束且放榜的現在,我想來聊聊筆試以及其他的一些感想。


師大圖資博班的筆試

師大筆試是在5月7日星期六舉行,而在前幾天,我才想到要去師大圖書館看一下考古題。先不論第一屆才成立的政大圖檔所並沒有考古題,臺大圖資系只有碩士班的考古題,博士班的找不到放在哪裡,師大的倒是每一屆都收錄在圖書館當中了,98年99年的考題都能夠直接讓人下載。

image

包含100年的考試在內,師大的筆試出題方式模式都很類似。大致上是三題,其中二題都是要閱讀指定附件中的英文論文或附圖,測驗你是否能夠讀懂論文或圖表的內涵。而有一題則是沒有附件,要你所知記憶中的知識來作答。三大題中又各自分成二到三個小題,而且分數分配相差很大,在短短的100分鐘內,作答時必須依據配分來規劃答案的份量。

就考試主題來看,98年考數位圖書館教育、搜尋引擎架構、後設資料Metadata與DC;99年考知識論、h-index、組織學研究;而今年100年是考美國國會圖書館員角色定位與書目世界、電子書與圖書館、社會網路分析。

閱讀型筆試

不知道是不是學校授課方向差異的關係,師大考試的內容與我在輔大、政大所學的內容有不少的差異。儘管如此,當我看完師大圖資博士班的考古題時,我卻感到非常地興奮且雀躍。因為考題設計的關係,有一部分的能力得仰賴考生的英文論文閱讀能力。不論是英文專有名詞的知識,還是圖書資訊論文架構的閱讀能力,還要考驗你在短暫的時間內將論文的內容歸納的能力。相反的,如果是不懂得閱讀論文、而一字一句地從頭到尾讀完再來答題,那肯定是無法在這100分鐘內寫完。

說來慚愧,我並不是很擅長記憶型的考試方式。如果考題正確答案是有六點,我通常只能背得三點,然後寫一些額外的看法,可是後者只會被評分老師扣分。因此,除非範圍很窄的傳統考試,不然大範圍、只想知道固定答案考試,我通常直接舉雙手投降了。

然而師大的考試不僅是要求記憶,也要求閱讀能力,從這個出題方式可以看得出來,師大要求的人才需要快速閱讀論文的能力,這也是身為博士班學生、研究人員所必須具備的基本技能。儘管考試議題更為刁鑽,但是卻能在閱讀論文中掌握端倪來答題,並不會直接讓人陷入一翻兩瞪眼、不知道就掰了的窘境。


系所取向反思

師大博士班的筆試跟我在大學的考試、研究所入學考試(當時我是推甄進來,這邊我就看過的他校考古題而已)相較之下可說是非常與眾不同,讓人強烈地可以感受到師大要求的是怎樣的學生。

在決定要考博士班之後,我就一直在想,到底一個系所想要的博士班,到底是怎樣的學生呢。系所到底是想要培養出一個圖書資訊學的教師?流通採編的館員?政策規劃的公務員?領導專案計畫的研究員?業界應用的技術人員?然而,這又跟研究所要求的人材究竟有何不同?

而各個系所取向,與我自身的目標──未來能夠將所學投入業界,從根本的產品來改善圖書館服務型態,支援前線館員服務廣大讀者──是否有何差別?

由於我在陳志銘老師底下學習,時常在聽陳老師對於博士班的願景。陳老師是資工領域的博士,儘管來到圖檔所之後,研究方向越來越偏社會科學,但對於博士班的規劃,仍然有濃濃的資工風格。「博士出來之後可以去帶領研發團隊」,儘管老師、或是資管的朋友們都這樣認為,但是在圖資這邊的人談到博士,到最後都是教書的教授。

如果當教授,可以有很好的研究環境、執行大型計劃、可以將理念與理想推廣到眾多的學生中,薪水、生活品質與社會地位又是相當的優渥──很多人都這樣說。不過,我總覺得這是一個需要累積更多經驗、對於各種事務有更深刻看法之後,才會想要來做的事情。

在目前我還想要學習更多知識。我想要學著撰寫期刊論文的發表,想要研究資料交換技術,想要應用學過的資料探勘到資訊系統上,想要學習更有生產力的系統開發技術,想要把未完成的碩士論文,好好地做到一個程度,然後留給後人。這些在我碩士都還沒做到的時候,我就從研究所畢業了。而這些遺憾,也造成了我想要繼續當個學生的一個原因。

回到現實層面來看,這樣子的想法與各系所所想要的人材──教師,應該是有很大的一段差距。


圖書資訊學教育的未來缺少了什麼?

之前有老師問我這個問題,當時我並沒有回答的很好,但是日後這段日子裡,我一直在思考這個問題,而至今仍找不到一個理想的答案,只是仍卡在實務與理論之間的矛盾。

圖書資訊學教育一直是一項實務取向的學門,而且綁定在圖書館機構、圖資系所機構上運行。在研究所中,我學習到了實務操作更高層次的理論知識,但是這是一種「馴服式的教學」,訓練一個能夠習慣在受限制環境中了解這個遊戲規則的操作人員。舉例來說,對於電子期刊作為數位館藏的管理策略,教學中是要學生在廠商的種種限制之下進行考量,而不是真正地「為讀者、為資訊服務與組織的形態」來規劃。彷彿「理論歸理論」,「實務歸實務」,這是兩碼子的事情。而理論融入實務,最直接的是幫助寫出一個漂亮的計劃書而已,至於服務到底能不能真的這樣做,那要看經費、看廠商能力、看有沒有來自澳洲的讀者

圖書資訊學的理想很大,將資訊以更便捷的方式傳遞到使用者的手上,這是大家的終極目標。要達成這個目標,需要從各項細節進行研究,需要有負責實務開發的技術,需要有應用這些技術的人員。但現在的圖資教育到底要培養的,是哪方面的人材?

感覺上,目前圖資指的「實務」是指前線應用技術的館員。很多館員會認為自己「被技術拉著鼻子跑」、「被廠商限制的要死不活(然後怪罪政府沒立法規範)」,那為何不跳脫出這個框架,思考如何將學界知識與業界經驗結合,促進圖書館與出版商健全的合作關係呢?

不,老實說,其實我根本就沒有資格去指摘別人。我沒有深入了解實務前線的人們需要的是什麼,也不夠認識圖書館與業界、實務與技術之間的差距,所以我認為要我談什麼圖書資訊學教育未來的方向的,我還是不夠格。

我沒有這麼大的理想與抱負,現在的我,只想在這個領域做些小小的貢獻(包括寫寫blog),做得起自己做得到的事情、學習自己想做的事情,這就是我想要的踏實人生吧。


結語

以前我就說過,與其對大方向泛泛而論的抱怨,我比較喜歡談談怎麼利用社會網路分析辯識使用者資訊尋求行為的這種踏實研究的方法。

不要抱怨,默默耕耘吧。

(more...)

布丁的自我簡介 (2011年版)

布丁布丁吃布丁

布丁的自我簡介 (2011年版)

pudding(500px)
姓名 陳勇汀(ㄊㄧㄥ)
暱稱 布丁 (布丁布丁吃布丁)
e-mail pulipuli.chen@gmail.com
學術領域 數位學習、數位圖書館、數位典藏
專長 以網頁程式為主:JavaScript (jQuery)、CSSPHP,略懂Java跟JSP
具有網路伺服器管理、大量電腦維護的經驗
興趣 技術學習、程式實作
爬山、散步
學歷 國立政治大學 圖書資訊與檔案學研究所  (碩士學位)
天主教輔仁大學 圖書資訊學系 (學士學位)
國立臺中第一高級中學 社會組

自我介紹

作為一位現代社會人,我認為時常保持著一顆求知的好奇心是必備的習慣。為了滿足求知的欲望,我致力學習如何尋求知識的方法。修習圖書資訊學領域的課程中,我學到了如何利用參考書、資料庫等各種資訊媒體來找尋別人發表的知識;在大學參與計畫、研究所撰寫論文的過程中,我開始學習如何設計研究方法、規劃實驗、問卷與訪談來蒐集那些尚未發掘的知識。接下來,我希望能夠更加地熟悉探究、發掘知識的研究技術,並且更進一步地以發表來與其他人一同分享研究的成果。

人生短暫稍縱即逝,但是人們記錄下來的知識,卻仍能讓後人永久受惠。從就讀輔仁大學圖書資訊學系開始,我受到多位老師的薰陶,秉持著知識分享的想法,將自己在學習與生活中有價值的事物,像是讀書筆記考試準備DSpace伺服器管理等技術資料,透過blog「布丁布丁吃什麼?」(http://pulipuli.blogspot.com) 分享到網際網路上供人瀏覽。另一方面,將程式開發作為興趣的我,也相當樂於將自己的開發成果公開分享。我在碩士論文「合作閱讀標註之知識萃取機制」中開發的「知識標註學習系統」即以開放原始碼的形式授權,提供學弟妹或其他任何想要參與此領域的研究人員自由地取用、進一步開發。

有同學看著我的筆記來準備考試,有網管人員看著我的技術文件來處理伺服器的問題,也有開發人員看著我的DSpace教學來認識這個系統。看到我在blog撰寫的文章能夠幫助許許多多的人,更讓我覺得知識的分享是一件非常有意義的行為。然而,我並不滿足於這種程度的分享。透過blog在網路上發表文章很容易,但若要撰寫出架構嚴謹、條理分明的文章,我還有待訓練;系統程式開發只要拿書與練習就能夠做得到,但是要做出一個有意義的系統、並且從各種角度驗證系統的價值,卻是一件相當步容易、但是非常值得去學習的知識。

在就讀輔仁大學圖書資訊學系時,我從大二就進入林麗娟老師的實驗室,協助老師管理伺服器與教學網站。在大三時,由於我嘗試在林老師原有的教學網站上加入了討論區的回覆功能,林老師指導我以此申請國科會95年大專生參與專題研究計畫,探討「網路非同步互動引言機制」的價值所在,並啟發了我對於研究的興趣。在就讀政治大學圖書資訊與檔案學研究所時,我進入了陳志銘老師的實驗室團隊,跟著陳老師學習論文撰寫與程式開發的技術。在就學期間,我不僅跟著陳老師發表了幾篇國內外的期刊與研討會論文、參與圖資系所論文聯合發表研討會圖資青年論壇與談人,也與陳老師、實驗室的同窗們一同撰寫了「DSpace開放源碼數位典藏系統建置理論與實務」一書。在陳老師的指導之下,我對於老師在研究構想與論文撰寫感到相當地欽佩,更覺得自己在研究方法、資料分析與文章寫作上還有相當大的努力空間。

即使是碩士論文「合作閱讀標註之知識萃取機制」撰寫完成的時候,我仍然覺得還有其他方向可以繼續延伸發展、深入探討,而對研究之路感到意猶未盡。在研究議題上,數位閱讀環境中的多人閱讀標註中,讀者的閱讀行為與深層認知等研究仍有相當多探究的價值。這不僅有助於推廣閱讀活動,更能夠利用讀者閱讀標註的行為資料來萃取知識──這也是我在碩士論文中想要解決的問題,但還有許多可以改進的地方。另一方面,在系統發展的成果之上,我在碩士論文中開發的「知識標註學習系統」能夠結合各種以網頁呈現的數位圖書館、數位典藏,不論是造福讀者閱讀上的便利、或是對於數位閱讀研究上,未來仍具有持續開發的價值。

我希望未來能夠繼續深耕數位閱讀的議題,並且持續發展「知識標註學習系統」、使它更為完善。更重要的是,我想要在學術的殿堂中,將我所學所得的研究成果發表在研討會與期刊中,與他人一同分享知識、一起為圖書資訊領域而努力。


經歷

[2008~ 2011] 陳志銘教授主持的行政院國科會專題研究 計畫助理
  • 情感感知遊戲互動之合作式語言學習模式發展與學習成效評估研究 (NSC97-2511-S-004-002-MY3)
  • 網路學習之形成性評量語學習診斷工具發展與研究 (NSC97-2628-S-004-001-MY3)
[2008~2010] 教育部全國通識教育資源平台建構與永續發展計畫 研究助理

負責技術指導、協助功能開發。計畫網址:http://get.nccu.edu.tw/

[2009] 國立臺中圖書館獎助博碩士班學生研撰圖書資訊學位論文獲選

論文題目「合作式閱讀標註之知識萃取機制研究」(原題目「基於閱讀標註策略之知識萃取在支援數位學習上的應用研究」)。獲獎報導:文教廣角鏡─獎助碩博士論文 累積研究文獻

[2009] 圖書館事業發展2009青年論壇 與談人

與談議題五:「技術新浪潮──傳統再感動」,演講內容「標註應用於數位典藏」。

[2008] 政大圖檔所數位典藏實務與加值服務研習班工作人員

協助研習班事務與輔助教師授課,設計「數位典藏系統與平台設計──以DSpace為例」與「DSpace實作教學」教材。

[2008] 華藝公司GCScholar資料庫測試員

測試資料庫各種功能。現在該資料庫已正式上線,命名為「Airiti Library 華藝線上圖書館」。

[2007~2008] 政大圖檔所、數位圖書館與數位學習實驗室之伺服器設備管理維護
[2007] 政大圖檔所頂尖大學計畫「臺灣百年圖書館史暨數位圖書館先導計畫」計畫助理

負責系統建置。計畫成果網址:http://tlh.lias.nccu.edu.tw/

同時也建置計畫介紹網站,但現已停止服務。計畫介紹網站請看此介紹:http://pulipuli.blogspot.com/2011/06/blog-post_01.html

[2007] 中華民國圖書館學會50屆會員大會 舞台表演
[2007] 臺灣圖書館數位典藏現況與展望研討會 工作人員
[2007] 國際學校圖書館事業學會IASL 2007年 年會志工

[2005~2007] 林麗娟教授主持的行政院國科會專題研究 計畫助理
  • 資訊科技應用與創意教學(NSC 93-2511-S-030-001)
  • 資訊融入自然領域專題式學習(NSC 93-2520-S-030-001)
  • 由動機探討電腦人因網路互動學習(NSC 94-2520-S-030-002)

在這段期間協助林麗娟老師維護Linux伺服器與多個網站,其中學到最多的是「大家e起來互動式計分討論區」,介紹請看這邊:http://pulipuli.blogspot.com/2011/05/e.html

[2006~2007] 國科會95年大專生參與專題研究計畫執行者
[2007] 輔仁大學圖書資訊學系 系友與學生互動網 建置

網址:http://alumni.lins.fju.edu.tw/。關於此網站的介紹請看:http://pulipuli.blogspot.com/2011/06/blog-post.html

[2006~2007] 英國語文學系英文卓越教學計畫助理

英文導讀 Reading Guiding」開發與維護。關於此網站的介紹請看:http://pulipuli.blogspot.com/2011/06/guided-reading-on-web.html

[2006~2007] 輔大圖資電腦教室工讀生

在李隆基助教指導維護與管理電腦教室,練就一身快速換裝燈管的特技。(!?)

[2003~2004] 輔仁大學圖書館服務隊

出隊服務「港源國小」與「陸豐國小」,擔任資管與生活職務。

[2004] 輔仁大學圖書資訊學系 班代表
[2004] 全國大學學生議會及議事員研習營 工作人員

著作目錄

專書
  • 陳志銘、陳勇汀DSpace開放源碼數位典藏系統建置理論與實務。臺北市:文華圖書館管理股份有限公司。(出版中)
期刊論文
  • Chen, C.-M., & Chen, Y.-T. (2010). Developing a Taiwan Library History Digital Library with Reader Knowledge Archiving and Sharing Mechanisms Based on the DSpace Platform. The Electronic Library. [SSCI收錄]
  • 陳志銘、陳勇汀、林筱芳(2010)。通識教育開放式課程數位典藏建置之研究大學圖書館14(2),83–112。[THCI收錄]
  • 王梅玲、蔡明月、陳志銘、柯雲娥、蔡佳縈、陳勇汀等(2008)。台灣圖書館史數位圖書館建構之研究圖書館學與資訊科學34(1),15-38。 [THCI收錄]
研討會論文
  • 陳志銘、陳勇汀、黃柏翰、林育如(2011)。DSpace-DLLL開放源碼數位典藏系統建置與應用。臺北市:國立政治大學圖書資訊與檔案學研究所。
  • 陳勇汀(2009)。基於閱讀標註策略之知識萃取在支援數位學習上的應用研究(頁。155-165)。第一屆圖資系所論文聯合發表暨觀摩研討會
  • Chen, C.-M., Wang, M.-L., Tsay, M.-Y., Zhang, D.-Y., & Chen, Y.-T. (2008). Developing a Taiwan Libraries’ History Digital Library with Reader Knowledge Archiving and Sharing Services Based on DSpace Platform. LNCS conference proceeding. Presented at the International Conference on Asia-Pacific Digital Libraries.
  • ChanLin, L. J., Chen, Y., & Chan, K. C. (2008). The use of labeled postings for promoting asynchronous interaction. Proceedings of World Conference on Educational Multimedia, Hypermedia and Telecommunications 2008 (pp. 988-997). Chesapeake, VA: AACE.
報告

作品

網站
Blogger工具
JavaScript程式
其他

今年都已經快要過了一半了,不過還是要鼓起勁來更新自我介紹。

今年四月到五月間,我在博士班報名中寫了一些關於自己的介紹、履歷、以及一些作品的簡介。有些是值得跟大家分享,或是為自己做個記錄的資料,最近我會陸陸續續將他們擺上來。

上面的自我介紹,就是在書面資料中的內容,僅做些文詞上的修飾而已。也許看起來是有點太過冠冕堂皇,不過作為我個人現在的目標之一,倒也沒有半點虛假。

每年看著自己對自己的介紹略有改變,也許這也是一種有趣的日記吧。2010年的舊版自我簡介請看這篇

(more...)

英文導讀 Guided Reading on the Web

布丁布丁吃布丁

英文導讀 Guided Reading on the Web

image

我大學三年級是接下英文導讀的網站架設與維護工作。這是一個以PHP、MySQL組成的網站。當時該計畫是將英文導讀網站由外包公司設計,然後交貨到計畫,聘請工讀生來維護,我就是擔任這個工作。

課程典藏

image

英文導讀是一個數位多媒體課程典藏的網站。典藏內容以英文文章為主,能夠典藏靜態文字、影音、圖片等資料。

文章註解

image

在數位學習的支援上,除了基本的公告欄、討論區、留言板、線上辭典之外,學生還可以在文章每個段落撰寫標註、為每篇文章撰寫筆記,並彼此分享、觀摩。

初次碰觸大型系統

這是我第一次修改別人寫好的大型系統,而且其實該外包公司偷工減料不少,我的工作不僅僅只是維護,還額外地寫了許多功能進去,像是資料排序、搜尋、刪除與修改功能的補強。除此之外,我將phpMyAdmin整合英文導讀的計畫中,教導老師用更簡單的方式管理資料庫,並且將資料庫匯入、匯出的功能整合進英文導讀網站中,即使我離開了,接手的工讀生也能夠輕易地管理與備份網站。

後話

我在2007年大學畢業之後,該網站轉交其他工讀生維護。後來李老師也有幾次找我幫忙處理一些修正工作,不過目前似乎是沒有在使用中的樣子。

現在回頭看看這個網站,發現他有許多在數位學習上的用心。不僅課程教材提供了認知理解支援,讓學生不僅僅只有文字閱讀,還有圖片與語音等多媒體的輔助。註解與作業分享也是相當前瞻的功能,內涵了許多數位學習中值得深入探討議題呢。

(more...)

台灣百年圖書館史暨數位圖書館先導計畫 建置手冊

布丁布丁吃布丁

台灣百年圖書館史暨數位圖書館先導計畫 建置手冊

image

大多數人對於台灣百年圖書館史數位圖書館先導計畫的印象都是DSpace系統,但該計畫在執行前期的時候,其實是用我架設的計畫網站來存放計畫相關文件。架設這個網站的時間點是繼系友網站與輔大圖資系網站之後,一樣都是以XOOPS技術建置而成,並有更進一步的長進。

以下是當時計畫告一段落的時候撰寫的建置手冊,描述一些建置的細節以及操作畫面。特別是管理介面的操作過程跟編輯畫面,當時實在是用了很多心力在修改啊。然而比較私密的部分,我也做了些修改,以避免不必要的麻煩。

當初匆促寫完這份文件,語氣上似乎也很不嚴謹,現在回頭看來還真是感到有趣啊。


摘要

計劃說明網站(以下稱為本系統)跟主要的數位圖書館暨數位典藏網站(以下稱為Dspace系統)是完全不同的兩個系統,本篇技術文件在敘述前者的建置過程及重點。本系統是由XOOPS建置而成,用XOOPS的CBB論壇提供的編輯器及管理功能,修改而成為一個可以直接使用瀏覽器進行編修、上傳檔案的網站系統。然而本系統卻因為之後將重心轉移到Dspace系統上,導致本系統在內容或是系統維護上逐漸荒廢。本系統的網頁管理功能可以彌補Dspace系統的不足,整合兩個系統是未來可以考慮的方向。

一、建置目的

原本計畫的說明應該要跟網站本身結合在一起,但是為了先做到宣傳效果,而決定另外先架起一個網站,負責擺置計畫的宣傳文宣。只是內容並沒有按照時程更新,導致本網站頗有被擺置荒廢的傾向。(實際上,2011年的時候,該網站已經消失了)

計畫網站的網址為http://top.lias.nccu.edu.tw/,與DSpace系統是在不同的伺服器上運作,是獨立的系統。

二、內容架構

計畫網站大致上是截取本計劃的總體計劃書內容,再加上近期的活動而建構而成。網站的架構圖大致如下:

  1. 首頁:包括近期活動廣告、會議記錄、參訪記錄、最新消息、網站搜尋、網站訂閱
  2. 最新消息:發佈最近的消息,但因為缺乏維護,所以消息過時。
  3. 使命:總體計劃書內容擷取,包括計畫緣起、計畫目標、執行團隊與分工、工作時程。不過有些資料在計畫後期有所改變,例如執行團隊與分工,還有實際進行的工作時程,這些是需要更新的項目。
  4. 參與人員:同上,多了e-mail連絡位址。一樣是有需要更新的問題。
  5. 會議記錄:放置每次開會的會議記錄,那是Word檔轉加密過後的PDF檔案。
  6. 參訪記錄:目前總共有兩次參訪記錄,各別是「交通大學楊英風數位美術館參訪紀錄」、「臺灣大學圖書館數位典藏計畫參訪記錄」。格式同上。
  7. 演講記錄:目前沒有資料。這個論壇的定位與研討會的定位頗有混淆的感覺。
  8. 相關資料:關於本計劃的相關書目及網站列表,特別是有些技術文件是來自於參訪單位所提供的私家資料。
  9. 臺灣圖書館事業與教育史研討會:研討會的相關資料。在該研討會開始之前,此頁面是拿來做廣告的用途。研討會結束之後,就只是擺放資料而已。

三、系統建置過程

伺服器及系統

本系統是以PHP&MySQL為基礎的XOOPS之CBB論壇模組修改而成。PHP伺服器端程式語言與MySQL皆是跨平台開放原始碼軟體,Windows需要另外安裝軟體,大部分Linux都有內建安裝。本系統是架設在Linux伺服器上,以XAMPP這個包含了PHP、MySQL以及資料庫管理程式PhpMyAdmin多合一的包裝程式做為網路伺服器。XOOPS是一種資源入口網站,提供基本平台,再由使用者自行安裝各種不同的模組程式,而有不同的應用。其中CBB論壇便是模組的一種,主要是用來作為討論區使用,網路上十分盛行。

版本及各別說明
  • Linux:雖然本身已經安裝了PHP與MySQL,但我們另外安裝XAMPP,方便整合管理。在Linux上的XAMPP,會改稱為lampp。
  • XAMPP 1.6.4套件控制首頁在http://140.119.61.142/
  • XOOPS 2.13:已經包括以下的CBB論壇。注意,要使用Unicode編碼,不要再回頭用Big-5了。
    • CBB論壇 2.3:以下的修改並沒有作成XOOPS模組,所以如果要照下面的方式修改,必須要搭配相對應的版本。
    調整php.ini增加檔案上傳大小上限

    本系統要提供一些檔案給人下載,但是PHP預設的檔案上傳上限僅有2MB,必須要修改php.ini中的參數以提供大檔案的上傳。

    參數有三個,用搜尋就可以找到了:

    • upload_max_filesize:上傳檔案最大上限。
    • post_max_size:POST最大傳遞檔案,因為檔案上傳是用POST方式傳送的,所以這個也要設定。
    • max_execution_time:最大執行時間,為避免檔案上傳耗時過久而伺服器將他斷線,所以調高一點會比較保險。

    修改完php.ini之後要記得將伺服器重新啟動才會生效。

    安裝XOOPS前,先做過UTF8化

    安裝XOOPS本身並不是很困難,所以可是在安裝前卻有幾點要注意的。

    MySQL建立資料庫的校對

    即使XOOPS本身的程式是用PHP撰寫,這也要MySQL資料庫是以Unicode編碼建置才能夠搭配。MySQL在後來的版本裏面加入了「校正」的功能,這就是指資料存入資料庫時的編碼,資料庫的編碼與資料的編碼必須要相符,才能在phpMyAdmin看到正確的資料呈現。可惜MySQL預設校對的編碼是很奇怪的拉丁語系(明明Unicode都盛行這麼久了),所以在建立資料庫,必須要手動將校正調整成為「uft8_general_ci」,請參考下圖:

    image

    XOOPS資料庫連線的編碼

    然後必須要調整XOOPS資料庫連線的編碼設定為utf-8。請手動修改以下兩支程式:

    1. XOOP建置資料庫(CREATE DATABASE)時,設定語系為utf8、校對為utf8_general_ci

    • 檔案位置:/html/install/class/dbmanager.php
    • 行數:62
    • 原程式:
      $result = $this->db->query("CREATE DATABASE ".XOOPS_DB_NAME);
    • 修正後:
      $result = $this->db->query("CREATE DATABASE ".XOOPS_DB_NAME." DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci");

    資料庫連線(mysql connect)時,修改它連線的語系為uft8。

    • 檔案位置:/html/class/database/mysqldatabase.php
    • 行數:78~82
    • 原程式:
      if (XOOPS_DB_PCONNECT == 1)
      {
      $this->conn = @mysql_pconnect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS);
      }
      else
      {
      $this->conn = @mysql_connect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS);
      }
    • 修正後:
      if (XOOPS_DB_PCONNECT == 1)
      {
      $this->conn = @mysql_pconnect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS);
      }
      else
      {
      $this->conn = @mysql_connect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS);
      }
      mysql_query("SET NAMES utf8");

    修改完成之後再進行安裝即可。

    安裝之後再修改XOOPS參數設定

    如果在安裝過程之後,卻發生資料庫或是網址變更的情況,請修改/html/mainfile.php這個檔案的設定。但是變更此檔案會導致範本快取的hash碼修改,可能會導致之後的修改無法套用,下面會再提到。

    目前的參數設定:

    • 資料庫名稱digilib_xoops
    • 資料表前置詞{prefix}為digilib
    • XOOPS的網址為http://top.lias.nccu.edu.tw/,連入之後會自動導到CBB論壇的首頁
    修改CBB論壇

    由於CBB論壇具備發言、附件、權限控管等功能,所以我將CBB論壇調整成僅供管理者發言、修改及刪除,增加FCKeditor這個與Word較為相容的所見即得編輯器(但仍難以完全相容,這問題下面會再提到),再將整個系統改成以CBB為主體呈現的網站。

    修改權限這功能在XOOPS裡面即有提供,故省略不提。以下我想講的是需要手動修改的部份。

    增加FCKeditor,提供較容易上手的Word編輯環境

    image

    CBB論壇本身即有提供Koivi Editor編輯器,如上圖。然而這個編輯器僅能提供基本的編輯功能,不堪使用。

    image

    FCKeditor是一個網頁上使用的所見即得編輯器,網站在http://www.fckeditor.net/,裡面有試用版本。比起Koivi Editor,多了幾個重要的功能:

    1. 具備檔案上傳功能

    提供整合性插入圖片、插入檔案的功能,在編輯上更為順手。然而檔案上傳管理功能還是十分陽春,如果檔案量過多將會難以管理,需要搭配FTP管理較佳。

    2. 具備Word標籤清除功能

    FCKeditor會在複製貼上文字時,自動偵測Microsoft Word的標籤,然後另外有個Word標籤清除功能。跟HTML格式標籤一樣,Word也有自己專屬的標籤。在從Word複製出來的文字內便會自動嵌入,貼到所見即得編輯器時將會轉換成網頁語法呈現,一般使用是難以察覺的。但是Word標籤有很多是多餘限制的贅碼,會導致在網頁顯示時會有錯誤的格式呈現,網頁HTML語法跟Word格式語法是有很大的差異,所以FCKeditor才提供這功能,讓使用者先把Word的標籤清空,再到FCKeditor編輯器設定格式。然而這功能並不能算十分完善,建議最好還是直接寫原生的HTML碼比較好,從Word複製貼上而來的資料只能算是權宜之計。

    FCKeditor並不是專為XOOPS而設計,所以要將FCKeditor安裝上去要花一番功夫。需要手動修改的程式碼在/html/class/xoopseditor/裡面,詳細請自行研究程式碼。

    如果後來的CBB論壇版本已經具備FCKeditor的話是比較好的,但是這會對我們在CBB論壇的修改上造成版本不合的問題。

    XOOPS與CBB論壇模組

    XOOPS及其外掛的輸出流程如下:

    image

    模組範本及CSS範本個別位於/html/modules/及/html/themes/裡面。由於要範本是使用XOOPS的特定語法,故我們不從這邊修改,而是修改後面流程的程式。

    先從範本快取開始談起。範本快取的程式碼在於/html/templates_c/,這是最終輸出之前的PHP程式碼,因為是我們熟悉的PHP語言,所以在修改上較為容易,這也包括與資料庫連線、取用資料的方法。

    需要注意的是範本快取所產生的檔名,他是由原本外掛的範本檔檔名加上XOOPS系統所計算出的hash碼而成,而這個hash碼會因為XOOPS對於伺服器設定不同而會有不同的變化。例如我想修改一個來自於/html/themes/7dana-soft/theme.html的範本,這是7dana-soft樣板的範本,會影響到XOOPS的外觀,那麼最後輸出到/html/templates_c/檔名則會是「%%23^23B^23BB62A0%%theme.html.php」,但如果移到其他伺服器、而修改XOOPS本身的設定,那麼XOOPS會重新產生範本快取,檔名則會改成「%%8D^8DC^8DCD7BBD%%theme.html.php」,導致之前的修改失效。

    CBB論壇修改要點

    主要要修改的有兩個部份,一個是PHP主程式碼,另一個是session、cookie等記錄身分用的程式。

    PHP主程式碼

    主要是修改範本快取,位於/html/templates_c/裡面。修改最多的是{hash}_theme.html.php這支程式。然而範本快取可以讀取session或cookie中的身分資料,但卻無法設定,必須要透過/html/include/裡面的程式來控制。

    記錄身分資訊

    位於/html/include/common.php裡面有詳細記錄XOOPS所使用的大部分session與cookie資料,他將這些資料設定成常數(語法是define("NAME", "VALUE"))及物件,而修改時也只能從這個地方著手。

    請在此或同個資料的其他程式直接設定session或cookie,以供範本快取使用。

    其他較常使用的常數有:

    • XOOPS_ROOT_PATH:XOOPS在伺服器上的根目錄位置
    • XOOPS_URL:XOOPS的網址

    下面是我另外加入的,方便控制現在的顯示層級:

    • XOOPS_FORUM_ID:論壇的ID
    • XOOPS_TOPIC_ID:主題的ID
    • XOOPS_POST_ID:留言的ID

    物件主要是儲存身分資訊的$xoopsUser,用$xoopsUser->getVar('欄位名稱')以取得登入的資料,欄位名稱可以參考MySQL中的{prefix}_users資料表。 如果沒有登入,則$xoopsUser會等於null。

    CBB論壇與網站對應

    CBB論壇的架構有四層:類別、論壇、主題、留言。為了將這個CBB論壇的架構轉為網站型式,所以我將這個架構重新定義。

    類別

    我將類別分為網站目錄與系統管理。網站目錄類別裡面的論壇標題會顯示在網頁頂端的導覽列,包括最新消息、使命等等,如下圖。而系統管理則包含一些其他頁面使用的欄位,包括管理者登入介面、網站地圖編輯以及連絡方式,同樣包括在CBB論壇裡面以方便編輯。

    論壇

    image

    主要是導覽列的標題。

    主題

    主題是在論壇裡面的個別主題,主題裡面包含了許多留言,其中有開新主題的首篇留言以及之後的回應留言,但是我們只取用到主題層級裡面的第一篇留言。

    image

    如上圖,「最新消息」是論壇層級,而「臺灣圖書館事業與教育史研討會順利結束」與「計畫網站開始運作」則是主題層次,點進去右邊的內容則是首篇留言的內容。

    CBB論壇層級在資料庫裡面的架構對應如下表,其{prefix}則是資料庫名稱的前置詞,是在XOOPS安裝時即可設定的內容,目前是digilib:

    CBB論壇層級 資料庫名稱
    類別 {prefix}_bb_categories
    論壇 {prefix}_bb_forums
    主題 {prefix}_bb_topics
    留言 {prefix}_bb_posts
    留言的內文:跟留言是分開的,很特別的設計 {prefix}_bb_posts_text

    XOOPS程式移殖注意事項

    目前修改完成的XOOPS程式碼位於附件的xoops_top_html.zip。

    如果要將此程式碼移植到其他伺服器,必須要注意以上的重新產生範本快取之外,還要注意權限開放。以下將重點重新整理列表:

    1. 增加php.ini的檔案上傳上限
    2. 修改/html/mainfile.php的資料庫連線與網址設定
    3. 要將原本修改的程式碼,對應到重新產生的範本快取
    4. 開放全部權限:
      1. /html/cache
      2. /html/templates_c
      3. /html/uploads:這是FCKeditor檔案上傳所使用的空間

    四、內容維護

    為了方便理解,以下以Step by Step圖文解說方式,幾個管理內容的方式。

    管理者登入

    不管進行任何動作,都必須要先登入管理者才行。

    1. 位於每個網頁的下方,皆有一個 管理者登入 的連結。
      image 
    2. 輸入帳號密碼。
      image 
    3. 在允許編輯或是可以新增主題的地方,便會出現相對應的按鈕
      image
    發新主題

    每個論壇都可以作發新主題的功能,以增加該論壇的內容。以下以「最新消息」做為示範。

    1. 登入管理者後,到「最新消息」
      image
    2. 預設是使用FCKeditor編輯器,畫面如下,大部分功能應該看圖示就知道怎麼操作了。
      image
    3. 上傳並插入圖片:將游標移到插入點,接著請參考下圖,按下「插入/.編輯影像」的圖示,網頁會跳出一個視窗,你可以按「瀏覽伺服器端」來選擇已經上傳的檔案,或是按「上傳」來另外上傳一個新的檔案。
      image
      上傳檔案的視窗如下圖:
      image
    4. 插入任意檔案:步驟同上,只是要點選「插入/編輯超連結」,位置請看下圖:
      image
    5. 從word複製貼上到FCKeditor:先隨便找一段Word文字來做測試,附帶一提,我是用Word 2003
      image
      將這些文字用複製起來,到FCKeditor點選「自Word貼上」的功能
      image
      FCKeditor便會開啟一個「自Word貼上」的編輯視窗,請在此選擇是否要「移除字型設定」或「移除樣式設定」(反正都是Word的格式啦),編輯完成之後按下「確定」,就會把內容貼到 FCKeditor裡面供你繼續編輯。
      image
      但是這個功能並不保證能夠清除Word的格式,建議還是用FCKeditor內建的功能重新撰寫文件吧。
    6. 上傳附件的方法:雖然FCKeditor有提供上傳檔案的功能,但是要讓使用者下載的檔案,最好統一用附件的方式放上去。附件上傳的位置在編輯區下方,可允許多個檔案上傳。
      image 
      但問題是上傳檔案的檔名並不會經過編碼處理,如果你使用非英數的中文字,IE6以前的使用者下載的檔名將會是亂碼。
    新增會議記錄

    這邊示範新增一篇會議記錄的過程,由於會議紀錄有固定的摘要表格,所以是從不同路徑進入的。

    1. 登入管理者後,到「會議記錄」的討論區中,找到「新增會議記錄」按紐,請看下圖:
      image
    2. 開啟FCKeditor,不同的是,這邊已經有預設的摘要表格,為方便程式抓取資料,請按照表格填寫。
      image 
    3. 該論壇的首頁便是從表格抓取而來的結果。
      image
    檔案要經過PDF加密

    為了著作權等等爭議的問題,提供給瀏覽者下載的檔案必須為轉換並加密過後的PDF檔,而不能是Word或JPEG圖片檔。

    PDF的轉換與加密必須使用Adobe Acrobat 7.0 Professional之類的軟體,礙於版權所以這邊也無法提供,但是大多數學校應該都有購買才是。

    PDF中加密稱之為「保全」,詳細操作請直接查閱Acrobat說明,最終保全設定必須如下:

    image

    其他功能

    以下功能是具備的,請自行摸索吧。

    • 每個論壇的首頁都可以用PHP程式碼來自定,方便進行資料庫連線取得資料的動作。
    • 論壇的順序、名稱等管理,可使用XOOPS中CBB論壇的模組管理介面

    在系統層級好像還有很多修改的細節,詳細也無法一一敘述,請見諒。

    五、建置成果

    首頁

    image

    論壇首頁──最新消息

    image

    編輯畫面

    image

    會議記錄頁面

    image

    研討會說明頁面

    image

    六、未來發展

    與Dspace整合

    一個頂尖大學計劃,卻有兩個系統。一個是這一個XOOPS系統,負責計畫內容說明,另一個則是主要的Dspace系統。然而這兩個系統之間並沒有密切的整合在一起,僅提供簡單的幾個連結,這是為人所詬病的地方。

    在公告管理上,XOOPS有較佳的管理能力,能夠取代Dspace貧乏的新聞功能(等同於公告),FCKeditor功能完善的編輯器也可以加入Dspace當中,而不要讓管理人員每次都要看原始碼進行作業。

    但是XOOPS是用PHP&MySQL,Dspace則是用JAVA&JSP&PostgreSQL,兩個系統使用的程式語言及資料庫迴然不同,增加了在整合上的困難度。還好FCKeditor也有提供JSP版本,有機會未來可以繼續研究。

    需要專職的內容維護人員

    之前的工作中,程式設計師被分派到內容維護的工作,但是後來程式設計師的精力就專注在系統的修改及維護上,導致內容維護的荒廢。

    建議系統建置人員及內容維護人員的工作應該要分工進行,才不會變成現在的慘狀。 (more...)

    輔大圖資系系友與學生互動網

    布丁布丁吃布丁

    輔大圖資系系友與學生互動網

    image

    2007年的時候,我在輔大圖資系當工讀生,負責維護電腦教室、做做雜事。當時擔任系主任的林麗娟老師指示要架設一個新的系友與學生互動網,而要我來完成這個任務。


    基於XOOPS的修改

    image 
    XOOPS的登入介面

    當時我用XOOPS的CBB論壇功能來進行修改,網站中幾乎所有功能都是論壇的「一篇文章」。因此管理者基本上就是在撰寫論壇文章、修改論壇文章。對於當時還算挺盛行的CBB論壇來說,這種操作經驗應該是很容易讓人接受的。

    特製的輪播照片與標語

    image 為了顯示首頁中特殊的資料,包括輪播照片與標語,我為幾篇文章加入表格的限制,讓程式容易從文章定制的資料中擷取特定內容。

    標語還利用跑馬燈的形式,讓字一個一個顯示出來。附帶一提,那個飄香的咖啡小圖示中,我切割了咖啡杯跟上面飄香的圖片,並利用背景圖示y軸移動來製作飄香的動畫……即使在AJAX盛行的現代中,這種看起來毫不起眼的技術,也是我剛開始學習AJAX的一個初步成果呢。

    被捨棄的XOOPS系網站

    之後林主任又要我來改系網站,於是我又同樣地利用XOOPS來進行修改。由於有了系友網站的經驗,所以這次改起來更順了點。

    image

    改用Drupal來建置的輔大圖資系網站

    即使如此,XOOPS的論壇終究只是XOOPS的論壇,而我那無可救藥的設計感也仍然是沒有任何長進,因此系網站大概在一年之後就不知不覺消失了,改成利用Drupal來建設起新的輔大圖資系網站。現在想要回去找找當時的網站也已經找不到了,連截圖都沒有留下,倍感遺憾。


    小結

    說真的,當時架好之後,其實我不是很敢跟別人說這是我架的──因為網站真的不太好看。所以之前的Blog似乎也都沒有提起這段過去,直到現在才拿出來講。

    然而經過這些建置過程之後,還是學到了不少XOOPS跟Smarty樣板等PHP程設經驗。儘管當時並沒有設計模式的概念,所以學到的也都是相當枝微末節的小技巧,但是也算是第一次碰觸大型「完整」的系統吧。

    不過,相較於後來新盛JoomlaDrupal內容管理系統來說,我覺得XOOPS還是頗難上手,甚至有人已經在預言XOOPS的倒閉了。看著現在所上老師還在教XOOPS架站,不禁有種淡淡的哀傷就是。

    (more...)