Sunday, November 18, 2007

這本書的目標讀者

1.3 Who should read this book / 這本書的目標讀者

Revealing the mystery around the GNU Autotools is likely to raise the interest of a wide audience of software developers, system administrators and technical managers.

本書旨在揭開 GNU Autotools 背後運作原理的神祕面紗,我們相信這將會引起不少的軟體發展者、系統管理員,以及技術經理的興趣。

Software developers, especially those involved with free software projects, will find it valuable to understand how to use these tools. The GNU Autotools are enjoying growing popularity in the free software community. Developers of in-house projects can reap the same benefits by using these tools.

對軟體發展者來說,特別是有參與自由軟體專案的發展者,他們將會發現了解如何使用 Autotools 是非常有用的。隨著加入自由軟體社群的發展者增加,使用 GNU Autotools 的發展者也日益增加。對於為私人機構或公司執行專案的發展者,他們也可以在他們的專案中使用 Autotools 並從中得到一些益處。

System administrators can benefit from a working knowledge of these tools -- a common task for system administrators is to compile and install packages which commonly use the GNU Autotools framework. Occasionally, a feature test may produce a false result, leading to a compilation error or a misbehaving program. Some hacking is usually sufficient to get the package to compile, but knowing the correct way to fix the problem can assist the package maintainer.

系統管理員也可以從了解這些工具如何運作中得到益處 -- 有很多的軟體套件使用了 Autotools 作為建置框架,而編譯與安裝軟體套件恰巧是系統管理員經常要進行的工作。有時候,進行作業環境偵測時會發生錯誤,並導致編譯失敗,或是程式的不正常運作。雖然一些鋸箭療法般的處置通常已足以讓軟體正常編譯,但是了解正確的修正方式可以幫助套件的維護者在上游直接修復套件中的錯誤。

Finally, technical managers may find the discussion to be an insight into the complex nature of software portability and the process of building a large project.

最後,本書對於軟體可攜性以及大型專案建置面臨的複雜問題的討論,也能讓技術經理從中得到一些心得。

這本書未涵蓋到的範圍

1.2 What the book is not / 這本書未涵蓋到的範圍

This book is not a definitive reference to Autoconf, Automake or Libtool. Attempting to do so would fill this book with information that is doomed to obsolescence. For instance, you will not find a description of every predefined macro provided by Autoconf. Instead, the book will attempt to help you understand any macro you encounter and, instead, influence how you approach software portability and package building. The GNU manual for each tool should be consulted as a reference.

這本書並不是 Autoconf, Automake 或 Libtool 的完整使用手冊,如果把所有功能都寫入這本書的話,那麼這本書將會充滿一些即將過時的資訊。換言之,你不會在這本書中找到所有 Autoconf 預先定義好的巨集,然而,這本書會試著協助你理解你所碰到的任何巨集,並指引你一個增進軟體可攜性的方向。當你需要這些工具的完整參考手冊時,可以參考各工具的 GNU 手冊。

This book briefly introduces pertinent concepts, but does not attempt to teach them comprehensively. You will find an introduction to writing `Makefile's and Bourne shell scripts, but you should consult other references to become familiar with these broader topics.

對於一些相關的工具,這本書會簡單的介紹他們的使用概念,但不會很詳細並完整的解釋他們。比如說,你可以在這本書中找到撰寫 `Makefile' 或是 Bourne shell 指令稿的初步介紹,但當你想要對這些主題更了解,你就得要閱讀其他專門討論這些工具的參考文件。

Friday, November 16, 2007

這本書所討論的範圍

1.1 What this book is / 這本書所討論的範圍

This book is a tutorial for Autoconf, Automake and Libtool, hereafter referred to as the GNU Autotools. The GNU manuals that accompany each tools adequately document each tool in isolation. Until now, there has not been a guide that has described how these tools work together.

這本書是 Autoconf, Automake 以及 Libtool 的入門書,這三個工具軟體在本書會以 GNU Autools 稱之。雖然這些工具的用法已經在隨附的 GNU 使用手冊中已充分的記載,但在手冊中這幾件工具是被分開討論的。直到本書撰寫前,都沒有一個使用指引描述這些工具要如何一起使用這些工具。

As these tools have evolved over the years, design decisions have been made by contributors who clearly understand the associated problems, but little documentation exists that captures why things are the way they are. By way of example, one might wonder why some Autoconf macros use shell constructs like:

隨著這些工具的發展,有很多了解所有關連問題的工程師做出設計決策,並貢獻出程式碼。然而,卻只有很少量的文件描述這些設計決策的來龍去脈。比如說,可能有人會好奇,為什麼有些 Autoconf 的巨集使用下面的 shell script 寫法:

if test "x$var" = xbar; then echo yes 1>&5 fi

instead of the simpler:

而不用較精簡的:

if [ $var = bar ]; then echo yes 1>&5 fi

Much of this reasoning is recorded in this book.

有很多這類決策的來龍去脈,都記錄在這本書中。

Thursday, November 15, 2007

序曲

1. Introduction / 序曲

Autoconf, Automake and Libtool are packages for making your software more portable and to simplify building it--usually on someone else's system. Software portability and effective build systems are crucial aspects of modern software engineering practice. It is unlikely that a software project would be started today with the expectation that the software would run on only one platform. Hardware constraints may change the choice of platform, new customers with different kinds of systems may emerge or your vendor might introduce incompatible changes in newer versions of their operating system. In addition, tools that make building software easier and less error prone are valuable.

Autoconf, Automake 以及 Libtool 是用來讓你所開發的軟體能更具可攜性,且更容易在別人的電腦系統上編譯的工具套件。近年來,軟體的可攜性與有效率的編譯與建置系統在近代軟體工程實務上漸漸佔有重要的一席之地。因為種種原因,在現在很少有軟體開發專案會在開始時就決定只支援單一平台。比如說: 硬體的限制可能會影響平台的選擇,使用不同系統平台的客戶可能會出現,或是您的作業系統軟體供應商可能會做出與舊系統不相容的變更。除此之外,能夠簡化並減少軟體編譯建置之流程與錯誤的工具是相當有價值的。

Autoconf is a tool that makes your packages more portable by performing tests to discover system characteristics before the package is compiled. Your source code can then adapt to these differences.

Autoconf 是一個可以讓你的軟體更具可攜性的工具,他會在編譯前執行一序列測試程式找出系統所安裝軟體的狀況,你的程式碼可以據此在不同的系統之間調適。

Automake is a tool for generating `Makefile's--descriptions of what to build--that conform to a number of standards. Automake substantially simplifies the process of describing the organization of a package and performs additional functions such as dependency tracking between source files.

Automake 是一個用來產生 `Makefile' -- 指出有哪些東西要編譯或建置的描述檔 -- 的工具。利用 Automake 可以大幅的簡化描述要建置套件內容的流程,並且可以提供一些額外的功能,如: 原始碼間的相依性檢查等等。

Libtool is a command line interface to the compiler and linker that makes it easy to portably generate static and shared libraries, regardless of the platform it is running on.

Libtool 是一個包裝了編譯器鏈結器的命令列程式,這個工具可以為你產生靜態連結或動態連結的函式庫,你完全不用在意進行建置作業的系統平台到底是哪個。

AB 試譯

之前就想譯看看,不過半途而廢了。主要是想說弄個好用的工具,不過寫工具實在是挺辛苦的,而且前置作業太多要做了。

這次主要是可能會用到,算是比較急吧!所以想到直接放在 Blog 上。向後相容的部份,會使用 xml:lang 以及 div-tag 來作。版本管理就比較沒辦法了,只能以後再看看,剛好這本書已經差不多 freeze 了,所以這相對不是太大的問題。

樣式方面,會用 overflow: scroll; white-space: pre; 來處理 code 的呈現。


  1. Introduction / 序曲
    1. What this book is / 這本書所討論的範圍
    2. What the book is not / 這本書未涵蓋到的範圍
    3. Who should read this book / 這本書的目標讀者
    4. How this book is organized / 本書的組織方式
  2. History / 發展歷史
    1. The Diversity of Unix Systems / Unix 系統間的歧異
    2. The First Configure Programs / 最初的 configure 程式
    3. Configure Development / Configure 的發展
    4. Automake Development / Automake 的發展
    5. Libtool Development / Libtool 的發展
    6. Microsoft Windows / Microsoft Windows
  3. How to run configure and make / 如何執行 configure 與 make
    1. Configuring / 進行組態
    2. Files generated by configure / 由 configure 所產生的檔案
    3. The most useful Makefile targets / 常用的 Makefile 建置目標

Safari 3

透過 Software Update 取得了,這應該也表示已經正式釋出了。

在 JavaScript 上的支援度看來是有提高,存取 Gmail 也可以得到與 Firefox 一樣的界面,也可以用內嵌的 Web-based Google Talk 了。

個人是特別期待整合所有視窗的功能,一堆視窗實在是頗不好用的。應該是因為我已經習慣了 Firefox 吧!

Saturday, November 10, 2007

除去文件每行首尾空白的指令

從網頁,或是某些在每行前加了空白的 BBS Post 上貼文章到記事本前,可以用這個指令來把因為格式轉換等造成的前置與後置空白去除。

perl -e 'while($l = ) { $l =~ s/^\s+//; $l =~ s/\s+$//; print "$l\n"; }'

資料直接丟到 STDIN 就好了,輸出會從 STDOUT 出來。對長文章比較方便的用法可能是 redirect 到檔案裡再開吧!

Sunday, November 04, 2007

設定 eclipse 的語系

主要是 subclipse 的問題,因為 subclipse 有中文語系檔,所以他就會盡可能的顯示語平台相符的語言。

不幸的是 eclipse 沒有中文語系檔,所以用起來就很怪,關於 SVN 的部份就有中文。更慘的是,看到經常會反應不太過來... 像是要 commit 還得找一下 orz|||

更新 fink 之中,順便找了一下 solution 看要怎麼處理比較適當,然後找到這篇

簡單講,除了把作業系統設成英文版之外,可以改 eclipse.ini 檔,或是在啟動的捷徑中加參數。要加進去的參數是:

-nl
en_US

Mac 上沒有什麼啟動捷徑,所以改 eclipse.ini 是比較單純點。要注意的是,改 eclipse.ini 的話得像上面寫成兩行,並且必須在 -Vm 選項之上。

其他設定可以參考 Eclipse 3.3 Help: Workbench User Guide / Tasks / Running Eclipse 的說明。

Saturday, October 20, 2007

Mozilla Firefox 2.0.0.8

總覺得更新到 2.0.0.7 沒幾天,程式又說要更新到 2.0.0.8 了。這次更新主要是 security 方面的修正,還算是挺重要的。

這就叫做,光陰似箭... 嗎?

Tuesday, September 04, 2007

無失真旋轉 JPEG 圖檔

就像大家知道的一樣,旋轉 JPEG 圖檔可以是無失真 (lossless) 的。

在 Linux 或是 Mac 或是 FreeBSD 上,可以用 libjpeg 附的 jpegtran 來處理。

指令就是 jpegtran -rotate 90 in.jpg > out.jpg

這個程式會把輸出往 STDOUT 倒,所以要取代原始檔案得另外自己刪除舊黨、改檔名。

在 Mac 下可以安裝 fink 的 libjpeg-bin 套件來取得 jpegtran 程式,或是不想裝 fink 的話,就得自己抓 libjpeg 來編譯了。

Friday, July 13, 2007

選字 → 查字典

以往都是把要查的字複製到字典網頁中,有點煩了,所以今天花了點時間希望能讓這個過程簡便一些。

就是這個: Yahoo!奇摩字典

不過我只有在 Firefox 上測試過就是,不知道其他瀏覽器上能不能用。

丟到 Bookmark Toolbar 上,瀏覽網頁時遇到要查的字只要選起來,然後按下這個 Bookmarklet 就會開啟新的視窗或是標籤頁,然後連到 Yahoo!奇摩字典去查詢要查的字。如果沒選字就按下這個 Bookmarklet 的話,就會直接在目前的視窗或標籤頁開啟 Yahoo!奇摩字典的首頁。

其實後來發現有不少一樣功能的東西別人已經寫好,內容其實差不多,動手前真是該先搜尋一下。

Wednesday, June 27, 2007

Google Docs 更新文件列表界面

今天下午大約四點多時發現的,可能剛好更新到我所在的主機,突然整個界面就變得不一樣,嚇我一大跳,還以為按到什麼東西。

更新之後的列表比較容易看到自己有什麼文件在手上,不過相對的似乎不是那麼容易把焦點集中在某些特定文件上。

另外就是似乎不會記住上次離開時的狀態,比如說所切換到的列表,或是 folder 的開啟或關閉狀態。

Tuesday, June 19, 2007

Preview 的用法

以前一直以為他不能在很多圖檔間捲動,原來其實是可以的!

動作就是先選擇要看的圖檔,類似漫畫之類的就直接 Cmd + A 全選,然後再 Double Click 就可以了。

旁邊會有抽屜拉出來,放置序列的縮圖,用 Cmd 搭配左右方向鍵可以在序列中前後移動。

Sunday, May 06, 2007

VideoLAN 0.8.6b

在 Mac OS X 上 VideoLAN 是 MPlayer 以外另一個內建 codec 的開放原始碼影音播放器,新的版本跟之前我在用的時候比起來已經有很大的改進。

現在比較不會 crash 掉了,然後使用者界面上也比較好用。

Friday, April 20, 2007

Thunderbird 2

終於正式發行了。

新功能大概就是來自 Gmail 跟 Spotlight 的提示吧!對我這種小量使用者差別其實不是很大,不過看起來對於要處理大量信件者應該會蠻有幫助的。

官方網站: http://www.mozilla.com/thunderbird/

Sunday, April 15, 2007

OpenOffice.org 2.2

一兩週前出了,主要是修正幾個安全問題,並且加強幾個元件的效率。

我自己是導入好一陣子了,沒什麼大問題,不過因為某種原因,現在主要是用 Calc 而已,不知道 Writer 狀況怎麼樣。

官方網站: http://www.openoffice.org/

Sunday, February 25, 2007

MPlayer 1.0rc1 OSX PPC 上 ASS/SSA 字幕

似乎是因為 QuickTime 的 codec 在實作上難度相當高,倒不是難做,而是資料很不齊全,所以目前在 OS X 上比較受到討論的播放程式還是以 MPlayerVideoLAN 為主。這點算是蠻虧的,在 Windows 上有很多 codec 可以選擇,並且有各種實作,搭上 Media Player Classic 所有影片幾乎都可以播的很快樂,但是在 OS X 上就比較沒那麼精彩了。

之前用過 VideoLAN 感覺不是很好用,而且似乎不太穩定。同期也用過一個從 MPlayer 分支出來的 MPlayerOSX 不過老實說也有點怪怪的,常會自己掛掉。

本來 MPlayer 官方對於 OS X 的支援似乎是慢上一個世代,不過不知道是不是 Apple 最近開始猛攻中價位市場的關係,使得機器現在比較流行了,軟體支援就開始比較多些。總之,現在官方版的 MPlayer 在 OS X 的支援上跟其他平台是差不多一樣。

進入正題,重點在於要開啟 Play list 手動將字幕檔掛上影片檔,然後得要勾選 Preference 對話框下的 Miscellaneous 標籤頁中的 Additional Parameters 這個選項,並加入 -ass 的參數。這樣就會將所掛上的字幕識別為 ASS/SSA 格式,並正常的顯示出來。

不過在掛上字幕的對話框中,不能直接從檔案瀏覽器中選取 *.ass 的字幕檔,這是比較麻煩的事情。

Wednesday, February 21, 2007

買電腦要考慮的事情

除非我自己要買東西,順路,不然現在不太幫人買電腦了。不過還是會碰到一些朋友說要買新電腦,找我幫忙開規格這樣,這時候問題就來了,要買什麼樣的機器呢?

我個人是認為,現在自己裝電腦的話,說穿了就只有兩種選擇: 準系統 vs. 巨大桌上型電腦

準系統的好處是體積小,因為主機板小的關係,通常電力也會比較省一點,另外多半是以成為家電為目標,所以工業設計上也會比較講究;壞處就是擴充性相對較差,另外也得特別慎選系統廠,因為體積小的關係,散熱設計就變的很重要。

巨大桌上型電腦是最傳統的選擇,一般而言,缺點是體積大,笨重;好處就是擴充性較容易掌控,只要買對機殼就好了。

基本上,巨大桌上型電腦是可以滿足所有的應用,但是,以一般應用而言,我個人是偏向使用準系統,因為在整合度與空間利用上,準系統真的是方便很多。

進入正題,什麼情況下會適合使用準系統,什麼情況下不適合使用準系統呢?如果預期的使用情形是下面幾種,那麼還蠻適合使用準系統的:

  • 主要是要用在上網路,處理文書、照片,看影片,聽音樂。
  • 不是重度的電腦遊戲使用者,而且不特別追求遊戲的聲光效果。
  • 不打算、不了解、不懂或是不會玩超頻之類動作。
  • 不喜歡拆裝電腦。
  • 前一台電腦使用超過兩年,期間不曾升級過中央處理器
  • 睡前通常會把電腦關掉

但是,如果你有下面幾項應用的話,那可能就不適合考慮使用準系統:

經常需要處理大量的影音資料
這比較會出現在剪接工作者上,因為準系統通常只能裝一臺內接式硬碟機,對剪接工作而言一台甚至兩台硬碟其實不太夠。
重度的 P2P 使用者
要用 P2P 的話,硬碟機也是內接兩台以上比較好。
經常的要玩 3D 遊戲
大多數的準系統可以接受額外的顯示卡,但是以 3D 遊戲而言,要一直保持在最佳效果的話,大概一年半就差不多得換不少東西,使用準系統的話可能不是很合算。
有一堆 PCI 卡要接
準系統大多數只有 1 到 2 條空的 PCI slot 可以使用。
需要 2G 以上的記憶體
準系統通常只有 2 條 DRAM 插槽,以目前比較平價的 1G 一條的記憶體模組而言,最多就是接到 2G 這樣。

基本上,主要就是差在是不是需要複數臺的內接式硬碟機,以及對升級的需求是不是非常頻繁。

準系統的素體會包含機殼、電源供應器以及主機版,如果要升級的話,一但要換到 CPU 那麼基本上準系統差不多就得整個換掉,因為換了 CPU 那麼通常主機版也得換了,而準系統的機殼跟板子通常是設計在一起的,所以機殼就得跟著換了。同時,電源供應器大多也會配合機殼設計,所以電源供應器也得換這樣。

以一般看電影、聽音樂、上網路的應用來講,主流的組態大概撐過 3 年應該不是問題,超過 3 年之後,零組件漸漸或多或少會開始出現老化所造成的毛病,速度可能也會不太趕的上當時的應用,這時候就算是巨大桌上型電腦,其實差不多也是除了機殼以外得整個換掉。

如果資料很重要的話,不論是什麼樣的電腦,都應該使用燒錄機或其他媒體備份重要資料出來。準系統的話也可以考慮買個外接式硬碟,資料量不多,或是只是暫時的要清出內接硬碟的空間時可以先堆在外接式硬碟上。

最後是預算上的問題,準系統一般來講會稍微貴一些,另外要添購外接硬碟的話,等級夠的外接盒的價位大概是在 2K ~ 4K 上下,對於預算很緊的人而言,準系統可能不是一個很好的選擇。

還有一些其他的問題,比如說外型夠不夠漂亮,規格是不是夠新,市場上的目前供貨狀況... 這就得自己跑賣場才有辦法了。

Tuesday, February 20, 2007

Firefox 微調

設定上跟之前大致一樣,就是:

config.trim_on_minimize = true (boolean)
讓 Firefox 在視窗最小化時進行記憶體回收。
editor.singleLine.pasteNewlines = 3 (integer)
決定在將多行的文字貼到只有單行的輸入元件上時,把所有換行字元去除後全部貼上,這樣從 BBS 之類的東西上貼網址會比較方便。
network.http.pipelining = true (boolean)

啟動 HTTP pipelining 功能,這樣可以比較有效率的使用伺服器的運算速度。如果有使用 proxy 的話,那就也得把 network.http.proxy.pipelining 也設成 true 才行。

這個選項有個關聯選項: network.http.pipelining.maxrequests 預設值被設定在整數 4 這個值,文件上看來可以設定的範圍是等同於關閉 http pipelining 的 1 到最大的 8 之間的整數,個人是覺得不需要動這個值。

不過要注意的是,在某些受防火牆保護的網路之下,這個選項會讓連線被防火牆視為不正常的而使連線被阻斷,如果設定上去之後覺得網頁反應變慢了,可以把這個選項關了試試看。

browser.tabs.tabMinWidth = 60 (integer)

修改 tab 的最小寬度,螢幕不大的話改窄一點可以一次看到比較多的 tab 在上面。

capability.policy.default.Location.hostname.set = "noAccess" (string)

這個是安全性修正,主要是處理對 DOM 不完善的安全處理導致 Java Script 可以把本機端整個 cookies 檔偷走的問題。如果習慣使用論壇的「記住密碼」之類的一段時間免登入功能,那會受到影響。

至於 extension 方面,我主要是使用下面幾個:

All-in-One Gestures Extension
使用滑鼠手勢來控制部分動作,上手之後使用瀏覽器會更流暢快速。
adblock
過濾掉部分不要的網站內容,主要是又佔畫面空間而且讀取又慢的廣告。有些網站會一直跳 pop-up 視窗也可以用這個把跳視窗的 script 濾掉,開視窗佔時間。
Download Statusbar
可以把下載進度顯示到瀏覽器主視窗下方處,取代原本另外開 Download Window 的方式。感覺上是比較明瞭下載狀況,而且也可以不用在一堆視窗間換來換去。
Right Encoding
把網頁語系編碼切換的選單加到右鍵選單中,這樣比較方便,而且可以針對單一頁框進行設定。
Show Picture
在網路比較繁忙時,如果有臨時連不上造成的破圖,可以直接點選破圖讓 Firefox 試圖重新讀圖,不用整個頁面重新整理。之前是用 Show Image 來達到一樣的目的,不過似乎這個比較強大一點,而且看來比較有在維護。
Tempomail
取得一個暫時性的 e-mail 轉址,主要是對付利用註冊資料廣告的網站。
SwitchProxy Tool
切換 proxy 的工具,對於常要在幾個 proxy server 間切換的人蠻有用的。一個應用的例子是學術網路存取學術資料庫,有些學校位了防止對國外資料庫使用過度多的頻寬,所以限制一定要透過圖書館連資料庫,這時候有這個工具就很有用了。
Stop Autoplay
顧名思義,還蠻有用的。
livehttpheaders
可以擷取 HTTP 的協定資訊,對於網站的偵錯偶而會有點幫助。另外就是可以看看網頁到底拉了些什麼亂七八糟的東西下來,寫 spider 時還蠻有幫助的。
PasswordMaker
對於不擅長記一堆密碼的人蠻有用的工具,不過還是要小心 master key 被發現就是了,萬一被抓到就全都爆破了。
Download Them All
下載管理員,不過對於瀏覽器狀態的整合度其實沒有非常好。
Greasemonkey
可以自己撰寫 script 來重新安排特定網頁的內容,不過其實我自己是不常用。
Force Content-Type
覆寫由伺服器傳來的 MIME 模式,用在對付一些把未知檔案格式都當成 text/plain 的網站。
Google Notebook
Google 提供的服務之一,看到有興趣的網頁內容可以隨手記起來。
User Agent Switcher
切換瀏覽器送出的自我識別字串,主要是對付一些自以為很聰明把一些功能僅對某些特定瀏覽器開放的網站。不過這也不是萬靈丹就是,像 ActiveX 在 Firefox 上就不被支援,這邊騙過去了也沒用。另外,有些網站不是靠自我識別字串辨識瀏覽器,對於這種網站就沒有用了。

Wednesday, February 07, 2007

VirtualDub 1.7.1

新增了一些奇奇怪怪的功能,目前主要的新功能與改進大多都集中在影像擷取上,檔案壓縮的部分看來是接近飽和了吧!

或者,已經有 AviSynth 可以配合,所以就不用做進去了。