google code-beautifer

星期六, 3月 07, 2009

Linux 的perl開發環境

有個朋友問起開發軟體用Python 跟Perl 的比較,從我的觀點來看:

1.作研究的人沒有什麼挑程式語言的條件,往往是事情複雜到需要整合好幾個領域,不可能一個人用一個程式語言從頭搞到底,那樣東西還沒做出來你就被別人發表的成果淘汰了。所以你需要什麼樣的武器(通常是以某個語言寫出來的程式庫)來處理某個次領域的事情,你就用那個語言去做基本的處理及呼叫程式庫。再用其他或相同的語言把中間過程串起來。像我本身,約莫是平均一年需要學一個新的程式語言。

2. 光比較Python 跟Perl :為了處理web 的資料,其實我一開始是從Perl 學起,那時web mining programming還沒多少人知道該怎麼作才好。 Perl 寫短程式實在很精簡,但是可閱讀性實在是太差,我覺得比Lisp 還要差,我看自己以前寫的 perl碼,當時要是沒有詳細註解的話,要花很大的力氣。但是為了精簡程式選perl,卻要花更多的時間去詳細註解的話,實在是自相矛盾的作法,所以現在有的選的話,我會以python 優先。其實不只是對perl 而言如此,對lisp 也是一樣。

下面就是從這樣觀點來看perl 的開發環境

開發介面平台


不知道是不是大家比較少用perl 開發大一點的程式,相對於python,perl 的開發介面平台在 inux 上比較少。
我現在只知道emacs ,跟Eclipse 。另外有一個在winodws 下用Pascal 寫的Open Perl IDE,也許可以用Lzaurus/free pascal 來在Linux 下編過,不過我還沒時間試。

Eclipse


Eclipse 的壞處就是笨重,用這麼肥的IDE 想來開發輕薄短小的perl實在不太有道理。連在AMD雙核心 4GB Ram 的機器下跑都有點小遲鈍,而且Eclipse 的笨重不只是Eclipse 本身體積肥而已,連寫個小程式都很麻煩:
首先要開一個計劃,然後加上計劃下的程式。假如你之前在外頭寫好了幾個部份片斷程式,恭喜你,片斷程式要匯進去計劃有夠麻煩的,開個不同檔名再剪貼文字過去可能還比較方便。不過在emacs 上的ECB 也有那邊的問題,有時得忍受一下交互使用。要是覺得連去巷口市場買菜都得騎隻恐龍不是什麼大不了的事的話,那Eclipse 這隻大恐龍倒是上天下海無所不包。

Eclipse 的介面,可參考我後續的介紹,

Eclipse 的perl 外掛叫ERIC,目前有兩大版本:0.5 穩定版跟0.6的測試版,我是用0.6版,沒什麼問題。
安裝EPIC這個外掛的步驟在不同版本會有稍許不同,在mandriva 下的eclipse3.4 版是這樣:
啟動Eclipse後在主選單的Help的下拉式選單,選擇Software Updates,然後在Available software的分頁下選擇Add site,在Location 的URL視窗鍵入:
http://e-p-i-c.sf.net/updates/testing
選Find and Updates後,建一個新的名稱(如Eric)給EPIC,然後按下finish後再去勾選這個 Pac外掛做update

把EPIC 外掛裝上後。在主選單file ->new->other
下就會看到Perl型別的選項。先開新一個計劃之後,再依需要慢慢把程式檔加進去。

我試過了Eclipse 的EPIC ,發現所有的變數都要用my 宣告成當地變數,不然eclispe會給你一堆紅色錯誤警告。但要是這樣作的話,在Emacs 下就沒辦法被ECB辨識成變數來顯示,IDE效果就打了折扣。

我最喜歡的一點是在Eclipse 下,只要把游標指到某行的某變數下,在其他行的該變數也會用不同顏色顯示出來,這點在除蟲時很方便。不過這好像是透過全文檢索,所以連不是變數的像標點或字串也行,這讓我懷疑是不是了Eclipse 反應遲鈍的原因之一。

Eamcs/ECB


ECB 來寫C/html 是很棒的IDE 。可是對於那些semantic (ECB 賴以解析程式碼的模組)支援很有限的語言如 perl ,表現就只是差強人意。Emacs 的syntax highlight 是沒有問題的,但是ECB左側變數列表會不完整,得用Meta-x!etags *.pl幫現在的perl程式碼編符號表,直接改emacs 裡的程式碼而不重整符號表是不成的,那些在 my 後面直接宣告而且給定起始值的區域變數都顯示不出來。所以要跟eclipse交互使用環境會有一點問題。

結論


兩個IDE 都各有優缺點,我現在是一頁就能看完的程式用emacs 來處理,超過一頁再來用eclipse發展。

延伸閱讀


用Emacs 開發C 程式

星期二, 2月 24, 2009

用 Graphviz 畫資料庫設計圖

graphviz 的介紹見,用 Graphviz 畫工程科學說明圖

以一般設計資料庫流程,第一階段畫 ER/EER diagram,第二階段畫relation tables 跟 key constraints,要找免費的工具還真不簡單。大多數最多也只是提供免費試用而已,我也用過dia 跟 xfig 來畫過,總覺得少那麼一點。後來還是覺得用graphviz 來畫最方便。

以我實作EER model 的情況,除了weak entity 的total participation 雙線,跟subclass 的關聯線外。幾乎可以直接全部畫出來,其實可以自行加入向量圖形,不過我很懶。在時間有限前提下,用個近似的方法就交差了。要是有人能把這兩個向量圖加入graphviz ,會是功德無量。

下面用 18分大學的體系為例,用graphviz 來畫一個資料庫設計的EER diagram。既然是18分大學,訛誤在所難免。我故意搞了些手腳,好讓那些懶惰的老師或學生會踩到地雷,但懂的人一眼就看穿。好事者請不要公佈答案,不然就不好玩了。


除了EER model ,畫relation table 也沒啥大問題,唯一的地方是標示composite key 的部份。我是用套疊格子的技巧作出來。其實這些小地方不一定要這樣作,我是依據近年美國資料庫教科書首選Elmasri的fundamentals of Database Systems用的記號為依歸,算是遵循標準吧!這樣一般大學生不用我解釋就可以看得懂我的設計。

下面用海角n億洗錢的體系為例,用graphviz 來畫relation table 設計

我想面對犯罪可以為一己之私,可以用泛政治的理由拉一堆人來替自己洗錢掩護,檢警單位應要學學怎樣用自由軟體來彙整日益複雜的犯罪資料。

一般資料庫先畫ER diagram,正規化Schema後再寫SQL。不過有個java 工具sql2dot是可以把簡單 SQL 檔轉成 dot 語言,用法是
java -jar sql2dot.jar 我的sql檔名
我試了一下,語法解析不夠彈性,有些情況沒辦法解析出來。不過後來又看到一些其他的工具sql 轉dot的工具,等以後試了再來紀錄心得。

用 Graphviz 畫工程科學說明圖

一般而言,工程科學說明圖是網路/樹狀結構但沒有很強的流程方向性的圖我用graphivz來畫,圖是網路/樹狀結構而且有很強的資料流程方向性用dia來畫。其他的我才用xfig來畫。

我覺得graphviz 最大的好處是自動編排。只要用文字編輯器把這些節點,聯接,文字相互關係...的.dot 描述檔寫好後。graphivz編譯會自動產生編排好的圖形。不用拿滑鼠在螢幕上移來移去。這在設計複雜的關聯圖形時很重要,而且這些文字大部可以在後面的流程回收。作過一次標準資料庫設計就知道了。剛開始學習要點時間,但是對理工科的人而言長期的回收絕對划算。

Graphviz 編譯命令長的像這樣子
dot -Tpng foo.sql.dot -o foo.png
,除了png 外,也可以選pdf,ps, gif 之類的格式,或是不同風格的圖形編排,輸出成png 或ps 後可以在openoffice 文件裡當插圖用,用中文的話要記得用utf8輸入即可。

graphviz跟emacs 整合的話,工作會更方便,用emacs 編完Graphviz 的.dot
描述檔之後,直接C-c C-c 編譯。(這跟python是一樣的)C-c C-p 直接在 emacs裡預覽輸出圖形。下圖是在emacs裡預覽的結果。

安裝其實很簡單,在winodws 上也有 wingraphviz 可以用。我試過跟某個用winodws平台的人共同用graphviz 溝通開發資料庫,沒有問題。應用實例後面會另文介紹。

參考
用 Graphviz 畫資料庫設計圖

星期日, 2月 22, 2009

compiz-fusion下視窗佈景及標題欄主題設定

新裝的Mandriva 2009.0預設視窗在DVI 還清楚,但是在SOYO 24" LCD 的Dsub端子看不清視窗標半透明題欄的文字,我試了幾個gtk 的佈景都有問題,唯一可用的又醜的要死,而且視窗shade收起的動作不能用了,所以視窗裝飾要換。

所以執行CompizConfig Settings Manager (ccsm) :
到effects的Window Decoration 的 plugin 的 Command選項下,把compiz-window-decorator換成emerald 或gtk-window-decorator
但其實compiz-window-decorator預設就是用 gtk-window-decorator,gtk-window-decorator 可以使用Cairo Window Decorations或Metacity Window Decorations,預設就是用 Metacity 。

這些細節平常是藏起來的,但是可以用 gconf-editor(組態編譯器) 去改gwd(GTKWindowDecorator)
apps -> gwd
有組態編譯器可以用的話就不要用 gconfpref ,有些gnome選項會看不到(比如geditor-2的編碼)。
我初步試驗的結果,把Metacity Window Decorations關掉(也就是應該會切換成Cairo Window Decorations),但還是沒辦法啟動視窗shade收起的動作,所以最後還是得乖乖用emerald 來管視窗裝飾才成。emerald theme manager 一次不能預覽太多不同theme,卡住的話把emerald theme manager 關掉再來即可。

視窗裝飾Blue_Satin的陰影稍多了些,Rezlooks-Graphite-1pxb 的設計很適合工作,可惜我不喜歡他的配色,一時又沒時間把標題欄位的石墨色改掉,所以我最後選 IR Ora Blue(視窗內部元件外觀)跟Crystal-ICE的視窗裝飾,
要是不覺得右上角放大縮小圖像太小的話,Compiz-gilouche也不錯。

延伸閱讀
http://wiki.compiz-fusion.org/Decorators/Emerald

星期日, 3月 09, 2008

Gnome 桌面與設定

Gnome 跟 KDE是 Linux 上兩大桌面系統,我認為也許在某些方面實作上,Gnome比不上KDE ,但整體架構的前瞻性會讓Gnome 慢慢勝出。由昇陽的選擇可以作一個指標。Gnomeu 之前就跟alsa一樣有一個問題:一直改架構,到近期才穩定下來。在正體中文的翻譯方面,香港的網友出了不少力,可是一直未見台灣社會的重視,(或是說台灣社會漠視整體開放軟體的努力,對於香港主導的努力更漠視)。我希望從自己作起,一點一滴的把使用說明建起來,建立雙贏的基礎。

Gnome 桌面物件


Gnome 桌面包括了下列物件

  • 檔案管理員(File Manager) Nautilus 是整合的檔案管理員,並沒有特別在桌面顯示出來,但是桌面跟應用程式打開某位址的預設檔案管理員就是Nautilus
  • 面板(Panel):GNOME 桌面中的一個長條區域,可以配置各式面板物件,供各種存取系統/應用程式與功能表。可以滑鼠來使用。面板物件包括了:

    • 小型應用程式(Applet) ,互動式的小型應用程式,例如 音量調整,面板中預設會有下列 Applet來顯示對應的系統結構:
      功能表
      工作區顯示切換
      後面會再解釋對應的系統結構
    • 動作按鈕,執行特定gnome-desktop動作,如按一下"登出"此按鈕以結束gnome-desktop工作行程。
    • 啟動器,可以啟動一般的應用程式、執行指令或開啟檔案
    • 功能表(Menu) 列出系統裡能在 GNOME 桌面執行的大部份功能,主功能表的頂層除了包括「應用程式」功能表,可以存取標準應用程式及配置幾乎所有的選項外,頂層同時也包括了gnome-desktop命令的功能列表跟其他功能列表:
      「位置」功能列表:存取特定媒體位置上的檔案
      「系統」功能列表:存取系統指令功能表。
      在桌面上顯示功能表,有別於其他桌面系統,對GNOME 而言,這只是一個面板物件,所以可以把多個功能表顯示Applet加到面板上,但是都是對應到同一個內部功能表系統結構。Mandriva 提供三種風格:Gnome, KDE, Mandriva,功能表的排列顯示會有少許不同
    • 抽屜(Drawer)把一些同時要用的程式合在一起,可供一次同時開啟

  • 工作區(workspace)
    可將 GNOME 桌面分割成個別的工作區。可以指定 GNOME 桌面上工作區的數目,一次只能顯示一個工作區。我們可以指定某程式視窗在某工作區中工作。也可以切換至其他工作區,達成虛擬桌面的功能。可以透過面板物件的工作區顯示切換applet來預覽現在位於的工作區
  • 視窗(window) 顯示程式的內容,只有執行程式時才會顯示
  • 桌面(Desktop)位於所有其他元件的後方。除了提供顯示視窗外,我們可以將物件拖放到桌
    面上,如檔案瀏覽器的url,以供快速存取常用的檔案與目錄,或是某面板物件,以供快速啟動常用的應用程式。
  • 控制中心(Control center) 這個設定Gnome 桌面物件,並沒有在桌面特別顯示出來

要設置桌面物件,可以在桌面物件圖示上面按滑鼠右鍵來叫出功能選單。

設定桌面應用程式尺寸



把特定應用程式視窗預設尺寸放大,基本上有兩個方式:在x視窗下設定或GNOME 桌面上設定。
考量到因為gnome-terminal 有可能會被其他文字命令叫用,所以我選擇在GNOME 桌面上的終端機啟動器裡設定。

終端機啟動的視窗放大(100x50)預設尺寸設定屬性command :
gnome-terminal --geometry=100x50+150+10

emacs 反正都是不是從GNOME 桌面面板就是從視窗程式(如krusader)叫用
所以就直接在在x視窗下設定,把這一行加入~/.Xdefaults:

emacs-gtk.geometry: 128x50

為什麼不是emacs.geometry: 128x50 ? 因為我在GNOME 桌面用的是emacs-gtk,emacs-gtk這不是叫用emacs 的script ,而是單獨編譯的程式,所以是針對emacs-gtk指定尺寸

設定位置捷徑


gnome 桌面上的"位置"如何設定

一些炫目的東西


Gnome 可以跑 Compiz 大部分的人都知道了。此外Gnome 也可以裝 screenlets去摹擬MacOS X上的 Widget或是Windows裡的Gadgets。不過真有這個必要嘛?Widget這樣的概念其實在gnome 裡用 appelet就可以做出來了,以生產力的觀點,screenlets 不會比 appelet 更有效率。我自己Applet 是開的蠻多的,在xorg出的ATI驅動下跑也還好,但可以感覺出跑compiz 比純跑x視窗慢。而且不管是Mac/windows/Linux ,我都聽到不少說法是 Widget把系統效能拖下水,比較compiz 裡視窗縮途預覽提高切換生產力的功能,我個人覺得目前screenlets是雞肋。不過喜歡新奇的人沒事是可以試試,有現成的rpm包好了。裝完screenlets跟指定好Widget,再把Compiz 裡desktop效果中的Widget Layer打開

提到Widget/Compiz這些炫字,就免不了有人會問有沒有像 MacOS X 的dock?有的。之前gnome-dock 的計劃好像死掉,可是有新的Avant Window Navigator(AWN)跟kiba 。我稍微玩了一下AWN ,覺得炫之外並沒有太多提高生產力的功能,就拿掉了。有些人覺得桌面最好像遊樂場一樣的,可以試試kiba。比Mac OS X的還炫。

延伸閱讀