2007年7月16日
公告/Announcement
I had received some dummy comments which are like advertisements. In order to avoid web spiders disseminating advertisements on my blog, I closed my blog few days. If you have any comments or suggestion, please send an e-mail to me. My e-mail could be found out on my blog.
2007年7月14日
2007年7月13日
2007年7月11日
用Gimp畫出葉子跟水果
在linux底下使用特圓體
使用了王教授的特圓體比之前的特黑體好多了,字體稍微不會那麼擁擠,在使用新宋體的時候,可能是我不會調整font設定吧,即使用上wiki上面的字型設定檔,我在firefox上面看起來還是"糊糊"的,用了特黑體是很清楚,可是有時候字體真的是擠成一團
其實這個字型也不沒有缺點,缺點就是特別寬,不過比起那個啥vista的雅黑體好多囉~粗的程度還會依照筆劃不一樣,有時候看起來真的會頭重腳輕,可以在網路上找人家post出來的照片就知道,雖然立意良善~不過效果就.....
2007年7月8日
Linux開發的困境
========================================
簡單講,Picasa 模式不可行,你難道要每個程式都自己帶一份 wine
針對自己的程式去修改過讓他能夠支援?這件事情的難度沒有像你
想像的那麼低,要有能力修改 wine,開發人員得同時「精通」
Windows 和 Linux 平台上的程式設計,才做得到這件事情
也只有像 Google 這樣的公司,有本錢玩得起這種遊戲
何況,他的 Picasa 也不是直接用 wine,而是一定得用自帶修改版
即使是這樣,中文輸入法或中文顯示仍然不是在每個 distro 都正常
wine 的支援度和穩定性,距離真正的 Windows 事實上還是差很遠的
而當 wine 好不容易提昇支援度的同時,Windows 上的新功能以
成倍數的速度在持續成長,加上 .net,可以遇見,wine 的相容性,
在微軟強勢高速發展大量新技術的狀況下,將會越來越差。
Mono 面臨的情況也完全一樣,當他做到跟現有的 .net 完全相容時
微軟又會推出大量嶄新的規格,這時候 Mono 會再次陷入挨打的情況
不管怎麼做,就只能在後面苦苦追趕,始終不可能有完全相容的情況
微軟髮展新規格和新技術的速度,在雄厚資本挹注下,是無與倫比的
而且這些新技術大部分都有非常完整的文件和範例,可免費使用。
其中甚至已經有越來越多被翻譯成多國語言,開發環境非常的友善。
Windows 上的開發工具也是多樣且成熟,而且大部分都非常的好用。
即使是十幾年前的老舊開發工具,仍然比 Linux 上最新的開發工具
要好用上很多倍,先進上很多年,這是 Linux 開發人員的痛。
你在 Windows 上要知道系統上有幾個磁碟機,只要寫「一行」。
而且這一行保證搬到任何的 Windows 系統都可以如預期的運作。
在 Linux 上要做到同樣的事情,你得使用 HAL、DBus,呼叫數十個
複雜且「幾乎找不到文件」的函數,而且不同 HAL 和 DBus 版本下
作法和支援度都各自不同。到了 FreeBSD,作法又完全的不一樣了。
而即便你爬各種程式碼,好不容易搞出會動的版本,
拿到不同的 distro 下可能又不會動了,不同的桌面環境下
可能又不能用了,而且你找不到錯在哪裡,也沒有任何參考文件。
你只能拿一堆看不懂的原始碼過來,自己慢慢爬,運氣好找得到解法
費盡心力做出來的東西,往往卻有很高的機率不會正常運作。
這樣的程式除非是真的很熱血,沒人會想要寫。
在 Windows 下插入一片光碟即可使用,在 Linux 下,要用程式
去 mount/umount 一片光碟,有七八種方式,在不同的 distro,
不同的桌面環境,不同版本的 HAL 下,建議使用的方式都不同,
而且每種都不保證有辦法正確運作,很悲哀不是嗎?
自由開放的代價,就是亂七八糟的相容性,百家爭鳴的規格混亂
帶來的就是程式設計師要花大量時間,去處理這些和程式本身
的功能完全不相幹的事,而即便是努力處理了,還不一定能夠克服
更糟的是你處理好之後,可能隨時會在下個版本的 Linux 又壞掉。
這樣的開發環境,除非 Adobe 一類資本雄厚的公司,誰會有興趣?
你可以說使用 Java、使用 Mono、使用 Qt 不是就跨平台了嗎?
實際上卻不是這麼回事,要處理的事情仍然是很多,而且這些平台
和函式庫之間,也存在著許多自己的相容性問題,永遠處理不完。
很多各平台上特殊的功能,仍然必須使用低階的方式來做,
而這些方式,往往都是複雜且相容性混亂的。
要在程式裡面啟動瀏覽器,在 Windows 只要寫一行,且保證能用。
在 Linux 桌面下,至今沒有任何一個可以保證正常運作的方式。
Gnome,XFCE,KDE 都各自使用自己的解決方案,各家都不同
為了偵測系統上有什麼瀏覽器可以用,需要的又是大量
撰寫困難,且不保證可以正常運作的程式碼。
這樣惡劣的開發環境,除非真的是很熱血的人,誰吃飽太閒?
要呼叫預設程式開啟某個檔案,在 Windows 上只要一行,保證可用
在 Linux 上你要讀完七八份非常長的英文文件,然後寫上
上千行的程式來處理複雜的 mime type 和各種複雜的 xml 檔案
重點是,即便你寫完了,還是不一定可以正常運作。
所以 gnome 提供了 gnome-open,XFCE 提供 exo-open,KDE
則是用和大家都不相容的自家解決方案,你說,開發者要選哪邊站?
xdg-open 是最近在推的統一解決方案,不過顯然尚未成氣候。
在 Windows 上只要寫一行,在 Linux 下卻是搞不完,
這樣的例子不勝枚舉,我實在不忍心繼續寫下去了...
不想一直打擊各位對 Linux 的信心,只是有些殘酷的事實要認清。
2007年7月6日
Ubuntu音效問題
以下方法適用於 ALC861 and Intel HDA sound drivers,
我的Toshiba a100升級7.04也出現過類似問題,解決方法如下:
試試看
開啟附屬應用程式的終端機
輸入:
cd /etc/init.d
建立一個新文字檔:
sudo gedit soundstartfix
文字檔裡面的內容請輸入:
#!/bin/bash
kill $(lsof -t /dev/dsp* /dev/audio* /dev/mixer* /dev/snd/*)
sudo modprobe -r snd-hda-intel && sudo modprobe snd-hda-intel model=auto
存檔,然後離開文字編輯器。
接下來請在終端機輸入:
sudo update-rc.d soundstartfix defaults
(等候一下...等它完成)
輸入:
sudo chmod +x soundstartfix
重開機,應該可以work的很正常了:)
主要事先把Ubuntu預設的砍掉,然後在從新偵測一次,期中lsof真的是蠻有用的一個程式,跟netstat有得拼
在Ubuntu上用Rainlendar2
這是一個殘念的紀錄
2007年7月3日
安裝realplayer 10
http://www.real.com/linux/
下載回來後把檔案加上chmod +x xxx.bin
然後執行安裝完畢就可以了,跟安裝java很像,不過他跟一些程式一樣有輸入法的問題,如果是中文環境可能會不能執行,加上export GTK_IM_MODULE=xim在執行就可以了
2007年7月2日
Ubuntu的套件哲學
Ubuntu 組件庫的哲學
因為 Ubuntu 原生於 Debian, 所以也是對於自由很堅持,因此希望把自由軟體和非自由軟體拆開來放。有些是因為人力的問題,有些套件是在 Debian 裡面有,但是不被 Ubuntu 官方支援的。所以 Ubuntu 的處理方式是把它們拆成以下四大主要組件庫,類似 Debian 一樣,讓使用者選擇需要。前兩個 Main 和 Restricted 是官方正式支援的,Universe 和 Multiverse 是不被官方正式支援的。而 Restricted 和 Multiverse 裡面是 non-free 的軟體。
- main
大部份常用的自由軟體都會收編在 main 裡面,這裡面所含的軟體需要完全符合 Ubuntu 對自由軟體的定義,詳細規定請見http://www.ubuntu.com/ubuntu/licensing。因此通常使用 main 就可以應付日常所需。而 main 裡面所有軟體,都是官方支援的,所以 Ubuntu 將會提供 main 的安全更新和技術支援。而它的角色和 Debian 裡面的 main 差不多。
- restricted
裡面所含的是非自由軟體,通常是不公開程式碼的程式或者授權不符合 Ubuntu 的要求。例如顯示卡驅動程式等等。雖然是非自由軟體,但是因為這些都是比較重要的非自由軟體,所以 Ubuntu 在符合該軟體授權下,將會進行穩定性上的測試,並也提供安全更新。因為不是自由軟體,所以 Ubuntu 在遇到問題時不一定能解決,所以維護品質沒有 main 那個好。桌面使用者通常都會使用 Restricted 這個組件庫,來對多媒體支援有比較好的效果。
- universe
這裡面大部分的軟體都是自由軟體,而且幾乎都是包含在 Debian 裡面的 main 中。但是因為人力上的問題,所以 Ubuntu 無法親自去包這些套件,而是直接由Debian 裡面抓下來從新編譯,或者是直接從外部程式碼自動編譯出來的。不管怎麼樣,這裡面的軟體是不被 Ubuntu 正式支援的,Ubuntu 雖然有提供它的安全更新,但是不保證能即時修正或能穩定運行。例如國內有名的打 BBS 軟體、 PCManX 就放在這裡面,或國內有名的輸入法程式 gcin 也是包含在這裡面。Ubuntu 預設沒有啟用 universe 套件庫,所以想要用的人得自己在 sources.list 啟用。
- multiverse
裡面的軟體都是非自由軟體,但是因為重要性不足或授權的因素,所以放在這裡。而這裡的軟體也是不被官方正式支援的。而和 universe 一樣,Ubuntu 預設也是沒有啟用它。
而除了以上這幾個組件庫以外,它還有其他附屬的組件庫。因為這些組件庫在穩定版出來以後,就不會再更動,所以當有漏洞的時候怎們辦?或者有 人懶得每半年都更新一次,但是又想要在舊版 Ubuntu 裡面享用一些比較新版的軟體時,總不能自己編譯和搞定 library 的問題吧!所以在上面四大組件庫,都有以下三個分支。
- security
穩定版本正式釋出後,如果程式有重大安全性上的問題,將會在這裡更新。而這裡所謂的更新,通常只會打上 patch (這裡指原始程式碼的修正檔。), 還是同一個版本,所以功能也不會增加。因為 security 套件庫是針對系統安全而更新,所以裡面大部份更新都和伺服器或系統架構有關。而這個組件庫預設是被開啟的。
- updates
這也是在穩定版釋出後,提供系統更新的一個方式。但是和 security 不同的是,這裡所做的更新都是和安全性沒有關,而是和程式的 bug 相關。例如某套桌面軟體有時候會當掉,而這個當然和系統安全沒關係了,這種更新就會放在這裡。updates 裡面的更新和 security 一樣,也只做 patch, 所以也是同一個版本,不會有新功能。這個組件庫也是預設被開啟的。
- backports
例如 6.06 (Dapper) 中附的網頁瀏覽器是 Firefox 1.5.0.3, 但是在穩定版釋出後,也許這段時間裡面出現了 1.5.1, 1.5.2, 1.5.3 等版本,但是在主套件庫中軟體是一定不會更新的,而預設開啟的 security 或 updates 套件庫除非是有安全性的問題或者是有些 bug,否則不會更新。就算是因為安全性或 bug 而更新,也通常不會換成新版的。所以 backports 就是為瞭解決這樣的問題,開發者會將新版的軟體就會放在 backports 中,讓使用者使用舊版發行版但是可以用到比較新的套件。而通常在 backports 中的程式都是和桌面相關,而不會去更新到系統或伺服器架構,這樣才能保證系統運作穩定。而預設 backports 是沒有使用的,所以要自己修改 sources.list 來啟用。
備註: 使用者可以要求希望哪些軟體進入 backports, 詳細辦法可以參閱http://backports.ubuntuforums.org
各種不同的 Ubuntu 分支
Ubuntu 原先釋出的版本是預設採用 Gnome 這套視窗管理程式,但是在 GNU/Linux 的世界裡面有許多種的桌面系統,或者因為版本的訴求與某些使用理念不同,所以 Ubuntu 目前有五種不同的安裝版本可以使用。而這幾種安裝版本的組件庫是採用一樣的,它們可以採用不同的光碟來安裝,安裝後就是預設為不同的衍生版本,因為採用同 樣的組件庫,所以您當然可以在安裝後切換成別的衍生版本。實際上各個衍生版本都是以一個叫作虛擬套件的套件包來控制。也就是那個虛擬套件是空的,但是因為 裡面設定了相依到很多該衍生版所需的套件,所以安裝那個虛擬套件,就會自動把該衍生版所有套件裝起來。安裝方式就是使用這個指令 apt-get install $<$該衍生版套件名稱$>$, 當然這是是給各位一個概念,詳細的安裝說明會在後面提到。
2007年7月1日
gnuplot一個簡單好用的繪圖程式
輸入plot sin(x),就會跳出一個畫好sin圖形的視窗,主要是因為我們可以看到gnuplot預設的term設定為x11,如果我們改變term,可以把結果輸出成圖片,如png
那如何將結果輸出到圖片呢?靠得是三道指令
- set output "sin_output.png"
- set term png
- replot
這圖片實在有些單調,很多元素都缺乏,在我們進行接下來的動作之前,先把輸出格式改到x-win,輸入set term x11;首先,一張圖片起碼有個title,我們可以利用set title "This is sin(x) figure"來增加title;跟著可以利用set xlabel "x"跟set ylabel "y"來設定x,y軸的解釋,最後再使用replot指令來重新輸出,結果如下圖