2007年9月27日 星期四

Install nVidia VGA card driver in Ubuntu

自己之前在自己的notebook上安裝過數次Ubuntu,從6.06~7.04,所以深知ATI的顯示晶片在Linux上的支援度並不理想。之前就有聽說nVidia的卡就要好的多,所以這次利用空的HDD在我的desktop上安裝Ubuntu 7.04,不過似乎跟我想像的不太一樣,也是碰到不少麻煩。最後發現, 安裝nVidia顯示卡driver有兩大方式:
  1. 安裝套件庫內的driver:
    1. 這是最簡單的方式,可以使用synaptic或是在console視窗內使用apt-get來安裝。一般而言,最新的顯示卡是安裝nvidia-glx-new或是nvidia-glx;較舊的則是nvidia-glx-legacy。詳情可以參考:HOWTO: Latest NVIDIA drivers - Method 1
  2. 手動安裝官方driver: 套件庫裡的drvier雖然比較好安裝,但是由於版本比較舊,所以比較可能有問題,對於最新的顯示晶片(Geforce 7xxx,8xxx系列)的支援也可能比較不夠。個人在參考過HOWTO: Latest NVIDIA drivers - Method 2Installing NVIDIA Linux graphics drivers on recent distributions (FC, Ubuntu, etc)之後,大概發現只要完成幾個步驟就可以很輕鬆的安裝完成:
    1. 將需要的相關套件更新到最新版:
      sudo apt-get install linux-headers-generic build-essential gcc xserver-xorg-dev pkg-config
      ,其中linux-headers請根據安裝的kernel種類來安裝,如lowlatency的kernel就必須安裝linux-headers-lowlatency
    2. 移除目前安裝的nVidia driver:
    3. 修改/etc/default/linux-restricted-modules-common,確定有以下內容:
      DISABLED_MODULES="nv nvidia_new"
    4. 刪除以下檔案
      1. /etc/init.d/nvidia-glx
      2. /etc/init.d/nvidia-kernel
      3. /lib/linux-restricted-modules/.nvidia_new_installed
    5. sudo /etc/init.d/gdm stop
      按下Ctrl+Alt+F1切換到console mode,然後登入後輸入
    6. 以sudo執行下載的nVidia官方driver安裝檔,所有的選擇都選擇Accept或是Yes,除了要求連線下載符合目前kernel的預先編譯好的driver。(若是只是更新driver,則最後的修改xorg.conf檔的部份也可以選擇No)
    7. 完成安裝後,可以輸入
      sudo /etc/init.d/gdm start
      來重新啟動X-Window,或是重開機。若是安裝成功,則會看到X-Window的登入畫面。
    8. 進入X-Window之後,在console視窗輸入
      sudo gedit /usr/share/applications/NVIDIA-Settings.desktop
      ,然後填入以下內容之後存檔:
      [Desktop Entry]
      Name=NVIDIA Settings
      Comment=NVIDIA X Server Settings
      Exec=nvidia-settings
      Icon=
      StartupNotify=true
      Terminal=false
      Type=Application
      Categories=Application;System;
      ,然後就可以在「應用程式->系統」中找到nVidia的X server設定程式了(若是更新driver,則不需重複進行此步驟)
    9. 啟動nVidia X server設定程式,然後設定自己需要的設定
基本上需要注意的事項也是不少,不過整體來說還不算太難安裝,有一點必須注意的是,在安裝driver之前一定要關閉gdm,否則也會導致安裝失敗。
另外,有幾個常用的option可以設定在xorg.conf的Device or Screen區段內:
  1. Option "NoLogo" "true" ---- 關閉進入X-Window時顯示的nVidia logo畫面
  2. Option "AddARGBGLXVisuals" "true" ---- 避免在使用Compiz-fusion or Beryl時有視窗邊框消失的問題
  3. Option "Coolbits" "1" ---- 啟動超頻選項
更詳盡的Option設定,可以參閱nVidia官網上的資料

基本上,Nvidia對於Linux的支援真的是比ATI好太多了!透過AIGLX來跑Compiz-fusion的感覺就是不一樣,不但效率很好,也比較不吃resource。據說ATI也在開發支援AIGLX的driver,只是會是怎樣....很難想像啊...

2007年9月17日 星期一

動態產生form欄位

在wicket中,幾乎所有的web元件都要有對應的html element+wicket id,因此要做到動態產生form內的欄位幾乎沒辦法。不過,最近同事在研究最新版的jtrac的source code,發現透過ListView + Fragment + BoundCompoundPropertyModel就可以做到:
  • ListView主要是用來作為動態新增項目layout的部份,因為它可以根據所給予的model或是List內的內容來產生應該要有的項目。
  • Fragment主要是用來簡化設計,因為原本Fragment就是一種不需要獨立的html template file的一種特殊Panel,所以可以運用來呈現每個ListItem裡的欄位
  • BoundCompoundPropertyModel主要是用來將POJO跟wicket component之間的綁定,採取更彈性的方式來實現。
事實上,應該不是只有以上3種東西的結合才做的出來,只是目前這三種東西的結合是比較容易的作法。主要的關鍵應該是在於如何在runtime的時候,才去產生form欄位的html與必要的code,這通常是需要像是ListView或是Loop這類可以重複產生item的元件。而雖然可以產生重複的item,但是item的內容還必須不一樣,所以才會需要Fragment(這邊也可以用Panel來達成,只是用Panel就會比較麻煩)。有了不同的item之後,另一個問題就是元件與實際data model之間的連結關係,使用BoundCompoundPropertyModel是可以用比較彈性的方式去做到,但是用其他的Model應該也可以,只是可能會比較困難。

有一點需要注意的是:由於是透過ListView來產生item,所以當發生validate error時而回到form時,ListView是會重新再產生新的item,而新的item會去讀取model內的值。但是,由於validation失敗,所以model是不會被更新,所以所有的item都會回到一開始的值,而不是之前輸入的值,這對於很大的form來說是會對user造成困擾的。所幸,可以透過ListViewsetReuseItem(true)來避免重新產生新的item,而是沿用先前產生的,所以就可以保留validation之前的輸入值。

P.S: 雖然說理論上不一定要用ListView,但是由於所知只有ListView才有setReuseItems(),所以若是使用Loop或是其他非ListView的subclasses的元件,可能要自己想辦法處理重複產生新item的問題。

2007年9月15日 星期六

Google Desktop Search for Linux

Google desktop在Windows一直是蠻有名的軟體,而在前一陣子,他也終於推出for Linux的版本了。除了可以透過連到google的網頁去安裝以外,也支援apt的安裝方式,以下是安裝的步驟:
  1. 開啟console視窗並輸入# sudo wget http://dl.google.com/linux/linux_signing_key.pub -O- | sudo apt-key add -來匯入憑證
  2. 然後打開Synaptic,進到[設定]->[套件庫]->[Third party software],加入 deb http://dl.google.com/linux/deb/ stable non-free
  3. 然後按下重新載入,然後就可以用搜尋找到Google desktop了
不過,有點可惜的是這個版本只有提供search的功能,沒有像Windows版那樣有很多豐富的小軟體可以使用

2007年9月13日 星期四

Ubuntu字型設定

原則上是參考中文 fontconfig 設定檔裡的設定,但是由於這裡面的設定有些部份不是很喜歡,所以又自行修改了某些地方:
  1. 有關所有字型的AA、hinting、autohint:
    <match target="font">
    <edit name="antialias" mode="assign">
    <bool>true</bool>
    </edit>
    <edit name="hinting" mode="assign">
    <bool>true</bool>
    </edit>
    <edit name="autohint" mode="assign">
    <bool>false</bool>
    </edit>
    </match>
  2. 關閉英文小字AA:
    <test name="pixelsize" compare="less">
    <double>8</double>
    </test>
  3. 關閉中文字體小字AA:
    <test name="pixelsize" compare="less_eq">
    <double>16</double>
    </test>

切換Touchpad開關

NB的Touchpad預設是一直開啟的,這對於喜歡使用滑鼠的我來說其實是種困擾。從google上找了一些資料之後,可以透過一些方式來做到類似Windows下的切換:
  1. 首先在/etc/X11/xorg.conf中找到以下區段:
    Section "InputDevice"
    Identifier "Synaptics Touchpad"
    然後在該區段裡面加上
    Option "SHMConfig" "on"
    ,之後重啟xwindow
  2. 可以在console視窗輸入
    synclient TouchpadOff=1
    就可以關閉touchpad,
    synclient TouchpadOff=0
    則是開啟;或是執行
    /etc/acpi/asus-touchpad.sh
    ,系統會自動切換開啟狀態
  3. 可在Compiz-fusion中設定熱鍵呼叫asus-touchpad.sh,效果更佳
P.S: 目前此作法沒辦法透過插拔滑鼠來切換touchpad的開關

2007年9月10日 星期一

Replace Nautilus

Ubuntu預設是使用Gnome,而在Gnome裡預設是以nautilus作為file manager,但是nautilus比較肥大、比較慢。因此,也開始有更多light-weight file manager被開發,像是很有名的PCManFM即是其中之一。不過礙於Gnome的設計,是沒辦法直接更換file manager,必須用特別方式去更換。
在這篇Changing the Default File Manager in Gnome中,介紹如何將nautilus替換成thunar或是Konqueror、Krusader,也有提供還原的方法,算是相當的簡單容易。不過可惜的是,裡面並未提供替換為pcmanfm的方法。

個人是選用thunar,因為使用了pcmanfm之後,發現pcmanfm雖然速度很快,但是某些設計與功能感覺沒有thunar好用。不過thunar也有些不便之處與小問題:
  1. 不支援smb://這類的網址路徑,所以無法直接瀏覽網芳與ftp。(據說可以透過fusesmb來達到效果,不過我沒試過)
  2. 某些應用程式在透過thunar去開啟檔案再關閉之後,該程式會留下zombie,必須等到所有的thunar關閉之後會被清除。(不過似乎也不會對系統有不良影響)
  3. thunar與nautilus兩者不能互相進行檔案的copy & paste
不過即使如此,thunar還是一個蠻輕量級而且功能的file manager!而且thunar在自訂action的部份與設定檔案開啟的預設程式部份也是蠻簡單的

有關以pcmanfm來替換nautilus,可以參考回覆: 請問 pcmanfm 取代 nautilus

2007年9月9日 星期日

好用的media player

在Ubuntu裡,有很多meida player可以使用,其中最有名的應該是mplayer。但是,mplayer的設定並不容易,我也曾經吃過不少苦頭,所以也有不少軟體套件是用來作為mplayer的front-end。

之前,看到網路上一些人的推薦,就抱持著實驗的心態去安裝一套叫做smplayer,這個套件並不存在於官方的Repository裡,但是在GetDeb網站上找的到。而目前官網上最新的版本是0.5.46。安裝此套件之前必須先安裝mplayer以及相關的codec。

使用心得:操作介面比原本的mplayer還要親切順手,執行效率也還不錯。個人認為透過smplayer來使用mplayer是目前在Ubuntu上最棒的多媒體播放器(當然是指播放video)

P.S:有一點很特別,在使用Xgl + Beryl(or Compiz-fusion)的環境裡,原本用mplayer是無法設定video driver為xv, 但是在smplayer卻可以?!

Ubuntu套件收集網站

有個不錯的Ubuntu套件收集網站,叫做GetDeb,有收集整理各版本的Ubuntu的軟體套件,收集的軟體套件有些還蠻實用的。不過可惜的是這個網站並沒有提供Repository,所以只能自己下載deb檔來安裝,而且上面的版本可能也不是最新的。不過整體來說,他還是提供一個很方便的平來,可以讓Ubuntu的使用者找尋自己需要的軟體

2007年9月6日 星期四

Eclipse & Ant

Eclipse是一套相當受歡迎的IDE,他的refactoring跟code completion做的相當不錯,而且也有許多不錯用的plugin,重點還是免費的(不過老實說,他其他的很多功能並不好用,而且3.2版之後似乎越來越肥大)。Ant是許多Java developer常用的工具,在Netbeans跟Eclipse都有支援。事實上,透過Ant,可以來協助解決很多Eclipse本身沒做好的事。但是,問題在於Ant所需要的build.xml並不容易撰寫,常常可能會發生為了作一件小事,結果花費很多時間去撰寫build.xml。所幸,Eclipse本身有支援將project export出build.xml的功能,透過此功能就可以將使用中的project的相關的設定(像是lib設定等等)一併產生。因此,我們只需要在匯出的build.xml上再加上我們所需要的target去執行我們要的task即可。
以下列出幾個在開發Java project常用的target的語法:
  1. 產生jar:
    <target name="build-jar" depends="build-project">
    <jar destfile="your_jar.jar" basedir="${basedir}/build/classes" compress="true"></jar>
    </target>
  2. 產生javadoc:
    <target name="build-docs" depends="build-project" description="--> build-docs">
    <javadoc author="true" source="1.5" classpathref="Your_project.classpath" sourcepath="${basedir}/src" destdir="${basedir}/doc" charset="UTF-8" version="true" packagenames="*">
    <link href="http://java.sun.com/j2se/1.5.0/docs/api/"/>
    </javadoc>
    </target>
    其中,classpathref可以填入由eclipse幫忙產生的路徑變數,通常是以你的proejct_name.classpath命名。
  3. 產生war:war的建立比前兩個稍微複雜,原因在於third-party lib的import,ant的war task並沒有辦法以<path>來讀取project有用到的lib路徑。所以我們必須自行把這些lib先複製到某個資料夾之後,在用war task去建立war檔,建立完畢之後再刪除。
    <target name="build-war" depends="build-project" description="--> description">
    <copy todir="${basedir}/WebContent/WEB-INF/lib" flatten="true">
    <path refid="Apache Commons Logging-1.1.0.userclasspath"/>
    <path refid="Apache Log4J-1.2.13.userclasspath"/>
    <path refid="Wicket-1.2.6.userclasspath"/>
    </copy>
    <war destfile="wicket.war" webxml="${basedir}/WebContent/WEB-INF/web.xml">
    <lib dir="${basedir}/WebContent/WEB-INF/lib">
    <classes dir="${basedir}/build/classes">
    </war>
    <delete>
    <fileset dir="${basedir}/WebContent/WEB-INF/lib" includes="**/*">
    </delete>
    </target>
透過以上的語法,可以有效簡化jar, javadoc, war的產生。
P.S: 以上語法內的task與attribute的用法與意義,請查閱Ant的說明文件

2007年9月5日 星期三

讓Ubuntu 享受快感!

Ubuntu有提供各種不同版本的kernel, 來針對不同的用途使用,總共有i4種:generic, server, big iron server, low latency,而Ubuntu Desktop預設安裝的是採用generic的kernel。最近無意間看到有人提到了Ubuntu Studio是採用low-latency kernel,所以順便查了一下相關的資料,發現這個kernel似乎是針對desktop的環境作強化,來減少GUI 的response time。
要替換Ubuntu Desktop的預設kernel很簡單,只需要透過Synaptic去安裝linux-lowlatency套件即可,Synaptic會自動幫你選取必要的套件。或是用
sudo apt-get install linux-lowlatency
亦可。

2007年9月1日 星期六

解決amsn的傳檔問題

在Ubuntu裡有很多MSN client可以使用,但是各有各的優缺點。而個人試用過後,覺得amsn 0.97RC1以後的版本,不管在功能與介面跟MSN Messanger都很相似,使用起來也比較順手。amsn 0.97RC1目前只有source package可以安裝,所以必須自己手動compile跟install,而為了解決中文輸入的問題,需要的Tcl/Tk也必須安裝8.5以上版本。相關的安裝方式在網路上已有人詳述。但是,amsn 0.97RC1有一個問題,就是傳輸稍大的檔案時,會很容易無故斷線。為了解決這個問題,必須將Tcl/Tk升級到最新版的8.5a7,另外amsn也必須使用最新的svn版的source code來編譯。以下是安裝步驟的簡單紀錄:
  1. 先安裝svn client與cvs client:
    sudo apt-get install subversion
    sudo apt-get install cvs
  2. 由於Ubuntu 7.04內建的Tcl/Tk為8.3,而amsn在編譯階段會檢查版本,所以必須先安裝8.4版
  3. 安裝必要相依套件:
    sudo apt-get install libxft-dev
    sudo apt-get install imlib11 sox libpng12-0 docker tcltls python libc6 libgcc1 libice6 libjpeg62 libsm6 libstdc++6 libx11-6 zlib1g
  4. 下載cvs版的Tcl/Tk
    1. Tcl:
      cvs -z3 -d:pserver:anonymous@tcl.cvs.sourceforge.net:/cvsroot/tcl co -P tcl
    2. Tk:
      cvs -z3 -d:pserver:anonymous@tktoolkit.cvs.sourceforge.net:/cvsroot/tktoolkit co -P tk
  5. 安裝Tcl cvs版:
    1. 進入下載的cvs版Tcl的unix目錄
    2. 執行以下指令:
      ./configure --with-x --enable-xft --enable-threads
      make
      sudo make install
      sudo ln -f -s /usr/local/lib/tclConfig.sh /usr/local/lib/tcl8.5/
  6. 安裝Tk svc版:
    1. 進入下載的cvs版Tk的unix目錄
    2. 執行以下指令:
      ./configure --with-tcl=/usr/local/lib/tcl8.5/ -with-x --enable-xft -enable-threads
      make
      sudo make install
      sudo ln -f -s /usr/local/lib/tkConfig.sh /usr/local/lib/tk8.5/
      注意:一定要加–enable-xft參數,否則在字型的顯示與切換會有問題
  7. 設定amsn的執行環境:由於amsn是透過Tcl的wish模組來執行,所以也必須在安裝完新版的Tcl/Tk時,設定好新的wish路徑。先用
    whereis wish
    找出最新版的wish的位置,一般來說Ubuntu應該會是在/usr/local/bin/wish8.5,然後用以下指令設定路徑
    sudo ln -f -s /usr/local/bin/wish8.5 /usr/bin/wish
  8. 編譯amsn:
    1. 下載svn版amsn:
      svn co https://amsn.svn.sourceforge.net/svnroot/amsn/trunk/amsn
    2. 進入下載的amsn目錄,並用以下指令編譯:
      ./configure --with-tcl=/usr/local/lib/tcl8.5/ --with-tk=/usr/local/lib/tk8.5/
      make clean
      make
      編譯完成之後,可以用
      sudo make install
      安裝,或是用
      make deb
      來產生.deb檔,再用deb檔安裝,詳細的安裝資訊可以參考INSTALL.TXT
  9. 安裝完畢之後,可以安裝libsnack2套件來增加Tcl/Tk對於聲音功能的支援;另外在啟動的時候,如果遇到需要安裝TLS套件的錯誤訊息,請安裝tcltls套件,並在安裝後修改 /usr/lib/tls1.50/pkgIndex.tcl。將裡面的1.5改成1.50,然後存檔再重新啟動amsn。
心得:amsn svn版+Tcl/Tk 8.5a7 cvs版,目前的確可以解決傳大檔案斷線的問題,而且使用的記憶體也比之前的amsn 0.97RC1少蠻多的。
P.S: amsn 0.97RC1 + Tcl/Tk 8.5a7 cvs版會無法啟動