唉... 可能寫筆記不夠用心,竟然跟上時代潮流放起無薪假來了。趁著悠閒,上網看看 Firefox 有什麼新鮮的外掛程式可用,發現 PDFescape 是蠻有意思的服務。
裝上這個 extension 之後,你可以將網路上的 PDF 文件送到 http://www.pdfescape.com 作線上編輯,如:用空白蓋掉原有的內容、加上新的文字和簡易的方圓等圖形,甚至可以加上文字輸入方塊和 checkbox 等。等改好之後,就可以下載這份修改過的文件。
我想到一個使用場合。有時我們必須下載 PDF 格式的表格,印出、填寫然後拿去申請任何東東。有了這服務,寫字難看的我就可以先加工過再印出來,頂多留下簽名欄位就可以了。
我承認用到的場合不多,所以我不會安裝這個 extension。因此隨手記下,以備將來之需...
2009/01/15
2009/01/13
使用 vim 和 cscope 來 trace 程式碼
Vim 是個很實用的程式編寫工具,不過一開始需要花點心力走過學習曲線。有興趣的人可以在網路上找找學習教材;如果你已經有點基礎但記不清按鍵,以下這個網址提供相當有系統的整理,依照功能分成七個自學課程,很值得一看:
除了編寫程式,Vim 用來追溯程式 (trace code) 也相當好用。例如,先將游標移到程式的某個文字串,再按以下按鍵:
除了編寫程式,Vim 用來追溯程式 (trace code) 也相當好用。例如,先將游標移到程式的某個文字串,再按以下按鍵:
- '*' 往前找出此文字串 (按 n、N 繼續找)
- '#' 往後找出此文字串 (按 n、N 繼續找)
- 'gd' 將此文字串視為 local 變數,找到定義此 local 變數的地方 (如果有的話)
- '%' 找到被配的括號
- '[[' 找到函數的開頭
- ']]' 找到下一個函數的開頭
- 's': 即 Symbol,以此文字串當識別字,列出專案當中所有參考到此識別字的地方,包含定義和引用
- 'g': 即 Global,以此文字串當作 global 變數或函數的名稱,跳到專案中定義此 global 變數或函數的地方 (這個功能有另一個與 ctags 相同的快速鍵 Ctrl-])
- 'c': 即 Calls,以此文字串當函數名稱,找出所有呼叫到的此函數的函數
- 't': 即 Text,列出專案中所有出現此文字串的地方 (包含註解)
- 'e': 即 Egrep,以此文字串當 regular expression,用 egrep 方式來搜尋
- 'f': 即 File,以此文字串當檔案名稱,開啟此檔案
- 'i': 即 Includes,以此文字串當 header 檔名稱,列出所有 include 此檔案的檔案
- 'd': 即 calleD,以此文字串當函數名稱,列出此函數所呼叫到的函數
- :cscope find symbol foo
- :cs f s foo
sudo apt-get install cscope建立及更新軟體專案 cscope 資料庫的簡單方法如下 (其他更複雜的用法請參考 http://cscope.sourceforge.net):
mkdir -p ~/.vim/plugin
cd ~/.vim/plugin
wget http://cscope.sourceforge.net/cscope_maps.vim
cd PROJECT
cscope -bR
2009/01/07
Ubuntu 存放 icon 的位置
這絕對是一件小事,但每次都記不得,所以決定寫下來:Ubuntu 存放 icon 的主要目錄是 /usr/share/pixmaps。當你在面板上加入自訂的程式啟動圖示時,常常會需要到這個目錄找應用程式的圖示。
2008/12/29
Vim 建議的四種 TAB 字元處理方式
Vim 的 help 建議四種 TAB 字元處理方式:
但是有一個例外:Makefile。Makefile 的 TAB 字元是有意義的,不可用空白取代,所以 modeline 應該設為:
- 將 'tabstop' 固定設為 8;'softtabstop' 和 'shiftwidth' 設為 4 (或其他你所喜好的縮排長度);然後指定 'noexpandtab'。這樣,vim 在處理檔案的時候會視需求自動混用 TAB 和空白字元,但你按 TAB 或 BS 鍵時,都會以 4 格 (或你喜好的縮排長度) 來移動。
- 將 'tabstop' 和 'shiftwidth' 設成你所喜好的縮排長度,然後設定 'expandtab'。這樣,你編輯的檔案將不會有任何 TAB 字元。以其他編輯器來看時,縮排不會受到 TAB 設定不同的影響。
- 將 'tabstop' 和 'shiftwidth' 設成你所喜好的縮排長度,然後將此設定以 modeline 的方式寫在檔案之中。這樣,只要使用 vim 而且 modeline 有開啟的話,大家看到的樣子都會一致。
- 將 'tabstop' 和 'shiftwidth' 設成相同的值,然後設 'noexpandtab'。這樣,即使別人的設定不一樣,看起來也只是縮排程度不同,結構上是沒有問題的。不過,你只能在每一行的開頭使用 TAB 字元,其他地方的 TAB 字元可能會因縮排長度的不同而破壞原來的排版 (例如:原本對齊的 C 常數定義變沒有對齊)。
vim: set et ts=4 sw=4:嵌入 modeline 設定不單純只給 vim 看,而是當作一種宣告:本文件的縮排為四格而且以空白展開 TAB,希望修改文件的人都能遵循這個慣例。
但是有一個例外:Makefile。Makefile 的 TAB 字元是有意義的,不可用空白取代,所以 modeline 應該設為:
vim: set noet ts=8 sw=8:另外,我也建議 ~/.vimrc 要有如下的設定:
set smarttab這樣寫程式會比較方便。
set autoindent
2008/12/28
Vim 的 modeline
有團隊合作寫程式經驗的人,應該能夠了解共同的 coding style 是非常重要的。先不管 if-else、for、while 之類的述句該怎麼編排,至少縮排幾格、tab 如何處理一定要統一。否則一個 source code 經過幾個人 (其實是編輯器) 的修改,可能會變得不成人形。
問題出在不同的編輯器對 tab 可以有不同的處理方式:對齊四或八格?要不要展開成空白?若編輯器的設定不同,甲看起來漂漂亮亮的排版,在乙那邊可能是歪七扭八的。
Vim 的 modeline 提供一個方便的解法:在 source code 當中就可以指定編輯設定,包含此檔案的 tab 應該要如何解讀。
Modeline 是藏在文件開頭或末尾幾行的特殊格式字串,vim 讀取文件時若發現這些字串便會修正自身的設定。在程式當中,通常是寫在註解裡頭。例如:
參考資料:
問題出在不同的編輯器對 tab 可以有不同的處理方式:對齊四或八格?要不要展開成空白?若編輯器的設定不同,甲看起來漂漂亮亮的排版,在乙那邊可能是歪七扭八的。
Vim 的 modeline 提供一個方便的解法:在 source code 當中就可以指定編輯設定,包含此檔案的 tab 應該要如何解讀。
Modeline 是藏在文件開頭或末尾幾行的特殊格式字串,vim 讀取文件時若發現這些字串便會修正自身的設定。在程式當中,通常是寫在註解裡頭。例如:
// vim: ts=4 sw=4 et這是 modeline 的第一種寫法。vim: 標記特殊字串的開頭,結尾則是本行結束。特殊字串當中以空白或「:」隔開各個設定項目。利用這種方式,後面不可有其他任何字元,所以,若是用 C 的註解符號必須寫成:
/* vim: ts=4 sw=4 et第二種寫法同樣以 vim: 標記特殊字串的開始,但之後必須跟著一個 set。下一個「:」代表特殊字串的結束,之後可以有其他文字。例如以下用於 Python 的範例,同一行除了包含 vim modeline 之外,也包含 Pyhton 指定 source code encoding 的寫法:
*/
# vim: set ts=4 sw=4 et: -*- coding: utf-8 -*-個人推薦這種寫法,因為 vim 的 modeline 處理並非強制的,有些 Linux distro 的 vim 預設值將 modeline 關閉;也有些人有安全顧慮,不想開啟 modeline。遇到此情況,我們可以直接剪貼兩個冒號之間的字串即可複製該設定。若要啟用或關閉 modeline 功能可以編輯 ~/.vimrc:
set modeline第一行是啟用 modeline;第二行是將搜尋 modeline 的範圍設定為文件開頭和末尾各兩行,若省略則預設為五行。
set modelines=2
參考資料:
- 在 vim 執行「:help modeline」及「:help modelines」
- http://vim.wikia.com/wiki/Modeline_magic
- http://www.google.com/search?q=vim+modeline+vulnerability
2008/12/24
VirtualBox 2.1.0 的 Host Interface Networking
使用 VirtualBox 的 Host Interface Networking 的好處是:可以省掉 NAT 型態設定 port forwarding 的麻煩;缺點則是要多一點設定的工作。但是 VirtualBox 2.1.0 版針對此部份有大幅的改進,只要從 GUI 點選 Host Interface,再從選單選出 host 主機的網路介面即可。請參考:
2008/11/25
coLinux: 讓 Linux 在 Windows 上跳舞
需要同時使用 Windows 和 Linux 的人,除了可以在 Windows 上用 VirtualBox 或 VMware 等跑 Linux 的 virtual machine 外,還有另一個選擇:Cooperative Linux。
Cooperative Linux 簡稱 coLinux,是 Windows device drivers 加上搭配的 Linux kernel modules 所形成的組合。透過這個組合,原生的 Linux 系統可以和 Windows 共用硬體資源。你可以想像 coLinux 是將 Linux 系統當成 Windows 的應用程式來執行。據說任何 GNU/Linux 的 distro 都可跑,不過要稍微調整過。比較簡單的方法是安裝 coLinux 時,直接挑選他們準備好的 distro。
和使用 virtual machine 的方式來比,coLinux 有幾個缺點:
Cooperative Linux 簡稱 coLinux,是 Windows device drivers 加上搭配的 Linux kernel modules 所形成的組合。透過這個組合,原生的 Linux 系統可以和 Windows 共用硬體資源。你可以想像 coLinux 是將 Linux 系統當成 Windows 的應用程式來執行。據說任何 GNU/Linux 的 distro 都可跑,不過要稍微調整過。比較簡單的方法是安裝 coLinux 時,直接挑選他們準備好的 distro。
和使用 virtual machine 的方式來比,coLinux 有幾個缺點:
- 穩定性。coLinux 以最高權限的方式和 Windows 共用資源,萬一有甚麼問題,整個 Windows 系統都有可能受到影響。
- 安全性。在 Linux 系統上取得 root 權限,就有可能也取得 Windows 系統的管理者權限。
- coLinux 目前還無法共用繪圖硬體,因此不能在 coLinux 上跑 X server (不過可以在 Windows 上跑 X server)。
訂閱:
文章 (Atom)
