google code-beautifer

星期二, 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