#!/bin/bash #this is an automatic oxim installation script for debian/ubuntu users, #please visit http://opendesktop.org.tw/demopage/oxim/ #for more detail. #special thank for firefly. aptitude install build-essential checkinstall libglade2-dev \ libgnomeprint2.2-dev libcurl4-dev libqt3-mt-dev \ libchewing3-dev libxpm-dev libxtst-dev autoconf libtool \ fakeroot im-switch autoconf automake libtool debhelper \ libgtk2.0-dev libxft-dev cvs -y&& cvs -z6 -d :pserver:anonymous@opendesktop.org.tw:/misc/cvs co oxim && cd oxim && sh autogen.sh && ln -s doc/debian && chmod 755 debian/rules && dpkg-buildpackage -b -rfakeroot && echo "" echo "Compiling Done! Now installing OXIM on your system !" echo "" dpkg -i ../oxim*.deb && im-switch -s oxim -c all_ALL rm -rf oxim && chown maxsolar:maxsolar oxim_1.1.6_i386.changes echo "" echo "Now enjoy OXIM as you wish!"我想重新啟動x就可以快樂的使用oxim了! 再次謝謝螢火飛大大!
2008年10月30日 星期四
好用的oxim輸入法
linux下顯示硬體資訊--hardinfo
好用的chm viewer--xchm
Java on Linux 簡易設定
01. 安裝環境
J2SE Development Kit 5.0 Update 16 with NetBeans IDE 6.1 Bundle
我所選擇的環境是Java SE 5.0 與Netbeans IDE 6.1的整合套件。JDK是一個開發的元件,內含java語言的編譯器、JVM,以及JRE(內有標準的類別函式庫)。也就是說一般的使用者只是想運行java程式,只要有JRE就好;如果想要開發java程式,則必須安裝JDK;如果想要一個圖形整合介面,那麼可以考慮昇陽官方的Netbeans。不過必須有一個觀念,Netbeans只是一個空殼,如果沒有JDK,Netbeans也只是一個圖形介面,什麼碗糕也跑不出來。因此如果不安裝bundle組合套件,那麼可以自己下載最新的JDK以及Netbeans IDE。
另一個應該注意的是,雖然安裝的JDK包含了JRE,不過當你在使用瀏覽器遇到使用java程式的時候,還是會出現警告找不到JRE的視窗。這是因為JDK會使用自帶的JRE,而這個JRE並不會給編譯java以外的事情使用,這是為了編譯時候的過程是順利、且可以確保版本號,因此JRE需要額外安裝。不過這樣所帶來的好處是,開發人員可以安裝多個JRE來測試不同環境所編譯出來的程式是否有任何異常問題,而系統預設以最高版本的JRE來運行。
02. 環境變數設定
首先,系統的shell並沒有辦法知道JDK在哪裡,你必須告知系統JRE的PATH,例如我放在/usr/local/jdk1.6.0_07/bin,
則應該在定義PATH的設定檔內修改成:
JAVA_HOME=/usr/local/jdk1.6.0_07除此之外,路徑對於JVM來說只是一個package。例如在unix上一個再普通不過的binary,你可以透過路徑的方式告知該做什麼動作:
export PATH=$PATH:$JAVA_HOME/bin
gcc ../abc/test.c -o bin/test不過java可不能這麼用。在當前目錄下假設有一個abc.java檔案(假設public類別名稱也為abc),詳細訊息可以這樣印出來:
javac -verbose abc.java這個動作會產生abc.class的byte code:
java abc來執行這隻程式。執行程式時,java會認為JVM才是真正的作業系統,以下是簡單的執行流程:
--class loader:指派記憶體位置。
--byte code verifier:進行雜湊校驗,比對是否真的由javac所原生。
--hotspot excution:就是JVM啦,有可能是client,也有可能是server。
--talk to hardware:由JVM產生native code與硬體溝通。
03. classpath與sourcepath的設定:
通常java會把編譯後的bytecode跟原始碼放在一起(而不是當前目錄)。不過,在執行一個大的project時,會撰寫成許多不同的類別,這時候為了除錯方便以及also compile方便,我們需要把source code與byte code分開。假設source codes放在src,而byte code放在classes,則我們在有abc.java的工作目錄時,編譯java需要這樣作:
javac -d classes -classpath PATH_OF_CLASS abc.java
-d: 告知java compiler編譯完成把byte code放在./classes裡。 -classpath 告知有哪些既有的class可用的路徑。效果等於-cp,但是-cp無法用於環境變數。如果classes裡缺少某類別的byte code可以使用,則需要回頭編出一個class來使用。預設會在當前目錄找,但是如果找不到,則無法also compile--造成編譯失敗。解決的方法是指定sourcepath給java:
javac -d classes -sourcepath PATH_OF_SOURCE abc.java
-sourcepath 告知哪裡有.java原始檔。 假設在src下有多個套件,仍然只需要指定src即可,javac會自動往下找其他套件。這樣java就知道去哪裡找cource code去編譯該類別出來。但是不建議sourcepath與classpath混用,因為混用的結果只有sourcepath有效(除非還有用到其他類別)。
javac -d classes -sourcepath PATH_OF_SOURCE -classpath PATH_OF_CLASS abc.java理由是,當java compiler編譯時缺少某一類別,他會在sourcepath裡尋找是否有對應的.java。如果有,他也不會去找classpath,會直接再編譯一個byte code出來;因此在指定sourcepath以及classpath時,通常是不會同時使用的。javac會先抓取sourcepath引數,再抓取classpath引數。無論你是否先指定classpath,抓引數的順序仍然是先sourcepath再classpath。簡而言之:
利用-sourcepath達成also compile;
利用-classpath告知既存的類別檔位置。
當然,使用unix都是懶惰的人,總是希望事情可以簡化又依照我們的要求,我們可以把他寫進環境變數裡:
export CLASSPATH=~/java-workspace/classes同樣的,如果要設定sourcepath,也寫成:
export SOURCEPATH=~/java-workspace/src不過我實在很懶。如果每次編譯都要打這串javac -d classes,我實在覺得很煩。不過 -d存放class檔無法使用環境變數固定住,因此我目前想出來的方法是用alias。
alias javac='javac -d ~/java-workspace/classes'問題就解決啦!如果是呆呆windows可能就沒這麼方便了。 為什麼要這麼麻煩去特別指定sourcepath以及classpath呢?假設今天有一個大專案,需要很多次修改某幾個類別,你一定不希望每個.java都被編譯一次,這時候可以「只」指定classpath,不指定sourcepath(在當前目錄),則系統就會去找既有的class來使用,降低了大量重複also compile的無謂cpu時間消耗。
04. 執行java
到此為止,編譯方面的環境設定就結束了;那麼執行呢?
傳統的程式編譯出來的binary,只要設定好PATH,則我們可以這樣作:
Testjava ../abcdef.txt但是我已經設定好classpath了,因此我可以在任何一個地方下指令:
java Testjava都可以順利執行。如果想要把Testjava變成外部命令,可以寫在alias:
alias Testjava='java Testjava'
關鍵字:java, java se, netbeans, classpath, sourcepath
2008年10月29日 星期三
ACL簡易設定筆記
ACL為Access Control List的縮寫。acl用在很多地方,其實就是額外的存取控制,許多網路設備也都有自己的acl policy。
ACL是user space的層面,想要開啟他必須從filesystem下手:
mount -o remount,acl接著必須要安裝acl這個套件:
[ -e $(which setfacl) ] || aptitude install acl也就是你的系統需要安裝acl utility以及filesystem支援acl,你才可以正式使用以下功能。
01. 查看acl
ls -l filefile-rw-rwxr--+ 1 maxsolar maxsolar 0 2008-08-25 00:13 filefile 有+表示有extended acl.
02. 查看檔案的ACL設定:
getfacl filefile
# file: filefile2 # owner: maxsolar # group: maxsolar user::rw- ##owner:普通user權限 user:geeko:rw- ##named user:acl新增給geeko的user權限,可以多個entry group::r-- ##group:普通group權限 group:geeko:rw- ##named group:acl新增給geeko的group權限,可以多個entry mask::rwx ##mask是named user/group最高能給予的權限 other::r-- ##other:普通other權限
03. 設定檔案的ACL
## 設定geeko只能rw filefile這個檔案
setfacl -m u:geeko:rw filefile## 設定的entries可以多筆
setfacl -m u:geego:rw,g:maxubuntu:rw filefile## 設定最高權限mask:
setfacl -m m:rwx filefile## 移除一筆acl entry: 權限不用寫
setfacl -x u:geego filefile## 複製acl狀態設定:
getfacl filefile > ACL_setting#移除所有ACL設定,回覆到傳統權限:
setfacl -M ACL_setting filefile
setfacl -b filefile
04. 設定資料夾的ACL(default acl)
設定了default acl,其下的目錄跟檔案都會繼承defaults acl權限;
default acl跟access acl的關係是獨立的。
子目錄會繼承上層目錄的access acl以及default acl;檔案則是把default acl轉換成自己的access acl。
setfacl -d -m u:geeko:rw,g:geego:rx dir_filefile# 注意-d -m的位置不能互換
05. 備註
-d/-D與-m/-M功能相同,差別在於大寫參數是讀取檔案。
好用的vim設定
Cisco Packer Tracer 5.0模擬器
2008年10月24日 星期五
張銘清事件
工程師與科學家
科學家、音樂家、發明家,像是一個能夠獨立創造東西的傑出人物,他的才能或知識過於淵博,以至於能自成一「家」。
工程師、老師、技師、理財師,想是能夠把他所學的技能或知識發揮得淋漓盡致,可以靠這行賺錢,也可以指導別人,所以稱為師。
不過我想最大的差別,就是獨立創造的能力。科學家不需要依靠別人,他能夠自己創造知識給別人讀,他也有能力反駁或支持別人的理論;他不需要讀「書」,因為他要讀的東西書本沒有;他可能也不寫書,因為寫出來也沒幾個人看得懂。工程師也許有卓越的技術跟豐富的經驗,能夠解決許多困難而複雜的問題,但是跟科學家不同是,他無法創造知識,他只能用他所所見所聞所學來解決問題。他需要看書,他需要看別人的構想;他可以是全世界最厲害的工程師,但他還是需要看書。
地球上厲害的人太多了,其實國外真的有很多的頂尖工程師也可以稱為工程家了。例如軟體工程,為了解決某一項問題而發明了另一種通訊協定,或是發明一種新的架構,者是無中生有的,書本找不到的,沒有人想過的,這樣的人,我寧願稱他們為工程家。
但問題是,一般人只是平凡的人,沒有接受這種訓練的必要,這樣的研究生活恐怕也不是他們能夠接受的。所以這世界上的工程師多如牛毛,工程家卻少之又少,有的話也是人間瑰寶。 相反地,一個科學研究人員也不能夠等於一個科學家,因為他必須要有獨立研究,獨立創造知識的能力。那怕是做了很多實驗數據,發表了很多篇論文,如果還是依賴於別人的想法,或是偷偷去探聽別人的想法,沒有那種無懼於別人竊取知識的那種豪氣,那麼都還是科學師罷了。
而我所期盼的境界,就是「家」,而不是「師」。 |
研究所的那段時間,我看到了一些國外真正的科學家,他們的思維跟處理的方法,真的跟我研究室的大學教「師」有很大的差別。論文跟學生買,因為自己七年還沒有足夠的SCI來升等...很多計畫,很多學生,沒有一個真的指導的好;光是我在研究所的這兩年光陰,加上我已經有四個人想離開研究環境了。所以應該怎麼說呢?我以為我跟著一位科學家,其實只是一位科學師;他不是不厲害,只是他沒辦法讓你也這麼厲害。
我一直認為,科學家的武器是他的知識跟想法,工程師的武器是他的知識跟方法。退伍離開那台灣最黑的部隊之後,我天真的認為我可以當一名工程家。我可以吸收非常多的技術,累積非常寶貴的經驗,自己不斷提昇自己的價值,有一天我也可以創造出一些很不一樣的東西! 於是我從自己最熟悉的linux開始,去補習班接受正規的教育訓練;網路的概念我比較薄弱,也去參加了CCNA的培訓課程;php不熟,我也去上php/MySQL的課程;自覺程式語言沒有一個非常熟的,因此下定決心鑽研java,參加了SCJP的課程。當然這是書本上的學習過程,實務上的學習課程讓我發現我的想法勢必不可能成真了。
台灣並不重視技術,特別是資訊產業的技術。
無論呆呆windows也好,unix-like也好,熟悉兩種系統架構,甚至是整合的工程師,他們的知識需要花多少時間來閱讀,他們的學習需要花多少的成本,解決公司或客戶的方案需要花多少時間思考、設計或是從網路上找答案?這些成本似乎都被忽略了,因此以系統整合商而言,一個新進的工程師在台南18000-23000,工作時間10-12小時。所以這是請一個什麼都不會的高職畢業生來作點滑鼠的工作嗎? 那些熱愛系統的工程師,一天10-12個小時的工作時間,他們回家有時間唸書嗎?有體力吸收新知嗎?月薪18000的工程師,繳完房租或是水電油錢,再扣這個月的生活費,你覺得工程師們有能力再去買一本將近1000元但是很好用的工具書嗎?
但也不能完全怪系統整合商...因為他們的客戶就是只能給這樣的錢,系統工程師本來就應該是高知識高所得的族群,為了節省成本,從工程師身上扣;知道要維持助理小姐一個月20000的薪水,為什麼不維持工程師一個月30000的薪水?眼尖的也知道,成本的問題。
所以結論就是,台灣的企業根本不想花錢在資訊上,他很重要可是平時看不到,所以我不付錢;但是下游整合商又需要這客戶,所以接下這個錢少少的案子;差價誰吸收?當然不會是老闆,誰的人最多?工程師阿!好吧,所以從工程師身上扣。這會導致一個效應,就是越來越少人會想做電腦工程師,或者是作電腦工程師的人素質會一年比一年差。以我自己為例子,看到這樣的待遇,我就算對這些東西再有興趣,我投入了我有時間讀書嗎?我有時間進步嗎?我有維持我生活品質的能力跟時間嗎?沒有,完全沒有,唯一的可能就是像kenduest或netman老大一樣當補習班老師,這是我認為比較有意義的出路。不過,這不是我想要的,這樣的環境雖然友善,但是不會進步。
這幾個月,我第一次教到完全不想念書,只想混學歷,不在乎自己前途或父母感想的一群糟小孩。當然不是所有學生,但比例算起來也有98%了。我只需要把我國中會的東西交給他們就好了,雖然他們是高中生。所以當老師我喜歡,但是我希望可以教程度好一點,有想法有遠見的小孩。所以教成年人也許不錯;不過在電腦補習班當老師,恐怕沒工作經驗人家也不敢請;當補習班老師...一堆小孩父母交錢...小孩來補習班交朋友,雖然都有所收穫,但恐怕不是付錢的人所想要的...又有成績壓力,坦白說,小孩不會讀書,或是不想讀書,真的是他自己的問題,這東西,花錢無法解決。
10月,我很徬徨。我實在對於IT產業失去了信心,當然我甚至沒有機會看到其他更不一樣的部份,不過我認為這樣的待遇不合裡,使用者付費,我付出的東西只是裝在我腦袋裡,不是我天生就會,這樣的待遇我根本不想待,待出來人都變呆了,知識也沒有進步。走著走著,我回到母校的地科系,看到龔老師實驗室外面貼出一張"Origin and Evolution of Earth: Research Questions for a changing planet"這概要式的文章,裡面說明了由美國能源部、NASA、國家科學基金會、美國地質調查所、國家研究委員會共同組成了一個研討會,來探討地球科學有關的十大議題:
01. How did Earth and other planets form? 02. What happened during Earth's "dark age" (the first 500 million years)? 03. How did life begin? 04. How does Earth's interior work, and how does it affect the surface? 05. Why does Earth have plate tectonics and continents? 06. How are Earth processes controlled by material properties? 07. What causes climate to change--and how much can it change? 08. How has life shaped earth and how has Earth shaped life? 09. Can earthquake, volcanic eruptions, and their consequences be predicted? 10. How do fluid flow and transport affect the human environment?
當中牽涉到許多整合性的議題,結合了地球物理、地球化學、岩石學以及高壓物理、水文學家、火山學家、生物學、古生物學等等專家的知識,內容的探討勾起了許多我從前的夢想以及所學,當初對他的放棄難道真的就是因為遇到了一個科學師嗎?
我想,經過這一年的洗禮,我是真的想離開台灣一陣子,雖然他是我的母國,不過這個環境目前對我而言太不理想了。不過不是為了錢,而是為了夢;我要作回科學家,不是工程師,也不是科學師。
改天,我再把這篇翻譯出來給各位雅俗共賞~
Big5轉UTF-8
好久沒寫一些筆記了,最近忙著上課,每天的生活都很勞累,讀書的時間卻不多,晚上又不能讀書,情況真是岌岌可危....
一般而言,linux users要讀取呆呆windows上的純文字內容時,會遇到幾個困難:
1.檔名的編碼不同。
2.檔案內容的編碼不同。
3.檔案格式不同。
就算今天是一個binary,還是會有檔名的問題,除非你透過FTP或是samba在傳輸前已經先幫你轉換檔名編碼過了。以下針對這三點來作說明:
dpkg -l convmv || aptitude install convmv -y
1.列出系統可用的編碼:convmv --list
2.基本語法:convmv -f big5-eten -t utf-8 abc.txt --notest
-f: from
-t: to
--notest:真的轉檔,預設只是測試而已。
--nosmart:convmv會自動偵測是否已為目的編碼,是的話就不做處理。如果真的有無法轉換過去的問題,可以試著加入--nosmart參數,這是optional。
3.轉換單一檔案:
convmv -f big5-eten -t utf-8 abc.txt --notest4.轉換某路徑及其下的所有檔案:
convmv -f big5-eten -t utf-8 -r --notest這比較常用,因為你已經無法正確的輸入檔名了,因此從某個目錄為起點下這個指令比較方便。
更換檔案內容:iconv
其實很多人比較需要這個,因為現在許多GUI軟體都會自動轉換檔名的編碼,非常人性;不過檔案內容就沒辦法了,需要手動解決。
dpkg -l libc6 || aptitude install libc6 -y1.列出可轉換的編碼:
iconv --list2.開始轉啦:
iconv -f big5 -t utf-8 oldfile.txt > newfile.txticonv語法跟convmv很像,也比較簡單,一次轉一個檔案。他沒辦法直接用原來的檔名,僅戶列出轉換後的結果到螢幕上,因此給個stdout過去存成一個新檔就可以了。
更換檔案格式:dos2unix
dpkg -l tofrodos || aptitude install tofrodos -y1. tofordos套件內含兩隻程式:unix2dos以及dos2unix,從名稱來看再清楚不過了。這兩個指令單純解決windows跟unix系統換行定義的問題。
2.轉換一個從呆呆windows來的純文字文件:
dos2unix abc.txt會自動將abc.txt轉成unix格式。同樣的在unix-like的環境下編輯的ascii,呆呆的一定不懂,這時後轉給windows users就要先下:
unix2dos abc.txt