網頁

搜尋此網誌

2011年1月21日 星期五

Component Object Model 元件物件模型

談談元件物件模型(Component Object Model, COM)這個主題吧!前一陣子都在研究 DirectShow,常常看到 COM 這個關鍵字。由於最近才變成 Windows 程式開發人員所以不熟悉 COM,趁此機會好好研究一番吧!

請注意:COM 是一個標準 (Standard,也參照為Binary Standard,定義物件的結構),不是什麼工匠技藝 (craftsmanship) 的產品,也不是程式語言。COM 標準定義一個物件模型 (Object Model),使得 COM 物件(也稱為 COM 元件,或簡稱物件)可以和其他的物件互動工作。物件可以位於執行的行程 (process) 中,或其他行程,甚至是遠端電腦。

COM 是一個標準,因此可以使用多種物件導向語言 (Object-Oriented Language) 撰寫開發,通常是用 C++ 撰寫開發比較容易簡單,原因在於 COM 是 Binary Standard ,C++ 撰寫比較可以控制結構。

軟體中的物件包含資料 (data) 函式 (function) 兩部分,而 COM 僅有(唯一)利用函式的呼叫操作資料(換句話說,沒有資料這部分),這類函式在 COM 中稱為介面 (interface),而操作COM介面的函式稱為方法 (method) ,注意這些詞彙很容易讓人混淆,COM 的介面不同於C++的,一定要搞清楚!

更進一步來說,COM 要求這些介面必須是用指標 (pointer) 的方式實現(這是技術上關鍵的地方),COM 標準也定義一些元件通用的介面(部分介面必須具備,例如 IUnknown 介面)、元件之間的互動與安全性等。總結,COM 標準是定義介面,而介面實現 (interface implementation) 則由程式設計人員編寫。

COM 標準是微軟 OLE(Object Linking and Embedding) 和 ActiveX 技術的基礎,如果要學習這些技術,我們對 COM 的觀念一定要正確建立,以下是我認為 MSDN 上比較重要的觀念(要多讀幾遍):

###

2011年1月10日 星期一

Domain Name System網域名稱系統

今天談談網域名稱系統(Domain Name System, DNS)的觀念,記得當初ycwang授課的時候,我自己以為DNS是個簡單的系統,只不過就是把網址(URL)轉換為網際網路協定位址(Internet Protocol Address)的功能而已。

然而這樣的認知大概懂了一成,從這幾年的經歷看來,我對DNS的理論基礎沒有完全搞清楚,我太小看DNS系統了!沒關係,學習就是不斷發現自己的不足,然後趕緊補足遺漏的知識,最怕的是不知道自己缺了什麼。

從網頁應用程式的技術角度來看,URL(Uniform Resource Locator,)可以分成五個部分,以Google我的帳戶的URL為例:

https://www.google.com/accounts/ManageAccount?hl=zh-tw
  1. 通訊協定配置名稱(Scheme Name):即通訊協定,如https或http
  2. 主機名稱(Host Name):指的是www.google.com
  3. 連接埠編號(Port Number):與通訊協定有關,http是80的埠號
  4. 路徑名稱(Path Name):在主機上的資料路徑,這個範例是accounts/ManageAccount
  5. 查詢字串(Query String):http中指的是GET參數,如hl=zh-tw
從DNS的角度來看,DNS所做的是將URL的主機名稱(Hostname)轉換成IP位址(IP Address),提供「Hostname-to-IP-Address Translation Service」的功能,那麼大費周章的意義有二:

第一,網路上的主機位置是由IP位置判定識別,這是一個32位元的資料(一般以192.168.1.1之類的四段十進位字串表示),非常不容易讓使用者記憶與識別,所以我們才會需要主機名稱。

第二,主機名稱雖利於人類記憶與識別,但對於網路系統來說會有實現困難,因為主機名稱千百萬種長度不一,非常不利於網路設備(路由器)判斷,效率也不夠好,這也就是為何IP位置要定義32位元的固定長度

DNS除了上述功能外,還可以有三個用途:
  1. 主機別名(Host Aliasing):如果主機名稱(網址)不好記憶,可以用另一個做為別名。
  2. 郵件伺服器別名(Mail Server Aliasing):與主機別名用途相同,這指的是對於郵件用途。
  3. 負載分配(Load Distribution);利用DNS將同一個主機名稱分配至不同的IP位置。
從系統面來看,DNS網域名稱系統是一個分散式的(Distributed)大系統,並且是具有階層的(hierarchical)資料庫系統,DNS在網路架構上屬於應用層(Application Layer),底層傳輸層依賴的是UDP通訊協定,使用Port 53的埠號。

值得注意的一點,雖然說DNS屬於應用層,但是應用層之中的HTTP、FTP、SMTP等等應用服務都是依賴於DNS(都會使用到URL),我們可以說DNS是應用層的基礎設施(infrastructure)也不為過!

DNS伺服器的階層架構可分成三類:
  1. Root DNS servers:最上層,全球共13台,分別標示A至M
  2. Top-Level Domain (TLD) servers:第二層,管理網域如com, org, edu, gov或各國的網域位置。
  3. Authoritative DNS servers:被TLD授權的DNS,通常是組織自己建置的DNS,管理自己私人的URL。
另外為了效能上的提升,也有建置Local DNS servers與DNS Caching的功能。

以上是DNS大致上的概念,細節部分還真是多啊!千萬不要小看DNS,當你真正使用DNS做一些事情才知道DNS博大精深。其他比較重要的參考資料有:
  • RFC 1034(Domain Names - Concepts and Facilities)
  • RFC 1035(Domain Names - Implementation and Specification)
  • RFC 2136(Dynamic Updates in the Domain Name System (DNS UPDATE))
等等,還有很多有關DNS的RFC,請參考DNS RFC - Domain Name System RFC's (IETF)


###

2010年11月30日 星期二

Unified Modeling Language 統一塑模語言

Unified Modeling Language縮寫為UML,中文普遍翻譯為「統一塑模語言」(國立編譯館學術名詞資訊網上面是「統一模型化語言」),通常我們都用UML稱之,UML和程式語言一樣是有版本區別,目前最新的版本是2.3版,2.X版的UML通稱為UML 2.0。

UML的規範(Specification )文件分成兩部分,一部分為UML infrastructure(基礎結構),定義UML語言的基礎語法。另一部分是UML Superstructure(上層結構),則是定義使用者延伸的語法。兩者互補而構成完整的UML視覺化語言(Visual Language),兩個規範文件總共大約一千頁左右,一般人大概不會去看的!所以...

這裡推薦兩本對於學習UML有助益的書籍。第一本是「UML精華第三版」,這本可說是僅寫到UML精華之處,對於初學者來說建議瀏覽過一遍有印象就好,後續學習UML更能體會作者所說的奧義,不急著第一次就看懂。第二本是「UML物件導向系統分析與設計」,雖然沒有涵蓋完整的UML內容,但是淺顯易懂平易近人,加上這本書從實務開發上介紹UML讓讀者更有感覺!

Martin Fowler著,趙光正譯,UML精華第三版:增訂嵌入式系統與工作流程概念,台北:台灣培生教育出版:碁峰資訊發行,2007。
(原書名:UML Distilled: A Brief Guide to the Standard Object Modeling Language, 3/E)

游峰碩,UML物件導向系統分析與設計,台北:博碩文化,2010。

目前UML 2.3中定義了14種圖(Diagram),分成結構圖(Structure Diagram)行為圖(Behavior Diagram)兩大類,如下所述:
  • 結構圖(Structure Diagram)
    • 類別圖(Class Diagram)
    • 合成結構圖(Composite Structure Diagram)
    • 元件圖(Component Diagram)
    • 配置圖(Deployment Diagram)
    • 物件圖(Object Diagram),第一版是實例圖(Instance Diagram)
    • 套件圖(Package Diagram)
    • 輪廓圖(Profile Diagram)
  • 行為圖(Behavior Diagram)
    • 活動圖(Activity Diagram)
    • 使用案例圖(Use Case Diagram)
    • 狀態機圖(State Machine Diagram)
    • 互動圖(Interaction Diagram)
      • 循序圖(Sequence Diagram)
      • 通訊圖(Communication Diagram),第一版是合作圖(Collaboration Diagram)
      • 互動概圖(Interaction Overview Diagram)
      • 時序圖(Timing Diagram)
結構圖指出物件於系統中的靜態結構(與時間無關),而行為圖則用於表現物件的動態行為,UML一靜一動,其語言定義相當地有系統!不過學習UML要注意一點,每個Diagram之間其實都有關聯性,僅學習一種Diagram會造成見樹不見林的感覺,可是若學習UML全部則會有見林不見樹的感覺,我想這是學習UML必經的困惑之一。

這次推薦兩本書籍當中都有提到軟體開發流程物件導向分析與設計(屬於方法論的部分),UML存在的目的也就是應用在開發、分析與設計之中,若能應用UML於此過程中,我認為學習上將可避免只見樹或只見林的窘境!值得注意的是,UML是創始於Grady Booch, Ivar Jacobson與 James Rumbaugh三位物件導向大師之手(請參考Martin Fowler著的「UML精華第三版」書中1.3節),這是否代表UML只能應用於物件導向程式語言(OOP)之上?

上述所說的是開發方法論所用的描述語言,從工具的角度來看,目前微軟在「Visual Studio 2010 Ultimate 企業旗艦版」工具中已經支援五種最常見的UML Diagram,並且整合程式碼撰寫開發流程,我認為對於UML具有指標性意義(不是紙上談兵而已),這五種UML分別是:
使用案例圖說明使用者與軟體系統之間的關係,而活動圖說明使用案例的運作流程,循序圖則解釋活動圖運作時物件之間的互動情形。軟體系統使用元件圖將系統模組化設計,而每個元件中則包含多個類別組成,這部分由類別圖說明物件的設計。從開發上來看這五個Diagram彼此互相關聯,也難怪Visual Studio 2010會引進使用。

對於未來,期望UML可以順利發展純熟,Martin Fowler提到UML的三個使用方式:草稿(Sketch)、藍圖(Blueprint)、程式語言(Programming Language)。目前大多數都將UML使用於設計草稿,藍圖方式則有賴於友善的開發工具配合(如Visual Studio之類),最困難的就是直接將UML當作一種程式語言使用,相信這會是夢想中的軟體開發方式!

###

2010年11月14日 星期日

NTUT 100th Anniversary Commemorative Stamp Folio

國立台北科技大學的校慶大約都在10月底11月初(2010年校慶是10月30日),今年比較特別的是建校已經99年,明年(西元2011年)將是建校百年,因此今年校慶主題是「傳承九九,卓越一百」。

為了紀念這個特別的日子,與大家分享今年11月1日首次發行的紀念郵摺!

國立台北科技大學建校百年紀念郵摺
National Taipei University of Technology
NTUT 100th Anniversary Commemorative Stamp Folio



下方是紀念郵摺的細部內容:

2010年11月6日 星期六

PHP Client URL Library 用戶端程式庫

今天介紹PHP的Client URL Library,簡稱cURL,我們利用cURL將可以使被動處理的伺服器應用程式具有主動請求的程式。

cURL提供我們和其他伺服器通訊的功能(當作一個Client端),支援的通訊協定有HTTP、HTTPS、FTP、Gopher、Telnet、DICT、file與LDAP通訊協定,詳細的說明請參考PHP網站文件,位於PHP ManualFunction ReferenceOther Services之中。

主要是因為小黑學弟最近架設了新的網站,在 php.ini設定檔中開啟cURL功能,明明就是一個很簡單的設定,可是怎麼設定都發生錯誤,錯誤訊息是:

PHP Warning: PHP Startup: Unable to load dynamic library 'c:\\php\\ext\\php_curl.dll' - \xa7\xe4\xa4\xa3\xa8\xec\xab\xfc\xa9w\xaa\xba\xbc\xd2\xb2\xd5\xa1C\r\n in Unknown on line 0
[Sat Nov 06 00:00:00 2010] [notice] Apache/2.2.16 (Win32) PHP/5.2.14 configured -- resuming normal operations
[Sat Nov 06 00:00:00 2010] [notice] Server built: Jul 30 2010 16:15:37
[Sat Nov 06 00:00:00 2010] [notice] Parent: Created child process 7520
PHP Warning: PHP Startup: Unable to load dynamic library c:\\php\\'ext\\php_curl.dll' - \xa7\xe4\xa4\xa3\xa8\xec\xab\xfc\xa9w\xaa\xba\xbc\xd2\xb2\xd5\xa1C\r\n in Unknown on line 0
[Sat Nov 06 00:00:01 2010] [notice] Child 7520: Child process is running
[Sat Nov 06 00:00:01 2010] [notice] Child 7520: Acquired the start mutex.
[Sat Nov 06 00:00:01 2010] [notice] Child 7520: Starting 64 worker threads.
[Sat Nov 06 00:00:01 2010] [notice] Child 7520: Starting thread to listen on port 80.

經過十多個小時的努力debug查明原因,「無法載入動態程式庫php_curl.dll」就是因為PHP版本,PHP 5.2.14版本不知道是什麼原因造成php_curl.dll錯誤。經過實地測試 5.2.6至5.2.13版的PHP,這些版本都能夠成功使用cURL功能。

經過這次的經驗,我們必須記住一件事:軟體版本的更新雖然存在著「向下相容」與「修正錯誤」的原則,但是永遠不代表既有功能不會發生問題。當時遇到這個cURL問題一直以為是設定錯誤,直到最後才發現是版本問題...

難道這就是「墨菲定律(Murphy's law):凡是可能出錯的事均會出錯。」

###

2010年10月25日 星期一

Be Your Personal Best 做最好的自己

感謝李開復先生,世界因你不同。

自從上次閱讀李開復先生著作的「世界因你不同」之後,接連買了幾本他的書籍,這次和大家分享這本「做最好的自己」,我極力推薦這本書給各位!不過,由於這本書是先在大陸出版,爾後由聯經出版,對於書中一些字詞是用大陸習慣用語,沒有翻成台灣習慣用語稍微感到遺憾與不解。

建議大家的閱讀以「世界因你不同」為先,而「做最好的自己」為後,兩本書籍的內容有些連貫性,先看李開復先生的故事,再來瞭解他成功的意義與方法。
Be Your Personal Best

李開復,做最好的自己,台北:聯經,2006。

李開復先生在這本書中提出他的「成功同心圓」理論(價值觀),並且詳述應有的方法(態度與行為),如下圖所述,最底層(內部)為價值觀,接著是態度,最上面(外面)是行為。

整本書就是講述「成功同心圓」,總共15章。李開復先生在第一章先定義「成功」,他強調多元化成功才是真正的成功,接著第二章闡述價值觀,再接著六種態度與六種行為共12章,最後總結一章說明我們必須「完整而均衡」,因此,1+1+6+6+1=15章。

注意到,這六個態度分別是中國文化西方文化的對偶關係,因為彼此各別強調:
  • 中國文化:同理心、自省、胸懷。
  • 西方文化:  積極  、自信、勇氣。
李開復先生提出的「成功同心圓」
行為 努力學習 人際交流 有效執行 發現興趣 追尋理想 合作溝通
態度 積極 同理心 自信 自省 勇氣 胸懷
價值觀 誠信

最後,真心推薦李開復先生的「做最好的自己」(定價NT$399),我認為非常適合高中大學的青年學子一起閱讀。我認為如果我能早一點知道,也許就可以更進一步知道什麼是成功而努力前進了,這趟旅程可以更順心一點!

「人人都可以成功,我可以選擇我的成功」。──李開復

最值得記住李開復先生所說的一句話:

有勇氣來改變可以改變的事情,
有胸懷來接受不可改變的事情,
有智慧來分辨兩者的不同。


以下是「做最好的自己」的重點摘要。

「做最好的自己」是成功的途徑
價值觀+態度+行為=成功的秘訣


2010年10月19日 星期二

National Taipei University of Technology 台北科技大學

捐贈書籍的時間又到了,今年度捐贈的書籍清單如下表所述,主要都是Web相關的書籍,這次改買幾本軟體開發相關的書籍,一方面是自己讀了不錯,另一方面是近期在Web領域沒有值得購買的新書(缺乏新技術...?!)。


書籍清單:(受贈者:國立台北科技大學的圖書館)
書名作者出版社
ASP.NET MVC 2開發實戰 黃保翕 悅知文化
ASP.NET 4.0網站開發實戰 趙敏翔 悅知文化
Professional XHTML+CSS:網頁設計師的創意與實踐 益子貴寬‧堀內敬子‧小林信次‧千貫りこ‧伊藤學‧山田あかね‧西畑一馬 悅知文化
嵌入式系統開發之道:菜鳥成長日誌與專案經理的私房菜 邱毅凌 悅知文化
程式設計範式與OOP的思考術:冒號老師的十三堂課 鄭暉 博碩
軟體測試之道:微軟測試團隊的成功經驗、方法與技術 Alan Page, Ken Johnston, Bj Rollison著,林宗斌譯 基峯

今年度捐贈書籍10本,金額在新台幣5000元以內,主要是為了符合自己的計劃,自己現在開始人生另外一個階段,離開學校學習準備成家立業,這一切都必須要有一些財富(有形與無形的財富),不能再像學生時代揮霍沒有壓力了。因此,評估自己的能力之下,訂定每年新台幣5000元的捐贈書籍金額,這大概可以買10本左右的中文書籍,而且行程安排為學校新學年的期間行動。

題外話,記得去年jasper312對於捐贈書籍提出「集中置放」的理論,也就是說:書籍很佔空間,把書捐給圖書館,要用的時候再去借,而且通常看完了也不會再翻第二遍,這樣的模式似乎很有效益!把圖書館當作倉庫使用,利己也利他人,重點是倉庫不用付錢啊!借書的人也不用付錢。

###

Panels in WPF 面板

Windows Presentation Foundation (WPF)的面板(Panel)功能主要是用來設計版面的配置(佈置)(layout),主要用於配置的面板有六種:Canvas、DockPanel、Grid、StackPanel、VirtualizingStackPanel 與 WrapPanel。

Panel類別的繼承階層架構:
可以看到Panel類別一樣泛生自FrameworkElement類別,與控制項Control類別相同。Panel類別有兩個比較常用的屬性,第一是Children屬性會包含所有加入Panel的WPF元素集合(屬於UIElementCollection型態),可以使用Add、Remove、Clear等方法操作面板中的元素。第二是ZIndex附加屬性,ZIndex用來排列元素的前後景,數字越大則越上方(前景),數字越小則越下方(背景),若沒有指定則依照加入的順序向上堆。

面板配置使用最多的大概是Grid類別,Grid的功能類似HTML的表格,而且還可以使用
GridSplitter控制項重新分配Grid各資料行或資料列之間的間距。另外,我們可以使用Grid模擬StackPanel和DockPanel的功能,當然這樣使用會比較麻煩一些。

面板中的Canvas類別是最簡單的面板,只能利用Top、Left、Bottom與Right附加屬性設定元素的絕對位置,適合用來處理效能苛求的應用!

至於System.Windows.Controls.Primitives命名空間的面板,這類面板通常用於控制項的設計,不適用於使用者介面面板(UI Panel),使用者介面面板應該是那些有定義附加屬性的類別(除了WrapPanel沒有定義),附加屬性可以讓元素設定所在面板所需的呈現方式。

基本上來說,玩WPF應用程式的第一步通常就是玩面板,利用面板配置一個視窗的控制項內容,接著開始撰寫功能。其他有關面板的資訊請參考MSDN:面板概觀http://msdn.microsoft.com/zh-tw/library/ms754152%28v=VS.90%29.aspx

###

2010年10月4日 星期一

You Are What You Eat 不生病的生活

隨時開始好的習慣,永遠不嫌遲。

新谷弘實著,劉滌昭譯,不生病的生活 ─ 全美首席胃腸科醫師的健康祕訣,台北,如何出版,2007。
今天談談「健康」這個議題,這本書「不生病的生活」非常推薦給大家閱讀,內容多數是作者新谷弘實醫師的實務經驗與結論,沒有很深奧的醫學理論(絕對看得懂),而新谷弘實醫師提出的論點也不同於「常識」!全書共分四章:
  1. 相信常識是危險的:建立正確觀念
  2. 健康長壽的飲食法:飲食部分如何去做
  3. 好習慣能塑造健康的身體:生活習慣如何去做
  4. 傾聽「生命劇本」:總結
整本書籍的重點在前言已將講清楚了,由於新谷弘實醫師是為胃腸科醫師,在他從事醫療工作期間發現健康與腸胃的外觀有所關聯,他提出一個結論「健康者的胃腸美麗,不健康者的胃腸醜陋」(具有突破性觀點),這當然是醫師才會看的到的現象,我們所有人都不會察覺這點。

那為何會有這種差異呢?或者兩者是否有其關聯?新谷弘實醫師展開調查這些病患,他發現飲食生活習慣會影響「胃相」與「腸相」(胃腸的外觀),換句話說,飲食與生活習慣對於健康將有所影響。

究竟這些因素之間有何關連?新谷弘實醫師提出「神奇酵素(Miracle Enzyme)理論」(此書的英文翻譯是"The Enzyme Factor"),目前還無法用醫學科學證實,醫師認為神奇酵素是身體中五千多種酵素的原型,而維持生命所必要的活動都與酵素有關,因此,讓自己擁有神奇酵素的飲食與生活習慣,將能使我們具有健康的身體,於是醫師根據他的臨床經驗推論與自己的驗證提出「新谷飲食健康法」。

講了這麼多,沒有親身實行改善自己的飲食與生活習慣都是沒有用的!不過,隨時開始好的習慣,永遠不嫌遲。這是我讀這本書最深的收穫,也希望大家能有所體悟。

###

2010年9月16日 星期四

Enterprise Resource Planning 企業資源規劃

企業資源規劃(Enterprise Resource Planning, ERP)是一種資訊系統(Information System),因此 ERP也稱為「企業資源規劃系統」。

EPR的功能是整合企業流程的營運管理,包含人、金錢、機器、物料等資源的管理,藉由整合各資源的活動流程, ERP可以將企業使用資源的效率最佳化,最佳化企業流程是ERP的核心!就系統本質上而言,ERP是一個線上交易處理(On-Line Transaction Processing)的系統,使企業流程具有即時性、關聯性和整合性的資訊特性。

有關於ERP的資訊可以閱讀炬見工作室著作的這本書!這本書總共分四篇15章介紹ERP,分別是觀念篇、功能篇、導入篇與整合趨勢篇,可說是非常詳盡的一本書籍。
炬見工作室,ERP企業資源規劃:導論與個案,台北:博碩文化,2006。

大略介紹ERP是什麼,ERP系統不是一天想出來的概念,其演進過程與年代如下:
  • 1970-1980:物料需求規劃(Material Requirements Planning, MRP)
  • 1980-1990:製造資源規劃(Manufacturing Resource Planning, MRP II)
  • 1990-2000:企業資源規劃(Enterprise Resource Planning ,ERP)
  • 2000-2005:第二代企業資源規劃(ERP II)
  • 2005-2009:電子商務解決方案(E-Business Solution)
  • 2010~:雲端運算解決方案(Cloud Computing Solution)
簡略來說,都是因為電腦的發明、資訊系統的發展,將商業與管理的流程電腦化,目的是為了節省成本創造競爭優勢,觀念很簡單,實作卻不是很容易!因為太複雜了。

若從ERP外部的功能面來看,可以分成六大功能,分別是:
  1. 銷售訂單管理(品管)
  2. 生產製造管理(生產)
  3. 物料庫存管理(庫存採購)
  4. 成本會計(成本)
  5. 一般財務總帳會計(財務)
  6. 行政支援(業務)
當視野轉換為ERP內部的功能面來看,也可以分成六大能力,分別是:
  1. 全球環境支援
  2. 多層式架構應用
  3. 異質資料庫與平台介面整合
  4. 使用者介面與使用者經驗
  5. 彈性模組化變動
  6. 分散式系統應用
上述這些只是書中前兩章的一些觀念,如果你看了沒感覺,絕對是非常正常的反應,因為只有到了大公司裡面才會有所體悟,當時ycwang指導我研究ERP時,我自己也是一頭霧水,見山是山,見水是水。但是今天到組織中觀察體驗之後,豁然發現見山不是山,見水不是水,生命本身就是不斷累積的經驗,現在回頭看看,我絕對相信沒有白費的努力,你/妳也可以是一樣,機會是留給準備好的人。

###

熱門文章