2010-03-08

在 Linux 上安裝 flashplugin for firefox 與簡單測試記錄

由於 Linux 上 firefox 在用的 flashplugin (flashplayer-mozilla 10.0.42) 效能太差,今天看到 flashplayer 10.1beta3 釋出的消息,就衝了。


Adobe Labs 下載給 Linux 用的 tarball。


$ tar zxvf flashplayer10_1_p3_linux_022310.tar.gz


什麼?竟然只有 libflashplayer.so 一個檔案!只好手動安裝。


$ sudo mkdir -p /usr/local/lib/mozilla/flashplayer-10.1b3-mozilla


$ cp ./libflashplayer.so /usr/local/lib/flashplayer-10.1b3-mozilla/


$ sudo chmod 644 /usr/local/lib/flashplayer-10.1b3-mozilla/libflashplayer.so


$ sudo update-alternatives --install /usr/lib/mozilla/plugins/flash-mozilla.so flash-mozilla.so /usr/local/lib/flashplayer-10.1.b3-mozilla/libflashplayer.so 60


這邊稍微解說一下。Debian 的 /etc/alternatives 裡頭是一堆 links,這些 links 可能是某種類型的程式,或者有許多衍生版本的程式,比如說:x-window-manager、x-terminal-emulator、x-www-browser 就是前者,vim、awk 是後者。用 ls -l 去看,可以發現它們指向真正的程式所在。聰明的人可能已經猜到了,沒錯, 這是 Debian 管理同類型程式的一個系統,例如:當系統要呼叫終端機時,到底要呼叫 mlterm 還是 lilyterm?寫系統 script 的人怎麼知道使用者習慣用那一種 terminal 呢?在 Debian,只要寫 x-terminal-emulator 就可以了,我們可以用 update-alternatives 指定 x-terminal-emulator 會指向那一個程式。


所以上面的命令的意思,就是:iceweasel 需要 flashplugin 時,會讀取 /usr/lib/mozilla/plugins/flash-mozilla.so ,這個 link 會指向 /etc/alternatives/flash-mozilla.so,這個 flash-mozilla.so 要指向先前拷貝好的 /usr/local/lib/flashplayer-10.1.b3-mozilla/libflashplayer.so ,並指定優先權為 60。我的系統中另外還有 flashplayer 10.0.42 與 gnash 0.8.6,但因 10.0.42 與 gnash 預設的優先權只有 10,所以系統以後就會以這邊安裝的 10.1.b3 作為 flash-mozilla.so 的預設。


以後如果要改用其他的 flashplayer,可用下面指令來切換:


$ sudo update-alternatives --config flash-mozilla.so


如果要移除


$ sudo update-alternatives --remove flash-mozilla /usr/local/lib/flashplayer-10.1.b3-mozilla/libflashplayer.so


好,安裝完成,然後測試看那個 flashplayer 好用吧!


我的測試很簡略,模擬平常使用的方式,開啟 65 個之前在逛的網頁,加上 蕭邦冬風練習曲


測試環境:Pentium M 1.86 GHz + 1G Ram + Iceweasel 3.5.6 + Debian Squeeze


開啟瀏覽器後,等待頁面完全 loading 後,CPU Usage 穩定下來,約十幾,最多有時跳到二十幾。聽完一遍 蕭邦冬風練習曲後,再放一遍,第二次才用 top 監看 CPU usage (為了去除網路不穩的因素)


播完後,把前後的 CPU usage 去掉,然後平均


flashplayer 10.0.42 的平均 CPU 使用率是 59.7


flashplayer 10.1.beta3 是 49.6


gnash 0.8.6 是 58.6


結論: flashplayer 10.1.beta 3 的 CPU 使用效率稍有改善。(雖然 CPU 使用率還是高得我想!@#$@…)

2010-01-23

imagemagick 文字轉圖片

imagemagick 中的 convert 可以把字型顯示在圖檔中

$convert [-display X-SERVER] {[-family FAMILY_NAME]|[-font FONT_PATH]} [-pointsize POINT_SIZE] label:STRING FILE_NAME

  • -display X-SERVER 向這裡指定的 X-SERVER 要求字型或圖片
  • -family FAMILY_NAME 使用指定的 font family 顯示文字
  • -font FONT_PATH 使用指定的 font 顯示文字 (name 是字型的路徑)
  • -pointsize POINT_SIZE 指定字型尺寸
  • -stretch STRETCH 指定字型的 stretch (Any,Condensed,Expanded,ExtraCondensed, ExtraExpanded,Normal...)
  • -style STYLE 指定字型的 style (Any,Italic,Normal,Oblique)
  • label:STRING STRING 代表圖檔內要顯示的文字
  • FILE_NAME 圖檔名稱

顯示系統安裝的字型清單

$ convert -list font
如果是 IM 6.3.5-7 之前,顯示字型清單要用
$ convert -list type

顯示支援的 font style

$ convert -list style

顯示支援的 font stretch

$ convert -list stretch

如果要顯示的字數較多,可在 label 指定要顯示的文字檔

$ convert -family Arial -pointsize 24 label:@font-test.txt font-test-arial.png

不曉得是我不會用,還是 imagemagick 有 bug,到目前為止,指定 -family 一直無法成功,但用 -font 指定字型路徑就沒問題。而指定了 -font 好像也就不要 -stretch 或 -style 了。

例:用 cwyen 顯示

旭日東昇,但依舊寒風刺骨
雪地上的屍體
見證著平民之女與甘願放棄優渥生活的阿乙之間
炙熱的愛
直到永遠

先將這段文字在目前所在的資料夾中存成文字檔 font-test-cht.txt
$ convert -font /usr/local/share/fonts/truetype/cwyen.ttf -pointsize 32 label:@font-test-cht.txt font-test-cht.png

$ display font-test-cht.png

如果要讓圖片更花俏,可:

加上色彩

-background BACKGROUND_COLOR
-fill FOREGROUND_COLOR
-list color (查詢內建的色彩關鍵字)

指定 size

-size WidthxHeight

在指定位置加上文字

-annotate +X+Y 'text'

字的輪廓加上外框 (加在 font 後面)

-stroke STROKE_COLOR
-strokewidth STROKE_WIDTH (不必指定單位,單位好像固定是 px ?)

圖片邊緣改為斜邊並加上光影

-raise WxH 左、上邊框亮,右、下邊框暗,W 是左、右邊框的寬度,H 是上、下邊框寬度
+raise WxH 左、上邊框暗,右、下邊框亮


其他花俏的東西以後有空再研究



參考資料

man convert
ImageMagick v6 Examples -- Text to Image Handling

Google Chrome 4 字型描繪尚待解決的幾個問題

最重大的當然就是 - 不理會 fontconfig 的設定,下面幾個 issues 可能是同一問題

  • Issue 18159: Chrome doesn't honor fontconfig settings

  • Issue 12179: System font hinting settings are not obeyed

  • Issue 29871: Chrome font rendering seems fuzzy compared to Firefox (on Linux)(這個 bug 有附比較多圖,其實,有些人家回報 chrome 太模糊的我反而覺得比較好看)

  • Issue 29817: font rendering
  • Issue 26206: Chrome doesn't respect fontconfig's hinting flags

另外,Chrome 對於字型 kerning 的解讀還需要加強 (相當有趣的發現!)

  • Issue 21207: Font rendering issue: kerning doesn't match Firefox

還有偽粗體的問題 (直接看 Issue 中的圖比較清楚)

  • Issue 22360: synthesized bold (fake bold) glyphs get horribly blurred when native bold is not availble

2010-01-11

限制 CPU 使用率的工具 - cpulimit

CPULIMIT



cpulimit 可限制指定程式的 CPU 使用率


在 Debian 中的安裝方式



# aptitude install cpulimit

語法簡介



$ sudo cpulimit [-e EXECUTABLE|-p PID|-P ABSOLUTE_PATH_TO_EXECUTABLE] [-l LIMIT]


  • 目標程式可用三種方式指定,用 -e 指定執行檔的名稱,用 -p 指定 PID,或 -P 指定絕對路徑

  • CPU 使用率的限制,用 -l 指定,-l 後面直接輸入整數即可,代表百分率


例子



限制 PID 為 10796 的 process CPU 使用率為 50%



$ sudo cpulimit -p 10796 -l 50
Process 10796 detected


限制 firefox 的 CPU 使用率為 50%



$ sudo cpulimit -e firefox-bin -l 50
Warning: no target process found. Waiting for it..


奇怪,抓不到?



$ ls -l /usr/lib/iceweasel/firefox-bin
lrwxrwxrwx 1 root root 31 2009-12-01 03:00 /usr/lib/iceweasel/firefox-bin -> ../xulrunner-1.9/xulrunner-stub


$ sudo cpulimit -e xulrunner-stub -l 50
Process 10796 detected


這次抓到了。所以,cpulimit 對 softlink 無效,必需找出 softlink 的 target。


參考資訊:


How To Limit CPU Usage Of A Process With cpulimit (Debian/Ubuntu)

2009-10-10

vifm 筆記

生存指令


:q 或 :x
離開 vifm

:h[elp]
必學指令!必需將 vim-help.txt 放到 %APPDATA%\Vifm 底下。


移動游標


Space/Tab
切換窗格

j
向下移動

k
向上移動

gg
移動到檔案清單最頂端

G
移動到檔案清單最底部

:number
移到第 number 列

:0
移動到檔案清單最頂端

:$
移動到檔案清單最底部

[count]j
向下移動 [count] 次

[count]k
向上移動 [count] 次

[count]gg
前往第 count 列

[count]G
前往第 count 列

[count]%
前進到檔案清單 [count]% 的位置,譬如:輸入 :30% 就會前進到檔案清單 30% 的位置

Ctrl-b
往上捲動一頁

Ctrl-f
往下捲動一頁

切換目錄


h
向上一層目錄

l
與 Enter 鍵功能相同,如果游標所在是資料夾,就進入資料夾;如果是檔案,就以預設方式開啟 (e.g. 打開文字檔、音樂檔、執行可執行檔)

:cd [folder]
改變所在的目錄 (在 Windows 仍必需用 "/" 代表根目錄與目錄的分隔,不可只打 :cd,Vifm 會當掉)

:his[tory]
列出最近去過的目錄清單,可在清單中切換過去

:volume
列出磁碟機選單,可直接切換過去 (Only Win32)


選取檔案


v
進入 Visual 模式。進入此模式後,移動游標,會選取游標所在的檔案

t
在檔案清單中按 t,會把游標所在的檔案選取起來,如果檔案本身已被選取,就會取消其被選取的狀態

Ctrl-c 或 Esc
取消選取的檔案


搜尋檔案


/regular_expression_pattern
把目前檔案清單中符合指定 pattern 的檔案反白標示出來(即讓這些檔案屬於「被選取」的狀態)

n
往下找

N
往上找

:fil[ter] regular_expression_pattern
把符合指定 pattern 的檔案篩掉,也就是,不顯示符合指定 pattern 的檔案。被過濾掉的檔案,搜尋(/)與命令(:command)對它們沒有作用。

:in[vert]
這是 filter 的反效果

zm
篩掉所有以小數點開頭的檔案

zo
顯示所有小數點開頭的檔案

zf
先選取檔案後再用此命令,檔案清單中被選取的檔案,就會被篩掉,如要再顯示出來,可按 zO

zM
指定 filter 後再用此命令,檔案清單中符合 filter pattern 的檔案,就會被篩掉

zO
指定 filter 後再用此命令,檔案清單中符合 filter pattern 的檔案,就會顯示出來,不會被篩掉


管理檔案


cw
重新命名

dd
預設將選取的檔案移到 trash directory

yy
拉(yank)選取的檔案(即一般我們所謂「複製」的功能)

p
將拉選的檔案複製或移動到目前所在資料夾 (即一般我們所謂「貼上」的功能)

[count]dd
從游標位置所在的檔案開始,將 [count] 個檔案移到 trash directory

[count]yy
從游標位置所在的檔案開始,拉(yank) [count] 個檔案

:[count] user command
目前還沒實作

:[count] command
目前內建的 :[count] command 只有:[count]d[elete]。例如: :3d 會從目前游標所在的檔案算起,刪除 3 個檔案。

:empty
把 trash directory 中的檔案永久刪除

:copy
把目前所在或選取的檔案複製到另一個窗格 (Win32 Only)

:move
把目前所在或選取的檔案移動到另一個窗格 (Win32 Only)


檔案資訊


Ctrl-g
顯示檔案資訊


顯示模式


:view
可在另一個窗格顯示本窗格中游標所在檔案的內容,再執行一次會恢復原來兩個窗格都顯示檔案清單的模式

:so[rt]
切換排序的方式,可按檔名、副檔名、大小……或其他檔案屬性來排序。

:sp[lit]
切換為雙窗格。Vifm 預設已是雙窗格,不知何時需要用到此命令?而且此命令目前似乎無效,執行後顯示「Unknown Command」


書籤功能


m[a-z][A-Z][0-9]
設定書籤

'[a-z][A-Z][0-9]
前往書籤

:marks
顯示書籤選單


執行外部命令


:sh
開啟一個 shell

:! program
執行 shell 命令

:! program&
在背景中執行 shell 的命令

:!! program
與 :! program 相同,但在回到 vifm 前,會先暫停螢幕畫面

:e
呼叫 vim 來編輯游標所在的檔案 (根據測試,如果選取了兩個檔案,無法在 vim 中正確呼叫出兩個檔案,會產生一個新檔,檔名為兩者相加)


進階自訂功能


:com[mand]
列出所有自訂的 user commands

:com name action
設定新的 user command。name 是自訂命令的名稱,action 可以是 shell 命令。與 vim 的 user command 不同的是,vifm 的 user command 不需要用大寫字母開頭。預設會在 shell 中執行。如果要在背景執行,要在命令的最後加上 & 符號。例如: :com rm rm %f &

:com! name action
覆蓋先前自訂的命令

:delc command_name
移除名稱為 command_name 的自訂命令


其他


Ctrl-c 或 Esc
取消

Ctrl-l
重繪螢幕


參考資訊


Vifm Help

2009-10-05

Dirac

Dirac 是 BBC Research 開發的一種視訊編碼格式,不僅免費開放使用,還開放原始碼。以 Dirac 作為格式名稱是為了紀念一位英國理論物理學家、同時是諾貝爾獎得主的 Paul Dirac。Dirac 計劃負責人是 Tim Borer,原始的演算法是由 Thomas Davies 所開發,Dirac 與 VC-2 規格中的許多部分都是他寫的。

Dirac 可以壓縮任何尺寸的圖片,不論是低解析度的 QCIF (176x144 pixels),還是高解析度的 HDTV (1920x1080),或甚至更高的解析度都可以。Dirac 希望能比一些現存格式 (eg. MPEG-4 Part 2, MPEG-2 Part 2, Theora, WMV) 更省流量、品質更好,網站上甚至宣稱 "a two-fold reduction in bit rate over MPEG-2 for high definition video",這已經算是與 H.264、VC-1 同等級的 codec 了。

BBC 在開發 Dirac 之初,就已經設定要 Open source,希望能讓開放原始碼社群、學術界與其他人共同參與,因此,它的設計哲學就是 "keep it simple",讓人容易理解它的理論、設計,以便豐富它的文件。別以為「簡單」就代表容易,在視訊壓縮界,這可是一項很有野心的企圖,一種編碼要壓縮率高、壓出好品質、壓縮速度快、又要維持簡單,其實是很困難的,如目前最紅的 H.264,就比先前的 MPEG-2、H.263、MPEG-4 Part 2 要複雜。除此之外,Dirac 的開發者也很注重專利問題,據開發者表示,他們沒有請律師團研究,所以無法確知,但他們相當確定 (pretty sure) 他們應該沒有侵犯到別人的專利。就算很不幸真的踩中地雷,他們也會重寫 code 避開,Dirac 有模組化的設計,所以他們認為遇到問題時相對比較容易解決。

Dirac 採用 wavelet compression (即 JPEG 2000 採用的壓縮方式),與大部分舊格式 (H.264、VC-1) 所採用的 discrete cosine transforms 不同。Dirac 並非唯一嚐試採用 wavelet compression 的 codec,其他使用 wavelet compression 的還有 Rududu、Snow、RedCode、與 Tarkin。

Dirac 可以放在容器格式內,如 avi、ogg、mkv 都可以。事實上,只要是依據 ISO base media format (MPEG-4 Part 12, e.g., MP4, 3GP) 的容器格式,或者 MPEG-2 transport stream,應該都可以置入 Dirac,因為 BBC 已向 MP4 Registration AuthoritySMPTE Registration Authority 註冊 Dirac。

Dirac 是視訊編碼的格式,目前實作出 Dirac codec 的軟體,最早的是 BBC 的 reference implementation - dirac-research (原先叫作 "Dirac",沒錯,真的很令人錯亂,後來改名 dirac-research,還是一樣令人錯亂),用 C++ 寫的,2008 年 9 月 17 日以 MPL、GNU GPL、GNU LGPL 釋出 Ver 1.0.0。dirac-research 實作了 intra-frame only subset 的部分,這個 subset 稱為 Dirac Pro,它已經被提到 SMPTE 作為 VC-2 標準的候選者之一。Dirac Pro 在 2008 北京奧運期間,被 BBC 內部用來傳輸 HDTV 圖片。

Dirac 的另一個實作是 Schrödinger,也是由 BBC 所贊助,著重在效能、可攜性,而且仍維持 100% 的 bitstream 相容性。Schrödinger 也提供了 GStreamer plugin。目前 Schrödinger 可以在一台普通的 CoreDuo 筆電上即時解碼 720/25p 的影片。Schrödinger 是用 ANSI C 所寫,授權與 dirac-research 相同,並多加了一個 MIT License。

Schrödinger 與 dirac-research 的差別在於,前者比較快、品質比較低,後者比較慢,但品質比較好。

Dirac 開發大事記

2008 年 1 月 21 日,完成了 Dirac 格式的規格書,之後的開發,只修正錯誤、或限制功能。

2008 年 2 月 22 日,釋出 Schrödinger 1.0.0。

2008 年 9 月 17 日,BBC 釋出 dirac-research 1.0.0 的 reference implementation。

2008 年 9 月 23 日,釋出了包含 motion compensation 與 inter-frame coding 的完整的 Dirac 規格書 2.2.3 版。

進一步資訊請看:

Dirac 官方網站
Dirac_(codec) (Wikipedia 上的說明)

2009-10-01

Ogg Vorbis 與 Theora

Ogg 是一種 Container format,由 Xiph.Org Foundation 所維護,裡頭可以放 audio、video、text、metadata。

Vorbis 則是一個實作「有損音樂壓縮」的專案,同樣由 Xiph.Org Foundation 所開發。它實作了 Lossy audio format 的 specification 與 codec 的部分,因為常放在 Ogg container format 內,所以常被合稱 Ogg Vorbis,但我認為我們要留意,Ogg 與 Vorbis 其實是兩回事的。

Ogg 內雖然可以放 video,但早期一直沒有實作,直到 2002,有人 hack 了 ogg format,讓人可以把 Microsoft Windows 的 Directshow Framework 的 video 放到 Ogg container 內,這就是 ogm,原本這個實作是 closed source,且僅限於 Windows,後來才開放。再後來,ogg 才正式加入 video 與 subtitle 的支援,這是 ogv,但可惜的是,這跟之前的 ogm 不相容。目前 ogv 是 Ogg container format 正式規範、支援的 video implementation。

Theora 則是一個實作「有損視訊壓縮」的專案,同樣由 Xiph.Org Foundation 所開發。它的程式碼是源自於非開放原始碼的私有技術 VP3,這原本是由 On2 Technologies 所有擁有,但後來開放為 Public domain。Theora 是 VP3 的 superset,所以,theora 的 decoder 可以解 VP3 的影片,但反之不一定成立;VP3 的影片可以直接轉成 theora 的影片,不需重新壓縮,但反之不一定成立。

更新日誌:

20100308 改錯字。最後一段「非開發原始碼」→「非開放原始碼」。


參考資訊: