2010年12月19日 星期日

在 Mac OS X 10.4.11 上使用 MacPorts 1.9.1 來建立 Perl 以及 Python 的開發環境

在安裝 MacPorts 1.9.1 之前要把 Xcode 裝好
然後去下載 MacPorts 1.9.1 來安裝
之後再使用 root 權限執行下面這段 script 就大功告成啦~ :D
gist: 747325
#! /bin/bash
# Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
# Mac OS X 10.4.11 + MacPorts 1.9.1 -- 2010/12/19

set -e -x

# Upgrade MacPorts
port selfupdate
port upgrade outdated || (port deactivate subversion && port clean subversion && port install subversion)

# Install Perl
port install perl5 +perl5_12

# Install Python
port install python27 +no_tkinter
port install python_select
python_select python27

# Install Vim
port install vim +perl +python27

# Install Git
port install git-core +python27

# Clean
port -u uninstall
以上這段 script 安裝了 perl/python/vim/git

2010年12月17日 星期五

Taiwan Radio Tuner 小更新 - 新增學術電台分類

線上版 http://fd.idv.tw/radio/ 以及 Google Chrome Extension - Taiwan Radio Tuner 都加入了學術電台的新分類

目前只有三個學術電台,分別是
  • PTT Radio - PTT Radio 網路電台
  • PTT Radio - OnlyMayDay
  • THBS - 清華大學校園電台
往後還會陸陸續續增加更多台灣的學術電台,歡迎提供資訊。

2010年11月24日 星期三

Bazaar 的分支使用方式

Bazaar 的分支使用方式與 Mercurial 跟 Git 都不太一樣
它比較類似 Subversion 的使用方式以下是簡單的示範

首先要建立一個 shared repository
~$ bzr init-repository hello

然後在 hello 這個目錄底下再建立個別的 branch 目錄
~/hello$ bzr init trunk

或是直接從遠端拉變更資料回來
~/hello$ bzr branch lp:ubuntu/hello trunk

如果是要做本地端分支的話,要再建立另一個新的目錄 (這邊有點類似使用 svn copy 的分支方式)
~/hello$ bzr branch trunk my-branch

如果是要建立遠端的分支的話,則是利用 Launchpad 提供的服務
~/hello/my-branch$ bzr push lp:~fourdollars/hello/my-branch

所以 Bazaar 的缺點是不像 Mercurial 跟 Git 那樣在一次的 clone 之後就可以將所有的分支都抓下來了,但是另外的好處就是由 Launchpad 提供的整合介面,讓 Patch Provider 也可以透過 Launchpad 來提 Merge Request,而 Reviewer 只要在 Launchpad 上面點一下 Accept 就可以自動 merge 了,這樣反而省下了許多指令的使用,至於是好是壞則是見仁見智囉。

參考資料:http://wiki.inkscape.org/wiki/index.php/Working_with_Bazaar

2010年10月9日 星期六

使用 GNU Build System 管理用 Vala 寫的 GTK+ 程式

延續先前的文章『使用 GNU Build System (aka Autotools) 來管理 Vala 編譯流程

首先準備好 GTK+ 的 Vala 原始碼檔案 MyApp.vala
using Gtk;

namespace ValaTutorial
{
    class MyApp : Gtk.Window
    {
        public MyApp ()
        {
            var button = new Button.with_label ("Click me!");
            add (button);

            button.clicked.connect (on_clicked);
        }

        private void on_clicked (Gtk.Button button)
        {
            stdout.printf ("Ouch!\n");
        }

        public static int main (string[] args)
        {                                                    
            Gtk.init (ref args);

            var app = new MyApp ();
            app.show_all ();

            app.destroy.connect (Gtk.main_quit);

            Gtk.main ();
            return 0;
        }
    }
}
然後再準備一個 Makefile.am
# AM_VALAFLAGS = --pkg gtk+-2.0            

bin_PROGRAMS = MyApp

MyApp_SOURCES = MyApp.vala
MyApp_CPPFLAGS = @GTK_CFLAGS@
MyApp_LDFLAGS = @GTK_LIBS@
MyApp_VALAFLAGS = --pkg gtk+-2.0
第 1,8 行是 Vala 使用外部函式庫時需要的參數,視實際需求選擇使用
效果相當於
$ valac --pkg gtk+2.0 MyApp.vala
最後是自動產生並修改過後的 configure.ac
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.65])
AC_INIT([hello], [0.0], [foo@bar.com])

AM_INIT_AUTOMAKE([-Wall -Werror foreign])

# Checks for programs.
AC_PROG_CC
AM_PROG_VALAC([0.8.0])

# Checks for libraries.
AM_PATH_GTK_2_0                                                 

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile])
AC_OUTPUT
第 14 行會產生出 Makefile.am 所需要的 @GTK_CFLAGS@ 及 @GTK_LIBS@
最後就是一般 GNU Build System 慣用的指令
$ autoreconf -if
$ ./configure
$ make
參考資料:

2010年10月8日 星期五

使用 GNU Build System (aka Autotools) 來管理 Vala 編譯流程

首先要先安裝好需要的軟體套件

以 Ubuntu 10.04 為例
$ sudo apt-get install autoconf automake pkg-config valac vim

Ubuntu 10.04 上面的 Vim 並沒有提供 Vala 的語法著色
還好官方網站上面已經有提供了 Vala/Vim
照著做一遍就好了

準備一個的 hello world 原始碼檔案 hello.vala
void main() {
    stdout.printf("Hello world\n");
}

接者寫一個 Makefile.am
bin_PROGRAMS = hello
hello_SOURCES = hello.vala
hello_CPPFLAGS = @GLIB_CFLAGS@
hello_LDFLAGS = @GLIB_LIBS@

然後將 autoscan 產生出來的 configure.scan 更名為 configure.ac
$ autoscan
$ mv configure.scan configure.ac

再修改成下面這樣
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.65)
AC_INIT([hello],[0.0],[foo@bar.com])

AM_INIT_AUTOMAKE([-Wall -Werror foreign])

# Checks for programs.
AC_PROG_CC
AM_PROG_VALAC([0.8.0])

# Checks for libraries.
AM_PATH_GLIB_2_0(,,,[gobject])                                  

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile])
AC_OUTPUT

第 7 行的
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
會產生一些處理 Makefile.am 的工具出來

第 10 行的
AC_PROG_CC
會檢查 C Compiler 因為 Vala 最終還是會產生 C 的原始檔案

第 11 行的
AM_PROG_VALAC([0.8.0])
當然就是檢查這篇文章的主角 Vala 囉

第 14 行的
AM_PATH_GLIB_2_0(,,,[gobject])
會產生出在 Makefile.am 所使用的 @GLIB_CFLAGS@ 跟 @GLIB_LIBS@
還有會使用到 glib 裡面的 gobject 這個 module

接下來就如同一般的 GNU Build System (aka Autotools) 的慣用方法
使用以下命令來產生 configure 腳本檔案
$ autoreconf -if

然後就是 ./configure && make && make install 這類常見的指令連續技囉~ :P

2010年10月3日 星期日

BetaRadio v1.1 正式釋出

此版新增的功能是可以透過網路新增播放清單
簡單講就是 list.json 這個網路上的檔案裡面有多少清單就會看到多少清單
另外修正了播放時會斷斷續續的問題

Ubuntu 9.10/10.04/10.10 使用者可以直接使用命令列執行以下步驟
$ sudo add-apt-repository ppa:fourdollars/betaradio
$ sudo apt-get update
$ sudo apt-get install betaradio
來安裝

至於其它的 GNU/Linux 系統就要請諸位大大們幫忙產生安裝套件囉~ <(_ _)>

軟體原始碼下載 betaradio-1.1.tar.bz2 SHA1: 2768cfbb07dbc7d87b6f653645a00037629446ad
編譯時會需要 libgtk2.0-dev libgstreamer0.10-dev libjson-glib-dev libsoup2.4-dev 這些套件
執行時會需要 gstreamer0.10-plugins-good gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly gstreamer0.10-ffmpeg 這些套件

祝大家玩得開心。:D

2010年9月27日 星期一

Debian Package (6) - 使用 pbuilder - personal package builder 個人 Debian Package 製作工具

目標是編譯在 Ubuntu 10.04 上面使用的 Debian Package

首先是安裝需要的軟體套件還有修正一些小問題
sudo apt-get install pbuilder cowdancer ccache
sudo mkdir -p /var/cache/ccache # To avoid error of "special device /var/cache/ccache does not exist"

然後編輯設定檔 ~/.pbuilderrc 加入
MIRRORSITE=http://tw.archive.ubuntu.com/ubuntu/
COMPONENTS="main restricted universe multiverse"
DISTRIBUTION=lucid
OTHERMIRROR="deb http://tw.archive.ubuntu.com/ubuntu/ lucid-security main restricted universe multiverse|deb http://tw.archive.ubuntu.com/ubuntu/ lucid-updates main restricted universe multiverse|deb http://tw.archive.ubuntu.com/ubuntu/ lucid-proposed main restricted universe multiverse|deb http://tw.archive.ubuntu.com/ubuntu/ lucid-backports main restricted universe multiverse"
PDEBUILD_PBUILDER=cowbuilder
BUILDRESULT=~/deb/

接者開始產生一個編譯用的基本環境
sudo cowbuilder --create

然後就可以在原本使用 debuild 編譯 Debian Package 的目錄裡面
改用 pdebuild 來編譯 Debian Package
程式會自動透過網路下載相依的軟體套件然後將 Debian Package 編譯到 ~/deb/ 底下

或是像下面的使用方法
apt-get source --download-only hello
下載 hello_2.4-3.diff.gz hello_2.4-3.dsc hello_2.4.orig.tar.gz 後,再執行
sudo cowbuilder --build hello_2.4-3.dsc
來編譯 Debian Package

參考資料:

2010年9月23日 星期四

StarCraft2 on Ubuntu 10.04



不過目前在 Intel 顯示晶片上面似乎無法使用 Wine 來顯示 3D 圖形
所以遊戲中的 3D 模型的部份都無法顯示出來,也就是無法玩的意思。XD

參考資料:
http://www.thehelper.net/forums/showthread.php?t=147567
https://launchpad.net/~ubuntu-wine/+archive/ppa

2010年8月16日 星期一

COSCUP 2010 投影片

首先是第一天晚上的 Ubuntu BoF
第二天上午的 Introducing GStreamer
第二天下午的 Debian Policy 中的 5.6.12 小節的 Version

2010年6月26日 星期六

BetaRadio v1.0 網路廣播點播器 正式釋出

BetaRadio 因為 hichannel 網頁不斷地改版,最後碰到了 libmms 這個函式庫的一個 bug 所以專案就一直呈現死掉的狀態;不過最近終於有時間能夠找出 libmms 的 bug 並且修正,所以才能夠再次地讓這個純 C 語言寫出來的網路廣播點播器復活。

Source code tarball 可以在 http://code.google.com/p/betaradio/downloads/list 下載
相依一個特別的函式庫 json-cat 可以在 http://github.com/fourdollars/json-cat/downloads 下載 Source code tarball

另外就是特別為 Ubuntu 10.04 使用者準備好一個 PPA 可以馬上裝起來就可以使用了。

GUI 安裝方式 [系統]->[管理]->[軟體來源] 裡面的 [其它軟體] 點擊 [加入] 後輸入
ppa:fourdollars/lucid
然後關閉 [軟體來源] 選擇 [重新載入] 
再打開 [系統]->[管理]->[Synaptic套件管理程式] 搜尋 betaradio 就可以找到來安裝了

或是可以使用命令列輸入來安裝
$ sudo apt-add-repository ppa:fourdollars/lucid
$ sudo apt-get update
$ sudo apt-get install betaradio
安裝完就可以在 [應用程式]->[影音] 裡面看到 "BetaRadio 點播器" 點一下就可以使用了~ :)

2010年6月17日 星期四

Debian Package (5) - 版本號碼

關於 Debian Package 的版本號碼規則全都寫在 Debian Policy Manual 上面的 5.6.12 Version
基本格式就只有一段
[epoch:]upstream_version[-debian_revision]
其中的 epoch 就是紀元,epoch 為大於或等於零的整數,如果不特別指定 epoch 就是零,這讓我想到以前有學過:前寒武紀/寒武紀/奧陶紀/志留紀/泥盆紀/石碳紀/二疊紀/三疊紀/侏儸紀/白堊紀/第三紀/第四紀,前寒武紀一定是最古老的,所以無論後面的 upstream_version 跟 debian_version 寫的是什麼,侏儸紀的版號一定大於前寒武紀,例如:
0:9527 < 1:7
一看就知道 9527 一定比 7 還要大的啊!不過因為 9527 在比較舊的紀元,所以多大都沒有用的!


接著是 upstream_version 照字面上翻譯就是上游軟體的版本號碼,例如 PCManX GTK+ 目前最新的正式釋出版本號碼為 0.3.9,不過如果接下來的 PCManX GTK+ 0.3.10 有一些測試 alpha/beta/rc 的版號就可能會長得像是 0.3.10-alpha1 / 0.3.10-beta2 / 0.3.10-rc3 之類的。


最後就是 debian_version 例如 Ubuntu 10.04 所提供的 PCManX GTK+ 套件版號為 0.3.9-2ubuntu2
$ apt-cache policy pcmanx-gtk2
...
0.3.9-2ubuntu2 0
500 http://tw.archive.ubuntu.com/ubuntu/ lucid/universe Packages
這邊的 debian_version 就是 2ubuntu2


知道版本號碼的組成元素之後就是要開始比較大小,軟體套件能不能夠升級就是要靠版號比大小。


指令 dpkg 有提供一個參數可以用來比對版號的大小
dpkg --compare-versions
例如:
$ dpkg --compare-versions 0:9527-2ubuntu2 '<' 1:7-2ubuntu2; echo $?
0
$ dpkg --compare-versions 0:9527-2ubuntu2 '<' 0:9527-2ubuntu2~3small; echo $?
1
不知道看倌有沒有注意到 0:9527-2ubuntu2 '<' 0:9527-2ubuntu2~3small 比較的結果是失敗的
0:9527-2ubuntu2~3small
---------------^------
Debian Package Version 有一個特別的地方,就是 '~' 開頭的版號比空字串還要小,什麼!'~' 比什麼都沒寫的虛無還要小!
所以可以做個有趣的實驗
$ dpkg --compare-versions 1-1~ '<' 1-1; echo $?
0
$ dpkg --compare-versions 1-1~~ '<' 1-1~; echo $?
0
看到沒有~ 尾巴長的越長的版號反而是越小的~ >w<


最後再聊一些約定俗成的慣例。


慣例一:
debian_version 可以省略不寫,如果要寫的話,結尾一定要是數字,而且這個數字不可為零。


慣例二:
除了該 Debian Package 的 Maintainer 之外,其他人不可以使用 debian_version 全為數字的版號,例如:假設今天有 PCManX GTK+ 0.3.10 的正式釋出版本,我們自己私下在打包 Debian Package 時就不可以使用 0.3.10-1 這樣的版號,不過根據慣例一,我們可以使用 0.3.10-0ubuntu1 這樣的版號,不過 0ubuntu1 這樣的 debian_version 只有上傳 Package 到 Ubuntu 的 Maintainer 才可以這樣使用,如果把 Debian 跟 Ubuntu 都當上游的話,那麼就應該使用 0ubuntu0ppa1 這樣的版號,當然 ppa 也可以換成其它自己偏好的字串。


慣例三:
如果是使用 apt-get source pcmanx-gtk2 抓下來改的 Debian Package,在改完後要直接在原本的版號後面加上自己的版號,像是原本是 0.3.9-2ubuntu2 就會變成 0.3.9-2ubuntu2fourdollars1

2010年6月14日 星期一

Debian Package (4) - 製作一個簡單但是有點用處的 Debian Package (續)

前一篇文章只能完成了 Debian Package 的打包但是並沒有上傳至 Debian 官方的套件庫
如果想要上傳到 Debian 官方的套件庫就必需尋求 Debian Developer (以下簡稱 DD) 的協助了
另外就是還要準備一把已經被 DD 簽過的金鑰才行 (可能要數個 DD 簽過才行)
如果沒有熟識的 DD 幫忙,其實還可以到 http://lists.debian.org/debian-mentors 上面尋求 DD 的協助
不過建議先看過 The debian-mentors FAQ 這份文件後再去尋求 DD 的協助

另外一種方式是自己維護 Debian Packages Archives 不過這真的很麻煩~ ^^b
如果是在 Ubuntu 上面的話可以考慮使用 Launchpad 上的 PPA 服務
以下將以 Launchpad PPA 為例

首先要建立自己的 Launchpad PPA 才行
會有一些申請的動作要自己去完成
可以參考 https://help.launchpad.net/Packaging/PPA 上面的說明

以下會假設已經完成 Launchpad PPA 的設定並且也準備好 SSH 金鑰跟 GPG 金鑰,只剩下要上傳 Debian Source Package 的動作要做。

因為 Launchpad PPA 只支援 Debian Source Package 的上傳,Launchpad 會再從 Debian Source Package 把 Debian Binary Package 給編譯產生出來,而之前的指令 dpkg-buildpackage -rfakeroot -uc -us -tc 其實會同時把 Debian Binary/Source Package 給產生出來,不過因為 -uc -us 這兩個參數就是指定不要使用 GPG 簽章,所以產生出來的 Debian Package 應該也無法上傳到 PPA 上使用。

如果要建立有簽章的 Debian Source Package 就要使用下面的指令
$ export DEBFULLNAME="First-Name Family-Name (Nickname)"
$ export DEBEMAIL="username@foo.bar"
$ dpkg-buildpackage -rfakeroot -S
這樣就可以在目錄上層建立牽過的 Debian Source Package 由以下三個檔案組成
taiwan-radio-tuner_0.1.dsc
taiwan-radio-tuner_0.1_source.changes
taiwan-radio-tuner_0.1.tar.gz
不過目前這樣的 Debian Source Package 就算上傳到 PPA 也會是失敗收場。

因為 Ubuntu 有一些規則要依循才行,首先修改 debian/changelog
taiwan-radio-tuner (0.1) lucid; urgency=low                                            

  * Initial release.

 -- First-Name Family-Name (Nickname) <username@foo.bar>  Mon, 14 Jun 2010 12:47:29 +0800
原本的 experimental 要改成 lucid 因為要給 Ubuntu 10.04 使用

另外就是如果要嚴格一點通過 lintian - Debian package checker 的測試,這是上傳到 Debian 官方套件庫必定要通過的測試,雖然在 Launchpad PPA 並沒有要求要通過 lintian 的測試,執行 debuild -S 後會發現有一些錯誤跟警告訊息出現。
W: taiwan-radio-tuner source: debhelper-but-no-misc-depends taiwan-radio-tuner
E: taiwan-radio-tuner source: package-uses-debhelper-but-lacks-build-depends
W: taiwan-radio-tuner source: package-lacks-versioned-build-depends-on-debhelper 7
W: taiwan-radio-tuner source: missing-debian-source-format
這些訊息其實只要 Google 一下就可以輕易地找到解決方法。
  • 首先是 debhelper-but-no-misc-depends 只要在 Depends 這個欄位多加上 ${misc:Depends} 就可以解決
  • 再來是 package-uses-debhelper-but-lacks-build-depends 跟 package-lacks-versioned-build-depends-on-debhelper 要多加上一個欄位 Build-Depends: debhelper (>= 7)
  • 剩下的 missing-debian-source-format 要多一個檔案在 debian/source/format 內容為 3.0 (native),因為這是一個原生的 Debian Package,如果是從上游的 tarball 而來的話就應該要使用 3.0 (quilt) 才行。
修改過後的 debian/control 如下:
Source: taiwan-radio-tuner
Maintainer: First-Name Family-Name (nickname) <username@foo.bar>
Section: contrib/web
Priority: extra
Build-Depends: debhelper (>= 7)
Standards-Version: 3.8.4
Homepage: https://chrome.google.com/extensions/detail/hacebidkncpkfenhpapdbkcefalehepa

Package: taiwan-radio-tuner
Architecture: all
Depends: ${misc:Depends}, google-chrome, alltray, gstreamer0.10-plugins-bad, gstreamer0.10-plugins-ugly, gstreamer0.10-ffmpeg
Description: Listen to the radio of Taiwan.
 The easiest way to listen to Internet Radio of Taiwan.
修改成這樣再去執行 debuild -S 應該就不會再有任何的錯誤訊息或是警告訊息的出現了。

最後就可以用 dput 上傳到 PPA 裡面啦~ :)
$ dput ppa:username/lucid taiwan-radio-tuner_0.1_source.changes
現在在 https://launchpad.net/~fourdollars/+archive/lucid
上面應該可以看到已經上傳到 Launchpad PPA 上的 Debian Package 了~
如果想要使用的朋友可以在 Ubuntu 10.04 上面執行 sudo add-apt-repository ppa:fourdollars/lucid
然後再執行 sudo apt-get update && sudo apt-get install taiwan-radio-tuner 應該就可以安裝好了~ :)

Debian Package (3) - 製作一個簡單但是有點用處的 Debian Package

Taiwan Radio Tuner 為例
現在要製作一個利用 Google Chrome 的 App Mode 來收聽網路廣播的程式
另外還要利用 Alltray 讓這個網頁應用程式可以隱藏在系統狀態列裡面
所以只要製作一個 taiwan-radio-tuner.desktop 安裝到 /usr/share/applications/ 底下就可以了
[Desktop Entry]
Name=Taiwan Radio Tuner
Exec=alltray google-chrome --app=http://fd.idv.tw/radio/
Icon=google-chrome
Type=Application
Categories=GTK;Application;AudioVideo;Audio;Player;
不過因為這個廣播程式會需要安裝一些額外的 codecs 才能夠正常地播放音樂
所以要額外安裝 gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly gstreamer0.10-ffmpeg 這幾個套件

但是這些步驟也許對一般的使用者來說太過複雜了,所以製作一個 Debian Package
首先準備好 taiwan-radio-tuner 的目錄
$ mkdir taiwan-radio-tuner-0.1
把上面的 taiwan-radio-tuner.desktop 放進去
$ mv taiwan-radio-tuner.desktop taiwan-radio-tuner-0.1
然後在 taiwan-radio-tuner-0.1 底下產生 debian 這個目錄
$ cd taiwan-radio-tuner-0.1
$ mkdir debian
接下來開始準備 debian/control
Source: taiwan-radio-tuner
Maintainer: Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
Section: contrib/web
Priority: extra
Standards-Version: 3.8.4
Homepage: https://chrome.google.com/extensions/detail/hacebidkncpkfenhpapdbkcefalehepa

Package: taiwan-radio-tuner
Architecture: all
Depends: google-chrome, alltray, gstreamer0.10-plugins-bad, gstreamer0.10-plugins-ugly, gstreamer0.10-ffmpeg
Description: Listen to the radio of Taiwan.
 The easiest way to listen to Internet Radio of Taiwan.
這邊要注意到 Section 這欄寫的是 contrib/web 寫成 contrib 是因為這個套件相依到 google-chrome 這個 non-free 的套件

規則如下:
  • 如果本身是 free 的套件卻相依到 non-free 的套件就應該放在 contrib 底下。
  • 如果本身是 non-free 的套件當然就是直接放在 non-free 底下,這種情況會是 non-free/web
  • 如果本身是 free 的套件也沒有相依到 non-free 的套件,那麼寫成 web 就可以了。
這是參考 Debian Policy Manual - 2.4 Sections 來分類的,如果在 Ubuntu 上可能會有另外的分類方式。

還有準備 debian/compat
$ echo 7 > debian/compat
準備 debian/rules
$ cp /usr/share/doc/debhelper/examples/rules.tiny debian/rules
最後使用 dch --create 來產生一個 debian/changelog
taiwan-radio-tuner (0.1) experimental; urgency=low                                            

  * Initial release.

 -- Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>  Mon, 14 Jun 2010 12:47:29 +0800
不過還有一個很重要的檔案要準備 debian/install 內容如下
taiwan-radio-tuner.desktop /usr/share/applications/
也就是要把 taiwan-radio-tuner.desktop 安裝到 /usr/share/applications/ 底下的意思
如果沒有這個 debian/install 來指定安裝的地方,dpkg 就不會知道這個 taiwan-radio-tuner.desktop 要安裝到哪裡
所以也就不會把 taiwan-radio-tuner.desktop 包裝在 Debian Package 裡面

以上都準備好,最後就可以執行 dpkg-buildpackage -rfakeroot -uc -us -tc 來產生 Debian Package 了~

把產生出來的 Debian Package 安裝進系統後就應該可以在 GNOME 系統選單裡面看到一個 Taiwan Radio Tuner 的 Icon 可以點選了~

Debian Package (2) - 從基本開始製作一個簡單的 Debian Package (續)

延續前一篇文章 Debian Package (1) - 從基本開始製作一個簡單的 Debian Package

在使用 dpkg-buildpackage -rfakeroot -uc -us 來產生 Debian Package 的時候其會有一些警告訊息
dpkg-source: warning: missing information for output field Standards-Version
dpkg-genchanges: warning: missing Section for binary package foo; using '-'
dpkg-genchanges: warning: missing Priority for binary package foo; using '-'
dpkg-genchanges: warning: missing Section for source files
dpkg-genchanges: warning: missing Priority for source files
我們只要把 debian/control 修改成
Source: foo
Maintainer: foo <foo@bar.com>
Section: misc
Priority: extra             
Standards-Version: 3.8.4

Package: foo
Architecture: all
Description: blah
這樣就不會又那些警告訊息了~
Section 這個欄位標示套件的分類 詳細可以參考 http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections
Priority 這個欄位標示套件的重要性 詳細可以參考 http://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities
Standards-Version 這個欄位則是標示打包 Debian Package 時所參考 Debian Policy 文件的版本號碼
目前最新是 3.8.4.0 在 http://www.debian.org/doc/debian-policy/ 最下面可以看到

不過到目前為止都只是一個無用的 Debian Package 罷了~ :P

但是這個無用的 Debian Package 可以看到一個 Debian Package 最基本的組成要件到底是什麼,說穿了就只是以下的四個檔案
debian/changelog #套件的變更紀錄
debian/compat #套件相容 debhelper 版本
debian/control #套件所有的描述跟分類
debian/rules #製作 Debian Package 時的 Makefile (背後會使用到 debhelper)
那麼接下來開始製作一個有點用處的 Debian Package 吧~ :)

2010年6月11日 星期五

Debian Package (1) - 從基本開始製作一個簡單的 Debian Package

首先要安裝需要的工具組
$ sudo aptitude install debhelper devscripts
然後產生一個目錄
$ mkdir foo-0.1
在裡面準備 debian/control
Source: foo
Maintainer: foo <foo@bar.com>

Package: foo
Architecture: all
Description: blah
然後準備 debian/rules
$ cp /usr/share/doc/debhelper/examples/rules.tiny debian/rules
有興趣可以看一下內容
#!/usr/bin/make -f
%:
    dh $@
在 debian/compat 指定一下這是 Debhelper 7 的 Debian Package
$ echo 7 > debian/compat
最後執行一下
$ dch --create --package foo -v 0.1 -D experimental
產生 debian/changelog 內容會像是
foo (0.1) experimental; urgency=low

  * Initial release. (Closes: #XXXXXX)                                   

 -- foo <foo@bar.com>  Fri, 11 Jun 2010 12:01:20 +0800
然後就可以開始打包了
$ dpkg-buildpackage -rfakeroot -uc -us
之後就會在 foo-0.1 這個目錄的上層目錄看到產生出來的 Debian Package 了
foo_0.1_all.deb
foo_0.1_amd64.changes
foo_0.1.dsc
foo_0.1.tar.gz
可以用指令看一下 foo_0.1_all.deb 的內容物
$ dpkg -c foo_0.1_all.deb
drwxr-xr-x root/root         0 2010-06-11 12:07 ./
drwxr-xr-x root/root         0 2010-06-11 12:07 ./usr/
drwxr-xr-x root/root         0 2010-06-11 12:07 ./usr/share/
drwxr-xr-x root/root         0 2010-06-11 12:07 ./usr/share/doc/
drwxr-xr-x root/root         0 2010-06-11 12:07 ./usr/share/doc/foo/
-rw-r--r-- root/root       161 2010-06-11 12:04 ./usr/share/doc/foo/changelog.gz
可以看到裡面只有一個之前寫的檔案 changelog.gz
也可以使用指令看一下這個 Debian Package 的資訊
$ dpkg -I foo_0.1_all.deb
 新式 debian 套件,版本 2.0。
 大小為 982 bytes:control 套件檔=371 bytes。
     218 bytes,    6 行         control
      79 bytes,    1 行         md5sums
 Package: foo
 Version: 0.1
 Architecture: all
 Maintainer: foo <foo@bar.com>
 Installed-Size: 28
 Description: blah
參考資料:http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-sourcecontrolfiles

2010年5月5日 星期三

自製 Ubuntu 10.04 Desktop/Server/Alternate/DVD ISO i386/amd64 安裝用 USB 隨身碟

首先要準備安裝用的 ISO 檔案
ubuntu-10.04-alternate-amd64.iso
ubuntu-10.04-alternate-i386.iso
ubuntu-10.04-desktop-amd64.iso
ubuntu-10.04-desktop-i386.iso
ubuntu-10.04-dvd-amd64.iso
ubuntu-10.04-dvd-i386.iso
ubuntu-10.04-server-amd64.iso
ubuntu-10.04-server-i386.iso
然後準備一隻容量至少 1GB 的 USB 隨身碟;如果要使用 DVD ISO 來製作的話,USB 隨身碟要準備容量至少 8GB 以上;如果想要製作多重開機的話,就準備容量越大越好的 USB 隨身碟,大到足夠塞進所有想要放進去的 ISO 檔案。

Ubuntu 10.04 Alternate/Server 安裝用 USB 隨身碟製作方法
$ wget http://archive.ubuntu.com/ubuntu/dists/lucid/main/installer-i386/current/images/hd-media/boot.img.gz
$ sudo dd if=/dev/zero of=/dev/sdc count=512
$ sudo su -c "zcat boot.img.gz > /dev/sdc"
等待約五分鐘完成後,再執行以下步驟就完成了。

$ sudo mount /dev/sdc /mnt
$ sudo cp -av ubuntu-10.04-alternate-i386.iso /mnt
$ sudo umount /mnt
以上粗體字的部份需要根據需求調整,例如 sdc -> sdb 或 alternate -> server 或 i386 -> amd64

Ubuntu 10.04 Desktop/DVD 安裝用 USB 隨身碟製作方法

先使用 fdisk 或是 gparted 將隨身碟分割好再進行以下步驟

$ sudo mkfs.vfat /dev/sdc1
$ sudo mount /dev/sdc1 /mnt
$ sudo grub-install --no-floppy --root-directory=/mnt /dev/sdc
然後再新增一個檔案 /mnt/boot/grub/grub.cfg 內容如下

menuentry "Ubuntu 10.04 Desktop i386" {
  loopback loop /iso/ubuntu-10.04-desktop-i386.iso
  linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/iso/ubuntu-10.04-desktop-i386.iso noeject noprompt --
  initrd (loop)/casper/initrd.lz
}
記得要把 ISO 檔案複製進 USB 隨身碟

$ sudo mkdir /mnt/iso
$ sudo cp -av ubuntu-10.04-desktop-i386.iso /mnt/iso
$ sudo umount /mnt
以上粗體字的部份需要根據需求調整,例如 sdc -> sdb 或 desktop -> dvd 或 i386 -> amd64

Desktop/DVD 的製作比較有彈性,只要在 grub.cfg 裡面增加 menuentry 就可以了,所以可以輕易地製作出多重 ISO 開機的 USB 隨身碟。

P.S. DVD 的部份因為筆者本身沒有 8GB 以上的 USB 隨身碟,所以沒有驗證過,不過應該是可以可行的。

2010年5月2日 星期日

Ubuntu 10.04 的 flash 中文方塊又出現啦~

筆者的修正方法是將系統的預設字型都換成 AR PL UMing TW
在家目錄底下增加一個檔案 .fonts.conf 內容為
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- ~/.fonts.conf for per-user font configuration -->
<fontconfig>
  <alias binding="strong">
    <family>serif</family>
    <prefer>
      <family>AR PL UMing TW</family>
      <family>Droid Serif</family>
    </prefer>
  </alias>
  <alias binding="strong">
    <family>sans-serif</family>
    <prefer>
      <family>AR PL UMing TW</family>
      <family>Droid Sans</family>
    </prefer>
  </alias>
  <alias binding="strong">
    <family>monospace</family>
    <prefer>
      <family>AR PL UMing TW</family>
      <family>Droid Sans Mono</family>
     </prefer>
  </alias>
  <alias binding="strong">
    <family>Terminus</family>
    <prefer>
      <family>Terminus</family>                      
      <family>AR PL UMing TW</family>
    </prefer>
  </alias>
  <alias binding="strong">
    <family>Droid Serif</family>
    <prefer>
      <family>Droid Serif</family>
      <family>Droid Sans Fallback</family>
    </prefer>
  </alias>
  <alias binding="strong">
    <family>Droid Sans</family>
    <prefer>
      <family>Droid Sans</family>
      <family>Droid Sans Fallback</family>
    </prefer>
  </alias>
  <alias binding="strong">
    <family>Droid Sans Mono</family>
    <prefer>
      <family>Droid Sans Mono</family>
      <family>Droid Sans Fallback</family>
    </prefer>
  </alias>
</fontconfig>
然後再執行
fc-cache -f -v
這樣就可以了~ :)

2010年4月28日 星期三

使用 perlbrew 來安裝 perl-5.12.3 跟 cpanm 的筆記

perlbrew 的好處就是可以使用一般使用者的權限來安裝 perl 跟其模組,不用擔心會破壞到原本系統的穩定性。
首先去抓 gugod 在 GitHub 上的 perlbrew 接者開始安裝 perl-5.12.3
git clone git://github.com/gugod/App-perlbrew.git
cd App-perlbrew
./perlbrew install
./perlbrew init
source ~/perl5/perlbrew/etc/bashrc
perlbrew install perl-5.12.3
perlbrew switch perl-5.12.3
然後去抓 miyagawa 在 GitHub 上的 cpanm 回來安裝
git clone http://github.com/miyagawa/cpanminus.git
cd cpanminus
./cpanm .
再回去用 cpanm 重新安裝一遍 perlbrew (因為第一次安裝時會少裝一些文件檔案)
cd App-perlbrew
cpanm Module::Install
cpanm .
以上步驟做完就可以有一個最簡單的 perl-5.12.3 的執行環境
之後使用前可以手動執行 source ~/perl5/perlbrew/etc/bashrc
或是直接把 source ~/perl5/perlbrew/etc/bashrc 加在 ~/.bashrc 裡面

P.S. 可以先將家目錄底下的 .cpan .cpanm .cpanplus 目錄都刪除掉 (或是更名就可以了) 再開始執行上面的步驟比較不會發生一些奇怪的問題

2010年4月23日 星期五

使用 GnuPG 驗證 Ubuntu 10.04 LTS RC 安裝光碟 ISO 檔

首先到台灣的 Mirror Site 上面下載相關的檔案回來
$ wget http://tw.releases.ubuntu.com/10.04/SHA1SUMS
$ wget http://tw.releases.ubuntu.com/10.04/SHA1SUMS.gpg
$ wget http://tw.releases.ubuntu.com/10.04/ubuntu-10.04-rc-desktop-i386.iso
利用 SHA1SUMS.gpg 來檢查 SHA1SUMS 是否為 Ubuntu 官方釋出的檔案 (有可能是經過偽造的)
$ gpg --verify SHA1SUMS.gpg SHA1SUMS
gpg: 由 2010年04月22日 (週四) 21時22分58秒 CST 建立的簽章, 使用 DSA 金鑰 ID FBB75451
gpg: 無法檢查簽章: 找不到公鑰
在 Ubuntu 系統上一開始檢查一定會找不到,不過可以透過 apt-key list 找到公鑰
$ sudo apt-key list
/etc/apt/trusted.gpg
--------------------
pub   1024D/437D05B5 2004-09-12
uid                  Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com>
sub   2048g/79164387 2004-09-12

pub   1024D/FBB75451 2004-12-30
uid                  Ubuntu CD Image Automatic Signing Key <cdimage@ubuntu.com>
那麼就可以使用 apt-key export 取出公鑰
$ sudo apt-key export FBB75451 > cdimage.gpg
接下來在匯入 GnuPG 的金鑰鑰匙圈裡
$ gpg --import cdimage.gpg
gpg: 金鑰 FBB75451: 公鑰 "Ubuntu CD Image Automatic Signing Key <cdimage@ubuntu.com>" 已匯入
gpg: 處理總量: 1
gpg:               已匯入: 1
gpg: 3 個勉強信任以及 1 個完全信任是 classic 信任模型的最小需求
gpg: 深度: 0  有效:   3  已簽署:  18  信任: 0-, 0q, 0n, 0m, 0f, 3u
gpg: 深度: 1  有效:  18  已簽署:  12  信任: 5-, 0q, 0n, 13m, 0f, 0u
gpg: 深度: 2  有效:   2  已簽署:   2  信任: 2-, 0q, 0n, 0m, 0f, 0u
gpg: 下次信任資料庫檢查將於 2012-07-13 進行
這時候再重新執行前面第一行指令
$ gpg --verify SHA1SUMS.gpg SHA1SUMS
gpg: 由 2010年04月22日 (週四) 21時22分58秒 CST 建立的簽章, 使用 DSA 金鑰 ID FBB75451
gpg: 完好的簽章來自於 "Ubuntu CD Image Automatic Signing Key <cdimage@ubuntu.com>"
gpg: 警告: 這把金鑰並非以受信任的簽章所認證!
gpg:          沒有證據指出這個簽章屬於這個持有者.
主鑰指紋: C598 6B4F 1257 FFA8 6632  CBA7 4618 1433 FBB7 5451
出現這個警告的原因是因為還沒有將 FBB75451 這把公鑰加進自己的信任小圈圈裡面
不過不要緊,假設我們能夠信任 Ubuntu 系統裡面本來就有的公鑰 (如果不能信任的話,那就不應該繼續使用你的 Ubuntu 系統了 :P)
所以現在可以相信 SHA1SUMS 這個檔案真的是 Ubuntu 官方釋放出來的
於是就可以使用指令 sha1sum 來檢查 ubuntu-10.04-rc-desktop-i386.iso 這個檔案的完整性了
$ grep ubuntu-10.04-rc-desktop-i386.iso SHA1SUMS
66227f4fb31a25a22614666cd4ab538cc8f60956 *ubuntu-10.04-rc-desktop-i386.iso
$ sha1sum ubuntu-10.04-rc-desktop-i386.iso
66227f4fb31a25a22614666cd4ab538cc8f60956  ubuntu-10.04-rc-desktop-i386.iso
嗯~ 沒錯我下載的 ISO 真的是 Ubuntu 官方釋出的版本~ :D

參考資料:http://wiki.debian.org.tw/index.php/GnuPG

2010年4月20日 星期二

Linux 系統上面的免費防毒軟體 avast! Linux Home Edition

官方網頁在 http://www.avast.com/linux-home-edition
在 Download 底下就可以下載到安裝的套件包了
每次使用前要先到 http://www.avast.com/registration-free-antivirus.php 上面申請 license key
如果遇到 crash 的問題可以試試看
  • $ sudo sysctl -w kernel.shmmax=128000000

也許可以解決問題

參考資料:
http://forum.avast.com/index.php?topic=57775.0

2010年2月17日 星期三

Firefox 擴充套件 ScribeFire 3.5 的錯誤解決方法

在 ScribeFire 升級到 3.5 後就無法正常啟動使用了
稍為 Google 了一下找到日本網友有提供解決的方法
http://uratene.sblo.jp/category/811798-1.html
http://fxwiki.blog63.fc2.com/blog-entry-246.html
過程就是到該套件的目錄底下 Linux 系統應該會在 ~/.mozilla/firefox/XXXXXXXX.default/extensions/{F807FACD-E46A-4793-B345-D58CB177673C} 底下
進入子目錄 chrome 底下解開 scribefire.jar
$ unzip scribefire.jar
然後修改 locale/zh-TW/overlay.dtd 裡面的內容
將 123, 124 行的
<!ENTITY performancing.editor.bar.strong.tt "強烈標示 <Strong>">
<!ENTITY performancing.editor.bar.em.tt "特別強調 <em>">
改成
<!ENTITY performancing.editor.bar.strong.tt "強烈標示 &lt;Strong&gt;">
<!ENTITY performancing.editor.bar.em.tt "特別強調 &lt;em&gt;">
然後更新壓縮檔 scribefire.jar
$ zip -r scribefire.jar content locale skin
再重新啟動 firefox 就可以了~

AllTray + "app mode" of Google Chrome

以單純要收聽台灣的網路廣播就可以執行以下的命令
$ cat > .local/share/applications/hichannel.desktop <<ENDLINE
[Desktop Entry]
Name=hiChannel 網路廣播
Exec=alltray google-chrome --app=http://fd.idv.tw/radio/player.html
Icon=google-chrome
Type=Application
Categories=GTK;Application;AudioVideo;Audio;Player;
ENDLINE
然後就會在應用程式選單裡面看到
執行起來就像是
 還可以點選工具列中的圖示隱藏起來

或是想要使用微軟的 MSN Messenger 網頁版
 $ cat > .local/share/applications/msn.desktop <<ENDLINE
 [Desktop Entry]
Name=MSN Messenger 網頁版
Exec=alltray google-chrome --app=http://webmsn.msn.com.tw/wlml/index.htm?uri=webmsn.msn.com.tw
Icon=google-chrome
Type=Application
Categories=Network;InstantMessaging;
ENDLINE
不過相信目前應該沒有人會想要使用 MSN Messenger 網頁版
雖然它有機會做得更好更容易使用,不過目前的情況並不是這樣的 :P

總之就是 AllTray 跟 Google Chrome 的 "app mode" 搭配使用可以讓許多的網頁應用程式使用起來更像是本機上面的應用程式~ :)

2010年1月31日 星期日

在 Debian GNU/Linux 5.0.3 (Lenny) 上面安裝 Drupal 6.15

首先要準備一個 Debian GNU/Linux 5.0.3 (Lenny) 的系統環境,這邊是選擇使用 debian-503-i386-netinst.iso 並透過網路安裝,
在安裝過程當中語系選擇英文並且在 Software selection 時只選擇安裝 Web server 以及 SQL database 來安裝,盡量維持系統精簡,

接下來應該只要再抓 59 個套件安裝,在 2M/256K ADSL 正常情況的網路環境下五分鐘以內就可以裝好了,

到這邊為止應該已經裝好所需要的 Apache 跟 PostgreSQL 了,重新啟動系統後再安裝 drupal6 跟 php5-pgsql 套件,
# apt-get install drupal6 php5-pgsql
在設定 drupal6 的畫面中記得要輸入密碼,不然系統會改使用 ident 機制,安裝完後需要重新啟動 Apache
# /etc/init.d/apache2 restart
就可以在 http://XXX.XXX.XXX.XXX/drupal6/install.php 看到 Drupal6 接下來的安裝程序

不過此時只有英文介面,如果需要安裝繁體中文介面就要執行接下來的動作,
# wget http://ftp.drupal.org/files/projects/zh-hant-6.x-1.5.tar.gz -O - | tar xz -C /usr/share/drupal6
然後重新載入網頁就可以看到繁體中文介面,

Drupal6 初始設定完成之後馬上就會發現到目前的 Drupal6 版本並不安全,

因為 Debian GNU/Linux 5.0.3 (Lenny) 上面的 Drupal 版本只有到 6.6 版,
所以現在要去升級到目前最新穩定版本 6.15
# wget http://ftp.drupal.org/files/projects/drupal-6.15.tar.gz -O - | tar xz -C /usr/share
# wget http://ftp.drupal.org/files/projects/zh-hant-6.x-1.5.tar.gz -O - | tar xz -C /usr/share/drupal-6.15
# cd /usr/share
# chown -R root.root drupal-6.15
# mv -v drupal6 drupal-6.6
# ln -s drupal-6.15 drupal6
# cd drupal-6.15
# rm -fr profiles sites
# ln -s /etc/drupal/6/profiles
# ln -s /etc/drupal/6/sites
然後在網頁瀏灠器裡面訪問 http://XXX.XXX.XXX.XXX/drupal6/update.php 來更新資料庫

更新完後回到 [狀態報告] 就可以看到

此時算是才把 Drupal 6.15 在 Debian GNU/Linux 5.0.3 (Lenny) 上面安裝好,
不過目前都只有框架沒有內容也沒有安裝任何模組也沒有客製化的 Theme

2010年1月28日 星期四

在 Ubuntu 9.04 上面使用 hg view

之前寫過一篇 在 Ubuntu 9.04 上面手動安裝 hgview
剛剛發現原來在 ~/.hgrc 裡面加上
[extensions]
hgk=
這樣就可以使用 hg view 了~
http://mercurial.selenic.com/wiki/HgkExtension 找到的資訊

2010年1月22日 星期五

在 Linux 系統上面手動安裝 Firefox 3.6

首先到 http://www.mozilla.com/ 下載 firefox-3.6.tar.bz2 回來
然後解壓縮到 /usr/local/lib/firefox-3.6 底下
$ mkdir -p /usr/local/lib
$ tar xf firefox-3.6.tar.bz2 -C /usr/local/lib
$ mv /usr/local/lib/firefox /usr/local/lib/firefox-3.6
然後建立一個啟動圖示
$ mkdir -p .local/share/applications/
$ cat > .local/share/applications/firefox-3.6.desktop <<ENDLINE
[Desktop Entry]
Version=3.6
Name=Firefox 3.6 網頁瀏灠器
Comment=瀏灠網頁
GenericName=網頁瀏灠器
Exec=/usr/local/lib/firefox-3.6/firefox %u
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=/usr/local/lib/firefox-3.6/chrome/icons/default/default48.png
Categories=Application;Network;
MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;
StartupWMClass=Firefox
StartupNotify=true                                                                                                                                                                                              
ENDLINE
這樣就可以了~ :D

2010年1月17日 星期日

Google Chrome Extension: Taiwan Radio Tuner

這個 Google Chrome Extension 算是 BetaRadio 開發過程中的一個副產品
下載的網址在 https://chrome.google.com/extensions/detail/hacebidkncpkfenhpapdbkcefalehepa
使用說明整理在 http://code.google.com/p/betaradio/wiki/GoogleChromeExtension
希望大家會喜歡使用~ ;)

2010年1月9日 星期六

在 Ubuntu 8.04.3 可以使用 Google Chrome 瀏灠器來聽網路廣播~ ;)

延續上一篇文章 在 Ubuntu 8.04.3 用 Firefox 瀏灠器就可以聽網路廣播了~ :D
如果是想要在 Ubuntu 8.04.3 上面使用 Google Chrome 來收聽網路廣播的話
就要另外安裝 mozilla-mplayer 這個套件才行
然後連到 http://fd.idv.tw/radio/player.html
或者是直接安裝使用 Google Chrome Extension
http://fd.idv.tw/radio/hichannel.crx
又或者是增加一個檔案 ~/.local/share/applications/hichannel.desktop
內容填上
[Desktop Entry]
Name=hiChannel 網路廣播
Exec=google-chrome --app=http://fd.idv.tw/radio/player.html
Icon=google-chrome
Type=Application
Categories=GTK;Application;AudioVideo;Audio;Player;
這樣就是一個(偽)不用開網頁瀏灠器也可以聽網路廣播的應用程式了~ :P

2010年1月8日 星期五

在 Ubuntu 8.04.3 用 Firefox 瀏灠器就可以聽網路廣播了~ :D

要在 Ubuntu 8.04.3 底下的 Firefox 3.0.17 聽網路廣播
只安裝好 gstreamer0.10-plugins-bad, gstreamer0.10-plugins-ugly, gstreamer0.10-ffmpeg 這幾個套件
然後連到 http://fd.idv.tw/radio/player.html 就可以聽了~

Mac OS X 10.4+ 上面要裝 Flip4Mac WMV Components for QuickTime
然後用 Safari 就可以聽了~

在 Windows 上面開 IE7/IE8/Safari/Opera/Firefox/Google Chrome 都可以聽~

另外寫了一個給 Google Chrome 用的 Extension
http://fd.idv.tw/radio/hichannel.crx

Have Fun~ ^o^

P.S. 誠徵 Icon 設計師幫小弟做出 Google Chrome Extension 要使用的 Icon 尺寸分別是 19x19/32x32/48x48/128x128 的 PNG