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 平台上也都有此程式。

2013/08/31

在 Ubuntu 使用 USB RS232 轉接線

現在的 PC 或 NB 已經很少看到 RS232 接口了。但有些時候,如開發 embedded system 時,還是很需要 serial console。此時就需要 USB RS232 轉接線。

在 Ubuntu 上使用 USB RS232 轉接線很簡單。首先,插入 USB RS232 轉接線後馬上執行以下命令查出 device name:
$ dmesg | grep tty
[ 7842.193255] usb 2-2: pl2303 converter now attached to ttyUSB0
如上述範例的  device name 的是 ttyUSB0。一般來說,你可能會沒有足夠的權限:
$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0  8月 31 10:33 /dev/ttyUSB0
像上述範例,你如果不是 root,就要把自己加入 dialout 那個 group (修改 /etc/group)。然後就可用自己喜好的 terminal emulator 開始上工了。

以下是其他一些可能會需要的診斷工具,僅供參考:
  • 查看連接上的 USB 裝置的資訊:lsusblsusb -v
  • 查查裝置剛插入時有什麼狀況發生:tail /var/log/syslog

2013/08/02

在 Ubuntu 上將 YouTube 的 MV 轉成 MP3 檔

先聲明,以下這方法不是最簡單的,只是個人喜好的步驟 (其實,有網站提供此服務)。

首先,先在 Firefox 安裝可下載 YouTube 影片的 Add-on,譬如:1-Click YouTube Video Download。將喜歡的 MV 轉成 MP4 檔。

然後,執行以下指令:
avconv -i input.mp4 -f mp3 -vn output.mp3
若不能成功,可能是缺少 mp3 codec,用以下方法安裝:
sudo apt-get install libavcodec-extra-53
不習慣 avconv (亦即之前的 ffmpeg) 命令列的,可以安裝 winff 來用 GUI。

參考資料:


2013/07/24

Android/Eclipse 上 Java 的 Tab 處理

Android 的 Code Style Guidelines 明確規定縮排是用四個空白,而且強調 We never use tabs。既然最權威的原創者有明確的規定,我們開發 Android Apps 時,若沒有特別的理由,建議也比照辦理。

有趣的是,Eclipse 的預設跟此規定恰好相反:用相當於四個空白寬度的 tab 來縮排。改變此設定的方法如下:
  • Window > Preferences > Java > Code Style > Formatter > New
  • Java Conventions [built-in] 當樣板,新增一個 Android Style profile
  • 修改此 profile,將 Tab policy 改成 Spaces only,Tab size 設成 4
有了上面的設定,用 eclipse 開發 android app 時,縮排用 tab 就會自動變成四個空白。我建議再做以下設定,讓 eclipse 明確顯示 space、tab 和 newline 等字元,以便精準掌握「空白」是不是你所想要的那種「空白」:
  • Window > Preferences > General > Editors > Text Editors > Show whtiespace characters

2013/07/20

Ubuntu 的網路設定

一般來說,Ubuntu 的網路設定不會是個問題,安裝時幾乎就幫你搞定一切了。但若你後來更換網路卡,或者將安裝硬碟換到不同的機器,你可能就需要自己稍微調整一下設定了。以下是我的一些經驗,僅供參考。

首先,確認 kernel 認到多少張網路卡:
root@ubuntu:~# dmesg | grep eth
[    1.678186] i2c-core: driver [aat2870] using legacy suspend method
[    1.678186] i2c-core: driver [aat2870] using legacy resume method
[    2.718021] via-rhine 0000:01:06.0: eth0: VIA Rhine II at 0xfebffc00, 00:11:22:ab:cd:ed, IRQ 19
[    2.718735] via-rhine 0000:01:06.0: eth0: MII PHY found at address 8, status 0x782d advertising 01e1 Link cde1
[    2.726899] forcedeth: Reverse Engineered nForce ethernet driver. Version 0.64.
[    2.727153] forcedeth 0000:00:0f.0: PCI INT A -> Link[LMAC] -> GSI 20 (level, low) -> IRQ 20
[    2.727160] forcedeth 0000:00:0f.0: setting latency timer to 64
[    3.253390] forcedeth 0000:00:0f.0: ifname eth1, PHY OUI 0x732 @ 1, addr 00:33:44:ab:cd:ed
[    3.253394] forcedeth 0000:00:0f.0: highdma pwrctl mgmt gbit lnktim msi desc-v3
以上輸出,很清楚看到系統抓的兩張網路卡,eth0 & eth1。有些時候,你會看到 "eth0 is renamed to eth1" 之類的訊息。這時候,你用 ifconfig 去看時,會發現網路界面的名稱跟系統抓到的好像不一致。遇到這種情況,請檢查 /etc/udev/rules.d/70-persistent-net.rules:
# PCI device 0x1106:/sys/devices/pci0000:00/0000:00:0a.0/0000:01:06.0 (via-rhine)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:11:22:ab:cd:ef", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x10de:/sys/devices/pci0000:00/0000:00:0f.0 (forcedeth)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:33:44:ab:cd:ef", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
也就是說,網路界面的名稱可被 udev 重新定義。確認網路界面之後 (確認沒有的網路卡,可以直接刪除),就可以設定各個界面的網路型態:
root@ubuntu:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
以上範例,eth0 會自動取得 IP,eth1 則自行指定 IP 位址。

2013/04/17

Epson Stylus Office TX610FW 灰階列印 @ Ubuntu

彩色墨水不便宜,因此我習慣不需要時就用灰階列印。Epson Stylus Office TX610FW 在 Ubuntu 上的驅動程式沒有很 user friendly,用灰階列印需要一點巧門。

一般來說,要啟用灰階列印是:
  • 在列印對話框選定 Epson 印表機
  • 進入「進階」選項
  • 在 Paper & Quality Options 的 Color 選 「Grayscale」
  • 上一動會出現警告圖示,只說設定有衝突,很難猜出原因是什麼。解法是在底下的 Color Management 將 Color Mode 從 「Epson Vivid」 改成 「No Color Adjustment」
若你想將灰階列印設成預設模式,就要去改變印表機的屬性:
  • 系統 > 管理 > 列印
  • 選定印表機 > 右鍵 > 屬性 > 印表機選項
  • 接下來的動作和前面所述一致,但須注意可能有中英文的差異:
    • Color = 彩色
    • Grayscale = 灰階
    • Epson Vivid = EPSON 鮮艷色彩
這個課題還沒有結束。如果你按照本人介紹的方式 在 Ubuntu 上安裝 Acrobat Reader,這版 Acrobat Reader 串接印表的方式似乎不是 Ubuntu 的標準作法,或者有其他 bug。我的心得是:根本無法切換彩色或灰階模式,因為無此選項。

我懷疑是 bug,因為 Acrobat Reader 點選列印之後,你可以點 Properties 去設定列印參數,而這些參數有兩個一樣的 Color 選項,但都不是用來選擇 Color 或 Grayscale 的。我的解法是先去改設定印表機的預設模式,再啟動 Acrobat Reader 出來列印,注意一下 Properties 的 Printer Command 有 「-o Color=Grayscale」 這一參數即可。

2013/03/31

Remote Desktop 和 Desktop Sharing

這兩個應用很接近,不小心就會混淆。

Remote Desktop 是遠端桌面。也就是在某 PC 上登入並獨自擁有一份遠端主機的桌面,就像你用本地的螢幕鍵盤來登入和操控本地主機的桌面一樣。譬如,你家裡電腦開著,然後在辦公室連回家裡,看到的是和在家裡時一樣的登入畫面。從登入、操作到登出,這個 session 都是你自己在進行。一台主機,通常允許建立很多的遠端桌面,大家各作各的,不會有衝突。

Desktop Sharing 則是桌面分享。也就是你已經登入某一台主機之後,開放權限讓遠端另一個人也可以看到或操作你的桌面。通常這是為了解決某些問題,譬如你不會安裝某個軟體,請遠端的朋友代勞。桌面只有一份,所以要先講好某個時間由誰操作,不然會亂成一團。

Ubuntu 上的 Remote Desktop,server 端可以安裝 xrdp/vnc4server (背景執行),client 則用 tsclient/rdesktop (應用程式 > 網際網路 > 終端伺服器客戶端)。

Ubuntu 上的 Desktop Sharing,server 端可以用 vino-server (系統 > 設定 > 遠端桌面),client 則用 vingare (應用程式 > 網際網路 > 遠端桌面檢視器)。