Wednesday, December 06, 2006

Visual C++ 命令列連結參數

Visual C++ 命令列連結方式:

cl foo.obj main.obj /link /libpath:"lib" libc.lib xxx.lib

Sunday, November 05, 2006

Fedora Core 6 安裝記錄

之前對 FC5 的印象還不差,就想說試試新版怎麼樣。 安裝過程比上次順利多了,光碟丟進去按個幾下滑鼠,重新開機就搞定了。

比較意外的是中文輸入法換成 scim,結果在 Firefox 和 gnome-terminal 都是打幾個字就整個視窗掛掉。更新套件以後就好了,不過更新的速度還是很慢。 而和 FC5 一樣,不管是圖形套件管理程式還是 yum,速度都不如 apt; 最不滿意的是 yum 只能執行一個,不能一邊裝程式一邊找套件。

其他設定好像都差不多。沒辦法試 compiz,大概是沒裝 nvidia 驅動程式。 找了幾個 rpm 裝起來也沒用,就自己重編 kernel;直接用系統的 config, 結果吃了 900M 沒空間編不好。然後就覺得很麻煩,繼續擁抱 Debian; 結論是我的第一個 linux distribution 還是沒辦法吸引我回頭。

Thursday, November 02, 2006

其實用 HTML 打報告也不慢

Open Office 沒辦法切換到 gcin,所以開 vim 用 HTML 格式寫報告, 其實也只用到 h1, h2, p 這幾個標籤。寫完以後從 Firefox 貼到 Open Office, 改一下類別的字型行距就好了。

相較於慢慢調 CSS 的格式,或者一邊寫一邊弄格式,這樣子做報告好像沒有比較慢。 或許是因為沒有圖表吧。

Wednesday, October 18, 2006

修改 Firefox 的選單列性質

對 gtk2 來說 menubar 和 toolbar 是不一樣的,所以某些佈景主題為兩者設計不同的樣式。 但是對 Firefox 選單列也可以放各種工具列元件,所以我想用同樣的 style。 下面這個 xul 是用 HideMenubar 改的,原作者是 yuoo2k,原本只是用來隱藏選單列的。 我這個修改還可以讓選單列樣式和工具列一致。

<?xml version="1.0"?>

<!DOCTYPE overlay SYSTEM "chrome://hidemenubar/locale/hidemenubar.dtd">

<overlay id="hideMenubarOverlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

<!--
<script type="application/x-javascript">
<![CDATA[
try { eval("onViewToolbarsPopupShowing" + "=" + eval("onViewToolbarsPopupShowing").toString().replace('&& type != "menubar"', "")); }catch(e){}
]]>
</script>
-->

<toolbar id="toolbar-menubar" type=""
         toolbarname="&menubarCmd.label;"
         accesskey="&menubarCmd.accesskey;"/>

<statusbarpanel id="statusbar-display"
         context="toolbar-context-menu"/>

</overlay>

Thursday, September 21, 2006

Lynx Google 出現 "Bad Request"

用 lynx 上 Google 出現 "Bad Request" 和 "Your client has issued a malformed or illegal request." 的訊息。之前也碰過一次,不過忘了怎麼解,只好再 google 一次。

Dave O'Neill 完整的解釋了怎麼找出這個問題,以及解決的辦法。 首先透過 strace 找到 lynx 送出的 http header,發現內容很長,可能超過了某 RFC 規格的長度, 所以 Google 傳回 "Bad Request"。而 header 會過長的原因是 "Accept:" 太多 MIME-types,這些是從 /etc/mailcap 讀進來的。 傳統上 mailcap 用來顯示非文字訊息,許多程式會修改。

所以解決方法是把 /etc/mailcap 複製一份,去掉多餘項目, 然後修改 lynx.cfgGLOBAL_MAILCAP 這一項,指到新的 mailcap 就可以了。

另外似乎 /etc/mime.types 也有影響,不是很確定。

Friday, September 15, 2006

Tools in CHM lib

CHM lib 是很多 chm 瀏覽程式實際處理 chm 的工具,像是 xchm, gnochm, kchmviewer。 不過 lib 本身就提供了 chm_http,可以透過任意瀏覽器閱讀 chm 檔案, 很符合工具組合的概念。

# 透過 web server 把 chm 檔案轉成 HTML 格式,不需要解開檔案
# 執行後可用任意 html browser 讀取 localhost:8080
chm_http [--port=PORT] CHMFILE

# 解開 chm 檔案
extract_chmLib CHMFILE DIR

# 列出 chm 檔案內容
enumdir_chmLib CHMFILE

參考資料:

Wednesday, September 13, 2006

"Your About Page Is a Robot" 讀後感

原文是 Erin Kissane 寫的 Your About Page Is a Robot,裡面大部份的論點都是以商業網站為出發, 不過有些看法對個人網站也適用。

首先作者提到在商業網站上,一個好的 About 可以加速客戶瞭解公司的服務, 也就可以減少解說服務內容的成本。因此 About 是很重要的。 然後找了幾個商業網站做為錯誤示範,強調版面要一致,內容要言之有物但還要有用, 尤其不能用法律條文堆砌。

然後內容的重點在於為始用者設想,思考使用者的需求。 就算整個站都是技術性的內容, About 的內容也要講究寫作技巧。 這是原文:

A natural, friendly, confident writing voice does much to humanize your site, and the About page is an ideal place to demonstrate great writing skills, even if the rest of your site needs to be quite technical.

或許,這些重點不只可以用在商業網站、個人網站,甚至向別人介紹自己的時候也該如此。

Monday, September 11, 2006

ImageMagick 筆記

重疊兩張圖,包含透明的部份用 composite。當然 -fx 也行,變化更多也更不容易控制:

convert background.png overlay.png -composite composite.png

畫圖指令:

# 輸出文字
convert -size 50x15 xc:transparent -fill red   -draw 'text 0,15 "Hello"' hello.png

# 設定字型
convert -size 50x15 xc:transparent -fill red   -font [name|path] -draw 'text 0,15 "Hello"' hello.png

# 畫出幾何圖形
convert -size 100x80 xc:transparent   -fill yellow -stroke black -strokewidth 3   -draw 'point 10,1 rectangle 10,20 70,40'   -draw 'circle 100,80 70,40 ellipse 60,70 30,10 180,720'   draw-commands.png

# 多邊形、線條
convert -size 100x40 xc:transparent   -draw 'line 1,1 50,3 polyline 25,30 40,10 20,0'   -draw 'polygon 45,30 60,10 40,0 bezier 65,30 80,10 60,0'   lines.png

還有一些要注意的,像是對透明圖作 -fx 處理通常要加上 +matte 才不會把透明度破壞掉。另外我用 -draw 沒辦法畫出中文字,指定 -encoding-font 也是一樣, big5 是亂碼 unicode 是空白。

ImageMagick 使用

ImageMagick 很有趣,全用 command line 作圖形處理。不像 Gimp 想要什麼效果直接滑鼠點就行, 還要看 manual,但是 ImageMagick 搭配 script 非常方便,習慣以後應該能比用 Gimp 更快。

顏色的指定:

name (identify -list color to see names)
#RGB (R,G,B are hex numbers, 4 bits each)
#RRGGBB (8 bits each)
#RRRGGGBBB (12 bits each)
#RRRRGGGGBBBB (16 bits each)
#RGBA (4 bits each)
#RRGGBBAA (8 bits each)
#RRRGGGBBBAAA (12 bits each)
#RRRRGGGGBBBBAAAA (16 bits each)
rgb(r,g,b) (r,g,b are decimal numbers)
rgba(r,g,b,a) (r,g,b,a are decimal numbers)

幾個 convert 的製作背景指令:

# 建立單色背景
convert -size 20x30 xc:"#007" navy-blue.png

# 建立漸層
convert -size 5x30 gradient:"#DD0"-"#4A0" yellow-green.png

# tile (貼磁磚?)
convert -size 300x20 tile:yellow-green.png green-bar.png

然後對現有的圖做基本的處理:

# 把兩張圖上下合併
convert top.png down.png -append top-down.png

# 左右合併
convert left.png right.png +append left-right.png

# 旋轉
convert yellow-green.png -rotate 90 rotate.png

# 切割
convert green-bar.png -crop 1x20+0+0 green-bar-tile.png

# 縮放分成幾種,這是保持比例
convert green-bar-tile.png -resize 20x40 resize.png

# 強制縮放,不保持比例
convert green-bar-tile.png -resize 20x40! resize.png

# 直接取樣 (sample)
convert -size 5x5 gradient:red -sample 100 sample.png

關於合併使用指令, ImageMagick 6 以後完全按照指令的順序執行。比如:

# 產生左紅右藍的正方形
convert -size 40x20 xc:blue xc:red -append -rotate 90   append-rotate.png

# 使用括號,需要 escaped
convert \( -size 20x40 gradient:blue-navy -rotate 90 \)   \( -size 40x20 gradient:blue-navy \) -append two-gradients.png

最神奇的調色指令 -fx,可以做到各種調色效果,很多連想都沒想過。 下面是說明。

apply a mathematical expression an image or image channels.

For example, to extract the matte channel of the image (this is the negative to what is commonly thought of as the alpha channel mask of the image), use:

convert drawn.png -fx 'a' +matte matte.png

Mathematic operators include.

constants: QuantumRange, Opaque, Transparent, Pi
  standard operators (in order of precedence):
      ^ (power), *, /, % (modulo), +, -, <, >, =,
      & (binary AND), | (binary OR), : (binary XOR) 
  math function name:
      abs(), acos(), asin(), atan(), ceil(), cos(), exp(),
      floor(), log(), ln(), max(), min(), rand(), sign(),
      sin(), sqrt(),  tan()
  color names: red, cyan, black, etc
  symbols:
      u  = first image in sequence
      v  = second image in sequence
      i  = column offset
      j  = row offset
      p  = pixel to use (absolute or relative to current pixel)
      w  = width of this image
      h  = height of this image
      r  = red value (from RGBA), of a specific or current pixel
      g  = green   ''
      b  = blue    ''
      a  = alpha   ''
      c  = cyan value of CMYK color of pixel
      y  = yellow    ''
      m  = magenta   ''
      k  = black     ''
      intensity = pixel intensity
      luminosity = pixel luminosity

這裡隨意舉幾個例子, ImageMagick Examples 還有更多、更妙的用法。 這裡第一個上黑下白的漸層是做為範例圖片使用。

# 調整色調,配合 -channel 使用
convert -size 10x20 gradient:black -channel red -fx 'r*1.5'   -channel green -fx 'g*2' color-balence.png

# 顏色代換,如果做出好的漸層效果會很棒
convert -size 10x20 gradient:black -size 1x50 gradient:blue    -fx'v.p{0,u*v.h}' deep-color.png

# 單純上色,看起來是上面的相反,但實際上不一樣
convert -size 10x20 gradient:black -size 1x1 xc:"#66A"   -fx 'u*v.p{0,0}' colorize.png

參考資料

Monday, September 04, 2006

Fedora Core 5 安裝記錄

Fedora Core 5 也不新了,不過今天無聊就抓來裝了。我已經不是第一次裝 linux 了,以前也用過 Red Hat 9 ,不過今天花了不少時間,就記錄一下吧。

我是光碟開機以後從硬碟裡的 CD image 安裝,設完分割區就隨便選幾個程式裝。 因為安裝程式不認識原本的 GRUB ,會把我原本的 menu.lst 洗掉,所以我沒重裝 GRUB ,自己設 GRUB 指令開機。 然後重開機出現 fsck 的錯誤,說 hday 不是正確的 ext3 格式;可是我系統 root 在 hdax, hday 是 reiserfs 當然不對啊!這時候以為是我自己設 GRUB 開機參數設錯才會發生問題,所以又灌了一次。重開以後出現 kernel panic,更慘; 看錯誤訊息說是 hday 無法 mount, "can't find ext3 filesystem...."。

又是 hday,新系統的 root 是 hdax 啊!看開機參數,原來 root=LABEL=/,從以前 RH9 就是這樣設,可是在我的系統上這個 label 是 hday 在用!改用 root=/dev/hdax 的方式, kernel 可以順利啟動,然後到執行 fsck 出現一開始的錯誤, 要我進入單人模式修正。這時候我還以為第一次安裝會對其他分割區執行 fsck, 而這個新系統只是沒有 fsck.reiserfs 所以出錯,就從 debian chroot 進去裝。 當然還是不行。我不想管了,直接到 /etc/rc.sysinit 改 fsck 的 return code 為 0,就是強迫繼續執行開機工作。

然後設了一些個人帳號的東西,才進入 GDM 和 GNOME。 Clearlooks 整體的藍色真是好看,和預設桌布很協調,比以前的 Bluecurve 鮮豔多了。 然後裝中文軟體, gcin 和(文鼎?)字型都不用自己選,連以前很討厭的中文小字 antialias 也都設好關掉,中文粗體也沒問題。也許我太久沒接觸新的 linux 套件了, 不過這些改進真的令人印象深刻。其他就都只是 preferences 的問題, 像是把 panel 拉成習慣的樣子,改 terminal 的顏色等,可以說幾乎不用設定。 當然「邪惡的」 xmms 和 mplayer 還是要自己想辦法,我只是玩玩就懶得裝了。 還有 FC5 在 GNOME 選單的 suspend 可以用了。

過程中 chroot 到 FC5 底下,把 reiserfs module 加入 initrd 裡, 可以用 FC5 的 kernel 開進 hday 的 debian 系統,也就是大概只要那幾個 modules 就夠了。