- 通常進度條的畫面都是以.so的檔案存在。所以把要更換的.so複製到/usr/lib/usplash中
- 用以下指令來替換symbolic link:
sudo ln -sf /usr/lib/usplash/[要替換的usplash].so /etc/alternatives/usplash-artwork.so
- 用Startup manager修改開機畫面的解析度與color depth。注意:解析度與color depth務必符合所選用的usplash,否則將無法顯示
- 用以下指令更新GRUB:
sudo dpkg-reconfigure linux-image-$(uname -r)
- 替換完畢之後,可以用
sudo usplash
查看是否替換成功。如果觀看完畢,可以按下Alt + F7切換回Xwindow。
2007年12月24日 星期一
更換Ubuntu的Boot Usplash
Ubuntu boot usplash就是指開機時所看到的那個進度條的畫面。預設就是用Ubuntu的那個橘色進度條。以下是從網路上參考來的修改方法:
2007年12月17日 星期一
安裝類似Mac OS的Dock
Mac OS的Dock軟體一直都可以說是Mac OS的特色之一,在Windows平台上也有不少仿製品,雖然也都還不錯,但是畢竟還是做的不夠好。而在Linux上,之前試用過Kiba-Dock跟AWN,不過都覺得不是很好用,穩定性跟功能性都不理想,所以就放棄使用。不過最近看到還不少人推薦使用AWN的,所以又安裝一次,果然是變得很不一樣了。AWN全名為Avant Window Navigator,在Ubuntu上要安裝還蠻簡單的,以下是參考網路上其他人的安裝方法加上自己的心得的安裝步驟:
軟體優點:
- 到Synaptic中的「套件庫」裡加上以下兩個套件庫網址:
deb http://download.tuxfamily.org/syzygy42/ gutsy avant-window-navigator
deb-src http://download.tuxfamily.org/syzygy42/ gutsy avant-window-navigator - 然後下載套件庫所需的金鑰
http://download.tuxfamily.org/syzygy42/reacocard.asc
並且在Synaptic中匯入,完成以上兩個設定之後,進行套件庫的「重新載入」 - 然後安裝avant-window-navigator-bzr與awn-core-applets-bzr兩個套件,這兩個套件會有另外兩個相依的套件也需要安裝,所以總共是安裝4個套件
「應用程式」->「附屬應用程式」->「Avant Window Navigator」來啟動;設定的話則是到
「系統」->「偏好設定」->「Awn manager」。
軟體優點:
- 介面很特別、很漂亮
- 操作上也還算蠻方便的,雖然不是完全相似Mac OS的Dock,但是也還算蠻接近了(個人還蠻喜歡那種Shortcut也可以當成是開啟的task的這種呈現方式)
- 穩定度還是欠佳(不過已經比以前好了)
- memory使用量偏多:因為它的applet跟幾乎都是獨立的process,所以雖然本身使用量可能不多,但是加上applet的使用量,那就很驚人了
- applet的數量與實用性偏低。core-applets雖然看起來有不少,但是實際比較有用的卻不多
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升級的速度好像也是很慢。目前已經確認的問題:
後來,就先拿家裏的desktop來作實驗,用線上升級來安裝,安裝過程一切還算順利;而使用上,大致上也沒啥大問題,執行的效率也相當的好。不過有一點比較不一樣的,原本在7.04有lowlatency的kernel,到7.10卻沒有了,但是多了一個rt(realtime)的kernel?!而7.10已有內建Compiz-fusion了,而且版本還蠻新的,使用上也沒太大的問題(不過有些plugin的預設值跟之前不太一樣就是),整體上來說,還算滿意,所以在20號下午也透過DVD把notebook的7.04也升級了,不過DVD升級的速度好像也是很慢。目前已經確認的問題:
- 原本修改/etc/init.d/rc裡的CONCURRENCY=shell來加快開機速度,這方法目前在7.10會出問題,不管在我的desktop or notebook pc都已確認
- ATI的fglrx driver無法在新的kernel上進行暫停與休眠,這是已經被確認的bug,目前大概只能等ATI的新driver,不然就是等kernel更新了
- amsn如果是透過「作業階段」在開機登入時啟動的話,字型的大小會有問題(可能會大一號或是小一號),但是重開amsn就ok
- Swiftfox會不穩(至少我在desktop跟notebook都碰到了)
- 7.10在「位置」選單有新增幾個捷徑,不過這些捷徑的建立與讀取似乎有點怪怪的:如果你用繁體中文,系統會自動用中文當目錄名稱,但是切換到不同語系時,可以轉換;但是就是無法只變換捷徑名稱,而不變換目錄名稱。而且,如果目錄被刪除後重建,捷徑就可能會無法重新出現
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~
老實說,今年的題目有些是不錯,但是講師的表現卻不是很理想。今年似乎大部分的場次都是由中國過來的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有兩大方式:
另外,有幾個常用的option可以設定在xorg.conf的Device or Screen區段內:
基本上,Nvidia對於Linux的支援真的是比ATI好太多了!透過AIGLX來跑Compiz-fusion的感覺就是不一樣,不但效率很好,也比較不吃resource。據說ATI也在開發支援AIGLX的driver,只是會是怎樣....很難想像啊...
- 安裝套件庫內的driver:
- 這是最簡單的方式,可以使用synaptic或是在console視窗內使用apt-get來安裝。一般而言,最新的顯示卡是安裝nvidia-glx-new或是nvidia-glx;較舊的則是nvidia-glx-legacy。詳情可以參考:HOWTO: Latest NVIDIA drivers - Method 1
- 手動安裝官方driver: 套件庫裡的drvier雖然比較好安裝,但是由於版本比較舊,所以比較可能有問題,對於最新的顯示晶片(Geforce 7xxx,8xxx系列)的支援也可能比較不夠。個人在參考過HOWTO: Latest NVIDIA drivers - Method 2跟Installing NVIDIA Linux graphics drivers on recent distributions (FC, Ubuntu, etc)之後,大概發現只要完成幾個步驟就可以很輕鬆的安裝完成:
- 將需要的相關套件更新到最新版:
sudo apt-get install linux-headers-generic build-essential gcc xserver-xorg-dev pkg-config
,其中linux-headers請根據安裝的kernel種類來安裝,如lowlatency的kernel就必須安裝linux-headers-lowlatency - 移除目前安裝的nVidia driver:
- 修改/etc/default/linux-restricted-modules-common,確定有以下內容:
DISABLED_MODULES="nv nvidia_new"
- 刪除以下檔案
- /etc/init.d/nvidia-glx
- /etc/init.d/nvidia-kernel
- /lib/linux-restricted-modules/.nvidia_new_installed
sudo /etc/init.d/gdm stop
按下Ctrl+Alt+F1切換到console mode,然後登入後輸入- 以sudo執行下載的nVidia官方driver安裝檔,所有的選擇都選擇Accept或是Yes,除了要求連線下載符合目前kernel的預先編譯好的driver。(若是只是更新driver,則最後的修改xorg.conf檔的部份也可以選擇No)
- 完成安裝後,可以輸入
sudo /etc/init.d/gdm start
來重新啟動X-Window,或是重開機。若是安裝成功,則會看到X-Window的登入畫面。 - 進入X-Window之後,在console視窗輸入
sudo gedit /usr/share/applications/NVIDIA-Settings.desktop
,然後填入以下內容之後存檔:[Desktop Entry]
,然後就可以在「應用程式->系統」中找到nVidia的X server設定程式了(若是更新driver,則不需重複進行此步驟)
Name=NVIDIA Settings
Comment=NVIDIA X Server Settings
Exec=nvidia-settings
Icon=
StartupNotify=true
Terminal=false
Type=Application
Categories=Application;System; - 啟動nVidia X server設定程式,然後設定自己需要的設定
另外,有幾個常用的option可以設定在xorg.conf的Device or Screen區段內:
- Option "NoLogo" "true" ---- 關閉進入X-Window時顯示的nVidia logo畫面
- Option "AddARGBGLXVisuals" "true" ---- 避免在使用Compiz-fusion or Beryl時有視窗邊框消失的問題
- Option "Coolbits" "1" ---- 啟動超頻選項
基本上,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來產生item,所以當發生validate error時而回到form時,ListView是會重新再產生新的item,而新的item會去讀取model內的值。但是,由於validation失敗,所以model是不會被更新,所以所有的item都會回到一開始的值,而不是之前輸入的值,這對於很大的form來說是會對user造成困擾的。所幸,可以透過ListView的setReuseItem(true)來避免重新產生新的item,而是沿用先前產生的,所以就可以保留validation之前的輸入值。
P.S: 雖然說理論上不一定要用ListView,但是由於所知只有ListView才有setReuseItems(),所以若是使用Loop或是其他非ListView的subclasses的元件,可能要自己想辦法處理重複產生新item的問題。
- ListView主要是用來作為動態新增項目layout的部份,因為它可以根據所給予的model或是List內的內容來產生應該要有的項目。
- Fragment主要是用來簡化設計,因為原本Fragment就是一種不需要獨立的html template file的一種特殊Panel,所以可以運用來呈現每個ListItem裡的欄位
- BoundCompoundPropertyModel主要是用來將POJO跟wicket component之間的綁定,採取更彈性的方式來實現。
有一點需要注意的是:由於是透過ListView來產生item,所以當發生validate error時而回到form時,ListView是會重新再產生新的item,而新的item會去讀取model內的值。但是,由於validation失敗,所以model是不會被更新,所以所有的item都會回到一開始的值,而不是之前輸入的值,這對於很大的form來說是會對user造成困擾的。所幸,可以透過ListView的setReuseItem(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的安裝方式,以下是安裝的步驟:
- 開啟console視窗並輸入# sudo wget http://dl.google.com/linux/linux_signing_key.pub -O- | sudo apt-key add -來匯入憑證
- 然後打開Synaptic,進到[設定]->[套件庫]->[Third party software],加入 deb http://dl.google.com/linux/deb/ stable non-free
- 然後按下重新載入,然後就可以用搜尋找到Google desktop了
2007年9月13日 星期四
Ubuntu字型設定
原則上是參考中文 fontconfig 設定檔裡的設定,但是由於這裡面的設定有些部份不是很喜歡,所以又自行修改了某些地方:
- 有關所有字型的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> - 關閉英文小字AA:
<test name="pixelsize" compare="less">
<double>8</double>
</test> - 關閉中文字體小字AA:
<test name="pixelsize" compare="less_eq">
<double>16</double>
</test>
切換Touchpad開關
NB的Touchpad預設是一直開啟的,這對於喜歡使用滑鼠的我來說其實是種困擾。從google上找了一些資料之後,可以透過一些方式來做到類似Windows下的切換:
- 首先在/etc/X11/xorg.conf中找到以下區段:
Section "InputDevice"
然後在該區段裡面加上
Identifier "Synaptics Touchpad"Option "SHMConfig" "on"
,之後重啟xwindow - 可以在console視窗輸入
synclient TouchpadOff=1
就可以關閉touchpad,
synclient TouchpadOff=0
則是開啟;或是執行
/etc/acpi/asus-touchpad.sh
,系統會自動切換開啟狀態 - 可在Compiz-fusion中設定熱鍵呼叫asus-touchpad.sh,效果更佳
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也有些不便之處與小問題:
有關以pcmanfm來替換nautilus,可以參考回覆: 請問 pcmanfm 取代 nautilus
在這篇Changing the Default File Manager in Gnome中,介紹如何將nautilus替換成thunar或是Konqueror、Krusader,也有提供還原的方法,算是相當的簡單容易。不過可惜的是,裡面並未提供替換為pcmanfm的方法。
個人是選用thunar,因為使用了pcmanfm之後,發現pcmanfm雖然速度很快,但是某些設計與功能感覺沒有thunar好用。不過thunar也有些不便之處與小問題:
- 不支援smb://這類的網址路徑,所以無法直接瀏覽網芳與ftp。(據說可以透過fusesmb來達到效果,不過我沒試過)
- 某些應用程式在透過thunar去開啟檔案再關閉之後,該程式會留下zombie,必須等到所有的thunar關閉之後會被清除。(不過似乎也不會對系統有不良影響)
- thunar與nautilus兩者不能互相進行檔案的copy & paste
有關以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卻可以?!
之前,看到網路上一些人的推薦,就抱持著實驗的心態去安裝一套叫做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的語法:
P.S: 以上語法內的task與attribute的用法與意義,請查閱Ant的說明文件
以下列出幾個在開發Java project常用的target的語法:
- 產生jar:
<target name="build-jar" depends="build-project">
<jar destfile="your_jar.jar" basedir="${basedir}/build/classes" compress="true"></jar>
</target> - 產生javadoc:
<target name="build-docs" depends="build-project" description="--> build-docs">
其中,classpathref可以填入由eclipse幫忙產生的路徑變數,通常是以你的proejct_name.classpath命名。
<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> - 產生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>
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會自動幫你選取必要的套件。或是用
要替換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來編譯。以下是安裝步驟的簡單紀錄:
P.S: amsn 0.97RC1 + Tcl/Tk 8.5a7 cvs版會無法啟動
- 先安裝svn client與cvs client:
sudo apt-get install subversion
sudo apt-get install cvs - 由於Ubuntu 7.04內建的Tcl/Tk為8.3,而amsn在編譯階段會檢查版本,所以必須先安裝8.4版
- 安裝必要相依套件:
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 - 下載cvs版的Tcl/Tk
- Tcl:
cvs -z3 -d:pserver:anonymous@tcl.cvs.sourceforge.net:/cvsroot/tcl co -P tcl
- Tk:
cvs -z3 -d:pserver:anonymous@tktoolkit.cvs.sourceforge.net:/cvsroot/tktoolkit co -P tk
- 安裝Tcl cvs版:
- 進入下載的cvs版Tcl的unix目錄
- 執行以下指令:
./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/ - 安裝Tk svc版:
- 進入下載的cvs版Tk的unix目錄
- 執行以下指令:
./configure --with-tcl=/usr/local/lib/tcl8.5/ -with-x --enable-xft -enable-threads
注意:一定要加–enable-xft參數,否則在字型的顯示與切換會有問題
make
sudo make install
sudo ln -f -s /usr/local/lib/tkConfig.sh /usr/local/lib/tk8.5/ - 設定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
- 編譯amsn:
- 下載svn版amsn:
svn co https://amsn.svn.sourceforge.net/svnroot/amsn/trunk/amsn
- 進入下載的amsn目錄,並用以下指令編譯:
./configure --with-tcl=/usr/local/lib/tcl8.5/ --with-tk=/usr/local/lib/tk8.5/
編譯完成之後,可以用
make clean
makesudo make install
安裝,或是用make deb
來產生.deb檔,再用deb檔安裝,詳細的安裝資訊可以參考INSTALL.TXT - 安裝完畢之後,可以安裝libsnack2套件來增加Tcl/Tk對於聲音功能的支援;另外在啟動的時候,如果遇到需要安裝TLS套件的錯誤訊息,請安裝tcltls套件,並在安裝後修改 /usr/lib/tls1.50/pkgIndex.tcl。將裡面的1.5改成1.50,然後存檔再重新啟動amsn。
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。
以下是簡單的步驟紀錄:
以下是簡單的步驟紀錄:
- 安裝qt3-dev-tools套件,以及相關的qt3的套件(像是libqt3-headers等等)。然後執行
./configure --disable-static --with-qt-dir=/usr/share/qt3
- 在執行完後,會顯示某些module的狀態是no,就去安裝相關的開發用套件(like gtk2, qt, chewing,libxpm-dev等等),然後再重新執行一次
- 當所有套件的狀態都是yes,此時執行
sudo make
。若是無錯誤訊息,再執行sudo make install-strip
,就安裝完成 - 在安裝完成之後,用
sudo im-switch -s oxim
,將oxim設定為預設輸入法 - 在/etc/X11/Xsession.d中建立一個75custom_oxim_init,並包含以下內容:
export XMODIFIERS="@im=oxim"
export GTK_IM_MODULE="oxim"
export XIM_PROGRAM="oxim &" - 到系統->偏好設定->作業階段,選擇「初始啟動程式」,添增一個項目,並填入指令:
oxim &
- 開啟console視窗,執行以下指令:
sudo -s -h
gtk-query-immodules-2.0 > /etc/gtk-2.0/gtk.immodules - 完成之後,重新登入或是重新啟動即可
- 如果在使用im-switch去設定預設輸入法的時候,出現無法更新alternative的錯誤訊息時:
- 請安裝galternatives套件,並在console視窗以sudo galternatives來啟動
- 從左邊側邊欄中找出xinput-zh_TW的項目,然後按下右側裡的「新增」,之後輸入path為/etc/X11/xinit/xinput.d/oxim,並把priority調成60後按下確定。然後確認剛剛新增的項目是被選擇的。
- 中英文切換比較麻煩,一旦切換,所有編輯區的文字都會被送出
- 狀態顯示不太正常。原本在A視窗是切換到中文輸入法,但是切到B視窗時,會顯示為英文輸入模式,但是實際社仍為中文輸入模式,而且此時編輯區跟候選字區都無法正常顯示
Wicket 心得(2)
- 動態加入javascript:
- 呼叫AjaxRequestTarget的appendJavascript(),不過僅能在Ajax component上使用
- 使用JavascriptUtils.writeJavascript(), 需要有wicket.Response作為參數。一般可以透過實做IHeaderContributor來獲得。然後在需要加入Javascript的page,加入以下code:
add(new HeaderContributor(new YourHeaderContributorImpl()));
即可 - Component可以透過override onComponentTag()來將原本的HTML tag進行置換。例如把無效的AjaxLink的<a>換成以<span>替代
- 關閉輸出wicket id到頁面:
getMarkupSettings().setStripWicketTags(true);
- 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則是一定沒有視窗外框。解決方法:
目前雖然Compiz-Fusion還在開發階段,但是穩定度已經比6月底的版本好很多了,甚至比Beryl穩體,效率也還不錯,資源的使用也比Beryl少。在特效上也比Beryl多。
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的設定:
前面所有設定都依照預設值即可,除了幾點需要特別設定:
1. VGA driver選用vesa
2. 在螢幕設定時選擇advance,將水平更新率設定為36-52,垂直更新率設為36-60,並且將解析度只留下640*480
3. 完成設定後存檔離開,並且重新啟動X server
此時應該就可以進入圖形安裝模式了
P.S: 有其他人說過,不能用圖形介面安裝時,可以用文字模式安裝。但是我實際上發現,當碰到那個問題時,即使文字模式安裝完畢,也無法進入x window
目前的解決方法:
在出現錯誤訊息回到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來達成,範例:
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>
DropDownChoice choice=new DropDownChoice(...);或是自行繼承AbstractDefaultAjaxBehavior並進行必要改寫onComponentTag()與respond()來加入所需要的javascript與處理行為
choice.add(new AjaxEventBehavior("onchange") {
protected void onEvent(AjaxRequestTarget target) {
System.out.println("ajax here!");
}
}
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也就為不足
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,所以會出會轉型錯誤。
當然,這問題對於一般的系統可能是很難碰到。但是如果對於有應用到繼承觀念的系統的話,也許是需要特別注意的。
例如,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,所以會出會轉型錯誤。
當然,這問題對於一般的系統可能是很難碰到。但是如果對於有應用到繼承觀念的系統的話,也許是需要特別注意的。
訂閱:
文章 (Atom)