網頁

搜尋此網誌

2010年5月27日 星期四

Hypertext Preprocessor 超文本預處理器

PHP全名是Hypertext Preprocessor (超文本預處理器),PHP是一個腳本式(Scripting)的編程語言(Programming Language),主要是用在網頁應用程式(Web Application)的開發上面(PHP的強項),但是也可以用在Windows開發或其他方面(只是可能不太適合)。

這篇文章是為了再次談論PHP的學習心得,早在一開始進入Web世界的時候,我就採用PHP做為學習的第一種語言,這是因為PHP是自由且免費的,加上語法簡單靈活,學習門檻低,所以當時才會選擇PHP學習Web程式開發。

爾後學習各類Web伺服器編程語言,如JSP、ASP.NET、Ruby、Python等,PHP一直是「揮之不去的夢靨(nightmare)」(靨,讀音ㄧㄝˋ,部首:面。),不想要使用PHP都不行,因為太多現有的Web服務都是利用PHP開發而成,後續的維護也必須有人會PHP。因此,身為一個專業的網頁應用程式設計人員,我認為都應該具備基本的PHP能力。

PHP被忽略的地方:
  • 開發圖形使用者介面(Graphical User Interface, GUI)的視窗程式,可以用PHP-GTK
  • PHP的起始標籤<?php和結尾標籤?>,結尾標籤可以省略(要加分號結束),但PHP程式碼區塊中不能有任何HTML,最好是不要省略,寫程式還是嚴謹比較好,省略通常是用在include或require的PHP檔案中
  • 最後一行PHP程式,可以不使用分號(semicolon)結束,因為結尾標籤前面會自動加入。
  • 魔術常數(Magic Constants),真的很神奇又好用,魔術常數有:__LINE__、__FILE__、__DIR__、__FUNCTION__、__CLASS__、__METHOD__和__NAMESPACE__七個,這些常數與預設常數(Predefined Constants)相比還要經常使用。
當然還有許許多多有趣、被忽略的地方,通常是看Code或是撰寫Code才會發現,是不是這樣呢!

2010年5月25日 星期二

DirectShow FAQ 常見問題集

DirectShow常見問題集(Frequently Asked Questions, FAQs)

資料來源:http://msdn.microsoft.com/en-us/library/dd375463%28v=VS.85%29.aspx
  • DirectShow技術的系統需求為何?
    DirectShow支援Microsoft Windows 95以後的作業系統。
  • 利用DirectShow開發程式,我需要知道多少關於COM元件的知識?
    對於應用程式(Application)開發人員而言,你必須知道如何與COM元件互動:就是實體化(Instantiate)COM元件,存取CO元件揭露的介面(Interface),並且管理這些介面的指標。若是想要開發Filter,那麼就要瞭解更多COM元件的知識。
  • DirectShow支援哪些媒體規格?
    請參考:Supported Formats in DirectShow
  • 是否存在於一份關於DirectShow的「硬體相容性清單」(Hardware Compatibility List, HCL)?
    沒有,DirectShow是基於Microsoft DirectDraw(處理視訊影像)和Microsoft DirectSound(處理聲音)的硬體相容,如果系統不支援這些,DirectShow則利用GDI (Graphics Device Interface)繪製視訊影像,聲音則使用Windows Core Audio API輸出聲音。
  • 開發DirectShow可以使用哪種程式語言?
    DirectShow 主要用於C++語言開發。然而DirectShow API的一小部分可以利用Visual Basic 6.0開發,但是不推薦使用(deprecated)。
  • .NET Framework的Managed Code可以直接叫用DirectShow嗎?
    不行,微軟目前沒有針對Managed Code提供API使用,必須透過互通性(Interoperability)元件叫用。
  • DirectShow和Microsoft DirectX有什麼關聯性?
    當硬體支援時,在系統內部DirectShow使用DirectSound和DirectDraw。
    視訊渲染器(Video Renderer)和重疊混音器(Overlay Mixer)使用 DirectDraw 3和DirectDraw 5。
    視訊混合渲染器7 (僅限 Windows XP)使用DirectDraw 7 。
    視訊混合渲染器9 和增強型視訊渲染器則使用最新的 Microsoft Direct3D API。
    您不需要使用其他DirectX API來開發DirectShow,雖然也可以一起結合使用。
  • DirectShow 與 Microsoft ActiveMovie 有什麼關聯性?
    DirectShow的名稱原本叫做ActiveMovie, 現在ActiveMovie這個術語已經不再使用。
  • Graphedt.exe是否有提供原始程式碼?Graphedt.exe可以重新發佈嗎?
    沒有原始程式碼可以使用,Graphedt.exe不可重新發佈(redistributable)。
  • 我要利用DirectShow開發應用程式,要如何設定開發環境?
    請參閱:Building DirectShow Applications
本文結束...

2010年5月23日 星期日

Inside Larry and Sergey's Brain [Google為什麼贏]

花了一週的時間看完「Google為什麼贏?─超越競爭者的創新思維」,這本書是天下雜誌出版翻譯的書籍,參考官方網址http://www.cwbook.com.tw/common/book.jsp?productID=4055,原文書名是「Inside Larry and Sergey's Brain」,整本書是以觀察者的角度記錄兩位創辦人「Larry Page(賴瑞‧佩吉)」與「Sergey Brin(賽吉‧布林)」的思想。

而中文書名其實應該以「賴瑞與賽吉的Google思維」會比較恰當,但是這種書名會比較不容易暢銷吧!眾多書籍總是要提到「贏、成功、創新...」等等的關鍵字,好像這就是銷售的基本保證,編輯不用因此承擔銷售量的責任(不是書名不好,而是...的因素才賣不好),我買這本書不是因為書名的「贏、成功、創新...」,而是我對於Google創辦人的好奇心才購買的,不然我大可以在誠品書店躺著看完(實際上是在博客來網路書店買的),這樣天下雜誌書版也賺不到錢。

理察‧布蘭特(Richard L. Brandt)著,朱家一譯,Google為什麼贏?,台北市:天下雜誌,2010。
(封面左邊是Larry Page,右邊是Sergey Brin)

接下來看看整本書的架構(瀏覽閱讀),我特地找了原文書Inside Larry and Sergey's Brain的標題和中文對照,期望能對於原著作者的寫作義涵有更深入的了解。

前言 策略才是關鍵(Introduction: The World's Librarians)

前言利用亞歷山大圖書館(The Great Library of Alexandria)做為開場,後續的章節也都接續這個主題,亞歷山大圖書館是世界上第一座大型圖書館,亞歷山大圖書館蒐錄了當時世界上的圖書,這是一個理想,也似乎和Google的理想相同:「Google 的任務在於組織全世界的資訊,讓全球都能使用並有所裨益。」,而現代偉大的圖書館則是Google Books。Google重視企業道德,利用科技的經營策略,實現人類善良的理想,這一切都在這本書中可以察覺,對於Google我又更進一步認識,但願未來能夠在Google工作,這是一個可以為理想世界奮鬥的位子。
  • 第一章 網路空間的仲裁者(Arbiters of cyberspace)
  • 第二章 意外走上創業之路(Accidental entrepreneurs),發行版是「意外創業」
  • 第三章 亂中有序的企業文化(Controlled chaos),發行版是「亂中有序」
  • 第四章 賴瑞與賽吉的夢想(Larry and Sergey's corporate vision),發行版是「賴瑞與賽吉的企業願景」
  • 第五章 大眾化廣告(Advertising for the masses),發行版是「廣告大眾化」
  • 第六章 令人心碎的上市路(A heartbreaking IPO of staggering genius),發行版是「令人心碎的公開上市」
  • 第七章 進軍中國──最感不安的決定(The China syndrome : Google as big brother),發行版是「中國併發症」
  • 第八章 隱私權又如何?(What about privacy?)
  • 第九章 冷酷無情的圖書館員(The ruthless librarians)
  • 第十章 Google的雲端(The Google cloud),發行版是「點子製造機」
  • 第十一章 Google,電話公司?(Google, the telephone company?)
  • 第十二章 超越搜尋的思維(Thinking beyond search : the world's problems, real and fanciful.)
小時候的生長環境必定會影響一個人的未來發展,我在這本書又看到了。賴瑞‧佩吉(Larry Page)的家庭和汽車、電腦有關,因此賴瑞‧佩吉對於電腦科技似乎有著基因的遺傳,書中用工業的鐵鎚代表他。而賽吉‧布林(Sergey Brin)則是數學家庭,他也因此對於數學有著基因的遺傳,書中用鐮刀代表它舊蘇聯的生長環境。兩位都是猶太人,都曾就讀蒙特梭利學校(Montessori Schoo),可能是生長環境與教育的影響,鐵鎚和鐮刀對於改革、理想都有著不顧一切的態度,這使得Google的基因一開始就不太一樣了。

看完這本書,你會相信Google想要改變這個世界,當然改變舊有制度必定會遭受既有利益者的抗議,這些在第九章之後會一一看到。你也會一路看到賴瑞與賽吉兩人的轉變,為了理想而固執慢慢開始妥協,一步一步想辦法改變現有的世界朝向理想邁進。

書中對後一段提到這段話,和大家分享:「賴瑞與賽吉因Google而擁有爆發的財富,也擁有龐大的力量可以做一些改變,在未來十年也持續如此。他們就像發現自己是魔法師之後的哈利波特,有了自己的魔棒,我們可以預期他們做出一些偉大的事情。」我認為,如果你真的有理想要改變這個世界,就要有龐大的金錢與力量來推行,這麼做才有可能實現理想完成夢想,是吧?


主題閱讀



2010年5月20日 星期四

Moodle Programming 模組化物件導向動態學習環境

這篇文章是為了瞭解Moodle (Modular Object-Oriented Dynamic Learning Environment)的整個程式架構,剛好最近對於程式碼的研究有興趣,再加上學弟(專門研究Moodle的小黑)也正在開發新功能。因此,花了一些時間大概解析一下程式碼,使用的Moodle是1.9.8版本,整個Moodle的目錄有下列資料夾(共32個,可以看成是32個區塊,每個區塊皆有特定功能):
  1. admin=>管理功能
  2. auth=>使用者驗證(authentication)功能
  3. backup=>備份/復原(backup/recover)功能
  4. blocks=>區塊功能
  5. blog=>部落格功能
  6. calendar=>日曆功能
  7. course=>課程(活動紀錄)功能
  8. enrol=>入學註冊(enrolment)功能
  9. error=>謬誤輸出功能
  10. files=>檔案上傳功能
  11. filter=>過濾器
  12. grade=>評分功能
  13. group=>使用者群組管理
  14. install=>程式安裝功能
  15. iplookup=>地理位置功能
  16. lang=>語言包
  17. lib=>函式庫
  18. login=>登入功能
  19. message=>信息功能
  20. mnet=>網路功能
  21. mod=>活動中的模組功能
  22. my=>"我的"(個人化)功能
  23. notes=>筆記功能
  24. pix=>圖片檔案
  25. question=>問卷功能
  26. rss=>簡易資訊聚合(即Really Simple Syndication, RSS)功能
  27. search=>搜尋功能
  28. sso=>單一登入(Single Sign-On, SSO)功能,已經棄用(deprecated)移至auth功能
  29. tag=>標籤函式庫(Tag Library)
  30. theme=>外觀主題功能
  31. user=>使用者功能
  32. userpix=>顯示使用者圖片
根目錄下的檔案:
  1. config-dist.php=>組態設定檔的樣板,包含常用的設定範例
  2. config.php=>組態設定檔,Moodle安裝完成後產生
  3. COPYING.txt=>版權說明檔
  4. file.php=>從資料目錄(moodledata)取得檔案的功能
  5. help.php=>說明支援頁面
  6. index.php=>進入點(Entry Point)
  7. install.php=>安裝執行檔
  8. manifest.txt=>關於檔案的檔案(貨艙清單)
  9. README.txt=>讀我檔案
  10. tags=>標籤檔(tag file)
  11. tags.txt=>標籤檔說明文件
  12. version.php=>版本資訊

大概對Moodle的程式碼先有個概念,之後再繼續詳細說明,特別感謝小黑討論與分享經驗。

2010年5月17日 星期一

Joel on Software 約耳趣談軟體

人月神話之外,另一本軟體開發管理的經典著作!

與大家介紹一下這本「約耳趣談軟體:來自專案管理的現場實錄(Joel on Software)」,當我買了之後閱讀,才發現所有的文章(不知道是不是全部)在網站上都有(Joel on Software Translation Project ,Joel on Software),換句話說,你可以看免費的(還是請大家支持購買),希望我寫這篇不會影響書籍銷售。

註:原著書名相當長,「Joel on Software: And on Diverse and Occasionally Related Matters That Will Prove of Interest to Software Developers, Designers, and Managers, and to Those Who, Whether by Good Fortune or Ill Luck, Work with Them in Some Capacity」,所以此書簡稱「約耳趣談軟體(Joel on Software)」。


約耳趣談軟體:來自專案管理的現場實錄
Joel Spolsky著,梅普華譯,約耳趣談軟體,台北市:精誠資訊,2010。


請參閱原始網頁(中文翻譯版本)http://local.joelonsoftware.com/wiki/The_Joel_on_Software_Translation_Project:實體書

第一部份:位元與位元組(Bits and Bytes)
第二部份:管理開發人員(Managing Developers)
第三部份:身為約耳:對某些主題的隨想(Part three: Being Joel: Random Thoughts on Not-So-Random Topics)
第四部份:對.NET有點過頭的批評(A Little Bit Too Much Commentary on .NET)


最後希望大家可以看看這些文章,充實自己對於軟體專案的認識,未來我們也才能夠開發更好的服務而改變這個世界。

2010年5月14日 星期五

Knowing DirectShow

在仔細研究DirectShow之後,總是會圍繞三個主題,我們再次整理這些觀念。看看這張圖會更清楚:(http://msdn.microsoft.com/en-us/library/dd390352%28v=VS.85%29.aspx)
Typical DirectShow application


Filter
Filter是DirectShow中最基本的處理單位,具備IBaseFilter介面,Filter具有三種狀態,分別是RunningStoppedPaused狀態,而Filter的輸出入端點稱為Pin,Filter利用Pin使資料從一個Filter傳送至另一個Filter,Pin具備IPin介面。

Filter的分類可以分成下列幾種(不是絕對區分,一個Filter可能同時具有兩類特性):
  • Source:提供資料輸入至DirectShow中,位於DirectShow的起始端,例如網路、攝影機或檔案等。
  • Transform:處理資料的用途,例如編碼器(Encoder)和解碼器(Decoder)。
  • Renderer:輸出資料,位於DirectShow結束端,例如螢幕、喇叭或檔案等。
  • Splitter:資料分離器,具「單端輸入,多端輸出」的性質,例如將一個影音檔分離成Video和Audio兩個輸出。
  • Mux:資料多工器(Multiplexer),具「多端輸入,單端輸出」的性質,例如將兩個Video和Audio合成為單一影音檔案儲存。
Filter Graph
Filter Graph也可簡稱Graph,是DirectShow中為了說明一群Filter的一個專有名詞。這樣解釋好了,我們利用DirectShow完成一項目的必須串接組合多個Filter元件,這整個組合就是一個Filter Graph,觀念就是這樣簡單。

Filter Graph Manager
Filter Graph Manager是管理Filter Graph的COM元件,主要有下列功能:
  • 改變Filter狀態:Filter的狀態改變必須依照特定順序,這由Filter Graph Manager統一管理,簡化Application對狀態的控制。
  • 提供參考時脈(Reference Clock):Reference Clock可以確保所有的Filter是同步運作,另外資料輸出的時間則稱為Presentation Time
  • 通知事件:傳遞事件給Application,這個機制有點像是Windows的訊息迴圈(Message Loop)。
  • 操作Graph Filter的方法:可以動態新增或刪除Filter,也可以更改Filter的串接方式。
DirectShow的觀念大致上是這些,不過DirectShow的資料說明真的很多,還要繼續努力研究!

DirectShow Reference:
http://msdn.microsoft.com/en-us/library/dd375467%28v=VS.85%29.aspx

DirectShow Overview

我們繼續談談DirectShow的架構,從系統的觀點來學習,避免陷入見樹不見林的困境當中。

DirectShow的設計是為了解決多媒體(Multimedia)的開發困境,因為要在Windows上開發多媒體應用遇到的挑戰有:
  • 多媒體的資料是大量的串流形式,而且必須快速的處理(process)。
  • 聲音(Audio)和影像(Video)必須同步(synchronize)處理,意思是開始與停止都必須一致且同樣的速率進行。
  • 資料來源(Source)具有多樣性,來源可以是本機磁碟機、網路、電視廣播或是視訊攝影機。
  • 資料格式(Format)是多變不定的規格,例如Audio-Video Interleaved (AVI)、Advanced Streaming Format (ASF)、Motion Picture Experts Group (MPEG)或Digital Video (DV)等等。
  • 程式設計人員不會事先知道使用者端的硬體系統規格。
先看DirectShow的架構圖,諺語(adage)說A picture is worth a thousand words
High level architecture

DirectShow的架構設計上使我們的應用程式(Application)和底層「複雜的資料、硬體差異和影音同步」隔離(加了一層),而為了解決底層的多樣性,DirectShow採用模組化架構的元件(稱為Filter,本身是COM 元件,為什麼叫做Filter?)。Filter元件對底層支援Windows Driver Model (WDM)的裝置,另外,也支援Video for Windows (VfW) 、Audio Compression Manager (ACM)和Video Compression Manager (VCM)的遺留元件,當然,程式開發人員也可以開發自己的Filter元件。

DirectShow利用DirectDraw有效率的呈獻(render)影像,聲音則是利用DirectSound播放。同步的問題則是利用時間戳記(time-stamped)取樣的方式解決,DirectShow在多媒體資料上加入時間資訊(聰明的方法)。

整個DirectShow的如架構圖所示,可以清楚看到FilterFilter GraphFilter Graph Manager的關係,Application只須和Filter Graph Manager溝通而簡化開發的困難度。

參考資料:http://msdn.microsoft.com/en-us/library/dd375470(VS.85).aspx

2010年5月12日 星期三

Introduction to DirectShow

鑒於多媒體的需求日益增大,影像處理越顯重要,微軟(Microsoft)在Windows平台上提供DirectShow做為處理串流多媒體的框架。(好像在寫論文...)詳細內容可以參考MSDN的DirectShow章節,概觀請參閱DirectShow System Overview

下列是我對DirectShow的簡單介紹:
  • DirectShow的目的
    多媒體串流的高品質的擷取(capture)和播放(playback)。
  • DirectShow播放的支援
    • Advanced Systems Format (ASF)
    • Motion Picture Experts Group (MPEG)
    • Audio-Video Interleaved (AVI)
    • MPEG Audio Layer-3 (MP3)
    • WAV聲音檔
  • DirectShow擷取的支援
  • DirectShow是基於Component Object Model (COM)元件標準開發而成,換句或說,使用DirectShow必須了解一些COM的觀念。
  • DirectShow是設計用C++撰寫開發,在這部分微軟未提供managed API給.NET Framework使用。
  • DirectShow在不同的平台上有新的功能,參考What's New in DirectShow
開發DirectShow的注意事項:
  • 以前是在DirectX SDK裡面,現在則是在Windows SDK當中,雖然DirectShow是Direct X的一部分,但已經移到Windows SDK裡面了,因為DirectShow已經預載在Windows作業系統當中
  • 標頭檔(Header):Dshow.h,函式庫:Strmiids.libQuartz.lib
  • 觀念
    • Filter是DirectShow中的元件區塊(本身是COM元件)。
    • Filter Graph是由多個Filter串接組成,可以執行特定的工作,一組Filter則稱之為Filter Graph。
    • Filter Graph Manager是管理Filter Graph的元件,我們的Application是和Filter Graph Manager元件溝通而達成工作,而不是直接控制Filter Graph和Filter。
  • 可以利用GraphEdit.exe應用程式測試DirectShow的Filter串接運作是否正確,檔案可能位於安裝Windows SDK的位置,如C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\graphedt.exe。
最後,Visual C#程式語言是否可以利用DirectShow呢?目前我Google的結果是可以的,使用AForge.NETDirectShow.NET似乎可行,這還要再進一步研究!待續...

2010年5月11日 星期二

Visual Studio 2010 三螢一雲的開發平台

2010-05-06參加了台灣微軟舉辦的「三螢一雲的開發平台 - Visual Studio 2010 上市發表會」,這是第一次參加這類型活動,看到微軟很會行銷(灑錢啊),而且微軟所邀請的講師、MVP看起來真的都是熱愛程式的人。

對於程式開發者來說,我認為Visual Studio 2010是最友善的開發工具,增加生產力的好產品,用過Visual Studio的人也都會這樣認為!Visual Studio 2010的進步都是在一些小地方改善,讓開發工作變得更為友善好用,真的。




.NET Framework 4 and Extensions海報:

等待發表會開始的影片,介紹Visual Studio的演進:

2010年5月3日 星期一

Diet Read Life 飲食閱讀與人生

今天談談三件事:飲食(Diet)、閱讀(Read)、人生(Life)。

感謝兩位作者的啟發,一位是「越讀者」的作者:郝明義先生,另一位是「你拿什麼定義自己?組織大師韓第的生命故事 」的作者:查爾斯‧韓第(Charles Handy)大師



郝明義先生在「越讀者」一書中提到:四種閱讀飲食,我非常認同他所提出的觀點,而當我多次閱讀韓第先生的生命故事之後,也有感而發提出「人生的四種生活飲食」的觀點,好像,世間的道理就是「理一分殊」,因此,我才在這裡才會談談飲食、閱讀與人生。

飲食(Diet) 閱讀(Read) 人生(Life)
主食 生存需求的閱讀 家庭的生活
美食 思想需求的閱讀 工作的生活
蔬菜水果 工具需求的閱讀 學習的生活
甜食 休閒需求的閱讀 休閒的生活

閱讀是我們頭腦的飲食,而生活則是人生的飲食,我的觀點說明如下:

第一種「主食」
主食是讓人吃飽的。「越讀者」稱之為「生存需求的閱讀」。在人生當中,家庭生活是一個人的重心,是塑造影響一個人的環境,如果沒有完滿的家庭,人生中勢必有許多遺憾與缺失,小時候父母親照顧並影響我們,而當我們長大組織家庭時,我們也將影響下一代。我相信完滿的家庭生活,才會有完滿的人生,也才會有善良的社會環境。

第二種「美食」
美食是讓人吃營養的。「越讀者」稱之為「思想需求的閱讀」。工作的生活一直是人生中最大的一部分,工作讓人獲得甜頭,不管是金錢物質上、或是成就感等無形的滿足。大概人的一生就是在嘗試各種的美食,看看這個對不對味,自己是不適合這項工作。

第三種「蔬菜水果」
蔬菜水果是讓人吃消化的。「越讀者」稱之為「工具需求的閱讀」。人的一生就是不斷的學習,透過學習讓我們瞭解世界和認識自己,學習讓我們看到人生不同的視野。

第四種「甜食」
甜食是讓人吃爽的。「越讀者」稱之為「休閒需求的閱讀」。休閒的生活是讓人放鬆和體驗生命,做些平常想做卻不能做的事情,到處走走看看不同的地方。

郝明義先生的四種閱讀飲食不是絕對客觀和截然的觀點,重點在於讓人們容易了解,他也提到兩項重要的事情:
  1. 總要有這四總分類:主食、美食、蔬水、甜食。
  2. 飲食的關鍵在於均衡,不論如何區別飲食的內容(同樣的對於閱讀和人生而言),都要均衡的維持吸收。
對於人生也不是這樣!家庭、工作、學習和休閒,每種生活都要均衡分配時間,並且都要付出相同的心力,我相信唯有這樣才會是一個完滿的人生。

熱門文章