2009年11月25日 星期三

Chrome OS 輸入中文

Chrome OS 輸入中文

因為 Chrome OS 沒有內建中文輸入法 ,

所以使用 Chrome Browser 要在 Web 上輸入中文時 ,


可以使用這個網頁來輸入中文 (支援注音 , 上面雖然說只支援 Firefox , 但是 Chrome Browser 也支援 )
http://people.linux.org.tw/~pofeng/ov-webime/zhuyin-kb.html

使用 Ctrl 鍵切換輸入法狀態 , 其他的都跟使用注音輸入法一樣

2009年11月15日 星期日

OpenProj 專案管理工具軟體

OpenProj 專案管理工具軟體



原始發表日期: 2008/08/10 13:22
又是一個專案管理工具軟體

介紹它 , 有幾個特色:
首先它是 Open Source  , 免費
接著據說它是用 Java 撰寫的
然後它可以直接開啟 MS Project 的專案檔( .mpp) ,這個是先前介紹過的其他專案管理工具所沒有的
既然它是使用 Java 撰寫的 , 當然就可以跨平台 , 所以它也支援 Windows , Mac , Linux

它的官方網站 : http://openproj.org/

請點選畫面右方的 OpenProj 下方的 Download 連結去下載 ,
使用 UBuntu 可以選擇   openproj_1.3-1.deb 的版本下載 ,
使用 Windows 可以選擇 openproj-1.3.msi 來下載
下載完成後直接點兩下就可以安裝

在UBuntu 安裝完成之後 , 啟動軟體的連結
應用程式->辦公->OpenProj 這樣就可以啟動軟體

可以直接開啟 MS Prjoect 的專案檔(.mpp)



以下這個範例是來自於MS Project Template 的網站
匯入後 , 看起來該有的都有




可以另存成 MS Prjoect 的 XML 匯出檔


又是一個可以讓我們在 UBuntu上脫離MS 工具掌控的好幫手....

2009年9月27日 星期日

ExtJS -實戰經驗談001- 處理 TextArea 多行資料問題

ExtJS -實戰經驗談001- 處理 TextArea 多行資料問題

(書上沒說的 , 自己有碰到的 , 並且解掉的問題 , 就順便記下來)
(太基本的 , 請自己去看書)

最近在使用 ExtJS 開發某個 Web ,
其中我使用了 TextArea , TextArea 可以輸入多行資料並且允許你按 Enter 鍵換行...

背端使用 ASP 接收 ExtJS的 Form 傳送過來的TextArea的資料 , 也成功的存入資料庫

但是要從資料庫讀取 TextArea 的資料並且轉成 JSON的資料格式傳回前端給 ExtJS處理時 ,
發現一直出現錯誤...  <怎麼知道找出錯誤的? 待續 - ExtJS -實戰經驗談002- 除錯工具 >
原因是  : 前端的 ExtJS 在處理 傳回的 JSON資料時 , 不能接受跟處理 資料內容中有包含換行符號的資料 ;


那怎麼辦?
(1)
在被端要傳回資料的 ASP 在要把資料轉成 JSON格式傳回前 ,
將資料中的換行符號( \r\n) 給取代掉 代換成


(2)
在前端接受的ExtJS 中 , 把街收到的 JSON 格式資料 ,
重新把 收到的資料中有
的重新換成 (\r\n) , 然後處理過的資料 , 重新塞值到 ExtJS 的 Form 中的
TextArea 中 , 就可以完成由資料庫中還原的動作


注意A:
(1) 只有在還原到前端的的 ExtJS 的 Form 的 Text Area 時需要代換 (
為 (\r\n))
(2) 如果是要放在 ExtJS 的Grid 中的 , 就不需要特別還原
為(\r\n)

注意B:
換行字元大不同....

如果你是使用 IE , 同樣是網頁中的 Form 的 TextArea , 如果是有多行內容的 ,
傳到背端(Server 端) , 收到的換行字元會是 \r\n

但是你是使用 FireFox , 同樣是網頁中的 Form 的 TextArea , 如果是有多行內容的 ,
傳到背端(Server 端) , 收到的換行字元會是 \r (少掉一個 \n)
所以在動作(1)作還原處理的代換動作時 , 要注意是代換 \r\n 還是代換 \r 為

軟體介紹-7-Zip-免費壓縮工具

可以取代 WinZip & WinRAR 的免費軟體
7-ZIP
下載路徑: http://sourceforge.net/projects/sevenzip/
支援以下壓縮格式:
7z, ZIP, CAB, RAR, ARJ, LZH, CHM, GZIP, BZIP2, Z, TAR, CPIO, RPM ,DEB
可以取代 WinZIP , WinRAR 等工具
有 Windows 介面可以使用 , 支援壓縮檔加密(可以設定密碼)等操作 , 也有命令模式
它本身的壓縮格式 7z 更是號稱比 zip 的壓縮率更高 , 也就是壓縮出來的檔案會更小 , 不過如果你選擇 7z 格式的話 , 別人也需要使]用 7-zip 才能解壓縮

可以試用看看

Java - LDAPBROWSER (待撰寫)

Java - LDAPBROWSER (待撰寫)

Lean Six Sigma -談MIS部門的浪費模式

Lean Six Sigma -談MIS部門的浪費模式

眾所周知的 Lean 談的是精實 , 把不必要的浪費給去除
一般來說都是以流程的精實為第一要務
但是在企業內部還有很多是屬於商務流程以外的浪費
其中以MIS部門的浪費為最 ,
特別是當企業越大時 , MIS部門的浪費可能也是最大的
以下要談的跟Lean Six Sigma 無關 , 純粹只是就 Lean 這件事來談
所以你如果是要看Lean Six Sigma 的很抱歉 , 可以離開了
但是如果你是要看 , 避免不必要的浪費的 , 可以繼續往下看

浪費模式一: 搖擺不定的軟體平台或是產品選擇
這種浪費模式 , 很常見 , 常見於一些基本但是必要的軟體產品
例如像 MS Exchange vs Domino Notes
這兩套產品是拿來做 Mail Server的基本功能 ,
但是你會發現有些公司會一下用這個 , 一下用那個...
<不相信 , 你去看看微軟或是IBM的軟體產品的使用公司的簡介中就會發現
  當然 , 因為是競爭關係 ,
所以你看的不是 Exchange 取代 Domino
就是 Domino取代 Exchange
賣產品總是這樣老王賣瓜自賣自誇 , 就軟體供應商來說這樣的行為很常見 ,
但是當你(們的公司)就是消費者是付錢的公司時 , 你就要想想 ,
當初你買 Exchange 要付一次購買費用 , 然後轉換到 Domino 又要付一次購買費用
然後不同產品之間要轉換 , 就必須還要付出轉換的成本
這些行為根本就是浪費...
>
浪費模式二: 使用了多套同質性產品於公司內部
有可能看到的是例如: Database / Flow / web / 開發工具 相關軟體
例如使用了 MS SQL , 又買了IBM DB2 , 又買了 Oracle , 或是又買了 Sybase等等
買了多種都是要拿來做資料庫的軟體 , 感覺有點像是
你買了3台不同廠商的電視機 (都是要拿來看電視的 ,
 不同廠牌的電視可能小功能會有所不同 , 但是拿來看電視這個功能是一定不會變得)
事實上就軟體的購買而言 , 軟體除了初次的購買建置費用還有每年要付出去的維護費用
(一般來說是購買費用的15%吧)
所以當你公司有了多套同性質的軟體時, 每年要付出去的維護費用就是一筆錢 ,
再說 , 一套產品買進來後 ,
你還必須要有對該產品精通或是熟悉的人進行管理或者是微調維護等等作業
意思就是如果如上述的資料庫的例子來說 , 你們必須要有熟悉MS SQL/IBM DB2/Oracle/Sybase 等等的人員
也就是說必須要有這些熟悉的人員 ,
如果沒有 , 要麼就是再聘人 , 要麼再外訓 , 要麼請顧問
這些都是額外的費用 , 要同時搞多種不同的資料庫
在談到Lean時 , 請好好想想有沒有必要讓這麼多種不同的資料庫產品同時存在於公司內部

以下談的可能會跟上述的模式一與模式二有重疊
浪費模式三: 因為公司內部沒有人會用那個產品所以換產品
這個在大型企業中的MIS部門也是常見的事 , 當會的人走掉之後 ,
如果後續的接手者不會 , 則有可能那個軟體產品在公司內部會因為沒有人使用導致形同作廢
當然最後則只好買個新的產品進來公司用
<為什麼不訓練人? 別問我>
浪費模式四: 因為公司要求廠商客製化產品 , 所以廠商有新版本產品時 , 公司無法跟著昇級
台灣有很多公司都是要求產品要客製化 ,
但是當軟體廠商特別為你們公司從Source Code 源頭開了一個特殊版本的客製化版時
也就代表著你們買的那套軟體可能無法享受的原廠軟體有新的 fix 更新 , 或是出了新版本時,
你們公司都無法使用
除非你們公司要再花一次錢請原廠針對新版本幫你們重新客製化一套新版本
我的建議是:一般來說 , 對於原廠軟體盡量不要直接對原始的Source Code 去動手
                     而是要去尋求 plug-in 或是 extension 或者是 interface 去連接
                     建置客製化功能

浪費模式五: 在自行開發與外包開發中搖擺不定
這個在大型企業中也很常見 ,
想要自行開發就要養人 , 必須在內部培訓或是引入有能力的人員
不然就是要導求外包廠商來進行開發
這兩種都可以 , 但是最糟糕的狀況會是搖擺不定
好像離題了 , 剛剛談的不是 公司裡面的軟體產品的問題嗎 ?
怎麼會有自行開發或是外包的問題?
舉 ERP 的例子來說好了
如果你的公司導入了某套ERP ,
當公司內部有新功能要建置時 , 一種是自行開發 , 一種是找外包廠商來開發
這個又會牽扯到上述的 浪費模式一/二/三/四的狀況
因為政策搖擺不定 , 所以可能應該要培訓的人員沒有培訓 ,
然後外包廠商又吃定你沒有人可以用, 所以獅子大開口,
然後這時可能才想要自行養人來開發 , 可是可能等到訓練完到能夠上手精通 , 可能黃花菜都涼了
最後可能就會發生模式三 , 沒人會用所以要換新產品...
<好像這樣 問題就解決了 , 問題就這樣不斷的出現不斷的循環>
有些銀行就很乾脆 , 就是外包 , 擬定嚴格跟好的政策去處理, 而不是搖擺不定的政策

浪費模式六:因為人員對軟體產品的不熟悉或是沒有善用,而購買新的產品達到既有產品所提供的功能
這樣的浪費模式跟浪費模式二很相近但是原因不同
這種情形是人員在不熟悉或是精通產品的情況下,最容易發生。
舉例來說:有的公司會特別去購買 LDAP 產品 , 但是以微軟家族中 至少有兩個部分提供LDAP功能
而且是很多企業會用到 , 那麼為何還要去購買?  同樣的狀況也會出現在 Portal Server 或是 Content Manager Server (不是幫微軟打廣告 , 而是他們的某些產品提供了不少功能 , 但是常常有很多人沒有去挖出來去 , 導致要用A功能時 , 大家就要另外去買 另一套產品 , 要用B功能時 , 又去買另一套產品)

上述這些是在物價不斷上漲 , 全球企業都在尋求減少浪費的觀念下 ,
在MIS部分所可能會發生的浪費與內耗
如果你的公司出現了這種狀況 , 就表示有浪費出現了
檢查點1: 你的公司是否存在同一性質但是的多套不同產品軟體
               Database: MS SQL , IBM DB2 , Oracle, Sybase
               APServer: WebLogic , Jboss , WebSphere
               WebServer: IIS , Apache
               Mail Server: MS Exchange / Domino Notes
               Process/Flow: ...
<注意是你的公司是大企業而不是軟體公司產品展示會 , 相同性質的產品買那麼多套做甚麼 , 浪費...>
 
檢查點2: 你的公司使用的產品是否有要求要特別客製化而導致未來無法跟著原廠進行fix或是升級
檢查點3: 你的公司是否有在近幾年內 ,同一性質但是多套不同產品之間進行轉換
                <而且未來還有可能會再轉換>
                <這年頭沒人要你從一而終 , 但是不斷的轉換軟體 , 只是會讓你的投資浪費掉>
檢查點4: 你的公司是否曾有因為內部沒有人員會使用某軟體而直接購買新產品去取代的
                <這一點 , 可能檯面上沒有人會承認 , 但是一定曾經在某些公司發生過>
如果你的公司出現過這幾點 , 你或許應該好好評估一下,
因為這些行為直接或是間接導致的浪費有多少
最後一點 , 上述內容絕對都有真實案例 ,
<像模式一 , 軟體轉換 , 印象中是科學園區的某廠商 , 在微軟或是 IBM 的網站上都有>
<模式四 , 跟模式五 , 導入ERP 的公司可能會碰到>

但是請千萬不要替你們公司自己對號入座 , 或是想說是公司內部的某某某寫的
因為我提到的都是在網路上可以看得到的通例

提出上述例子 , 只是要說明當全球潮流講求 Lean 不浪費時 ,
也請檢視一下你們公司的MIS部門是否也是造成浪費的始作俑者
這些浪費如果被好好檢視跟處理之後 , 又可以省下一筆錢
------------------------------------------------------------------------------------------------------------------------------
當然還是要來推銷一下 Open Source , 有很多公司想省錢 ,
明明已有夠品質的open 軟體可以使用
但是卻又一定要花錢買一些open source 就有的功能軟體
最常見的大概是 Office 系列吧 ,  不一定要用 MS Office 用OpenOffice 也很棒
壓縮軟體有 7-zip 可以取代 WinZip , WinRAR
字典軟體有 StarDict(星際譯王)可以取代Dr.Eye ,
大企業特別要小心的是因為員工使用非法軟體而被抓到的問題 , 一旦上新聞 , 可就對企業的形象有損 ,
(經過一定的評估程序)導入Open Source 軟體可以大幅的降低這類問題
(而且根本不用擔心 , 因為購買的軟體授權不足而被抓 , 員工即便在家中的電腦也可以使用Open Source 的軟體 )
這些通通不用錢 , 你們公司還在花錢買類似的軟體嗎?

未完 , 內容待續-PDF 檔案壓縮

未完 , 內容待續-PDF 檔案壓縮

關於java 程式編譯與執行的一些基本常識

網路上很多人常常會有甚麼出現錯誤訊息要別人幫忙解決的

在這裡先說一個基本觀念 對的方式 可能只有一種到兩種 但是錯誤的方式卻會有百百種

甚麼意思呢 譬如常見的問題是:
"我使用了 XXXDatabase 的 JDBC , 但是執行的時候出現 class not found , 我有設定 CLASSPATH "

觀念一: 請把外部套件放在正確的位置
(假設如果你不是在 IDE 環境下執行)
如果你有使用 JDBC Driver (xxx.jar) 那麼請把 xxx.jar 放在你的 JDK\jre\lib\ext 目錄之下
根本不需要去設定 CLASSPATH

如果是在 IDE環境(Eclipse , JBuilder , ....) 那麼設定方式又不同

觀念二: 請分清楚 編譯時期跟執行時期的錯誤訊息
編譯時期 , 指的就是你寫好原始碼 (xxx.java)
然後要下 javac xxx.java 將原始碼編譯成 class 的過程稱為編譯時期

執行時期 , 指的是你已經成功的編譯產出了 xxx.class 檔
然後要下 java xxx 去執行的時候

常常有人會攪混掉 , 明明編譯的時候就已經出錯了 , 他還會告訴你 我打 java xxx 也會出錯
大哥 , 編譯的時候出錯表示根本不會產出 xxx.class 那麼你打 java xxx 當然會出錯


在這邊常常碰到的一個問題之一是: 我的編譯會過 , 但是執行時會出現找不到 class (EX: JDBC Driver)
這裡要注意的是:
剛剛提到兩個名詞一個是 編譯 ---> 請找 jdk\lib 這個目錄去放你的外部 jar 檔
一個是 執行 ---> 請找 jdk\jre\lib\ext 這個目錄去放你的外部 jar 檔

何謂 外部套件或是外部 jar 檔 , 只要是你引用別人的 不是你自己的程式碼的都算
當然上面的設定是 以相關的 library 是以 jar 檔的形式存在

另外還有不少人會犯的毛病是 , 在文件中會有 "假設" , "如果" 出現的話 表示這些是有條件的
例如 我上面提到 (假設如果你不是在 IDE 環境下執行)
就表示如果你是在IDE環境下的話 相關說明需要另外找


java 的設定很簡單
當你安裝完 JDK

你只需要設定以下幾個內容
JAVA_HOME 環境變數 設定為 JDK 安裝目錄(EX: C:\jdk_1.6.0 )
PATH 環境變數 在最前面加上 JDK 安裝目錄(下的bin (EX: C:\jdk_1.6.0\bin;<後面是原來的PATH內容> )
CLASSPATH 環境變數 在一開始只需要設定 .; 這樣就夠了 ,
然後你的 jar 檔要放在上面所提
剛剛提到兩個名詞一個是 編譯 ---> 請找 jdk\lib 這個目錄去放你的外部 jar 檔
一個是 執行 ---> 請找 jdk\jre\lib\ext 這個目錄去放你的外部 jar 檔
這兩個地方就夠了

如果你做到這些基本設定之後基本上 80%那些阿貓阿狗的問題都不會有

錯誤的方式百百種 對的方式只有一兩種

當然上面說得是java 程式的基本開發設定
如果你是使用AP Server 那麼設定又不太一樣 需要是各家廠商產品而定

用什麼像什麼

用什麼像什麼

你真的有好好的去了解你的開發工具嗎?
以下是我聽過我們公司IT部門的不少人員的說法 , 針對一些軟體工具
(工具的類型包含 程式語言開發工具 , DB Server , APServer , OOAD 設計工具 , ....
反正類型多的是)
(1)某某工具很爛 , XXX工具比較好用
(2)某某工具沒有YY功能 , XXX工具有YY功能
(3)某某工具的費用比較貴 , XXX工具比較便宜


以下是我個人的看法
(1)某某工具很爛 , XXX工具比較好用
那麼是不是換了XXX工具你就一定會用 , 而且用的比較好

(2)某某工具沒有YY功能 , XXX工具有YY功能
錯 ,
某某工具一直都有YY功能 ,
只是我們的人從來沒有好好的自我學習如何使用某某工具
是我們的人不知道某某工具有YY功能 , 而不是某某工具沒有YY功能

(3)某某工具的費用比較貴 , XXX工具的費用比較便宜
貴與便宜 , 那要看你的人是否有充分的壓榨出這個工具的所有功能來決定
假設 1000 萬的工具A有 1000 種功能 ,
而 20 萬的工具B有50種功能
但是不要錢的工具C有 49 種功能 ,
如果單就價格來比較 , 你要選擇那一種工具 ???

有經驗的人都會知道 , 選擇軟體工具價格不是唯一項目(還有很多項目需要考量的) ,
那麼是誰故意只把費用當作比較依據的???



舉例來說: 使用以下幾種工具都可以編輯網頁
DreamWeaver  ,  InterDev ,  Notepad , UltraEdit
如果有人完全不管用的是什麼工具 , 他純粹就是把工具當作 Notepad 來使用
那麼在這種人的手裡 , 使用DreamWeaver  ,  InterDev ,  Notepad , UltraEdit 統統都是當作 Notepad 來用 , 這種人根本就沒有好好善用他的開發工具

要記住: 用什麼要像什麼
如果你用的DreamWeaver , 請你把它當作DreamWeaver來用 , 好好壓榨這個工具的每一項功能 , 而不是把它當作 Notepad 來用 , 又說這工具很不好用
千萬不要把 DreamWeaver 用的像是 Notepad 又來說這工具很低級什麼的
對於這種人 , 你不要期望他會了解某某開發工具提供了多少種便利的開發功能
他永遠只會告訴你開發網頁很難 , 所以要多少工時 , 然後工具永遠的很難用
他希望要換另一種工具 , 可能市面上 90%的工具 , 他都用過了 , 在他的手中 , 不管是哪一種工具 , 工具始終很難用 ,
但是其他真正的網頁編輯人員可能只會某一種工具 ,
但是她們可能會善用那種工具的 80%的功能

以上只是舉例 ,
我最常看到的是
J2EE 的開發工具 , 目前有的是 RAD/WSAD , JBuilder , Eclipse , NetBeans 等等
DB Server , 目前有的是 DB2 UDB , Oracle , MS SQL 等等
AP Server , 目前有的是 WebSphere , WebLogic , JBoss , SunOne , Resin 等等

在公司用了某一套開發工具(或是DB Server , AP Server)之後 ,
就會有人出來說 XXX工具比較好用 , 開發軟體速度比較快 , 然後功能多 , 價格便宜等等
而這些出來說話的人 , 對於公司目前使用的這套開發工具完全沒有好好研究透徹
你以為她們出來說XXX工具比較好用 ,
就表示她們真的有好好研究過XXX工具嗎?

你以為公司真的改用XXX工具 ,
就表示她們真的會使用XXX工具嗎?
就表示她們真的會好好使用XXX工具的功能嗎?
就表示她們真的會讓她們的開發軟體速度變快嗎?

我可以告訴你 , 這些答案幾乎都是否定的 ,
因為她們用什麼就不像什麼 , 用什麼爛什麼(只要被她們用過的 , 都變成是她們口中的爛產品)
請問一下到底是產品的錯? 還是使用的人的錯?
真正會用的人 , 不論他拿到上述的哪些軟體 , 他都會好好的去研究 , 去學習 , 去壓榨出這個軟體的每一項功能與價值 , 然後用於工作上
不會用的人則是用什麼爛什麼
這也就是為什麼 ,
同樣的程式語言 或 Server 有人可以開發出系統 , 並且販賣或者是架設出專業網站
而有的人只會抱怨某某程式語言或 Server 很爛 , 什麼都做不出來

我不知道其他人是否也有看到類似的狀況?
我希望大家記住一句話: 用什麼要像什麼
以此作為本文的結尾

安裝設定Java相關軟體或套件注意事項

安裝設定Java相關軟體或套件注意事項
1.盡量不要安裝在有目錄路徑中包含空白字元的目錄之下
2.安裝目錄的名稱不要使用過長的名稱
有些軟體的設定會設定 CLASSPATH  , 有時候就會導致軟體啟動失敗 ...
可以試著將相關套件所在目錄改成較短的目錄名稱...再重新啟動軟體就會成功
(同理 , 包含空白字元的目錄名稱也有可能會引起啟動軟體失敗)

Java 程式透過公司Proxy連線到Internet

這個應該是不少在大公司上班的程式開發人員會問的問題 .
我們的公司要上網 , 必須透過 proxy , 而且要有申請過的Domain ID 跟 Password 才能連上網路去

那麼Java 程式或是Server軟體(Ex: Tomcat , Jetty) 要如何才能透過 proxy 連上 internet ?

基本的屬性:
http.proxy.host
http.proxy.port http.proxy.username
http.proxy.password
接著就看你要把它以程式的方式去設定或是以屬性的方式去設定
舉例來說:
 如果你原來要執行的Java 程式指令如下
java myDemoApp
加上相關屬性設定之後
java  -Dhttp.proxy.host=myProxyServerName -Dhttp.proxy.port=80 -Dhttp.proxy.username=myDomain\myUserID -Dhttp.proxy.password=myPassword    myDemoApp
(或者是在你的 Tomcat 啟動的 .bat 或是 Jetty 啟動的 .bat 中去修改加上上述的設定)

在這裡假設
http.proxy.host=myProxyServerName
http.proxy.port=80
http.proxy.username=myDomain\myUserID
http.proxy.password=myPassword
你可以使用 -D 去設定JVM的執行參數

或者你可以在你的程式碼中使用以下指令
System.setProperty("http.proxy.host" ,  "proxy.hinet.net");
System.setProperty("http.proxy.port" ,  "80");
System.setProperty("http.proxy.username", "myUserName");
System.setProperty("http.proxy.password", "myUserPassword");
在這裡只是舉例 , 所以 你要記得換成你使用的 proxy Server , port , username 跟password

這些設定記得看你的需求而定 , 甚至有其他的變化方式
這樣你的程式就可以在公司有proxy server的情況上 , 也能連上 internet

在網頁中同時顯示 Html 內容 及 PDF 內容

在網頁中同時顯示 Html 內容 及 PDF 內容

重點應該是加上粗體的部份
其中 PDF 來源可以是 WEB Server 上的 PDF File
<param name="src" value="demo1234.pdf"/>

或是 ASP 抓取資料庫內容回傳的 PDF 內容
  <param name="src" value="showpdf.asp?pdfID=bb980124567"/>


因為 html 原始碼無法正常放上  奇摩部落格 ,  所以只好手動把 半形英數字 換成 全形英數字
有需要測試的人 , 請自行把 全形英數字重新還原成 半形英數字



以下是 html 內容 (有需要 ,你也可以換成 asp 的寫法)

<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
        <title>showdata       
       
<body>   
    name:xxxx<br/>
    age:12<br/>
   
        <object classid="clsid:ca8a9780-280d-11cf-a24d-444553540000" id="pdf1" height="100%" width="100%">
         <param name="_version" value="327680"/>
         <param name="_extentx" value="2646"/>
         <param name="_extenty" value="1323"/>
         <param name="_stockprops" value="0"/>       
         <param name="src" value="showpdf.asp?pdfid=bb980124567"/>
   
  



ASP 讀取儲存在資料庫欄位中的 PDF 原始範例

ASP 讀取儲存在資料庫欄位中的 PDF 原始範例

範例假設如下:
database name: DEMODB
database user id: DEMOUser
database user id: DEMOPassword
table name:MY_PDF_TABLE
            field1 :    pdfID               - varchar , 20 , primary key
            field2:     pdf_content  - blob         , 1M                      
ODBC Name: DEMODB             

以下挑重點解說:
(1) SQL 指令:
set rs = conn.Execute("SELECT PDF_CONTENT FROM MY_PDF_TABLE WHERE pdfID='"+pdfID+"'")

(2)asp 部份:
      Response.Buffer =true
      Response.Clear()

(3)設定 MIME TYPE
下面這行是黨你的內容是 pdf 時所要設定的 mime type ,
所以當你的檔案是其他的格式 , 請修改對應的 mime type
      Response.ContentType="application/pdf"          

(4)Browser 開啟方式: 強制另存檔案 或是 線上開啟檔案
(a) 如果你希望回應到前端 browser 是要強制另存檔案 請用下面這一行
'Response.AddHeader "Content-Disposition" , "attachmentfilename="+pdfID+".pdf"

(b) 如果你希望回應到前端 browser 是要線上開啟檔案 請用下面這一行
Response.AddHeader "Content-Disposition" , "inlinefilename="+pdfID+".pdf"

(5)傳回檔案的二進位串流 
回應前端資料使用 BinaryWrite 把二進位串流傳回 
dim pdfSize
pdfSize = rs("PDF_CONTENT").ActualSize          
Response.BinaryWrite rs("PDF_CONTENT").getChunk(pdfSize)

(6)這一篇雖然是叫做
儲存在資料庫欄位中的 PDF 原始範例
但是如果你的 DB 中放的是其他格式的檔案內容也一樣可以通用 ,

假設你放的是 JPG
那麼請修改上述的
(3) MIME TYPE  , 請改為 jpg 的 MIME TYPE-->  image/jpeg
(4) 開啟方式的檔案名稱的副檔名 , 請改為 .jpg
     

以下是完整程式碼 , 有執行過 , 確認沒有問題的程式碼


測試方式
開啟瀏覽器: 輸入 以下網址
http://localhost/demo1/ShowPDF.asp?pdfID=BBB9998804



(假設: Windows Server , IIS ,
你建立一個虛擬目錄為 demo1 ,
資料庫中有一筆紀錄 pdfID 為 :  BBB9998804 )


===ShowPDF.asp===
<%@Language="VBScript"%>

<%
    Response.Charset="utf-8"  
    Response.Expires=0
    dim pdfID
    dim pdfID1
    dim pdfID2
    pdfID1= Request.Form("pdfID")                 'POST - 由 input html 中 form 傳入參數
    pdfID2 =Request.QueryString("pdfID")   'GET  - 直接輸入參數在網址列
        if (pdfID1 <> "" ) then pdfID=pdfID1
    if (pdfID2 <> "" ) then pdfID=pdfID2
   'DB Operation
   dim conn
   dim rs
   dim haveData
       haveData=false
   set conn = Server.CreateObject("ADODB.Connection")
       conn.ConnectionString = "Provider=MSDASQL.1;Password=DEMOPassword;Persist Security Info=True;User ID=DEMOUser;Data Source=DEMODB"
       conn.Open()
   set rs = conn.Execute("SELECT PDF_CONTENT FROM MY_PDF_TABLE WHERE pdfID='"+pdfID+"'")
   on error resume next
       rs.MoveFirst()       
   do while NOT rs.EOF
      haveData = true
      Response.Buffer =true
      Response.Clear()
      Response.ContentType="application/pdf"          
      'Response.AddHeader "Content-Disposition" , "attachmentfilename="+pdfID+".pdf"
       Response.AddHeader "Content-Disposition" , "inlinefilename="+pdfID+".pdf"
      dim pdfSize
          pdfSize = rs(PDF_CONTENT").ActualSize          
      Response.BinaryWrite rs("PDF_CONTENT").getChunk(pdfSize)
      rs.MoveNext()
    loop
   if (NOT haveData)  then Response.Write "查無資料
"
   conn.Close()   
%>

Velocity - 使用備忘錄


Velocity - 使用備忘錄
Velocity 是拿來作模板套版使用 , 你可以把常用的某些內容透過模板定義的方式 , 由它幫你轉換
直接來看主程式
以下範例 , 是假設你要寄送一堆電子帳單給客戶 , 但是有可能電子帳單的內容會調來調去
(User 特別是User 的主管 , 總是會在最後一刻改變心意 , 告訴你 , 某段的內容要換掉某個字 , 甚至是標點符號的全形半形都會要你改)

以下是使用講解 , 只把重點挑出來 , 完整程式碼 , 請看最下方有附上
完成的測試範例包含
(1)
TestMainApp1.java
(2)
example1.vm
(3)
example1_big5.vm

以下針對
TestMainApp1.java 作重點講解
假設你有一個method , 會根據你傳入的資料,去進行套版 , 然後回傳套表之後的結果

public static String getMailVM(Properties pData) throws Exception{
String s1=null;
VelocityEngine ve=new VelocityEngine();

Properties p = new Properties();
//以下是告訴套表程式 , 你的套版檔案放在哪個目錄

p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, "/home/demo/wk_myDemoLab/MyDemoVelocity/src");
//p.setProperty("runtime.log", "velocity.log");
ve.init(p);
//這個是放我們傳入的變數內容

VelocityContext context = new VelocityContext(pData);

Template template = null;

//以下是抓取套檔案 , 且要用哪種編碼方式讀取
//注意 , 如果你的套版檔案存檔時是用UTF8編碼 , 請用UTF8讀取
//注意 , 如果你的套版檔案存檔時是用big5編碼 , 請用Big5讀取
//不然就會造成 , 顯示時有可能只有變數會正常顯示 , 其他部份都是亂碼
// template = ve.getTemplate("example1.vm","UTF8");
template = ve.getTemplate("example1_big5.vm","big5");

StringWriter writer=new StringWriter();
//合併套版及變數 ,

if ( template != null) template.merge(context, writer);
writer.flush();
writer.close();
//將套版結果轉出成字串

s1=writer.toString();
ve=null;
context=null;
template =null;
return s1;
}


public static void main(String[] args) throws Exception {
//設定會給套版使用的變數 , 需要跟套版檔案配對

Properties p1=new Properties();
p1.setProperty("cust_name", "錢多多");
p1.setProperty("bank_name", "大台北郵局");
p1.setProperty("account_num", "200-123-456");
p1.setProperty("yr", "98");
p1.setProperty("mn", "06");
p1.setProperty("dy", "15");
String s1= getMailVM(p1);
System.out.println(s1);
}

}
======執行結果 , 粗體部分是我們傳入的變數=========
親愛的 錢多多 ,您好:
您的帳單將於980615日自您的大台北郵局200-123-456進行扣款。

客戶服務部
======================================
前面提到User 或是User的主管總是很多變 , 如果哪一天User 又想要變變花樣
把電子帳單的訊息改變甚至是要由 Text 變成HTML 怎麼辦?
在沒有增加變數的情況下 , 你只要打開 example.vm然後根據User要的 , 重新調整這個套版就可以了
完成不需要打開原始程式碼重新修改編譯....

把會變的部份 , 盡可能抽離出來 , 讓"修改"遠離你的原始程式碼,

以下是完整程式碼範例

=====example1.vm , 注意是要存檔為 UTF8編碼==================
親愛的 $cust_name ,您好:
您的帳單將於$yr年$mn月$dy日自您的$bank_name$account_num進行扣款。

客戶服務部

=========================================================
=====example1_big5.vm , 注意是要存檔為 Big5編碼=============

親愛的 $cust_name ,您好:
您的帳單將於$yr年$mn月$dy日自您的$bank_name$account_num進行扣款。

客戶服務部

==================================================================
TestMainApp1.java
==================================================================

package com.demo.velocity.examples;

import java.io.StringWriter;
import java.util.Properties;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;

public class TestMainApp1 {
public static String getMailVM(Properties pData) throws Exception{
String s1=null;
VelocityEngine ve=new VelocityEngine();

Properties p = new Properties();
p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, "/home/demo/wk_myDemoLab/MyDemoVelocity/src");
//p.setProperty("runtime.log", "velocity.log");
ve.init(p);
VelocityContext context = new VelocityContext(pData);

Template template = null;
// template = ve.getTemplate("example1.vm","UTF8");
template = ve.getTemplate("example1_big5.vm","big5");

StringWriter writer=new StringWriter();
if ( template != null) template.merge(context, writer);
writer.flush();
writer.close();
s1=writer.toString();
ve=null;
context=null;
template =null;
return s1;
}
public static void main(String[] args) throws Exception {
Properties p1=new Properties();
p1.setProperty("cust_name", "錢多多");
p1.setProperty("bank_name", "大台北郵局");
p1.setProperty("account_num", "200-123-456");
p1.setProperty("yr", "98");
p1.setProperty("mn", "06");
p1.setProperty("dy", "15");
String s1= getMailVM(p1);
System.out.println(s1);
}

}

企業使用盜版軟體會被抓 , 企業使用軟體的另外選擇

企業使用盜版軟體會被抓 , 企業使用軟體的另外選擇
最近經濟不景氣 , 在台灣有所謂的BSA | 臺灣商業軟體聯盟 , 專門協助一些大廠抓盜版
檢舉是有檢舉獎金的 , 但是有但書 , 就是必須是舉發成功 , 而且"打官司"有勝訴並且有獲得賠償金額....
但是有很多離職員工都是為了出一口氣... , 所以你會發現會去  BSA檢舉的多是離職員工....

然後每年只有要公司被 BSA抓到有盜版 , 都會有人問:  BSA 會不會抓個人盜版?
答案是: 目前並不會,
原因是: BSA 的收入來源就是抓盜版 , 並且勝訴的賠償金 ,
            所以它的對象都是企業公司行號 ,
            至於無利可圖的個人 , 目前還不是它的目標
(詳情參閱最下方的新聞內容)


回過頭問 ,
為什麼要用盜版? 錢太多 , 一定要買正版?
錯 , 明明有替代性軟體可能達到相同功能 , 為何一定要用盜版 ,
軟體除了要花錢買的正版軟體 , 不花錢買的正版的盜版軟體之外(有點繞舌) ,
還有另一種選擇 , 開放原始碼的免費的正版軟體


簡單的對照如下: 商業付費軟體    -> (開放原始碼)/(免費)正版軟體
OS            :MS Windows         -> Linux (Ubuntu Server / Desktop  或是其他 Linux)
Office        :MS Office         -> Open Office
壓縮軟體        :WinZip / WinRar     -> 7zip
PDF產生軟體    :Adobe Acrobat        -> PDFCreator
電子字典        :DrEye            -> StarDict
虛擬伺服器    :VMWare Workstation    -> VMware Server 2.0
(燒錄軟體        :) ~~~            -> 太多
(影音播放軟體    :) ~~~            -> VLC

很多企業都會花錢買 Windows OS , MS Office , WinZIP , Dr.Eye 等軟體
但是其實這些軟體都有替代軟體可以使用....不是一定要花錢才有用...

有許多商業軟體也會提供給個人開發用的開發版軟體
例如: XXX Express Edition , XXX Personal Edition , ....
但是很奇怪 , 有很多人就是要用盜版 , 明明有的選擇 , 有替代產品 , 替代方案 , 但是就是要用盜版軟體

舉例來說: VMWare Server 版是免費的版本 , 而VMWare Workstation 是需要付費的版本
其實 VMWare Server 版的功能已經能夠滿足需要使用 VM的人大部份的功能 ,
但是就還是有人偏偏要使用盜版的 VMware Workstation ,


別懷疑 , 我們公司的某廠商 , 他們的人員不止用的理直氣壯 , 告訴他們有免費的VMware Server版本可用 , 他們還一副你是白痴的態度....
甚至於開發出來的某些系統有使用到有版權的商業字型 , 他們也是不管公司是否有買 , 就是拿了就要裝 ,
還有像是 Adobe Acrobat , 反正那家廠商就是甚麼東西會侵權 , 就拿甚麼東西來用....
(反正東西是要裝在我們公司環境跑...就看我們公司的某些白爛 , 會不會明明知道侵權 , 還是讓他們裝在上面)

另外像是文件要轉成 PDF 不是只有 Adobe Acrobat 才能使用 ,
明明有Open Source 的 PDF Crator , 或者是利用 Open Office  也可以把文件轉出成 PDF
但是就是有人堅持要用盜版的 Adobe Acrobat , 很奇怪的想法


關於軟體授權還有不少 故事可以說 ,
有空再說....

以下是跟本文說明相關的新聞全部抄錄 , 僅供上文說明參考使用
------------------------------------------------------------
BSA:不景氣 盜版檢舉率飆升2倍
http://www.zdnet.com.tw/news/software/0,2000085678,20138024,00.htm  
ZDNet記者蔡宜秀/台北報導 2009/05/05 19:31:02

無薪假、企業縮編與員工的版權意識抬頭導致今(09)年的企業盜版檢舉量較往年高出2倍。

台 灣商業軟體聯盟(BSA)主席宋紅媞今(6)日指出,從去(08)年11月到今(09)年4月短短半年的時間,即累積超過往年一年的企業盜版檢舉案件 數:1千5百筆,由於檢舉案件繁多,BSA目前仍在篩選、過濾檢舉案件的真實性,計畫將於今(09)年6月開始透過合作律師事務所進行查緝。

BSA指出,不景氣有可能促使今(09)年的企業盜版檢舉案件創歷年新高。

從年初至今,BSA每月至少接獲250到300件檢舉案。宋紅媞表示,因為過年的關係,2月的盜版檢舉率多半偏低,但今年卻不是這麼一回事,根據BSA目前的統計資料來看,這與過年前、中、後都有企業在裁員,以及放無薪假有關。

「這一次接獲檢舉的企業清一律是新竹以北的中小企業,而這可能與中南部的中小企業多在這波不景氣時期宣告倒閉有關,」她說。

接獲盜版檢舉案件數雖創新高,但不代表BSA能荷包滿滿。宋紅媞指出,由於每個案件多得費時2到3年才會有最終判決,因此,即便今年接獲的盜版檢舉案件創往年新高,也未必能未BSA帶來立即性收益:高額賠償金。

「更重要的是,BSA在偕同檢警單位查緝涉嫌使用盜版軟體的企業前,多會先發送警告信函給企業,只要企業證明已改過,即不會進行查緝動作。」她說。

根據BSA數據顯示,台灣盜版率目前是40%,僅次於日本(23%)與新加坡(37%),為亞洲第三低。另根據IDC調查報告顯示,若台灣的軟體盜版率能在2012年降低為31%,將帶動國內生產毛額(GDP)高達134億元的挹注。



BSA查盜版 倒楣的多半是小企業

CNET新聞專區:Ina Fried 2007/11/27 13:32:02

商業軟體聯盟(Business Software Alliance)給人的印象,總是宣布軟體盜版率,並公布因使用盜版而和解的案例。但最新調查報告卻發現,BSA最大的資金來源不是因使用盜版軟體被抓的大企業,而是小公司。

美聯社記者Brian Bergstein表示,他的分析報導顯示,BSA的和解金收入中,有90%是取自於小企業。美聯社報導指出,這個代微軟、奧多比(Adobe Systems)等軟體商監督有無盜版行為的組織,去年的和解金進帳高達1,300萬美元。

有趣的是,美聯社報導附帶的一張表格顯示,BSA的收入有81%得自於和解金,13%得自於會員費。這些收益有將近五成用於法律訴訟,另有16%用於公共關係。

另外值得一提的是,BSA原先為鼓勵企業使用正版軟體,而提出一些赦免措施,但現在這些措施已縮減。同時,BSA提高發懸賞抓盜版的獎金,以鼓勵企業員工舉發使用盜版軟體的雇主。

這篇報導質疑,這類獎勵措施鼓勵任職於企業IT部門的員工舉發雇主,並不能解決企業使用正版軟體的問題。報導也質疑,BSA雖然宣稱只把矛頭對準嚴重藐視軟體授權條件的企業,但案例卻顯示,猶他州有一家公司只用兩套未授權的微軟軟體,一樣被抓到。 (唐慧文/譯)

網路安全-企業禁用Open Source 軟體的合理性

網路安全-企業禁用Open Source 軟體的合理性

就我個人所知 , 某些企業內部所謂的 rm單位的某些人士 ,(IRM 或是 ORM)
為了要表現自己真的很專業 , 在審查你的軟體系統時 , 或是針對公司的相關軟體政策 ,
都會把 Open Source 的軟體或是相關套件列為 "禁止使用"
不然就是說 , "不然你開出個證明 , 證明這個軟體或是套件是安全的"


實際上 , 這些人根本就是在裝懂 ,
首先, 你買微軟或是IBM 或是 Oracle的軟體進來的時候 ,
你是否有要求 微軟或是IBM 或是 Oracle 針對他們的軟體開具證明 , 去證明軟體或是套件經過測試是安全的?
那一家公司或是企業有要求出具證明的 , 可以出個聲...

第二個 , 你去哪裡要求提供Open Source 的組織或是單位為你開具證明?

或者是有的企業或是公司政策乾脆明定禁止使用 Open Source (軟體? / 套件?)

基本上 , 如果我是稽核人員 , 看到這種政策 , 然後那家公司如果又是使用 Java導向的 ,
我就直接給他記缺失....

因為政策太白痴 ...會這樣訂的 , 保證是完全不懂的人在裝懂....
這麼說好了 , 很多 Java程式都會使用的 log4j , hibernate , jdom ,dom4j 之類的套件 ,
根本就是 Open Source , 但是公司的政策又規範說 , 禁用 Open Source ,
那你說 , 這樣是不是違反政策 , 是不是就是缺失....

所以說會定這種白痴政策的人 , 你能說他不是在裝懂?
假裝好像很懂資訊安全 , 定了一大堆 , 就是公司擺明一定會違反的政策
你說他不懂 , 他又訂的頭頭是道 ,
你說他真懂 , 怎會訂出擺明就過不了的政策

這種人 , 我碰到過 , 真的你要他說出個五四三 , 他會說的天花亂墜 ,
但是明明這種訂法 , 就是亂來 , 公司擺明了百分之百會違反政策 , 他還是在亂訂....
偏偏又是這種人在導 ISO , 擺明了 , 這種人一導入ISO , 就會讓公司記缺失...還導個屁....




我說得是不是真的?
有興趣的人 , 回去翻翻你們自家公司的 ISO政策或是資訊安全相關文件
是否有禁用 Open Source 這一條要求 ,
有的話 , 再看看 , 你們公司是否是使用 Java相關平台在開發系統的 ,
是的話 ,
直接問 , 使用 Java 系統中幾乎一定會使用的 log4j 是否就會讓你的系統跟公司根本性的違反政策 ,
(一般來說 , 要使用違反政策的軟體或是套件 , 必須要有豁免程序 , 就是公司的某單位要提出申請 , 然後安控單位及相關主管要審查 , 然後出具證明 , 表示公司的安控單位同意此項違反公司政策的要求等等)

這時候 , 你就可以去看看 , 系統中使用的 log4j 是否有經過公司的豁免程序同意使用(有無豁免證明)
如果沒有 , 那就是缺失....


(log4j 的使用 , 在Java 平台上 , 幾乎就是常識性的使用 ,
Java開發人員沒人會特別針對這一點去提出疑問 ,

但是 , 對不起 ,
公司某些制定 SDLC , 安控政策的 , 是完全不會寫程式的人在制定 , 訂的頭頭是道 , 執行處理問題重重)


會拿 log4j 出來當樣板 , 只是為了要突顯 ,
很多公司或企業的安控政策對於Open Source 另眼看待或是要求的不合理狀況
(你用了 log4j(Open Source) , 怎麼沒有出具證明 , 證明 log4j 是安全的 ,
Open Source 你找誰去出具證明的? ,
你用微軟的軟體 , 就不用要求微軟出具證明 , 證明他們家的軟體是安全的 , 沒有漏洞的
)


如果有碰到 , 公司內部安控單位的人員 , 拿著禁用 Open Source的政策當作令箭的 ,
請拿 log4j 打的他滿地找牙.....
(看看安控單位的人員如何不懂裝懂的自圓其說...還蠻有趣的 ,
不過最後的結果大部分就是 , 他可以跟你廢話個 2 萬字 , 但是怎麼把問題處理掉 , 他絕對說不出來...只是繞著問題打轉)

這是先前碰到公司內部的所謂安控人員 , 針對系統的要求 , 特別讓我感冒的問題....
(我不認為 Open Source 是 100%安全的 , 但是我並不認可的是 那種完全不懂就裝懂的要求政策)

~備份複製~從奇摩我的部落格~

2009年8月16日 星期日

當你們跟我們變成我們 , 小心到最後我們都不我們了

當你們跟我們變成我們 , 小心到最後我們都不我們了

在很多書或是文章中都提到 , 與他人溝通要讓對方產生同理心 ,
最好是要使用 "我們" , 而不是 "你們" ;

這原則我不是不知道 , 但是問題是要看用在甚麼時後跟什麼地方 ,
明明就是應該要確認工作跟指派分工 , 不說清楚獎明白 , 還在哪邊 "我們" , "我們"的 ,
到底是誰要負責作?

所以在職場中 , 如果有兩個部門在合作一項事務時 , 各有各的職責並需去負責跟作業時 ,
你的相關文件或是 Email 要怎麼寫?

範例一:
你們XX部門需要負責工作A
我們YY部門需要負責工作B

有些人看了就會說 , 這樣不是違反上面說得 , 不要使用你們 , 而是要用我們的原則嗎?
好吧 , 那就來改吧!!!


範例二 :
我們需要負責工作A ,  工作B

收到信件的兩個部門的相關同仁 , 看到 "我們需要負責工作A ,  工作B"
XX部門同仁的想法:
(a)我們部門需要連 YY 部門的工作B 也一起作嗎? ,
(b)嗯 , 發信的是 YY部門 , 所以我們指的是 YY 部門 , 所以統統都是 YY部門要負責

YY部門同仁的想法: 我們部門需要連 XX 部門的工作A 也一起作嗎?
(c)我們部門需要連 YY 部門的工作B 也一起作嗎? ,
(d)嗯 , 發信的是 XX部門 , 所以我們指的是 XX 部門 , 所以統統都是 XX部門要負責

 要嘛就是
(1)兩個工作都由單一部門全包了 , 一個部門閒閒沒事幹
(2)兩個部門都不作 , 以為對方要負責 , 結果都沒人作
(3)兩個部門都做了全部的工作 , 結果重工 , 兩邊的人力負擔都很重 , 而且有可能還作不好 , 因為做的不是自己部門專長的工作
(4)最佳狀況 , 兩個部門自己知道Email 中的我們要負責的工作有那一個是自己部門要負責的

如果Email通知或是文件中寫的都是"我們" ,
請問有問題發生了 , 是誰要負責? , 是"你們"要負責 , 還是 "我們"要負責? , 還是"大家"要負責?
當你們跟我們變成我們 , 小心到最後我們都不我們了?



當 User 單位給錯計算公式 , IT 照著公式去開發系統 , 到最後算錯錢的時候 ,
是 User 單位要負責 , 還是 IT 單位要負責 ? 是"你們" , 還是"我們" 要負責 ?


那麼 ? 你告訴我 , 在需要大家協同合作 , 跟責任分工的情況下 , 是要用 "你們" , 還是要用 "我們"?
(大部分的狀況下是:
 我們有工作要作 , 我們指的是 "我"方 , 另外的"們" , 是不用做事的那一方
 當問題發生了 , 我們 , 有問題要處理 , 這時候絕對會變成 "我"方 , 或是"你們"有問題要處理...


在企業環境下 , 如果有人老是拿著"我們"來跟你要求時 , 請小心 ...
就問這麼幾點 , 作好了 , 績效是我們的 , 還是你們的 , 作不好 , 問題是我們的 , 還是你們的....


當 User 拿著錯誤的公式要求 IT 照著錯誤公式寫出系統時 , 結果要收的錢 , 或是要付的錢算錯了 ,
請問 , 當發生問題時 , 公司對外會講甚麼 ? 是 IT 的系統寫錯了 ? 還是 USER的公式給錯了? 所以算錯錢?
這時候 , 80% 都會變成是 IT 的問題 !!! , 不相信去看看大部分的新聞案例 ,

很多時候 , 提出錯誤需求的 User 方多半是把責任撇的一清二楚的 ,....
這時候是我們還是你們....
)


還有很多時候是 User 要系統上線要的十萬火急 , ...
但是 IT 請 User 提供必要的需求說明或是進行確認時 , User 可以拖個 2 , 3 週不回應 ,
直到時間到了 , 又回過頭來怪 IT 延誤....
請問這個時候要怎麼寫 Email ,

原本是要寫 "要請 User 單位儘速確認 xxx 需求文件是否有誤"
變成是要寫 "要請 我們儘速確認 xxx 需求文件是否有誤"  , <-- User 收到這樣的Email 會理你才有鬼 , IT發的Email , 講的是"我們" , 當然是 IT要確認

所以當你們跟我們變成我們 , 小心到最後我們都不我們了
當分工與職責劃分不講清楚前 , 濫用同理心原則 , 到處講我們 , 根本是擺爛的態度....


在很多書或是文章中都提到 , 與他人溝通要讓對方產生同理心 ,
最好是要使用 "我們" , 而不是 "你們" ;

這原則我不是不知道 , 但是問題是要看用在甚麼時後跟什麼地方 ,
明明就是應該要確認工作跟指派分工 , 不說清楚獎明白 , 還在哪邊 "我們" , "我們"的 ,
到底是誰要負責作?


水患發生了 , 如果政府內部會議 , 還在強調 , "我們"要搶救災民 , "我們"要調配物資 , "我們"要提供急難救助 ,
"看" ,
你就看看 "我們"是"我們"的那些部門或是哪些單位要負責?



明明就是應該要確認工作跟指派分工 , 不說清楚獎明白 , 還在哪邊 "我們" , "我們"的 ,
到底是誰要負責作?

2009年8月5日 星期三

不會煮菜的寫不好程式 , 當不好PM

不會煮菜的寫不好程式 , 當不好PM <--這個標題 , 純屬瞎掰 , 有無道理容後說明

在一些程式設計網站 , 最常見的初學者或是初入職場的人問的問題?
某某程式 , 不知道從何寫起 , 或是不知道從如何寫?

我敢打包票 , 這些人大概不會煮菜 ,

首先 , 你要煮菜前 , 要上菜市場買菜 ,
買菜也分為兩種 , 一種是隨便買亂亂買 , 一種是有目的的買
例如: 你已經盤算好了 , 今天要煮 排骨蘿蔔湯 , 炒高麗菜 , 糖醋魚 , (關於怎麼配菜也是問題)
那你要買 的材料絕對是要煮這三樣菜的材料 , 絕對不會搞個冬瓜回家 , 也不會搞個雞回家...
為什麼 , 你已經決定好的要煮的菜 , 而要煮的菜 , 絕大部分都有固定的食譜 , 也就是有固定的配料跟調味料的樣式 ,

那跟寫程式有甚麼關係?

有的人寫程式是這樣寫的 ,
"我要寫個可以兩人對戰的網路遊戲" ,
 "但是我完全不會寫" ,
 "希望有人教教我 " ,
 "要有範例 ",
" 而且必須是藥用 C# 寫的" ,
"還有 , 我很急 , 就在線上等 , 請趕快回覆"
這樣很了不起的網路問問題的大爺問法 , 看過沒有? , 我看過 n 次...

有點扯遠了 , 這跟煮菜何干 ?
"我要寫個可以兩人對戰的網路遊戲" , <----- 我要煮個兩人吃的菜
 "但是我完全不會寫" ,                            <----- 但是我完全不會煮
 "希望有人教教我 " ,                              <----- 希望有人教教我
 "要有範例 ",                                           <----- 而且要有食譜
" 而且必須是藥用 C# 寫的" ,                <-----最好要有@XO#
"還有 , 我很急 , 就在線上等 , 請趕快回覆"

如果你就是那個人 , 你要如何回答問題
 我要煮個兩人吃的菜         <----- 首先問問題的方法就是錯了 , 要煮甚麼菜沒有說清楚 , 十分發散
                                                         如果可以決定要煮甚麼菜了 , 下面的問題就簡單了
                                                         例如:要煮佛跳牆
 但是我完全不會煮            <----- 我也不會煮佛跳牆
 希望有人教教 我               <------- 現在這個時代當然是要上網查 , 有食譜 , 有作法
 而且要有食 譜                  <----- 

剩下的是甚麼? 準備材料 ,
買回來的材料 , 還要一一經過整理清洗 , 看是要切絲 , 切塊 , 切條 , 切丁 , 反正看要煮甚麼菜 ,
相同的材料 , 用在不同的菜上面就要用不同的處理方式 ,

竹筍炒肉絲 , 如果你硬要切塊 , 切丁也不是不行 , 只是口感會不好...
(一 般來說 , 一道菜 , 如果有切絲的 , 那相關材料都是切絲 , 要不就全切丁(EX:  生菜鴿鬆 , ))
又有點跑題了....


但 是萬一 , 碰到一個你不曾用過的材料的時候怎麼處理?
先去學如何處理那個材料 , 那個材料會處理了 , 菜大概也成功一半了
(菜的烹 調方式也是一樣 , 哪裡不會 , 有需要就學 ,)


另外一點就是處理材料的方式 ,
有的人煮菜 , 會把所有材料全部先處理好 , 該洗 , 該泡 , 該削皮 ,  該切絲 , 該切丁 , 該醃的 ,
全部在生火之前 , 全部弄好 , 而且會把材料一一放到適當的剛盆 , 調理碗 ,
等到要生火 , 倒油熱鍋時 , 就只需要 , 把事先準備好的材料 , 一一下鍋 , 等火候到了 , 加調味料 , 起鍋 , 菜就煮好了 , 這種煮法 , 就不會手忙腳亂 ,


另一種人是一邊生火熱油 , 一邊才開始想要先煮哪道菜 , 然後才發現 , 材料的主菜還沒洗 , 趕快隨便洗洗 ,
鍋子已經在冒油煙 , 趕快胡亂切切 , 丟下鍋 , 突然發現 , 還有配菜 , 還放在冷凍庫 , 趕快拿出來 ,
還是結冰狀態 , 趕快用刀坎 (砍得動才有鬼) , 不得已 , 只好把冰凍的配料丟下鍋 , 這時主菜因為剛剛沒空翻它 , 已經呈現焦黑狀 , 而附菜 , 還是冷凍狀態 , 只好加大火煮 , 主菜黑焦的更兇 ,
過 了30分鐘 , 附菜是外面焦黑 , 裡面半生不熟 , 而主菜已經剩下黑炭了....
然後呢 , 等到一個小時之後 , 終於整道菜已經熟了(也焦了)
你還要加個調味料起鍋 , 然後把它吃下肚嗎?


有沒有發現 , 煮菜的方式 , 會碰到的狀況 , 也跟我們在開發程式或是在進行專案管理很雷同...
如果你不預作準備 , 就要胡亂去煮 ,  失敗的機率絕對很高....

===== 煮菜 vs 專案管理 對照篇======
但是如果你"會煮菜" , 那麼相信你在進行程式開發 , 或是進行專案管理應該也是有條不紊 ...
首 先先決定煮甚菜 (決定範圍 ,  主題)
進行材料採買        (決定資源 , 配置資源)
進行材料前處理 ,    (確認活動)
決定下鍋優先順序 , (進行活動排程)
確認菜都熟了 ,        (執行專案活動 , 進行品質驗證)
加調 味料 ,              
起鍋上桌                 (專案完成結案)



===== 煮菜 vs 程式開發 對照篇======
首先先決定煮甚菜 (決定要寫甚麼方面的程式)
進行材料採買        (決定需要用到哪些技術 , 網路通訊 , 壓縮 , 3D , 加密???)
進行材料前處理 ,    (確認 那些技術要如何使用 , 進行簡單學習確認)
決定下鍋優先順序 , (轉寫煮程式 , 將各個單項技術模組化撰寫測試)
確認菜都熟了 ,        (將各個模組合併在一起完成主程式)
加調味料 ,              
起鍋上桌                 (程式完成)

2009年7月21日 星期二

Mediawiki 的錯誤應用方式

Mediawiki 的錯誤應用方式

我對 Mediawiki 的認知:
Mediawiki 眾所周知就是共筆系統 ,  是大家可以一起分工寫一篇文章(或是很多很多篇文章)
這樣的系統提供的是一個"活的"文件系統

什 麼是活的文件系統
就是一份文件可以不斷的成長(它可以是某甲創造出來  , 某乙編修 , 某丙審核)
同時它也提供了整個的歷程檢視跟版 本控管 ,
每個修改歷程都被紀錄下來



對於公司來說 , 如果要把Mediawiki 用在系統開發上 ,
就 是可以把手冊(使用者手冊 , 安裝手冊 , XXX手冊)
都透過 Mediawiki 撰寫 ,

甚至於可以是一個主編把某份 文件的大綱訂出來後 ,
讓多個人同時分工去編輯大綱下的某個小節的內容
Mediawiki 也提供針對內容進行全文檢索功能


OK , 接下來 , 要來講錯誤的Mediawiki 應用方式
聽過某間公司的某個單位 , 他們是這樣用Mediawiki的 ,
他們只 是把 Mediawiki 當作一個擺文件的Portal ,
所有的文件都是WORD , PDF 等等 , (一堆專案文件的檔案)
然 後只把  Wiki 本身只是拿來作這些文件的LINK 入口 ...

Oh...天啊 , 真的錯很大 ,... ,
如果要 這樣用 , 不如搞個檔案管理系統 , 例如 MS Share Point Portal Server
這種用法根本就沒有發揮 Mediawiki 的效用 ,...,
真正專案的內容都藏在附件檔案(WORD , EXCEL , PROJECT)檔案中 , 這樣子要 Wiki 做什麼?

共筆系統就是頁面內容就是文件 , 就是你要賦予它生命的地方 , 它可以被很多人擴充 , 被討論 , 被修改 ,
所 以當你要寫專案範圍或是需求範圍時 , 甚至可以請 User 上去寫屬於他們的部份 ,
然後你們這方可以在 User 寫完的同時 , 也針對審閱的看法 , 直接進行修改或是說明審閱的意見 ,
因為它有版本歷程 , 所以每一次修改 , 都像是活的 ,(因為每一頁內容  , 都可以加上一串討論 , 所以線上討論的結果 , 搭配內容 , 就像是每一次會議紀錄 加上 最後的產出)
也因此 , 它可以是最佳的線上即時專案內容的匯總區 , + 討論區 , + 即時的專案規格區...

想想 , 每次當你使用 WORD 寫了第 1 版的專案文件 , 然後 User 看過 , 大家就可以指指點點 , 然後再加上你的主管 , User 的主管 , 主管的主管 , 甚至開發商 , 到最後 WORD 檔可能是第 n 版 , 但是討論的過程不見了 , 被修改的某個條文 , 出自於某個人的要求變更 , 也沒人知道...

最 重要的是文件最好不要同時散給多個人過目 , 否則修改的地方有衝突就糟了 ,
反之 ,  使用 Wiki 就是讓每個人都發表意見 , 但是同時 , 每個人修改的地方 , 也都留下歷程 ,
不論是改的好或是改的不好 , 也都可以讓後來者有跡可循

再說 , 很多公司或是企業最喜歡導標準化文件 , 但是常常第一關 ,
同類的文件 , 結構大不相同 , 或者是同一份WORD文件光是要調整結構 , 就要能搞得不是很聽話的WORD
使用 WIKI 則不需要 , 因為它的段落結構就是哪樣 , 只要訂出一個範例的段落結構 ,(或是樣板模板)
其 他人就很容易共用


拜託 , 不要再拿 Mediawiki 來當垃圾掩埋場 ,
(專案文件檔案一大堆 , 當作 link 附件 , 埋進去 , 你會重新找的到 , 然後拿出來用才有鬼  )

每種軟體必有其適用之處 , 有其強項所在 , 也有其弱項所在 ,
拜託別亂用 , 用完之後 , 就說某某軟體很難用...

碰到這種開著數頓吊車吊一盒雞蛋上 5 樓 , 然後還要怪吊車很難用 , 這種人還蠻多的....
也不要開著跑車 , 硬是想要當作送菜大卡車 , 要把 幾十簍的高麗菜運來運去的


冷 完了....
拜託 , Mediawiki 不是垃圾掩埋場 , 不要再亂埋文件了....
(這不是肯得雞....很老掉牙的廣告台詞 了.....)

2009年7月19日 星期日

在UBUNTU 上玩 COBOL -使用備忘錄

在UBUNTU 上玩 COBOL -使用備忘錄
UBUNTU 8.10 , Eclipse 3.4 , Cobol IDE , Open COBOL ,

注意事項:
以下的 COBOL範例(Hello.cob , Hello3.cob)是我參照
Teach Yourself COBOL in 21 days Second Edition
上面的 入門範例 , 所改寫出來的 , 僅供測試使用


(1)下載安裝 Cobol IDE
Download Cobol IDE
http://www.eclipse.org/downloads/download.php?file=/cobol/downloads/cobol_plugins_3.4.0_linux32.zip
解 壓縮 cobol_plugins_3.4.0_linux32.zip
然後把解開之後 features & plugins 複製到你的 Eclipse 目錄下

(2)安裝 OpenCobol
Synaptic套件安 裝程式 , 輸入 Open-Cobol 然後就可安裝

(3) fujitsu cobol 手動建立連結 (可忽略此步驟)
ln -s /usr/bin/cobc /opt/FJSVcbl/bin/cobol
cobc  是open-cobol 的執行檔 ,
cobol 是 fujitsu cobol (net cobol) 的執行檔
在這裡是為了欺騙 Cobol IDE 的自動建置(build.xml) - 詳情後述

(4)執行 Eclipse

(4.1) 建立cobol專案
File -> New -> Other -> COBOL -> COBOL Project(圖片 COBOL-001.jpg)
p1



Project name:輸入 MyLabCOBOL001(圖片 COBOL-002.jpg)按下Next
p2

Target name:輸入 MyLabCOBOL001(圖片 COBOL-003.jpg)按下Finish
p3

(4.2)建立cobol source - Hello.cob
在專案下的Source Files按下滑鼠右鍵 ,出現功能表
New -> COBOL Source(圖片 COBOL-004.jpg)
File name: 輸入 Hello
PROGRAM-ID: 會自動同上面的名稱也是 Hello
按下Finish
p4

(4.3)修改 Hello.cob 的內容
COBOL IDE 會自動建立 Hello.cob 預設內容如下(圖片 COBOL-005.jpg)
p5

修改Hello.cob 為以下內容(圖片 COBOL-006.jpg)
====Hello.cob START=====
*Hello.cob
 IDENTIFICATION DIVISION.
 PROGRAM-ID.   Hello.
 ENVIRONMENT    DIVISION.
 CONFIGURATION  SECTION.
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 PROCEDURE DIVISION.    
 PROGRAM-BEGIN.  
     DISPLAY "你說中文也會通".
 PROGRAM-EXIT.
     EXIT PROGRAM.

 PROGRAM-DONE.
     STOP RUN.

END PROGRAM Hello.
====Hello.cob END=====
p6

(4.4)手動編譯 Hello.cob 這隻COBOL
開啟終端機視窗(要切換到你的專案所在目錄) ,
輸入以下指令
cobc -o Hello -x Hello.cob

命令說明如下:
告訴它輸出的執行檔的名稱是 Hello(-o Hello) ,
要編譯 Hello.cob 為執行檔(-x Hello.cob)
編譯的時候如果有警告可以暫時不理會 , 只要它會過就可以


如果沒有問題 , 我們的第一隻 Cobol 程式已經完成編譯 , 可以執行
開啟終端機視窗 , 輸入以下指令
./Hello
程式執行結果顯示 "你說中文也會通"(圖片 COBOL-007.jpg)
p7

(5)解說為何要設定在 (3) fujitsu cobol 手動建立連結
回過頭來看專案目錄下有一個 build.xml (圖片 COBOL-008.jpg)
p8

其中的COBOL編譯器設定是 /opt/FJSVcbl/bin/cobol
但是 UBUNTU 上面並沒有  fujitsu cobol  , 所以我們只好手動的建立連結去欺騙 COBOL IDE的動作
事實上 , (3)不做 , 也不會有問題,(只是會在IDE的CONSOLE出現編譯錯誤訊息)
因為我們是要手動編譯(4.4)

注意:
不要嘗試著 去修改build.xml , 因為COBOL IDE 會在你修改或是新增 COBOL SOURCE 之後
重新產生 build.xml , 等於你修改的統統無效 , 而且它會在你每次按下 Ctrl + S存檔之後
就去執行 build.xml
這個是沒有甚麼效用的 , 當然你可以去拿 COBOL IDE 的 SOURCE 重新修改跟調整之後變成你要的
但是在這邊 , 我只要要玩玩COBOL, 只是利用 COBOL IDE去顯示COBOL語法的標記
所以我只用最快速的方法 , 讓它可以執行
有興趣要改build.xml 請參閱附錄2 , 但是沒什麼效果


(6)新增 COBOL SOURCE - Hello3.cob
內 容如下
====Hello3.cob START====
*Hello3.cob
 IDENTIFICATION DIVISION.
 PROGRAM-ID.   Hello3.
 ENVIRONMENT    DIVISION.
 CONFIGURATION  SECTION.
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 01  FIRST-NUMBER      PICTURE IS 99.
 01  SECOND-NUMBER     PICTURE IS 99.
 01  THE-RESULT        PICTURE IS 999.
 01  THE-NAME          PICTURE IS XXXXXXXXXX.
 01  THE-MESSAGE       PIC X(20).
 01  THE-NUMBER        PIC 99(2).

 PROCEDURE DIVISION.    
 PROGRAM-BEGIN.
     DISPLAY "Enter the first number:(0-99)".
     ACCEPT FIRST-NUMBER.
     DISPLAY "Enter the second number:(0-99)".
     ACCEPT SECOND-NUMBER.
     COMPUTE THE-RESULT = FIRST-NUMBER + SECOND-NUMBER.
     DISPLAY "The result is:" THE-RESULT.
     
     MOVE "HELLO " TO THE-MESSAGE.
     DISPLAY "Enter someone's name.".
     ACCEPT THE-NAME.
     DISPLAY THE-MESSAGE THE-NAME.
     
     MOVE 12 TO THE-NUMBER.
     COMPUTE THE-RESULT = THE-NUMBER + 99.
     DISPLAY THE-NUMBER "+ 99 = " THE-RESULT.     
     CALL "Hello".
  PROGRAM-DONE.
     STOP RUN.   
 END PROGRAM Hello3.
====Hello3.cob END====

(7)編譯及執行 Hello3.cob(圖片 COBOL-010.jpg)
開 啟終端機視窗(要切換到你的專案所在目錄) ,
輸入以下指令
cobc -o Hello3 -x Hello3.cob

如果沒有問題 , 我們的第2隻 Cobol 程式已經完成編譯 , 可以執行
開啟終 端機視窗 , 輸入以下指令
./Hello3
它要你輸入數字(first number): 請隨便輸入0~99的數字 , 按下Enter
它要你輸入數字(second number): 請隨便輸入0~99的數字 , 按下Enter
畫面會顯示兩個數字加總的結果

然後要你輸入命名(someone's name): 請隨便輸入 , 按下 Enter
畫面會顯示 HELLO %你輸入的姓名%

然後畫面最後一行會出現
libcob: Cannot find module 'Hello'

這個是我們的程式中有呼叫Hello的外部Module , 但是它找不到對應的 Hello.so

所以我們重新編譯 Hello
開啟 終端機視窗(要切換到你的專案所在目錄) ,
輸入以下指令: 注意這次不要加額外的參數
cobc Hello.cob
p9

然 後重新執行 Hello3 (Hello3不需要重新編譯)
./Hello3
最後你可以看到 Hello3成功的呼叫  Hello並且顯示 Hello的內容在畫面上
(圖片 COBOL-011.jpg)

p10


cobol 呼叫外部 MODULE的成功關鍵點在於 XXX.so是否可以存取的到
p11

如果你有按照我上面的步驟 進行
那麼 , 那麼你應該在  60 分鐘以內可以完成上面的動作

包 含建立 COBOL SOURCE , 編譯 , 執行
還包含了 CALL 外部的 MODULE ,
就是這麼簡單 ,
備忘錄 就是備忘 ,


附錄1:
Open-COBOL可以檢查語法的相容性 ,如果是要檢查是否符合IBM的COBOL
加上 -std=ibm ,
範例:
cobc -std=ibm -o Hello -x Hello.cob

附錄2: (如果你不會 Java就不要理會這段了 , 這段有玩Java的會知道在做什麼)
自 建立ANT build2.xml (為何不建立 build.xml , 因為會被COBOL IDE給蓋掉)








   



   




執行的時候
ant -f build2.xml

run-cobol.sh 內容如下
cobc -std=ibm -o $1 -x $2

也因此我才不建議直接去修改 build.xml>


附錄3:
COBOL範例程式電子書 , 這本內容夠淺顯(請自己上網路上找 , 有WEB版)
Teach Yourself COBOL in 21 days Second_Edition

在UBUNTU上玩COBOL到此結束 

2009年5月18日 星期一

帶著台灣過了八年苦日子的前執政黨出來挺扁了

帶著台灣過了八年苦日子的前執政黨出來挺扁了


曾經有某執政黨說 大家要有心理準備過苦日子...
一過 8 年過去了,...

民眾過的是苦日子,....,
但是某執政黨的高層幹部 , 個個肥水滿滿 ,

不知道這個黨還有臉出來說別人?

另外拜託一下 , 這個黨的支持者能不能有點水準 ,
不要以為加入這個黨就可為所欲為 ,

看到的是 , 在台北捷運電扶梯 , 把左邊的通道統統堵住 , 原本可以讓人通行的 , 也統統堵住
然後呢在捷運上 , 嗓門特大 , 好像怕人不知道他們是某政黨來挺扁的...


還有那種 , 橫越快車道的....<你當作是某些政黨執政的縣市嗎 ? 可以不用看紅綠燈 , 可以不用理會交通法規?  想怎麼過馬路 就怎麼過馬路嗎 ? >

拜託 , 某某政黨 , 不要老是以為天大地大你們政黨最大....
(甚麼時候私人政黨的糾察隊還可以行使警察權去侵害過路人的自由權? 過路人就不能去說話?)


挺貪腐的黨至今依然挺貪腐...

2009年5月8日 星期五

讓小學生加法可以進步的撲克牌遊戲 - 99 點


讓小學生加法可以進步的撲克牌遊戲 - 99 點

讓小學生加法可以進步的撲克牌遊戲 - 99 點

這個是上週妹妹為了我生日請我吃飯的事 ,

到妹妹家 , 教妹妹的女兒玩的撲克牌遊戲 - 99 點

這個遊戲一玩 , 馬上就會知道小朋友的加法有沒有問題

當然小朋友要玩的高興 , 就會發現如果加法很差 , 算的很慢 , 就不好玩了

遊戲規則:
(1)撲克牌 52 張 ,
     K: 直接跳到 99點
     Q: + - 20點
     J:  Pass
    10: + - 10點
     4: 反轉遊戲出牌方向
    其他都是按牌面點數去加
(2) 3 ~4 人 (2 人也可以)
    洗好牌後 , 每人先發 5張牌 , 剩下的牌放中間 ,
   順時針方向出牌 (碰到有人出 4 的牌 , 就變成反方向)
(3)輪到出牌的人 , 要出一張牌 , 並且喊出出牌後最後的點數 ,
   例如: 目前已經是 87點 , 輪到你 , 你出了 紅心8 , 則要喊出 95 ,
  其他的牌 , 如規則(1)

(4) 如果手上的牌 , 一出出來就會超過 99 點 , 則輸 , 該人出局 , 剩下的人繼續玩...

因為在玩的時候 , 要喊出加到幾點了 , 所以碰到小朋友加法有問題的 ,
馬上就會察覺 ,
而小朋友 , 在玩的高興的時候 , 如果碰到自己出牌就要加法加很久才有答案 ,
小朋友自己也會知道自己的加法不好 ,
不過沒關係 , 99 多玩個幾輪 ,
至少加法應該會進步...


(大人欺負小孩啦...)


<其實 99 點小朋友也可以彼此練習>

2009年5月7日 星期四

幫EXCEL XLS檔瘦身

幫EXCEL XLS檔瘦身

在 EXCEL 如果有不斷的複製剪下或是修改
有時候資料一多 , EXCEL 檔就會不斷膨脹
有時候在EXCEL檔就會變得太大 在透過eMail傳送時
可能會送不出去

這時候Open Office 就派上用場了

方法簡單到一個不行 ,
打開 Open Ofiice 的 Open Office Calc ,
用它開啟你的 Excel xls 檔案 ,然後 另存新檔 , 確定它是存成 Office 2000格式


這樣就完成了

前幾天幫同事的 Excel 檔案瘦身 , 從 10.5 MB 左右 , 變成 3 MB大小

就這麼簡單 , 沒有甚麼絕招 , 只要 開啟 , 另存新檔 就幫 Excel 檔案瘦身了....


===============================================
補續: 後來用 Google 查了一下 excel 瘦身
發現有大陸人寫的文章 ,
裡面巨細靡遺的說明了 , EXCEL要作多少注意事項才能避免 EXCEL 檔案越來越肥大

如果你碰到一般的User , 要把這些注意事項跟他們講完 , 可能天都黑了
如果你很勤勞  , 可以去看看那篇大陸人寫的文章(大陸網站相同的文章四處都會出現)

如果你很懶 , 那麼用用我上面介紹的 Open Office Calc ,
開檔 , 另存新檔 , 兩個動作 就可以幫 EXCEL 檔案瘦身了...

2009年3月21日 星期六

什麼是專業倫理道德?

什麼是專業倫理道德?
在 CISA / CISSP / PMP 等等專業證照考試中都有包含專業倫理道德

不過看看最近國內放到新聞台面上的某些專業人士的作為還真稱不上專業

(1)法律專業人士
被告律師將偵查中案件的證人的偵訊光碟內容公告給新聞媒體/社會大眾;
不論這是刑事案件或是民事案件 , 這種作法難道不違法嗎?
如果違法 , 律師仍然這樣作就是知法犯法 , 是專業人士還是訟棍 ?

不要說是甚麼政治迫害案件...
是不是只要加入某某政黨就可以為所欲為?

(2)法律專業人士
聽說某法律系畢業的台大高材生 , 要為人提供法律諮詢服務
專不專業 , 誰知道?

連自己的所作所為是不是洗錢都裝不知道 ? 說自己不知道某些行為算洗錢?
法律的規範是甚麼?
<洗不洗錢 , 國內或許尚未結案 , 但是國外的洗錢防治中心都行文過來了 , 還想要掰說不是洗錢嗎?>

自己都犯法或是對於法條裝不清楚的人 , 要提供甚麼樣的法律諮詢?

(3)醫界人士
在某次縣市長選舉中 , 數位醫界人士 ,
在不是某位當事人的主治醫生的情況下 ;
非法取得 , 並且公開了某位當事人的病歷 ,

<別告訴我那是合法取得, 你的病歷 , 如果不是你本人 , 又不是你的主治醫生 , 然後一狗票阿貓阿狗的醫生都能複製一份出去 ,  然後公開給媒體 , 還要硬掰那是合法的 ?>


(4)教育界人士
這幾天的案例 , n位校長疑似將學生與家長的個人資訊提供給補習班

<就某種程度上來說 , 台灣可能有上千萬人的個資都是透明的 , 因為早就不知道被賣了多少手了...>


這些案例都只不過顯示出台灣在不同的專業領域中有不少老鼠屎敗壞了各個不同專業領域的專業倫理....


有些是基本概念 ,
例如廠商約你在公司以外的咖啡廳談事情 ,
雖然只是一杯不到一百元的咖啡 , 也千萬別讓廠商買單....

古人說:  拿人手短 , 吃人嘴軟

 專業倫理需要專業人士自己去堅守
誰是專業人士 , 你我他各行各業的人都是專業 ;
(誰是食神 , 人人都可以是食神...很冷的補充語)

2009年3月5日 星期四

Yes Man 的四首歌不錯聽


Yes Man 的四首歌不錯聽

又是金楷瑞主演的電影 , Yes Man 是喜劇

那個不是重點 , 重點是電影中女主角唱的四首歌 , 不錯聽

<懶得寫電影介紹 , 反正很多人都寫過了>

金楷瑞的喜劇對半帶有童話意味 , 但是又帶有一點成人特有的無奈
好人不一定有好報 , 是一開始的串場 , 老實本分當宅男也不好 ,
所以一定要給他點打擊 , 打擊再打擊 , ....
(一個頭兩個大 , 他演警察 , 然後結婚不久 , 老婆竟然跟開他們結婚禮車的侏儒出牆而且跑了 , 更慘的事 , 明明是白人夫妻 , 老婆幫他帶綠帽子 , 還幫他生了黑人娃娃 , 然後就跑了)
(這一片 , 他是銀行放款審核人員 , 沒想到老婆也跟他離婚了 , 然後要升官 , 也沒有他的分 , 他只好上婚友網站去四處尋找對象)


然後讓宅男有點機會放開一點 , 再放開一點 , 但是放放放....放過頭了 , 就會有危險 , 
(這一片則是 , 他聽了演講奉行 Yes 主義 , 事事 Yes , 讓自己放開點 , 去學了韓語 , 開小飛機 , 彈吉他 , 對大家都說 Yes , 救助了流浪漢 , 然後.....好事來了 , 他認識了有點無裡頭的女主角 ,
(發現金楷瑞電影中的女主角偏好可愛又有點羞澀 , 但是又很外的女孩子<--有點矛盾的形容詞) ,
用韓語跟裝賽臉的婚紗店員溝通 , 讓婚紗店員可以樂意協助他幫助他朋友的未婚妻辦理婚前對 ,
然後他用吉他救了要跳樓男子的一命 ,
然後 , 又跟女主角無計畫式的到機場 , 看看命運會安排他們搭乘那一個航班到那一個城市去 , 他們就去哪裡玩
 , 他們竟然也玩的高高興興的 , 一切的進展都很美好 , 女主角也愛上男主角想跟男主角同居 ....男主角當然回答 Yes )
再敲回來 ,
(但是女主角發現男主角事事說 Yes , 讓她以為 , 男主角其實沒有那麼在乎她 , 只是不得不說 Yes , 所以很生氣  , .....)

當然最終還是要來個好人有好報的結尾
最後當然是男女主角快快樂樂的在一起

(人生真的能夠有這種單純的快樂嗎? 如果有 , 為什麼這麼多怨偶 , 這麼多離婚的 , 這麼多婚外情....)


不過 Yes Man 的片尾不錯看 , 片尾曲也不錯

2009年2月17日 星期二

班傑明的奇幻旅程 vs 阿甘正傳


看了班傑明的奇幻旅程 , 發現它的敘事風格與故事模式與阿甘正傳有點相似
首先 , 兩者都有一個愛他的媽媽 , 而且不願意放棄故事中的主角 ,
然後呢 , 主角都會愛上一個女孩子 , 但是這個女孩子可能會跟花蝴蝶一般 , 閱人無數 ,...
           不過最終都會回到主角的身邊 , 而且幫主角生下一個孩子
其三 , 主角會碰到一個算是老大似的傢伙 , 帶著主角去增長閱歷與見聞
           阿甘碰到的是他們的班長
           班傑明碰到的是船長 (甚至帶他去體驗女人...)

其四 , 兩者幾乎都可以不用為了柴米油鹽醬醋茶煩惱
           阿甘是因為他的班長幫他投資蘋果電腦
        班傑明是因為繼承了父親的遺產 

兩者的差異是:
                    阿甘一個最最平凡的人在行不平凡的事業 ,
                    班傑明一個最不平凡的人在行平凡的事業

不過好看的是這兩者的故事內容都是未知的 , 沒有看到最後一刻 , 不會知道結局是甚麼
<就是因為不知道結局 , 故事才會吸引人>


後記:
寫完這篇之後 , 才發現兩者的編劇是同一個人 , 難怪會有那種十分好像很熟悉的敘事風格...

2009年2月10日 星期二

Google Earth 5.0 中文部份出現方框 , 無法顯示的解決方式

Google Earth 5.0 中文部份出現方框 , 無法顯示的解決方式
(UBUNTU 8.10)

裝完 Google Earth 5.0 之後 , 一啟動發現選單變成方框 , 無法顯示
解決方式:

(1)確認本機是否已經安裝 Qt4
     否 -> 請安裝 Qt4
     是 -> 繼續下一步

(2)搬移Google Earth 5.0 內附的 Qt4 相關檔案 , 到其他目錄
執行以下指令:
 cd  ~/google-earth
 mv libQtCore.so.4 ~/Desktop
 mv libQtGui.so.4 ~/Desktop
 mv libQtNetwork.so.4 ~/Desktop
 mv libQtWebKit.so.4 ~/Desktop

(假設:
(a) 你的 Google Earth 5.0 是裝在你的使用者目錄下的 google-earth
(b) 我們把檔案暫時搬到你的桌面目錄
)

(3) 重新啟動 Google Earth 5.0
      應該可以正常的看到 選單的中文顯示了

(4) 刪除剛剛搬移的4個檔案

解說:
可能是 因為 Google Earth 內附的 Qt4 有些問題 , 所以我們把 Google Earth 5.0 內附的 Qt4 拿掉 ,
讓他 吃系統的 Qt4就可以了

2009年1月31日 星期六

UBUNTU 8.10 - 解決新增硬碟或外接硬碟沒有資源回收筒問題

UBUNTU 8.10 - 解決新增硬碟或外接硬碟沒有資源回收筒問題

UBUNTU 8.04 / 8.10 在新增外部硬碟時不會自動建立資源回收筒
所以在外接硬碟 , 刪除檔案時會出現訊息 , "無法移動檔案到回收筒"
這樣對某些人來說 , 可能不會有困擾 , 反正刪除了就刪除了
但是有時候人有失手 , 萬一誤刪了就再也救不回來了 ,
所以還是要設定資源回收筒比較保險一點

注意事項: 本篇文章只適用於 格式化為 ex3 , fat32 的硬碟磁區
            如果是格式化 ntfs 的硬碟磁區 , 目前此解決方式無法解決問題
           <我用 USB 隨身碟進行測試發現的結果>

症狀:
新增外接硬碟(包含使用 硬碟分割編輯器 去增加硬碟分割跟格式化)
不會自動新增 資源回收筒

原因:
在外接硬碟沒有 , 回收筒的目錄
為了保險起見 , 還是要先讓檔案可以移動到回收筒之後 , 再決定要不要清除回收筒


解決方式:
開啟終端機 Terminal
輸入以下指令:

cd /media/M500-1
sudo mkdir .Trash-1000
sudo chown demo .Trash-1000

然後移除外接硬碟
重新接上外接硬碟 , 讓 UBUNTU 重新 Auto mount
應該就可以有 資源回收筒 ,

說明:
(a)
M500-1 是你的外接硬碟經過 UBUNTU 自動掛載上去 /media/ 下的名稱 ,
看看你的硬碟名稱為何 , 請修改為你自己機器上的名稱

(b)
sudo chown demo .Trash-1000
demo 是指你目前登入電腦的帳號名稱 , 看看你的帳號是甚麼 , 換掉demo



測試方式:
在外接硬碟 , 透過檔案瀏覽器 ,
EX: 在 /media/M500-1/SUB1 目錄 下
按下滑鼠右鍵 , (新增文件->空白檔案) , 新增一個空檔案 , 然後刪除那個空檔案 ,
看看是否仍然會跳出 "無法移動檔案到回收筒"
如果不會就是成功了 ,

接著可以看看刪除的空檔案是否出現在外接硬碟的 .Trash-1000 裡面的子目錄下
如果是 , 表示資源回收筒手動建立成功
(檔案瀏覽器 , 要在功能表選擇 -> 顯示-> 顯示隱藏檔 , 這樣才會看到 .Trash-1000的目錄)

備註:
(1)沒有必要去修改 /etc/fstab ,  因為沒用 , 會有權限問題 ,
(2)上述作法是單一使用者的作法 , 因為我的電腦都是個人用

2009年1月24日 星期六

專案管理_技術的問題 , 請以技術來解決

看過一些系統開發案 , 專案嚴重延誤 , 問題一堆 ,
有不少的狀況是 PM 完全不尊重公司內部的技術專家 , 聽信外部廠商的說法所造成

(當然 , 公司內部的技術專家 , 要真的熟悉相關的技術 , 了解每一塊的決策會影響後面的那一塊 , 然後需要衍生甚麼樣的問題處理等等)

系統開發專案 , 有時候最基本的問題就是 , 找來的廠商技術有問題 , 觀念有問題 ,
(為什麼會找這樣的廠商過來 ?


 有時候 , 公司的運作 , 是一堆利益問題跟政治問題所組合 ,
 就好像招標的時候 , 完全不提選商要用價格標 , 但是呢,


 如 果經過一堆選商的委員去評分 , 選出的廠商不是上面那些大主管們內定的廠商時 , 大主管們甚至會直接推翻選商的委員的評分結果 , 直接稿個價格限制 , 逼迫被選上的廠商自動棄標 , 然後大主管們也不是採用第二名或是第三名 , 而是搞個內定的廠商(可能是選商委員給 0 分的
 , 用這種玩法 , 你說過來的廠商的成員 , 他的素質會有多高?
)


系統開發專案有問題 , 有不少是根本性的技術問題 ,
但是有時候 , 常常會發現 , 很多PM並不是尋求專家的建議 ,
而是自顧自的 , 用所謂的 Soft Skill  去試著解決廠商因為技術能力而導致的問題

(技術能力的涵蓋:  包含程式語言 ,  工具的使用 , 軟體開發流程的觀念 , 品質的要求等等....)

這個時候 , 你就會發現 , 例如廠商技術能力不足 , 導致可能連 SA文件都出不來 , 或者是交付的程式可能是無法編譯或是執行的 , 或者是因為不熟悉某項特定產品而亂搞一通的

像這類技術問題 , 你只要看到PM不是從技術面去處理 , 而是在作搞定所謂"人"的問題時 ,
那可以掛保證的 , 專案還會繼續出問題下去 ,
因為不對症下藥 , 病是不會好的 ,....

專案管理可以管理許多問題 , 但是絕對沒有聽到說 , 不針對問題的源頭或是問題的核心去處理 ,
然後問題就會消失的


我看過某些系統開發專案 , 在廠商胡搞瞎搞之後 ,
系統還是上線了 , 但是公司的主管卻不敢把它全面的鋪到所有單位去使用 ,
因為廠商的技術有問題 , 寫出來的系統根本撐不住所有單位一起使用 ,
(過了一年多 , 廠商仍然沒有把問題解決 )

這樣的系統是有上了 , 但是只有鋪到一兩個單位去使用 ,
那開發這樣的系統效益何在?



有時候 , 技術問題 , 要根據專家的意見 ,
有時候 , 專家意見是不得修改的與忽略的 ,

技術問題絕對不是你找 5 個臭皮匠可以湊成一個諸葛亮 ,
碰到技術問題 , 如果你不是聽從專家意見 ,
而是在搞多數決 , 搞民主投票方式的話 ,
絕對可以保證你的系統問題叢生~~~

(例如 , 在開發 Web 系統時 , 找幾個搞 AS400  , 只會 COBOL的專案成員 , 跟一個熟悉 Web 開發技術的專案成員(專家)人(EX: JSP/ .NET) 進行多數決  , 去討論 Web 系統的架構以及可行的技術)


(如果你碰到 PM 這樣搞的 , 就要留意了 ,
 開發軟體系統 ,  技術問題不以技術解  ?

看過不少這種例子 , 一堆不懂技術的人在旁邊說風涼話 , 作建議 , 說沒關係 , 沒影響.....等等不富責任的話 , 最後有問題的時候 , 這些人絕對不會負責 , 一定是去找別人出來死....


基本這種對自己不在行的領域喜歡隨便亂說話的人都是不負責任的人 ,
這種人 ,  才是最不希望專案完成 , 系統上線的人 ,


另一種人(技術專家) , 是在專案一開始 , 已經在考慮專案要怎麼上線 , 怎麼測試 , 怎麼運作 , 怎樣問題會最少等等 ,  這種人多半會在發現問題的當下 , 立刻反應問題 , 並且要求或阻止廠商繼續讓問題擴大 ,
但是常常 , 這種人常常會被打成是 不希望專案完成 , 系統上線的人.... )



但是經驗可以發現 , 系統開發專案  , 當你不以"技術"解決"技術問題"時  , 你的系統大概也差不多該完了...