2014-12-30

BPG 圖片格式

採H.265基礎的圖片壓縮新技術BPG,大幅提高低流量畫質
BPG 是由 FFmpeg、QEMU 的作者 Fabrice Bellard 開發的新圖片格式,使用 HEVC (H.265) 的壓縮技術,可比 JPEG 提供更有效率的影像壓縮,特點為:
  • 壓縮率高,相似的品質下,檔案可壓得比 JPEG 小
  • 瀏覽器可利用一個 Javascript decoder 來支援(gzip 壓縮後只有 56KB)
  • 以開放的視訊壓縮標準 HEVC 的 subset 為基礎 (是以 HEVC 的 Still Image Profile 為基礎,故支援 HEVC 的硬體亦可支援 BPG,但 BPG 的 header 與 HEVC 不同,有一些簡化)
  • 支援跟 JPEG 相同的色彩格式(灰階、YCbCr 4:2:0, 4:2:2, 4:4:4),這可在轉換時降低損失。支援 alpha channel。亦支援 RGB, YCgCo 與 CMYK 色彩空間。
  • 原生支援 8~14 bits/per channel,可有較佳的動態範圍 (一般圖片多是 8bits/per channel)
  • 支援無損壓縮
  • 支援各種格式的 metadata,如 EXIF、ICC Profile、XMP

有興趣的可去官方網站,有一些 demo 的鏈結可看

BPG Image Format

BPG Decoding Library 使用一個以 LPGL 2.1 釋出的 FFmpeg 特別修改版作為 HEVC decoder,排除 ffmpeg code 的其他部分,以 BSD 釋出。

BPG Encoder 是以 BSD 釋出。可選用使用 BSD 授權的 JCTVC HEVC reference encoder 或 GPL 授權的 x265 。

HEVC 演算法的某些部分,在某些國家可能有專利保護,LWN.net 的作者認為, BPG 之於 HEVC 令人想起 WebP 與 WebM 的關係,再加上專利問題,難以取代 JPEG 成為主流。

相關網址:


2010-03-12

解決按 Ctrl + Alt + Backspace 無法離開 X Window 的問題


不知從什麼時候開始,我的 debian testing 就已經無法用傳統的 Ctrl+Alt+Backspace 離開 X Window 了,今天 google 了一下,發現似乎 Ubuntu 9.10 也是如此,據說是有人覺得會誤按,所以把它改成預設不啟用了。



Howto Enable Ctrl + Alt + BackSpace in Ubuntu Jaunty 這篇文章說只要在 /etc/X11/xorg.conf 加入 DontZap 的設定就可以重新啟用這組快捷鍵



 Section "ServerFlags"

    # DontZap on for disabling Ctrl+Alt+Backspace killing X

    # DontZap off for enabling Ctrl+Alt+Backspace killing X

    Option "DontZap" "off"

EndSection


不過我在 Debian 上測試無效。



又 google 到 How to enable/disable Ctrl+Alt+Backspace in Ubuntu 9.10 (Karmic) 可在 hal 的設定中修改:



先找到下面的檔案:



/usr/share/hal/fdi/policy/10osvendor/10-x11-input.fdi (inside the
<match key=”info.capabilities” contains=”input.keys”> section):


再修改設定:



<merge key="input.xkb.options" type="string">terminate:ctrl_alt_bksp</merge>


不過 Debian testing (Squeeze) 找不到這個設定



於是只好靠指令



setxkbmap -option terminate:ctrl_alt_bksp


成功了。但是,難道要把它加到 ~/.xinitrc 這麼暴力?再找找看。



後來找到 #bug567808



在 /etc/default/keyboard 中



XKBOPTIONS="terminate:ctrl_alt_bksp" 


YES!解決了。



不記下來肯定等一下就忘記。 :D

2010-03-08

解決 mplayer 雙螢幕播放時外接螢幕無法顯示的問題

使用雙螢幕(顯示同樣內容)時,在預設狀態下,若使用 xv 輸出,mplayer 在外接螢幕上只會出現黑色區塊,要讓影片可以同時在兩個螢幕上顯示,要在 -vo xv 加上一個選項 adaptor=1 才可。

$ mplayer -vo xv:adaptor=1 video.flv

要知道 adaptor 設多少,可用 xvinfo 看,xvinfo 在 Debian 中是包在 x11-utils 中。

我的電腦中,0 代表 Adaptor #0: "ATI Radeon Video Overlay",1 代表 Adaptor #1: "Radeon Textured Video"。如果用 0 播放,就像原本的情況,如果用 1 播放,就正常。

延伸閱讀:

在 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 改錯字。最後一段「非開發原始碼」→「非開放原始碼」。


參考資訊:

2009-03-28

Firefox/IE/Chrome 對 gif 動畫播放速度的差異

實測的結果:

  • IE 7 的 gif animation 的 delay 若大於 6/100s (60ms) (包含 6/100s) ,動畫的速度是正常的;若在 5/100s (50ms) 以下 (包含 5/100s),動畫的 delay 會自動變成 10/100s (100ms)。
  • Firefox 3.0.7 的 gif animation 的 delay 若大於 2/100s (20ms) (包含 2/100s),動畫的速度是正常的;在 1/100s (10ms) 以下 (包含 1/100s),動畫的 delay 會自動變成 10/100s (100ms)。
  • IE 7 與 Firefox 3.0.7 對 delay 的計算可能有差異,或者也可能是效能的影響,在 Fx 3.0.7 中的 delay 會比在 IE 7 中稍久,差異很小,必需播放很多次才會漸漸顯出差異。
  • chrome 1.0.154.48 的測試結果與 IE 7 一樣,此外,chrome 播放 gif 似乎效能較不穩定,原本同步播放的多個 gif,播久了會出現不同步的現象,比較容易受到 CPU 使用率的影響。

結論:

把 gif 動畫圖片的 delay 設為 6/100s (60ms) 以上,或者 1/100s (10ms) ,IE/Fx/Chrome 應該會一致。

延伸閱讀:

2008-06-23

GNU Unifont (包含 Unicode 5.1 BMP 內所有字圖的字型)

GNU Unifont 是 Roman Czyborra 從 1998 開始的一項計劃,原因是他意識到,雖然 Unicode Standard 早在 1991 發表,但在標準發表了七年後,卻仍然沒有一個完整可用、不缺字的 Unicode 字型,所以他決定開始這項計劃。

為了加快計劃的腳步,讓大家早日有一個完整 Unicode 字元集的字型可用,他不對字型的預期品質要求太高,先求有,日後再動員社群來幫忙補完與美化,並只做一個尺寸為 8x16 或 16x16 的點陣字型。為什麼在 1998 那個 Truetype 已然成熟的年代仍選擇用 bitmap 的字型格式呢?這是因為 Roman 認為 bitmap 字型在各平台都可以讀取(只要用對方法),雖然字型的品質只能受限於有限的 8x16 或 16x16 的方格,但 bitmap 規格上的侷限與簡單反而可加快字型完成的腳步,因為字型製作者不需要去調整貝玆曲線、也不需去考慮大小字的顯示效果、hinting……等,而且所需的工具也較為簡單,可以不用去買專業的字型製作軟體就可以製作字型。又因為他覺得 bdf 與 hbf 格式不適合這個計劃,所以他開發了自己的 bitmap 格式 (以 .hex 為結尾),並又開發了將這個格式轉換成 bdf 格式的工具。

十年後,Luis Alejandro González Miranda 在 2008 年 1 月中貢獻了一個將 Roman 的 hex 字型格式轉換成 Fontforge sfd 格式的工具,並同意讓現在的維護者修改使用,所以我們現在有 truetype 的 unifont 了。

這十年來無數人努力的成果累積到今年 (2008) 六月二十,在目前的維護者 Paul Hardy 手上,終於完成了 Unicode 5.1 BMP 內所有的字元!偉哉!

PS. 在 CJK 字元方面,文泉驛絕對該記上一筆,超過兩萬個 CJK 新字是從房骞骞 (FangQ) 主持的 Unibit Font 1.1 中加進來的。

參考資料

GNU_Unifont 在 Wikipedia 的條目
Alejandro González Miranda 的網頁
Roman Czyborra 的 Unifont 舊網頁(現僅存於 Web Archive)
Unifoundry (目前的 Unifont 官方網站)


2008-06-10

讓 Win 與 Linux 的 Firefox 共享 Scrapbooks

相信在 Windows 下使用 Scrapbook 大家都不會有問題,所以本文僅探討在 Linux 上的設定。在開始之前,有幾點必須知道的是:

  • 必須知道 scrapbooks 所在的磁碟是採用 ntfs 還是 fat32 檔案系統。
  • 如果你對 Linux 不熟,且有足夠的 fat32 硬碟空間可以自由使用,建議你將 scrapbook 的資料放在 fat32 比較可靠,因為 linux 對 ntfs 的寫入支援,直到 2007 才出現 ntfs-3g 的穩定版,而對於 fat 的支援已經出現很久了,應該比較成熟。
  • 如果你只剩 ntfs 分割區可使用,那也沒關係,但因為需要使用 ntfs-3g,所以 Linux 核心必須至少大於 2.6.20,或者將 FUSE kernel driver 升級到安全的版本(給 Linux Kernel 2.6.9 版之後的核心使用的 Fuse Package)。
  • 對於 ntfs 的設定,我尚在實驗中,目前大致上可用,但穩定性仍需要一段時間考驗。我的經驗是,全文搜尋的時候,有時會停住,不知是 scrapbook 本身的 bug 還是我的 scrapbook 資料太多的緣故。

當 scrapbooks 位於 fat32 磁區時

  1. 編輯 /etc/fstab (需要 root 權限),加入這一行 (以下都在同一行哦!)
  2. /dev/hda5 /media/d vfat defaults, codepage=950, iocharset=utf8, user, umask=0027, uid=1000, gid=1000, noauto 0 0

    • /dev/hda5 是 scrapbook data 所在的磁碟分割區,需要依你自己的系統作調整。
    • /media/d 是掛載點,一樣,需要依你自己的系統作調整。
    • codepage=950,iocharset=utf8 是讓繁體中文可以正常顯示的設定。
    • user 是告訴 linux:任何人都可以掛載這個 partition,但只有該人才可 unmount 這個 partition。
    • umask 設定是讓使用者有 rwx 的權限,使用群組有 r-x 的權限,其他人沒有任何權限。
    • uid, gid 是指定掛載的 partition 的擁有者的 uid, gid,如果沒有指定,預設會用目前 process 的 uid, gid。如果你設了 user 選項,讓其他人可以掛載你的 scrapbook 所在的 partition,那麼其他人在使用電腦時若掛載了你的 scrapbook partition,partition 的 uid, gid 就會變成其他人的,那麼他就可以讀取/修改你的 scrapbook 了。所以如果我們指定了 user 選項,但不想讓人隨意動你的資料,最好也指定 uid, gid。在這裡,應該把 uid, gid 指定為你的 Linux 使用者的 uid, gid。(當然你也可以自己設定 group 來管理,這個我就不講了)
    • noauto 如果開機時不想讓系統自動掛載,要加上此選項。
  3. 重新掛載 /media/d 即可。

當 scrapbooks 位於 ntfs 磁區時

  1. 安裝 ntfs-3g
  2. 編輯 /etc/fstab,選項類似 vfat,就不再解釋了。要注意的是:這裡沒有 iocharset,改用 locale。
  3. /dev/hdb5 /media/d ntfs-3g defaults, locale=zh_TW.UTF-8, user, umask=0027, uid=1000, gid=1001 0 0

    • 如果不想自動掛載,可在 defaults 那串再加上 noauto 選項。
    • 另外有一點特別注意,mount 與 ntfs-3g 的配合還有點問題,所以目前 user 選項在此無效,仍必須有 root 權限才能掛載 ntfs-3g 的磁區。我們都知道,scrapbook 需要將資料寫入硬碟,但是,root 掛載的磁區,一般使用者要怎麼寫入呢?用 root 去跑 firefox?當然不用啦!把掛載磁區變成使用者的就可以了,所以在使用 ntfs 的情況下,這裡一定要設 uid,而且 umask 不能擋掉使用者 w 的權限哦!

如何撰寫 Adblock Plus 的過濾規則?

無法查看此摘要。請 按這裡查看文章。

2008-06-07

Firefox 設定檔資料夾內各檔案的用途

  • 資料夾
    bookmarkbackups:
    Fx 1.5 版以後才有,書籤檔的每日備份。
    Cache:
    Fx 1.5 版之前,內有網頁的快取檔。在 1.5 版以後,只有 Windows 上自訂 profile 位置的 profile 裡頭有這個資料夾。用 about:cache 可找到 cache 的位置,詳見 browser.cache.disk.parent_directory
    OfflineCache:
    3.0 以上的版本才有。讓 Web application 可以在離線時存取資料是 Fx 3 新增的功能,暫存的資料就放在這個資料夾。和上面 Cache 一樣,可用 about:cache 來看用前使用的 OfflineCache 實際位置。
    chrome:
    可將 userChrome.css 與 userContent.css 放在這裡。
    extensions:
    安裝的擴充套件都放在這裡。
    microsummary-generators:
    2.0 以後的版本。Regularly-updated succinct compilations of the most important information on web pages.
    minidumps
    放 Crash Reporter 報告的地方。
    searchplugins
    1.5 版以後才有。裡頭放搜尋欄內的搜尋引擎與其圖示的資料。

  • 檔案:
  • .autoreg
    暫存的空檔,用來代表已安裝的擴充套件有變動
    .parentlock (Mac OS X)
    見 parent.lock
    blocklist.xml:
    Fx 2.0 以後的版本才有。是自動下載的一份危險擴充套件的清單。
    bookmarks.bak
    Fx 3.0 之前的版本才有。是 bookmarks.html 的備份。
    bookmarks.html
    Fx 3.0 之前的書籤檔。Fx 3.0 以後的書籤已改用 sqlite 的格式,與瀏覽歷史合併放到 places.sqlite。
    bookmarks.html.moztmp
    和書籤相關的暫存檔。如果有發現這個檔的存在,就移除書籤檔的唯讀屬性,因為唯讀屬性會導致 Fx 產生多個 bookmarks-n.html 的檔案 (n 是數字)。
    bookmarks.postplaces.html
    Fx 3.0 (pre-release) 的檔案,Fx 3.0 Beta 4 與之前的的版本以及 03-14-2008 之前的 nightly 才有,在後來的 Fx 3 版本已不再使用這個檔。
    bookmarks-(date).html in bookmarkbackups
    Fx 1.5 以後的版本才有,是書籤的每日備份檔。
    bookmarks-(date).json in bookmarkbackups
    Fx 3.0 以後的版本才有,是書籤的每日備份檔。
    cert_override.txt
    儲存使用者指定的例外證書(certification exceptions)
    cert8.db
    安全證書
    compatibility.ini
    儲存上次使用這個 profile 的程式的版本與路徑。如果開啟這個 profile 的程式的路徑或版本與上次不同,就會觸發 XPCOM component 的 registration。這個檔是自動產生的,可以刪掉沒關係。
    components.ini
    Fx 1.5 之前用來羅列擴充套件資料夾與 XPCOM components 的檔案,在 1.5 版之後已被 extensions.ini 所取代。
    compreg.dat
    用來列出 registered XPCOM components。會在觸發 XPCOM registration process 時自動產生。
    content-prefs.sqlite
    3.0 以後的版本才有,記錄個人對頁面的設定。
    cookies.sqlite
    Fx 在 3.0 以後,改用 sqlite 紀錄 Cookies。
    cookies.txt
    Fx 在 3.0 之前,用這個純文字檔紀錄 Cookies。
    cookies.txt.moztmp
    和 cookies 相關的暫存檔,如果 Fx 發現這個檔存在,就會移除 cookies.txt 的唯讀屬性,因為如果 cookies.txt 是唯讀的,會導致生成多個 cookies-n.txt (n 是數字)。
    defaults.ini
    Fx 在 1.5 之前用來列出內有預設的 pref files 的擴充套件資料夾,Fx 1.5 以後,已被 extensions.ini 取代。
    downloads.rdf
    Fx 在 3.0 版之前用來紀錄下載歷史的檔案,如果下載很慢或 hang 住可以試著將這個檔案刪掉。
    downloads.sqlite
    Fx 在 3.0 以後,改用 sqlite 來紀錄下載歷史。
    extensions.cache
    Fx 在 1.5 以後才有此檔,裡頭羅列已安裝的擴充套件、擴充套件的 IDs、安裝的資料夾、上次修改的時間,這是用來註冊由拖放資料夾到已知位置的。這個檔是自動生成的,所以可以刪除沒關係,許多問題可藉由刪掉這個檔來解決。
    extensions.log
    ?
    extensions.ini
    Fx 1.5 以後才有,列出已安裝的擴充套件與佈景主題的資料夾。這個檔是由 nsExtensionManager 自動產生,low-level code 會依此去偵側已安裝的附加元件提供的 chrome packages 與 XPCOM components,許多問題可藉由刪掉此檔來解決。
    extensions.rdf
    已安裝擴充套件的資訊。如果擴充套件清單中有些你明明已經反安裝的擴充套件仍然留在清單中,可刪掉這個檔試試看,還有其他問題也可能可以藉由刪掉此檔來解決。
    extensions-startup.manifest
    僅 Fx 1.5 alphas (Deer Park alphas) 使用,後來改用 extensions.cache。
    formhistory.dat
    Fx 3.0 之前的版本使用此檔來儲存表單資料
    formhistory.sqlite
    Fx 3.0 與之後的版本改用 sqlite 格式來儲存表單資料。
    history.dat
    Fx 3.0 之前的版本用來紀錄瀏覽歷史的檔案。可刪掉來解決某些問題。Fx 3.0 與之後的版本改紀錄到 places.sqlite。
    hostperm.1
    Fx 3.0 之前的版本,對每個網站是否允許 cookies 與 popups 的設定放在此檔。
    key3.db
    是 signons.txt、signons2.txt、signons3.txt 的密鑰 (Key database)。
    kf.txt
    Fx 2.0 才有,用於防釣魚資訊的密鑰 (Key database for phishing protection)。
    localstore.rdf
    工具列與視窗大小/位置的設定,有時刪掉可以解決一些介面上的問題。
    localstore-safe.rdf
    Fx 1.5 與之後的版本,用於 Safe Mode 的 localstore.rdf,會將工具列與視窗還原為預設設定。
    lock (Linux)
    見 parent.lock
    mimeTypes.rdf
    下載特定類型的檔案時要執行的動作。可刪掉來還原原來下載的設定。
    parent.lock (Windows)
    用於標記目前這個 profile 是處於「使用中」的狀態。若刪除,可解除對所在的 profile 的鎖定。
    permissions.sqlite
    Fx 3.0 以上。存放特定網站是否可存取密碼、cookies、彈出視窗、圖片載入與附加元件……等權限的資料庫。
    persdict.dat
    個人的拼字字典。
    places.sqlite
    Fx 3.0 以後的版本用來儲存書籤與瀏覽歷史的資料庫。
    places.sqlite-journal
    Fx 3.0 and above,在 Firefox 開啟的狀態下,用來暫時儲存對 places.sqlite 的更新資料。
    places.sqlite-stmtjrnl
    Fx 3.0 and above,用途 ?
    pluginreg.dat
    Fx 3.0 以後用於 plugin 的 MIME types。Fx 3.0 之前 pluginreg.dat 是位於包含 profiles 的 "Firefox" 資料夾。
    prefs.js
    所有的偏好設定。見 about:config。
    search.json
    Fx 3.5 以後才有。是搜尋外掛資料 (search plugin data) 的快取 (cache),使用此快取,而不使用原本剖析 XML 檔的方式,可以改善啟動時間。
    search.rdf
    Fx 2.0 之前,關於 search plug-ins 的資訊。
    search.sqlite
    Fx 2.0 以後,改用 sqlite 來儲存關於 search plug-ins 的資訊。
    secmod.db
    安全模組資料庫
    sessionstore.js
    Fx 2.0 以後才有,用於儲存 sessions。
    signons.txt
    Fx 1.5.0.10 之前、Fx 2.x - 2.0.0.2 之前用於儲存加密後的網站登入資訊(帳號、密碼),需要 key3.db 配合才有用。
    signons2.txt
    Fx 1.5.0.10 以後的 1.5.x、Fx 2.0.0.2 以後的版本,用此檔儲存加密後的網站登入資訊(加密後的帳號、密碼)以及永不儲存密碼的例外網站清單,一樣需要 key3.db 配合才可作用。
    signons3.txt
    Fx 3.0 以後的版本,用於儲存加密後的網站登入資訊(加密後的帳號、密碼)以及永不儲存密碼的例外網站清單,一樣需要 key3.db 配合才可作用。
    signons.sqlite
    Fx 3.5 以後的版本,用於儲存加密後的網站登入資訊(加密後的帳號、密碼)以及永不儲存密碼的例外網站清單,一樣需要 key3.db 配合才可作用。
    urlclassifier.sqlite、urlclassifier2.sqlite、或 urlclassifier3.sqlite
    Fx 2.0 以後的版本新增防釣魚網站的功能,此檔用於儲存釣魚網站的相關資訊
    urlclassifierkey3.txt
    Fx 3.0 以後的版本才有,用於解開防釣魚資訊的密鑰(Key database)
    user.js
    預設並不存在,使用者若有需要,要自行建立。這個檔案內放的是使用者自訂的設定,在這裡的設定會蓋過 prefs.js 的設定。
    userChrome.css in chrome
    預設並不存在,使用者若有需要,要自行建立。這個檔案內放的是使用者對瀏覽器外觀 CSS 自訂的設定。
    userContent.css in chrome
    預設並不存在,使用者若有需要,要自行建立。這個檔案內放的是使用者對網頁 CSS 自訂的設定。
    userChrome.js in chrome
    預設並不存在,使用者若有需要,要自行建立。這個檔案內放的是使用者對瀏覽器行為的自訂設定。
    webappsstore.sqlite
    Fx 2.0 與以後的版本。用於 DOM storage。
    xpti.dat
    列出已註用的 XPCOM 介面。會在觸發 XPCOM registration process 時自動生成。
    XPC.mfasl (Linux)
    ?
    XPC.mfl (Windows)
    ?
    XUL.mfasl (Linux)
    見 XUL.mfl。
    XUL.mfl (Windows)
    Fx 1.5 之前用這個檔作為使用介面資料的快取。一些問題可能可以藉由刪掉此檔來解決。在 Fx 1.5 前,這個檔放在 profile 資料夾內,但 1.5 與之後的版本,只有自 訂 profile folder 的 profile 會有這個檔在裡頭,可由 Cache folder 來看檔案的位置。
    XUL FastLoad File (Mac OS X)
    見 XUL.mfl
更新日誌:
20100308 更新 Wiki 對 Fx 3.5 的一些說明

參考資料: http://kb.mozillazine.org/Profile_folder_-_Firefox