google code-beautifer

星期四, 12月 31, 2009

讓Intel CPU 自動依需要調整頻率

請先參考
使用AMD Cool-n-Quiet 省電模式

但是在/etc/modprobe.preload.d/
AMD 系統用的設定是:
powernow-k8
acpi-cpufreq
cpufreq_performance
cpufreq_powersave
cpufreq_conservative
cpufreq_ondemand

Intel CPU把powernow-k8換成acpi-cpufreq就可以了

補充一點:一開始預設是performance,依慣例把他調成ondemand切到自動模式的話用:
echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

星期日, 12月 20, 2009

pulseaudio 錄音:針對skype/ intel hda及相關晶片問題

假如你是用snd_hda_intel 而且pulseaudio 錄音有問題,你可以檢查看看是不是alsa設置的問題

很多hda_intel 晶片需要給核心下額外參數,假定你只有一個音效卡,這點可以用下面命令檢查
cat /proc/asound/card0/codec#0 | grep -i codec
請參考
http://www.kernel.org/doc/Documentation/sound/alsa/HD-Audio-Models.txt

但是有一些新的codec不在上表,比如Dell vostro 1520/1720或類似用IDT ID 76d5晶片的
在https://bugs.launchpad.net/ubuntu/+source/linux/+bug/386858
討論上說對這個問題ubuntu要升級alsa 1.0.16 ,而且在給核心下參數。可是Mandriva 看來都已經比上面討論的版本要新了,我在一臺裝mandriva 2009.1 (kernel 是2.6.29.6 alsa 是1.0.19-1)的Dell Vostro 1520 上試的結果,換過/etc/modprobe.conf 加入這一行
options snd-hda-intel model=dell-s14
重開就沒問題了(用model=dell-m6參數是不會成功的),雖然內建mic 還是有問題,而且插上耳機內建喇叭也不會靜音,不過至少新版skype現在用外接mic 可以正常工作了。對一般人差不多夠用了。反正Mandriva 2010 出了,用了新版的kernel 跟alsa ,等升級我再試過。Skype 要 2.1.0.47以後的版本才支援pulseaudio,沒有powerpack的人可以到http://mib.pianetalinux.org/mib/fr/home/32-mib-rpms/414-skype-21047.html
下載。

pulseaudio這個問題其實不只出在snd_hda_intel,有很多錄音晶片(包括EMU10k) 有類似問題,此外,有很多音效軟體還不支援pulseaudio,還得給dbus 設定打個洞給特定音效卡只使用alsa錄音,那個搞起來真的就麻煩了,現在我用外接mic是可以給Audacity 錄音,選alsa pulse的話雜訊大到不能接受,選alsa hw(0,0)的話雜訊是可以接受,但CPU 用量飆到100%,錄出來像打嗝一樣不能聽。要並存的話還有一番要修補的。

結論:pulseaudio 也許是未來的主流,但是過渡期還有一段好痛苦的

參考
http://pulseaudio.org/wiki/BrokenSoundDrivers

星期五, 11月 06, 2009

ispell 與中文環境emacs

中文emacs使用者可能會遇到一個問題:環境是設好了可以用中文。但是用英文打字了半天想要作一下拼字檢查,卻發現錯誤訊息:"No Word lists can be found for language zh_TW",因為找不到對應語言環境的中文字典檔。

要避免這問題,可以下達
M-x ispell-change-dictionary
再指定要用的字典,比如說美式英語是en_US 。或者是在.eamcs 強迫設定變數 ispell-dictionary:
(setq ispell-dictionary "en-US")

ispell 支援中文拼字檢查的可能性


ispell 支援多國語言,但是沒有中文。他的支援語言語言清單設定在變數
ispell-dictionary-alist
裡面沒有中文。只要去看了他的編排方式,就知道至不是很適合中文這種字數是
上萬的語言。舉兩個例子:

("en_US" "[[:alpha:]]" "[^[:alpha:]]" "'" t
("-d" "en_US")
nil utf-8)

("en" "[[:alpha:]]" "[^[:alpha:]]" "'" t
("-d" "en")
nil utf-8)

星期六, 3月 28, 2009

歷史文件:自由自由,多少人假汝之名

(註,原於3/25/2004在軟體自由社群電子郵件論壇發表
http://list.softwareliberty.org/pipermail/slat-talk/2004-April/00414.html,由於原網站存檔管理不善,聯結逸失,除了排版外,跟原文引到不相干本文大部份宗旨的某人名字換成"User1725"(免得遭到無理的干擾),內容儘量不更動,進一步的觀察會由另文探討,這裡僅作歷史文件存檔)

對單純使用軟體著眼,自由軟體/開放源碼軟體,差異甚小。然而要進一步確保所有人能充分基於之前的分享成果發展, 自由軟體有較具體的概念。

這兩個詞概念漢語都是從英文翻譯進來,所以中英對照都只有一對一的,沒啥"自由軟體"可以翻 "open source"這回事。想要用同樣的詞但不同用法要註明,不然就是存心混淆視聽,這是無庸置疑的基本常識。
兩者或同時並列或分開,對大多數人並無太大影響,端視立場。硬是要混在一起,只有兩種可能:
(1)太不夠專業, 或
(2)太專業故意找開放源碼軟體裡自由的漏洞 (這也是會什麼一定要有人堅持自由軟體的立場)

然而為什麼52000K計畫資助的網站都同時"誤"譯呢?(特別是自由軟體鑄造場號稱參與執行團隊者有17人...)
發現錯誤,不是一兩天的事 早在九月就已指出,見
http://list.softwareliberty.org/pipermail/slat-talk/2003-September/004062.html
人難免犯錯,這封信延到這時才發,事實上是希望讓他們能朝比較正面的方向改進,見
https://list.softwareliberty.org/pipermail/slat-talk/2003-October/004068.html
https://list.softwareliberty.org/pipermail/slat-talk/2003-October/004069.html

但看到自由軟體鑄造場的正式回應我覺得很失望,我已排除了上述(1)無意間犯錯的可能性。這已是"用辭者立場" 的問題, 不是 "翻譯"的問題。把幾件事連起來,讓我有"大家被迫玩遊戲"的感覺,見
1. http://list.softwareliberty.org/pipermail/slat-talk/2003-December/004552.html
2. "2003開放源碼軟體競賽頒獎
10:55-11:10 (暫定) 威盛電子進駐自由軟體鑄造場儀式"
引用於 http://list.softwareliberty.org/pipermail/slat-talk/2003-December/004568.html
從來就沒聽過威盛啥時開始作自由軟體? 那麼多人(包括一些對社群正面公開友善的廠商),為何要獨尊他們? 生意大聲音大嗎?

感覺頗有又在選舉前拚經濟的味道,硬是要把"產業+開放原始碼軟體"與自由軟體混為一談。下一步是不是封閉軟體也能號稱自由軟體?我同意要求正名的說法,不然照這種玩法,老共也能理直氣壯的說 "中華X民XX國在台灣" 那豈不是天下大亂?

在這要強調,不單是開放原碼軟體,自由軟體也是可有商業機會的。只是與往常軟體工業用的商業模式不同,若真覺得"開放原碼軟體"不該缺席。其實用"自由/開放源碼軟體鑄造場計畫"為名很好,無論軟體在不在強調訴求商業發展都能包進去。只要不侵犯自由軟體強調維護的"自由" 一些細節的東西大家可以相忍為國。不能因台灣的一些單位的私心誤用,硬把開放原碼軟體與自由軟體混為一談,硬要去接自由軟體的預算,沒照原合約中要求的自由軟體概念來強調維護"自由"。卻來取巧用開放源碼軟體企圖找自由的漏洞,又不願改進,這樣已事關誠信立場。

自由就像空氣一樣,平時摸不著看不到,在平庸生活內很難去體會。只有要突破不一樣的生活方式,如潛水到深海看美麗的珊瑚,或爬到極高的山極目四望,才會開始體驗到氧氣的可貴。我覺得非常難過,在西方文明引進到台灣的過程中,許多人往往只學到了皮毛,卻沒學到了相互尊重個人價值的理念。以致於無論怎樣的科技文化革新理念,一搬過來就水土不服,永遠是個次等國家。台灣之所以有今天這個鳥樣,一是有人總愛是要搞這種掛羊頭賣狗肉的把戲,一是有太多的鄉愿縱容這種共犯結構,我覺得必須大聲攤開來談。

在這種情形下,像User1725的擇善固執是必須的,大家應要聲援User1725 的抗議。你我就該當個快樂的豬,整天吃著別人調好的飼料? 假如臺灣同胞都這樣想,我就認了。假如你和我一樣不干於當次等人民,我希望您一起來關心這個問題。

( 註 原擬在月前呼應User1725的訴求,時值臺灣總統大選,為避免被不當影射政治立場,故延至今日才發,見諒)

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