網頁

搜尋此網誌

2016年3月27日 星期日

Upstart

Upstart 是一種 init 服務 (daemon),init 是 Linux 上第一個執行的行程 (process)。init 系統除了 Upstart 之外,還有過去的 System V init (唸作 System Five, 縮寫為 SysV),與後來發展的 systemd 。Upstart 是 Ubuntu 為了取代 SysV init 所開發出來的系統,採用事件為基礎的設計 (event-based),利用事件驅動的方式可以平行執行多個程式,提高開機的速度與效能。

Upstart 有兩個重要的概念:「事件 (Events) 」與「工作 (Jobs)」

Job

Job 是一個工作的單位 (unit of work),Upstart 有三種 Job 類型:
  • Task Job:程式執行一段時間就會結束, Process 有確定壽命和結束狀態,簡稱「Task」。
  • Service Job:長時間執行的程式,通常是背景服務,簡稱「Service」。
  • Abstract Job:不會有子行程產生,純粹僅有工作狀態。
每個 Job 會存在於不同的狀態,共有 11 種狀態 (State):
  • waiting:初始狀態
  • starting:工作即將開始
  • security:工作正在載入 AppArmor 安全政策
  • pre-start:執行 pre-start 當中
  • spawned:即將執行 script 或 exec
  • post-start:執行 post-start 當中
  • running:在 post-start 之後,表示 Job 正在執行的過渡期間狀態
  • pre-stop:執行 pre-stop 當中
  • stopping:在 pre-stop 之後的過渡期間狀態
  • killed:工作即將停止
  • post-stop:執行 post-stop 當中
Job 在 Upstart 系統上是定義在副檔名為 .conf 的組態檔 (Job Configuration File) 裡,檔名應該要能夠表示你所執行的應用服務。至於 Job 要如何撰寫,可以參考 Upstart 文件的第6章

依據組態檔放置的位置不同,Job 可以區分為:
  • System Job:組態檔位於 /etc/init/ 目錄中。
  • User Job:組態檔位於使用者加目錄下的 .init/ 目錄中,Upstart v1.7以後已經不支援。
  • Session Job:Upstart v1.7之後才有的功能,Job 是被使用者的 Session 所啟動,組態檔有多個位置,請參考 cookbook 說明

Event

Event 在 Upstart 裡是用來通知其他 Job 或 Event,Event 被發出 (emit) 後會廣播至整個 Upstart 系統,只有感興趣 (也就是有註冊對應的 Event) 的  Job 或 Event 才會收到。

注意到, Event 的名稱允許和 Job 的名稱是相同的。另外, Event 也可能和 Job State 的名稱相同,但是相同名稱的 Event 和 Job State 不是指同一個事情,雖然運作起來很相似 (變動狀態很像發出事件)。

Upstart 有三種 Event 類型:
  • Signal Event:信號事件是非阻塞 (non-blocking)、非同步 (asynchronous) 的事件,信號事件發出後會立即回傳,允許呼叫者繼續執行其他工作。
  • Method Event:方法事件是阻塞 (blocking)、同步 (synchronous) 的事件,方法事件如同程式設計的 function 功能,呼叫者發出後必須等待方法事件執行完畢,若有問題發生將回傳錯誤資訊。
  • Hook Event:掛勾事件與方法事件類似,是阻塞、同步的事件類型,只是用途不太相同,當作旗標 (flag) 的功能通知其他  Job 或 Event,確定所有接收者都執行完畢才繼續。

操作

在 Ubuntu 上和 Upstart 溝通與互動,有下列幾個程式可使用,詳細指令請參考連結的內容:

參考資料:

###

2016年3月7日 星期一

Data Storage 資料儲存

資料儲存由下至上分別是磁碟 (Disk)、磁碟區 (Volume) 與檔案系統 (File System),從作業系統的角度來看都是存放裝置 (Storage) 組成。以下分別說明相關詞彙。

Disk: 磁碟

  • 磁盤 (Platter):一個至多個磁盤組成一個磁碟。
  • 磁頭 (Head):一個磁盤有兩面,每一面有一個磁頭,也就是一個磁盤有2個磁頭。
  • 磁軌 (Track):磁盤上同心圓定義為磁軌,一面磁盤上有多個磁軌。
  • 磁柱 (Cylinder):各磁盤上相同位置的磁軌。
  • 磁區 (Sector):磁碟上可定位的最小單位,也就是資料最小的儲存單位。大小通常是 512 bytes,現在改為 4096 bytes (4KiB) 的大小 (稱為 4K 磁區)。另外,CD-ROM 的磁區通常是 2048 bytes。
  • 磁碟分割(Partition):磁碟在邏輯上可以分割成不同的區域,讓一個磁碟「看起來」好像有多個磁碟。一個磁碟至少有一至多個磁碟分割。
  • 主要開機紀錄 (Master Boot Record, MBR) :用來記錄磁碟分割的狀態,位於 Disk 上的第一個磁區,包含開機程式碼 (boot code) 與磁碟分割表 (Partition Table)。
  • GUID 磁碟分割表  (GUID Partition Table):另一種用來記錄磁碟分割狀態的格式。
  • 開機磁區 (Boot Sector):可開機 Partition 上的第一個磁區。

Volume: 磁碟區

在邏輯上 (注意是邏輯上而不是實體上),可建立檔案系統的最小單位。Partition 不等於 Volume,透過操作可以將多個 Partition 組成一個 Volume,例如 Logical Volume Management (LVM) 、Redundant Array of Independent Disks (RAID) 技術。

File System: 檔案系統

檔案系統的基本功能是決定檔案如何命名、儲存和組織。
  • 區塊 (Block),Windows 系統上稱為叢集 (Cluster),或是磁叢:磁碟上處理檔案的最小單位。一個叢集由一至多個磁區組成,在檔案系統格式化時決定。
  • FAT:檔案配置表 (File Allocation Table) 檔案系統,有多種版本,包括 FAT12、FAT16和FAT32,FAT 後面的數字表示叢集的位元數大小。
    • FAT16:每個 FAT 實體 (entry) 使用 16 位元紀錄,也就是說最大可定址到216 (=65,536) 個叢集。支援最大檔案大小為 4GB,支援最大磁碟區大小為 4GB。根目錄的檔案與資料夾總數最多為 512 個。
    • FAT32:每個 FAT 實體 (entry) 使用 32 位元紀錄,但保留最高4位元,因此最大可定址到228 (= 268,435,456) 個叢集。支援最大檔案大小為 4GB,支援最大磁碟區大小為 32GB。每個目錄的檔案與資料夾總數最多為 65534 個。
  • NTFS:新技術檔案系統 (New Technology File System)。

參考資料:

###

2016年1月22日 星期五

Driver Development 驅動程式開發

什麼是驅動程式?

驅動程式 (Driver) 是一種軟體元件,介於作業系統 (Operating System) 和硬體裝置 (Device),用途是讓作業系統和裝置彼此能夠溝通。從系統層面上看,由上而下分別是應用程式 (Application)、作業系統、驅動程式與裝置,如下圖所示。

驅動程式在架構上是分層堆疊 (layered in a stack) 而成,因此驅動程式不一定只和硬體裝置溝通,可能和其他驅動程式溝通。驅動程式依照用途不同可以分為下列幾類:
  • 功能驅動程式 (Function Driver)
    直接與硬體裝置直接溝通的驅動程式,稱為 Function Driver。
  • 篩選器驅動程式 (Filter Driver)
    輔助處理 I/O 請求的驅動程式,與其他驅動程式相互溝通,稱為 Filter Driver。
  • 軟體驅動程式 (Software Driver)
    與硬體裝置無關,是為了處理作業系統的核心資料結構,稱為 Software Driver。
  • 匯流排驅動程式 (Bus Driver)
    驅動匯流排以建立裝置樹的驅動程式,稱為 Bus Driver。

驅動程式由誰開發?

驅動程式是由裝置的設計者或製造者所開發,讓作業系統知道如何操作此裝置,進行資料的讀寫。另一方面,依照硬體標準所設計和製造的裝置,這些驅動程式可能就由作業系統廠商開發提供。

驅動程式模型 (Driver Model)

開發硬體裝置的驅動程式有3種模型:
  • VxD (Virtual Device Driver):概念是將硬體裝置虛擬化,讓多個應用程式可以共用實際的硬體,所以稱為「虛擬裝置驅動程式」。是 MS-DOS、Windows 3.x 和 Windows 95 使用的技術。
  • Windows Driver Model (WDM):非 NT-based 的 Windows 98 與 Windows Me,以及 NT-based 的 Windows 2000 與 Windows XP 使用的技術。
  • Windows Driver Frameworks (WDF) ,以前稱為 Windows Driver Foundation (WDF),這是 Windows Vista 以後使用的技術,WDF 包含兩種框架:

硬體裝置的作業系統觀點

在 Windows 系統中,硬體裝置表示為隨插即用裝置樹 (Plug and Play Device Tree,簡稱 Device Tree) 中的裝置節點 (Device Node),裝置節點之間具有父子 (parent/child) 關係,裝置節點由多個裝置物件 (Device Object) 所堆疊組成,稱為裝置節點的裝置堆疊 (Device Stack)

裝置物件是一個DEVICE_OBJECT結構,每個裝置物件會有它對應的驅動程式,在系統上表示為驅動程式物件 (Driver Object) ,是一種DRIVER_OBJECT結構,從另一個觀點來看,裝置堆疊可以看成是「裝置物件—驅動程式」組合所堆疊而成。

裝置物件依據建立的驅動程式不同,區分為:
  • 由 Bus Driver 建立的裝置物件,稱為  Physical Device Object (PDO)。
  • 由 Function Driver 建立的裝置物件,稱為  Functional Device Object (FDO)。
  • 由 Filter Driver 建立的裝置物件,稱為  Filter Device Object (Filter DO)。
注意到 Bus Driver 建立的裝置物件,如果這個裝置物件本身就是匯流排的話,那 Bus Driver 所建立的是 FDO 而不是 PDO。換句話說,一個驅動程式可能同時兼具 Bus Driver 和 Function Driver 的角色功能。另外,一個 Driver Object 可以建立多個 Device Object,這也符合直覺上一個 Driver 可以驅動很多 Device 的想法。

參考資料:
###

2015年9月24日 星期四

Cryptosystem 密碼系統

這篇記錄密碼系統 (Cryptosystem) 的分類

依安全性程度

  • 無條件安全 (Unconditionally Secure)
  • 計算安全 (Computationally Secure)

依加解密資料的處理方式

  • 串流 (Stream) 密碼系統:每次加解密一個 bit 或一個 byte。
  • 區塊 (Block) 密碼系統:以數個 bits 或數個 bytes 為一個單位進行加解密。

依加解密資料的格式

  • 文字 (Text)
  • 多媒體 (Multimedia)

依加解密金鑰的異同

並列出著名的加解密方法 (演算法),與其加密模式、加密方式。
  • 秘密金鑰密碼系統 (Secret-Key Cryptosystems),也稱對稱式密碼系統 (Symmetric Cryptosystems)、單金鑰密碼系統 (One-Key Cryptosystems)。
    • 資料加密標準 (Data Encryption Standard, DES):56 位元金鑰,以64位元為區塊加解密。若明文超過區塊大小則切割成數個區塊處理,各個區塊加解密的處理方式有下列加密模式:
      • ECB (Electronic Code Book) 加密模式:每個區塊各自獨立加解密處理。
      • CBC (Cipher Block Chaining) 加密模式:利用初始化向量 (IV) 與第一個明文區塊進行XOR運算後加密,第一個密文與第二個明文XOR運算後加密。
      • CFB (Cipher Feed Back) 加密模式:初始化向量加密後與第一個明文區塊進行XOR運算,第一個密文加密後與第二個明文區塊進行XOR運算。
      • OFB (Output Feed Back) 加密模式:初始化向量加密後與第一個明文區塊進行XOR運算,初始化向量加密二次後與第二個明文區塊進行XOR運算。
    • 三重資料加密標準(Triple Data Encryption Standard, Triple-DES 或 3DES):串接 3 個 DES 使用,金鑰為168 位元或112位元,一樣以64位元為區塊加解密。。
    • 先進加密標準 (Advanced Encryption Standard, AES),金鑰長度為 128、192 或 256 位元,128 位元區塊加解密,使用 Rijndael 演算法 (讀作“Rain Doll“)。
  • 公開金鑰密碼系統 (Public-Key Cryptosystems),也稱非對稱式密碼系統 (Asymmetric Cryptosystems)、雙金鑰密碼系統 (Two-Key Cryptosystems)。
    • RSA:第一個公開金鑰密碼系統,由 MIT 的 Ron Rivest, Adi Shamir, 與 Leonard Adleman 三位教授所發明,取其性是第一個字母而稱 RSA。目前標準為 PKCS#1或  RFC 3447。基於質因數分解,相同的明文會對應到相同的秘文。
    • ElGamal:基於解離散對數 (Discrete logarithm),相同的明文會對應到不同的秘文,密文長度為明文的 2 倍。
    • 橢圓曲線 (Elliptic curve):基於橢圓曲線的有限域 (finite field),其加解密的運算量較少 (與 RSA 和 ElGamal 相比之下)。
根據參考資料描述:「一般來說,對稱式密碼系統的加解密速度大約比非對稱式密碼系統快1000倍。」因此,為了解決金鑰管理和運算量的問題,通常會使用對稱式與非對稱式所組合成的混合式加密機制。另外,在非對稱式密碼系統的標準中,沒有明確規範金鑰長度。

參考資料: 黃明祥、林詠章著,資訊與網路安全概論(第二版):建構安全的電子商務系統,台北市:麥格羅希爾,2007。

###

2015年8月7日 星期五

Agile, Lean, Kanban 敏捷, 精實, 看板

這篇記錄軟體開發方法的一些原則

敏捷軟體開發 (Agile Software Development)

敏捷軟體開發的 4 大價值觀 (values)
  • 個人與互動 重於 流程與工具
    Individuals and interactions over processes and tools
  • 可用的軟體 重於 詳盡的文件
    Working software over comprehensive documentation
  • 與客戶合作 重於 合約協商
    Customer collaboration over contract negotiation
  • 回應變化 重於 遵循計劃
    Responding to change over following a plan
敏捷軟體的 12 個原則 (principles)
  1. 我們最優先的任務,是透過及早並持績地交付有價值的軟體來滿足客戶需求。
    Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
  2. 竭誠歡迎改變需求,甚至已處開發後期亦然。敏捷流程掌控變更,以維護客戶的競爭優勢。
    Welcome changing requirements, even late in development. Agile processes harness change for  the customer's competitive advantage.
  3. 經常交付可用的軟體,頻率可以從數週到數個月,以較短時間間隔為佳。
    Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
  4. 業務人員與開發者必須在專案全程中天天一起工作。
    Business people and developers must work together daily throughout the project.
  5. 以積極的個人來建構專案,給予他們所需的環境與支援,並信任他們可以完成工作。
    Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
  6. 面對面的溝通是傳遞資訊給開發團隊及團隊成員之間效率最高且效果最佳的方法。
    The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
  7. 可用的軟體是最主要的進度量測方法。
    Working software is the primary measure of progress.
  8. 敏捷程序提倡可持續的開發。贊助者、開發者及使用者應當能不斷地維持穩定的步調。
    Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
  9. 持續追求優越的技術與優良的設計,以強化敏捷性。
    Continuous attention to technical excellence and good design enhances agility.
  10. 精簡──或最大化未完成工作量之技藝──是不可或缺的。
    Simplicity--the art of maximizing the amount of work not done--is essential.
  11. 最佳的架構、需求與設計皆來自於能自我組織的團隊。
    The best architectures, requirements, and designs emerge from self-organizing teams.
  12. 團隊定期自省如何更有效率,並據之適當地調整與修正自己的行為。
    At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

精實軟體開發 (Lean Software Development)

精實軟體開發的 7 大原則,源自於 Mary Poppendieck & Tom Poppendieck 在 2003 年出版的著作:Lean Software Development: An Agile Toolkit
  1. 消除浪費 (Eliminate waste)
  2. 增強學習 (Amplify learning)
  3. 盡量延遲決策 (Decide as late as possible)
  4. 盡快交付 (Deliver as fast as possible)
  5. 授權團隊 (Empower the team)
  6. 嵌入完整性 (Build integrity in)
  7. 著眼整體 (See the whole)

看板方法 (Kanban Method)

看板方法是由 David J. Anderson 在 2005 年所創造的流程控制方法。

看板方法的 4 個基本原則 (foundational principles)
  1. 從既有的流程開始
    Start with existing process
  2. 同意持續增量、漸進的變化
    Agree to pursue incremental evolutionary change
  3. 尊重當前的流程、角色、職責和頭銜
    Respect the current process, roles, responsibilities and titles
  4. 鼓勵各層級的領導行為
    Leadership at all levels
看板方法的 6 個實務 (core practices)
  1. 步驟1:視覺化
    Visualize
  2. 步驟2:限制半成品 (WIP) 數量
    Limit Work-In-Progress
  3. 步驟3:管理工作流程
    Manage flow
  4. 策略4:讓規則明確
    Make policies explicit
  5. 策略5:落實回饋循環
    Implement feedback loops
  6. 策略6:由協作改善,經實驗演進
    Improve collaboratively, evolve experimentally using models and the scientific method

參考資料
###

2014年12月28日 星期日

Wisdom and Teachings

記錄一些原則與智慧,取自『柯維經典語錄』一書。

責任心 (Accountability)
  • 沒有任何事情比許下承諾卻無法遵守,更快破壞彼此的信任。相反地,沒有任何事情比信守承諾更能夠建立信任。
  • 想要改善任何情況,你必須先改善自己。想要改變你的妻子,你必須先改變自己。想改變你丈夫的態度,你必須先改變自身的態度。想贏得更多的自由,你必須更有責任心、更加自律。
平衡 (Balance)
  • 關鍵不在於排出你行程表上的優先順序,而在於規劃出你人生的優先順序。
選擇 (Choice)
  • 每個人都有四種與生俱來的天賦,自我察覺、良知、獨立意志和創造力。他們賦予人類無限的自由:選擇、回應,以及改變的力量。
  • 真正傷害我們的並不是事件本身,是我們對於該事件的反應傷害了我們。
  • 人類最大的自由在於我們有權、也有能力決定要如何讓其他人,或每件事情影響我們。
  • 你所處的環境是由你的想法、你的信念、你的理想、你的人生觀所形塑出來的;只要你的想法、信念、理想、人生觀沒有改變,你的環境就不會改變。
貢獻 (Contribution)
  • 我們每個人的內心深處,都嚮往偉大且有貢獻的人生 — 真正有意義、且有所作為的非凡人生。在家裡、在職場上,以及在社會裡,我們可以有自覺地選擇遠離平庸的生活,活出偉大的人生。
  • 這世上有成功者,也有貢獻者。許多成功者也會貢獻,但他們大多只是準備要付出,卻未真的貢獻。你們應該把貢獻當做今生的使命。
勇氣 (Courage)
  • 人生最大的風險在於不敢承擔一絲風險。
效能 (Effectiveness)
  • 再多更好的建議,若沒有解決真正的問題,都只是空談而已,一點用處也沒有。
  • 忙碌不等於高效能:有的人雖然忙翻天,效率卻不高。
同理心 (Empathy)
  • 要影響別人,關鍵在於懂得感同身受。
  • 如果要我用一句話總結人際關係最重要的原則,那麼根據我多年的觀察,我會這麼說:若想別人了解你,請先了解別人。
  • 你愈深入了解別人,你會愈欣賞他們,你也會愈發敬重他們。跟別人的靈魂接觸,形同行走在聖殿當中。
  • 話語就像是高處丟下的雞蛋:一旦丟出,你無法叫他們回頭;對於他們落地後造成的髒亂,你也無法視而不見。
真誠正直 (Integrity)
  • 不要替別人的短處辯白,也不要為自己的缺點辯護。當你犯了錯,就承認它、修正它、並從中學到教訓 — 立刻去做!
  • 解決問題不能光說不練,你必須走進問題核心去解決它。
領導力 (Leadership)
  • 有效的領導是要事優先處理。有效的管理則是紀律至上,而且要確實執行。
  • 在工業時代,領導是個職位。在知識時代,領導是種選擇。
學習 (Learning)
  • 知道了卻不去做,跟不知道沒有兩樣。
愛 (Love)
  • 從你對一個人的態度,可以看出你是怎麼對待其他人的,因為所有人都是一個整體。
  • 人與人之間的關係裡,沒有不重要的小事,全都是大事。
潛能 (Potential)
  • 人有自我察覺的能力:有了這樣的自覺,我們才能在心裡跳脫自我,從旁檢視自身的信念以及行動,去思考自己究竟思考的是什麼。
自律 (Self-Discipline)
  • 大多數人會把紀律與不自由劃上等號,但事實上恰好相反:堅持紀律的人才是真正自由的人,不守紀律的人則會淪為情緒、慾望與激情的奴隸。
綜合統效 (Synergy)
  • 如果兩人看法相同,其中一人必屬多餘。
  • 綜合統效跟妥協不一樣,在妥協裡,一加一頂多只等於一個半。
信任 (Trust)
  • 想要別人信任你,首先做個值得信任的人。
真理 (Truth)
  • 我們看待問題的方式,本身就是一大問題。
  • 原則與實務不同;實務只適用於特定情況,但原則卻是更深層、更根本的真理,它通用於各種情況。
願景 (Vision)
  • 一個人的本性,決定了他看待事物的角度。
  • 工作本身不會有未來,未來只存在你自己的身上。
  • 要想有效改變自己,我們首先必須改變自己的看法。
雙贏 (Win-Win)
  • 或許在真正懂得分享之前,我們需要先經歷擁有的感覺。
  • 為自己著想,但不忘他人的權益。

資料來源:
史蒂夫.柯維(Stephen R. Covey)著,胡琦君譯,柯維經典語錄:18個關鍵原則,創造成功人生,台北:遠見天下文化,2013。譯自:The wisdom and teachings of Stephen R. Covey

###

2014年10月29日 星期三

Zero to One

如果你想用創業去改變未來,那你一定要看彼得‧提爾 (Peter Thiel) 的「從0到1:打開世界運作的未知祕密,在意想不到之處發現價值」。彼得是 PayPal 的創辦人,現在是矽谷創投公司創辦人基金 (Founder Fund) 的合夥人,這本書源自於彼得在史丹佛大學開設的創業課程,他的學生布雷克‧馬斯特 (Blake Masters) 做了詳盡的筆記後廣為流傳,後來兩人合作改寫成「從 0 到 1 」出版,這本書主要談的就是:如何建立一個可以創新的公司


創新是一種進步,作者在第一章提到進步有兩種型式:
  • 垂直或密集式的進步 (vertical or intensive progress)
    開發新的事物,這是從 0 到 1 的進步,例如科技 (technology) 的發展。
  • 水平或延伸式的進步 (horizontal or extensive progress)
    複製已經成功的事物,這是從 1 到 n 的進步,例如全球化 (globalization) 的發展。
這本書談的創新是「從 0 到 1 」這種形式的進步,那我們要如何建立一個可以「創新」的公司呢?作者要我們先從這個問題開始回答:
有什麼是你跟其他人有不同看法,但是你覺得很重要的事實?
創業家從 1999 年的網路泡沫中得到教訓,但作者的看法則有不同,如下:
  1. 循序漸進,但大膽冒險比無聊瑣碎好
  2. 保持精簡有彈性,但壞計畫比沒計畫好
  3. 面對競爭求取進步,但競爭市場賺不到錢,要成為獨占市場的企業
  4. 專注在產品,而非專注銷售。但銷售與競爭一樣重要,不同產品需要不同的銷售方法
大致上整本書圍繞著上述幾個觀點,作者分享他的看法,說明如何建立一個可以創新的公司。如推薦所言:「當一個有冒險精神的人願意寫書,就買來看。如果寫書的是彼得‧提爾,就看兩遍。但是保險起見,請看三遍。因為這本書絕對是經典之作。」確實如此!

彼得‧提爾 (Peter Thiel)、布雷克‧馬斯特 (Blake Masters),季晶晶譯,從0到1:打開世界運作的未知祕密,在意想不到之處發現價值,台北:天下雜誌,2014。
譯自:Zero to One: Notes on Startups, or How to Build the Future

###

2014年10月14日 星期二

Project Management 專案管理

什麼是專案?

專案 (Project) 是在一次性的工作中,必須同時完成成效 (performance)時間 (time)成本 (cost)範疇 (scope) 的多重任務要求,簡稱為 PCTS。換句話說,一個專案必須有特定的成效,有明確的開始和結束時間,有預算,也有明確規範工作的大小。另外,品管學者約瑟夫.朱蘭(Joseph M. Juran) 說:「專案是為了解決問題所排定的進度表。」這是更簡單的解釋。

什麼是專案管理?

為了完成專案的目標,將所有計劃、進度與管控的行動無瑕的結合運作 (facilitate),這就是專案管理。專案管理的首要原則:一定要讓未來會牽涉到專案實際作業的人,共同參與專案計畫的工作。專案管理不同於一般的管理,在於專案的 PCTS 任務特性,例如一般事務性的工作內容,就沒有這些特性。

一個專案中的角色成員

  • 專案經理 (Project Manager)
    專案的啟動者 (Enabler),領導並且協助團隊成員順利完成他們所負責的工作。
  • 團隊成員 (Team Members)
    實際執行工作的人員,負責完成專案所訂定的目標。
  • 成員可能是組織中可用的人才 (不見得是適合的人才),因專案的需要才加入團隊中,也可能專案結束後就離開此團隊。
  • 贊助者 (Sponsor)
    指定 PCTS 中的任意 3 個限制條件。另外一個條件是由專案經理所計劃與管理。

專案的生命週期

  1. 概念
    市場概念形成,競爭力調查
  2. 定義
    定義問題,產生願景,擬定專案任務大綱
  3. 計畫
    發展策略,實行計畫,風險管理
  4. 執行
    逐項完成工作,監控過程,修正錯誤
  5. 結案
    結論報告,檢討回顧

參考資料
詹姆斯.路易斯 (James P. Lewis)著,葛迺駿譯,我懂了!專案管理,台北:經濟新潮社,2003。

註:「迺」讀「ㄋㄞˇ」
###

2014年10月6日 星期一

AngularJS

AngularJS 是一個用於動態網頁應用程式 (dynamic web apps) 的結構框架 (structural framework),AngularJS 的特點在於強化 HTML 本身的功能,讓我們利用 HTML 的語法就能建立一個動態的網頁應用程式。之所以稱為「Angular」是源於 HTML 的「角括號的尖角」,AngularJS 有 HTML 延伸的意涵在裡面。換句話說,如果想要學習 AngularJS 這個框架,必須對於 HTML 有基本的認識。

HTML 是一種專門描述靜態文件的宣告式語言 (declarative language),HTML告訴瀏覽器該做什麼,但沒辦法說明該如何執行功能,本質上不能使用 HTML 建立動態網頁應用程式。意思是說,靜態文件與動態網頁應用程式之間存在著「阻抗不匹配 (impedance mismatch)」的問題。

有兩種方式解決阻抗不匹配的問題:
  • 程式庫 (library)
    程式庫包含很多開發應用程式需要的函式,呼叫這些函式實現我們需要的功能,例如 jQuery 就是其中的一種。
  • 框架 (framework)
    針對某種應用情境設計的程式架構,我們需要在架構中填入程式碼以實現功能,例如 durandal, ember 等。
然而 AngularJS 選擇另一種不同的解決方法,AngularJS 增強 HTML 的語法,使用 JavaScript 開發 HTML 編譯器,讓瀏覽器能夠解析這些新的語法,AngularJS 稱為指令 (directive)

AngularJS 所採取的是宣告式語言這一條路,因此在 AngularJS 的學習上,使用指令會比撰寫 JavaScript 還要來的重要,大部分都是在編輯 HTML 檔案 (也就是使用 directive)。這也和其他用戶端的框架不太一樣,像是 ember, Ext JS 等,因為這類框架採取的是命令式語言 (imperative language) 這一條路 ,開發上主要是撰寫 JavaScript。

前面提到框架是針對某種應用情境設計的程式架構,AngularJS 的設計主要是針對資料類型的開發,也就是 CRUD (create, read, update and delete) 的應用程式。遊戲與 GUI 操作的應用程式就不太適合使用 AngularJS 了, CRUD 應用類型是 AngularJS 的強項

目前 (2014/10) 沒有關於 AngularJS 的中文書籍,對於國內推廣 AngularJS 會有些困難。學習上大多是英文網站的資訊,這裡推薦W3Schools 的 AngularJS Tutorial ,頗為簡要而易懂,其他資源則請參考 AngularJS 官方網站:
上述內容參考自 Developer Guide / Introduction
###

2014年9月20日 星期六

Black Tea 品味紅茶

最近研究了一下紅茶,在此分享有關紅茶的知識。

紅茶茶葉原產於中國,但卻是英國塑造了紅茶文化,紅茶變成茶的主流,甚至是茶的代名詞。英國人稱紅茶為「Black Tea」是因為紅茶茶葉是黑色的緣故,而我們東方稱為紅茶是因為紅茶茶湯色澤呈現紅褐色的緣故。

奶茶:紅茶加牛奶,或是牛奶加紅茶,這是經濟上的考量,有兩種說法。過去茶葉是奢侈品,為了能夠多喝幾杯,於是加入較便宜的牛奶。另一種說法則是有段時間牛奶供不應求,如果添加紅茶在牛奶之中,就能夠減少牛奶的使用量。不論何者真實,奶茶確實是好喝的飲品之一!

茶葉以產地聞名,也通常以產地命名。全世界公認的紅茶生產地有三個國家:印度、錫蘭與中國,其出產的紅茶如下:
  • 印度,產地位於印度東北部
    • 阿薩姆省 (Assam),稱為阿薩姆紅茶
    • 西孟加拉省 (West Bengal) 的大吉嶺 (Darjeeling),稱為大吉嶺紅茶
  • 斯里蘭卡 (Sri Lanka),統稱為錫蘭紅茶 (Ceylon Tea)。
    • 烏沃省 (Uva)
    • 努沃勒埃利耶區 (Nuwara Eliya)
    • 汀普拉村 (Dimbula)
  • 中國
    • 安徽省祁門縣,出產的紅茶稱為「祁紅」。(祁:讀作ㄑ一 ˊ)
除了上述三個國家外,生產紅茶比較著名國家的還有肯亞、爪哇、台灣。


接下來介紹紅茶的等級 (Grade),所謂的等級和品質無關,純粹只是區分茶葉的大小和生長部位。為什麼要分級呢?因為與泡茶的時間有關,越大片的茶葉沖泡的時間越長。紅茶的等級如下,依照茶葉生長位置由上而下(葉片由小至大):
  • 花橙黃白毫 (Flowery Orange Pekoe, 簡稱 FOP)
  • 橙黃白毫 (Orange Pekoe, 簡稱 OP)
  • 白毫 (Pekoe, 簡稱 P)
  • 白毫小種 (Pekoe Souchong, 簡稱 PS)
  • 小種 (Souchong, 簡稱 S)
若依茶葉的完整性,有沒有切碎處理,可以分為下列 3 種:
  • 全葉茶 (Leaf, 沒有簡稱),或稱葉茶。
  • 碎茶 (Broken, 簡稱 B),或稱散茶。沖泡時間較全葉茶短。
  • 粉茶 (Dust, 簡稱 D),或稱末茶。沖泡時間最短,分級過程中剩下的細粉狀茶葉,通常也最廉價。
了解產地與分級,最後介紹紅茶的調和變化,這大概是紅茶比較特別的地方。從產地出來是怎樣就是怎樣的紅茶,稱為原味茶,或稱產地茶。而調和兩種以上的原味茶,則稱為混合茶。若是在原味紅茶製作過程加入其他果香味,則是加味茶。以下是這些變化中較知名的紅茶清單:
  • 原味茶 (Plain Tea)
    • 阿薩姆 (Assam Tea)
    • 大吉嶺 (Darjeeling Tea)
  • 混合茶 (Blended Tea)
    • 英國早餐茶 (English Breakfast Tea),混合印度、錫蘭或肯亞的產地茶調配而成的紅茶。
    • 英國下午茶 (English Afternoon Tea),混合印度及非洲的產地茶調和而成的紅茶。
  • 加味茶 (Flavoured Tea)
    • 伯爵茶 (Earl Grey Tea),在中國的英國外交使節格雷 (Earl Grey) 伯爵將中國茶葉調製的祕方帶回給傑克森 (Jacksons) 公司而聞名,主要是紅茶調和品味紅茶的香氣而醞釀的獨特風味。
    • 仕女伯爵紅茶 (Lady Grey Tea),紅茶加橘皮、檸檬皮和矢車菊葉所調製的。
    • 薄荷紅茶
參考書籍
孟樊,寫意紅茶:在杯中、書中、影中品味紅茶,臺北:時報文化,2007。

###

熱門文章