星期一, 4月 18, 2005

PuTTY on MacOSX!

之前下載 PuTTY 的原始碼回來稍微看過一下,發現它有 port 到 Mac 上的版本。但是 0.57 版之前都只有使用 Carbon API 來實作,因為 PuTTY 主要的核心都是用 C 寫的,所以用 Carbon API 是十分合理的。

但 最近發現 PuTTY 更新到 0.58 ,我又看了看它的 source code,居然發現多了一個資料夾 macosx,然後發現裡面都是 *.m,原來這一版已經有用 cocoa 作一些 entry(wrapper) 及 GUI 的部分,而且只要簡單的 make 一下就有 PuTTY.app 可以用了(大心)。

不過還是有點缺點,就是不能換字型,用起來還是有點不順手。不過它讓我知道原來用 obj-C 寫的 code 也能與 C 寫的共用(因為主要的 kernel 還是用 C 寫的)。來研究一下好了~


PuTTY設定畫面

PuTTY使用畫面

星期四, 3月 17, 2005

簽署/加密信件

緣由


通常在使用 E-Mail 的時候,有兩件事我們會有安全上的考量:

  1. 讓收件的人確定是我本人寄出的郵件。

  2. 別人寄給我的信可以用「我的方式」加密,而且只有我能解密。


底下我將會使用 Thunderbird 這套 mail client 來當例子,來介紹如何 簽署/加密 信件。

首先對於我要介紹的加密系統作點簡單的解釋。我們要採用的加解密模式是使用 key-pair policy,也就是我會有兩把 keys,其一為 public key,另一把為 private key。public key 是要公告給大家知道的,而 private key 必須將它保護起來。你的加密程式會把你要加密的東西和指定的 key 做一些運算後,產生新的輸出,這個輸出可能是加密或簽署過的文件。

當我們要簽署文件時,我們是使用 private key 來做簽署,這樣擁有你 public key 的人就可以使用它來驗證這份簽署的有效性,因為只有你自己擁有這把 private key,如此才能保證簽署的人就是你自己。而如果別人寄給你的信想加密的話,他可以用你的 public key 加密後再寄出,然後你就能用自己的 private key 解開這份加密後的文件。要注意的是,這些情況要成立,public key 跟 private key 比需是相互對應的。

所以,我們現在需要一個加密程式,然後再產生自己專屬的 key-pait 。

GnuPG


我們將會用 OpenPGP 這個加密系統來做加密,我選擇使用 Gnu 的實作版本--GnuPG來當我的加密程式。你可以下載別人作好的 binary 程式回來使用,不過我這裡會介紹抓原始檔回來編譯的方法(如果你不熟悉終端機的操作,就下載 binary 回來用吧)。

到 http://www.gnupg.org/download/index.html 下載最新的 source 回來,然後做下列指令:
# tar zxvf gnupg-<version>.tar.gz
# cd gnupg-<version>
# ./configure
# make
# sudo make install clean

這樣應該就可以順利把 gnupg 裝好了。

產生 Key-pair


在終端機下執行 gpg --gen-key ,然後它會問你以下問題:

請選擇妳要使用的金鑰種類:
(1) DSA 和 Elgamal (預設)
(2) DSA (僅能簽署用)
(5) RSA (僅能簽署用)
妳要選哪一個? 1

因為我們要產生 key-pair,所以我們選擇 1


DSA 金鑰對會有 1024 位元長.
ELG-E 金鑰的長度可能介於 1024 位元和 4096 位元之間.
妳想要用多大的金鑰尺寸? (2048) 4096

這裡我們就產生所支援的最長位元,位元愈大雖然資料量變大,但是也更加安全。

請指定這把金鑰的有效期限是多久.
0 = 金鑰不會過期
= 金鑰在 n 天後會過期
w = 金鑰在 n 週後會過期
m = 金鑰在 n 月後會過期
y = 金鑰在 n 年後會過期
金鑰的有效期限是多久? (0)

這裡是詢問你 key-pair 的使用期限,如果你要一直使用同一套 key-pair 的話就選 0

確定了之後,它會要你輸入真實姓名及 E-Mail 帳號:

妳需要一個使用者 ID 來辨識妳的金鑰; 這個軟體會用真實姓名,
註釋和電子郵件地址組合成使用者 ID 如下: "Ke-Huan Lin (Jedi) "

真實姓名: abcde
電子郵件地址: abcde@fg.hi
註釋:
妳選擇了這個使用者 ID:
"abcde "

變更姓名(N), 註釋(C), 電子郵件地址(E)或確定(O)/退出(Q)? o

然後按下 o ,它會要求你輸入一個密碼保護你的 private key:

妳需要一個密語來保護妳的私鑰.

請輸入密語:

接著它就會開始製作金鑰。(4096 bits 可能會有點久)完成時會顯示:

gpg: 金鑰 9FB16F65 已被標記成徹底信任了
公鑰和私鑰已經被建立及簽署了.

gpg: 正在檢查信任資料庫
gpg: 3 個勉強信任以及 1 個完全信任是 PGP 信任模型的最小需求
gpg: 深度: 0 有效: 1 已簽署: 0 信任: 0-, 0q, 0n, 0m, 0f, 1u
pub 1024D/9FB16F65 2005-03-17
金鑰指紋 = 5B0A 562A DB9A C9F6 58E7 954C 0919 B9D5 9FB1 6F65
uid abcde
sub 4096g/23D35AD9 2005-03-17


使用 Thunderbird 來作簽署或加密


首先,我們必須為 Thunderbird 安裝 Enigmail 這個 extension,這樣它才能支援 OpenPGP 的加密系統。

裝好之後我們就要設定一下 Enigmail, 到選單列的 Enigmail -> Preferences 來設定,這裡我們只需要將
GnuPG executable path 設定成 /usr/local/bin/gpg 就可以了。

當我們開始寫信時,會有個 OpenPGP 的選項,如果你是第一次使用,它會要求你選擇 key-pair,如果上述的步驟你都沒有問題的話,你就可以找到你剛產生的 key-pair 而選擇它。我們可以選擇我們要 Sign(簽署)或是 Encrypt(加密)這封信件,如果我們要簽署信件時,選擇 Sign message 就可以了,然後當你信件打完之後,它會要求你輸入 private key 的密碼(別忘了你是用 private key 加密),如此便會寄出簽署過的文件。(你可以把 Enigmail 的 Auto decrypt and verify 的選項關掉,看看寄出什麼樣的東西)

至於加密文件,如果你沒有別人的 public key,你用自己的 public key 加密是沒有意義的(因為這樣只有你自己能解密),如果要匯入別人的 public key,通常大家會以一個純文字檔的方式釋出,當你拿到這個檔案時,就可以到終端機下輸入

# gpg --import < 檔案名

這樣就可以匯入別人的 public key,你也就可以使用它來加密。如果你要輸出你的 public key ,就使用下列指令:

# gpg -a --export > 檔案名

然後你就可以散佈這個檔案,讓別人能用你的 public key 來加密信件寄給你。注意:只有簽署的信件是沒有加密的,所以只會在本文下方加上數位簽章(只能由你的 public key 來驗證);而加密的文件則是一堆亂碼,必須要用 private key 才能解開。

對應 Sign(簽署)的動作叫作 Verify(驗證),而對應 Encrypt(加密)的動作叫作 Decrypt(解密)。

基本的簽署/加密方式就介紹到這裡,剩下的就讓大家自己去試囉。

星期三, 3月 02, 2005

FreeBSD 5 日誌 (2)

以下公開幾個我的設定檔及常用的軟體:
  1. ~/.xinitrc (使用 wrapper 進 X 時的script)
    #!/bin/sh
    scim -d
    gnome-session


  2. ~/.vimrc (用 vim 時的設定)
    set termencoding=utf-8
    set encoding=utf-8
    set fileencodings=big5,utf-8,gbk,euc-jp,euc-kr,utf-bom,iso8859-1
    autocmd BufNewFile,BufRead w3mtmp* set fileencoding=utf-8

    syn on
    set showcmd
    set ruler
    set history=50


  3. ~/.cshrc (用 /bin/tcsh 的環境設定)
    set prompt = '%n@%m %~%# '
    set dspmbyte = utf8
    alias ls 'ls -wG'
    alias irssi 'irssi -c irc.seed.net.tw -n ericsk'
    alias telnet 'telnet -8'

    setenv LANG zh_TW.UTF-8
    setenv LC_CTYPE zh_TW.UTF-8
    setenv XMODIFIERS "@im=SCIM"
    setenv GTK_IM_MODULE xim


  4. office 軟體:我目前是用 /usr/ports/editors/gnome2-office
    word processing 就是 AbiWord
    data sheet 就是 Gnumeric
    看 pdf 的話,其實 /usr/ports/graphics/gpdf 還不錯用

  5. terminal 我是用 gnome-terminal, 支援分頁也支援 M7N

  6. web/mail 當然就是 /usr/ports/www/firefox 跟 /usr/ports/mail/thunderbird 啦

  7. 看電影, avi格式等等就用 /usr/ports/multimedia/vlc
    rmvb 就用 /usr/ports/multimedia/linux-realplay

  8. 聽音樂, /usr/ports/multimedia/beep-media-player
    是以 xmms 為 base, 但我覺得比 xmms 還好用

  9. 純文字編輯, gedit 就夠強了,也支援一些語言語法高亮度顯示。

  10. Messenger就用 /usr/ports/net/gaim 囉~

星期二, 2月 15, 2005

FreeBSD 5 日誌 (1)

  1. 設定 .cshrc (因為我 shell 是用 tcsh)
    set prompt = '%n@%m%# '
    set dspmbyte = utf8
    alias ls 'ls -wG'
    alias telnet 'telnet -8'
    alias irssi 'irssi -c irc.tw.freebsd.org -n ericsk'
    setenv LANG zh_TW.UTF-8
    setenv LC_ALL zh_TW.UTF-8
    setenv LC_CTYPE zh_TW.UTF-8

  2. 裝 /usr/ports/misc/screen。然後用
    http://www.csie.ntu.edu.tw/~r92030/project/big5/18
    覆蓋掉 /usr/local/share/screen/utf8encodings/18

    複 製一份 /usr/local/etc/screenrc 到 ~/.screenrc ,然後加入 defencoding utf8。如果開一個 screen 要連 big5 的BBS的話, <Ctrl+A>:encoding big5

    使用 putty 遠端登入時, 別忘了把 Window -> Translation 裡的 character set 改為 UTF-8

  3. 準備裝 X, 我選擇用 X.org 的, 所以安裝 /usr/ports/x11/xorg 。
    很歡樂地 sudo make install clean
    然後用 xorgcfg 產生出一個 xorg.conf.new 檔,依照自己的需求修改一下,我會在 Mouse 的地方加上
    Option "ZAxisMapping" "4 5"
    支援滾輪

    在 Screen 的地方加上
    DefaultDepth 24
    SubSection "Display"
    Viewport 0 0
    Depth 24
    Modes "1280x1024" "1024x768"
    EndSubSection

    完成後把它複製一份到 /etc/X11/xorg.conf

  4. Desktop Environment 我是選用 gnome2, 但我不想裝太多雜七雜八的軟體,所以我裝
    /usr/ports/x11/gnome2-lite
    /usr/ports/www/firefox (瀏覽器)
    /usr/ports/mail/thunderbird (收發郵件,讀news,讀RSS等)
    /usr/ports/net/gaim (MSN, Yahoo...etc)

    其實 /usr/ports/x11-wm/xfce4 輕便又美觀,我也蠻推荐的,只是新版 (4.2.0) 好像有怪怪的輸入法模組,大概是我不會設定吧...Orz

  5. 字 型的話我是裝 unicode 的 mingliu: /usr/ports/chinese/mingunittf/ 。我自己又從M$拿了 kaiu.ttf 及 arialuni.ttf 放在 ~/.fonts/ 下,然後記得到 /etc/X11/xorg.conf 裡加入 FontPath:

    FontPath "/usr/X11R6/lib/X11/fonts/TrueType/"

    新字型可以加到 ~/.fonts/ 下面,裝完記得 sudo fc-cache -f -v ,重新再啟動 X 就會有新字型了。(前面在make xorg時有 WITH_CJK=1 的話,中文字型名稱就不會爛掉了)

  6. 用 kcwu大大 patch 過的 xcin 以支援 utf8
    把 http://www.csie.ntu.edu.tw/~r92030/tmp/libtabe-0.2.6.tar.gz
    http://www.csie.ntu.edu.tw/~r92030/tmp/xcin-2.5.3.pre3.tar.gz
    放到 /usr/ports/distfiles 下,然後到 /usr/ports/chinese 下抓
    http://www.csie.ntu.edu.tw/~r92030/tmp/xcin+libtabe-draft.shar
    執行 sh xcin+libtabe-draft.shar 以產生新的 xcin 及 libtabe entries

    到 /usr/ports/chinese/libtabe.new 下 make makesum ; make install clean,然後再在 /usr/ports/chinese/xcin25.new 下 make makesum ; make install clean 。裝完之後就可以用 utf-8 的 xcin。別忘了改一下 ~/.cshrc ,加入 setenv XMODIFIERS "@im=xcin" (當然 $LANG 已經設成 zh_TW.UTF-8 了)

  7. 開始使用 x+gnome2
    在 $HOME 裡加入一個 .xinitrc 檔,裡面的內容就

    #!/bin/sh
    exec xcin &
    exec gnome-session

    然後打 startx 就可以了。

FreeBSD 5 日誌 (0)

  1. 下載 5.3-R 的 iso 檔回來作成開機光碟,然後安裝(除了自己 /home 割出想要的大小外,其它都auto partition)

  2. 設定時區,root密碼,使用者,安裝cvsup-without-gui,然後重開機

  3. 把 /usr/share/examples/etc/make.conf 複製一份到 /etc 下,然後改一下 CPUTYPE, CFLAGS, SUPFILE 等等變數設定,我在裡面加上了 WITH_CJK=1, 及 KERNCONF=ERICSK 方便make

  4. 到 /usr/src 下先 make update 更新 source, 然後是下列步驟
    • make buildworld
    • 到 /usr/src/sys/i386/conf 下把 GENERIC 複製一份到 ERICSK然後按照機器狀況設定音效卡要 device sound, USB隨身碟會用到 device da 所以 scbus 要開
    • make buildkernel
    • make installkernel
    • 重開機,進入 single user mode
    • mount -a
    • mergemaster -p
    • 到/usr/src下 make installworld
    • mergemaster
    • 重開機搞定

  5. 要開啟 sshd, 到 /etc/rc.conf 下加入一行 sshd_enable="YES"

  6. 更改 ports 找檔案的地方,在 /etc/make.conf 下加入
    MASTER_SITE_OVERRIDE= \
    ftp://freebsd.nctu.edu.tw/pub/FreeBSD/distfiles/${DIST_FILES}/

  7. 裝 /usr/ports/security/sudo 這樣以後少用 root 登入。設定檔預設會放在 /usr/local/etc/sudoers

  8. 裝 /usr/ports/editors/vim-lite 有好用的 vim 然後設一下 .vimrc

  9. 要掛上音效模組
    #kldload snd_driver
    在/boot/loader.conf內加入 snd_driver_load="YES"
    要增加音效模組的 virtual channels (就是同時可以很多程式放聲音)
    # sysctl hw.snd.pcm0.vchans=4
    # sysctl hw.snd.maxautovchans=4

星期六, 1月 08, 2005

ACM Online Judge

這篇文章是打算寫給剛加入程設組的資訊社學弟們看的。

首先,我假設你已經到 ACM Online Judge 註冊了一組帳號,並且學會了如何上傳你的程式碼,以及知道去哪裡查詢你的程式的結果是否正確。(這些東西在首頁都有說明,我認為每個有帳號的人都應該花點時間去讀一讀。)

要測試你是否了解 Online-Judge 的運作,也許可以考慮先寫這題:10055,它並不會花上太多的時間去閱讀、理解題目,也不會花太多的時間來撰寫程式,因此是個不錯的選擇。(好吧,其實 10071 也是差不多的,而且題目更短,但是乘法比減法來得難。)

關於 ACM 有不少的資源可以利用,像是 BBS 討論區,或是中文化的網頁。ACM 的討論區搜尋題號通常都會有滿多的討論;中文網站像是星子的ACM小窩或是Lucky貓的ACM園地都很有名。

如果你想看看有哪些簡單的題目你還沒做,就把
http://felix-halim.net/oj/problems.php?user_id=8800
裡的 8800 換成你的 ID 就可以在該網頁的最下方看到最多人 Accepted,而你的 ID 還沒 AC 的題號。

BBS 站的話,有未來最舊Prob_Solv板和與南共舞ACM板,和批踢踢上的 ACMClub 板。

另外,小光光有整理一份列表在這裡,也有不少好用的資訊。

接下來,就靠各位的努力啦!