2009年12月21日 星期一

Gantt chart(甘特圖) on Linux

甘特圖(Gantt chart)是一種描述各項目隨時間開始與結束的一種表達方式,專案管理方面的人可能對於這個東西比較熟悉。我第一次聽過甘特圖是幫老闆修改氣象局計畫細節的時候用的。
很幸運瀏覽Wekey-wiki時發現原來甘特圖已經被透過GanttProject計畫用java寫成一個跨平台的軟體。他是自由軟體,但並不是用GPL來宣告;她上面也聲明可以修改他的原始碼,也可以修改後作商業用途,不過找了一下還是沒看到source code。如果只關心binary的話,我們可以到這裡下載便於安裝GanntProject的版本,或是直接下載最新的版本(2.0.10):
wget -c http://ganttproject.googlecode.com/files/ganttproject-2.0.10.zip
壓縮後放到任何地方都可以,可以發現他是靠著script來啟動ganttproject的。由於java執行的方式跟環境比較特殊,用script來幫助執行java程式是非常常見的手法。我們來看看他的script:

這已經算是寫得很棒的script了!不過我還是想作一些修改:

我只是簡化了一些變數的宣告以及java環境的測試。不過很可惜的,由於作者啟動main方法需要讀取一個xml檔,這種呼叫方式我無法不切換目錄(cd $GP_HOME那行)來完成啟動Main class,而這也是我當初要改這個script的最主要原因。倘若所有環境都包在jar裡面,就不用額外宣告classpath,其實是減輕使用者許多負擔的。
作個軟連結,這個程式就可以上線啦!
chmod +x /opt/ganttproject-2.0.10/ganttproject.sh
ln -s /opt/ganttproject-2.0.10/ganttproject.sh /usr/bin/Ganttproject
這樣就可以直接呼叫Ganttproject來使用囉!
啟動GanttProject!!
新增一個專案來玩玩(其實我根本不知道怎麼用!!)
設定一些可以參考的資訊在上面。
拖曳以設定duration。
可以拖曳進度(黑色的bar)
也可以設定milestone以得知進度狀況。
上面的flash教學是用比較舊版的ganttproject所錄製下來的,我照著教學步驟去作,發現新版根本無法像舊版這樣快樂的使用拖曳來變化duration。
照著flash範例教學所做出來的甘特圖!(真不是普通的醜@_@)
把辛苦的成果匯出看看!(果然是WYSIWYG的醜!!!)

2009年12月17日 星期四

『中央』研究院

今天我跟一個中央畢業的同事聊到:
我: 哇!你們中央的人口還真多耶!我看10的研究助理有8個都是中央的!
同事:呵呵,對阿...
我: 而且一堆台大的研究生來這邊也都是中央畢業的耶!這裡真的是中央的天下耶!
同事:(淡淡貌)呵呵,不然怎麼叫『中央』研究院呢!
我: ....(想想還真有道理!)

2009年12月16日 星期三

SUN的電子證照

由於novell有寄給我電子證照,所以我一直以為所有的廠商都有提供電子證照;日前我寫信去sun總部問,總算遲遲的給了一封回信之後便石沉大海:

說要轉交給合適的處理人員,竟然就這樣沒有下文...真是太糟糕了,我就算不是大宗客戶,但還是客戶阿!後來我找上昇陽教育訓練中心,總算得到一個有或沒有的答覆:

所以如果您跟我一樣再找sun的電子證照,至少目前為止sun都沒有提供電子證書的喔!

2009年12月9日 星期三

Google Chrome beta release!!!

等待已久的Chrome for Linux終於釋出beta版了!!先前使用open source的chromine仍然還有許多問題,其中最為人詬病的就是flash支援的極差。Google釋出beta版大家可是睜大了眼睛在看呢!請各位看官到http://tools.google.com/chrome/?hl=zh-TW下載,或是到http://www.google.com/chrome/intl/zh-TW/w00t.html欣賞一下世界各地勞苦功高的開發人員開發chrome for linux的經過~

假設你常用的是firefox,第一次啟動chrome時會匯入firefox的所有設定,包含書籤、密碼、cache等等,非常貼心。

我迫不及待的想拿他來測試flash!!最好的方法就是拿一個swf來測試啦!玩起音速小子,真是超順暢的啦!!

那麼能不能偵測到我的JRE呢?測試看看便知道!

可以偵測到耶!真是方便!

如果預設的字型跟locale以及coding都不適合的話,也很方便做細部調整!

等待各位去發覺的extension!!

還有很多佈景主題喔!不過,當然沒有firefox多就是了!

目前為止還沒發現太多問題,我想請大家依起共襄盛舉測試beta版的chrome for linux,畢竟大家真的等了好久好久!!

我最常用的幾個extension!跟大家分享!!

我強力推薦使用chrome的原因是,chrome非常的輕巧,她可以一次開20多個分頁不會當機,然後關閉再開啟的這些分頁也很快的起來;相較之下,firefox就非常笨重且耗資源,光是開四個分頁cpu loading就超過50%!基於效率跟安全性,我會選擇google chrome。

延伸閱讀:
Chromium for Linux

2009年11月23日 星期一

日本中國

如果我說中國是日本的一部份。中國都該稱為日本中國,二次大戰沒有美國,中國早就是日本的領土,中國人你們做何感想?

清單上沒有我的國家,有一個歧視我國的字眼出現,我若選了就是自取其辱;我不像國民黨員,不會做這種不知廉恥的羞辱國家的行徑。

一個玩弄民族主義、堅持共產主義的貪婪政權,自以為經濟強大,殊不知自己人民的道德與操守跟經濟完全不能相提並論;原本要下載RHEL5來測試的,操你媽的中國,老子拒用Redhat Linux!

2009年11月17日 星期二

ctime, atime與mtime釋疑

每個檔案都有屬性及內容。除了檔案內容很重要外,時間標記也非常重要--系統管理員可以藉由時間標記進行備份、例行性檢查;使用者可以從時間標記找出重要的檔案,硬碟的I/O也依靠時間標記(time flag)來進行處理。

UNIX系統將時間標記分成三種:

  1. atime(Access time):檔案上次被讀取的時間。
  2. ctime(status Change time):檔案的屬性或內容上次被修改的時間。
  3. mtime(Modified time):檔案的內容上次被修改的時間。

我們可以用一個很簡單的script來印證這些東西。

姑且把他命名為showTime.sh

1. 假設我們建立一個新檔:

touch newFile
執行showTime.sh,你會發現三種時間是相同的:
ctime: Nov 17 23:14
atime: Nov 17 23:14
mtime: Nov 17 23:14
2. 隔一分鐘後,寫入一些東西到檔案裡面:
echo "1st modified" > newFile
結果發現:
ctime: Nov 17 23:15
atime: Nov 17 23:14
mtime: Nov 17 23:15
3. 再隔一分鐘後,讀取這個檔案但不更動內容:
cat newFile
結果發現:
ctime: Nov 17 23:15
atime: Nov 17 23:16
mtime: Nov 17 23:15
4. 在隔一分鐘,僅修改屬性:
chmod g+wx newFile
結果發現:
ctime: Nov 17 23:17
atime: Nov 17 23:16
mtime: Nov 17 23:15

從這個lab裡我們可以得到以下結論:

  • ls -l所列出的長資訊,該時間是mtime。
  • 如果利用touch某檔案,則三種時間屬性均被更新。
  • 如果你修改了某一檔案內容,則ctime與mtime會更新。
  • 如果某檔案僅被讀取或另存新檔,則只有atime會被改變。
  • 如果你只改變檔案屬性(如權限、檔名、所有人或是suid、acl、chattr等),則只有ctime被更新。
  • atime相較之下是最常變動的時間標記,可以將之關閉以增進I/O,特別是多人多工,小檔案多以及laptop環境。filesystem設定裡可以增加noatime屬性,或是chattr +A固定住atime(chattr僅適用於ext2/3/4系列的filesystem)

2009年11月12日 星期四

linux上的pdf合併-刪除-旋轉-編輯-加密-破解密碼筆記

PDF檔案格式是目前最重要的檔案格式之一,因為她可以確實保留住檔案的格式,包含字型以及圖形顏色、比例,並且提供解析度極高的列印效果。本文僅就最常用的合併、拆解、旋轉、加解密,以及簡單的編輯功能作筆記。

pdftk(pdf toolkit)是一套可以拆解、合併pdf的超實用小工具,還可以進行加解密,頁面旋轉、解出metedata,書籤、資料欄位等非常多專業功能!解決了往常只有Adobe Acrobat Professional才能使用的功能。隨著pdf越來越普及,字型跟格式都越來越要求跟在不同平台下有完全相同的呈現方式,我們確實是需要學習這樣的實用工具。更棒的是,他是開放原始碼並且以GPL授權的軟體,在許多linux上都是可以直接安裝的,太方便了!
以下我僅翻譯網頁中的範例,在加上自己的註解作為筆記。

  1. 合併多個pdf檔:
    pdftk 1.pdf 2.pdf 3.pdf cat output 123.pdf
  2. 從數個pdf檔取出某幾頁並合併成另一個檔案:
    pdftk A=1.pdf B=2.pdf cat A1-7odd B2-endeven output combined.pdf
    取出1.pdf的1,3,5,7頁跟2.pdf的2~最末頁,合併成combined.pdf
  3. 頁面旋轉:
    pdftk src.pdf cat 1E 2-endoddW 2-endevenS output.pdf
    第一頁順時針旋轉90度,之後的奇數頁逆時針90度,偶數頁轉180度。
    其中,E=R(right), S=D(down), W=L(left),當然也可以ESW跟RDL混用。
  4. 整份文件上下顛倒:
    如上,其實就是使用D或S參數:
    pdftk src.pdf cat 1-endS output rotated.pdf
  5. 加密pdf檔案:
    pdftk預設的加密強度是128bits,範例如下:
    pdftk plane.pdf output encypt.pdf owner_pw 加密密碼
    另一個強度較小的為40bits,他可以節省不小檔案大小:
    pdftk plane.pdf output encrypt.pdf owner_pw 加密密碼 encrypt_40bit
  6. 加密檔案其實只是限制你不能修改某些受限的部份,如果要求輸入密碼才能開啟這份pdf檔:
    pdftk encrypt.pdf output lock-encrypt.pdf user_pw 使用者密碼
  7. 解密檔案:
    pdftk encrypt.pdf input_pw 加密密碼 output decrypt.pdf
  8. 檔案加密還為了防止他人複製、修改及列印內容。要允許使用者可以列印:
    pdftk plane.pdf output encrypt.pdf owner_pw 加密密碼 user_pw 使用者密碼 allow printing
    允許的動作如下:
    1. Printing

      高品質列印
    2. DegradedPrinting

      低品質列印
    3. ModifyContents

      允許修改內容(包含架構)
    4. Assembly

      僅允許修改架構
    5. CopyContents

      Also allows ScreenReaders
    6. ScreenReaders

      ...這個不是很懂
    7. ModifyAnnotations

      可修改註解
    8. FillIn

      ...這個不是很懂
    9. AllFeatures

      以上所有的options全都開放。
  9. 合併兩個檔案成一個為加密的檔;其中一個檔為加密檔案:
    pdftk A=encrypt.pdf B=plane.pdf input_pw A=加密密碼 cat A B output combined.pdf
  10. (少用)若pdf的page串流有經過壓縮,則會無法修改pdf code。利用uncompress來解壓縮:
    pdftk src.pdf output plane.pdf uncompress
    同理,你也可以下compress指令來壓縮。
  11. 將pdf檔每一頁獨立存成個別的pdf檔:利用burst指令
    pdftk large.pdf burst
    他會在當前目錄產生一個doc_data.txt的log檔作為紀錄。
  12. (少用)修復資料串流長度以及XREF table:
    pdftk broken.pdf output fixed.pdf
  13. (少用)加入浮水印:
    pdftk contents.pdf background Watermark.pdf output contents_WM.pdf
    pdftk contents.pdf stamp Watermark.pdf output contents_WM.pdf
    從指令上也能看出是否要讓浮水印蓋過圖片,細節上還請參考Lloyd神人的在 PDF 上加浮水印
  14. 印出pdf檔裡所有的metedata(就是書籤、頁籤、所有屬性等等):
    pdftk A.pdf dump_data output report.txt

事實上還有更多細節的功能,不過礙於自己也不是很懂,節錄這些常用的功能應該就非常足夠。另外,關於PDF密碼的一些概念,這裡作一些簡單的介紹。pdf的「密碼」大致兩種類型,一種叫Document-open password,另一種則是Permission password。Document-open password是開啟這個pdf檔所需要的密碼,跟使用者比較相關,也稱之為user_pw;Permission password比較像是administrator/owner的密碼,只有所有人才能修改裡面的內容以及關鍵屬性,又稱之為owner_pw。在pdf 1.4以及更早的時代(也就是acrobat 5.0),加密強度僅40bits;到了現在強度已經到128bits;到了Acrobat 9.0以後,導入了AES加密演算法之後,加密強度已經高達256bits,不過pdftk還不支援這麼高的強度;就算支援,做雜湊加密跟解密的時間也會很久。

其實你還可以找到pdftk的gui版本--GUI for pdftk,該作者也大方的提供了各種不同版本給各種作業系統使用,不過他所使用的函式庫實在是太舊了,就算我用軟連結仿造一個他要的版本給他,在執行上仍會有macro mismatch的錯誤,反正pdktk幾乎是無敵的,我也就不理會是否有圖形介面了。

在Windows下有著名的軟體:PDF password recovery--能破解pdf密碼的障礙,那麼在linux底下呢?

pdfcrack是一套基於GPL的開放原始碼的程式,她自動偵測加密長度,並且用內建字典逐個測試。破解密碼時間的長短仰賴於cpu的能力。sourseforge僅提供原始碼,不過別擔心,編譯一定會成功的,只要你有裝gcc的話。


另一個方法是使用wine去模擬windows下破解pdf密碼的軟體。我以pdf password remover做測試,並且利用pdftk隨便加密一個pdf來試驗,發現雖然她似乎能很快的
產生一個乾淨的pdf檔,但是我的pdf內容卻全部被清空!不知道是wine的原因還是如何,總是這看來不太成功。

另一個解決方案則是GuaPDF。GuaPDF這間公司提供了Demo, Local Quad, Distributed以及UNLIMITED四種版本,包含solaris,linux,windows,macos四種平台。Demo版本是免費使用的,如果你的顯示卡是nvidia的晶片且安裝了cuda驅動程式,解密速度可以比一般僅用cpu功能的電腦快上七倍。

linux Demo
MacOS Demo(Intel)
Solaris Demo
Solaris x86 Demo



利用GuaPDF能快速的產生一個未經加密的pdf檔,解密之後用Acrobat reader可能會有一些錯誤訊息,這是很正常的。


但是畢竟是demo版,您可能會遇到下列錯訊息:

  Guaranteed PDF Decrypter v. 3.1 (freeware DEMO version) - CPU version
 (c) PSW-soft, 2000-09, by P. Semjanov, S. Lysak. http://www.guapdf.com
 This product includes software developed by the OpenSSL Project
 for use in the OpenSSL Toolkit. (http://www.openssl.org/)

'Corring, Kay, JP 2001, slab window Argentina.pdf' is the uncompressed document with 40-bit RC4 encryption
This document has no user password, only restrictions present

Key found! (exact value is  7F 7A AC E3 FC)
Would you like to decrypt it now?y
Decryption in progress, please wait...
  0% complete
Warning: Demo limitation reached in line 430
Your file is 100% supported by GuaPDF and decryption is guaranteed, but
demo limitation was reached and file was not fully decrypted and saved as
'Corring, Kay, JP 2001, slab window Argentina.decrypted.pdf'.
It may contain only few (or zero) readable pages and/or produce any error messages.
Please get the full version to correctly decrypt this file.
這是因為demo版限制只能用在430行以內的pdf檔,只好依照需求去跟他買羅~

所以現在我可以用pdftk來任意整理我的pdf文件,GuaPDF來克服某些學術檔案無法列印或複製的問題。

如果要編輯pdf檔案本身,除了要有好工具之外,還需要會一些pdf的語法,這就超過了筆者的能力範圍;不過簡易的修改pdf,仍然可以透過pdfedit這個小程式來幫忙:


pdfedit可以從套件庫裡直接安裝喔!建議閱讀官方網站提供的閱讀文件。如此一來,編修pdf檔時就不需要用vbox開一個windows又使用盜版軟體了!