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;

2011年4月18日 星期一

PulseAudio + ALSA softvol 設定

由於 Onkyo SE200PCI 的 RCA output 音量是不能調整的(純 Line-out),直接讓 PulseAudio 去管理的話會有無法調整全域音量的問題(只有靜音跟 100% 兩種)。

解決的辦法是:在 ALSA 設定檔幫 SE200PCI 加上 softvol plugin 生出新的 device,然後用這個 device 送給PulseAudio 當作預設的 sink & source 就解決了。正常來說,這樣的設定會有兩個一樣的音效卡出現在PulseAudio 的音量控制介面,一個是原來的硬體介面,一個是加上 softvol 的介面。我們可以關掉原來的硬體介面,這並不會影響新介面的運作。

ALSA的 .asoundrc 設定:
pcm.softvol
{
	type softvol
	slave.pcm "hw:0,0"
	control.name "Master"
	control.card 0
}

pcm.!default
{
	type pulse
}

ctl.!default
{
	type pulse
}

PulseAudio 的設定檔(/etc/pulse/default.pa),在 module-udev-detect.so 之前加入下面兩行
load-module module-alsa-sink device=softvol
load-module module-alsa-source device=softvol

2011年3月29日 星期二

Httptunnel 簡易架設

Server 端:

hts -F [目標主機:port]  [http port]


Client 端(網路受限制的一方):

htc -F [本機的 port]  [Server端IP:port]

本地端被封鎖的程式(如 VNC)-> 本機 htc -> Server端  hts -> 目標主機

聽說 sshtunnel 好像做法差不多 ?