[NAS 應用] 在 QNAP TS-209 Pro 上跑 Subversion Server

一開始購買 QNAP TS-209 Pro NAS 伺服器時,就打算要安裝 Subversion Server,但是當時受限於以為一定要安裝 Apache Web Server 2.X 以上的版本,而 QNAP 內嵌的 ARM-based Linux 系統,預設是安裝 Apache 1.X。 後來才恍然大悟,並不需要透過 Apache 來做連接傳輸與權限管控,利用 Subversion 預設跑的 svnserver daemon 當然也可以作到,而且使用 svn 的傳輸協定,效能還好上很多呢。

安裝 Subversion Server 有兩大項目,一為先為 QNAP 安裝 iPKG;另一個就是再利用 ipkg 安裝 Subversion Server。 iPKG 是一種輕量 (lightweight)級的套件管理系統,其作用如同 Fedora 的 RPM 或如 Debian 的 APT。而 iPKG 多是應用在容量有限的嵌入式 (Embedded) Linux 系統內。 當然,執行這兩件項目前,要先利用如 PieTTY 登入 QNAP NAS 的 Console 內。

iPKG 的安裝方法直接參照此篇:[Optware/Ipkg]: Install any Linux app on TS-109/209/PRO
先下載 iPKG 的安裝壓縮檔,儲存該檔案於 /share/Public/ 目錄下,並解壓縮它。 只要依照該安裝步驟,執行自動安裝程序,過程非常順利,沒有任何問題。這裡所提供的壓縮檔是最新版的,一切均會自動執行設定與安裝,包括環境變數等,都不需要再自行新增修改。安裝完畢後,重新開機再利用 PieTTY 登入後即可利用 iPKG 執行安裝 Subversion。

Subversion 的安裝步驟是參考該篇: Subversion Server on QNAP-209 Pro ,不過我有調整了一些步驟,參考如下:
繼續閱讀 »

{iThome 書評—15} Patterns Of Enterprise Application Architecture

副標題:企業層級的應用系統,是要能兼顧彈性、穩定與效能,而這需要具整體的架構設計觀與前人所提供解決方案的設計模式。

Patterns Of Enterprise Application Architecture Patterns Of Enterprise Application Architecture
———————————–
作者/Martin Fowler /著
出版社/Addison-Wesley Professional
ISBN/0321127420
Amazon 評鑑:四顆半星

內容簡介
The practice of enterprise application development has benefited from the emergence of many new enabling technologies. Multi-tiered object-oriented platforms, such as Java and .NET, have become commonplace. These new tools and technologies are capable of building powerful applications, but they are not easily implemented. Common failures in enterprise applications often occur because their developers do not understand the architectural lessons that experienced object developers have learned.

Patterns of Enterprise Application Architecture is written in direct response to the stiff challenges that face enterprise application developers. The author, noted object-oriented designer Martin Fowler, noticed that despite changes in technology–from Smalltalk to CORBA to Java to .NET–the same basic design ideas can be adapted and applied to solve common problems. With the help of an expert group of contributors, Martin distills over forty recurring solutions into patterns. The result is an indispensable handbook of solutions that are applicable to any enterprise application platform.

This book is actually two books in one. The first section is a short tutorial on developing enterprise applications, which you can read from start to finish to understand the scope of the book’s lessons. The next section, the bulk of the book, is a detailed reference to the patterns themselves. Each pattern provides usage and implementation information, as well as detailed code examples in Java or C#. The entire book is also richly illustrated with UML diagrams to further explain the concepts.

Armed with this book, you will have the knowledge necessary to make important architectural decisions about building an enterprise application and the proven patterns for use when building them.

The topics covered include:

  • Dividing an enterprise application into layers
  • The major approaches to organizing business logic
  • An in-depth treatment of mapping between objects and relational databases
  • Using Model-View-Controller to organize a Web presentation
  • Handling concurrency for data that spans multiple transactions
  • Designing distributed object interfaces

前言

每次研讀 Martin Fowler 的著作,直覺馬上就浮現出一個成語:天縱英才! 從極高度抽象的「分析模式(analysis pattern)」,對程式碼實作階段時的結構重整的 「重構(refactoring)」,以及本次書評所介紹的,關於企業層級系統平台設計議題的 「企業應用架構模式 (patterns of enterprise application architecture, 簡稱 PEAA)。 我是從來沒有看過有人可以如此像他這般,務虛與務實的不同層次都能是軟體業界的第一把交椅,著作的每一本書都是鉅作,然後又能在抽象分析、平台設計、程式碼實作等各層次整理出所謂的 “模式(pattern)”,供我輩軟體人員學習並再利用於現實的軟體開發工作。 前述的這三本書每一本都蠻厚的,但是 Fowler 也能寫出薄薄的那麼一本 「UML 精華(uml distilled)」,真正道盡 UML 的本質精髓,而熱銷全球數十萬本以上。 在我的心目中,Martin Fowler 有如神人一般,可以說是引領我在軟體業界持續奮進與學習的精神導師。

不僅如此,他寫的書,總是能以很淺顯易懂的白話來解釋看起來很深奧的道理。寫到這突然讓我想起,也算是有感而發,想當初我在啟蒙軟體領域的學習時,當然也會先從國內一些所謂的名家作者的著作來研讀。 可明明就是中文字,但閱讀起來就是很吃力,本想說是不是我真的有比較笨,領悟力差。 而後先從接觸 Fowler 的中文翻譯著作(感謝高水平的翻譯),耶! 我看得懂啊,甚至一看再看也不覺得煩,還能讀得津津有味,每一次的重讀又有不同的體會。後來再轉而看他的原文著作,雖然多少有些英文字彙的障礙,但是真的,絕對是比國內那些寫軟工書籍的作者,輕鬆易讀太多了,可以說閱讀 Fowler 的論著,就是一種享受。後來我才逐漸體悟到,太多所謂的軟工技術人,就是常賣弄太多 IT 的專業術語,而把單純的觀念表達的很複雜;還有一點,就是不容易從文字感受到這些 IT技術人 的想法,好像內容就是東拼西湊般,沒有真正自己主觀的想法。 的確,言之有物的好書能帶軟體人員上天堂;太多艱深術語、沒有自己體悟的書籍真的會讓你下地獄。

本次書評的主角,PEAA,所涉及相關軟體設計的議題可是相當廣泛,焦點是全擺在平台面系統設計的諸多議題,包括 分層結構、O-R(Object-Relation) Mapping、WebUI 的狀態控管、多人同時上線時的交易機制處理、分散式的設計策略等。 500 多頁,書本是蠻厚的,不過內容其實不會難懂 (前面說過,作者的風格就是總能以很淺顯的白話表達某一個所討論的主題)。 因為本書真的比較厚一些,我也不可能如同書摘般來記錄每一章的重點,在這裡我是想分享一下我是如何來閱讀本書的。

從書名思考本書的核心關鍵內容,找出自己的體悟

閱讀一本書籍,我總是會先從書名開始思考,本書的核心關鍵字有三個:企業應用程式(簡稱 企業AP)、架構(architecture)、模式(pattern)。 企業AP 會有什麼樣的特性,又與一般的 Web-based AP 有何差異? 我的心中大概就是浮現出大規模的企業AP特性有三:穩定、效能與彈性,三者缺一不可! 而因為有這些各個構面的考量,所以在設計議題上要相當慎重嚴謹,對於開發團隊甚或客戶而言,那種整體性的架構觀是要能有共識的。再來,由於構面與涉及的各類設計議題太多,從無到有是很辛苦的,是否可以借重 “前人” 的設計經驗來應用在現實的開發上,所以,所謂的 “模式”,包括分析、設計、乃至於實作類,期能可以協助我們來解決一再重覆發生的問題。

從關鍵字去推論目前心中的一些想法,其實也沒有什麼對或錯,心中先有個底,再去研讀內容,就會比較有感覺,也可以比較一下作者與自己想法上可能是相同也有可能是不同見解的落差。 本書從大綱的編排上,是分為兩大部分,第一部份是作者稱之為 “Narratives” 的敘述,就是我所說的,Fowler 總是以閒話家常的方式,來表達出他對某些主題的主觀想法。真的是很充分表達出他的觀感,但讀者又不會覺得有壓迫感或那種不是對就是錯的二分邏輯,實在高明之至;再來就是第二部分的 『模式”,這裡如同「重構」那本書一樣,是把每一個模式先歸納在某一個大類內,然後再給予一個名字,成為所謂的模式名錄。 本書我強烈建議的是,要先看 前言與介紹 的部分,價值非凡。 從前言你可以知道作者寫這本書的動機與所要討論的主要議題為何;而介紹也算是作者的一個導讀,也是各個主題的精要解說,甚而是會讓讀者知道可以先從哪裡看起,哪些地方又可以先略過不看,事半功倍。

前言與介紹的部分真的是太精彩了,讓我是逐字細讀來品味作者的想法。Fowler 說他是一位物件導向的狂熱份子,他也不說教,而是從敘述的過程中,讓讀者去瞭解到物件的主要優點在於對複雜的邏輯易於處理。 然後他又提到了一個很有趣的想法,他認為所謂的企業邏輯(business logic)是最沒有邏輯可言的,因為企業邏輯的複雜性,是無法被套用在任何的邏輯性模式,它就是被用在企業人(business people)來贏得商業利益的;任何一點的小改變都有可能贏得商業上的交易,而這也意味著,每一次的小改變都會導致系統的複雜度。為了應付這種 “瞬變” 的無邏輯性,企業AP 就是要被設計成很能禁得起變動,所以本書會討論的設計議題有六大項:企業AP的分層(layering)結構, 企業(領域)邏輯的結構, WebUI 的結構, O-R Mapping 的設計議題, 在 Stateless(無狀態)環境中處理 session(會談) state, 分散的原則。 在介紹這一部份,Fowler 提到了他對一些字彙(術語)的看法,我印象最深刻的就是他說他不懂架構該如何解釋,也不敢去冒犯這個詞彙 (我在想,如果連他都不敢去解釋架構的話,那還有誰能?)。 不過,他還是盡其所能說明架構對他的認知而言,第一個想到的就是 “分層(Layering)” (例如常談及的展示層、企業邏輯層、資料來源層)。 嗯,這裡我倒是也可以分享一下我對架構的看法,我以為架構是一種整體觀,整體需要時常凝聚各種不同角度的觀點,那是一種動態的調和。 另外,作者還有談及包括 效能(performance) 的設計議題,以及對於模式的應用想法。 Fowler 提到了,模式的關鍵點在於具體的實踐,是觀察人們於日常生活與工作中,觀察發現到某一個特定的解決方案;使用模式的關鍵是不能盲目去使用它,所以好像會看到同一個解決方案,但沒有一次是相同的。

設計是務實,是要能調和理想與現實的

500 多頁看來好像好多的內容,其實作者有說只要研讀第一部份即可。這一部份是屬於觀念上的引導,才一百頁而已,而每一個主題又都能分開去看它,其實讀起來並不費力。建立了在平台面設計議題的相關基礎知識與觀念後,就可以參考第二部分作者所整理提供的各類模式,例如 O-R Mapping 的相關設計模式,讓你知道如何建立 Data Mapper 的機制,來橋接領域模型的物件與關連式資料庫的表格。有需要再去看、去查這些模式,否則會很悶,這是作者對讀者的中肯建議。

先前我曾提過,許多所謂的物件導向基本教義派就是掛在無法把他們所認知那種理想美好的那一面(例如,建立純粹是領域的物件模型),給應用在現實的平台環境中。因為,現實上,沒有如此大的記憶體可以容納都是活生生的物件,所以需要給 “冬眠(hibernate)” 到如關連式的資料庫內;因為系統的資源有限,所以需要作資源的控管,包括資料庫連線與物件數量等管理;因為 WebUI 要服務更多廣眾的 Internet 用戶,所以被設計為 “無狀態(stateless)”,但是企業用戶需要的是 “stateful” 服務,如何把 stateless 作成像 stateful,就是考驗了設計者對資源與狀態控管上能否權衡的好。

這是一本專注在系統平台面設計議題的書籍,是討論關於如何把理想美好、能表達出軟體主結構的物件領域模型,橋接至利用現實系統業者所提供對企業層級的開發平台框架與應用伺服器等。對於想要瞭解企業層級的應用系統是如何調和彈性、延展度、穩定與效能等,本書絕對是必備參考的經典鉅作。

兼容「目標管理」與「執行效率」的時間管理術—工具選用思考篇

知道你要什麼 (What),再來決定你要如何做 (How-to)。』」 我一直覺得,在導入時間管理的應用工具前,這個要先想通。 我越來越覺得, 『Do the right thing (做對的事情)』『Do the thing right (把事情做好)』,這兩句話可不只是表面說的那麼簡單,不是只有口號而已,裡面是蘊含了極有智慧的道理。要作一個所謂成功的人,我確定的是,這兩者缺一不可。 或者這兩句話也可以濃縮成明代大思想家王陽明所倡導的「知行合一」。通曉根本道理,並懂得能在現實的環境中務實應變,更重要的是,坐而言,還要能起而行!

『Do the right thing』,就是對於要做的事情上,給予一個方向上的指引,是要能瞭解對自己在人生上的目標以及價值觀的認知;』Do the thing right』 就是要確實能有效率地執行要做的事情,不過我更覺得,那個有效率倒不如說是要能學會分辨與過濾雜事,只專注在最重要的事情上。

基於上述的分析與體認,我當然會希望現實的工具應用上,能協助我涵蓋到這兩大部分。

  • 『Do the right thing (做對的事情)』 重點在於 目標設定與中短期的專案規劃 (project planning)上。
  • 『Do the thing right (把事情做好)』 重點會在於 以週為單位,先預先規劃每週的行程安排,與每週約 3~6 件最重要的事項;然後再分解為較小的工作,分散放在每日的工作上。而每日的工作,必然要先規劃出最重要的 1~3 件工作,優先完成它!

在目標的設定規劃上,我還是認為 心智圖 是最佳的應用工具。從 3個月~1年的短期目標、1年~3年的中期目標、3年以上的長期目標;從自我省思、家庭生活、財務、健康、專業、心靈、學習等各面向,利用心智圖呈現出你想要的是什麼,再倒推規劃 (backward planning)具體可執行的行動 (action)方案,漸進循環 (incremental and iteration)地往目標推進、修正、調整,一個個地達成所設定的階段里程碑 (milestone),最終完成所設定的目標。

專案 (project)是目標還是工作? 我以為,專案可以是短期,可能約為一年內可以量化的目標;也可以是一組工作的集合 (a group of tasks)。 專案內的工作因為有關連性,所以往往會有樹狀複合結構 (composite structure)的關係;工作是有時限的,所以需要設定完成的優先順序與完成到期日。

重要需要優先完成的事情,是基於從你的目標設定而來的,是根據你的價值觀認知而定的。 諸多貓頭鷹或無尾熊型的動物性格,經常是把不必要的事情做得太好—這往往是源自於上司主管所交代,無論是合理或不合理,但是這些工作不一定是符合你的人生目標;請記得,務實不會是妥協於現實,但也不是昧於現實。是要能學會在現實與理想之間找出哪一個平衡點,在適切的時機,要能勇於踏出一步,發掘出屬於你自己的乳酪的。

不要花太多時間在不必要的事情上,只專注在最重要的事情上。 所以,對於許多 GTD (Getting Things Done) 工具給我的感覺是,太過繁瑣了些。這個方法論它連小事情都可以協助規劃的很好。對於紀律嚴謹、比較一絲不苟的人來說,它是很好的工具;但對於如我這樣較慵懶個性的人來說,它會給我壓力,看到每天有很多待辦的工作事項,我會心情很不好。但是,我仍希望可以規劃我自己的人生—只專注在我認為重要的事情上。如果每週只要能完成 3~6 件重要的事項、每天優先處理最重要的 1~3 件工作。事情少卻精,列在工作清單上也不會長,看起來也就不會那麼有壓力,甚而完成時還會有那種成就滿足感。最大最難吃的青蛙在每一天的一開始就先把它吃完了,那麼,這一天就再也沒有難得倒你的事情了,其它的只是小碎石,有多餘的時間去處理他當然不錯,即使沒有時間完成,卻也不是那麼重要了。

然而,GTD 方法論的確可以協助增進處理事情的效率。我很欣賞它其中的一些觀念,全面收集各類資訊;集中放置到一個待處理的工作匣內;快速針對每一個資訊,決定是否處理它;當要處理則放入下一步的行動 (next action)清單內。還有,我也很喜歡那個 情境 (context) 的表達,它讓你可以用邏輯 (logical)、比較鬆散性質的標籤 (tag)分類,快速地列出哪些工作,是在什麼樣的情境 (或場景)下要做的事情。 例如 @shopping,是要購物的工作;@blog,是在整理部落格相關性的工作;@business,是屬於業務上的工作 …等。 不要繁瑣,只想要保留 GTD 的精髓,所以,崇尚簡約之道的 ZTD (Zen to Done),正是與我的期望及要求不謀而合!

要能兼容「目標管理」與「執行效率」的時間管理工具,那種要能符合心目中完美的那一面,看起來好像不容易找得到。 但請記得,人是要學會與應用工具,而不是被工具給束縛住你的想法。 『Remember the milk『,是一個很簡單的免費線上工作管理 (task management)系統,但利用它,再搭配了心智圖做目標規劃,我幾乎已實現了符合我所要求的時間管理系統。關於我是如何規劃設定這套工具,來建構出符合上述期望功能的時間管理系統,就留待下一篇文章來作說明。

remember the milk - screenshot
(點小圖可看原圖)

※ 延伸參考
 o 兼容「目標管理」與「執行效率」的時間管理術—心得篇

蘇澳漁港好吃的海鮮料理 (2008/05/24)

上個星期到羅東某醫院授課,上完課後與我一同過去的 Steve 請我到「蘇澳漁港」吃海鮮。 我早已爬網作了功課,網友強烈推薦要到「富美活海鮮」用餐,便宜新鮮又美味。

我總算才知道,原來從台北過「雪山隧道」到宜蘭,現在是這麼的方便快速。從我家中和上北二高(安坑交流道」,再從南港的石碇交流道轉五號高速公路,經坪林、「彭山隧道」、「雪山隧道」,若是到宜蘭市下交流道,大約也才 40 分鐘左右;而若開到高速公路的尾端,也就是蘇澳,約為一個小時。這比以前繞北宜公路的「九彎十八拐」,省上太多時間了,路也好走太多了。

那次在「富美活海鮮」吃了海產,實在印象深刻,與大部分網友們的口碑一致,真的很新鮮又很好吃,還有,價錢真的不貴,那個「黑鮪魚生魚片」一份 NT$300,共切了 7~8 片,入口即化的感覺,真的美味。

昨天星期六呢,我就一直慫恿我老婆、小朋友們帶著她們的姥姥一同過去。好說歹說,好不容易總算勸動她們一同過去。最反對竟然是我家的那隻小女兒,因為她要看那個偶像劇「蛋炒飯」。我只好跟她說我會用我電腦上的電視卡預約錄影,還有也會買上宜蘭的名產「牛舌餅」給她吃,好不容易,約下午 4:00 左右從我家這邊開車出發了。

這個時候出門反而方便,到雪隧完全沒有塞車,順得很,真的不到一個小時,約 17:20 就開到蘇澳漁港了。在隧道內開車,我計算過,全長 12.9 公里,沒啥塞車的話是約 12 分鐘開完,平均時速是約 70 公里左右。我們家蓁妮覺得,隧道內很單調,若是在兩側內牆可以塗鴉的話,多樣化的色彩景觀,應該是會讓沈悶黑溜的隧道賦予更活潑的面貌的。

喔,我們家兩個小朋友都想要先去踩沙灘、泡泡腳玩水。我也是第一次開到了「蘇澳漁港」的堤岸邊,是先要經過一座蠻漂亮的大橋,然後在一個看起來有許多是專賣觀光客的海產漁店與烤魷魚的小吃店等停車,就可以走下去到堤岸邊了。 那個堤岸蠻小的,其實觀光客也不多,就是真的只有泡泡水而已。倒是我老婆趁這個時候買了兩包烤魷魚回來,切成片片的,真的是非常好吃。
蘇澳漁港堤岸邊

好啦,小朋友也玩夠了,約 6 點多走回那座大橋再往左邊蘇澳市區內走,進入很窄的「海邊路」,就可以看到「富美活海鮮」了。

繼續閱讀 »

Kenming’s 微型部落格開張了—Twitter@矇矇的秘密基地

Kenming's Twitter@矇矇的秘密基地

近日我也去申請了最近挺熱門的 Twitter,姑且就把我的 Twitter 稱之為 Kenming’s 微型部落格吧。 ;)

『Twitter』 這個英文字彙的原意好像是 『唧唧喳喳地講話』,更通俗地來說,也就是 『碎碎念』 的意思。 不過,我個人倒是有另外的解釋: Twitter 可以是 『微言大義』。 只利用少數的字數 (官方網站限制最多每篇 140 個字),來提出 精微的言論,切要的義理

嗯,我是準備爾後可以方便記錄時常浮現在腦海的點子,趕緊把它寫下來;也可以紀錄從書中或他處所看到的銘言、智慧語錄等。 盡量不要給自己束縛,就是把它給 Write Down 下來就對了(可以透過登入至官方網站,或是透過 Firefox Addon,也可以透過手機撥入,互動輸入介面很多種,真的很有彈性)。

簡單又方便,我覺得還挺不錯的。 也可以直接從官方網站 copy 那個 Badget HTML 程式碼,然後貼到個人的部落格如 SideBar 區域。目前我的首頁右邊 SideBar 其中就有一個區塊同步顯示 Twitter 的 Post 訊息。 若對官方所提供預設的 Layout 不太滿意的話,國內有位玩家設計了很多 Twitter 的公佈欄樣式,參考: Twitter幫你說:現在在做什麼+自己設計twitter專用公告欄。 不過我試著下載回所提供的公佈欄樣式 swf 檔案,並照該網站的教學貼上 HTML 程式碼,卻無法顯示我的 Twitter 訊息,只好作罷。

打造 Fasion 的 Google Gamil 視窗

我現在盡量已經把 Eamil, 行程, 甚或工作事項給轉移到了網際網路。尤其是利用 Google 所提供的各種服務,其中 Google Gmail 已經是我日常工作上不可或缺的重心。

Gmail 的介面一項秉持著 Google 的傳統—簡潔,不過用久之後,會覺得有些單調。 日前看到 Mobile01 敗家網站的一篇網友分享:「強化你Gmail & Google Reader的外觀(跟使用性)!!」,是利用 Firefox 瀏覽器的高度客製化擴展功能,可以將 Browser 端的 Layout 給整個換過。

目前支持可以在 Browser 端顯示瀏覽網頁客製化後的 Layout,有兩大社群:GreasemonkeyStylish,均是屬於 Firefox 瀏覽器的 Add-on。 (好像目前也有 IE 可以支持 Greasemonky script?) 此兩種 Script 其實均是以 Javascript 語法作法開發的程式語言。

安裝完之後,就可以下載安裝網路上諸多玩家所提供的 user script,針對各種比較具知名度的網站,而能有不同的顯示效果。例如 Gmail Redesigned。 這是利用 Stylish 所寫出的 user script,可以讓 Gamil 瀏覽視窗呈現相當典雅的顯示效果。 可以參考看看我個人改裝前與改裝後的畫面。

尤其那個 Gmail Loading 畫面,載入郵件時所顯示的進度棒真的挺炫的。 :)
對了,改裝後右下角的 Label 標籤,Gmail 預設無法列出 『UnLabel』 的標籤郵件。所以利用了 Gmail Unlabelled 2.0 這個 Greasemonkey 所寫出的 user script,就可以搜尋 『尚未標籤』 的郵件囉。

Before
Firefox Gmail—沒有加 Stylish 前
After
Firefox Gmail—加了 Stylish 後
Firefox Gmail—加了 Stylish 後的載入進度棒