2007年9月18日 星期二

Ruby CGI on Apache

前一陣子, 聽我老闆的建議, 開始試著去看一下Ruby這一個程式語言. 對於我這只會寫C, 沒有任何OO概念的人, 看到這樣一個純OO, 高階與的語言真的是令我眼花撩亂.
Ruby的書也看了一陣子, 也該開始用用看囉, 剛好最近在寫一個HTTP client, 需要一個Web server做測試.
所以就試著自己架一個Web server, Apache + Ruby (CGI).
如果讓Apache支援Ruby寫出來的CGI呢? 基本上需要安裝mod_ruby將Apache與Ruby結合在一起.

下面是在Ubuntu 7.04的安裝步驟.
1. 安裝Apache 2 (目前版本是2.2.3), Ruby (目前的版本是ruby 1.8.5) 和mod_ruby, 因為我們是安裝Apache2, 所以安裝libapache2-mod-ruby

apt-get install apache2
apt-get install ruby
apt-get install libapache2-mod-ruby


2. 設定Apache, 請編輯/etc/apache2/httpd.conf
安裝mod-ruby時已經加入的mod_ruby載入的設定, 所以不需額外設定.

/etc/apache2/mods-enable/ruby.load
/etc/apache2/mods-available/ruby.load


設定ruby CGI 目錄 (/var/www/ruby)和副檔名(*.rbx)

# ClearModuleList
# AddModule mod_ruby.c

<IfModule mod_ruby.c>
RubyRequire apache/ruby-run

# Execute files under /ruby as Ruby scripts
<Location /ruby>
SetHandler ruby-object
RubyHandler Apache::RubyRun.instance
</Location>

# Execute *.rbx files as Ruby scripts
<Files *.rbx>
SetHandler ruby-object
RubyHandler Apache::RubyRun.instance
</Files>
</IfModule>


3. 重新啟動Apaeche

sudo /etc/init.d/apache2 restart


4. 再來一個簡單的測試. 當然第一個CGI就是送出"Hello World" 到browser上面囉.

sudo mkdir /var/www/ruby
sudo vi hello.rbx


hello.rbx:

#!/usr/bin/ruby

require 'cgi'

# Create a cgi object, with HTML 4 generation methods.
cgi = CGI.new('html4')

# Ask the cgi object to send some text out to the browser.
cgi.out {
cgi.html {
cgi.body {
cgi.h1 { 'Hello World!' }
}
}
}


5. 一切都OK之後, 連到http://localhost/ruby/hello.rbx, 你就可以看到"Hello World!"

2007年9月4日 星期二

Ubuntu 7.04 中文字型美化

中文字型一直都是Linux上面的痛, 雖然有很多前輩, 在中文字型上面做了很多努力, 如文鼎中文字型, 螢火飛的OpenDesktop字型, 讓我們在有更好的中文環境.
但是, Linux是西方人開發的, 因為中文語系, 跟拉丁語系先天上的不一樣, 所以還是會有一些問題, 像是反鋸齒(anti alias)功能, 會使得中文糊糊的, 或者打開hinting, 會讓中文字斜斜的.
所以, 還是需要一些調教, 讓中文字型更美好.

1. 安裝OpenDesktop字型

wget ftp://ftp.opendesktop.org.tw/odp/ODOFonts/OpenFonts/opendesktop-fonts-1.4.2.tar.gz
tar xvzf opendesktop-fonts-1.4.2.tar.gz
cd opendesktop-fonts-1.4.2
sudo cp odosung.ttc odokai-ExtB.ttf odokai.ttf odosung-ExtB.ttf /usr/local/share/fonts
sudo fc-cache -v


2. 安裝MAC儷黑體字型
http://www.divshare.com/download/851866-386下載, password是"my-net.cc"


sudo cp Mac_Fonts/"LiHei ProPC.ttf" /usr/share/fonts/truetype/
sudo fc-cache -f -v


3. 系統-> 偏好設定-> 字型, 更換字型



4. 修改fconfig

sudo gedit /etc/fonts/conf.d/10-myfonts.conf



<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">

<!-- conf.d/myfont.conf -->
<fontconfig>

<dir>/usr/share/fonts</dir>
<dir>/usr/share/fonts/local</dir>
<dir>/usr/local/share/fonts</dir>
<dir>~/.fonts</dir>
<!--加入點陣字體路徑-->
<dir>/usr/X11R6/lib/X11/fonts</dir>

<!--所有字型預設樣式-->
<match target="font">
<edit name="antialias" mode="assign">
<bool>true</bool>
</edit>
<edit name="hinting" mode="assign">
<bool>false</bool>
</edit>
<edit name="autohint" mode="assign">
<bool>false</bool>
</edit>
</match>

<!--打開中文粗體-->
<match target="font">
<test name="family" compare="contains">
<string>宋</string>
<string>明</string>
<string>楷</string>
<string>Song</string>
<string>Sun</string>
<string>Kai</string>
<string>Ming</string>
</test>
<test compare="more_eq" target="pattern" name="weight">
<int>180</int>
</test>
<edit mode="assign" name="embolden">
<bool>true</bool>
</edit>
</match>

<!--關閉小字AA -->
<match target="font">
<test name="pixelsize" compare="less">
<double>12</double>
</test>
<edit name="antialias" mode="assign">
<bool>false</bool>
</edit>
</match>

<!--關閉宋體、明體小字AA -->
<match target="font">
<test name="family" compare="contains">
<string>Song</string>
<string>Sun</string>
<string>Ming</string>
</test>
<test name="pixelsize" compare="less_eq">
<double>20</double>
</test>
<edit name="antialias" mode="assign">
<bool>false</bool>
</edit>
</match>

<!--解決中文字體英文間距過寬 -->
<match target="font">
<test target="pattern" name="lang" compare="contains">
<string>zh-tw</string>
<string>zh-cn</string>
<string>ja</string>
<string>ko</string>
</test>
<edit name="spacing">
<const>proportional</const>
</edit>
<edit name="globaladvance">
<bool>false</bool>
</edit>
</match>

<!--設定中文最小字號-->
<match target="font">
<test name="family" compare="contains">
<string>宋</string>
<string>明</string>
<string>楷</string>
<string>Song</string>
<string>Sun</string>
<string>Kai</string>
<string>Ming</string>
</test>
<test name="pixelsize" compare="more_eq">
<double>8</double>
</test>
<test name="pixelsize" compare="less_eq">
<double>12</double>
</test>
<edit name="pixelsize" compare="eq">
<double>12</double>
</edit>
</match>

<!--適應中文用戶的用字習慣-->
<alias>
<family>serif</family>
<prefer>
<family>DejaVu Serif</family>
<family>Bitstream Vera Serif</family>
<family>Times New Roman</family>
<family>Times</family>
<family>LeHei Pro</family>
<family>AR PL New Sung</family>
<family>Kochi Mincho</family>
<family>UnBatang</family>
<family>Baekmuk Batang</family>
</prefer>
</alias>

<alias>
<family>sans-serif</family>
<prefer>
<family>DejaVu Sans</family>
<family>Bitstream Vera Sans</family>
<family>Lucida Grande</family>
<family>Helvetica</family>
<family>Arial</family>
<family>Verdana</family>
<family>LeHei Pro</family>
<family>AR PL New Sung</family>
<family>AR PL New Kai</family>
<family>AR PL ZenKai Uni</family>
<family>Kochi Gothic</family>
<family>UnDotum</family>
<family>Baekmuk Dotum</family>
</prefer>
</alias>

<alias>
<family>monospace</family>
<prefer>
<family>DejaVu Sans Mono</family>
<family>Bitstream Vera Sans Mono</family>
<family>Andale Mono</family>
<family>Courier New</family>
<family>Courier</family>
<family>LeHei Pro</family>
<family>AR PL New Sung Mono</family>
<family>AR PL New Sung</family>
<family>Kochi Gothic</family>
<family>Baekmuk Dotum</family>
</prefer>
</alias>

<alias>
<family>新細明體</family>
<prefer>
<family>AR PL New Sung</family>
</prefer>
</alias>

<alias>
<family>標楷體</family>
<prefer>
<family>AR PL New Kai</family>
</prefer>
</alias>

</fontconfig>


Reference :
UbuntuL10n
Ubuntu 7.04 美化,改用 Mac 的 LiHei Pro 字型