2008年12月30日 星期二

UML概念說明


UML概念說明


初學UML的人可能只是把UML當作是單純的繪圖表示法 ,
以為UML就是放上Use Case Diagram , Class Diagram , Sequence Diagram就是UML了 ,....

錯 , ....UML會跟你的方法論有關 , 會跟你的開發程序有關 ,
但是常常還是有人會誤以為UML只是繪圖表示法 ,

所以當你要求外包商 , 要針對他們正在開發的系統去繪製UML產出時 , 常常看到的是 上帝的歸上帝 ,
嗯 ,  說錯 , 是UML文件歸UML文件 , 系統程式歸系統程式 , 兩者完全沒有關聯性 , 純粹只是為了文件而文件 , 這樣的狀況是最糟糕的 , 但是偏偏這種方式卻常常有不少人能夠接受 , 讓我完全無法理解 ,

基本概念一: UML就是系統的藍圖 , 系統的開發應該是根據規劃的藍圖去實做
這麼說好了 , UML , 你可以把它想像是房子的藍圖 , 房子的所有規劃 , 包含電線管路要怎麼拉 , 怎麼走 , 污水管理怎麼走 , 電梯要裝幾個 , 逃生梯開在房子的左邊或是房子的右邊 , 戶與戶之間的大門是向內開還是向外開(之前 , 有大陸的新聞說 , 有棟房子 , 住戶與住戶的大門是向外開的 , 所以 住戶A開了大門就會堵住住戶B的大門 ...) ,
那你可以想像說 , 明明是電梯大廈的藍圖 , 結果蓋出 18樓沒有電梯的房子嗎? ,
如果你能接受房子的實體應該是根據房子的藍圖蓋出來的 ,
那你怎會能接受 做出來的系統程式完全不根據藍圖(UML)去開發???

 基本概念二: UML 的每個Diagram 是有關聯性 , 有可追蹤性的
舉例來說 , Use Case Diagram 談的是User Requirement的蒐集 ,
也就是說你在圖上畫的每個Use Case , 它都應該會被實現(Use Case Realization) , 而每個Use Case Realization 都會被轉化為 SA , (產生 Boundary , Control , Entity) , 再由此衍生出相關的SD , 而產生出 對應的Class , Class Diagram , Sequence Diagram , 等等 ,

這其中就衍生出可追蹤性(traceability) , 照道理來說 , 你可以正向由來源去追蹤每個項目的下一個產生是甚麼 ,
就舉 Use Case  來說 , 如果你的系統有畫了 10 個 Use Case , 那麼你可以看一下每個Use Case 是否有被實做 , 這個Use Case 實做的衍生物是哪些 , 一路追下去 , 保證你絕對不會短缺有任何該做的功能被遺漏沒有實現....(反向也是如此 , 你隨便挑出一個Class , 它一定是某個或某幾個use case實做必須的衍生物 , 絕對不會有那種無中生有的Class , 除非那是垃圾Class或是雞肋Class )

但是 , 一般人員很少有這樣的認知 , 多半是為了交文件而文件...

基本概念三: 是不是一定要畫UML才能開始作系統

這點我的答案是看狀況而定 , 如果你的系統很小 , 然後你也都明確的了解使用者的需求 , 然後要開發的功能與平台都十分明確 , 你也已經評估過程式碼不多 , 甚至你都不打算拆出系統階層 ,或是類別 ,
那根本就不需要UML的介入 ,

還有你是那種做到哪裡才想到哪裡的 , 也不需要 , 因為當你不作規劃 , 那UML對你也沒有幫助...


因為UML的開端就是 Use Case Diagram , 藉由 Use Case 去蒐集與釐清使用者的需求 , 系統的邊界 ,
有哪些系統外部的人或系統(這個就是Actor)會與我們的系統有互動 ,  而那些Use Case 就是我們的系統會對外提供的服務(功能) , 也是我們的系統實做的清單 ,....

我看過廠商畫了 某些Actor , 我問廠商說 , XXX Actor , 它會跟我們的系統有互動嗎? , 如果 XXX Actor 是人 , 那他會登入我們的系統嗎? , 如果 XXX Actor 是另一個系統 , 那麼它跟我們的系統之間是如何溝通互動的....
廠商答不出來 , 因為他根本只是隨便亂畫 , 為了交文件而文件 ,

審閱這些為了交文件而文件 , 連寫文件的人自己都說不出個道理的文件 , 實在是浪費人生...

基本概念四:UML是否一定要畫的巨細靡遺?
我的答案是看你的開發模式是哪一種 ,  或者說你是奉行或是採行哪一種方法論 ,


像如果你是採行MDA的開發模式 , 則UML Model 一定要畫的清清楚楚 ,
因為你的Model 就是要產生的系統程式碼的原始規格 ,
不過 MDA 一般也都會搭配類似程式碼產生器的工具 ,
舉例來說 , 像是 Eclipse 之下的 EMF , GEF , GMF 就是你先規劃好不同物件之間的關係 , 關聯 , 限制等等 . 就可透過工具轉換模型變成可執行的程式碼 , 所以有些類型繪圖工具 , 你只要詳細的設定好 Model , 幾乎就可以透過工具完成80%以上的工作 , 讓要寫的程式減少 ,

但是也有人堅持 , UML 只是單純的繪圖表示法 , 只要挑重點畫就可以 ,
這樣也不是不行 , 前提是: 你必須要了解你的系統的全貌 , 每個類別間的關係.. , ...之類的
另外要交接時 , 也可能會因為你畫的十分簡略 , 所以你會有很多東西不在UML圖形中  ,

如果你接手前人這樣的遺產時 , 當你要接手維護時 , 你想要知道某某Class有沒有XX功能 , 或是你想要換掉它 , 但是你又無法從前人留給你的UML中 , 看出端倪時 , 那你只好自求多福 , 或是拜託前人還在公司沒有離職可以讓你問....

或者是當幾年前你開發的系統 , 後續的系統維護者有問題需要詢問你的時候 , 最好是你的記憶好到可以記得 n 年你實做的系統明細....

突然發現又在離題 ...

預計要寫的文章清單


預計要寫的文章清單


在目前的這個部落格中 , 我的每一篇文章都是自己寫出來的 ,
每一篇都是自己的心得或是練習 ,
或者是針對某一個主題 ,
網路上沒有一篇文章可以簡單說明 , 而必須要四處搜尋參考不同文章來源的 , 那也是我撰寫的主題範圍...
(如果有相同題材 , 別人寫的比自己完整 , 比自己豐富 , 那我應該就不會寫了...)

反正想到了 , 就寫一寫 , ( 就是寫的不好 , 才要練習 )...

預計要寫的文章清單:(暫時想到的 , 不過要寫教學 , 要想情境 , 要操作 , 要抓圖 , ...有點懶)

1.GnuCash (Ubuntu) - 個人財務紀錄(記帳軟體) -- 目前已經紀錄幾個月了 , 記出一點使用心得了...
2.編碼 , 字碼 , 字集 觀念說明

Mediawiki 的導覽列設定位址


Mediawiki 的導覽列設定位址


這是一篇小記事


在我當初開始安裝 Mediawiki 在本機之後 , 我第一個想要做的就是 , 弄出一個 Menu在左方(就像在外面的Wiki 看到的一般...) , 有一陣子到處亂試 , 結果才發現

Mediawiki 的導覽列設定位址 會在你本機安裝的以下網址
http://localhost/wiki/index.php/MediaWiki:Sidebar

(要登入為 WikiSysop 帳號 , 或是有同等權限的 , 才能編輯修改)

2008年12月27日 星期六

VMWARE SERVER 2.0的討人厭的預設讀取目錄

VMWARE SERVER 2.0的討人厭的預設讀取目錄


VMWARE SERVER 2.0 在UBUNTU上預設會去讀取"/var/lib/vmware/Virtual Machines" 之下的目錄內容 ,
也就是說 , 如果你有要新增 VM 或是 新增虛擬硬碟(.vmdk)

都要放在這個位置之下 , ....

但是我不習慣放在此 ,   我習慣把每個 VM 拆開目錄分開放
而且是放在自己的USER目錄下 ,....

後來發現一個 Linux 中手應該都要會的作法 , 就是設定軟連結 ,
把自己的VM目錄設定連結 , 對應到"/var/lib/vmware/Virtual Machines"

ln -s "/home/demo/vmware/myVM" "/var/lib/vmware/Virtual Machines/myVM"

"/home/demo/vmware/myVM" 指的是你的VM相關檔案放的真實目錄請把 demo 換成是你自己的帳號 , 我是在自己的帳號目錄下 , 把不同的VM目錄集中放到 vmware的目錄下

"/var/lib/vmware/Virtual Machines/myVM" 是軟連結的所在

就這樣的設定, 讓我可以直接在我自己的目錄下 對VM目錄檔案作搬移
但是又可以讓我在VMWARE SERVER 2.0的介面下可以抓的到VM的目錄新增虛擬硬碟檔案

在UBUNTU存取USB隨身碟不正常動作問題處理

在UBUNTU存取USB隨身碟不正常動作問題處理

因為某些需要所以會透過USB隨身碟從 Windows上複製檔案, 
然後再透過 UBUNTU去讀取USB隨身碟

這幾天碰到一個狀況就是 ,
USB 隨身碟插入後開始搬移檔案不久 , UBUNTU 就出現檔案存取錯誤的問題
然後檔案上得圖示加上"鎖"的圖示 ,

查了許久 , 只好 USB隨身碟 插 回 Windows ,
去對整個USB隨身碟作硬碟的錯誤掃描跟修復 , 修完了就OK了 ,

根 據先前把UBUNTU裝在這款USB隨身碟的推論應該是:
這款USB隨身碟  沒有辦法支援同時開兩個檔案的存取作業 , 所以導致錯誤發生....

因為之前也有把UBUNTU裝在這隻USB隨身碟上過 , 用了好一陣子 ,
但是也 是因為同時開多個檔案存取動作 , 導致 USB隨身碟上的UBUNTU就起不來了...   

2008年12月24日 星期三

VMWARE - 無法透過網路分享存取 Guest OS Machine 的共享目錄 或是 ping 不到的原因

VMWARE - 無法透過網路分享存取 Guest OS Machine 的共享目錄 或是 ping 不到的原因

如果你有安裝 VMWARE 在 UBUNTU 上 ,
當你發現你的 Guest OS (就是你的虛擬機器)有開共享 , 但是從 Host OS(就是你的實體電腦)
無法存取網路分享或是從 Host OS(就是你的實體電腦)  ping Guest OS 不到時 ,

首先請確認一下 , 你的 Firewall 是否在啟動狀態 , 如果是 , 請暫時性的停止 Firewall ,
(a)然後重新試著從 Host OS(就是你的實體電腦)  ping Guest OS  ,  看看是否就可 Ping的到了
(b)從 Host OS(就是你的實體電腦) 去存取 Guest OS裡面的共享目錄 , 如果可以存取的到 ,

那 就可以肯定是因為 Firewall 擋掉了 Host OS & Guest OS之間的PING & 網路共享
接著就請調整 你自己的 Firewall , 允許這兩者的存取

2008年12月21日 星期日

專案管理-在沒有把你的 hard skill 拿出來好好用之前 , 不要談甚麼 soft skill

不曉得 , 是我對品質太要求還是怎樣?
常常碰到一些令人會爆火的專案 ,

談到專案管理 , 大家都會說專案管理有 Hard Skill & Soft Skill ,
常常有人會提到 Soft Skill 很重要 ,  然後就會說 某某的脾氣太硬或是溝通技巧不好等等不適合當PM ,
就我個人來看 , 當專案的PM沒有好好的做好Hard Skiil 應該做的事情之前 , 老是在提 Soft Skill 根本就是個笑話 ....

有沒有看過 , 廠商的 PM 沒有好好做好 PM的 Hard Skill 該做的事 , 然後專案一直delay 一直沒有有效的產出 , 然後 廠商的 PM 就來每次道歉說好話的 , 如果這個就是當PM的 Soft Skill ,
那我會說這樣的專案 PM 不要也罷...

偏偏國內還有不少主管看不清這種狀況的  ,  老把 Soft Skill 當作是遴選 PM的第一優先條件 ,
拜託 , 基本的事情做好了 , 才能來談 Soft Skill ,

看過專案的Review Meeting , 兩個月的會議內容跟兩個月前的會議內容沒有甚麼不同的 ,
就是
(a)Dealy , Delay , Dealy , 
(b)有沒有甚麼有效產出?  沒有
(c)怎麼樣才能趕上進度? 怎樣才能做出有效產出? 沒有

然後呢?  一直要來談所謂的 Soft Skill 嗎?
可以把問題解決嗎? 不行,...

所以在沒有把你的 hard skill 拿出來好好用之前 , 不要談甚麼 soft skill

我看過廠商的PM , 連自己的專案組織都沒有 , 還是我用問的 , 一個一個把廠商的成員 , 全部寫下來, 包含廠商的專案組織成員 , 角色 , 角色的職責工作等等 , 都是我用問的 , 廠商的PM在我問之前 , 完全沒有把這樣的文件內容寫下來 ,...

在我問完這些東西之後 ,
我馬上就可以100%的確認廠商的進度一定會200%的延誤 , 因為廠商的人力嚴重不足 , 甚至還有許多工作是沒有被任何角色所負責的, 簡單的說 , 就是有工作要作 , 但是掉在地上沒人作 ,
像這些 , 明明都是透過 Hard Skill 就可以去完成的事 , 但是呢 , 廠商的PM看起來就是很忙 , 然後在瞎忙...

這些你用Soft Skill 可以把事情作好嗎?

再說廠商的PM到目前為止 , 仍然在搞不清楚狀況 , 仍然在為了文件而文件....
拜託 , 我已經強調過 N次的 , 不要為了文件而文件 , 廠商仍然在搞不清楚狀況 , 這也是為什麼我不要求廠商PM去把專案組織文件交給我的原因 , 我情願自己去問 , 自己去寫 , 因為他們根本就是搞不清楚狀況...

這 也是到目前為止 , 我看到有不少專案共通的問題 , 很多主管都以為 PM一定要有的 , 就是好的溝通技巧 , 好的Soft Skill , 反而把最基礎 , 也是最重要的 Hard Skill 放在最後不管 , 但是當專案嚴重誤時 , 嚴重超出成本 , 品質嚴重有問題時 , 這些都是因為 PM沒有好好落實基本工作所導致 , 基礎沒做好之前 , 不要老是假裝沒事 , 不要老是假裝請大家吃飯 , 喝飲料就可以把事情做好...


備註:
我不是說 "溝通" 不重要 ,
在PM的相關課程或是教材中會談到 , 溝通 , PM需要準備"必要的材料"(文件 & 專案進行相關資訊 & 狀態)與其他利害關係人溝通或是說明 ,

(a)但是如果像廠商的PM ,上上週專案進度 , 上週專案進度 , 甚至到本週專案進度都是掛 0 ,  請問廠商的PM是要去客戶溝通甚麼?
(b) 如果像廠商的PM完全不把必要的文件準備好 , 常常空口說白話 , 只帶一張嘴 , 完全沒有準備 , 沒有承諾 , 永遠雜亂無章 , 廠商的專案成員沒有人知道自己負責甚麼角色 , 沒有人知道自己該做甚麼工作, 請問這樣是要跟客戶"溝通"甚麼?

如果沒有沒有準備  , 沒有進度 , 沒有產出 ,  談甚麼"溝通" 都是空的 , 沒有用處..

2008年12月13日 星期六

Open Type Font 轉 True Type Font


Open Type Font 轉 True Type Font

2008/12/13 12:57
Open Type Font 轉 True Type Font
(OTF 轉 TTF)

以下要說明的是轉換字型把 OTF 轉 TTF

在UBUNTU上完全不用花錢去買軟體 , 因為上面幾乎都有了
(Windows 平台上也有可以轉 Open Type 字型為True Type 字型的工具 , 但是要錢...)

(1)首先你需要安裝 fontforge 這個軟體
用套件管理員安裝 或是下指令 "sudo apt-get install fontforge"
去安裝

(2)建立一個 otf2ttf.sh 的檔案 , 記得屬性要改成可執行
===REF FROM http://www.stuermer.ch/blog/convert-otf-to-ttf-font-on-ubuntu.html===
#!/usr/local/bin/fontforge
# Quick and dirty hack: converts a font to truetype (.ttf)
Print("Opening "+$1);
Open($1);
Print("Saving "+$1:r+".ttf");
Generate($1:r+".ttf");
Quit(0);
===REF FROM http://www.stuermer.ch/blog/convert-otf-to-ttf-font-on-ubuntu.html===



(3)執行指令去產生 TTF檔
===REF FROM http://www.stuermer.ch/blog/convert-otf-to-ttf-font-on-ubuntu.html===
fontforge -script otf2ttf.sh youFONTNAME.otf
===REF FROM http://www.stuermer.ch/blog/convert-otf-to-ttf-font-on-ubuntu.html===

重要注意事項:
(2) , (3) 的內容 , 我是在以下連結找到的 , 為了尊重別人的智慧 原文連結在此 請大家連過去看
http://www.stuermer.ch/blog/convert-otf-to-ttf-font-on-ubuntu.html

2008年12月3日 星期三

專案開發 寓言故事_01_實做能力很強的廠商

專案開發 寓言故事_01_實做能力很強的廠商

有一家廠商號稱實做能力很強 , 你要甚麼車都能作給你

有一個客 戶聽到 , 哇 , 實做能力這麼強 ,

就找了這家廠商要訂做客製化的車子 ,

沒想到 , 契約簽完後 ,

客 戶想要的 19人座的巴士車體 , 餐車般的內裝 , 還要能夠配備會議廳的相關設備 統統不會有....

廠商的人不斷說他們的實做方式 有多厲害 ,

但是廠商完全沒有跟客戶好好訪談過客戶的需要 ,

甚至於還要客戶配合廠商做出來的怪東西 ( 一台拖板車 , 上面釘了 10 張椅子 , 冷風吹來 , 雨水潑下 )

然後說是客戶不懂 , 廠商一直在強調他們的拖板車有多可靠 , 有多彈性 ,

完 全不理會客戶要甚麼



寓意:
當一家幫你作東西的廠商完全沒有理會你的需要時 ,
只是在要求你要配合他們的 結果時 ,
這家廠商的能力有多強都是虎爛的

<如果要我配合廠商的東西 , 那我去找套裝軟體就好了 , 更便宜 , 更穩定,  何必訂做...>

VMWARE Server 2.0 起不來的暫時解決方案

VMWARE Server 2.0 起不來的暫時解決方案

VMWARE Server 2.0 起不來的暫時解決方案

最近發生過兩次 VMWARE Server 2.0 起不來的狀況
真 正原因不明 ,
不過都是發生在 Ubuntu Update 完某些套件之後


暫時的解決方案是
開啟終端機輸入以 下指令

sudo /usr/bin/vmware-config.pl

去重新讓系統配置跟編譯VMWARE
之後 就能啟動了
(我的UBUNTU 是 8.04 , 有固定更新)

[暫時沒有上到 UBUNTU 8.10的計畫 , 因為目前的 UBUNTU 8.04 用的還算蠻穩定的...]