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版會無法啟動

2007年8月17日 星期五

OXIM安裝心得

之前一直都是使用SCIM,因為它上面有新酷音,對於我這種只會注音類輸入法的人來說,是非常好用的。問題是SCIM並不是很穩定,有時後會有一些異常現象發生。之前有試用過GCIN,但是它對一些軟體的相容性不是很好,而且也沒有新酷音,個人又不是很喜歡詞音輸入法。偶然在Ubuntu正體中文站看到有人介紹OXIM,索性試了一下。其實還算蠻穩定的,也有新酷音。不過,1.1.1版會跟Flash plugin相衝,而又找不到有其他的更新的deb。所以只好自己下載source code來compile。
以下是簡單的步驟紀錄:
  1. 安裝qt3-dev-tools套件,以及相關的qt3的套件(像是libqt3-headers等等)。然後執行
    ./configure --disable-static --with-qt-dir=/usr/share/qt3
  2. 在執行完後,會顯示某些module的狀態是no,就去安裝相關的開發用套件(like gtk2, qt, chewing,libxpm-dev等等),然後再重新執行一次
  3. 當所有套件的狀態都是yes,此時執行
    sudo make
    。若是無錯誤訊息,再執行
    sudo make install-strip
    ,就安裝完成
  4. 在安裝完成之後,用
    sudo im-switch -s oxim
    ,將oxim設定為預設輸入法
  5. 在/etc/X11/Xsession.d中建立一個75custom_oxim_init,並包含以下內容:
    export XMODIFIERS="@im=oxim"
    export GTK_IM_MODULE="oxim"
    export XIM_PROGRAM="oxim &"
  6. 到系統->偏好設定->作業階段,選擇「初始啟動程式」,添增一個項目,並填入指令:
    oxim &
  7. 開啟console視窗,執行以下指令:
    sudo -s -h
    gtk-query-immodules-2.0 > /etc/gtk-2.0/gtk.immodules
  8. 完成之後,重新登入或是重新啟動即可
  9. 如果在使用im-switch去設定預設輸入法的時候,出現無法更新alternative的錯誤訊息時:
    1. 請安裝galternatives套件,並在console視窗以sudo galternatives來啟動
    2. 從左邊側邊欄中找出xinput-zh_TW的項目,然後按下右側裡的「新增」,之後輸入path為/etc/X11/xinit/xinput.d/oxim,並把priority調成60後按下確定。然後確認剛剛新增的項目是被選擇的。
心得:oxim的確是比較穩定,而且因為有新酷音,所以也是很好用。不過也是有幾個缺點:
  1. 中英文切換比較麻煩,一旦切換,所有編輯區的文字都會被送出
  2. 狀態顯示不太正常。原本在A視窗是切換到中文輸入法,但是切到B視窗時,會顯示為英文輸入模式,但是實際社仍為中文輸入模式,而且此時編輯區跟候選字區都無法正常顯示
以上幾個缺點說大也不大,只是還是有點不便就是。另外發現一件事,自行compile出來的程式無法用checkinstall包成deb檔來使用

Wicket 心得(2)

  1. 動態加入javascript:
    1. 呼叫AjaxRequestTarget的appendJavascript(),不過僅能在Ajax component上使用
    2. 使用JavascriptUtils.writeJavascript(), 需要有wicket.Response作為參數。一般可以透過實做IHeaderContributor來獲得。然後在需要加入Javascript的page,加入以下code:
      add(new HeaderContributor(new YourHeaderContributorImpl()));
      即可
  2. Component可以透過override onComponentTag()來將原本的HTML tag進行置換。例如把無效的AjaxLink的<a>換成以<span>替代
  3. 關閉輸出wicket id到頁面:
    getMarkupSettings().setStripWicketTags(true);
  4. Wicket extension中的Wizard並不支援Ajax,因此當在ModalWindow中使用時,無法再按下Finish時關閉ModalWindow,解決方式:
    繼承AjaxSubmitButton,並在onSubmit()中呼叫WizardModel的finsih()。另外,由於AjaxSubmit似乎沒辦法透過setEnabled(false)來關閉,所以也必須override onComponentTag()來對HTML tag添加 disabled屬性

Install Compiz-Fusion in Ubuntu 7.04

安裝方法可以參考:
7.04 Howto: 安裝Compiz Fusion特效 + Fusion Icon 管理器

其中有幾點必須注意:
1. Fusion-icon的安裝,我自己是無法利用網友包好的deb來安裝,但是直接使用git來下載source並compile的話,是OK
2. Mplayer在啟動時,可能會沒有視窗外框。amsn則是一定沒有視窗外框。解決方法:
系統->偏好設定->CompizConfig Settings Manager->Workarounds->Qt Window fix
將該選項取消即可
心得:
目前雖然Compiz-Fusion還在開發階段,但是穩定度已經比6月底的版本好很多了,甚至比Beryl穩體,效率也還不錯,資源的使用也比Beryl少。在特效上也比Beryl多。

Install Ubuntu 7.04 with ATI VGA card

之前在6.06, 6.10的時候,都可以直接使用Live CD作圖形介面安裝,但是到了7.04之後卻不行了。在Live CD登入的時候,會出現X server error. 在google之後,據說是x server的 vesa driver有問題。
目前的解決方法:
在出現錯誤訊息回到console模式下時,調整x server的設定:
sudo dpkg-reconfigure xserver-xorg

前面所有設定都依照預設值即可,除了幾點需要特別設定:
1. VGA driver選用vesa
2. 在螢幕設定時選擇advance,將水平更新率設定為36-52,垂直更新率設為36-60,並且將解析度只留下640*480
3. 完成設定後存檔離開,並且重新啟動X server
sudo /etc/init.d/gdm restart


此時應該就可以進入圖形安裝模式了

P.S: 有其他人說過,不能用圖形介面安裝時,可以用文字模式安裝。但是我實際上發現,當碰到那個問題時,即使文字模式安裝完畢,也無法進入x window