Subscribe to RSS Subscribe to Comments Blog of Roy Chan

Blog of Roy Chan

使用 vim 編輯 web textarea (Firefox or Kazehakase)

用了 vi/vim 十多年,其他 text editor 對我來說確實很麻煩。大部份事用 vi/vim 做都有說不出的爽!!! 就算多年前因工作需要在 windows 寫程式寫,也懶得用 UltraEdit 等,抓個 vim windows 爽很多。近年,經常要在網頁上的 textarea 打一大篇文章,結果還是受不了,很多時需要在 copy&paste 到 vim 執行仔細的編輯。簡潔的按鍵自然是我喜用 vi/vim 的主要理由,regular expression 更是我編輯時不缺的利器。

幾年來,我花了不少工夫企圖把 regular expression 或 vi/vim 式的編輯引入 web,包括寫了些 bookmarklet 等,但始終和 vi/vim 差很遠。嘗試過幾個令 Firefox 使用 external editor 的 extension, 不過都不太有效。近兩年前,找到了 It’s All Text,終於把我這個難題解決了。

It’s All Text 這個 Firefox extension 安裝後,會在每個 textarea box 的右下角浮現一個 “edit” 小按鈕,按下就會把 textarea 的內容送去指定的 text editor 進行編輯,絕對是 vi/vim 的必裝 extension。

然而,這年來因為安全問題,我經常會同時使用多個 browser,用不同 browser 執行不同安全級別的 web apps。(都是 ajax 惹的禍)。Prism, Epiphany, Kazehakase,甚至 Opera 都會常用來代替 Firefox 執些較低 reliability 的 web site/apps (Prism 一般用來跑重要的 webapp 如 gmail 和 online-banking),Noscript extension 則用來限制不明網站的 javascript。不過用其他 browser 時,就少了 It’s All Text 用 external editor 的爽便。早期才發現用了半年的 Kazehakase 其實內建使用 external editor 的功能,多了個可以便利使用 browser。

在 Kazehakase 設定使用 gvim 很簡單,首先 UI Level 要設定為 Expert (View -> UI Level -> Expert),在 Edit -> Preference 中的 External Program,設定 Editor command 為:

gvim -f %s

就搞定了。 (-f 選項是避免 gvim 自動 fork 入背景工作,令 Kazehakaze 不知 gvim 完成編輯)

往後在要編輯的 textarea 按右鼠鍵在選單選 Launch Editor 就可以了。(當然是經謹關閉了 gvim 才好 submit web form)


Share It: [del.icio.us] [Technorati] [Google Bookmark] [Yahoo MyWeb] [Furl]


修正 Debian 5.0 香港中文支援

Debian 5 桌面

Debian 5.0 (Lenny) 結果如期在情人節出爐,令我有點意外。現在 ftp.hk.debian.org 基本上把 5.0 的光碟 ISO 都 mirror 了。由於硬碟空間問題,只 mirror 了 i386 和 amd64 平台的 businesscard、netinst、CD-1 (GNOME)、kde-CD-1 和 xfce+lxde-CD-1 的 ISO 以及 LiveCD ISO 等。DVD ISO 會在這一兩天搞定。

另外安裝手冊亦在 OSWikiHK 有了初稿

香港似乎沒有人做過測試,安裝 Debian 5.0.0 選擇繁體中文和香港區域時,安裝程式沒有自動安裝中文字體和輸入法引擎,令安裝出來的 Debian 亂碼。要按裝以下套件後重新開機才可以較正常顯示:

  • ttf-arphic-uming
  • scim-tables-zh
  • im-switch

即是在終端機 (Terminal),打:

su -c 'apt-get install ttf-arphic-uming scim-tables-zh im-switch'

以上設定後,顯示小中文字體明顯很矇,應該有些設定仍有問題。待稍後有時間測試才補充。

更新: 提供了香港區無安裝中文套件問題 #517854, 下個版本應該會 fix 個問題


Share It: [del.icio.us] [Technorati] [Google Bookmark] [Yahoo MyWeb] [Furl]


堅強的鷺展翅! Ubuntu 第二個長期支援版 8.04 登場

Ubuntu 8.04 (Hardy Heron) 終於在最幾天正式進出。跑了幾天,似乎比 7.10 穩定很多。因為事前已把 OSWikiHK中的 Ubuntu 安裝手冊更新得七七八八,也在正式進出後幾個小時正式貼上 8.04 的桌面伺服器的安裝手冊。結果反應不錯,單計 8.04 桌面安裝手冊,兩天裡每天都有近 700 個 hits 。Mobile01 一個 post 就貢獻了百多個 hits。不過 server 就有點辛苦了。

留意這版本中 Edubuntu 不再有獨立的安裝光碟 ,反而變成 Ubuntu 的一個 extension 。而 Kubuntu 也分別有 KDE 3 和 KDE 4 兩個版本的光碟,KDE 4 版未能輸入中文。這個版本另一大賣點是收錄了著名 Wubi , Windows 使用者可以不分割硬碟安裝 Ubuntu。原理並不新鮮,只是在 Windows 上建立一個大的檔案作為 Ubuntu 的 virtual partition,Boot 入 Ubuntu 時, Ubuntu 自然會使用該檔案佔據的位置作為 / ,速度不會比平常安裝出來 Ubuntu 慢。更好的時,Windows 使用者可以像移除普通 Windows 軟件般在 Windows 上移除 Wubi 安裝出來的 Ubuntu。此舉加大了打破 Windows 使用者心理障礙的機會。找台 Windows 機來試,稍後再加上桌面安裝手冊中。

更新: 《使用 Wubi 在 Windows 安裝 Ubuntu/Kubuntu/Xubuntu》已完成了。


Share It: [del.icio.us] [Technorati] [Google Bookmark] [Yahoo MyWeb] [Furl]


Ubuntu 7.10 和 Fedora 8

這大半年的時間都很懶寫 blog, 一來忙 MSc, 二來也多花時間去整理 OSWikiHK。順帶提一提 Ubuntu/Kubuntu/Edubuntu/Xubuntu 7.10 (Gusty Gibbon) 的安裝手冊 (桌面伺服器)早在個多月前已完成了。也有份教人由 Ubuntu 7.04 (Feisty)升級至 7.10 的文章Fedora 8 (Werewolf)才完成了幾個星期 (LiveCD 倒時未正式動手)


Share It: [del.icio.us] [Technorati] [Google Bookmark] [Yahoo MyWeb] [Furl]


OSWikiHK改名

早前上北京時和YPWong談過想改改OSWikiHK(香港開源維基)的名字,和LinuxTalk改成FOSSTalk一樣,想著筆多點在自由軟件上。當時想過改成FOSSWikiHK,不過昨天YP提出想取消香港這個字讓OSWikiHK不要受到太多地區局。當然我原身發起OSWikiHK專案的主要目的是為香港人保留多點有用的中文文章,不過近年OSWikiHK的讀者在中港台三地都很平均,有一篇文章部份內容也被國內的書籍引用。抽出香港一字也是好事。不過新名的名字就頗費腦筋,最好不會和其他站太相似,以免引起混亂。

要在華人社區流行,自然要有個好的中文名。開源維基並不符合我想強謂自由軟件的要求,所以想了以下一些提案:

  • 自由軟基
  • 自源軟基
  • 自由源基
  • 自由源維
  • 自由軟維

結果YPWong認為第一個最好,當然我只是隨意想個名字。自由軟基這個名事有點搞笑,不過才是不錯的選擇。英文名又如何? 外國早有FOSSWiki,所以英文名字比中文名更難。

  • FOSSCWiki
  • FOSSCiki
  • FOSSKi
  • FreeSoCiKi

大家有何意見?


Share It: [del.icio.us] [Technorati] [Google Bookmark] [Yahoo MyWeb] [Furl]


如何重新編譯dpkg套件

當你在使用Ubuntu/Debian的正式發行版本,但想使用在開發版本中的新加入的軟體或者想使用在開發版本中有關軟體的新版本,又或者想微調某些軟體的編譯設定。當然backport.org有不少由Debian開發版本backport回到正式發行版本的套件,而Ubuntu亦有提供edgy-backports軟體庫,但如果他們沒有提供你需要的軟體或不符合你的要求,那你就需要重新編譯dpkg套件。

注意本文都最完整和最新版本改放上OSWikiHK,請到那裡參考。

取得源碼

首先自然需要先取得有關dpkg套件的源碼包。和RPM不同的套件源碼一般都有三個檔案:

  • 源程式碼包 (*.orig.tar.gz) - 這是有關軟體原身的源程式碼包 (例如: mod-cband_0.9.7.5.orig.tar.gz) 。原則上是完全沒有被改動過(除了檔案名稱被改至符合dpkg的規格外),和在開發者網站取得的一模一樣。
  • 套件描述 (*.dsc) - 有對有關軟體的簡單描述 (例如: mod-cband_0.9.7.5-1.dsc) 。包括套件名稱、版本、維護者、可編譯平台、編譯時需要的套件和 orig.tar.gz 及 diff.gz 檔的 hash 值。為確保套件沒有被任何人更動過,所有由官方提供的dsc都已用維護者的數位簽名簽著過。
  • 補丁檔 (*.diff.gz) (非必有) - 維護者對改動 (例如: mod-cband_0.9.7.5-1.diff.gz) 。包括加入control、changelog等檔案。如果開發者一早已debian化整個源程式碼,可能不會有diff.gz檔的出現。

使用 apt-get source

取得目標dpkg套件源碼的三個檔案,最簡單自然是用apt-get source命令下載。首先你需要確定 /etc/apt/sources.list 有沒有「deb-src」一行:

deb http://ftp.hk.debian.org/debian/ sarge main contrib non-free
deb-src http://ftp.hk.debian.org/debian/ sid main contrib non-free

如果你是想由開發版本中backport一個套件回來,自然要使用開發版本的軟體庫,以Debian為例,自然是使用 sid。設定好後,在系統管理員身份下用「apt-get update」更新軟體庫資料。然後就可以用「apt-get source 套件名」取得目標dpkg套件源碼。這個指令會幫你幫別目標套件真正源碼名稱 (如套件 libapache2-mod-cband 的源碼包是 mod-cband ) ,下載套件源碼的三個檔案,並自動拆開源碼。為方便管理,建議建立目錄 ~/projects/dpkg並在裡面才進行apt-get source:

mkdir -p ~/projects/dpkg
cd ~/projects/dpkg
apt-get source libapache2-mod-cband

完成後,你會在當前目錄找到到套件源碼的三個檔案和以套件源碼名稱和版本編號組成的目錄 (例如mod-cband-0.9.7.5) ,目錄裡面就是套件的源碼。

$ ls
mod-cband-0.9.7.5
mod-cband_0.9.7.5-1.diff.gz
mod-cband_0.9.7.5-1.dsc
mod-cband_0.9.7.5.orig.tar.gz

自行下載

當然你亦可以自動下載orig.tar.gz、dsc和diff.gz三個檔案。下載後,可以用「dpkg-source -x dsc檔」把原始碼拆開:

$ dpkg-source -x mod-cband_0.9.7.5-1.dsc 
dpkg-source: extracting mod-cband in mod-cband-0.9.7.5

執行後,你會在當前目錄找到到套件源碼的三個檔案和以套件源碼名稱和版本編號組成的目錄 (例如mod-cband-0.9.7.5) ,目錄裡面就是套件的源碼。

整理編譯設定

設定版本編號

習慣上你首先要改動版本編號,記錄這次重編的目的。當然你可以略過這個步驟,但有機會做成往後升級的混亂,所以也建議花點時間做做這個簡單的工作。

版本編號和更動說明是記錄在套件源碼下 debian/changelog 中。你可以用文字編輯器直接修改這個檔案,但我們一般會先用命令「debchange -i 更動說明」加入版本更動的框架,例如:

debchange -i Backport to sarge

執行後用文字編輯器編輯debian/changelog,你會見到類似以下內容:

mod-cband (0.9.7.5-2) unstable; urgency=low

  * Backport to sarge

 – Fred Random <fred@example.org>  Tue,  3 Apr 2007 17:56:19 +0800

mod-cband (0.9.7.5-1) unstable; urgency=low

粗體為debchange新加的內容。這表示這個例子中原本你下載的套件版本編號是0.9.7.5-1,debchange會順勢把建立編號(build number)加一,變成 0.9.7.5-2 。為讓人一看就知重編後的套是backport,亦方便以後有更新時可以蓋過個版本,我們會把建立號減一,加上「.1sarge1」,令版本編號變成 0.9.7.5-0.1sarge1 。sarge後的 1 表示這個版本被重編的次數。如果在重編後發覺有問題,需要再新編,請將這個數目加一。改動後的debian/changelog 會變成如下:

mod-cband (0.9.7.5-0.1sarge1) unstable; urgency=low

  * Backport to sarge

 — Fred Random <fred@example.org>  Tue,  3 Apr 2007 17:56:19 +0800

mod-cband (0.9.7.5-1) unstable; urgency=low

安裝所需開發套件

接著你需要安裝編譯時所需開發套件,這些套件的名單在 debian/control 的的 Build-Depends 一行中:

$ egrep ‘^Build-Depends:’ debian/control
Build-Depends: debhelper (>= 4.0.0), autotools-dev, apache2-threaded-dev | apache2-prefork-dev, po-debconf

這顯示你需要安裝debhelper、autotools-dev、apache2-threaded-dev和po-debconf等四個套件才可以重編mod-cband,而debhelper必定要4.0.0或以上,apache2-threaded-dev可以用apache2-prefork-dev取替。

最簡單的方法是在系統管理員身份下打「apt-get build-deb 套件」,這命令自然會幫你下載並安裝有關套件所需開發套件。不過很多情況下不會那麼順利,在backport過程中,會遇到在正式發行本中未有所需開發套件,套件名稱改變了或版本不符合等問題,而apt-get build-deb遇到些情況會停下來。這時候你需要自行找出在正式發行本中對應的套件 (如 apache2.2-common 對應 apache2-common 或 apache-common) ,自行手動用 apt-get 下載並安裝,和更動debian/control 的需求。最差的情況下,你有機會需要重編幾個開發套件。

整理設定

接著你需要套件的相依性,即檔案 debian/control 中的 Depends 一行中:

$ egrep ‘^Depends:’ debian/control
Depends: ${misc: Depends}, ${shlibs: Depends}, apache2.2-common

這顯示你需要安裝apache2.2-common套件才可以安裝mod-cband。

你需要檢查一下你現時的發行版本是否有Depends列出的套件和版本是否符合。例如:

$ apt-cache show apache2.2-common
W: Unable to locate package apache2.2-common
E: No packages found

這表示你現時的發行版本並沒有apache2.2-common這個套件。這時候你需要自行找出在正式發行本中對應的套件 (如 apache2.2-common 對應 apache2-common 或 apache-common) ,例如:

$ apt-cache search apache common
apache - versatile, high-performance HTTP server
apache-common - support files for all Apache webservers
apache-perl - versatile, high-performance HTTP server with Perl support
apache-ssl - versatile, high-performance HTTP server with SSL support
apache2-common - next generation, scalable, extendable web server
axyl-lucene - The Axyl Luceneserver
cl-modlisp - Common Lisp interface to the Apache mod-lisp module

apache2.2-common可能對應apache2-common 或 apache-common。你需要更動debian/control 的需求,把Depend一行改成:

Depends: ${misc: Depends}, ${shlibs: Depends}, apache2-common

但最差的情況下,你有機會需要重編幾個相依的套件。

重建套件

現在你可以用debuild重編套件。因為包封套件時需要製做一個系統管理員的環境,我們需要fakeroot的協助。請打:

<

pre>debuild -rfakeroot

現在你的目錄一般會多了最少五個檔案:

$ ls
libapache2-mod-cband_0.9.7.5-0.1sarge1_i386.deb
mod-cband-0.9.7.5
mod-cband_0.9.7.5-0.1sarge1.diff.gz
mod-cband_0.9.7.5-0.1sarge1.dsc
mod-cband_0.9.7.5-0.1sarge1_i386.build
mod-cband_0.9.7.5-0.1sarge1_i386.changes
mod-cband_0.9.7.5-1.diff.gz
mod-cband_0.9.7.5-1.dsc
mod-cband_0.9.7.5.orig.tar.gz

libapache2-mod-cband_0.9.7.5-0.1sarge1_i386.deb 就是重編出來的套件。

安裝新套件

現在你可以安裝新套件了:

# dpkg -i *.deb

相關頁面


Share It: [del.icio.us] [Technorati] [Google Bookmark] [Yahoo MyWeb] [Furl]


Based on Fluidity© 1998-2007 Roy Hiu-yeung Chan