2007/05/29

[ffmpeg] 從 Youtube 上面抓影片下來轉成 mp3

這個,先說明在 Linux 上面比較好做。
不過 ffmpeg 也有 Windows 版的。

簡單的說,用這篇提到的 Youtube Downloader (其實就是 video downloader 的簡單化動作)下載影片下來。

理論上會得到一個 flv 檔。
接著就下:
ffmpeg -i video.flv -f mp3 test.mp3


就行,如果有需要可以用 -ss (從何時開始) + -t (延續多久)來剪掉部份的聲音。

ffmpeg -i get_video -f mp3 test.mp3 -t 157
就是只剪 157 秒的聲音下來。

以上簡單記要。

[Firefox] 快速工具列


一開始是從 zonble 大神那裡看到這種玩法:
簡單的說,就是直接點工具列上的按鈕,就可以呼叫某些網頁,讓它們幫你做翻譯﹑縮網址等等工作。因為一個 click 就完成,所以感覺起來就像是自已的功能鍵一樣。

這裡下載
使用方式是:
1. 右鍵下載下來。
2. 解壓縮
3. 檔案功能表 -> 書籤 -> 檔案 -> 匯入

再把這個資料夾拉到你的快捷工具列上就可以。

目前有:

1. 翻譯功能:
中翻義﹑義翻中﹑日文﹑法 ... etc 太多了懶得寫。
2. 縮網址 tinyurl , 0rz, orz
3. Youtube download (代替 videodownload 那個 extension)

[Bash] 怎麼判斷一個字串輸入是否為數值?

怎麼測試一個 string input 進來是不是整數?
這裡提供兩個方法:

1. 用 sed

2. 用
is_num() {
 [ "$1" -eq 0 ] 2>/dev/null
 if [ $? -ge 2 ]; then
  echo "$1 不是整數"
 else
  echo "$1 是整數"
 fi
}

不過後來找到一個更好的
echo $a | grep -Eq '^-*[0-9]+$' && echo 'bingo!'


這招不錯推。

2007/05/25

[Linux] 簡單的 port forward 工具

嗯.. iptables 功能很強大大家都知道。

不過 rules 不是那麼好設定。

且沒有 root 權什麼都不能做。

所以有 redir 這個小工具(加起來不到 50k)的幫忙,這種簡單的 port forwarding 設定就可以不用用到 iptables 這隻牛刀了。

以下是簡單的範例:

$ redir --lport 10022 --caddr=192.168.0.10 --cport=22


把 localhost 的 10022 port 轉向到 192.168.0.10 的 port 22 上面。
另外還可以加上 bandwidth 等等設定在裡頭。

嘖嘖嘖,只能說 Linux 真是好物啊~

--
註: Ubuntu 上面只要 apt-get install redir 就可以安裝了。

2007/05/24

[Linux] 圖解 Screen 教學 [一] 基本應用篇說明

Linux Journal有篇文章也有介紹 Screen 。
多好用呢?

我一開是為了離線工作,還有爛爛的網路才學這個東西的,但是其實它的功能不僅僅如此:

1. 提供離線繼續工作。
2. 多視窗(Window)工作
3. 營幕切割(Region Split)讓你可以不用切換來切換去。
4. 編碼自動轉換

上面的功能可能要自已真的去用才有深刻的體會,本篇只先來介紹怎麼使用,另外附上筆者目前在用的 .screenrc 跟 .bashrc 裡頭的修改,有需要的人請自行下載回去,放在自已的家目錄裡頭,就可以有跟筆者一模一樣方便的 screen 環境可以使用:
1. 先開一個 terminal 像是 gnome-terminal (用 pietty/putty 連進來也算)
2. 打 screen 開始使用,接著會出現 screen 的版權頁。

按 space 就可以繼續
3. default 沒有設定的話, screen 只會為你先開一個 window
接下來如果要再開新的 window 就要按
Ctrl + a 再按 c
就可以 Create 一個新的視窗。


4. 如果要在視窗之間切換可以用

Ctrl + a 再 n #就可以跳到 下一個(Next)視窗


如果是上一個視窗,可以用

Ctrl + a 再 p #就可以跳到上一個(Previous)視窗

5. 如果嫌麻煩可以按

Ctrl + a 再 " #就可以得到視窗列表

如果嫌慢,就把視窗號碼記住,用

Ctrl+a 數字 [0-9] #來做視窗跳躍



6. 如果還沒做完一樣工作,像是一邊還在 wget http://xxx.edu.tw/pub/linux/xxx.iso
現在想離線,但是又想讓這個工作做完怎辦?

當然你可以先給個 break ,再用 wget -b -c http://xxx.edu.tw/pub/linux/xxx.iso 解決,
但是如果你用 screen ,我就會建議直接

Ctrl + a 再 d #意思是 detach 。

下次連線進來再

screen -R session-name # Resume session
就可以。
如果不知道 session name ,可以用

screen -list

列表出來。


接著要介紹 region 的用法:
在修改 某個程式時,一邊還要再 refer 到 header include 的檔案,這種情況大家都遇過吧?
這時應該很希望可以切出兩個 display ,一邊看一個。 (哎呀... xorg 可以做雙營幕,好像比這個好多了.. 但是不是每個人都很有錢,可以配雙營幕。)
所以只好按下

Ctrl + a 再 S #(大寫的 S)


就會像上面那樣把營幕切成兩半 (按愈多切愈多)

接著要使用這個 region 就得按

Ctrl + a 再 tab #先把 focus 跳到下一個視窗
,再按

Ctrl + a 再 c #(建立) 新視窗,或著 號碼跳選其它視窗。



--
附錄 一:
screen 查詢快捷鍵:

Ctrl + a 再按 ?



附錄二:
我的 screenrc

wget http://anton.tw.googlepages.com/screenrc -O ~/.screenrc


附錄三:
screen 自動使用目前在跑的程式當作 title 需修改 .bashrc 的部份

export PS1='\033k\033\\\\${debian_chroot:+($debian_chroot)}\u@\[\033[01;34m\]\h\[\033[00m\]:\w$ '


附錄三:

Ctrl + a 再 Q #可以關閉所有的 region
Ctrl + a 再 X #可以關閉目前的 region


updated: 2007-11-06 更新 PS1 的部份,有些 TERM 上面表現的很難看。

2007/05/23

[CUPS] 如何在 CUPS 新增印表機?

CUPS是 Linux 上面一個很好用的印表機管理系統。
但是很多情況下其實是蠻無奈的方案,因為和 Windows 上的印表機表現相比, Linux 上的印表機常常是又慢又沒什麼功能;這時 CUPS 的表現就成為"最後一個浮在水面上的救命稻草"。

意即:如果還不行... 就認了吧?

CUPS 預設運行在 http://localhost:631/ ,你應該需要先安裝 cups 相關的套件。
除此之外,如果是 HP 的印表機,建議安裝:

hpijs
hplip
hplip-data


1. 第一步: 連上系統,在 firefox URL bar 打下 http://localhost:631/



你會看到在 Administration 點進來右上角有 "New Printers Found:"
底下就 是目前發現到有新的印表機可以選擇加入;如果不在裡面,請記得先確認印表機電源有打開。 XD

2. 第二步: Add Printer 新增一台印表機:



上面這張圖除了 Name 需要特別記住,其它的 location (地點) 跟 description (說明) 都不是很要緊。

3. 第三步: 選擇裝置:

這裡就是看你用 usb 還是用網路印表機,點下去就有清單,如果是用 usb 的,但是沒列出來,最好確定一下你的印表機有辦法讓 linux 抓到,再不行,也只能找 printer server 來裝。


4. 讓印表機可以運作:

這裡建議是用印表機的牌子,像 HP 就用 HP 的。
如果後面找不到型號才來用 "RAW"。 RAW 最大的缺點當然是「慢」。
另外如果牌子很少,沒什麼選擇,應該是少裝了一些套件,像:

cupsys-driver-gimpprint
cupsys-driver-gutenprint
之類的,不是很肯定…錯了,請再跟我糾正一下,感謝。

5. 選擇適當的驅動程式:

如果前面選了 HP 這裡就會列出型號出來,有裝
cupsys-driver-gimpprint
才有 gimp print 的支援。

如果是用 RAW mode ,當然就只有 RAW queue 可以選了。

下一步,就是建立完成了。
其實循序下來還蠻簡單的。


另外,通常我們建好 printer , cups daemon 有在跑, firefox/ooo 就可以很直覺的在 print 選單裡面看到印表機可以選。

如果在文字模式底下,是用

$ lpq
HP2200 is ready
no entries
來檢視目前印表機的狀態。


$ lpstat -a
HP2200 accepting requests since 西元2006年12月13日 (週三) 10時14分02秒
Ricoh350 accepting requests since 西元2007年04月24日 (週二) 10時42分09秒
來檢視目前印表工作的


lpr < xxx.ps
直接送 ps 到 printer 列印。

另外要附註的是,因為某些原因,在部份的 debian 版本上面的
lpq or lpr 不是 CUPS 的 ap ,所以建議 cups 命令有問題時也檢查一下:

$ dpkg -S `which lpr`
cupsys-bsd
如果是 cupsys-bsd 才是本文所提的。

[StarDict] 字典格式

最近又想搞 stardict 的程式出來,所以翻了 SayYa 上面自已以前寫的舊文:

嗯,這個內容是從 stardict/src/tools/DICTFILE_FORMAT 得來的,
由個人加以翻譯、潤飾跟簡化,所以如果有不對的地方,請指正。

stardict 有三種檔案:

1. a.ifo

2. a.idx

3. a.dict

ifo 放這本字典的 information
idx 放 wordlist 的 index
dict放 wordlist 拉過來的 word data

如果你看到 idx.gz 或 dict.gz 那是因為 stardict 可以接受壓縮格式的關係。


.ifo 裡面放
StarDict's dict ifo file
version=2.4.2
[options]

注意 version 的部份, 2.4.2 的 stardict 會去偵測 dict 是不是 for 2.4.2
的版本,如果不是就會拒絕存取。/* 按: 似乎到了 2.4.3 就不是這樣 */

有用的選項表列如下:
bookname= //required
wordcount= //required
idxfilesize= //required
author=
email=
website=
description=
date=
sametypesequence= //非常重要

wordcount 是每筆 word 記錄的總和,必須是正確的,不然會出問題。
說明中提到,為避免不斷的 realloc 降低軟體效能,
所以加入的 idxfilesize 是 idx (解壓縮後)的大小。

sametypesequence 可麻煩了,
你可以在 dict 中放入很多筆 wav 檔案記錄,
然後在 sametypesequence=W 接著,
dict file 在處理時就會忽略 'W' 這個字元。

再另外一個常見的情況做為例子:
你可以設做:
sametypesequence=tm
這樣每個字在 dict 檔裡的處理就會忽略掉 't' 和 'm' 字元,
此外,以 '\0' 和 'm' 結尾的輸入也會被當作每個記錄的結尾。


.idx 是生字清單

它會依序存放在這個檔案裡頭,每筆記錄應作下列格式:

word_str; (utf8 charset 並且以 '\0' 做結尾。)
word_data_offset;
word_data_size;

[Freemind] 0.90 beta 9



LinuxToy提到 Freemind 已經 release 到 0.90 beta 9 了。一直都有在用這個心智工具的我當然不會放過再去看看的機會。

更新的內容摘要:
* 全新的圖案
* 編輯環境的加強
* 加強屬性功能
* 導入/導出部份的加強
* 日程圖

完全不了解什麼是 FreeMind ,或只想看一下「心智圖長什麼樣」的人,可以先看一下這裡

--
安裝嫌麻煩嗎?
FreeMind 的官網上面有提到 debian/Ubuntu 系列的安裝方式

deb http://eric.lavar.de/comp/linux/debian/ version/
deb-src http://eric.lavar.de/comp/linux/debian/ version/

version 的部份可以用 "unstable" 或 "experimental"
不要忘記最後的 "/"

接著下 apt-get install freemind 的就可以。

2007/05/21

[linux] 用 mplayer 抓影片長度

這招要感謝同事山姆的貢獻:

$command = "mplayer -identify b.mpg -endpos 1 2>/dev/null -ao null -vo null |grep ID_LENGTH|cut -d \"=\" -f 2";

exec($command, $out);
echo strftime("%H:%M:%S\n",$out[0]);


這樣上傳的影片就不用再靠使用者點 plugin 了~

[Windows] 免費的防毒軟體

avast是一款免費的防毒軟體。

它提供免費的家庭版(包括病毒碼跟防毒程式),每 16 個月需要 renew 一次註冊碼,

但是註冊碼的需求只是一個信箱地址,所以感覺還不錯,也比 google 和 norton 的那個版本好。

(話說 google download 上面的 norton 好像已經消失了?)

在上週發生的事情之後,我把老爸的 windows 換了這款防毒軟體。

果然如我所料,四天過去了,還是什麼事情都沒有。

2007/05/13

[Linux] DVD Movie ISO 在 Linux 上怎麼看?

唔... 這個問題在 Windows 上面的話,我會想說從 daemon tool 或 nero/酒精軟體著手。
也就是先 mount iso 起來,再用 realone 或 mediaplayer 來播之類的。

在 Linux 上面怎辦?

這樣?

$ mount xxx.iso -o loop mount_point ?


Uh... 絕對不是。

答案是:

mplayer dvd:///media/usbdisk/movie1/XXXX.ISO

如果有播放字幕的需要,請記得在 ~/.mplayer/config 加上

subcp=cp950
unicode=yes


及在 mplayer 參數多加一個 -sid n 來指定語系。

--
更新:
補一點『如何找出 sid 』
我的解法是: 用 mplayer -identify DVD.iso 先去看一下 sid 有哪些,再去

[Linux] 中文語音方案

Linux 上面的中文語音一直沒有很好的解決方案。靠著 gcin 作者 Edward Liu 提供的開發程式一組男聲,總算有了一個好的開始。

另外,小弟想起 festival這款語音合成軟體。因為這個東西跟目前的男聲檔可以當作一個很簡單的語音合成工具
裡面現在有 pho.tab.src 這個用來 parsing 中文的注音檔。另外也需要 php 跟 sox 的支援。

不過總算是可以勉強唸唸中文了 :D
使用方法:

speak "中文測試"

[Linux] ntfs-3g 顯示中文

ntfs-3g是 Linux 上面用來解決 ntfs 檔案系統的讀寫問題方案。是的,它是 GPL 的授權,所以任何人都可以免費使用它。

安裝的部份可以參考「阿駕零零壹」上的說明:

# sudo apt-get install ntfs-3g
# sudo mount -t ntfs-3g /dev/sda1 /media/disk -o locale=zh_TW.utf8,silent,umask=0
fstab 書寫
# /dev/sda1 /media/disk ntfs-3g silent,umask=0,locale=zh_TW.utf8


至於阿駕提出的「如何讓 removable storage device 」可以自動掛載的方法,應該可以參考:huangjiahua 上面所提出來的方法,簡單的說,就是修改 Hal 底下的 policy 。

2007/05/05

[Firefox] 神奇的玩意兒, Windows 也適用。

真的假的,這麼神奇?
多神奇自已來看一下。

簡單的說:
1. 如果你是一個 mozilla/firefox 工程師。
2. 如果你對 firefox 開發有興趣。
3. 如果你常寫 html/js 苦於沒有合適的 debug 工具。 (firebug當然也是一推。)
4. 無聊到沒時間打發。

那你可以試試看這個新玩意兒

讓你可以用 telnet 的方式連進你的 firefox/mozilla 協助處理網頁/browser 內部的行為。

[tomboy] make 時有問題

** (/usr/lib/mono/2.0/gmcs.exe:23261): WARNING **: The following assembly refere
nced from /usr/lib/mono/gac/gdk-sharp/2.10.0.0__35e10195dab3c99f/gdk-sharp.dll c
ould not be loaded:
Assembly: Mono.Cairo (assemblyref_index=2)
Version: 1.0.5000.0
Public Key: 0738eb9f132ed756
The assembly was not found in the Global Assembly Cache, a path listed in the MO
NO_PATH environment variable, or in the location of the executing assembly (/usr
/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0).


上面這一段很多人在 make 時出錯都沒注意到。
tomboy 的相依套件裡也不會提到這點。

簡單的說,這個問題是可以理解的。
但是不能不做個 note 提醒一下。

anyway,

apt-get install libmono-cairo2.0-cil

就可以了。

2007/05/01

[Google Notebook]

我(目前)沒有用 google notebook 的習慣,所以當它問我要不要安裝它的延伸套件的時候,我猶豫了一下,不過還是裝來看看。

總之,這裡有張縮圖:


感覺起來比以前好用。但是我現在都是用 tomboy+ rsync來 做個人筆記的工作。所以也沒什麼感想可以 po 啦,只是想說,現在已經愈來愈趨向是 firefox + xpi + google service 了。

[Windows] git-bash 底下的工具

因為工作轉到 Windows 平台上的關係,所以很多工具改到 Windows 上面運作,跟著在 TortoiseGit 底下使用 git-bash 來維護自己的專案原始碼。結果就是裝了前面提過的 auto-hotkey 使用熱鍵來提昇自己的平台操作速度; 但除了 hotkey...