2011年5月29日 星期日

Linux 桌面正體中文補完

不知道為什麼在自由軟體世界中常常看到半殘的正體中文翻譯,也許比較多人用的軟體翻譯會比較完整一點,但還是多少會看到沒翻的字串。正所謂求人不如求己,當你看翻譯不順眼的時候可以用以下的方法對付。

GNU gettext

大多數的自由軟體是採用 GNU 的 i18n 架構,locale的翻譯訊息是從原始的 .po 檔編譯成程式在讀的 .mo 檔。這些檔案會隨著套件安裝到 /usr/share/locale/zh_TW/LC_MESSAGES 裡,如果你要修改翻譯,你需要 msgfmt 和 msgunfmt 這兩個工具。

我們可以先用 msgunfmt 將 .mo 檔轉成 .po 檔進行文字編輯,在將編輯過的 .po 檔用 msgfmt 輸出 .mo 檔。指令如下:

msgunfmt gtk20.mo -o gtk20.po
msgfmt gtk20.po -o gtk20.mo


除了應用程式中的字串外,選單與 MIME 也常常看到沒翻譯的字串。要編輯它們可以到以下的地方找到定義檔:

  • /usr/share/applications 選單中的應用程式項目
  • /usr/share/desktop-directories 選單中的應用程式目錄
  • /usr/share/mime/packages 檔案類型

MIME 編輯完以後需要跑 update-mime 才會生效。

2011年5月18日 星期三

將資料夾 mount 到另一個資料夾

兩種方法,一種是直接下 mount 指令:
mount --bind src_dir dest_dir

另一種是寫到 fstab:
src_dir dest_dir bind bind

雖然說用 Symbolic link 也是可以差不多的效果,不過用 Symbolic link 的話 console 下 tab 要按兩次才會出現 '/'。用 xfce4-terminal 去開那個資料夾的話,link 會被展開成絕對路徑,使得 PWD 又臭又長。

2011年5月14日 星期六

復原被 git reset --hard 洗掉的 code

利用 git reflog 可以查詢近期 git 命令的全域歷史記錄(跨 branch),你可以利用他列出來的 SHA1 值進行復原工作。不過要注意的是這個記錄是有限的,git 只會保留最近的記錄,所以如果時間拖太久就真的沒法救了。

參考資料:http://stackoverflow.com/questions/5473/undoing-a-git-reset-hard-head1

2011年5月8日 星期日

在 xorg.conf 設定 NVIDIA PowerMizer

在 Device 區段加入以下設定,啟用 PowerMizer 並且在使用 AC 電源時效能全開,使用電池電源時採用動態管理。

Option "RegistryDwords" "PowerMizerEnable=0x1;PerfLevelSrc=0x3322;PowerMizerDefaultAC=0x1"

2011年5月3日 星期二

libavcodec & libavformat 的 fps 偵測

以下的 code 利用 FFmpeg 的 API 去偵測影片檔中的 fps 值。

AVFormatContext* formatContext;

int videoStream;
int audioStream;
int i;
float fps;

av_open_input_file(&formatContext, "your_media_file", NULL, 0, NULL);
av_find_stream_info(formatContext);

videoStream=-1;

for(i=0; i<formatContext->nb_streams; ++i)
{
	if(formatContext->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO)
	{
		videoStream=i;
	}
	if(formatContext->streams[i]->codec->codec_type == CODEC_TYPE_AUDIO)
	{
		audioStream=i;
	}
}

fps = formatContext->streams[videoStream]->r_frame_rate.num /
	formatContext->streams[videoStream]->r_frame_rate.den;