2007年12月24日 星期一

更換Ubuntu的Boot Usplash

Ubuntu boot usplash就是指開機時所看到的那個進度條的畫面。預設就是用Ubuntu的那個橘色進度條。以下是從網路上參考來的修改方法:
  1. 通常進度條的畫面都是以.so的檔案存在。所以把要更換的.so複製到/usr/lib/usplash
  2. 用以下指令來替換symbolic link:
    sudo ln -sf /usr/lib/usplash/[要替換的usplash].so /etc/alternatives/usplash-artwork.so
  3. 用Startup manager修改開機畫面的解析度與color depth。注意:解析度與color depth務必符合所選用的usplash,否則將無法顯示
  4. 用以下指令更新GRUB:
    sudo dpkg-reconfigure linux-image-$(uname -r)
  5. 替換完畢之後,可以用
    sudo usplash
    查看是否替換成功。如果觀看完畢,可以按下Alt + F7切換回Xwindow。
方法雖然簡單,但是問題最大的還是在於選擇正確的解析度與color depth。所以更換完畢之後物必要查看一遍。

2007年12月17日 星期一

安裝類似Mac OS的Dock

Mac OS的Dock軟體一直都可以說是Mac OS的特色之一,在Windows平台上也有不少仿製品,雖然也都還不錯,但是畢竟還是做的不夠好。而在Linux上,之前試用過Kiba-Dock跟AWN,不過都覺得不是很好用,穩定性跟功能性都不理想,所以就放棄使用。不過最近看到還不少人推薦使用AWN的,所以又安裝一次,果然是變得很不一樣了。AWN全名為Avant Window Navigator,在Ubuntu上要安裝還蠻簡單的,以下是參考網路上其他人的安裝方法加上自己的心得的安裝步驟:
  1. 到Synaptic中的「套件庫」裡加上以下兩個套件庫網址:
    deb http://download.tuxfamily.org/syzygy42/ gutsy avant-window-navigator
    deb-src http://download.tuxfamily.org/syzygy42/ gutsy avant-window-navigator
  2. 然後下載套件庫所需的金鑰
    http://download.tuxfamily.org/syzygy42/reacocard.asc
    並且在Synaptic中匯入,完成以上兩個設定之後,進行套件庫的「重新載入」
  3. 然後安裝avant-window-navigator-bzr與awn-core-applets-bzr兩個套件,這兩個套件會有另外兩個相依的套件也需要安裝,所以總共是安裝4個套件
安裝結束即完成整個Avant Window Navigator的安裝。要啟動AWN的話,是必須從
「應用程式」->「附屬應用程式」->「Avant Window Navigator」
來啟動;設定的話則是到
「系統」->「偏好設定」->「Awn manager」

軟體優點:
  1. 介面很特別、很漂亮
  2. 操作上也還算蠻方便的,雖然不是完全相似Mac OS的Dock,但是也還算蠻接近了(個人還蠻喜歡那種Shortcut也可以當成是開啟的task的這種呈現方式)
缺點:
  1. 穩定度還是欠佳(不過已經比以前好了)
  2. memory使用量偏多:因為它的applet跟幾乎都是獨立的process,所以雖然本身使用量可能不多,但是加上applet的使用量,那就很驚人了
  3. applet的數量與實用性偏低。core-applets雖然看起來有不少,但是實際比較有用的卻不多
整體來說,我還是給予蠻正面的評價的!不過使用上,由於他會與下方的taskbar的panel重疊到,所以會建議把下方的panel整個刪除,如果真的想拿來用的話。

2007年10月22日 星期一

Ubuntu 7.10 released!

終於,在10/18傍晚,Ubuntu 7.10正式發佈了!大概在快一個月前有裝過測試版,當時就覺得很不錯,但是因為還有不少bug,不小心弄出問題,所以又裝回7.04。所以這次的release,讓我是又期待又怕受傷害。因為不知道那些問題是否都解決了。
後來,就先拿家裏的desktop來作實驗,用線上升級來安裝,安裝過程一切還算順利;而使用上,大致上也沒啥大問題,執行的效率也相當的好。不過有一點比較不一樣的,原本在7.04有lowlatency的kernel,到7.10卻沒有了,但是多了一個rt(realtime)的kernel?!而7.10已有內建Compiz-fusion了,而且版本還蠻新的,使用上也沒太大的問題(不過有些plugin的預設值跟之前不太一樣就是),整體上來說,還算滿意,所以在20號下午也透過DVD把notebook的7.04也升級了,不過DVD升級的速度好像也是很慢。目前已經確認的問題:
  1. 原本修改/etc/init.d/rc裡的CONCURRENCY=shell來加快開機速度,這方法目前在7.10會出問題,不管在我的desktop or notebook pc都已確認
  2. ATI的fglrx driver無法在新的kernel上進行暫停與休眠,這是已經被確認的bug,目前大概只能等ATI的新driver,不然就是等kernel更新了
  3. amsn如果是透過「作業階段」在開機登入時啟動的話,字型的大小會有問題(可能會大一號或是小一號),但是重開amsn就ok
  4. Swiftfox會不穩(至少我在desktop跟notebook都碰到了)
  5. 7.10在「位置」選單有新增幾個捷徑,不過這些捷徑的建立與讀取似乎有點怪怪的:如果你用繁體中文,系統會自動用中文當目錄名稱,但是切換到不同語系時,可以轉換;但是就是無法只變換捷徑名稱,而不變換目錄名稱。而且,如果目錄被刪除後重建,捷徑就可能會無法重新出現
除了升級到7.10之外,前一陣子又看到一些有關file system的說法,所以又把file system換成JFS了。目前感覺用JFS似乎有比XFS快一點點,不過似乎有時候會有點點頓的情況發生,不過JFS的cpu usage有比XFS少,而且GRUB可以支援JFS,所以不用另外切一個ext3給/boot。不過目前似乎沒看到JFS的defrager,不過可能暫時還不需要吧. (XFS在做大量的讀寫之後,他的fragment factor會變得很大,那時候就可能需要作online defrag了;難怪之前用XFS時有越來越慢的感覺)

Sun Tech Day - Java 2007參加心得

2007.10.19台灣昇陽公司在台北國際會議中心舉辦了今年的Java大會。原本在8月份的時候想說今年是不是停辦了,因為往年都是在7~8月份的時候辦,沒想到今年卻是拖到了10月中。今年的規模變小了,往年都是2天的議程,今年變成只有一天,不過費用也變便宜XD。另外今年的贊助廠商也變少許多,不過另一個好處是今年不像前兩年,有半強迫逛攤位的活動。今年的議題主要當然是Java(廢話!),不過另一個主題應該是Solaris吧!除了在大會一開始的演講裡有不少對Solaris的推薦與吹捧,在當天的議程裡也有安排了兩場跟Solaris有關的,只是因為我個人目前還不需要去熟悉與了解Solaris,所以沒去~~。
老實說,今年的題目有些是不錯,但是講師的表現卻不是很理想。今年似乎大部分的場次都是由中國過來的Sun的講師主講居多?!然而,這些講師的表現,說實在的,只能說是「差強人意」,當天看到的幾個他們做的Demo,居然沒幾個是在沒出錯的情況下完成的...唉...。至於有關主題的心得,有去參與了JDK發展情況的那場,大致上對未來的JDK 7有更多一點的了解,算是還蠻期待的吧;而最讓我驚艷的,莫過於JavaFX那場了,雖然說講師並沒有講到太多有用的東西,但是那些Demo的效果實在是太驚人了!對JavaFX開始有更多的興趣與期待了!另一個覺得還不錯的,就是JavaME與Mobile Ajax、SVG的結合應用,感覺也是讓人耳目一新。
說真的,今年我並沒有去參與server-side相關的,除了最後一場有關SOA、BPEL。因為今年server-side上面的技術發展似乎沒有啥太大的改變。反倒是client-side上面的UI與互動性這方面的技術的進展,令人感到興奮!個人認為,JavaFX的出現讓原本在client-side比較貧弱的Java重新露出一線曙光,也許真的可以讓Sun也有機會與Adobe、M$一較高下也說不定。不過,就怕Sun自己又亂玩,把它搞砸了。現在心理想的,就是希望找個時間好好玩一下JavaFX~

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

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

2007年6月21日 星期四

Wicket 心得

1. 建立簡單的Ajax component: 對一般的component加上AjaxEventBehavior來達成,範例:
 DropDownChoice choice=new DropDownChoice(...);
choice.add(new AjaxEventBehavior("onchange") {
protected void onEvent(AjaxRequestTarget target) {
System.out.println("ajax here!");
}
}
或是自行繼承AbstractDefaultAjaxBehavior並進行必要改寫onComponentTag()與respond()來加入所需要的javascript與處理行為
2. 較複雜的Ajax component可以透過組合多個component來達成,可以參考wicket-extension裡的AjaxEditableLabel
3. 部份特效可以借助CSS來達成,例如tooltip
4. Override onComponentTag()可以修改tag本身的資訊,包含name,也可以加上其他attribute
5. 目前wicket中提供的大部分component都已經將onComponentTag()與onComponentTagBody()定義成final,所以要加上額外的attribute必須使用AttributeModifier或是AttributeAppender
6. ListView不只可以使用於table與<div>,亦可使用於<span>。若是需要橫向排列的效果,便需要使用<span>

2007年6月10日 星期日

Hibnerate Annotation心得筆記

1. 原來JPA的Annotation的定義:@OneToOne跟@ManyToOne都是預設是Fetch.Eager
2. Hibernate Annotation可以用@LazyToOne來設定@OneToOne或是@ManyToOne的Lazy fetch的方式(通常都是用LazyToOneOption.PROXY吧)。但是,對於@OneToOne來說,怎麼設定似乎都是無用的,Hibernate的實做,似乎還是會進行non-lazy fetch.
3. 若是@ManyToOne設定為fetch=FetchMode.Lazy的話,則該relation必須在使用Hibernate.initialize()之後,或是在查詢時加上fetch的語法才能在session關閉後取得.
4. 目前用Hibernate annotation extension中的@Index想幫一些relation加上db index,但是似乎不行。

結論,JPA的定義與原本的Hibernate作法似乎是有不少差異,而且就功能上來看,JPA的annotation比起Hibernate也就為不足

2007年2月6日 星期二

Hibernate Secindary Level Cache 與Persistence Entity的繼承關係的問題

使用Hibernate的好處除了可以使用ORM的觀念來開發系統之外,另一個優點就是它提供了可以設定的cache機制 ,尤其是Secondary Level Cache。在對於經常使用到primary key來查詢的情況下,是有蠻大的幫助的。不過,最近在專案內使用卻發現一個問題。就是在有繼承關係的entity中,可能會造成一些問題:
例如,AUser跟BUser都繼承自User,而三者的繼承作法是採用Join的作法,也就是說AUser跟BUser都是參考到User的table。在還沒有使用Secondary level cache時,查詢一個已在AUser,但是不在BUser的entity,若是先以AUser的型態查詢,然後再以BUser的型態查詢則會正確的回傳null。但是當對User啟用Second level cache時,就會出現ClassCastException。原因應該是cache是以primary key來作為cache的key,所以第一次查詢的結果會被存入cache,但是第二次的查詢則因為是直接由cache取得,所以會得到AUser,但是由於查詢的型別是BUser,所以會出會轉型錯誤。

當然,這問題對於一般的系統可能是很難碰到。但是如果對於有應用到繼承觀念的系統的話,也許是需要特別注意的。