顯示具有 工具程式 標籤的文章。 顯示所有文章
顯示具有 工具程式 標籤的文章。 顯示所有文章

2019/11/15

一行指令修改整個目錄內文字檔的字串

最近下載了一個 open source 的 Android app 來改。基於某些考量,必須修改 application id。因此,source code 當中有很多 package、import 等敘述都要修改,算算竟有將近一百個檔案。

作這樣修改其實不難,只要一道指令:
grep -rl OLD_APPID | xargs sed -i 's/OLD_APPID/NEW_APPID/g'

2015/04/24

縮小影像檔的大小

用 avconv 來縮小影像檔的大小:
avconv -i INPUT.mp4 -s 640x360 OUTPUT.mp4
若影片的聲音是 acc 編碼,上述指令可能會警告你程式的 acc 編碼器還在驗證階段,要求你多加一個參數 ("-strict experimental") 確定你要用這個實驗品:
avconv -i INPUT.mp4 -s 640x360 -strict experimental OUTPUT.mp4
若影片太長,你只要前 N 秒,可以加上參數 "-t N"。若只要影像,不要聲音,請參考 去除影片檔聲音的方法

2014/03/07

去除影片檔聲音的方法

錄下的影片有不想要的背景音?可用 avconv (即 ffmpeg,Linux & Windows 都有) 去除聲音的部份,指令如下:
avconv -i IN-FILE -vcodec copy -an OUT-FILE
其中:
  • -vcodec copy 代表影像編碼照舊
  • -an 代表不要聲音
若只要聲音不要影像呢?沒錯,就是將這兩個參數改成 -acodec-vn 即可。

2014/02/25

用 lame 批次將 .wav 轉成 .mp3

在 Ubuntu 底下,批次將 .wav 轉成 .mp3 的方法如下:

先安裝轉檔工具:

sudo apt-get install lame

再執行 lame 將 .wav 檔一個一個轉成 .mp3:

ls *.wav | sed -e 's/\.wav//' | xargs -i -n 1 lame -h -b 128 "{}.wav" "{}.mp3"

2013/09/16

將多張 JPEG 圖形檔合成一個多頁文檔

想將多張 JPEG 圖形檔合成一個多頁文檔?沒問題,但你要先知道 JPEG 格式目前沒有多頁模式。所以要轉成支援多頁的格式,譬如 .PDF 或 .TIFF。

Ubuntu 上似乎預設就有此功能:
convert file1.jpg file2.jpg file3.jpg output.pdf
此功能是包含在 imagemagick 套件上,若沒有上述 convert 程式,可以自己安裝此套件:
sudo apt-get install imagemagick
據說 Windows 和 MacOS 平台上也都有此程式。

2012/08/02

將 HTML 轉成 PDF 檔 (支援中文)

在 Ubuntu 上將 HTML 轉成 PDF 檔非常簡單。用 Firefox 或 Chromium 打開這個 HTML 檔 (或連上該網站),然後「列印至 PDF 檔案」即可。不過,你若在其他平台,或想自動完成這項工作,就比需要有其他工具了。

網路上這類工具還不少,不過不是安裝複雜就是不支援中文。在這裡推薦一套安裝簡單又好用的轉換工具,wkhtmltopdf

安裝有多簡單?下載之後解開即可 (我只在 Ubuntu 上試過)。

有多好用?這類轉換工具對 HTML 檔的處理能力參差不齊,若加上需要支援中文,就更難找到讓人滿意的解決方案。但 wkhtmlpdf 是以 WebKit/QT 為核心,而 WebKit 是 Apple Safari 和 Google Chrome 的網頁處理器,所以處理能力毋庸置疑。

最簡單的執行範例:
wkhtmltopdf http://news.chinatimes.com/ news.pdf
若你想加上封面、頁首、頁尾等也可以,請自行參閱 wkhtmltopdf -H 的說明。

新版 Ubuntu 使用者注意事項

直接下載上述網頁編譯完成的 binary 在較新版本的 Ubuntu,譬如 12.04,似乎無法執行:
QSslSocket: cannot call unresolved function SSLv23_client_method4%
QSslSocket: cannot call unresolved function SSL_CTX_new
QSslSocket: cannot call unresolved function SSL_library_init
QSslSocket: cannot call unresolved function ERR_get_error
QSslSocket: cannot call unresolved function SSLv23_client_method
QSslSocket: cannot call unresolved function SSL_CTX_new
QSslSocket: cannot call unresolved function SSL_library_init
QSslSocket: cannot call unresolved function ERR_get_error
解決辦法是下載 source 自己編譯。不要擔心,編譯非常簡單:
$ sudo apt-get install qt4-dev-tools
$ wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1.tar.bz2
$ tar xvjf wkhtmltopdf-0.11.0_rc1.tar.bz2
$ cd wkhtmltopdf-0.11.0_rc1/
$ qmake && make
$ sudo apt-get make install

Keywords: html2pdf, html-to-pdf, web2pdf, web-to-pdf

2011/11/28

在 Ubuntu 解 Windows 的 ZIP 壓縮檔

有沒有搞錯?這不是很簡單嗎?

是的,這很簡單。但問題是有些在 Windows 壓縮的 ZIP 檔內含的中文檔名是 Big5 編碼,Ubuntu 的壓縮檔管理員解開時會是亂碼。原因是 ZIP 格式並未定義如何標示檔名的編碼,所以壓縮檔管理員一律當成 Unicode 來解。

遇到這個問題,可以用 command line 的 unzip 來解決:
unzip -O big5 your_compressed_file.zip
PS: 我發現 Ubuntu 10.04 的 unzip 已經移除 -O 的功能 (怪怪~~稍微新或舊一點的版本卻都有)。需要此功能的朋友,可以到以下頁面下載稍微新一點的版本來用:
http://packages.ubuntu.com/oneiric/unzip

2011/10/17

用 Python 來控制 Skype

終於找到一個可以利用 script 來控制 Skype 狀態的方法,先簡單留下參考資料:
利用 Skype for Linux 2.2.0.35 測試,確實可以改變 Skype 的狀態,但似乎還不夠穩,偶而會失敗。

2011/03/02

在 Ubuntu 上看 GBK 簡中的 PDF 文件

朋友傳了一份 GBK 簡中編碼的 PDF 文件給我。此文件在 Ubuntu 底下 Adobe Reader 8.1.7 開不起來,錯誤訊息說要到以下網址下載 Font Packs:
http://www.adobe.com/products/acrobat/acrrasianfontpack.html
然而,這個 URL 早已失效了。切換到 Windows Vista,用 Adobe Reader X 來開啟,也是要求要安裝 Chinese Simplified Font Packs。但畢竟是主流平台的最新版本,直接點選錯誤訊息的連結就可以完成安裝程序。

在 Ubuntu 上就沒有解法嗎?答案是有的。Adobe Reader 8.1.7 是 Linux 上有中文介面的最新版本,但卻沒有對應的 Chinese Simplified Font Packs,所以必須換成英文介面的較新版本。

目前,Adobe 網站上能找到的最新 Chinese Simplified Font Packs 是 9.1.0 版。根據測試,可以搭配 Adobe Reader 9.5.5。步驟如下:

移除舊版 Adobe Reader 之後,再安裝新的版本:
# sudo -s
# cd /tmp
# wget ftp://ftp.adobe.com/pub/adobe/reader/unix/9.x/9.5.5/enu/AdbeRdr9.5.5-1_i386linux_enu.deb
# dpkg -i
AdbeRdr9.5.5-1_i386linux_enu.deb
接著,再安裝 Font Packs (簡中和繁中都必須裝,否則 Big5 編碼的也開不起來):
# wget ftp://ftp.adobe.com/pub/adobe/reader/unix/9.x/9.1/misc/FontPack910_cht_i486-linux.tar.bz2
# tar xvjf FontPack910_cht_i486-linux.tar.bz2
# cd CHTKIT/
# ./INSTALL
# cd /tmp
# wget ftp://ftp.adobe.com/pub/adobe/reader/unix/9.x/9.1/misc/FontPack910_chs_i486-linux.tar.bz2
# tar xvjf FontPack910_chs_i486-linux.tar.bz2
# cd CHSKIT/
# ./INSTALL
以下是 ./INTALL 的過程,僅供參考:
Welcome to the Asian Language Kit installation.
This installation will not work if you do not have the Unix Adobe Reader version 9.1 installed prior to this installation.
If you do not have Adobe Reader version 9.1 already installed on your system please do so before installing this Asian Language Kit.
Continue installation? [y]y
The font software contained in this package is being licensed to you solely
for use with the Adobe Reader product ("Adobe Reader") subject to
the terms and conditions of the Electronic End User License Agreement
accompanying the Adobe Reader.

Please type "accept" to accept the terms and conditions of license agreement; Type "decline" to exit. accept
Enter the location where you installed the Adobe Reader [/opt]

Installing Common binaries ...
Done

Installing Common resources ...
Done

Installing Simplified Chinese language resources ...
Done
Installation completed.

2010/11/12

在 Ubuntu 上解開 x.part1.rar 分割壓縮檔

在 Windows 上可以用 7-zipWinRAR 之類的程式來解開並組合 x.part1.rar 這類型的分割壓縮檔。在 Ubuntu 上當然也可以:
rar e x.part1.rar
當然,要先安裝 rar:
sudo apt-get install rar

2010/04/11

好康推薦:Rainlendar

五六年前,Windows XP 還是我主要使用的作業系統時,Rainlendar 就是我非常喜歡的一套桌面行事曆軟體。對整天掛在電腦前面的人來說,應該會非常喜歡這套輕巧方便的行事曆軟體。

將主要作業系統切換到 Ubuntu 時,Rainlendar Linux 版還在規劃當中,遂不得不放棄這套軟體。前一陣子才發現 Rainlendar Linux 版不但已經完成,而且一樣有免費的 Lite 版。

在 Ubuntu 上安裝,Rainlendar 被分類在「辦公」軟體,登入之後並不會自動啟動。請按以下方式將 Rainlendar 加入自動啟動的清單之中:
  • 主選單 -> 系統 -> 偏好設定 -> 啟動應用程式
  • 加入 新增一個項目:
  • 名稱:Rainlendar2
  • 指令:rainlendar2
  • 備註:Customizable desktop calendar
不知道是不是 Rainlendar2 的錯蟲:偶而登入之後會出現以下的錯誤訊息:
Do you want to start another instance?
雖然按 Yes 就可以繼續,但總是不方便。後來將啟動應用程式的指令改成「rainlendar2 -m」,問題好像就解決了。

2010/01/17

Bless -- Hex Editor for Gtk#

做軟體開發工作,難免會需要檢視或編輯一些二進位檔案 (binary file)。在 Ubuntu 底下,若只是單純檢視,用 hexdump 可能就足夠;若需要進行簡單的修改,那我推薦 hexer (特別適合已習慣用 vi 的人)。上述兩隻程式都是文字模式,所以操作起來有不少限制。

GUI 版本的 binary editor 我推薦 Bless,雖然版本只是 0.6.0,但剪下、複製、貼上等功能都很齊全,而且能同時開啟很多個檔案,非常方便。

另有一個 GHex 也是 GUI 版的 binary editor。初步看來 Ubuntu 對此程式的支援好像比較多,但用起來不若 Bless 那麼好用。最致命的缺點是無法調成每十六個位元組一行,這使得在對照一些資料格式的時候,非常不容易進行。

上述提到的程式所在的 package 如下:
  • hexdump: bsdmainutils
  • hexer: hexer
  • Bless: bless
  • GHex: ghex

2009/12/24

Colorsvn 讓 SVN 一目了然

就像 colordiff 一樣,小小顏色卻能大大提高 diff 檔的可讀性。習慣用命令列 svn 指令的人應該會喜歡 colorsvn (http://colorsvn.tigris.org):


Ubuntu 的正式套件目前還沒有收錄 colorsvn,可用以下方法安裝:
  1. 到以下位置下載 .rpm 檔:
    http://www.console-colors.de/index.php?n=ConsColors.Downloads
  2. 利用 alien 來安裝 .rpm 檔:
    sudo alien -i colorsvn-0.3.2-1.noarch.rpm
  3. 在 .bashrc 增加 alias svn='colorsvn'
PS 1: 若你安裝完之後看不到顏色,請檢查是否有 `/etc/colorsvnrc` 或 `~/.colorsvnrc`。若沒有,可以下載 colorsvn 的 tarball,裡面有個 colorsvnrc-original,可以拿這個檔案出來用。

PS 2: 裝了 colorsvn 之後,svn diff 一樣沒有顏色,需要搭配 colordiff

2009/10/16

CuteCom 的 Input History

CuteCom 是 Linux 上相當好用的 terminal emulator 之一 (請參考 這裡)。他最大的特色是有一個 input history,會保存最近輸入過的指令,隨時可以點選取用。

比較討厭的是,輸入錯誤的指令也會佔據有限的 history 空間,令人想除之而後快。不過 CuteCom 似乎沒有提供刪除 history 的介面。後來找到一個解法,直接編輯設定檔:
vi .config/Unknown\ Organization.conf
修改最底下那行 History= 就可以了。

超好用的 colordiff

如果你跟我一樣習慣用 diff 來比較前後版程式修改了哪些地方,你一定也會喜歡 colordiff。顧名思義,它是有顏色的 diff -- 以不同顏色來顯示刪除或新增的地方,這讓 diff 的結果一目了然。

安裝方法:
sudo apt-get install colordiff
使用方式:
  • colordiff file1 file2
  • colordiff -u file1 file2 | more
  • colordiff -u file1 file2 | less -R
  • svn diff file1 | colordiff
若不想改變平常下指令的習慣,可以這樣做:
  • 在 .bashrc 加上一條 alias diff='colordiff'
  • 將 .subversion/config 的 diff-cmd 設成 colordiff
這樣以後 diff 和 svn diff 就直接變成彩色版了。

2009/08/21

在 Ubuntu 上安裝 VMware Player

首先到以下位置下載 VMware Player。填完註冊表格之後,便可選擇要哪一種平台的哪一個版本,請選擇 for Linux (.rpm):
http://www.vmware.com/download/player/
截至發文的時間,最新的版本是 2.5.3。若你有安裝舊版本,請用以下指令移除:
$ LANG=C rpm -e VMware-Player
若用以下指令安裝,會有「相依性偵測失敗:/bin/sh 被 VMware-Player-2.5.3-185404.i386 所需要」的錯誤發生:
$ rpm -Uhv VMware-Player-2.5.3-185404.i386.rpm
請改用以下指令跳過相依性檢查,就可以安裝成功:
$ LANG=C rpm --nodeps -Uhv VMware-Player-2.5.3-185404.i386.rpm
安裝成功之後,可以在系統工具選單找到 VMware Player 的啟動圖示。

2009/04/10

我的 Ubuntu 軟體點點名

用 Ubuntu 越久,就越覺得方便。需要甚麼功能的軟體,絕大部分用 Synaptic 就可以下載安裝。將好用的軟體記錄如下,也推薦給大家 (不含 Ubuntu 固定會安裝的)。
  • KchmViewer 電子書 .chm 檔案的檢視器。套件:kchmviewer (曾試過 GnoCHM 和 ChmSee,這兩者的搜尋功能都不好用)
  • hexedit 非文字檔的編輯工具。套件:hexedit
  • unrar 解壓縮程式,可與 file-roller 整合。網路上有那麼多免費、公開的壓縮軟體,搞不懂為什麼那麼多人喜歡將檔案壓成 .rar。套件:unrar
  • minicom 終端機模擬軟體 (terminal emulator),透過 RS232 連到某些設備的 console。套件:minicom (進一步介紹)
  • Wire Shark 封包抓取和分析軟體。套件:wireshark (進一步介紹)
  • Virtual Box 虛擬機器。套件:virtualbox-ose,但我推薦 官方網站 的版本,不管用哪一套都需安裝 scim-bridge-client-qt (進一步介紹)
  • Sox 聲音檔轉換工具 (命令列模式)。套件:sox、libsox-fmt-all
  • VLC media player 影音播放軟體。套件:vlc
  • Wave Surfer 聲音檔處理、分析工具,可檢視聲音波形、區間播放等。套件:wavesurfer

2009/03/10

Subversion, Grep, Diff

我很習慣用 grep 來找 source code 當中的字串;也很習慣用 diff 來比較兩個 source tree 的差異。如:
grep -r STRING *
diff -ur DIR1 DIR2
這兩個指令很好用。但是遇到 Subversion 的 working copy 時,就會受到 .svn 目錄的干擾。所幸這兩個指令都提供排除非必要目錄的方法:
grep --exclude-dir=.svn -r STRING *
diff -x .svn -ur DIR1 DIR2

老實說,常會忘記這些參數,也常弄混。因此建議在 .bashrc 當中加上以下設定,這樣以後不管是不是 working copy 都可以安心使用 grep -r 和 diff -r 了:
alias grep='grep --exclude-dir=.svn'
alias diff='diff -x .svn'

2008/10/28

不用 sudo!以 non-root 身份用 Wireshark 抓封包

在 Ubuntu 上安裝好 Wireshark,想抓封包時卻找不到網路卡。原來必須執行 "sudo wireshark" 才有足夠的權限。這樣子除了麻煩之外,還有一個不方便:封包存檔之後是屬於 root 所有,處理起來相當不便。

經過一番努力,找出幾個解決方案 (越後面的方法越好)。

方案一

最簡單的作法是安裝完 Wireshark 之後執行 "sudo chmod u+s /usr/bin/dumpcap"。這樣子就可以一般使用者的身份抓封包了。關鍵在於 "dumpcap" 就是那個需要 root 權限的部份,上述指令讓一般使用者也可以 root 的身份執行 "dumpcap"。

這種方法雖然簡單,但對講求安全的人來說卻不太妙。因為所有人都可以執行這隻需要 root 權限的程式。方案二是一個改進的方法。

方案二

改進的方式就是只開放給特定 group 的人以 root 身份執行 "dumpcap":
  1. 執行 "sudo vi /etc/group" 並新增一個 group (建議叫做 "wireshark"),然後將自己加入此 group
  2. 執行 "sudo chgrp wireshark /usr/bin/dumpcap",將 dumpcap 改為 wireshark group
  3. 執行 "sudo chmod 4754 /usr/bin/dumpcap",只讓屬於 wireshark group 的人可以 root 身份執行 dumpcap
完成上述動作之後,重新登入讓 group 所屬生效。這樣你就可以用原本的身份抓封包了,封包存檔的所有也都屬於原本的身份。

方案三

方案二雖然已經限縮有執行權限的人,但終究還是以 root 身份執行 dumpcap。更嚴謹的方法是:利用 Linux Capabilities 只授權 dumpcap 有抓封包的權限。方法如下:
  1. 同方案二的步驟 1 和 2
  2. 執行 "sudo chmod 750 /usr/bin/dumpcap",只讓屬於 wireshark group 的人可以執行 dumpcap (以一般身份)
  3. 執行 "sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap",授予 dumpcap 有抓封包所需的權限 (若沒有 setcap,請自己安裝 "sudo apt-get install libcap2-bin")
參考資料:

2008/10/23

Running Wireshark as a non root user

In general, we have to run "sudo wireshark" to capture packets. It is very annoying. Luckily, I found solutions that work on my Ubuntu box.

Solution 1:

The simplest way is to run "sudo chmod u+s /usr/bin/dumpcap" once. That's all! Because "dumpcap" is the only part that need root privileges. However, it is not a good practice to enable all to run an executable that has root privileges.

Solution 2:

The better solution is to create a group and allow the members of the group to run "dumpcap" with root privileges:
  1. "sudo vi /etc/group" to create a new group, say "wireshark", and enroll yourself to this group
  2. "sudo chgrp wireshark /usr/bin/dumpcap"
  3. "sudo chmod 4754 /usr/bin/dumpcap"
Logout and login again to take the new groupship and you can use Wireshark to capture packets as a non-root user.

Solution 3:

The best solution is to grant "dumpcap" the right to do its job without involving root access at all:
  1. Same as step 1 & 2 of Solution 2
  2. "sudo chmod 750 /usr/bin/dumpcap"
  3. "sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap"
References: