<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7183840757750224171</id><updated>2012-01-20T22:14:06.803+08:00</updated><category term='Python'/><category term='Firefox'/><category term='SSH'/><category term='Programming Language'/><category term='Trac'/><category term='雜項'/><category term='Cygwin'/><category term='Subversion'/><category term='VirtualBox'/><category term='工具程式'/><category term='Ubuntu'/><category term='Windows'/><category term='Eee PC'/><category term='VMware Player'/><category term='Android'/><category term='coLinux'/><category term='NFS Server'/><category term='wxWidgets'/><category term='Linux Programming'/><title type='text'>軟體工匠 R 的筆記</title><subtitle type='html'>靠軟體謀生真不易... 勤作筆記，幫助記憶...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>90</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-2538825067720792757</id><published>2012-01-20T22:14:00.001+08:00</published><updated>2012-01-20T22:14:06.842+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜項'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Oneiric Ocelot 的 mpeg4ip-utils 套件</title><content type='html'>Ubuntu 更新到 Oneiric Ocelot 之後，有些套件已經不支援了，例如 mpeg4ip-utils。臨時有急用，所以只好跟 Natty Narwhal 借。&lt;br /&gt;&lt;br /&gt;方法是從 &lt;a href="https://launchpad.net/ubuntu/+source/mpeg4ip"&gt;https://launchpad.net/ubuntu/+source/mpeg4ip&lt;/a&gt; 下載以下套件：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;libmp4v2-0_1.6dfsg-0.2ubuntu9_amd64.deb&lt;/li&gt;&lt;li&gt;libmpeg4ip-0_1.6dfsg-0.2ubuntu9_amd64.deb&lt;/li&gt;&lt;li&gt;mpeg4ip-utils_1.6dfsg-0.2ubuntu9_amd64.deb&lt;/li&gt;&lt;/ul&gt;然後用 dpkg 依序安裝即可：&lt;br /&gt;&lt;blockquote class="tr_bq"&gt; dpkg -i libmp4v2-0_1.6dfsg-0.2ubuntu9_amd64.deb&lt;br /&gt;dpkg -i libmpeg4ip-0_1.6dfsg-0.2ubuntu9_amd64.deb&lt;br /&gt;dpkg -i mpeg4ip-utils_1.6dfsg-0.2ubuntu9_amd64.deb &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-2538825067720792757?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/2538825067720792757/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=2538825067720792757' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2538825067720792757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2538825067720792757'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2012/01/oneiric-ocelot-mpeg4ip-utils.html' title='Oneiric Ocelot 的 mpeg4ip-utils 套件'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-5010166749413673417</id><published>2011-12-11T11:04:00.001+08:00</published><updated>2011-12-11T12:23:22.888+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>保留 Firefox 的列印設定</title><content type='html'>我習慣將網路上看到的好文章列印成 PDF 檔保存。在 Ubuntu 上列印成 PDF是標準功能，不需額外安裝和設定。不過，在 Ubuntu 11.10 上用 Firefox 列印網頁，卻有幾個小困擾：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;FF 的預設印表機是 Postscript 印表機，不是 PDF 印表機&lt;/li&gt;&lt;li&gt;FF 提供額外的頁首頁尾等資訊，但預設值都不是我想要的&lt;/li&gt;&lt;/ol&gt;因此，每次列印時都要重新點選相關設定，非常麻煩。經過一番努力，終於找出手動修改預設值的方法。&lt;br /&gt;&lt;ol&gt;&lt;li&gt;在網址列輸入 &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;about:config&lt;/span&gt; 然後按 Enter (Firefox 會提醒你要小心修改)&lt;/li&gt;&lt;li&gt;在 Filter 輸入 &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;default.print&lt;/span&gt; 縮小範圍，然後修改或新增以下項目：&lt;/li&gt;&lt;/ol&gt;&lt;blockquote class="tr_bq"&gt;printer_PostScript/default.print_footercenter =&amp;gt;&lt;br /&gt;printer_PostScript/default.print_footerleft =&amp;gt;&lt;br /&gt;printer_PostScript/default.print_footerright =&amp;gt;&lt;br /&gt;printer_PostScript/default.print_headercenter =&amp;gt; &lt;br /&gt;printer_PostScript/default.print_headerleft =&amp;gt;&lt;br /&gt;printer_PostScript/default.print_headerright =&amp;gt;&lt;br /&gt;printer_PostScript/default.print_to_filename =&amp;gt; ~/firefox.pdf&lt;/blockquote&gt;以上是將列印檔名預設為 firefox.pdf，頁首頁尾設成空白。若你的設定不一樣，要先在列印對話框的 Options 做好設定列印一次，再重新進入 about:config。找出以下看起來是亂碼的設定項目：&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;printer_Ã¥ÂÂÃ¥ÂÂ°Ã¨ÂÂ³Ã¦ÂªÂÃ¦Â¡Â.print_...&lt;/blockquote&gt;就可以看出設定字串如何寫 (譬如 "&amp;amp;T")，將此字串複製到 default.print 對應那一部份就可以了。 &lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-5010166749413673417?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/5010166749413673417/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=5010166749413673417' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5010166749413673417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5010166749413673417'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2011/12/firefox.html' title='保留 Firefox 的列印設定'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-2929971420070708507</id><published>2011-11-28T17:12:00.001+08:00</published><updated>2011-11-28T17:26:07.872+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>在 Ubuntu 解 Windows 的 ZIP 壓縮檔</title><content type='html'>有沒有搞錯？這不是很簡單嗎？&lt;br /&gt;&lt;br /&gt;是的，這很簡單。但問題是有些在 Windows 壓縮的 ZIP 檔內含的中文檔名是 Big5 編碼，Ubuntu 的壓縮檔管理員解開時會是亂碼。原因是 ZIP 格式並未定義如何標示檔名的編碼，所以壓縮檔管理員一律當成 Unicode 來解。&lt;br /&gt;&lt;br /&gt;遇到這個問題，可以用 command line 的 unzip 來解決：&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;unzip -O big5 your_compressed_file.zip&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-2929971420070708507?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/2929971420070708507/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=2929971420070708507' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2929971420070708507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2929971420070708507'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2011/11/ubuntu-windows-zip.html' title='在 Ubuntu 解 Windows 的 ZIP 壓縮檔'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-7075318443973132799</id><published>2011-11-18T00:26:00.005+08:00</published><updated>2011-11-18T00:34:36.908+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>縮小 Ubuntu Unity 的圖示</title><content type='html'>Ubuntu Unity 的圖示有 48 點，實在有夠大。縮小的方法是安裝 Compiz Configuration Settings Manager (簡稱 CCSM)：&lt;br /&gt;&lt;blockquote&gt;sudo apt-get install compizconfig-settings-manager&lt;/blockquote&gt;執行 ccsm 之後，找到 Ubuntu Unity Plugin &gt; Experimental 的 Launcher icon size，就可自由調整 (最小 32 點)。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-7075318443973132799?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/7075318443973132799/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=7075318443973132799' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7075318443973132799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7075318443973132799'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2011/11/ubuntu-unity.html' title='縮小 Ubuntu Unity 的圖示'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-4739226056506516230</id><published>2011-11-17T23:55:00.004+08:00</published><updated>2011-11-18T00:25:52.521+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu Unity 與 Skype</title><content type='html'>最近重新安裝 Ubuntu 11.10，才注意到 Unity 搭配 Skype 有兩個問題。&lt;br /&gt;&lt;br /&gt;第一個問題是 Skype 的圖示不會出現在 notification area。解法需先安裝 dconf-tools 這個套件：&lt;br /&gt;&lt;blockquote&gt;sudo apt-get install dconf-tools&lt;/blockquote&gt;接著執行 dconf-editor 並找到 desktop &gt; unity &gt; panel 的 systray-whitelist，然後在最後加上 'Skype' 即可 (需登出再登入)。例如：&lt;blockquote&gt;['JavaEmbeddedFrame', 'Wine', 'scp-dbus-service', 'Update-notifier', 'Skype']&lt;/blockquote&gt;&lt;br /&gt;第二個問題是，若 Skype 啟動後再點 Unity 上的 Skype 圖示，這動作並不是叫出 Skype 的視窗，而是重新再起動另一份 Skype (會因重複登入而錯誤)。解法在參考資料二，有用但需要一點小技巧。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;參考資料：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; 1. &lt;a href="http://askubuntu.com/questions/43280/how-can-i-get-the-skype-notification-back-in-the-system-tray"&gt;How can I get the Skype notification back in the system tray?&lt;/a&gt;&lt;br /&gt; 2. &lt;a href="http://ubuntuforums.org/showthread.php?t=1851256"&gt;Unity launcher and multiple instances of Skype &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-4739226056506516230?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/4739226056506516230/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=4739226056506516230' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/4739226056506516230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/4739226056506516230'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2011/11/ubuntu-unity-skype.html' title='Ubuntu Unity 與 Skype'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-254409221132746302</id><published>2011-10-26T00:12:00.003+08:00</published><updated>2011-11-28T17:31:54.735+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜項'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>在 Ubuntu 11.10 上使用玉山銀行的 WebATM</title><content type='html'>玉山銀行的 WebATM 是極少數不但支援 Windows + IE 平台，也支援 Linux + Firefox/Chrome 等平台的網路銀行。單這一點，就值得大力推薦。&lt;br /&gt;&lt;br /&gt;WebATM 安裝方法還算簡單，請參考：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://netbank.esunbank.com.tw/webatm/Q&amp;amp;A_016.htm"&gt;http://netbank.esunbank.com.tw/webatm/Q&amp;amp;A_016.htm&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;可以歸納為三個步驟：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://netbank.esunbank.com.tw/webatm/Q&amp;amp;A_016.htm#02"&gt;安裝 Ubuntu 提供的 pcscd 套件&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://netbank.esunbank.com.tw/webatm/Q&amp;amp;A_016.htm#05"&gt;安裝讀卡機提供的驅動程式&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://netbank.esunbank.com.tw/webatm/Q&amp;amp;A_016.htm#01"&gt;在 Firefox 安裝玉山銀行提供的 WebATM plugin&lt;/a&gt; (看第六點)&lt;/li&gt;&lt;/ol&gt;不過，根據我在 Ubuntu 11.10 上的經驗，這樣的安裝程序似乎還不夠。可到 WebATM 健診頁面跑檢測程式：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://netbank.esunbank.com.tw/webatm/clinic/default.asp"&gt;https://netbank.esunbank.com.tw/webatm/clinic/default.asp&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;我的情況是前三關都順利通過，但就是抓不到讀卡機。且在 /var/log/syslog 會出現以下錯誤訊息：&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;span style="font-size: x-small;"&gt;pcscd: readerfactory.c:965:RFInitializeReader() Open Port 0x200000 Failed (USB:0CA6/0010:LIBUDEV:0:/DEV/BUS/USB/004/002)&lt;br /&gt;pcscd: readerfactory.c:275:RFAddReader() CASTLES EZ100PU init failed.&lt;br /&gt;pcscd: hotplug_libudev.c:377:HPAddDevice() Failed adding USB device: CASTLES EZ100PU&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;這問題有兩個解法：第一個較簡單，第二個較安全。&lt;br /&gt;&lt;br /&gt;解法一是舊式的作法，需以 root 身份執行 pcscd。請先修改 /etc/init.d/pcscd，將以下片段的 "exit 0" 註解掉，再重開機即可：&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-size: x-small;"&gt;# DO NOT start the daemon on startup&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;# comment the line to have the same behavior as in version &amp;lt; 1.6.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;#exit 0&lt;/span&gt;&lt;/blockquote&gt;解法二是較安全的方式，是以使用者身份動態執行 pcscd，但你必須賦予這台讀卡機特殊的權限。作法是新建一個檔案：/etc/udev/rules.d/92-pcscd-ccid.rules。內容如下：&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-size: x-small;"&gt;# If not adding the device, go away&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;ACTION!="add", GOTO="pcscd_ccid_rules_end"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;SUBSYSTEM!="usb", GOTO="pcscd_ccid_rules_end"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;ENV{DEVTYPE}!="usb_device", GOTO="pcscd_ccid_rules_end"&lt;/span&gt; &lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;# Castles Technology Co., Ltd EZUSB PC/SC Smart Card Reader&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;ATTRS{idVendor}=="0ca6", ATTRS{idProduct}=="0010", GROUP="pcscd"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;# All done&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;LABEL="pcscd_ccid_rules_end"&lt;/span&gt;&lt;/blockquote&gt;注意上面的 idVendor 和 idProduct 必須對應到讀卡機的 USB ID。你可用 lsusb 查出 USB ID，譬如：&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-size: x-small;"&gt;Bus 003 Device 003: ID 0ca6:0010 Castles Technology Co., Ltd EZUSB PC/SC Smart Card Reader&lt;/span&gt;&lt;/blockquote&gt;改完後 sudo service udev restart，應該就大功告成了。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;參考資料&lt;/b&gt;：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ludovicrousseau.blogspot.com/2010/12/configuring-your-system-for-pcscd-auto.html"&gt;http://ludovicrousseau.blogspot.com/2010/12/configuring-your-system-for-pcscd-auto.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-254409221132746302?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/254409221132746302/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=254409221132746302' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/254409221132746302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/254409221132746302'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2011/10/ubuntu-1110-webatm.html' title='在 Ubuntu 11.10 上使用玉山銀行的 WebATM'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-4168782222871790924</id><published>2011-10-20T17:17:00.003+08:00</published><updated>2011-10-20T17:53:01.832+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu Unity UI 的術語</title><content type='html'>Ubuntu 11.04 的 Unity 感覺不是很穩，所以試用一陣子之後就 &lt;a href="http://softsmith.blogspot.com/2011/02/gnome-panel.html#links"&gt;改用 AWN&lt;/a&gt; 了。此次，趁升級到 Ubuntu 11.10 時，又重新玩玩看。感覺進步不少，所以決定再給他一次機會：長時間持續使用並勉強自己克服既有操作習慣。&lt;br /&gt;&lt;br /&gt;一週下來，還算理想。唯一的麻煩是有問題時不容易找答案：因為 google 時很難下 keyword，不知道該怎麼稱呼 Unity 的各個部位。後來，終於找到一份 Unity UI 的術語可作為參考：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://askubuntu.com/questions/10228/whats-the-right-terminology-for-unitys-ui-elements/19166#19166"&gt;http://askubuntu.com/questions/10228/whats-the-right-terminology-for-unitys-ui-elements/19166#19166&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;PS: Oneiric 的 Unity 似乎跟 scim 相衝。因 Natty 之前 ibus 的酷音輸入法一直有問題，所以只能換成 scim。升級到 Oneiric 後，這個問題看起已經解決，換回 ibus 之後 Unity 和酷音輸入法都很正常。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-4168782222871790924?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/4168782222871790924/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=4168782222871790924' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/4168782222871790924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/4168782222871790924'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2011/10/ubuntu-unity-ui.html' title='Ubuntu Unity UI 的術語'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-7489983851542601003</id><published>2011-10-17T11:36:00.002+08:00</published><updated>2011-10-17T11:44:03.344+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>用 Python 來控制 Skype</title><content type='html'>終於找到一個可以利用 script 來控制 Skype 狀態的方法，先簡單留下參考資料：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ubuntuforums.org/showpost.php?p=4611199&amp;amp;postcount=77"&gt;http://ubuntuforums.org/showpost.php?p=4611199&amp;amp;postcount=77&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.oberle.org/skype_linux_tools"&gt;http://www.oberle.org/skype_linux_tools&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;利用 Skype for Linux 2.2.0.35 測試，確實可以改變 Skype 的狀態，但似乎還不夠穩，偶而會失敗。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-7489983851542601003?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/7489983851542601003/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=7489983851542601003' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7489983851542601003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7489983851542601003'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2011/10/python-skype.html' title='用 Python 來控制 Skype'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-7796239033375536928</id><published>2011-10-17T11:14:00.003+08:00</published><updated>2011-10-17T11:34:11.958+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>利用 BlueProximity 和你的藍牙手機自動鎖住和解開 Ubuntu 桌面</title><content type='html'>你的 Ubuntu 桌面有啟動閒置幾分鐘後就自動鎖上嗎？時間設定太長，保防效果就低；但若太短，恐怕只是替自己添麻煩而已。&lt;br /&gt;&lt;br /&gt;若你的手機有藍牙功能而且習慣手機不離身，那麼利用 BlueProximity 可讓 Ubuntu 偵測到你已經離開 (其實偵測對象是你的手機)，你就可以在第一時間自動鎖上桌面。更酷的是，你回來後系統會自動解開等著你來用。&lt;br /&gt;&lt;br /&gt;這方法是無意中看到的，還沒空測試，請大家自行參考、研究：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ubuntuforums.org/showthread.php?t=702372"&gt;http://ubuntuforums.org/showthread.php?t=702372&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-7796239033375536928?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/7796239033375536928/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=7796239033375536928' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7796239033375536928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7796239033375536928'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2011/10/blueproximity-ubuntu.html' title='利用 BlueProximity 和你的藍牙手機自動鎖住和解開 Ubuntu 桌面'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-4405470317160917605</id><published>2011-09-30T09:27:00.005+08:00</published><updated>2011-09-30T10:23:28.959+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜項'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>綠色網頁 -- 網頁設計也能做環保</title><content type='html'>跟朋友借了一台 &lt;a href="http://www.seasonicusa.com/power_angel.htm"&gt;海韻 Power Angel&lt;/a&gt; 來測量家裡電器的用電情況。我的 Asus X61Z 筆電 (Ubuntu 11.04) 在開完機等待一小段時間後的發呆狀態下 (螢幕稍變暗) 消耗功率是 26W。將 Firefox 6.0.2 開啟後，繼續做了以下實驗。&lt;br /&gt;&lt;ol&gt;&lt;li&gt;連到 &lt;a href="http://www.google.com.tw"&gt;http://www.google.com.tw&lt;/a&gt; 後不做任何操作，等到螢幕變暗後觀察到消耗功率是 26W。&lt;/li&gt;&lt;li&gt;連到 &lt;a href="http://news.chinatimes.com"&gt;http://news.chinatimes.com&lt;/a&gt; 後不做任何操作，等到螢幕變暗後觀察到消耗功率在 27W~32W 之間跳動。我的 Firefox 有裝 &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/flashblock/"&gt;Flash Block&lt;/a&gt;，所以網頁上的 flash 是沒有啟動的。&lt;/li&gt;&lt;li&gt;繼續前一個實驗，但將網頁上的 flash 全部啟動後不做任何操作，等到螢幕變暗後觀察到消耗功率在 31W~37W 之間跳動。&lt;/li&gt;&lt;li&gt;繼續前一個實驗，將 Firefox 最小化後不做任何操作，等到螢幕變暗後觀察到消耗功率在 27W~28W 之間跳動。&lt;/li&gt;&lt;li&gt;連到 &lt;a href="http://tw.yahoo.com"&gt;http://tw.yahoo.com&lt;/a&gt; 後不做任何操作，等到螢幕變暗後觀察到消耗功率在 27W~46W 之間跳動。我的 Firefox 有裝 &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/flashblock/"&gt;Flash Block&lt;/a&gt;，所以網頁上的 flash 是沒有啟動的。&lt;/li&gt;&lt;li&gt;繼續前一個實驗，但將網頁上的 flash 全部啟動後不做任何操作，等到螢幕變暗後觀察到消耗功率在 28W~48W 之間跳動。&lt;/li&gt;&lt;li&gt;繼續前一個實驗，將 Firefox 最小化後不做任何操作，等到螢幕變暗後觀察到消耗功率在 27W~32W 之間跳動。&lt;/li&gt;&lt;/ol&gt;      根據上面的實驗，有以下簡單的結論：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;像 &lt;a href="http://www.google.com.tw"&gt;Google&lt;/a&gt; 這種靜態網頁最省電，放著也不會多耗電，堪稱綠色網頁。&lt;/li&gt;&lt;li&gt;像 &lt;a href="http://news.chinatimes.com"&gt;中時電子報&lt;/a&gt; 或 &lt;a href="http://tw.yahoo.com"&gt;Yahoo&lt;/a&gt; 之類的網站，為了吸引你的眼球，放了一堆 Ajax 或 Flash 在網頁上面跑。不管你看不看，都會消耗多餘的功率。&lt;/li&gt;&lt;li&gt;不同的網頁，功率消耗也不一樣。但最小化後可以省掉畫面更新的消耗，多少省一點。 &lt;/li&gt;&lt;li&gt;看起來 Flash 消耗不少功率，裝個  &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/flashblock/"&gt;Flash Block&lt;/a&gt; 既省頻寬又省電，值得推薦。&lt;/li&gt;&lt;/ul&gt;我家那台不知品牌的純有線 IP 分享器，消耗功率是 4W。若各大網站能多用點心，少點花俏，那麼省下來的功率就夠這台 IP 分享器用了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-4405470317160917605?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/4405470317160917605/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=4405470317160917605' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/4405470317160917605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/4405470317160917605'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2011/09/blog-post.html' title='綠色網頁 -- 網頁設計也能做環保'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-8759961381330565270</id><published>2011-07-23T10:08:00.003+08:00</published><updated>2011-08-23T10:48:45.703+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='Trac'/><title type='text'>Can't remove 'db/transactions/1-1.txn'</title><content type='html'>老闆交辦一個新的案子，按慣例，先匯入 Subversion 好讓組員可以協同開發。原廠給的 SDK 接近 3G，很好奇要花多少時間才可以完成匯入? 半小時後還在進行... 卻猛然想起，&lt;span style="font-family:courier new;"&gt;svn import&lt;/span&gt; 時忘了加 &lt;span style="font-family:courier new;"&gt;--no-ignore&lt;/span&gt;，這會讓 svn 跳過 .a 和 .o 之類的檔案。只好按 ^C 煞車重來。&lt;br /&gt;&lt;br /&gt;第二次重作忘了量時間，但一兩個小時跑不掉。看起來似乎 import 成功，但卻有一個錯誤訊息：&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;Can't remove 'db/transactions/1-1.txn'&lt;/blockquote&gt;用 &lt;span style="font-family:courier new;"&gt;svnadmin lstxns&lt;/span&gt; 去看，確實有一個 outstanding transaction，而且用 &lt;span style="font-family:courier new;"&gt;svnadmin rmtxns&lt;/span&gt; 也砍不掉。只好手動去砍掉 &lt;span style="font-family:courier new;"&gt;db/transactions/1-1.txn&lt;/span&gt; 這個目錄。&lt;br /&gt;&lt;br /&gt;這樣做似乎不影響 Subversion 的使用，但連結的 Trac 好像受到影響而不能使用。解決方法是用以下指令重新同步 Trac 的 repository 資料 (也要等很久)：&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;trac-admin $YOUR_TRAC_ENV repository resync ""&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-8759961381330565270?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/8759961381330565270/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=8759961381330565270' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8759961381330565270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8759961381330565270'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2011/07/cant-remove-dbtransactions1-1txn.html' title='Can&apos;t remove &apos;db/transactions/1-1.txn&apos;'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-8853284646976083470</id><published>2011-04-02T16:32:00.003+08:00</published><updated>2011-04-02T17:31:07.884+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Trac'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>手動修改 Python Egg 的克難方法</title><content type='html'>&lt;a href="http://trac.edgewall.org/"&gt;Trac&lt;/a&gt; 是相當好用的專案管理系統，非常值得推薦。不過，畢竟是免費的 open source project，有時候遇到問題必須自己想辦法克服。 聽起來有點可怕？放心啦，以下的案例是我使用 Trac 五年多來第一次必須自己想辦法解決。&lt;br /&gt;&lt;br /&gt;簡單說，有一個我很常用的功能在升級到 Trac 0.12.2 之後，變得不能用了。本著 open source 的精神，我找到問題的所在，也大約知道應該如何修正。然後，我就到該 project 的 ticket system 回報問題的症狀和可能解法。結果，兩個月過去了，這個回報如石沉大海... (也許我沒仔細遵循他們的回報規範吧？)&lt;br /&gt;&lt;br /&gt;雖然我知道如何解這問題，但 Trac 包裝成 Python egg，我不知道如何去修正裡面的程式。後來發現 egg 其實是 .zip 的壓縮檔，用 unzip 便可解開：&lt;br /&gt;&lt;blockquote&gt;mkdir trac-egg&lt;br /&gt;cd trac-egg&lt;br /&gt;unzip ../Trac-0.12.2-py2.5.egg&lt;br /&gt;&lt;/blockquote&gt;很容易就可以在解開後的檔案內找到並修正問題點。然後，應該就是用 zip 再打包回去吧？&lt;br /&gt;&lt;blockquote&gt;zip -r -9 ../Trac-0.12.2-py2.5.egg *&lt;br /&gt;&lt;/blockquote&gt;檔案大小的差異讓我有點遲疑，但還是將這個修正後的 egg 取代舊的：&lt;br /&gt;&lt;blockquote&gt;cp ../Trac-0.12.2-py2.5.egg /usr/lib/python2.5/site-packages/Trac-0.12.2-py2.5.egg&lt;/blockquote&gt;初步以 trac-admin 來測試 OK，但從 Web 去存取就有錯了。錯誤訊息大約是無法解開 egg 檔，所以用 zip 打包的方法應該有錯。偏偏網路上又找不到如何包裝 Python egg 的方法 (我承認，第一眼看起來有點複雜的資料，我就放棄不看)。&lt;br /&gt;&lt;br /&gt;就在我想放棄的時候，發現 zip 有一個參數可以只更新修改過的檔案：&lt;br /&gt;&lt;blockquote&gt;zip -f ../Trac-0.12.2-py2.5.egg&lt;/blockquote&gt;這個指令只換掉我剛剛修改過的檔案，而克難修正後的 egg 檔果然能夠動作。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-8853284646976083470?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/8853284646976083470/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=8853284646976083470' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8853284646976083470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8853284646976083470'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2011/04/python-egg.html' title='手動修改 Python Egg 的克難方法'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-2935225809036602509</id><published>2011-03-02T12:02:00.003+08:00</published><updated>2011-12-26T18:32:17.743+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>在 Ubuntu 上看 GBK 簡中的 PDF 文件</title><content type='html'>朋友傳了一份 GBK 簡中編碼的 PDF 文件給我。此文件在 Ubuntu 底下 Adobe Reader 8.1.7 開不起來，錯誤訊息說要到以下網址下載 Font Packs：&lt;br /&gt;&lt;blockquote&gt;http://www.adobe.com/products/acrobat/acrrasianfontpack.html&lt;/blockquote&gt;然而，這個 URL 早已失效了。切換到 Windows Vista，用 Adobe Reader X 來開啟，也是要求要安裝 Chinese Simplified Font Packs。但畢竟是主流平台的最新版本，直接點選錯誤訊息的連結就可以完成安裝程序。&lt;br /&gt;&lt;br /&gt;在 Ubuntu 上就沒有解法嗎？答案是有的。Adobe Reader 8.1.7 是 Linux 上有中文介面的最新版本，但卻沒有對應的 Chinese Simplified Font Packs，所以必須換成英文介面的較新版本。&lt;br /&gt;&lt;br /&gt;目前，Adobe 網站上能找到的最新 Chinese Simplified Font Packs 是 9.1.0 版。根據測試，可以搭配 Adobe Reader 9.4.2。步驟如下：&lt;br /&gt;&lt;br /&gt;移除舊版 Adobe Reader 之後，再安裝新的版本：&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: 85%;"&gt;# sudo -s&lt;br /&gt;# cd /tmp&lt;br /&gt;# wget ftp://ftp.adobe.com/pub/adobe/reader/unix/9.x/9.4.6/enu/AdbeRdr9.4.6-1_i386linux_enu.deb&lt;br /&gt;# dpkg -i &lt;/span&gt;&lt;span style="font-size: 85%;"&gt;AdbeRdr9.4.6-1_i386linux_enu.deb&lt;/span&gt;&lt;/blockquote&gt;接著，再安裝 Font Packs (簡中和繁中都必須裝，否則 Big5 編碼的也開不起來)：&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: 85%;"&gt;# wget ftp://ftp.adobe.com/pub/adobe/reader/unix/9.x/9.1/misc/FontPack910_cht_i486-linux.tar.bz2&lt;br /&gt;# tar xvjf FontPack910_cht_i486-linux.tar.bz2&lt;br /&gt;# cd CHTKIT/&lt;br /&gt;# ./INSTALL&lt;br /&gt;# cd /tmp&lt;br /&gt;# wget ftp://ftp.adobe.com/pub/adobe/reader/unix/9.x/9.1/misc/FontPack910_chs_i486-linux.tar.bz2&lt;br /&gt;# tar xvjf FontPack910_chs_i486-linux.tar.bz2&lt;br /&gt;# cd CHSKIT/&lt;br /&gt;# ./INSTALL&lt;/span&gt;&lt;/blockquote&gt;以下是 ./INTALL 的過程，僅供參考：&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: 85%;"&gt;Welcome to the Asian Language Kit installation.&lt;br /&gt;This installation will not work if you do not have the Unix Adobe Reader version 9.1 installed prior to this installation.&lt;br /&gt;If you do not have Adobe Reader version 9.1 already installed on your system please do so before installing this Asian Language Kit.&lt;br /&gt;Continue installation?  [y]y&lt;br /&gt;The font software contained in this package is being licensed to you solely&lt;br /&gt;for use with the Adobe Reader product ("Adobe Reader") subject to&lt;br /&gt;the terms and conditions of the Electronic End User License Agreement&lt;br /&gt;accompanying the Adobe Reader.&lt;br /&gt;&lt;br /&gt;Please type  "accept"  to accept the terms and conditions of license agreement; Type  "decline"  to exit.  accept&lt;br /&gt;Enter the location where you installed the Adobe Reader [/opt]&lt;br /&gt;&lt;br /&gt;Installing Common binaries ...&lt;br /&gt;Done&lt;br /&gt;&lt;br /&gt;Installing Common resources ...&lt;br /&gt;Done&lt;br /&gt;&lt;br /&gt;Installing Simplified Chinese language resources ...&lt;br /&gt;Done&lt;br /&gt;Installation completed.&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-2935225809036602509?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/2935225809036602509/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=2935225809036602509' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2935225809036602509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2935225809036602509'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2011/03/ubuntu-gbk-pdf.html' title='在 Ubuntu 上看 GBK 簡中的 PDF 文件'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-8380817210390840093</id><published>2011-02-26T00:35:00.004+08:00</published><updated>2011-02-26T01:09:00.521+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>將 gnome-panel 完全移除</title><content type='html'>Ubuntu 預設的 gnome-panel 組態是有上下兩組 panel。若你想移除其中一組，只要在  panel 上面按右鍵即可找到移除的功能。但若你想移除最後一個 panel，這一招就沒有用了。必須改用以下的方法：&lt;ol&gt;&lt;li&gt;執行 gconf-editor&lt;/li&gt;&lt;li&gt;找到 desktop &gt; gnome &gt; session &gt; required_components &gt; panel&lt;/li&gt;&lt;li&gt;panel 的值應該是 gnome-panel，把它改成空白&lt;/li&gt;&lt;li&gt;登出再登入即可生效&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-LSZ9LBkpB28/TWfheKokOAI/AAAAAAAAAFw/2m6Uc1Iiw8g/s1600/avant-panel.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 88px;" src="http://2.bp.blogspot.com/-LSZ9LBkpB28/TWfheKokOAI/AAAAAAAAAFw/2m6Uc1Iiw8g/s400/avant-panel.png" alt="" id="BLOGGER_PHOTO_ID_5577674571888474114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;你問我為何要移除 gnome-panel？嗯，我找到一個不錯的替代套件：Avant-window-navigator (Awn)，畫面如上所示。這個套件是類似 MacOS X 的 panel，gnome-panel 有的功能幾乎都有。個人習慣利用他 Intellhide (聰明隱藏) 的特性，將所有螢幕空間留給應用程式。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-8380817210390840093?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/8380817210390840093/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=8380817210390840093' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8380817210390840093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8380817210390840093'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2011/02/gnome-panel.html' title='將 gnome-panel 完全移除'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-LSZ9LBkpB28/TWfheKokOAI/AAAAAAAAAFw/2m6Uc1Iiw8g/s72-c/avant-panel.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-6018844992811686972</id><published>2011-02-07T14:32:00.003+08:00</published><updated>2011-02-07T15:11:27.245+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu 的 VNC 套件</title><content type='html'>Ubuntu 上官方的 VNC 套件為：&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Server 是 vino&lt;/li&gt;&lt;li&gt; Client 是 vinagre&lt;/li&gt;&lt;/ul&gt;啟動 VNC server 的方式很簡單：&lt;br /&gt;&lt;ol&gt;&lt;li&gt; 登入準備作為遠端桌面那台主機&lt;/li&gt;&lt;li&gt; 執行 vino 設定 (系統 &gt; 偏好設定 &gt; 遠端桌面)，設定範例如下&lt;/li&gt;&lt;li&gt; 完成設定之後，只要保持登入狀態，VNC server 就自動啟動 (重新登入也一樣)&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eG_b3F4N00g/TU-avfHF3iI/AAAAAAAAAFg/Nk8XX62-YiY/s1600/vino-setup.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 398px;" src="http://4.bp.blogspot.com/_eG_b3F4N00g/TU-avfHF3iI/AAAAAAAAAFg/Nk8XX62-YiY/s400/vino-setup.png" alt="" id="BLOGGER_PHOTO_ID_5570841404676365858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;注意！若遠端桌面有啟動特殊視覺效果，可能會影響 client 端檢視桌面的完整性。建議關掉所有特殊視覺效果：&lt;br /&gt;&lt;ol&gt;&lt;li&gt; 登入準備作為遠端桌面那台主機&lt;/li&gt;&lt;li&gt; 在桌面按右鍵 &gt; 更改桌面背景 &gt; 視覺效果 &gt; 選「無」&lt;/li&gt;&lt;/ol&gt;VNC client 連到遠端桌面的方法也很簡單：&lt;br /&gt;&lt;ol&gt;&lt;li&gt; 執行 vinagre (網際網路 &gt; 遠端桌面檢視器)&lt;/li&gt;&lt;li&gt; 若一切正常，應該可以在左側邊面板看到遠端主機的名字，點擊該名字即可連線&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-6018844992811686972?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/6018844992811686972/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=6018844992811686972' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6018844992811686972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6018844992811686972'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2011/02/ubuntu-vnc.html' title='Ubuntu 的 VNC 套件'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_eG_b3F4N00g/TU-avfHF3iI/AAAAAAAAAFg/Nk8XX62-YiY/s72-c/vino-setup.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-7700135770091979948</id><published>2010-11-12T00:54:00.002+08:00</published><updated>2010-11-12T01:00:50.019+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>在 Ubuntu 上解開 x.part1.rar 分割壓縮檔</title><content type='html'>在 Windows 上可以用 &lt;a href="http://www.7-zip.org/"&gt;7-zip&lt;/a&gt; 或 &lt;a href="http://www.rarlab.com/"&gt;WinRAR&lt;/a&gt; 之類的程式來解開並組合 x.part1.rar 這類型的分割壓縮檔。在 Ubuntu 上當然也可以：&lt;br /&gt;&lt;blockquote&gt;rar e x.part1.rar&lt;/blockquote&gt;當然，要先安裝 rar：&lt;br /&gt;&lt;blockquote&gt;sudo apt-get install rar&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-7700135770091979948?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/7700135770091979948/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=7700135770091979948' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7700135770091979948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7700135770091979948'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2010/11/ubuntu-xpart1rar.html' title='在 Ubuntu 上解開 x.part1.rar 分割壓縮檔'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-3344221982384877936</id><published>2010-06-30T15:29:00.000+08:00</published><updated>2010-07-31T15:43:55.761+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>利用 dpkg 查出檔案是由哪個 package 來的</title><content type='html'>Ubuntu 是由各種 package 所組成的。也就是說，檔案系統上的檔案，大部分都可以追溯到某一個 package。例如：&lt;br /&gt;&lt;blockquote&gt;dpkg -S `which wireshark`&lt;br /&gt;dpkg -S /var/www&lt;br /&gt;dpkg -S /etc/init.d/ssh&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-3344221982384877936?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/3344221982384877936/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=3344221982384877936' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3344221982384877936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3344221982384877936'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2010/06/dpkg-package.html' title='利用 dpkg 查出檔案是由哪個 package 來的'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-7411726984166357889</id><published>2010-05-19T17:44:00.005+08:00</published><updated>2010-05-19T21:58:11.146+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu 10.04 的 Window Controls</title><content type='html'>趁工作空檔，把 Ubuntu 從 9.10 更新到 10.04。雖然花了三個多小時才完成，但還蠻順利的。&lt;br /&gt;&lt;br /&gt;更新完成之後，發現視窗右上角的縮小、放大、關閉等控制鈕竟然都不見了？原來跑到左上角去了。據說這是 Mac OS 的風格，雖然不錯看，但卻不太習慣。若你也有同感，可用以下方法改回來：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;執行 gconf-editor&lt;/li&gt;&lt;li&gt;進入 apps / metacity / general / button_layout&lt;/li&gt;&lt;li&gt;將 "maximize,minimize,close:" 改成 "menu:minimize,maximize,close" 即可&lt;/li&gt;&lt;/ol&gt;參考資料：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ftbeowulf.wordpress.com/2010/03/21/ubuntu-10-04-window-controls/"&gt;http://ftbeowulf.wordpress.com/2010/03/21/ubuntu-10-04-window-controls/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-7411726984166357889?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/7411726984166357889/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=7411726984166357889' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7411726984166357889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7411726984166357889'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2010/05/ubuntu-1004-window-controls.html' title='Ubuntu 10.04 的 Window Controls'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-6194089462412186283</id><published>2010-04-13T14:06:00.005+08:00</published><updated>2010-04-13T14:41:56.494+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜項'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>MIME HTML (.mht)</title><content type='html'>最近收過幾封朋友轉來的履歷表，看起來是直接從 104 人力銀行下載存檔的。檔名都叫 RESUME.doc，既然是 .doc，就直接用 OpenOffice 來開啟，結果卻都失敗。&lt;br /&gt;&lt;br /&gt;查看檔案內容，不像是一般我所認知的 .doc 檔。仔細研究之後，才知道這叫做 MHTML 格式，或者 .mht。規格還定義成 RFC 2557。&lt;br /&gt;&lt;br /&gt;雖然 OpenOffice 不支援此種格式，但 FireFox 加上 &lt;a href="https://addons.mozilla.org/zh-TW/firefox/addon/8051"&gt;UnMHT&lt;/a&gt; 或 &lt;a href="http://maf.mozdev.org/"&gt;Mozilla Archive Format&lt;/a&gt; 外掛之後，就能夠讀取這種檔案。不過檔名要先改成 .mht。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-6194089462412186283?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/6194089462412186283/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=6194089462412186283' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6194089462412186283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6194089462412186283'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2010/04/mime-html-mht.html' title='MIME HTML (.mht)'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-6606120746118751159</id><published>2010-04-11T21:43:00.003+08:00</published><updated>2010-04-11T22:15:10.661+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><title type='text'>好康推薦：Rainlendar</title><content type='html'>五六年前，Windows XP 還是我主要使用的作業系統時，&lt;a href="http://www.rainlendar.net/"&gt;Rainlendar&lt;/a&gt;  就是我非常喜歡的一套桌面行事曆軟體。對整天掛在電腦前面的人來說，應該會非常喜歡這套輕巧方便的行事曆軟體。&lt;br /&gt;&lt;br /&gt;將主要作業系統切換到 Ubuntu 時，Rainlendar Linux 版還在規劃當中，遂不得不放棄這套軟體。前一陣子才發現 Rainlendar Linux 版不但已經完成，而且一樣有免費的 Lite 版。&lt;br /&gt;&lt;br /&gt;在 Ubuntu 上安裝，Rainlendar 被分類在「辦公」軟體，登入之後並不會自動啟動。請按以下方式將 Rainlendar 加入自動啟動的清單之中：&lt;br /&gt;&lt;ul&gt;&lt;li&gt; &lt;span style="font-weight: bold;"&gt;主選單&lt;/span&gt; -&gt; &lt;span style="font-weight: bold;"&gt;系統&lt;/span&gt; -&gt; &lt;span style="font-weight: bold;"&gt;偏好設定&lt;/span&gt; -&gt; &lt;span style="font-weight: bold;"&gt;啟動應用程式&lt;/span&gt;&lt;/li&gt;&lt;li&gt; 按 &lt;span style="font-weight: bold;"&gt;加入&lt;/span&gt; 新增一個項目：&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;blockquote&gt;&lt;li&gt;名稱：Rainlendar2&lt;/li&gt;&lt;li&gt;指令：rainlendar2&lt;/li&gt;&lt;li&gt;備註：Customizable desktop calendar&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;不知道是不是 Rainlendar2 的錯蟲：偶而登入之後會出現以下的錯誤訊息：&lt;br /&gt;&lt;blockquote&gt;Do you want to start another instance?&lt;/blockquote&gt;雖然按 Yes 就可以繼續，但總是不方便。後來將啟動應用程式的指令改成「rainlendar2 -m」，問題好像就解決了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-6606120746118751159?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/6606120746118751159/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=6606120746118751159' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6606120746118751159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6606120746118751159'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2010/04/rainlendar.html' title='好康推薦：Rainlendar'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-5401312839242115313</id><published>2010-03-16T15:03:00.004+08:00</published><updated>2010-03-16T15:27:02.914+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜項'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>我的 alias 設定</title><content type='html'>我們可用 alias 這個指令來訂製常用的指令，非常方便。alias 設定通常是寫在 ~/.bashrc，以下是我目前的設定：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;alias diff='colordiff -x .svn'&lt;/li&gt;&lt;li&gt;alias grep='grep --color=auto --exclude-dir=.svn'&lt;/li&gt;&lt;li&gt;alias ls='ls --color=auto'&lt;/li&gt;&lt;li&gt;alias svn='LANG=C /usr/bin/colorsvn'&lt;/li&gt;&lt;/ul&gt;其中：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;diff 換成 &lt;a href="http://softsmith.blogspot.com/2009/10/colordiff.html"&gt;colordiff&lt;/a&gt;，這樣顯示出來的結果比較容易判讀。另外，因為常有 Subversion 的專案，所以排除 .svn 這個不需比較的目錄。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;grep 比較單純，預設就有顏色顯示。我只是加上排除 .svn 的設定。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ls 預設的就很好用了。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;svn 換成 &lt;a href="http://softsmith.blogspot.com/2009/12/colorsvn-svn.html"&gt;colorsvn&lt;/a&gt;，這樣顯示出來的結果比較容易判讀。&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-5401312839242115313?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/5401312839242115313/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=5401312839242115313' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5401312839242115313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5401312839242115313'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2010/03/alias.html' title='我的 alias 設定'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-3975784205658513273</id><published>2010-03-04T01:30:00.011+08:00</published><updated>2010-05-27T09:27:38.045+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSH'/><title type='text'>用 ssh tunnel 建立分身</title><content type='html'>網路上可找到很多用 ssh tunnel 突破防火牆的 &lt;a href="http://www.google.com.tw/search?q=ssh+tunnel"&gt;文章&lt;/a&gt;。此概念其實很簡單：若你能用 ssh 從 host L 連到 host R，那你就可以「人在 host L，但分身在 host R」或「人在 host R，但分身在 host L」。&lt;br /&gt;&lt;br /&gt;舉例來說，公司的內部網站只能從公司內網的電腦連接 (如 host L)；家中的內部網站只能從家庭網路的電腦連接 (如 host R)。若 host L 能 ssh 連到 host R，你在公司時就可以透過 host L 派遣分身到 host R，由 host R 去連接家中的網路；反之亦然 。&lt;br /&gt;&lt;br /&gt;若要由 host L 派遣分身到 host R，就要在 host L 執行以下指令。這樣，連到 host L 的 port 5678 就相當於從 host R 連結到 host X：&lt;br /&gt;&lt;blockquote&gt;ssh -Nf -L 5678:host-X:1234 user@host-R&lt;/blockquote&gt;若要由 host R 派遣分身到 host L，就要在 host L 執行以下指令。這樣，連到 host R 的 port 5678 就相當於從 host L 連結到 host X：&lt;br /&gt;&lt;blockquote&gt;ssh -Nf -R 5678:host-X:1234 user@host-R&lt;br /&gt;&lt;/blockquote&gt;在實際的環境中，連結通常是單向的。當你人在 host R 時，並不一定能夠登入 host L 去建立通道。因此，你必須先在公司 (host L) 建好 ssh tunnel，然後回家時才能透過 host R 派遣分身。&lt;br /&gt;&lt;br /&gt;在實際的環境中，連結通常也是脆弱的。你辛辛苦苦在 host L 建立的 ssh tunnel 可能因為各種原因斷掉而無法使用。要解此問題，可以利用 autossh。autossh 能夠偵測通道是否中斷，並在中斷時自動重建立。安裝方法：&lt;br /&gt;&lt;blockquote&gt;apt-get install autossh&lt;/blockquote&gt;此時建立 ssh tunnel 的指令變成：&lt;br /&gt;&lt;blockquote&gt;autossh -f -M 20000 \&lt;br /&gt;        -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" \&lt;br /&gt;        -N -R 5678:host-X:1234 user@host-R&lt;/blockquote&gt;其中 -M 20000 以及後續的 -o 是 autossh 偵測 tunnel 是否斷掉的參數。&lt;br /&gt;&lt;br /&gt;因為安全的考量，"&lt;span style="font-family:courier new;"&gt;-R 5678:host-X:1234&lt;/span&gt;" 這種設定只允許從 host R 連接到 localhost 的 5678，這代表你無法從其他機器透過 host R 來派遣分身。以下方法，可以關閉此限制。&lt;br /&gt;&lt;ol&gt;&lt;li&gt;修改 host R 的 /etc/ssh/sshd_config，在其中新增一行 "&lt;span style="font-family:courier new;"&gt;GatewayPorts clientspecified&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;在 host R 執行 "&lt;span style="font-family:courier new;"&gt;sudo /etc/init.d/ssh reload"&lt;/span&gt;&lt;/li&gt;&lt;li&gt;在 host L 將 "&lt;span style="font-family:courier new;"&gt;-R 5678:host-X:1234&lt;/span&gt;" 改成 "&lt;span style="font-family:courier new;"&gt;-R *:5678:host-X:1234&lt;/span&gt;" 然後重新執行前述 ssh 或 autossh 指令&lt;/li&gt;&lt;/ol&gt;PS: 若重新開機後也要保持這個 tunnel 不斷，可將 authssh 指令放在 /etc/rc.local。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-3975784205658513273?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/3975784205658513273/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=3975784205658513273' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3975784205658513273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3975784205658513273'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2010/03/ssh-tunnel.html' title='用 ssh tunnel 建立分身'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-8404557429095885829</id><published>2010-03-01T01:06:00.001+08:00</published><updated>2010-03-06T21:29:38.937+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSH'/><title type='text'>指定授權金鑰，SSH 登入不用密碼</title><content type='html'>工作時，一定有幾部 server 是你經常用 ssh 登入的。每次都老老實實輸入密碼是個好習慣，但在安全無虞的情況下，若能跳過輸入密碼，的確非常方便。&lt;br /&gt;&lt;br /&gt;假設你要從 host-C 以不用密碼的方式登入 host-S，可按以下步驟來進行：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;在 host-C 執行 ssh-keygen。問 passphrase 時直接 Enter，執行完會產生幾個檔案：&lt;span style="font-weight: bold;"&gt;private key&lt;/span&gt; (~/.ssh/id_rsa) 和 &lt;span style="font-weight: bold;"&gt;public key&lt;/span&gt; (~/.ssh/id_rsa.pub)&lt;/li&gt;&lt;li&gt;Private key 請保管好，不要外流。然後將 public key 的內容加在 host-S 的 ~/.ssh/authorized_keys 之中 (若原本沒有此檔，就自己建立空檔)&lt;/li&gt;&lt;/ol&gt;就這麼簡單。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-8404557429095885829?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/8404557429095885829/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=8404557429095885829' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8404557429095885829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8404557429095885829'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2010/03/ssh.html' title='指定授權金鑰，SSH 登入不用密碼'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-7821984972315001336</id><published>2010-02-07T17:02:00.004+08:00</published><updated>2010-02-07T17:20:16.687+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Eclipse 有些 button 在 Ubuntu 底下不能按</title><content type='html'>Android 的熱潮無法擋，連我都想試試看。買了本書按圖索驥，開始 Android 的探索之旅。&lt;br /&gt;&lt;br /&gt;首先要安裝的是 JDK，在 Ubuntu 上有 OpenJDK 和 Sun JDK 兩種選擇。上網查了一下，OpenJDK 有成功的案例，而且沒有人說不行。基於支持 OPEN 的理念，決定採用 OpenJDK，這也是 Ubuntu 官方支持的版本。&lt;br /&gt;&lt;br /&gt;接下來要安裝 Eclipse 這套久仰大名的 IDE。說 "安裝" 不太恰當，其實只是解壓縮放到自己喜歡的目錄即可。一切都很順利，直到開始執行 Eclipse 之後。&lt;br /&gt;&lt;br /&gt;我發現有些 button 沒有作用，特別是那些 Apply、OK 這類重要的 button (必須先將 focus 移到該 button 然後按鍵盤的 Enter 才能動作)。一開始懷疑是 OpenJDK 與 Eclipse 不相容，上網 google 之後，才發現以下解法：&lt;br /&gt;&lt;blockquote&gt;export GDK_NATIVE_WINDOWS=true&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-7821984972315001336?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/7821984972315001336/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=7821984972315001336' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7821984972315001336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7821984972315001336'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2010/02/eclipse-button-ubuntu.html' title='Eclipse 有些 button 在 Ubuntu 底下不能按'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-3801591064614252477</id><published>2010-02-06T16:21:00.003+08:00</published><updated>2010-02-06T16:35:07.121+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜項'/><title type='text'>用 shell script 產生全是 0xFF 的檔案</title><content type='html'>要產生全是 0x00 的檔案很容易，借助 /dev/zero 或 /dev/full 即可。要產生全是 0xFF 的檔案就要借助其他工具。目前找到以下方法 (allone.dat 為輸出檔；1024 為檔案大小，可自行調整)：&lt;br /&gt;&lt;blockquote&gt;awk 'BEGIN { while (1) printf("%c", 255) }' \&lt;br /&gt; | dd of=allone.dat bs=1 count=1024&lt;/blockquote&gt;PS: 你問我為什麼要產生這種檔案？是為了填補 flash ROM 的內容。Flash ROM 的空的狀態就是 0xFF。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-3801591064614252477?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/3801591064614252477/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=3801591064614252477' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3801591064614252477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3801591064614252477'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2010/02/shell-script-0xff.html' title='用 shell script 產生全是 0xFF 的檔案'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-2717476948109334726</id><published>2010-01-17T14:24:00.002+08:00</published><updated>2010-01-17T14:45:06.684+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Bless -- Hex Editor for Gtk#</title><content type='html'>做軟體開發工作，難免會需要檢視或編輯一些二進位檔案 (binary file)。若只是單純檢視，用 hexdump 可能就足夠；若需要進行簡單的修改，那我推薦 hexedit。上述兩隻程式都是文字模式，所以操作起來有不少限制。&lt;br /&gt;&lt;br /&gt;GUI 版本的 binary editor 我推薦 Bless，雖然版本只是 0.6.0，但剪下、複製、貼上等功能都很齊全，而且能同時開啟很多個檔案，非常方便。&lt;br /&gt;&lt;br /&gt;另有一個 GHex 也是 GUI 版的 binary editor。初步看來 Ubuntu 對此程式的支援好像比較多，但用起來不若 Bless 那麼好用。最致命的缺點是無法調成每十六個位元組一行，這使得在對照一些資料格式的時候，非常不容易進行。&lt;br /&gt;&lt;br /&gt;上述提到的程式所在的 package 如下：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;hexdump: &lt;span style="font-style: italic;"&gt;bsdmainutils&lt;/span&gt;&lt;/li&gt;&lt;li&gt;hexedit: &lt;span style="font-style: italic;"&gt;hexedit&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Bless: &lt;span style="font-style: italic;"&gt;bless&lt;/span&gt;&lt;/li&gt;&lt;li&gt;GHex: &lt;span style="font-style: italic;"&gt;ghex&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-2717476948109334726?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/2717476948109334726/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=2717476948109334726' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2717476948109334726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2717476948109334726'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2010/01/bless-hex-editor-for-gtk.html' title='Bless -- Hex Editor for Gtk#'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-7001262354004496592</id><published>2009-12-24T10:24:00.006+08:00</published><updated>2009-12-24T10:50:31.572+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><title type='text'>Colorsvn 讓 SVN 一目了然</title><content type='html'>就像 &lt;a href="http://softsmith.blogspot.com/2009/10/colordiff.html"&gt;colordiff&lt;/a&gt; 一樣，小小顏色卻能大大提高 diff 檔的可讀性。習慣用命令列  svn 指令的人應該會喜歡 colorsvn (&lt;a href="http://colorsvn.tigris.org/"&gt;http://colorsvn.tigris.org&lt;/a&gt;)：&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://colorsvn.tigris.org/colorsvn-0.3.2.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 289px;" src="http://colorsvn.tigris.org/colorsvn-0.3.2.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ubuntu 的正式套件目前還沒有收錄 colorsvn，可用以下方法安裝：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;到以下位置下載 .rpm 檔：&lt;br /&gt;&lt;a href="http://www.console-colors.de/index.php?n=ConsColors.Downloads"&gt;http://www.console-colors.de/index.php?n=ConsColors.Downloads&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;利用 alien 來安裝 .rpm 檔：&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo alien -i colorsvn-0.3.2-1.noarch.rpm&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-7001262354004496592?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/7001262354004496592/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=7001262354004496592' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7001262354004496592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7001262354004496592'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/12/colorsvn-svn.html' title='Colorsvn 讓 SVN 一目了然'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-5593641553274365094</id><published>2009-11-18T08:02:00.017+08:00</published><updated>2011-02-16T09:13:32.410+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='Trac'/><title type='text'>Subversion 的 Log</title><content type='html'>使用 Subversion 之類的 version control system 時，commit log 是非常重要的一項資訊。在你追查歷史時，可以幫助你回復記憶或幫助別人迅速理解 changeset 的目的。&lt;br /&gt;&lt;br /&gt;但人吃五穀雜糧長大，打字難免會錯。因此，就有修改 commit log 的需求產生。Subversion 安裝預設是無法修改 commit log 的。以下是開放此項功能的方法 ($REPOS 代表 repository 的目錄)：&lt;br /&gt;&lt;blockquote&gt;cd $REPOS/hooks&lt;br /&gt;mv pre-revprop-change.tmpl pre-revprop-change&lt;br /&gt;chmod +x pre-revprop-change&lt;/blockquote&gt;若設定正確，就可以用以下指令來修改任一版本的 log：&lt;br /&gt;&lt;blockquote&gt;svn pe -r 1234 --revprop svn:log $REPOS&lt;/blockquote&gt;或&lt;br /&gt;&lt;blockquote&gt;svn ps -r 1234 --revprop svn:log "New commit log" $REPOS&lt;/blockquote&gt;若你恰好跟我一樣，也用 Trac 搭配 Subversion 時，正確的 log 更重要。因為 log 可用來搜尋 changeset。不過 Trac 上的 log 是你 commit 時，Trac 偷偷複製的。你改了 Subversion 的 log，Trac 並不知道，所以 Trac 上的 log 還是舊的。&lt;br /&gt;&lt;br /&gt;解決方法是要求 Trac 重新校正 log：&lt;br /&gt;&lt;blockquote&gt;# Trac 0.12 以前&lt;br /&gt;trac-admin $PROJENV resync 1234&lt;br /&gt;# Trac 0.12 及以後&lt;br /&gt;trac-admin $PROJENV repository resync "" 1234&lt;br /&gt;&lt;/blockquote&gt;其中 $PROJENV 是 Trac 的 environment 位置；1234 是 revision number，若你改了很多 log，省略這個參數就可以全部一起校正。&lt;br /&gt;&lt;br /&gt;每次手動校正 log 很麻煩，管理也不方便。所以可以將上述指令寫在另外一個 Subversion 的 hook script -- post-revprop-change：&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;REPOS="$1"&lt;br /&gt;REV="$2"&lt;br /&gt;USER="$3"&lt;br /&gt;PROPNAME="$4"&lt;br /&gt;ACTION="$5"&lt;br /&gt;TRAC_ENV="..."&lt;br /&gt;&lt;br /&gt;if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then&lt;br /&gt;   PYTHON_EGG_CACHE=/tmp trac-admin $TRAC_ENV repository resync "" $2&lt;br /&gt;   # 若你的 Trac 比 0.12 版舊，請改用以下這一行&lt;br /&gt;   # PYTHON_EGG_CACHE=/tmp trac-admin $TRAC_ENV resync $2&lt;br /&gt;   exit 0;&lt;br /&gt;fi&lt;/span&gt;&lt;/blockquote&gt;注意！上面的 TRAC_ENV 要設定到對應此 repository 的 Trac environment。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-5593641553274365094?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/5593641553274365094/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=5593641553274365094' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5593641553274365094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5593641553274365094'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/11/subversion-log.html' title='Subversion 的 Log'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-2493175544649977424</id><published>2009-11-01T00:30:00.009+08:00</published><updated>2009-11-01T02:46:57.148+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>由 Ubuntu 9.04 升級到 9.10 很不平順</title><content type='html'>由 Ubuntu 9.04 升級到 9.10 很簡單：執行 &lt;span style="font-weight: bold;"&gt;系統&lt;/span&gt;-&gt;&lt;span style="font-weight: bold;"&gt;管理&lt;/span&gt;-&gt;&lt;span style="font-weight: bold;"&gt;更新管理員&lt;/span&gt;，應該會看到 &lt;span style="font-weight: bold;"&gt;有新的發行版&lt;/span&gt;，只要按 &lt;span style="font-weight: bold;"&gt;升級&lt;/span&gt; 就可以將 9.04 升級到 9.10。&lt;br /&gt;&lt;br /&gt;但升級後發現中文介面不見了，變成全英文介面。這倒還好，反正英文介面也是可以看中文文件。比較麻煩的是無法輸入中文。後來摸索了很久，終於研究出把中文介面找回來的方法：開啟 &lt;span style="font-weight: bold;"&gt;System &lt;/span&gt;-&gt;&lt;span style="font-weight: bold;"&gt; Administration &lt;/span&gt;-&gt; &lt;span style="font-weight: bold;"&gt;Synaptic Package Manager&lt;/span&gt;，點選 &lt;span style="font-weight: bold;"&gt;Installed&lt;/span&gt; 然後在 &lt;span style="font-weight: bold;"&gt;Quick search&lt;/span&gt; 輸入「hant」。這樣會列出所有已安裝的 Traditional Chinese 相關套件，全選這些套件然後 &lt;span style="font-weight: bold;"&gt;Mark for Reinstallation&lt;/span&gt; 再 &lt;span style="font-weight: bold;"&gt;Apply&lt;/span&gt; 即可重新安裝這些套件，重新開機之後便找回中文介面。&lt;br /&gt;&lt;br /&gt;不過，問題還沒有完全解決。9.10 的輸入法引擎由 SCIM 改成 IBUS，我習慣用酷音輸入法搭配許氏鍵盤。但這種組合似乎還有 bug：會自動切回標準鍵盤。每次發生這種現象之後，就要重設一次鍵盤。又摸索了一陣子，終於找到解決方法：換回 SCIM。方法如下：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;系統&lt;/span&gt;-&gt;&lt;span style="font-weight: bold;"&gt;管理&lt;/span&gt;-&gt;&lt;span style="font-weight: bold;"&gt;語言支援&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;鍵盤輸入系統 = scim&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;另外，升級到 9.10 也幫我解決不少 9.04 的問題：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;不支援 Asus 某款 NB 上的  Fn 功能鍵&lt;/li&gt;&lt;li&gt;不支援上述 NB 的 Realtek High-Definition 音效控制晶片&lt;/li&gt;&lt;li&gt;Minicom 搭配某款 USB-to-serial adapter (&lt;span style="font-family: courier new;"&gt;/dev/ttyUSB0&lt;/span&gt;)  啟動時會有亂碼&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;總結：升級過程雖然有點不平順，但我還是 Ubuntu 的衷心擁護者，強烈推薦大家轉換到這個開放的平台。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-2493175544649977424?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/2493175544649977424/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=2493175544649977424' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2493175544649977424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2493175544649977424'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/11/ubuntu-904-910.html' title='由 Ubuntu 9.04 升級到 9.10 很不平順'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-5336617593701286880</id><published>2009-10-16T18:06:00.002+08:00</published><updated>2009-10-16T18:16:45.447+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><title type='text'>CuteCom 的 Input History</title><content type='html'>CuteCom 是 Linux 上相當好用的 terminal emulator 之一 (請參考 &lt;a href="http://softsmith.blogspot.com/2008/05/ubuntu-terminal-emulator.html"&gt;這裡&lt;/a&gt;)。他最大的特色是有一個 input history，會保存最近輸入過的指令，隨時可以點選取用。&lt;br /&gt;&lt;br /&gt;比較討厭的是，輸入錯誤的指令也會佔據有限的 history 空間，令人想除之而後快。不過 CuteCom 似乎沒有提供刪除 history 的介面。後來找到一個解法，直接編輯設定檔：&lt;br /&gt;&lt;blockquote&gt;vi .config/Unknown\ Organization.conf&lt;/blockquote&gt;修改最底下那行 History= 就可以了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-5336617593701286880?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/5336617593701286880/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=5336617593701286880' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5336617593701286880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5336617593701286880'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/10/cutecom-input-history.html' title='CuteCom 的 Input History'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-410976576866234733</id><published>2009-10-16T08:15:00.003+08:00</published><updated>2010-11-12T08:56:41.037+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux Programming'/><title type='text'>超好用的 colordiff</title><content type='html'>如果你跟我一樣習慣用 diff 來比較前後版程式修改了哪些地方，你一定也會喜歡 colordiff。顧名思義，它是有顏色的 diff -- 以不同顏色來顯示刪除或新增的地方，這讓 diff 的結果一目了然。&lt;br /&gt;&lt;br /&gt;安裝方法：&lt;br /&gt;&lt;blockquote&gt;sudo apt-get install colordiff&lt;/blockquote&gt;使用方式：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;colordiff file1 file2&lt;/li&gt;&lt;li&gt;colordiff -u file1 file2 | more&lt;/li&gt;&lt;li&gt;colordiff -u file1 file2 | less -R&lt;/li&gt;&lt;li&gt;svn diff file1 | colordiff&lt;/li&gt;&lt;/ul&gt;若不想改變平常下指令的習慣，可以這樣做：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;在 .bashrc 加上一條 alias diff='colordiff'&lt;/li&gt;&lt;li&gt;將 .subversion/config 的 diff-cmd 設成 colordiff&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;這樣以後 diff 和 svn diff 就直接變成彩色版了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-410976576866234733?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/410976576866234733/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=410976576866234733' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/410976576866234733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/410976576866234733'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/10/colordiff.html' title='超好用的 colordiff'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-4388822030718438606</id><published>2009-09-13T23:50:00.005+08:00</published><updated>2009-10-21T19:47:42.420+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VirtualBox'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>在 Ubuntu VM 上安裝 VirtualBox Guest Additions</title><content type='html'>VirtualBox Guest Additions 能讓 guest OS 和 host OS 之間更緊密合作，也提供 guest OS 許多額外的功能 (例如和 host OS 分享資料夾)。想享受這些好處，請參考如下步驟安裝 VirtualBox Guest Additions。&lt;br /&gt;&lt;br /&gt;首先，啟動 guest OS，並在所屬視窗的功能表上點選 &lt;span style="font-weight: bold;"&gt;Devices&lt;/span&gt;，然後再點 &lt;span style="font-weight: bold;"&gt;Install Guest Additions&lt;/span&gt;。注意！這並不會啟動安裝的動作，而是將安裝光碟插入 guest OS 的光碟機中。你必須手動執行安裝的指令。請用以下指令看看安裝光碟的內容：&lt;br /&gt;&lt;blockquote&gt;sudo -s&lt;br /&gt;ls -la /media/cdrom&lt;br /&gt;&lt;/blockquote&gt;註：若看不到任何東西，表示你的 Ubuntu 沒有自動幫你 mount 剛插入的光碟。請用以下指令自己來：&lt;br /&gt;&lt;blockquote&gt;mount /dev/cdrom /media/cdrom&lt;/blockquote&gt;若一切順利，你應該會看到幾個 VBox 開頭的檔案。然後，請執行以下指令：&lt;br /&gt;&lt;blockquote&gt;/media/cdrom/VBoxLinuxAdditions-x86.run&lt;/blockquote&gt;如果你的 guest Ubuntu 才剛安裝完畢，上述指令應該會提醒你缺了哪些東西以至於無法安裝。以下是我剛安裝好 jeos-8.04.3-jeos-i386 之後所得到的「提醒」：&lt;br /&gt;&lt;blockquote&gt;VirtualBox 3.0.6 Guest Additions installation&lt;br /&gt;Please install GNU make.&lt;br /&gt;Please install the build and header files for your current Linux kernel.&lt;br /&gt;Ther current kernel version is 2.6.24-24-virtual&lt;br /&gt;Please install the GNU compiler.&lt;br /&gt;Problems were found which would prevent the Guest Additions from installing.&lt;br /&gt;Please correct these problems and try again.&lt;/blockquote&gt;此時你必須發揮見招拆招的精神把這些問題解決：&lt;br /&gt;&lt;blockquote&gt;apt-get install make&lt;br /&gt;apt-get install linux-headers-2.6.24-24-virtual&lt;br /&gt;apt-get install gcc&lt;/blockquote&gt;將缺少的東西補足之後，再執行一次 VBoxLinuxAdditions-x86.run 即可完成安裝的動作。&lt;br /&gt;&lt;br /&gt;Reboot 之後，執行以下指令應該可以看到 guest OS 已經載入幾個 VirtualBox 的 kernel modules (如 vboxvfs、vboxadd 等)：&lt;br /&gt;&lt;blockquote&gt;lsmod | grep vbox&lt;br /&gt;&lt;/blockquote&gt;恭喜！這代表你已經大功告成了！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-4388822030718438606?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/4388822030718438606/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=4388822030718438606' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/4388822030718438606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/4388822030718438606'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/09/ubuntu-vm-virtualbox-guest-additions.html' title='在 Ubuntu VM 上安裝 VirtualBox Guest Additions'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-3548348052301423471</id><published>2009-08-28T16:09:00.002+08:00</published><updated>2009-08-28T16:30:38.254+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>在 Ubuntu 上設定 PPPoE 連線</title><content type='html'>在 Ubuntu 上設定 PPPoE 連線非常簡單，只要執行 pppoeconf 即可。它會一步一步詢問你所需要的設定，程序大致如下 (若要中斷程序，可以按 Esc)：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;首先找出機器上所有的網卡，如果沒有遺漏就可以進到下一步&lt;/li&gt;&lt;li&gt;接下來會自動偵測這些網卡的連線上是否有 PPPoE 伺服器 (PPPoE Access Concentrator)。若 MODEM 有開，網路也接對，應該會自動找到連接 PPPoE 的網卡&lt;/li&gt;&lt;li&gt;接下來會詢問你是否要用 noauth 與 defaultroute 兩個選項。一般來說，應該回答「是」&lt;/li&gt;&lt;li&gt;再來是輸入帳號和密碼，請查閱 ISP 給你的帳號資料卡&lt;/li&gt;&lt;li&gt;接下來會問你是否要使用 ISP 配發的 DNS 伺服器。一般來說，應該回答「是」&lt;/li&gt;&lt;li&gt;再來會詢問是否要限制 MSS。一般來說，應該回答「是」&lt;/li&gt;&lt;li&gt;接下來會問是否想在開機的時候就啟動連線。可看自己的需求來回答&lt;/li&gt;&lt;/ol&gt;順利的話，完成上述步驟時，PPPoE 應該就已經連接成功了。有以下指令可以操控連線：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;plog =&gt; 查看 PPPoE 連線最近的 log，故障排除時很有用&lt;/li&gt;&lt;li&gt;poff =&gt; 斷線&lt;/li&gt;&lt;li&gt;pon dsl-provider =&gt; 啟動上述設定的連線&lt;/li&gt;&lt;li&gt;ifconfig ppp0 =&gt; 查看 PPPoE 連線的結果&lt;/li&gt;&lt;/ul&gt;內行一點的人，可以編輯 /etc/ppp/peers/dsl-provider 來微調上述設定。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-3548348052301423471?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/3548348052301423471/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=3548348052301423471' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3548348052301423471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3548348052301423471'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/08/ubuntu-pppoe.html' title='在 Ubuntu 上設定 PPPoE 連線'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-6449100583245822716</id><published>2009-08-21T14:34:00.002+08:00</published><updated>2009-08-21T14:59:19.524+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMware Player'/><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><title type='text'>在 Ubuntu 上安裝 VMware Player</title><content type='html'>首先到以下位置下載 VMware Player。填完註冊表格之後，便可選擇要哪一種平台的哪一個版本，請選擇 for Linux (.rpm)：&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://www.vmware.com/download/player/"&gt;http://www.vmware.com/download/player/&lt;/a&gt;&lt;/blockquote&gt;截至發文的時間，最新的版本是 2.5.3。若你有安裝舊版本，請用以下指令移除：&lt;br /&gt;&lt;blockquote&gt;$ LANG=C rpm -e VMware-Player&lt;/blockquote&gt;若用以下指令安裝，會有「相依性偵測失敗：/bin/sh 被 VMware-Player-2.5.3-185404.i386 所需要」的錯誤發生：&lt;br /&gt;&lt;blockquote&gt;$ rpm -Uhv VMware-Player-2.5.3-185404.i386.rpm&lt;/blockquote&gt;請改用以下指令跳過相依性檢查，就可以安裝成功：&lt;br /&gt;&lt;blockquote&gt;$ LANG=C rpm --nodeps -Uhv VMware-Player-2.5.3-185404.i386.rpm&lt;/blockquote&gt;安裝成功之後，可以在系統工具選單找到 VMware Player 的啟動圖示。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-6449100583245822716?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/6449100583245822716/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=6449100583245822716' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6449100583245822716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6449100583245822716'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/08/ubuntu-vmware-player.html' title='在 Ubuntu 上安裝 VMware Player'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-3371247631506496113</id><published>2009-07-27T14:41:00.003+08:00</published><updated>2009-07-27T15:03:09.067+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming Language'/><title type='text'>C/C++ Predefined Macros</title><content type='html'>寫程式經常會用到編譯器預先定義的巨集 (Predefined Macros)，例如：__FILE__、__LINE__、__DATE__、__TIME__、__func__ 等。這些巨集有些是標準 C/C++ 語言所定義的，有些則是編譯器自行定義的。使用 GNU C/C++ 的人，可參考以下資料：&lt;br /&gt;&lt;a href="http://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html#Predefined-Macros"&gt;&lt;/a&gt;&lt;blockquote&gt;&lt;a href="http://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html#Predefined-Macros"&gt;Predefined Macros (GNU C/C++)&lt;/a&gt;&lt;/blockquote&gt;這份資料所提到的 System-specific Predefined Macros 是指針對不同的系統平台 (arm、mips 等)，編譯器所預先定義的特殊巨集。若想直接看看這些預先定義的巨集，可執行以下指令：&lt;br /&gt;&lt;blockquote&gt;echo | gcc -dM -E - | sort&lt;br /&gt;&lt;/blockquote&gt;使用 Microsoft 系列編譯器的人，可參考以下資料：&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/b0084kay%28VS.80%29.aspx"&gt;Predefined Macros (MSDN)&lt;/a&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-3371247631506496113?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/3371247631506496113/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=3371247631506496113' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3371247631506496113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3371247631506496113'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/07/cc-predefined-macros.html' title='C/C++ Predefined Macros'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-3260129211816087096</id><published>2009-07-22T10:04:00.004+08:00</published><updated>2011-02-07T14:32:05.174+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>兩個管理 init script 的指令: service、rcconf</title><content type='html'>在 Ubuntu 上安裝一些 daemon (如 apache、ushare 等) 後，都要靠 init script 來控制。有兩個管理 init script 的指令一定要會用：service 和 rcconf。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;service&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;用來啟動、停止和檢查這些 daemon 的狀態。例如：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;service --status-all =&gt; 列出目前所有 daemon 的狀態&lt;/li&gt;&lt;li&gt;sudo service XXX start =&gt; 馬上啟動 XXX daemon&lt;/li&gt;&lt;li&gt;sudo service XXX stop =&gt; 馬上關閉 XXX daemon&lt;/li&gt;&lt;li&gt;service XXX status =&gt; 檢查 XXX 的狀態&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;rcconf&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;用來控制系統開機時是否要執行這些 daemon。例如：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;sudo rcconf --list =&gt; 列出目前所有 daemon 的啟動設定&lt;/li&gt;&lt;li&gt;sudo rcconf --on XXX =&gt; 設定 XXX daemon 開機時自動啟動&lt;/li&gt;&lt;li&gt;sudo rcconf --off XXX =&gt; 設定 XXX daemon 開機時&lt;span style="font-weight: bold;"&gt;不&lt;/span&gt;自動啟動&lt;/li&gt;&lt;/ul&gt; 若你的系統沒有 rcconf 指令，請按以下方式安裝：&lt;br /&gt;&lt;blockquote&gt;sudo apt-get install rcconf&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-3260129211816087096?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/3260129211816087096/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=3260129211816087096' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3260129211816087096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3260129211816087096'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/07/init-script-servicercconf.html' title='兩個管理 init script 的指令: service、rcconf'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-8325746868065753750</id><published>2009-06-14T15:11:00.002+08:00</published><updated>2009-06-14T15:26:03.809+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>在 Ubuntu Desktop 上安裝 TFTP Server</title><content type='html'>其實，以前就記下安裝 TFTP server 的方式 (參看 &lt;a href="http://softsmith.blogspot.com/2008/01/ubuntu-710-jeos-virtual-appliance.html"&gt;這裡&lt;/a&gt;)。但標題不對，所以自己也忘了。以下重新整理一遍。&lt;br /&gt;&lt;br /&gt;首先安裝 tftpd package：&lt;br /&gt;&lt;blockquote&gt;sudo apt-get install tftpd&lt;/blockquote&gt;接著查看並視需要修改 /etc/inetd.conf。與 tftpd 有關的預設值如下：&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;tftp  dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp&lt;/span&gt;&lt;/blockquote&gt;建議直接用預設值，所以你必須建立 /srv/tftp 來存放相關資料：&lt;br /&gt;&lt;blockquote&gt;mkdir -p /srv/tftp&lt;br /&gt; chmod 777 /srv/tftp&lt;br /&gt; &lt;/blockquote&gt;最後，重新啟動 inetd：&lt;br /&gt;&lt;blockquote&gt;/etc/init.d/openbsd-inetd restart&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-8325746868065753750?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/8325746868065753750/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=8325746868065753750' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8325746868065753750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8325746868065753750'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/06/ubuntu-desktop-tftp-server.html' title='在 Ubuntu Desktop 上安裝 TFTP Server'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-6995925658201978255</id><published>2009-05-15T00:16:00.017+08:00</published><updated>2009-05-15T09:08:58.813+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming Language'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>String::CRC::Cksum module for 64-bit Perl</title><content type='html'>When I used the following command to install String::CRC::Cksum on my 64-bit Ubuntu,&lt;br /&gt;&lt;blockquote&gt;perl -MCPAN -e "install String::CRC::Cksum"&lt;/blockquote&gt;the following error message is shown and perl rejected to install it:&lt;br /&gt;&lt;blockquote&gt;Use of uninitialized value in bitwise xor (^) at at /usr/local/share/perl/5.10.0/String/CRC/Cksum.pm line 73.&lt;br /&gt;&lt;/blockquote&gt;I managed to google the solution but in vain. Finally, I realized the problem is caused by 64-bit integer on my 64-bit Ubuntu.&lt;br /&gt;&lt;br /&gt;To fix this problem, force to install String::CRC::Cksum module first:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size:80%;"&gt;&lt;pre&gt;$ sudo cpan&lt;br /&gt;Terminal does not support AddHistory.&lt;br /&gt;&lt;br /&gt;cpan shell -- CPAN exploration and modules installation (v1.9205)&lt;br /&gt;ReadLine support available (maybe install Bundle::CPAN or Bundle::CPANxxl?)&lt;br /&gt;&lt;br /&gt;cpan[1]&amp;gt; force install String::CRC::Cksum&lt;/pre&gt;&lt;/span&gt;&lt;/blockquote&gt;and then patch it (&lt;tt&gt;/usr/local/share/perl/5.10.0/String/CRC/Cksum.pm&lt;/tt&gt;, "chmod" first! it's read-only):&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size:80%;"&gt;&lt;pre&gt;--- Cksum.pm    2009-05-15 00:33:20.000000000 +0800&lt;br /&gt;+++ Cksum.pm    2009-05-15 00:25:36.000000000 +0800&lt;br /&gt;@@ -70,7 +70,7 @@&lt;br /&gt;&lt;br /&gt;         for(my $i = 0; $i &lt; $n; ++$i) {&lt;br /&gt;             my $c = unpack 'C', substr $_[0], $i, 1;&lt;br /&gt;-            $cksum = ($cksum &lt;&lt; 8) ^ $crctab[($cksum &gt;&gt; 24) ^ $c];&lt;br /&gt;+            $cksum = ($cksum &lt;&lt; 8) ^ $crctab[(($cksum &gt;&gt; 24)&amp;amp;255) ^ $c];&lt;br /&gt;             ++$size;&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;@@ -111,7 +111,7 @@&lt;br /&gt;     while($size != 0) {&lt;br /&gt;         my $c = $size &amp;amp; 0377;&lt;br /&gt;         $size &gt;&gt;= 8;&lt;br /&gt;-        $cksum = ($cksum &lt;&lt; 8) ^ $crctab[($cksum &gt;&gt; 24) ^ $c];&lt;br /&gt;+        $cksum = ($cksum &lt;&lt; 8) ^ $crctab[(($cksum &gt;&gt; 24)&amp;amp;255) ^ $c];&lt;br /&gt;     }&lt;br /&gt;     $cksum = ~ $cksum;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-6995925658201978255?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/6995925658201978255/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=6995925658201978255' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6995925658201978255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6995925658201978255'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/05/stringcrccksum-module-for-64-bit-perl.html' title='String::CRC::Cksum module for 64-bit Perl'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-2804507932330159529</id><published>2009-05-10T16:02:00.007+08:00</published><updated>2009-06-04T23:14:27.602+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>將 Ubuntu 從 8.04 升級到 9.04</title><content type='html'>Ubuntu 9.04 已經出來一陣子了，口碑還不錯。而 Ubuntu 8.04 是 LTS 版 (Long Term Support)，所以不能直接升級到 9.04，必須用以下方法來升級。&lt;br /&gt;&lt;br /&gt;首先要修改一項和更新有關的設定 (&lt;span style="font-weight: bold;"&gt;系統&lt;/span&gt;-&gt;&lt;span style="font-weight: bold;"&gt;管理&lt;/span&gt;-&gt;&lt;span style="font-weight: bold;"&gt;軟體來源&lt;/span&gt;-&gt;&lt;span style="font-weight: bold;"&gt;更新&lt;/span&gt;)：將 &lt;span style="font-weight: bold;"&gt;顯示新的發行版本發布&lt;/span&gt; 從 &lt;span style="font-weight: bold;"&gt;長期支援的發布&lt;/span&gt; 改為 &lt;span style="font-weight: bold;"&gt;正常發布&lt;/span&gt;：&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eG_b3F4N00g/SgaMIW-BNeI/AAAAAAAAAEU/5nMZg9yulRU/s1600-h/Screenshot-%E8%BB%9F%E9%AB%94%E4%BE%86%E6%BA%90-1.png"&gt;&lt;img style="cursor: pointer; width: 396px; height: 400px;" src="http://3.bp.blogspot.com/_eG_b3F4N00g/SgaMIW-BNeI/AAAAAAAAAEU/5nMZg9yulRU/s400/Screenshot-%E8%BB%9F%E9%AB%94%E4%BE%86%E6%BA%90-1.png" alt="" id="BLOGGER_PHOTO_ID_5334104883899479522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;接下來，執行更新管理員 (&lt;span style="font-weight: bold;"&gt;系統&lt;/span&gt;-&gt;&lt;span style="font-weight: bold;"&gt;管理&lt;/span&gt;-&gt;&lt;span style="font-weight: bold;"&gt;更新管理員&lt;/span&gt;)，應該會看到 &lt;span style="font-weight: bold;"&gt;有新的發行版&lt;/span&gt;，只要按 &lt;span style="font-weight: bold;"&gt;升級&lt;/span&gt; 就可以將 8.04 升級到 8.10：&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eG_b3F4N00g/SgaNFczPwjI/AAAAAAAAAEc/sNvt4tPpJg0/s1600-h/Screenshot-%E6%9B%B4%E6%96%B0%E7%AE%A1%E7%90%86%E5%93%A1.png"&gt;&lt;img style="cursor: pointer; width: 314px; height: 400px;" src="http://1.bp.blogspot.com/_eG_b3F4N00g/SgaNFczPwjI/AAAAAAAAAEc/sNvt4tPpJg0/s400/Screenshot-%E6%9B%B4%E6%96%B0%E7%AE%A1%E7%90%86%E5%93%A1.png" alt="" id="BLOGGER_PHOTO_ID_5334105933436928562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;升級過程約需要三十至六十分鐘。等升級完畢，再執行一次更新管理員，從 8.10 再升級到 9.04 即可。&lt;br /&gt;&lt;br /&gt;PS: 升級完畢，可用以下指令刪除一些不必要的 package，節省空間：&lt;br /&gt;&lt;blockquote&gt;sudo apt-get clean&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-2804507932330159529?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/2804507932330159529/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=2804507932330159529' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2804507932330159529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2804507932330159529'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/05/ubuntu-804-904.html' title='將 Ubuntu 從 8.04 升級到 9.04'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_eG_b3F4N00g/SgaMIW-BNeI/AAAAAAAAAEU/5nMZg9yulRU/s72-c/Screenshot-%E8%BB%9F%E9%AB%94%E4%BE%86%E6%BA%90-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-6586163197178118441</id><published>2009-04-27T21:41:00.004+08:00</published><updated>2009-04-27T22:08:54.004+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜項'/><title type='text'>辨認 GNU/Linux 的發行版本 (distro)</title><content type='html'>網路上有多少 GNU/Linux 的發行版本 (distro)？看看這張令人眼花撩亂的 &lt;a href="http://futurist.se/gldt/gldt92.png"&gt;族譜&lt;/a&gt; 吧，我相信沒有幾個人有興致去數清楚的。但弄清楚你正在使用的 GNU/Linux 是哪一個版本可能是相當重要的課題 (透過 ssh 去登入主機的使用者，不見得知道該主機作業系統的詳細資料)。&lt;br /&gt;&lt;br /&gt;由於 GNU/Linux 的發行版本很多，多數又有繼承演化的關係，要辨認出每個版本不是一件容易的事。以下是一些簡單的辨別方法，越前面的越精確，但不見得都適用，若該方法行不通，請退而求其次，試試下一個方法。&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;執行 lsb_release -a&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;這是最精確的方法，以下是一些輸出範例：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;No LSB modules are available.&lt;br /&gt;Distributor ID: Ubuntu&lt;br /&gt;Description:    Ubuntu 8.10&lt;br /&gt;Release:        8.10&lt;br /&gt;Codename:       intrepid&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;No LSB modules are available.&lt;br /&gt;Distributor ID: Debian&lt;br /&gt;Description:    Debian GNU/Linux 4.0 (etch)&lt;br /&gt;Release:        4.0&lt;br /&gt;Codename:       etch&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch&lt;br /&gt;Distributor ID: CentOS&lt;br /&gt;Description:    CentOS release 5.2 (Final)&lt;br /&gt;Release:        5.2&lt;br /&gt;Codename:       Final&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;執行 ls /etc/*release 再執行 cat /etc/*release&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;有許多發行版本的資訊都寫在 /etc/*release 的檔案之中，例如：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;/etc/lsb-release         (Ubuntu)&lt;/li&gt;&lt;li&gt;/etc/SuSE-release        (SuSE)&lt;/li&gt;&lt;li&gt;/etc/redhat-release      (RedHat, CentOS)&lt;/li&gt;&lt;li&gt;/etc/mandrake-release    (Mandrake)&lt;/li&gt;&lt;li&gt;/etc/distro-release      (AsteriskNOW)&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;執行 ls /etc/*version 再執行 cat /etc/*version&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;有另一些發行版本的資訊是寫在 /etc/*version 的檔案之中，例如：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;/etc/debian_version      (Debian, Ubuntu)&lt;/li&gt;&lt;li&gt;/etc/slackware-version   (Slackware)&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;執行 cat /etc/issue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;嚴格說來，這不是正確的方法，因為此檔案是用來儲存一些要秀給使用者登入時看的訊息。但很多 distro 都會在這個檔案寫上自己的發行名稱，所以也是不錯的參考資料。例如：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ubuntu 8.10 \n \l&lt;/li&gt;&lt;li&gt;Ubuntu 8.04.2 \n \l&lt;/li&gt;&lt;li&gt;Debian GNU/Linux 4.0 \n \l&lt;/li&gt;&lt;li&gt;CentOS release 5.2 (Final) Kernel \r on an \m&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;執行 cat /proc/version&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;此方法的訊息更不明確，但也不失為一個判斷的依據。例如：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Ubuntu 8.10&lt;/span&gt; =&gt; Linux version 2.6.27-11-generic (buildd@yellow) (gcc version 4.3.2 (Ubuntu 4.3.2-1ubuntu11) ) #1 SMP Wed Apr 1 20:53:41 UTC 2009&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Ubuntu 8.04.2&lt;/span&gt; =&gt; Linux version 2.6.24-23-server (buildd@vernadsky) (gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7)) #1 SMP Mon Jan 26 00:55:21 UTC 2009&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Debian 4.0&lt;/span&gt; =&gt; Linux version 2.6.22-3-vserver-amd64 (Debian 2.6.22-6) (maks@debian.org) (gcc version 4.1.3 20071019 (prerelease) (Debian 4.1.2-17)) #1 SMP Sun Nov 4 18:41:00 UTC 2007&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;CentOS 5.2&lt;/span&gt; =&gt; Linux version 2.6.18-92.el5 (mockbuild@builder16.centos.org) (gcc version 4.1.2 20071124 (Red Hat 4.1.2-42)) #1 SMP Tue Jun 10 18:49:47 EDT 2008&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-6586163197178118441?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/6586163197178118441/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=6586163197178118441' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6586163197178118441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6586163197178118441'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/04/gnulinux-distro.html' title='辨認 GNU/Linux 的發行版本 (distro)'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-5687895179122611595</id><published>2009-04-17T21:14:00.005+08:00</published><updated>2010-04-22T11:42:27.460+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>我的 Firefox 擴充套件點點名</title><content type='html'>將個人喜好的 Firefox 擴充套件記錄如下，也推薦給大家：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Favicon Picker 3&lt;/span&gt; 讓你自訂 bookmark 的圖示。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Firebug&lt;/span&gt; 超強網頁除錯工具，內行人應該都知道。&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;User Agent Switcher&lt;/span&gt; 改變 Firefox 送出的 User-Agent 字串，內行人應該都知道。&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Flashblock&lt;/span&gt; 擋下不必要的 flash 花招，並在該處留白，想看時再自己點選。&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Google Bookarks Button Reloaded &lt;/span&gt;將自己的 bookmark 放在 Google 上。&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Hide Menubar&lt;/span&gt; 將很少用到的 Firefox 選單列隱藏起來，需要時按 ALT 即可顯現出來。&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Mozilla Archive Format&lt;/span&gt; 或 &lt;span style="font-weight: bold;"&gt;UnMHT&lt;/span&gt; 收到惱人的 .mht 檔案嗎？用這個可以開啟喔！ (進一步&lt;a href="http://softsmith.blogspot.com/2010/04/mime-html-mht.html"&gt;介紹&lt;/a&gt;)。&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;PDFescape&lt;/span&gt; 讓你線上「編輯」 PDF 文件 (進一步&lt;a href="http://softsmith.blogspot.com/2009/01/firefox-pdfescape-extension.html"&gt;介紹&lt;/a&gt;)。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Tab Mix Plus&lt;/span&gt; 強化 Firefox 的分頁瀏覽功能。&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Wired-Marker&lt;/span&gt; 閱讀網頁的最佳夥伴 (進一步&lt;a href="http://softsmith.blogspot.com/2008/05/wired-marker.html"&gt;介紹&lt;/a&gt;)。&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-5687895179122611595?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/5687895179122611595/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=5687895179122611595' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5687895179122611595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5687895179122611595'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/04/firefox.html' title='我的 Firefox 擴充套件點點名'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-3900907573053854608</id><published>2009-04-10T21:22:00.010+08:00</published><updated>2009-04-17T21:13:13.446+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜項'/><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>我的 Ubuntu 軟體點點名</title><content type='html'>用 Ubuntu 越久，就越覺得方便。需要甚麼功能的軟體，絕大部分用 Synaptic 就可以下載安裝。將好用的軟體記錄如下，也推薦給大家 (不含 Ubuntu 固定會安裝的)。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;KchmViewer&lt;/span&gt; 電子書 .chm 檔案的檢視器。套件：kchmviewer (曾試過 GnoCHM 和 ChmSee，這兩者的搜尋功能都不好用)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;hexedit&lt;/span&gt; 非文字檔的編輯工具。套件：hexedit&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;unrar&lt;/span&gt; 解壓縮程式，可與 file-roller 整合。網路上有那麼多免費、公開的壓縮軟體，搞不懂為什麼那麼多人喜歡將檔案壓成 .rar。套件：unrar&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;minicom&lt;/span&gt; 終端機模擬軟體 (terminal emulator)，透過 RS232 連到某些設備的 console。套件：minicom (&lt;a href="http://softsmith.blogspot.com/2008/05/ubuntu-terminal-emulator.html"&gt;進一步介紹&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Wire Shark&lt;/span&gt; 封包抓取和分析軟體。套件：wireshark (&lt;a href="http://softsmith.blogspot.com/2008/10/running-wireshark-as-non-root-user.html"&gt;進一步介紹&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Virtual Box&lt;/span&gt; 虛擬機器。套件：virtualbox-ose，但我推薦 &lt;a href="http://www.virtualbox.org/"&gt;官方網站&lt;/a&gt; 的版本，不管用哪一套都需安裝 scim-bridge-client-qt (&lt;a href="http://softsmith.blogspot.com/search/label/VirtualBox"&gt;進一步介紹&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Sox&lt;/span&gt; 聲音檔轉換工具 (命令列模式)。套件：sox、libsox-fmt-all&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;VLC media player&lt;/span&gt; 影音播放軟體。套件：vlc&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Wave Surfer&lt;/span&gt; 聲音檔處理、分析工具，可檢視聲音波形、區間播放等。套件：wavesurfer&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-3900907573053854608?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/3900907573053854608/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=3900907573053854608' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3900907573053854608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3900907573053854608'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/04/ubuntu.html' title='我的 Ubuntu 軟體點點名'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-9036287122020586712</id><published>2009-03-10T23:27:00.004+08:00</published><updated>2009-09-30T23:24:46.550+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜項'/><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><title type='text'>Subversion, Grep, Diff</title><content type='html'>我很習慣用 grep 來找 source code 當中的字串；也很習慣用 diff 來比較兩個 source tree 的差異。如：&lt;br /&gt;&lt;blockquote&gt;grep -r STRING *&lt;br /&gt;diff -ur DIR1 DIR2&lt;br /&gt;&lt;/blockquote&gt;這兩個指令很好用。但是遇到 Subversion 的 working copy 時，就會受到 .svn 目錄的干擾。所幸這兩個指令都提供排除非必要目錄的方法：&lt;br /&gt;&lt;blockquote&gt;grep &lt;span style="font-weight: bold; font-style: italic;"&gt;--exclude-dir=.svn&lt;/span&gt; -r STRING *&lt;br /&gt;diff &lt;span style="font-weight: bold; font-style: italic;"&gt;-x .svn&lt;/span&gt; -ur DIR1 DIR2&lt;/blockquote&gt;&lt;br /&gt;老實說，常會忘記這些參數，也常弄混。因此建議在 .bashrc 當中加上以下設定，這樣以後不管是不是 working copy 都可以安心使用 grep -r 和 diff -r 了：&lt;br /&gt;&lt;blockquote&gt;alias grep='grep --exclude-dir=.svn'&lt;br /&gt;alias diff='diff -x .svn'&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-9036287122020586712?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/9036287122020586712/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=9036287122020586712' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/9036287122020586712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/9036287122020586712'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/03/subversion-grep-diff.html' title='Subversion, Grep, Diff'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-398016314709425493</id><published>2009-02-02T17:19:00.003+08:00</published><updated>2009-02-02T17:38:59.251+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>在 64-bit Ubuntu 上安裝 32-bit 的 package</title><content type='html'>使用 64-bit Ubuntu 時，經常會遇到一個問題：某些外部 package 只提供 32-bit 的版本 (i386)，而沒有 64-bit 的版本 (amd64)，例如：Adobe Reader 和 Skype 等。&lt;br /&gt;&lt;br /&gt;解決方法很簡單，加上 --force-architecture 參數即可：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;sudo dpkg -i --force-architecture AdobeReader_cht-8.1.3-1.i386.deb&lt;/li&gt;&lt;li&gt;sudo dpkg -i --force-architecture skype-debian_2.0.0.72-1_i386.deb &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-398016314709425493?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/398016314709425493/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=398016314709425493' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/398016314709425493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/398016314709425493'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/02/64-bit-ubuntu-32-bit-package.html' title='在 64-bit Ubuntu 上安裝 32-bit 的 package'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-6747175368238632891</id><published>2009-01-15T12:16:00.005+08:00</published><updated>2009-01-15T12:39:08.484+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜項'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>好康推薦：PrintWhatYouLike.com</title><content type='html'>網路世界的資源非常豐富，但不一定長久。不管是書籤還是最愛，留下 URL 並不能保證將來你還可以再找到相同的資料。所以，當發現有些值得保存的資料時，我會想辦法留下副本。&lt;br /&gt;&lt;br /&gt;另存新檔？詳實用 HTML 紀錄原始的資料，但垃圾多又不方便管理。所以我習慣輸出成 PDF 文件。不過網頁上通常充斥廣告等不相干的內容，令人想去之而後快。還好，Firefox 有許多外掛程式提供這類編輯網頁的功能，如：&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/951"&gt;Nuke Anything Enhanced&lt;/a&gt;、&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/5753"&gt;Page Hacker&lt;/a&gt; 等。&lt;br /&gt;&lt;br /&gt;這次要推薦的不是以上那些 extension，而是一個有同樣功能的服務網站：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.printwhatyoulike.com/"&gt;http://www.printwhatyoulike.com/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;透過這個網站，編修網頁更加容易上手。當然，缺點就是不是所有的網頁都可以利用這項服務，例如公司內部網站。如果，printwhatyoulike 能夠改寫成 extension，那就是太完美了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-6747175368238632891?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/6747175368238632891/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=6747175368238632891' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6747175368238632891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6747175368238632891'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/01/printwhatyoulikecom.html' title='好康推薦：PrintWhatYouLike.com'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-3402130614146650376</id><published>2009-01-15T11:06:00.004+08:00</published><updated>2009-02-26T22:33:32.002+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜項'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox 的 PDFescape Extension</title><content type='html'>唉... 可能寫筆記不夠用心，竟然跟上時代潮流放起無薪假來了。趁著悠閒，上網看看 Firefox 有什麼新鮮的外掛程式可用，發現 &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/5363"&gt;PDFescape&lt;/a&gt; 是蠻有意思的服務。&lt;br /&gt;&lt;br /&gt;裝上這個 extension 之後，你可以將網路上的 PDF 文件送到 &lt;a href="http://www.pdfescape.com/"&gt;http://www.pdfescape.com&lt;/a&gt; 作線上編輯，如：用空白蓋掉原有的內容、加上新的文字和簡易的方圓等圖形，甚至可以加上文字輸入方塊和 checkbox 等。等改好之後，就可以下載這份修改過的文件。&lt;br /&gt;&lt;br /&gt;我想到一個使用場合。有時我們必須下載 PDF 格式的表格，印出、填寫然後拿去申請任何東東。有了這服務，寫字難看的我就可以先加工過再印出來，頂多留下簽名欄位就可以了。&lt;br /&gt;&lt;br /&gt;我承認用到的場合不多，所以我不會安裝這個 extension。因此隨手記下，以備將來之需...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-3402130614146650376?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/3402130614146650376/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=3402130614146650376' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3402130614146650376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3402130614146650376'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/01/firefox-pdfescape-extension.html' title='Firefox 的 PDFescape Extension'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-3262777690777903457</id><published>2009-01-13T22:18:00.006+08:00</published><updated>2009-06-14T15:51:17.848+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜項'/><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><title type='text'>使用 vim 和 cscope 來 trace 程式碼</title><content type='html'>Vim 是個很實用的程式編寫工具，不過一開始需要花點心力走過學習曲線。有興趣的人可以在網路上找找學習教材；如果你已經有點基礎但記不清按鍵，以下這個網址提供相當有系統的整理，依照功能分成七個自學課程，很值得一看：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html"&gt;Vim Cheat Sheet and Tutorial&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;除了編寫程式，Vim 用來追溯程式 (trace code) 也相當好用。例如，先將游標移到程式的某個文字串，再按以下按鍵：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;'&lt;span style="font-weight: bold;"&gt;*&lt;/span&gt;' 往前找出此文字串 (按 n、N 繼續找)&lt;/li&gt;&lt;li&gt;'&lt;span style="font-weight: bold;"&gt;#&lt;/span&gt;' 往後找出此文字串 (按 n、N 繼續找)&lt;/li&gt;&lt;li&gt;'&lt;span style="font-weight: bold;"&gt;gd&lt;/span&gt;' 將此文字串視為 local 變數，找到定義此 local 變數的地方 (如果有的話)&lt;/li&gt;&lt;/ul&gt;其他追溯程式常見的動作：&lt;ul&gt;&lt;li&gt;'&lt;span style="font-weight: bold;"&gt;%&lt;/span&gt;' 找到被配的括號&lt;/li&gt;&lt;li&gt;'&lt;span style="font-weight: bold;"&gt;[[&lt;/span&gt;' 找到函數的開頭&lt;/li&gt;&lt;li&gt;'&lt;span style="font-weight: bold;"&gt;]]&lt;/span&gt;' 找到下一個函數的開頭&lt;/li&gt;&lt;/ul&gt;當你維護的軟體專案不小時，上述功能絕對不夠用。這時你需要 cscope 的協助。當你安裝好 cscope，而且建立好專案的 cscope 資料庫之後，將游標移到程式當中某個文字串，按 &lt;span style="font-weight: bold;"&gt;Ctrl&lt;/span&gt;+&lt;span style="font-weight: bold;"&gt;\&lt;/span&gt; 再按以下按鍵：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;'&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;': 即 Symbol，以此文字串當識別字，列出專案當中所有參考到此識別字的地方，包含定義和引用&lt;/li&gt;&lt;li&gt;'&lt;span style="font-weight: bold;"&gt;g&lt;/span&gt;': 即 Global，以此文字串當作 global 變數或函數的名稱，跳到專案中定義此 global 變數或函數的地方 (這個功能有另一個與 ctags 相同的快速鍵 Ctrl-])&lt;/li&gt;&lt;li&gt;'&lt;span style="font-weight: bold;"&gt;c&lt;/span&gt;': 即 Calls，以此文字串當函數名稱，找出所有呼叫到的此函數的函數&lt;/li&gt;&lt;li&gt;'&lt;span style="font-weight: bold;"&gt;t&lt;/span&gt;': 即 Text，列出專案中所有出現此文字串的地方 (包含註解)&lt;/li&gt;&lt;li&gt;'&lt;span style="font-weight: bold;"&gt;e&lt;/span&gt;': 即 Egrep，以此文字串當 regular expression，用 egrep 方式來搜尋&lt;/li&gt;&lt;li&gt;'&lt;span style="font-weight: bold;"&gt;f&lt;/span&gt;': 即 File，以此文字串當檔案名稱，開啟此檔案&lt;/li&gt;&lt;li&gt;'&lt;span style="font-weight: bold;"&gt;i&lt;/span&gt;': 即 Includes，以此文字串當 header 檔名稱，列出所有 include 此檔案的檔案&lt;/li&gt;&lt;li&gt;'&lt;span style="font-weight: bold;"&gt;d&lt;/span&gt;': 即 calleD，以此文字串當函數名稱，列出此函數所呼叫到的函數&lt;/li&gt;&lt;/ul&gt;上述指令若是列出相關程式碼，你可以輸入數字加 Enter 來跳到該檔案的相對位置。按 &lt;span style="font-weight: bold;"&gt;Ctrl&lt;/span&gt;-&lt;span style="font-weight: bold;"&gt;T&lt;/span&gt; 就會回到游標原來的檔案和位置。你也可以用以下的方式來輸入指令 (foo 就是搜尋的文字串)：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;:cscope find symbol foo&lt;/li&gt;&lt;li&gt;:cs f s foo&lt;/li&gt;&lt;/ul&gt;安裝 cscope 的方法：&lt;br /&gt;&lt;blockquote&gt;sudo apt-get install cscope&lt;br /&gt;mkdir -p ~/.vim/plugin&lt;br /&gt;cd ~/.vim/plugin&lt;br /&gt;wget http://cscope.sourceforge.net/cscope_maps.vim&lt;br /&gt;&lt;/blockquote&gt;建立及更新軟體專案 cscope 資料庫的簡單方法如下 (其他更複雜的用法請參考 &lt;a href="http://cscope.sourceforge.net/"&gt;http://cscope.sourceforge.net&lt;/a&gt;)：&lt;br /&gt;&lt;blockquote&gt;cd PROJECT&lt;br /&gt;cscope -bR&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-3262777690777903457?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/3262777690777903457/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=3262777690777903457' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3262777690777903457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3262777690777903457'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/01/vim-cscope-trace.html' title='使用 vim 和 cscope 來 trace 程式碼'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-4789873671423600024</id><published>2009-01-07T22:49:00.003+08:00</published><updated>2009-01-07T22:56:41.418+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu 存放 icon 的位置</title><content type='html'>這絕對是一件小事，但每次都記不得，所以決定寫下來：Ubuntu 存放 icon 的主要目錄是 &lt;span style="font-weight: bold;"&gt;/usr/share/pixmaps&lt;/span&gt;。當你在面板上加入自訂的程式啟動圖示時，常常會需要到這個目錄找應用程式的圖示。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-4789873671423600024?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/4789873671423600024/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=4789873671423600024' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/4789873671423600024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/4789873671423600024'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2009/01/ubuntu-icon.html' title='Ubuntu 存放 icon 的位置'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-8910493343480791459</id><published>2008-12-29T22:49:00.003+08:00</published><updated>2008-12-29T22:59:06.398+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜項'/><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><title type='text'>Vim 建議的四種 TAB 字元處理方式</title><content type='html'>Vim 的 help 建議四種 TAB 字元處理方式：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;將 'tabstop' 固定設為 8；'softtabstop' 和 'shiftwidth' 設為 4 (或其他你所喜好的縮排長度)；然後指定 'noexpandtab'。這樣，vim 在處理檔案的時候會視需求自動混用 TAB 和空白字元，但你按 TAB 或 BS 鍵時，都會以 4 格 (或你喜好的縮排長度) 來移動。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;將 'tabstop' 和 'shiftwidth' 設成你所喜好的縮排長度，然後設定 'expandtab'。這樣，你編輯的檔案將不會有任何 TAB 字元。以其他編輯器來看時，縮排不會受到 TAB 設定不同的影響。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;將 'tabstop' 和 'shiftwidth' 設成你所喜好的縮排長度，然後將此設定以 modeline 的方式寫在檔案之中。這樣，只要使用 vim 而且 &lt;a href="http://softsmith.blogspot.com/2008/12/vim-modeline.html"&gt;modeline&lt;/a&gt; 有開啟的話，大家看到的樣子都會一致。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;將 'tabstop' 和 'shiftwidth' 設成相同的值，然後設 'noexpandtab'。這樣，即使別人的設定不一樣，看起來也只是縮排程度不同，結構上是沒有問題的。不過，你只能在每一行的開頭使用 TAB 字元，其他地方的 TAB 字元可能會因縮排長度的不同而破壞原來的排版 (例如：原本對齊的 C 常數定義變沒有對齊)。&lt;/li&gt;&lt;/ol&gt;個人推薦方式 2 再嵌入 modeline 設定，如下：&lt;br /&gt;&lt;blockquote&gt;vim: set ts=4 sw=4 et:&lt;/blockquote&gt;嵌入 modeline 設定不單純只給 vim 看，而是當作一種宣告：&lt;span style="font-weight: bold;"&gt;本文件的縮排為四格而且以空白展開 TAB&lt;/span&gt;，希望修改文件的人都能遵循這個慣例。&lt;br /&gt;&lt;br /&gt;但是有一個例外：Makefile。Makefile 的 TAB 字元是有意義的，不可用空白取代，所以 modeline 應該設為：&lt;br /&gt;&lt;blockquote&gt;vim: set ts=8 sw=8 noet:&lt;br /&gt;&lt;/blockquote&gt;另外，我也建議 ~/.vimrc 要有如下的設定：&lt;br /&gt;&lt;blockquote&gt;set smarttab&lt;br /&gt;set autoindent&lt;/blockquote&gt;這樣寫程式會比較方便。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-8910493343480791459?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/8910493343480791459/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=8910493343480791459' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8910493343480791459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8910493343480791459'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/12/vim-tab.html' title='Vim 建議的四種 TAB 字元處理方式'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-3448119579990341382</id><published>2008-12-28T09:33:00.007+08:00</published><updated>2008-12-29T22:49:26.691+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><title type='text'>Vim 的 modeline</title><content type='html'>有團隊合作寫程式經驗的人，應該能夠了解共同的 coding style 是非常重要的。先不管 if-else、for、while 之類的述句該怎麼編排，至少縮排幾格、tab 如何處理一定要統一。否則一個 source code 經過幾個人 (其實是編輯器) 的修改，可能會變得不成人形。&lt;br /&gt;&lt;br /&gt;問題出在不同的編輯器對 tab 可以有不同的處理方式：對齊四或八格？要不要展開成空白？若編輯器的設定不同，甲看起來漂漂亮亮的排版，在乙那邊可能是歪七扭八的。&lt;br /&gt;&lt;br /&gt;Vim 的 modeline 提供一個方便的解法：在 source code 當中就可以指定編輯設定，包含此檔案的 tab 應該要如何解讀。&lt;br /&gt;&lt;br /&gt;Modeline 是藏在文件開頭或末尾幾行的特殊格式字串，vim 讀取文件時若發現這些字串便會修正自身的設定。在程式當中，通常是寫在註解裡頭。例如：&lt;br /&gt;&lt;blockquote&gt;// vim: ts=4 sw=4 et&lt;br /&gt;&lt;/blockquote&gt;這是 modeline 的第一種寫法。vim: 標記特殊字串的開頭，結尾則是本行結束。特殊字串當中以空白或「：」隔開各個設定項目。利用這種方式，後面不可有其他任何字元，所以，若是用 C 的註解符號必須寫成：&lt;br /&gt;&lt;blockquote&gt;/* vim: ts=4 sw=4 et&lt;br /&gt;*/&lt;br /&gt;&lt;/blockquote&gt;第二種寫法同樣以 vim: 標記特殊字串的開始，但之後必須跟著一個 set。下一個「:」代表特殊字串的結束，之後可以有其他文字。例如以下用於 Python 的範例，同一行除了包含 vim modeline 之外，也包含 Pyhton 指定 source code encoding 的寫法：&lt;br /&gt;&lt;blockquote&gt;# vim: set ts=4 sw=4 et: -*- coding: utf-8 -*-&lt;br /&gt;&lt;/blockquote&gt;個人推薦這種寫法，因為 vim 的 modeline 處理並非強制的，有些 Linux distro 的 vim 預設值將 modeline 關閉；也有些人有安全顧慮，不想開啟 modeline。遇到此情況，我們可以直接剪貼兩個冒號之間的字串即可複製該設定。若要啟用或關閉 modeline 功能可以編輯 ~/.vimrc：&lt;br /&gt;&lt;blockquote&gt;set modeline&lt;br /&gt;set modelines=2&lt;br /&gt;&lt;/blockquote&gt;第一行是啟用 modeline；第二行是將搜尋 modeline 的範圍設定為文件開頭和末尾各兩行，若省略則預設為五行。&lt;br /&gt;&lt;br /&gt;參考資料：&lt;br /&gt;&lt;ul&gt;&lt;li&gt; 在 vim 執行「:help modeline」及「:help modelines」&lt;/li&gt;&lt;li&gt; &lt;a href="http://vim.wikia.com/wiki/Modeline_magic"&gt;http://vim.wikia.com/wiki/Modeline_magic&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://www.google.com/search?q=vim+modeline+vulnerability"&gt;http://www.google.com/search?q=vim+modeline+vulnerability&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-3448119579990341382?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/3448119579990341382/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=3448119579990341382' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3448119579990341382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3448119579990341382'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/12/vim-modeline.html' title='Vim 的 modeline'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-9113518608733927942</id><published>2008-12-24T21:24:00.003+08:00</published><updated>2008-12-24T21:39:42.661+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VirtualBox'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>VirtualBox 2.1.0 的 Host Interface Networking</title><content type='html'>使用 VirtualBox 的 Host Interface Networking 的好處是：可以省掉 NAT 型態設定 port forwarding 的麻煩；缺點則是要多一點設定的工作。但是 VirtualBox 2.1.0 版針對此部份有大幅的改進，只要從 GUI 點選 Host Interface，再從選單選出 host 主機的網路介面即可。請參考：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ubuntuforums.org/showthread.php?t=346185"&gt;http://ubuntuforums.org/showthread.php?t=346185&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-9113518608733927942?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/9113518608733927942/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=9113518608733927942' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/9113518608733927942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/9113518608733927942'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/12/virtualbox-210-host-interface.html' title='VirtualBox 2.1.0 的 Host Interface Networking'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-5001898796575476300</id><published>2008-11-25T22:45:00.004+08:00</published><updated>2008-11-25T23:56:30.269+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMware Player'/><category scheme='http://www.blogger.com/atom/ns#' term='VirtualBox'/><category scheme='http://www.blogger.com/atom/ns#' term='coLinux'/><title type='text'>coLinux: 讓 Linux  在 Windows 上跳舞</title><content type='html'>需要同時使用 Windows 和 Linux 的人，除了可以在 Windows 上用 VirtualBox 或 VMware 等跑 Linux 的 virtual machine 外，還有另一個選擇：&lt;a href="http://www.colinux.org/"&gt;Cooperative Linux&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;Cooperative Linux 簡稱 coLinux，是 Windows device drivers 加上搭配的 Linux kernel modules 所形成的組合。透過這個組合，原生的 Linux 系統可以和 Windows 共用硬體資源。你可以想像 coLinux 是將 Linux 系統當成 Windows 的應用程式來執行。據說任何 GNU/Linux 的 distro 都可跑，不過要稍微調整過。比較簡單的方法是安裝 coLinux 時，直接挑選他們準備好的 distro。&lt;br /&gt;&lt;br /&gt;和使用 virtual machine 的方式來比，coLinux 有幾個缺點：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;穩定性。coLinux 以最高權限的方式和 Windows 共用資源，萬一有甚麼問題，整個 Windows 系統都有可能受到影響。&lt;/li&gt;&lt;li&gt;安全性。在 Linux 系統上取得 root 權限，就有可能也取得 Windows 系統的管理者權限。&lt;/li&gt;&lt;li&gt;coLinux 目前還無法共用繪圖硬體，因此不能在 coLinux 上跑 X server (不過可以在 Windows 上跑 X server)。&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-5001898796575476300?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/5001898796575476300/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=5001898796575476300' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5001898796575476300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5001898796575476300'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/11/colinux-linux-windows.html' title='coLinux: 讓 Linux  在 Windows 上跳舞'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-1151977786610354466</id><published>2008-10-28T22:34:00.009+08:00</published><updated>2011-03-19T10:49:52.444+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>不用 sudo！以 non-root 身份用 Wireshark 抓封包</title><content type='html'>在 Ubuntu 上安裝好 Wireshark，想抓封包時卻找不到網路卡。原來必須執行 "&lt;span style="font-family:courier new;"&gt;sudo wireshark&lt;/span&gt;" 才有足夠的權限。這樣子除了麻煩之外，還有一個不方便：封包存檔之後是屬於 root 所有，處理起來相當不便。&lt;br /&gt;&lt;br /&gt;經過一番努力，找出幾個解決方案 (越後面的方法越好)。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;方案一&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;最簡單的作法是安裝完 Wireshark 之後執行 "&lt;span style="font-family:courier new;"&gt;sudo chmod u+s /usr/bin/dumpcap&lt;/span&gt;"。這樣子就可以一般使用者的身份抓封包了。關鍵在於 "&lt;span style="font-style: italic;"&gt;dumpcap&lt;/span&gt;" 就是那個需要 root 權限的部份，上述指令讓一般使用者也可以 root 的身份執行 "dumpcap"。&lt;br /&gt;&lt;br /&gt;這種方法雖然簡單，但對講求安全的人來說卻不太妙。因為所有人都可以執行這隻需要 root 權限的程式。方案二是一個改進的方法。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;方案二&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;改進的方式就是只開放給特定 group 的人以 root 身份執行 "&lt;span style="font-style: italic;"&gt;dumpcap&lt;/span&gt;"：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;執行 "&lt;span style="font-family:courier new;"&gt;sudo vi /etc/group&lt;/span&gt;" 並新增一個 group (建議叫做 "&lt;span style="font-style: italic;"&gt;wireshark&lt;/span&gt;")，然後將自己加入此 group&lt;/li&gt;&lt;li&gt;執行 "&lt;span style="font-family:courier new;"&gt;sudo chgrp wireshark /usr/bin/dumpcap&lt;/span&gt;"，將 dumpcap 改為 wireshark group&lt;br /&gt;&lt;/li&gt;&lt;li&gt;執行 "&lt;span style="font-family:courier new;"&gt;sudo chmod 4754 /usr/bin/dumpcap&lt;/span&gt;"，只讓屬於 wireshark group 的人可以 root 身份執行 dumpcap&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;完成上述動作之後，重新登入讓 group 所屬生效。這樣你就可以用原本的身份抓封包了，封包存檔的所有也都屬於原本的身份。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;方案三&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;方案二雖然已經限縮有執行權限的人，但終究還是以 root 身份執行 dumpcap。更嚴謹的方法是：利用 &lt;a href="http://manpages.ubuntu.com/manpages/intrepid/man7/capabilities.7.html"&gt;Linux Capabilities&lt;/a&gt; 只授權 dumpcap 有抓封包的權限。方法如下：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;同方案二的步驟 1 和 2&lt;/li&gt;&lt;li&gt;執行 "&lt;span style="font-family:courier new;"&gt;sudo chmod 750 /usr/bin/dumpcap&lt;/span&gt;"，只讓屬於 wireshark group 的人可以執行 dumpcap (以一般身份)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;執行 "&lt;span style="font-family:courier new;"&gt;setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap&lt;/span&gt;"，授予 dumpcap 有抓封包所需的權限 (若沒有 &lt;span style="font-family:courier new;"&gt;setcap&lt;/span&gt;，請自己安裝 "&lt;span style="font-family:courier new;"&gt;sudo apt-get install libcap2-bin&lt;/span&gt;")&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;參考資料：&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://blog.wireshark.org/2010/02/running-wireshark-as-you"&gt;https://blog.wireshark.org/2010/02/running-wireshark-as-you&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.wireshark.org/CaptureSetup/CapturePrivileges"&gt;http://wiki.wireshark.org/CaptureSetup/CapturePrivileges&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-1151977786610354466?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/1151977786610354466/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=1151977786610354466' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/1151977786610354466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/1151977786610354466'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/10/non-root-wireshark.html' title='不用 sudo！以 non-root 身份用 Wireshark 抓封包'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-7770664106021370027</id><published>2008-10-23T22:39:00.004+08:00</published><updated>2011-03-19T10:57:12.878+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Running Wireshark as a non root user</title><content type='html'>In general, we have to run "&lt;span style="font-family:courier new;"&gt;sudo wireshark&lt;/span&gt;" to capture packets. It is very annoying. Luckily, I found solutions that work on my Ubuntu box.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution 1&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;The simplest way is to run "&lt;span style="font-family:courier new;"&gt;sudo chmod u+s /usr/bin/dumpcap&lt;/span&gt;" once. That's all! Because "&lt;span style="font-style: italic;"&gt;dumpcap&lt;/span&gt;" is the only part that need root privileges. However, it is not a good practice to enable all to run an executable that has root privileges.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution 2&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;The better solution is to create a group and allow the members of the group to run "&lt;span style="font-style: italic;"&gt;dumpcap&lt;/span&gt;" with root privileges:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;"&lt;span style="font-family:courier new;"&gt;sudo vi /etc/group&lt;/span&gt;" to create a new group, say "&lt;span style="font-family:courier new;"&gt;wireshark&lt;/span&gt;", and enroll yourself to this group&lt;/li&gt;&lt;li&gt;"&lt;span style="font-family:courier new;"&gt;sudo chgrp wireshark /usr/bin/dumpcap&lt;/span&gt;"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;"&lt;span style="font-family:courier new;"&gt;sudo chmod 4754 /usr/bin/dumpcap&lt;/span&gt;"&lt;/li&gt;&lt;/ol&gt;Logout and login again to take the new groupship and you can use Wireshark to capture packets as a non-root user.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution 3&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;The best solution is to grant "&lt;span style="font-style: italic;"&gt;dumpcap&lt;/span&gt;" the right to do its job without involving root access at all:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Same as step 1 &amp;amp; 2 of Solution 2&lt;/li&gt;&lt;li&gt;"&lt;span style="font-family:courier new;"&gt;sudo chmod 750 /usr/bin/dumpcap&lt;/span&gt;"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;"&lt;span style="font-family:courier new;"&gt;setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap&lt;/span&gt;"&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;References:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://blog.wireshark.org/2010/02/running-wireshark-as-you"&gt;https://blog.wireshark.org/2010/02/running-wireshark-as-you&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.wireshark.org/CaptureSetup/CapturePrivileges"&gt;http://wiki.wireshark.org/CaptureSetup/CapturePrivileges&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-7770664106021370027?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/7770664106021370027/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=7770664106021370027' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7770664106021370027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7770664106021370027'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/10/running-wireshark-as-non-root-user.html' title='Running Wireshark as a non root user'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-6815354126199059326</id><published>2008-10-17T23:08:00.005+08:00</published><updated>2008-10-17T23:57:03.715+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>在 Ubuntu 上安裝 Apache2 的 HTTPS Server</title><content type='html'>在 Ubuntu 8.04 上安裝一般的 Apache2 HTTP server 非常簡單，只要以下的指令：&lt;br /&gt;&lt;blockquote&gt;sudo apt-get install apache2&lt;/blockquote&gt;若要安裝支援 SSL 的 HTTPS server 還需以下步驟：&lt;br /&gt;&lt;blockquote&gt;sudo apt-get install openssl&lt;br /&gt;sudo apt-get install ssl-cert&lt;br /&gt;sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf \&lt;br /&gt;                 /etc/ssl/private/localhost.pem&lt;/blockquote&gt;第三動是要產生 SSL 用的 key。執行時會問以下的問題 (若只想作作實驗，可以先隨便填)：&lt;br /&gt;&lt;blockquote&gt;Country Name = TW&lt;br /&gt;State or Province Name = Taiwan&lt;br /&gt;Locality Name = Some-Locality&lt;br /&gt;Organization Name = One Organization&lt;br /&gt;Organizational Unit Name = Organizational Unit Name&lt;br /&gt;Host Name = localhost&lt;br /&gt;Email Address = webmaster@localhost&lt;br /&gt;&lt;/blockquote&gt;接下來是要設定 Apache2：&lt;br /&gt;&lt;blockquote&gt;# 先換到這個目錄&lt;br /&gt;cd /etc/apache2/sites-available/&lt;br /&gt;sudo -s&lt;br /&gt;&lt;br /&gt;# 保存一版原有的 default&lt;br /&gt;cp default default.backup.date&lt;br /&gt;&lt;br /&gt;# 確定 default port 是 80&lt;br /&gt;sed -i '1,2s/\*/*:80/' default&lt;br /&gt;&lt;br /&gt;# 複製 default 來當作 ssl 的樣板&lt;br /&gt;cp default ssl&lt;br /&gt;&lt;br /&gt;# 以下兩個 sed 是將樣板前給行修改成 SSL 需要的設定，也就是：&lt;br /&gt;# ========================================&lt;br /&gt;# NameVirtualHost *:443&lt;br /&gt;# &amp;lt;virtualhost&amp;gt;&lt;br /&gt;#    ServerAdmin webmaster@localhost&lt;br /&gt;#    SSLEngine On&lt;br /&gt;#    SSLCertificateFile /etc/ssl/private/localhost.pem&lt;br /&gt;#  &lt;br /&gt;#    DocumentRoot /var/www/&lt;br /&gt;# ========================================&lt;br /&gt;&lt;br /&gt;sed -i '1,2s/\*:80/*:443/' ssl&lt;br /&gt;sed -i "3a\\\tSSLEngine On\n\tSSLCertificateFile /etc/ssl/private/localhost.pem" ssl&lt;br /&gt;&lt;br /&gt;# 把剛剛完成的 SSL 掛上去&lt;br /&gt;a2ensite ssl&lt;br /&gt;a2enmod ssl&lt;br /&gt;&lt;br /&gt;# 重新啟動 apache2&lt;br /&gt;/etc/init.d/apache2 restart&lt;br /&gt;&lt;/blockquote&gt;完成上述動作之後，你就可以用 https://localhost 看到「It works!」了。當然，架正式網站時，你可能會想要一個正式的 key。那麼上面的資料就要好好填，而且得準備一點錢去申請。這我就沒有經驗了。&lt;br /&gt;&lt;br /&gt;參考資料：&lt;br /&gt;&lt;blockquote&gt;&lt;a href="https://launchpad.net/ubuntu/+source/apache2/+bug/77675/comments/47"&gt;https://launchpad.net/ubuntu/+source/apache2/+bug/77675/comments/47&lt;/a&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-6815354126199059326?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/6815354126199059326/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=6815354126199059326' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6815354126199059326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6815354126199059326'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/10/ubuntu-apache2-https-server.html' title='在 Ubuntu 上安裝 Apache2 的 HTTPS Server'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-3774220954336459730</id><published>2008-09-01T21:13:00.002+08:00</published><updated>2008-09-01T21:24:59.213+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VirtualBox'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu 上 VirtualBox 的 Host Key</title><content type='html'>在 Ubuntu 上安裝 VirtualBox 很容易，卻很容易遇到一個問題：Host Key 沒有作用。其實，正確的說法是：在 guest OS 上不能使用 keyboard。&lt;br /&gt;&lt;br /&gt;這問題很容易解決，只要安裝 scim-bridge-client-qt 這個 package 就可以了。安裝完之後，記得重開機才會生效。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-3774220954336459730?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/3774220954336459730/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=3774220954336459730' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3774220954336459730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3774220954336459730'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/09/ubuntu-virtualbox-host-key.html' title='Ubuntu 上 VirtualBox 的 Host Key'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-1440270897954872402</id><published>2008-08-31T18:06:00.005+08:00</published><updated>2008-08-31T18:31:25.310+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMware Player'/><category scheme='http://www.blogger.com/atom/ns#' term='VirtualBox'/><title type='text'>VirtualBox 的三種網路型態</title><content type='html'>VMware Player 的 host OS 和 guest OS 之間有 &lt;a href="http://softsmith.blogspot.com/2008/02/vmware-bridgedhost-only-nat.html"&gt;三種網路型態&lt;/a&gt;。VirtualBox 同樣也有三種，而且功能很類似：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Host Interface Networking (HIF)&lt;/li&gt;&lt;li&gt;Internal Networking&lt;/li&gt;&lt;li&gt;Network Address Translation (NAT)&lt;/li&gt;&lt;/ul&gt;其中，Network Address Translation (NAT) 與 VMware 的名稱一樣，功能也完全相同。&lt;br /&gt;&lt;br /&gt;Host Interface Networking (HIF) 除了名字不同之外，功能和 VMware 的 Bridged Networking 是一樣的。&lt;br /&gt;&lt;br /&gt;Internal Networking 則和 WMware 的 Host-Only Networking 相近，但有以下不同：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Internal network 上沒有 DHCP server&lt;/li&gt;&lt;li&gt;不能直接和 host OS 溝通&lt;/li&gt;&lt;/ul&gt;當然，如果你比較習慣 VMware 的 Host-Only Networking，已經有人試出設定的方法：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ubuntuforums.org/archive/index.php/t-346185.html"&gt;http://ubuntuforums.org/archive/index.php/t-346185.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-1440270897954872402?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/1440270897954872402/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=1440270897954872402' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/1440270897954872402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/1440270897954872402'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/08/virtualbox.html' title='VirtualBox 的三種網路型態'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-7514958789337246470</id><published>2008-08-30T15:21:00.004+08:00</published><updated>2008-08-31T11:58:13.307+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VirtualBox'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>用 VirtualBox 跑 Ubuntu Server</title><content type='html'>利用 VirtualBox 來安裝 Ubuntu 8.04.1 LTS Server Edition。過程很順利，不過安裝好了 Ubuntu 卻開不起來，開機時出現 CPU 缺少了一些 feature 的錯誤訊息：&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;This kernel requires the following features not present on the CPU:&lt;br /&gt;0:6&lt;br /&gt;Unable to boot - please use a kernel appropriate for your CPU.&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;原來 32bit 的 x86 最多只能支援到 4GB 的 RAM，但若有 PAE (Physical Address Extension) 的加持就能擴充到 64GB。因為 Ubuntu Server 的 32bit kernel 用到 PAE 這個特性，所以在 VirtualBox 上必須啟動這個 PAE： &lt;blockquote&gt;Settings -&gt; General -&gt; Advanced -&gt; Enable PAE/NX&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-7514958789337246470?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/7514958789337246470/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=7514958789337246470' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7514958789337246470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7514958789337246470'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/08/virtualbox-ubuntu-server.html' title='用 VirtualBox 跑 Ubuntu Server'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-963889853079744907</id><published>2008-07-02T23:16:00.003+08:00</published><updated>2009-06-12T13:10:19.159+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu 的 Manpages</title><content type='html'>寫程式時發現有些標準的 C 函數 man 不到，查了一下才發現 manpage 是分散在三個 packages，需要自己安裝：&lt;br /&gt;&lt;blockquote&gt;$ sudo apt-get install manpages&lt;br /&gt;$ sudo apt-get install manpages-posix&lt;br /&gt;$ sudo apt-get install manpages-posix-dev&lt;/blockquote&gt;其中：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;manpages 包含 GNU/Linux 的基本操作，應該預設就會安裝到。&lt;/li&gt;&lt;li&gt;manpages-posix 則包含 POSIX 所定義公用程式的用法。&lt;/li&gt;&lt;li&gt;manpages-posix-dev 則包含 POSIX 的 header files 和 library calls 的用法。寫程式的人一定需要這一個。&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-963889853079744907?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/963889853079744907/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=963889853079744907' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/963889853079744907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/963889853079744907'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/07/ubuntu-manpages.html' title='Ubuntu 的 Manpages'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-720062194319287735</id><published>2008-06-28T15:50:00.013+08:00</published><updated>2009-09-14T01:38:03.578+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VirtualBox'/><title type='text'>在 VirtualBox 的 NAT 底下開 port</title><content type='html'>VirtualBox 預設的網路模式是 NAT。換句話說，Guest OS 可以透過 Host OS 連到外界，但 Guest OS 受到 NAT 的保護，外界無法連進去。&lt;br /&gt;&lt;br /&gt;因此，若要在 Guest OS 架設任何服務 (例如：sshd)，就必須設定 VirtualBox 的 port forwarding。方法如下：&lt;br /&gt;&lt;blockquote&gt;VMNAME="Ubuntu"&lt;br /&gt;SVR=ssh&lt;br /&gt;&lt;br /&gt;VBoxManage setextradata "$VMNAME" \&lt;br /&gt;"VBoxInternal/Devices/pcnet/0/LUN#0/Config/$SVR/HostPort" \&lt;br /&gt;2222&lt;br /&gt;&lt;br /&gt;VBoxManage setextradata "$VMNAME" \&lt;br /&gt;"VBoxInternal/Devices/pcnet/0/LUN#0/Config/$SVR/GuestPort" \&lt;br /&gt;22&lt;br /&gt;&lt;br /&gt;VBoxManage setextradata "$VMNAME" \&lt;br /&gt;"VBoxInternal/Devices/pcnet/0/LUN#0/Config/$SVR/Protocol" \&lt;br /&gt;TCP&lt;/blockquote&gt;這樣，當外界連到 Host OS 的 port 2222，就等於連到 Guest OS 的 port 22。&lt;br /&gt;&lt;br /&gt;當這種設定很多時，可以用以下的指令來列出所有的設定值：&lt;blockquote&gt;VBoxManage getextradata "$VMNAME" enumerate&lt;/blockquote&gt;注意！做完上述設定之後，要重新啟動 VirtualBox 才會生效。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-720062194319287735?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/720062194319287735/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=720062194319287735' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/720062194319287735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/720062194319287735'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/06/virtualbox-nat-port.html' title='在 VirtualBox 的 NAT 底下開 port'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-3201112675172843655</id><published>2008-06-27T22:42:00.006+08:00</published><updated>2008-09-01T21:56:56.464+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VirtualBox'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>在 Ubuntu 上安裝 VirtualBox OSE</title><content type='html'>&lt;hr /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;貼後補充：亦可到 VirtualBox &lt;/span&gt; &lt;a style="font-weight: bold;" href="http://www.virtualbox.org/"&gt;官方網站&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; 下載適合 Ubuntu 的最新版本，用 dpkg -i 即可安裝。&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;hr /&gt;&lt;br /&gt;雖然 VMware  Player 在 Windows 上用得很順手，我還是決定在 Ubuntu 上試試 VirtualBox。沒想到安裝和使用都出奇的簡單，而且操作介面和功能都令我驚艷。&lt;br /&gt;&lt;br /&gt;安裝方法非常簡單，只要用 Synaptic 或 apt-get 安裝以下 package 即可：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;virtualbox-ose&lt;/li&gt;&lt;li&gt;virtualbox-ose-modules-generic&lt;/li&gt;&lt;/ul&gt;安裝好了之後，在主選單會新增一組「系統工具」的選單，馬上就可以啟動 VirtualBox OSE。不過在你真正執行 virtual machine 之前，你必須先將自己加到 /etc/group 的 vboxusers group。&lt;br /&gt;&lt;br /&gt;其實，我還是有遇到一點小麻煩。用此版的 VirtualBox，一旦將 keyboard 的控制權交給 virtual machine 之後，系統就卡住了：Host 和 Guest 都沒辦法控制，後來才找到解法：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://softsmith.blogspot.com/2008/09/ubuntu-virtualbox-host-key.html"&gt;http://softsmith.blogspot.com/2008/09/ubuntu-virtualbox-host-key.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-3201112675172843655?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/3201112675172843655/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=3201112675172843655' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3201112675172843655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3201112675172843655'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/06/ubuntu-virtualbox-ose.html' title='在 Ubuntu 上安裝 VirtualBox OSE'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-4205266214840554688</id><published>2008-06-25T00:46:00.004+08:00</published><updated>2008-06-25T01:00:35.792+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>在 Ubuntu 上 mount USB drive</title><content type='html'>一般來說，在 Ubuntu Desktop 上掛 USB 碟並不需要特別處理，系統會自己處理。一插上去，就馬上可以使用。但有一些例外情況，需要自己手動 mount，例如從遠端 ssh 進去。&lt;br /&gt;&lt;br /&gt;這時最麻煩的，就是怎麼知道這個 USB 碟的 device name。我發現最簡單的方法是：&lt;br /&gt;&lt;blockquote&gt;ls /dev/disk/by-id/usb-*&lt;/blockquote&gt;搭配 lsusb 的輸出，很容易就可以找到可用來 mount 的 device name。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-4205266214840554688?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/4205266214840554688/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=4205266214840554688' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/4205266214840554688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/4205266214840554688'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/06/ubuntu-mount-usb-drive.html' title='在 Ubuntu 上 mount USB drive'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-5492996783018287118</id><published>2008-06-16T22:12:00.003+08:00</published><updated>2008-06-16T22:44:42.854+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>錯誤代碼: 0x80072EE2</title><content type='html'>工作環境遷移之後，每次執行 Windows Update 總是出現 [錯誤代碼: 0x80072EE2] 。找到以下看似相當豐富的 support 資訊，卻一點用處也沒有：&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://support.microsoft.com/kb/836941/zh-tw"&gt;http://support.microsoft.com/kb/836941/zh-tw&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;終於有一天福至心靈，猜出問題的原因：雙層 NAT。我的 Windows XP 是接在一台 D-Link DI-704P 之內 (簡稱 704P-NAT)，而 DI-704P 的 WAN port 則接到另一個以 Linux 建構的 private network (簡稱 Linux-NAT)。&lt;br /&gt;&lt;br /&gt;幾個簡單的實驗：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;XP 放在 Linux-NAT + 704P-NAT 之內 =&gt; 結果一直出現錯誤&lt;/li&gt;&lt;li&gt;XP 只放在 Linux-NAT 之內 =&gt; 順利完成 Windows Update&lt;/li&gt;&lt;li&gt;XP 只放在 704P-NAT 之內 =&gt; 也順利完成 Windows Update&lt;/li&gt;&lt;/ul&gt;想要進一步分析，所以用 WireShark 在 XP 上抓封包。發現進行 Windows Update 時，一開始都會有2 至 3 秒的溝通 (HTTP)，然後一分多鐘之後再啟動第二次的溝通 (目的主機是 www.update.microsoft.com)，但此時是 TLS (https) 連線，無法進一步分析。只知若出現錯誤，溝通的資料只有 11K 左右；反之，順利進入更新畫面則有 88K 的溝通資料。&lt;br /&gt;&lt;br /&gt;看起來，Windows Update 的通訊協定無法通過兩層的 NAT。或者應該說，Windows Update 的通訊協定是 NAT-unfriendly，但有考慮到一層 NAT 的狀況。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-5492996783018287118?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/5492996783018287118/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=5492996783018287118' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5492996783018287118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5492996783018287118'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/06/0x80072ee2.html' title='錯誤代碼: 0x80072EE2'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-7164845205768181991</id><published>2008-06-14T07:12:00.006+08:00</published><updated>2009-03-14T16:48:52.269+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>在 Ubuntu 上裝 IE</title><content type='html'>將工作環境轉換到 Ubuntu 8.04 之後，一切都相當得心應手。不過有些時候需要用到 IE，若切回 Windows 會相當不方便，所以決定在 Ubuntu 上裝個 IE 來應急。透過 Google 很容易就可以找到安裝方法：&lt;br /&gt;&lt;a href="http://www.tatanka.com.br/ies4linux/page/Installation:Ubuntu"&gt;&lt;blockquote&gt;http://www.tatanka.com.br/ies4linux/page/Installation:Ubuntu&lt;/blockquote&gt;&lt;/a&gt;一開始，需先安裝 wine 和 cabextract 兩個 package：&lt;br /&gt;&lt;blockquote&gt;$ sudo apt-get install wine&lt;br /&gt;$ sudo apt-get install cabextract&lt;/blockquote&gt;接下來就是下載 IEs 4 Linux，也就是 &lt;a href="http://www.tatanka.com.br/"&gt;http://www.tatanka.com.br&lt;/a&gt; 所開發的 shell script，可以自動從 Microsoft 網站抓取 IE 相關的檔案，並以適合 &lt;a href="http://www.winehq.org/"&gt;Wine&lt;/a&gt; 的方式來安裝。目前最新版本是 2.99.0.1：&lt;br /&gt;&lt;blockquote&gt;$ wget http://www.tatanka.com.br/ies4linux/downloads/ies4linux-2.99.0.1.tar.gz&lt;/blockquote&gt;接下來要解開及執行 IEs 4 Linux 來安裝 IE。此版本的 ies4linux 已支援多國語言的 GUI 介面，但是在中文環境有一些問題，所以需強迫以英文介面進行 (若堅持要看中文，&lt;a href="http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?post_id=35354#forumpost35354"&gt;這裡&lt;/a&gt; 有修正方法)：&lt;br /&gt;&lt;blockquote&gt;$ tar xvzf ies4linux-2.99.0.1.tar.gz&lt;br /&gt;$ cd ies4linux-2.99.0.1&lt;br /&gt;$ LANG=C ./ies4linux&lt;/blockquote&gt;接下來，按照 GUI 指示進行就可以順利完成。若安裝時出現 No such file or directory 之類的錯誤，可能是抓檔的部份沒處理好，只要再重新執行幾次 LANG=C ./ies4linux 就可以解決。&lt;br /&gt;&lt;br /&gt;要啟動 IE，請執行 ie6 或 ~/bin/ie6。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-7164845205768181991?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/7164845205768181991/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=7164845205768181991' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7164845205768181991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7164845205768181991'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/06/ubuntu-ie.html' title='在 Ubuntu 上裝 IE'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-4002754772773215633</id><published>2008-05-30T23:27:00.005+08:00</published><updated>2009-01-15T12:42:36.407+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>好康推薦: Wired-Marker</title><content type='html'>因工作和興趣，時常需要研讀網路上的資料，如：RFC、HOWTO 等。這些資料的份量常常和一本書一樣，不是一兩天就看得完。如果你和我一樣，不想浪費紙張而直接在電腦上閱讀，一定和我有一樣的困擾：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;長長的頁面看到一半，下次要接著看的時候，都要先想想上次看到哪裡...&lt;/li&gt;&lt;li&gt;看到重點不能畫線，剪貼？抄筆記？既麻煩又沒有效果。&lt;/li&gt;&lt;li&gt;因為不能畫線，以至於看到後面時，常常找不到看過的重點...&lt;/li&gt;&lt;/ul&gt;今天要推薦的就是能夠解決上述問題的工具：&lt;a href="http://www.wired-marker.org/en/index.html"&gt;Wired Marker&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eG_b3F4N00g/SFkmqaUGzQI/AAAAAAAAADg/RaRNfLgPr4o/s1600-h/Screenshot-Mozilla+Firefox.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_eG_b3F4N00g/SFkmqaUGzQI/AAAAAAAAADg/RaRNfLgPr4o/s400/Screenshot-Mozilla+Firefox.png" alt="" id="BLOGGER_PHOTO_ID_5213240553718074626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Wired Marker 是 Firefox 的外掛程式，有點類似 bookmark 的功能，但使用起來更接近傳統的書籤，你可以在一個頁面的任意位置放置書籤。它更像是一隻螢光筆，你可以在頁面的文字、圖形、表格上畫上醒目的記號。這些記號也同時是書籤的位置，你可以在 Firefox 的左側框點選既有的書籤；也可以在右側捲軸的旁邊看到文件當中各個書籤位置的示意圖，方便快速移動。&lt;br /&gt;&lt;br /&gt;安裝和使用都太簡單了，不需說明。以下再介紹這個程式可能用處：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;剪貼筆記本，畫過線的重點可以綜合成一頁，方便瀏覽檢視。&lt;/li&gt;&lt;li&gt;螢光筆可以自訂多種顏色，方便組織分類。&lt;/li&gt;&lt;li&gt;畫線的資料是存在 PC 上，但可以 export 成 XML，很容易就可以複製、傳遞。&lt;/li&gt;&lt;/ul&gt;心動了嗎？自己試試看吧。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-4002754772773215633?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/4002754772773215633/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=4002754772773215633' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/4002754772773215633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/4002754772773215633'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/05/wired-marker.html' title='好康推薦: Wired-Marker'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_eG_b3F4N00g/SFkmqaUGzQI/AAAAAAAAADg/RaRNfLgPr4o/s72-c/Screenshot-Mozilla+Firefox.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-700722157431689306</id><published>2008-05-24T23:16:00.006+08:00</published><updated>2008-05-24T23:37:48.375+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux Programming'/><title type='text'>Free Tutorials: Linux Device Drivers</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.xml.com/ldd/chapter/book/"&gt;Linux Device Drivers, 2nd Edition&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://lwn.net/Kernel/LDD3/"&gt;Linux Device Drivers, 3rd Edition&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.faqs.org/docs/kernel/"&gt;The Linux 2.4 Kernel Module Programming Guide, ver 2.4.0&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://tldp.org/LDP/lkmpg/2.6/html/"&gt;The Linux 2.6 Kernel Module Programming Guide, ver 2.6.*&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tldp.org/HOWTO/Module-HOWTO/"&gt;Linux Loadable Kernel Module HOWTO, Revision 1.09&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-700722157431689306?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/700722157431689306/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=700722157431689306' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/700722157431689306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/700722157431689306'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/05/free-tutorials-linux-device-drivers.html' title='Free Tutorials: Linux Device Drivers'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-1459146192559255607</id><published>2008-05-23T01:01:00.000+08:00</published><updated>2008-05-24T23:55:04.132+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux Programming'/><title type='text'>Free Tutorials: Linux Programming</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.faqs.org/docs/artu/"&gt;The Art of Unix Programming, Revision 1.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.advancedlinuxprogramming.com/"&gt;Advanced Linux Programming, 1st Edition&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tldp.org/LDP/lpg/index.html"&gt;The Linux Programmer's Guide, Version 0.4&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.informit.com/content/downloads/perens/0130091154.pdf"&gt;The Linux Development Platform&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.gnu.org/doc/clib-system.html"&gt;GNU C Library: System &amp;amp; Network Applications&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.gnu.org/doc/clib-fund.html"&gt;GNU C Library: Application Fundamentals&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://people.redhat.com/drepper/dsohowto.pdf"&gt;How To Write Shared Libraries, Version 4.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.dwheeler.com/program-library/Program-Library-HOWTO/"&gt;Program Library HOWTO&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-1459146192559255607?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/1459146192559255607/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=1459146192559255607' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/1459146192559255607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/1459146192559255607'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/01/linux-programming-tutorials_07.html' title='Free Tutorials: Linux Programming'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-2516088148834651188</id><published>2008-05-20T22:21:00.006+08:00</published><updated>2009-09-06T15:39:47.076+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu 的 Terminal Emulator</title><content type='html'>RS232 是發展 embedded 系統時，相當重要的一個介面。當然，也需要合適的 terminal emulator 來搭配。在 Windows 上，有不少好用的 terminal emulator 可選擇，例如：TeraTerm Pro、PuTTY 或 Windows 預付的超級終端機等等。但在 GNU/Linux 上的選擇就好像少了一點，以下簡單介紹兩個用在 Ubuntu 底下的 terminal emulator。&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;CuteCom&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;CuteCom 是 line-based 的 graphical serial terminal。所謂 line-based 是以「行」為單位來輸入，不像一般的 terminal emulator 是以 character 為單位。優點是可以不管 device 的 console 有沒有編輯命令列的能力，我們都可以先在 cutecom 上編輯好再一次送出指令。送出的指令也都存在 GUI 上，只要點一點就可以叫出來重送。另一個好處是可以在字元與字元之間加上延遲，這可解決某些 device 的 console 會掉字元的問題。&lt;br /&gt;&lt;br /&gt;Line-based 也是 cutecom 的缺點。許多 embedded Linux 的 console 都有 auto-complete 的功能，但在 cutecom 上卻無法使用。另一個較嚴重的缺點則是不能處理 escape sequences，諸如彩色、粗體、游標移動等，都不能正確顯示。甚至連 tab (0x9) 也都沒有處理。因此 cutecom 比較適合用在簡單型的 console 上。&lt;br /&gt;&lt;br /&gt;CuteCom 的安裝方法非常簡單：&lt;br /&gt;&lt;blockquote&gt;apt-get install cutecom&lt;/blockquote&gt;執行的方法更簡單：cutecom，沒有任何命令列參數。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;MiniCom&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;MiniCom 是很傳統的 text-based terminal emulator。雖然沒有 CuteCom 在前面提到的優點，但同樣也沒有那些缺點。既可使用 auto-complete，也可正確處理 escape sequences。因此，非常適合用來當作 embedded Linux 的 console。&lt;br /&gt;&lt;br /&gt;MiniCom 安裝方法也一樣簡單：&lt;br /&gt;&lt;blockquote&gt;apt-get install minicom&lt;/blockquote&gt;使用方法也不難，以下幾個心得提供大家參考。首先是設定：&lt;br /&gt;&lt;blockquote&gt;minicom -s&lt;/blockquote&gt;如果你的中文顯示沒有對齊，畫面不清楚。可以用以下方法強迫用英文顯示選單：&lt;br /&gt;&lt;blockquote&gt;LANG= minicom -s&lt;/blockquote&gt;進入設定畫面，有幾個重要的設定項目：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Serial port setup&lt;/span&gt;，設定 serial device (/dev/ttyS0)、baud rate 等。&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Modem and dialing&lt;/span&gt;，將 Init string、Reset string 設成空字串。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Screen and keyboard&lt;/span&gt;，將 Status line disabled 以免 status line 破壞畫面。此外，&lt;span style="font-weight: bold;"&gt;Edit Macros&lt;/span&gt; 可提供使用者定義 F1~F10 的 macro，你可以將常用的輸入定義為功能鍵。&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Save setup as dfl&lt;/span&gt;，會將設定存成 ~/.minirc.dfl，設定完畢就 &lt;span style="font-weight: bold;"&gt;Exit from Minicom&lt;/span&gt;。&lt;/li&gt;&lt;/ul&gt;如果設定都正確，在 shell 輸入 minicom 就可以連到 device 的 console 了。離開時，記得按 Ctrl-A 然後 x。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-2516088148834651188?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/2516088148834651188/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=2516088148834651188' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2516088148834651188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2516088148834651188'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/05/ubuntu-terminal-emulator.html' title='Ubuntu 的 Terminal Emulator'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-8707935248057335328</id><published>2008-05-19T20:42:00.006+08:00</published><updated>2008-05-19T23:50:33.399+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMware Player'/><title type='text'>VMware Virtual Machine 的效能</title><content type='html'>很好奇 VMware virtual machine 的效能 (performance) 到底如何？於是找了個機會做了一個實驗。實驗用機器的規格為：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;CPU = Intel Celeron 430 @ 1.80GHz&lt;/li&gt;&lt;li&gt;DRAM = 1GiB - 64MiB&lt;/li&gt;&lt;/ul&gt;此 PC 安裝了兩套作業系統。&lt;br /&gt;&lt;br /&gt;第一套是 Windows XP Service Pack 2，並在上面安裝 VMware Player 2.0.2 來跑 Ubuntu 7.10 JeOS i386。分配給 Guest OS 的 memory 是 512MiB，virtual HDD 是 10GiB。我在上面編譯一套 embedded Linux 的系統，總共花了 23 分鐘才完成。&lt;br /&gt;&lt;br /&gt;第二套是 Ubuntu 8.04 LTS Desktop x86_64，安裝在 40GiB 的硬碟空間上 (當然 1GiB 的 memory 全歸它使用)。在此環境下編譯同一套系統，總共花了 16 分鐘，大約快了三分之一。&lt;br /&gt;&lt;br /&gt;看起來效能的差距不算小。不過一般來說，我們較常進行的是約需兩三分鐘的局部編譯，這時兩者的差異就不是那麼明顯了。況且，編輯的時間比編譯還多更多。因此結論是：還不錯用。&lt;br /&gt;&lt;br /&gt;PS：雖然 Ubuntu 的版本不同，但兩次編譯用的 toolchain 是同一套。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-8707935248057335328?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/8707935248057335328/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=8707935248057335328' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8707935248057335328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8707935248057335328'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/05/vmware-virtual-machine.html' title='VMware Virtual Machine 的效能'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-6990010916122035459</id><published>2008-04-18T23:03:00.002+08:00</published><updated>2008-04-18T23:23:36.324+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eee PC'/><title type='text'>在 EeePC 上安裝 C Compiler</title><content type='html'>臨時想用 C 寫個小程式，但 EeePC 上卻沒有 C Compiler 可用，這激起我想在小白上面安裝 GNU tool  chain 的衝動。&lt;br /&gt;&lt;br /&gt;終究按捺下衝動，上網 google 到一套小型的編譯器 -- &lt;a href="http://fabrice.bellard.free.fr/tcc/"&gt;Tiny C Compiler&lt;/a&gt;。雖然只有名副其實的 120K，不過該有的功能一樣不少。適用之後還蠻不錯的，介紹給大家玩玩。&lt;br /&gt;&lt;br /&gt;首先，下載以下 packages 到 /tmp：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;http://packages.debian.org/etch/tcc&lt;/li&gt;&lt;ul&gt;&lt;li&gt;tcc_0.9.23-4_i386.deb&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;http://packages.debian.org/etch/libc6-dev&lt;/li&gt;&lt;ul&gt;&lt;li&gt;libc6-dev_2.3.6.ds1-13etch5_i386.deb&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;linux-kernel-headers_2.6.18-7_i386.deb&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;   安裝方法：&lt;br /&gt;&lt;blockquote&gt;sudo -s&lt;br /&gt;dpkg -i tcc_0.9.23-4_i386.deb&lt;br /&gt;dpkg -i linux-kernel-headers_2.6.18-7_i386.deb&lt;br /&gt;dpkg -i --force-depends libc6-dev_2.3.6.ds1-13etch5_i386.deb&lt;br /&gt;&lt;/blockquote&gt;使用方法：&lt;br /&gt;&lt;blockquote&gt;tcc hello.c&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-6990010916122035459?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/6990010916122035459/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=6990010916122035459' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6990010916122035459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6990010916122035459'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/04/eeepc-c-compiler.html' title='在 EeePC 上安裝 C Compiler'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-5957210462570494457</id><published>2008-03-15T12:19:00.007+08:00</published><updated>2009-01-02T00:55:55.404+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wxWidgets'/><category scheme='http://www.blogger.com/atom/ns#' term='Eee PC'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>在 EeePC 上使用 wxPython</title><content type='html'>最近在學 wxWidgets。有時只帶 EeePC 出門，又想做點練習... 總不能把整套 GCC 灌到 EeePC 上吧？所以想到利用 EeePC 已內建的 Python。&lt;br /&gt;&lt;br /&gt;Python 不能直接使用 wxWidgets，還需要安裝 wxPython 才行。Asus 並沒有提供 wxPython 套件，只好跟 Ubuntu 借。方法如下：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;在 /etc/apt/sources.list 新增以下這一行 (或其他 &lt;a href="https://launchpad.net/ubuntu/+archivemirrors"&gt;Ubuntu mirror&lt;/a&gt;)：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;deb http://free.nchc.org.tw/ubuntu dapper main universe&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;然後到 console 執行以下指令：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;sudo apt-get update&lt;/li&gt;&lt;li&gt;sudo apt-get install python-wxgtk&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;這個動作會安裝以下三個套件：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;libwxgtk2.6-0 (2.6.1.2ubuntu2)&lt;/li&gt;&lt;li&gt;python-wxversion (2.6.1.2ubuntu2)&lt;/li&gt;&lt;li&gt;python-wxgtk2.6 (2.6.1.2ubuntu2)&lt;/li&gt;&lt;/ul&gt;安裝完畢，可以用以下範例來試試：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;http://www.wxpython.org/test7.py.html&lt;/li&gt;&lt;/ul&gt;以下是一篇很簡短的中文教材：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;http://yenjinc.info/?p=46&lt;/li&gt;&lt;/ul&gt;PS：可能不是專為 EeePC 建立的套件，程式結束之後有一些錯誤訊息：&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size:78%;"&gt;(python:4924): GLib-GObject-WARNING **: instance of invalid non-instantiatable type `(null)'&lt;br /&gt;&lt;br /&gt;(python:4924): GLib-GObject-CRITICAL **: g_signal_handlers_disconnect_matched: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed&lt;br /&gt;&lt;br /&gt;(python:4924): GLib-GObject-WARNING **: instance of invalid non-instantiatable type `(null)'&lt;br /&gt;&lt;br /&gt;(python:4924): GLib-GObject-CRITICAL **: g_signal_handlers_disconnect_matched: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;還不知道怎麼解決這現象。不過，將就用用還可以...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-5957210462570494457?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/5957210462570494457/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=5957210462570494457' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5957210462570494457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5957210462570494457'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/03/eeepc-wxpython.html' title='在 EeePC 上使用 wxPython'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-1908168054983562070</id><published>2008-03-10T00:32:00.004+08:00</published><updated>2008-06-27T22:41:23.928+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><category scheme='http://www.blogger.com/atom/ns#' term='Eee PC'/><title type='text'>在 EeePC 播 Real Player 影片</title><content type='html'>EeePC 內建的影音播放器並不支援 Real Player 的影片格式。想要在 EeePC 上看 rm/rmvb 格式的影片，有兩種方法：&lt;br /&gt;&lt;br /&gt;第一是自己安裝 Real Player for Linux。這個方法我沒試過，有興趣的人可以參考如下圖文並茂的安裝教學：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://tw.myblog.yahoo.com/eee-pc/article?mid=945&amp;amp;prev=977&amp;amp;next=943&amp;amp;l=a&amp;amp;fid=23"&gt;RealPlayer For EeePC 701 安裝步驟&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;第二個方法是幫 EeePC 原本就內建的影音播放器灌輸功力 -- 加掛編解碼器 (codec)。方法非常簡單：到 &lt;a href="http://www.mplayerhq.hu/MPlayer/releases/codecs/"&gt;MPlayer&lt;/a&gt; 的網站下載 &lt;a href="http://www.mplayerhq.hu/MPlayer/releases/codecs/rp9codecs-20050115.tar.bz2"&gt;rp9codecs-20050115.tar.bz2&lt;/a&gt;，解開之後將幾個 *.so.6.0 的檔案複製到 /usr/lib/codecs 目錄即可。詳細方法請參考以下網頁 (注意！該網頁給的下載連結有錯，解開之後是給 Windows 用的 .dll 檔，請改成上述檔案即可)：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.yam.com/tad0616/article/12306274"&gt;讓Eee PC內建的影音播放器支援 rmvb&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-1908168054983562070?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/1908168054983562070/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=1908168054983562070' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/1908168054983562070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/1908168054983562070'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/03/eeepc-real-player.html' title='在 EeePC 播 Real Player 影片'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-8238578552305924736</id><published>2008-03-07T21:13:00.003+08:00</published><updated>2008-03-07T21:42:37.935+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cygwin'/><title type='text'>在 Cygwin 安裝 Man Pages</title><content type='html'>Cygwin 裡的 man page 資料很少，經常 man 不到。找了許久，才發現 &lt;a href="http://tldp.org/manpages/man.php"&gt;The Linux Documentation Project &lt;/a&gt;有 man pages 可以下載。安裝方法如下：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;下載 &lt;a href="http://tldp.org/manpages/man-pages-2.78.tar.bz2"&gt;man-pages-2.78.tar.bz2&lt;/a&gt; 或更新的版本&lt;/li&gt;&lt;li&gt;將檔案解到 /usr/share/man/tldp.org-2.78&lt;/li&gt;&lt;li&gt;編輯 /usr/share/misc/man.conf，加入以下這行：&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;MANPATH    /usr/share/man/tldp.org-2.78&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;這樣就 OK 了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-8238578552305924736?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/8238578552305924736/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=8238578552305924736' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8238578552305924736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8238578552305924736'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/03/cygwin-man-pages.html' title='在 Cygwin 安裝 Man Pages'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-8236734405966387707</id><published>2008-02-29T21:47:00.003+08:00</published><updated>2008-02-29T22:20:23.772+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cygwin'/><title type='text'>Cygwin 的 Terminal</title><content type='html'>除了之前介紹過的 &lt;a href="http://softsmith.blogspot.com/2008/02/cygwin-windows-nfs-server.html"&gt;NFS server&lt;/a&gt;，Cygwin 還有很多好用的地方，如：充當 X server 等。所以 Cygwin 是我必備的軟體之一。&lt;br /&gt;&lt;br /&gt;不過，用標準方法安裝的 Cygwin，terminal 是架構在 DOS 視窗之上，非常不好用。我推薦大家使用 rxvt。首先，你必須重跑 setup.exe 來安裝 Shells 底下 rxvt 這個 package，然後自己建立如下的捷徑：&lt;br /&gt;&lt;blockquote&gt;C:\Cygwin\bin\rxvt.exe -sr -sl 1000 -e /bin/bash --login -i&lt;br /&gt;&lt;/blockquote&gt;rxvt 的參數就不仔細介紹了，請大家自己 man man 看。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-8236734405966387707?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/8236734405966387707/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=8236734405966387707' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8236734405966387707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8236734405966387707'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/02/cygwin-terminal.html' title='Cygwin 的 Terminal'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-1042594928253514586</id><published>2008-02-28T22:01:00.003+08:00</published><updated>2008-02-29T22:41:36.875+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eee PC'/><title type='text'>啟動 Eee PC 的進階模式</title><content type='html'>Eee PC 正熱門，我也弄了一部來玩。第一件工作就是要把預設的簡易模式改成進階模式。找了很多資料來看，就屬以下這份最清楚完整：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://wiki.eeeuser.com/howto:getkde"&gt;http://wiki.eeeuser.com/howto:getkde&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;不過看起來有點複雜，以下是我整理出來的簡化版，請大家參考：&lt;br /&gt;&lt;br /&gt;首先，按 Ctrl-Alt-T 開啟 console，然後執行以下命令：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;sudo -s&lt;/li&gt;&lt;li&gt;echo "deb http://download.tuxfamily.org/eeepcrepos p701 main" &gt;&gt;  /etc/apt/sources.list&lt;/li&gt;&lt;li&gt;apt-get update&lt;/li&gt;&lt;li&gt;apt-get install advanced-desktop-eeepc&lt;/li&gt;&lt;li&gt;exit&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;安裝完畢，可以將剛剛加入 sources.list 的那一行刪除。關機時選擇「進階模式」就可以重新開啟為進階模式了。要回到簡易模式，只要在 Logout 時選 Easy Mode 就可以了。&lt;br /&gt;&lt;br /&gt;註：apt-get update 時會出現以下訊息，可以忽略：&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;W: GPG error: http://download.tuxfamily.org p701 Release: 由於沒有公鑰，下列簽名無法進行驗證： NO_PUBKEY 2042B4BAF2BCFBF8&lt;br /&gt;W: 用『apt-get -f install』指令或許能修正這些問題。&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-1042594928253514586?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/1042594928253514586/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=1042594928253514586' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/1042594928253514586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/1042594928253514586'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/02/eee-pc.html' title='啟動 Eee PC 的進階模式'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-5694182824055820289</id><published>2008-02-27T00:19:00.001+08:00</published><updated>2008-02-28T00:48:18.055+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>善用 Windows XP「執行身分」的命令</title><content type='html'>即使一部 Unix 機器只有自己一個人用，「在執行管理工作時，才以 root 身份做事」應該是使用 Unix 的人都有的基本觀念吧？但我發現很多使用 Windows 的人都習慣用 Administrator 的權限來進行一般日常的操作。究其原因，可能是貪圖方便吧？&lt;br /&gt;&lt;br /&gt;Unix 有個 sudo 指令，可以很方便地切換 root 身份去執行需要管理權限的工作。其實，Windows 上也有類似的方法，那就是「執行身分 (Run As)」：在圖示上按右鍵就可以看到「執行身分」這個選項。&lt;br /&gt;&lt;br /&gt;「執行身分」這個功能需要啟動 Secondary Logon 這項服務才可以動作。如果這服務沒有啟動，會有如下的錯誤訊息：&lt;br /&gt;&lt;blockquote&gt;無法啟動服務，可能因為服務已停用，或它沒有相關的啟用裝置。&lt;/blockquote&gt;解決方法是：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;控制台 -&gt; 系統管理工具 -&gt;  服務 -&gt; Secondary Logon&lt;/li&gt;&lt;li&gt;將「啟動類型」改成「自動」即可&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;參考資料&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://support.microsoft.com/kb/294676/zh-tw"&gt;http://support.microsoft.com/kb/294676/zh-tw&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-5694182824055820289?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/5694182824055820289/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=5694182824055820289' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5694182824055820289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5694182824055820289'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/02/windows-xp.html' title='善用 Windows XP「執行身分」的命令'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-2781284235276256282</id><published>2008-02-26T21:01:00.010+08:00</published><updated>2008-03-06T23:48:52.459+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cygwin'/><category scheme='http://www.blogger.com/atom/ns#' term='NFS Server'/><title type='text'>用 Cygwin 在 Windows 上架設 NFS Server</title><content type='html'>想在 Windows 上架個 NFS Server，但除了 Cygwin 和 SFU (Microsoft Windows Services for UNIX) 之外，找不到 free 的 NFS Server 解決方案。以下就先介紹 Cygwin 上 NFS Server 的安裝方式。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;安裝&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Cygwin 上的 NFS Server 需要以下幾個 packages (執行用來安裝 Cygwin 的 &lt;a href="http://cygwin.com/"&gt;setup.exe&lt;/a&gt; 程式就可以勾選。雙冒號之前是 Category，後面是不含版本編號 Package 名稱)：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Net :: nfs-server&lt;/li&gt;&lt;li&gt;Libs :: sunrpc&lt;/li&gt;&lt;li&gt;Admin :: cygrunsrv&lt;/li&gt;&lt;/ul&gt;安裝完成之後，需進入 Cygwin console 執行以下指令：&lt;br /&gt;&lt;blockquote&gt;/usr/bin/nfs-server-config&lt;/blockquote&gt;執行時會出現以下畫面，請回答 yes：&lt;br /&gt;&lt;blockquote  style="font-family:courier new;"&gt;&lt;pre&gt;&lt;span style="font-size:85%;"&gt;This script sets up a default configuration for running an NFS server under&lt;br /&gt;Cygwin.  As part of this setup, the script will do the following:&lt;br /&gt;&lt;br /&gt;1) Create a user account to run the services under. [OPTIONAL]&lt;br /&gt;2) Install portmap, mountd, and nfsd as Windows services.&lt;br /&gt;3) Create a sample exports file.&lt;br /&gt;4) Create a sample uid/gid mapping file.&lt;br /&gt;&lt;br /&gt;After installing, please read the nfs-server README for Cygwin:&lt;br /&gt;&lt;br /&gt;/usr/share/doc/Cygwin/nfs-server-2.3-*.README&lt;br /&gt;&lt;br /&gt;This document contains notes on installation and documents known problems&lt;br /&gt;and workarounds with the NFS server; ex:&lt;br /&gt;&lt;br /&gt;- ISSUE : Recommend using ntsec&lt;br /&gt;- ISSUE : Daemons are single-threaded&lt;br /&gt;- ISSUE : Daemons require 'impersonate logged on user' right.&lt;br /&gt;- ISSUE : Daemons cannot re-export mapped network drives&lt;br /&gt;- ISSUE : Daemons expect 'nobody' or 'Guest' as anonymous user&lt;br /&gt;- ISSUE : Portmap service fails to start&lt;br /&gt;- ISSUE : Cannot export Windows directories not under Cygwin root&lt;br /&gt;- ISSUE : Considerations when mapping UIDs/GIDs&lt;br /&gt;&lt;br /&gt;Do you want to continue? (yes/no)&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;接下來的畫面是詢問你要不要使用 separate user account 來執行 NFS Server，在 XP 上一定要回答 yes。接下來會問你帳號名稱和密碼。這個帳號是在 XP 上的帳號，用來執行 service 的，帳號密碼都要對才可以 (請仔細輸入帳號，不然有許多設定需要修改，相當麻煩)：&lt;br /&gt;&lt;blockquote  style="font-family:courier new;"&gt;&lt;pre&gt;&lt;span style="font-size:85%;"&gt;Checking for other Unix environments on this system ...&lt;br /&gt;Good! There doesn't seem to be any other Unix environments installed.&lt;br /&gt;&lt;br /&gt;You can choose to install the services so that they run under the local system&lt;br /&gt;account, or under a separate user account.  Which option you should choose&lt;br /&gt;depends on which version of Windows you are running:&lt;br /&gt;&lt;br /&gt;Windows 2000 : You may run nfsd under either a local system account or&lt;br /&gt;      a separate user account.  You _probably_ want to run under&lt;br /&gt;      the local system account.&lt;br /&gt;Windows XP   : You _must_ run nfsd under a separate user account.&lt;br /&gt;&lt;br /&gt;If you choose to run nfsd under a separate user account, you will be prompted&lt;br /&gt;for a user name and password.  If the user name you supply does not exist,&lt;br /&gt;it will be created.&lt;br /&gt;&lt;br /&gt;Do you want to run nfsd under a separate user account? (yes/no)&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;設定&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;完成上述動作之後，就差不多可以啟動 NFS Server 了。在此之前，請修改 Cygwin 上的&lt;span style="font-family:courier new;"&gt;/etc/exports&lt;/span&gt; 來設定要對外開放的目錄位置。以下是個簡單例子，詳細的格式請參考 &lt;span style="font-family:courier new;"&gt;man exports&lt;/span&gt;：&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;/home/share&lt;br /&gt;/cygdrive/d/work 192.168.6.14(rw)&lt;/blockquote&gt;/home/share 開放給所有人讀取；/cygdrive/d/work (即 D:\work，在 Cygwin，要用 /cygdrive/c 來代表 C:，餘此類推) 只給來自 192.168.6.14 的 client 讀寫。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;啟動&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;接下來就要啟動 NFS Server 了：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;到 控制台 -&gt; 系統管理工具 -&gt;  服務&lt;/li&gt;&lt;li&gt;將以下服務一一啟動：&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Cygwin mountd&lt;/li&gt;&lt;li&gt;Cygwin nfsd&lt;/li&gt;&lt;li&gt;Cygwin portmap&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;如果你之前設定的密碼有問題，可以在此修改 (雙擊上述項目，切到「登入」頁)，若是帳號有問題，建議重新執行 /usr/bin/nfs-server-config。&lt;br /&gt;&lt;br /&gt;若一切正常，應該可以順利啟動以上三個服務。這個動作只需要做一次就可以了，以後再登入也都會保持啟動狀態。但以後若修改 /etc/exports 檔，必須重新啟動 portmap 這個服務 (會自動重新啟動其他兩個)。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;障礙排除&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;若啟動上述 service 失敗，請利用以下方式來找出錯誤原因：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;控制台 -&gt; 系統管理工具 -&gt; 事件檢視器&lt;/li&gt;&lt;/ul&gt;仔細查看系統部份是否有新產生錯誤事件。若找不到，就找找應用程式部份。例如我啟動 portmap 的時候出現一個錯誤訊息：「&lt;span style="font-weight: bold;"&gt;服務已啟動又停止&lt;/span&gt;」。找了好久才發現到 portmap 所需要的 port (TCP/UDP 111) 已經被佔用了。將佔用該 port 的程式移除問題就解決了。同理，也要小心 NFS 的 port (UDP 2049) 是否有被佔用。&lt;br /&gt;&lt;br /&gt;若上述三個 service 順利啟動，但是 client 在 mount 的時候一直 time out，很有可能是被 Windows firewall 給擋下來了。請按如下方式處理：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;控制台 -&gt; Windows 防火牆 -&gt; 例外&lt;/li&gt;&lt;li&gt;用「新增程式」一一加入以下三隻程式：&lt;/li&gt;&lt;ul&gt;&lt;li&gt;C:\cygwin\usr\sbin\portmap.exe&lt;/li&gt;&lt;li&gt;C:\cygwin\usr\sbin\rpc.mountd.exe&lt;/li&gt;&lt;li&gt;C:\cygwin\usr\sbin\rpc.nfsd.exe&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;參考資料&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.csparks.com/CygwinNFS/index.xhtml"&gt;http://www.csparks.com/CygwinNFS/index.xhtml&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-2781284235276256282?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/2781284235276256282/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=2781284235276256282' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2781284235276256282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2781284235276256282'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/02/cygwin-windows-nfs-server.html' title='用 Cygwin 在 Windows 上架設 NFS Server'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-5556936159132600154</id><published>2008-02-21T23:07:00.004+08:00</published><updated>2008-02-28T00:42:20.410+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>移除 Windows 桌面的資源回收筒</title><content type='html'>在現實的生活中，不論是家裏或辦公室，我的桌面都亂得可以。但我卻對電腦上的虛擬桌面有無法克制的潔癖：不喜歡放任何的東西，包含資源回收筒。&lt;br /&gt;&lt;br /&gt;以下是移除資源回收筒的方法：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;執行 regedit，找到以下機碼 (若有缺少，必須自己新增)： &lt;span style="font-family:courier new;"&gt;HKEY_CURRENT_USER\Software&lt;br /&gt;\Microsoft\Windows\CurrentVersion&lt;br /&gt;\Explorer\HideDesktopIcons\NewStartPanel&lt;/span&gt;&lt;/li&gt;&lt;li&gt;編輯或新增一個內容為 1 的 DWORD 機碼，名稱如下： &lt;span style="font-family:courier new;"&gt;{645FF040-5081-101B-9F08-00AA002F954E}&lt;/span&gt;&lt;/li&gt;&lt;li&gt;儲存後登出再登入即可生效&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;參考資料&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="http://support.microsoft.com/kb/810869/zh-tw"&gt;http://support.microsoft.com/kb/810869/zh-tw&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-5556936159132600154?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/5556936159132600154/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=5556936159132600154' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5556936159132600154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5556936159132600154'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/02/windows.html' title='移除 Windows 桌面的資源回收筒'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-1932595433465129168</id><published>2008-02-10T12:25:00.000+08:00</published><updated>2008-02-13T00:32:29.720+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming Language'/><title type='text'>Programming Paradigms</title><content type='html'>重新拿出 &lt;a href="http://www.research.att.com/%7Ebs/3rd.html"&gt;The C++ Programming Language&lt;/a&gt; 來看 (C++ 的爸爸, Bjarne Stroustrup, 寫的)，覺得 &lt;a href="http://www.research.att.com/%7Ebs/3rd_tour.pdf"&gt;Programming Paradigms&lt;/a&gt; 這一節寫得真好。&lt;br /&gt;&lt;br /&gt;首先，他強調 &lt;span style="font-weight: bold;"&gt;支援&lt;/span&gt; (support) 和 &lt;span style="font-weight: bold;"&gt;允許&lt;/span&gt; (enable) 是不相同的：&lt;br /&gt;&lt;blockquote&gt;A language is said to &lt;span style="font-weight: bold;"&gt;support&lt;/span&gt; a style of programming if it provides facilities that make it convenient (reasonably easy, safe, and efficient) to use that style. A language does &lt;span style="font-weight: bold;"&gt;not support&lt;/span&gt; a technique if it takes exceptional effort or skill to write such programs; it merely &lt;span style="font-weight: bold;"&gt;enables&lt;/span&gt; the technique to be used.&lt;/blockquote&gt;在接下來的 programming styles 介紹當中，我們可以更了解這兩個概念的不同之處。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Procedural Programming&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;這是最早期的程式設計方法，它的法則是：&lt;br /&gt;&lt;blockquote&gt;Decide which procedures you want;&lt;br /&gt;use the best algorithms you can find.&lt;/blockquote&gt;也就是說，先想好一件工作需要由哪些 procedures 完成；再用最好的演算法完成這些  procedures。Fortran 算是 support 這種程式設計方式的始祖，C 也 support 這種設計方法。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Modular Programming&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;隨著程式規模愈來愈大，程式設計開始重視如何組織資料。將資料和處理這些資料的 procedures 結合在一起，稱之為 module。這種程式設計方法的法則是：&lt;br /&gt;&lt;blockquote&gt;Decide which modules you want;&lt;br /&gt;partition the program so that data is hidden within modules.&lt;/blockquote&gt;也就是說，以資料為中心，將相關的資料和 procedures 結合成各自獨立的 module。Module 和 module 之間，資料是隱藏起來的，所以此種法則也叫做 data-hiding principle。Modula-2 直接 support 這種程式設計方式，但 C 只能算是 enable 這種方法。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Data Abstraction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;在某些應用場合，data hiding 這個觀念仍然不夠理想，必須導入 abstract data types 的觀念 (也就是 user-defined types)。這種程式設計方法的法則是：&lt;br /&gt;&lt;blockquote&gt;Decide which types you want;&lt;br /&gt;provide a full set of operations for each type.&lt;/blockquote&gt;也就是說，先想好有哪些資料型態要操作，然後為每一個資料型態設計完整的操作程序。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Object-Oriented Programming&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;對於類似圖形使用者介面的系統，data abstraction 缺乏彈性和擴充能力。這時，就需要導入 object-oriented 這種可以繼承類別的觀念。這種程式設計方法的法則是：&lt;br /&gt;&lt;blockquote&gt;Decide which classes you want;&lt;br /&gt;provide a full set of operations for each class;&lt;br /&gt;make commonality explicit by using inheritance.&lt;br /&gt;&lt;/blockquote&gt;也就是說，先想好有哪些類別要操作，然後為每一個類別設計完整的操作程序；類別和類別之間的共通特性要以繼承的方式來處理。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Generic Programming&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;這種程式設計方法的法則是：&lt;br /&gt;&lt;blockquote&gt;Decide which algorithms you want;&lt;br /&gt;parameterize them so that they work for&lt;br /&gt;a variety of suitable types and data structures.&lt;/blockquote&gt;這一部份，我還要多多努力學習才行。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-1932595433465129168?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/1932595433465129168/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=1932595433465129168' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/1932595433465129168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/1932595433465129168'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/02/programming-paradigms.html' title='Programming Paradigms'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-6023671858786403615</id><published>2008-02-09T10:24:00.001+08:00</published><updated>2008-02-28T00:43:44.584+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming Language'/><title type='text'>TIOBE Programming Community Index</title><content type='html'>&lt;a href="http://www.tiobe.com/tpci.htm"&gt;TIOBE Programming Community Index&lt;/a&gt; 是一份很有趣的統計資料。它利用搜尋引擎來統計 programming language 的熱門程度，每個月更新一次。除了 2005 年前後被 C 打敗之外，Java 已經蟬聯盟主寶座多年，C 則穩居第二名。&lt;br /&gt;&lt;br /&gt;排名總是會引起誤解。例如：Java 比 C/C++ 好。我想這是非常錯誤的觀念。Programming language 只是個工具，不同場合需要不同的工具。如此而已。&lt;br /&gt;&lt;br /&gt;套句廣告台詞：它傻瓜，你聰明。會使用對的 programming language 來解決問題，才是聰明的程式設計師。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-6023671858786403615?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/6023671858786403615/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=6023671858786403615' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6023671858786403615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6023671858786403615'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/02/tiobe-programming-community-index.html' title='TIOBE Programming Community Index'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-8860008252591344566</id><published>2008-02-02T00:03:00.000+08:00</published><updated>2008-02-03T00:58:33.207+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMware Player'/><title type='text'>VMware 的 Bridged, Host-only 和 NAT 網路型態</title><content type='html'>VMware Player 的 host OS 和 guest OS 之間有三種網路型態：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Bridged Networking&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;在這種網路型態之下，guest OS 是透過一個 virtual bridge 和 host OS 所在的 Ethernet 相連，請參考 VMware 的官方 &lt;a href="http://www.vmware.com/support/ws5/doc/ws_net_configurations_bridged.html"&gt;示意圖&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;對於與 host OS 同在一個 Ethernet 上的機器來說，guest OS 和 host OS 是兩台獨立的電腦，都可以透過同一個 Ethernet 介面連接，並無法分辨出這兩個 OS 其實是在同一台機器上執行。甚至當 Ethernet 連線出問題時，guest OS 和 host OS 也不能互通 (即使是在同一台機器之內)。&lt;br /&gt;&lt;br /&gt;換句話說，當你把接到 host OS 的網路線拔掉時，這兩個 OS 就無法溝通。因此，想把 VMware Player 灌在 notebook 上帶著跑的人，這種網路型態是不太合適的。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Host-Only Networking&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;在這種網路型態之下，guest OS 和 host OS 是在一個與世隔絕的虛擬網路上。此虛擬網路有一個 DHCP server，可以分配 IP address 給 guest OS 和 host OS (分配給一個虛擬的介面)。因此，guest OS 和 host OS 可以互通。請參考 VMware 的官方 &lt;a href="http://www.vmware.com/support/ws5/doc/ws_net_configurations_hostonly.html"&gt;示意圖&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;對於與 host OS 同在一個 Ethernet 上的機器來說，guest OS 是看不見的。guest OS 對外聯繫的唯一管道就是 host OS。因此，guest OS 若想連上外部網路或 Internet，就必須在 host OS 安裝 routing 或 NAT 的服務。&lt;br /&gt;&lt;br /&gt;這種架構不會受到實體網路的影響，即使把網路線拔掉，host OS 和 guest OS 還是可以互通。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Network Address Translation (NAT)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;此種網路型態與 host-only networking 的架構很像，但是在虛擬網路上多了一台 NAT router。請參考 VMware 的官方 &lt;a href="http://www.vmware.com/support/ws5/doc/ws_net_configurations_nat.html"&gt;示意圖&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;因為有了這台虛擬的 NAT router，guest 雖然與外界隔離，但仍然可以很方便地透過連接在 host OS 的網路連接 Internet。&lt;br /&gt;&lt;br /&gt;這種架構也不會受到實體網路的影響，即使把網路線拔掉，host OS 和 guest OS 還是可以互通。若連接到 host OS 的 Internet 連線沒有問題，guest OS 也一樣可以連接到 Internet。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-8860008252591344566?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/8860008252591344566/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=8860008252591344566' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8860008252591344566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8860008252591344566'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/02/vmware-bridgedhost-only-nat.html' title='VMware 的 Bridged, Host-only 和 NAT 網路型態'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-3071337546264100763</id><published>2008-01-31T20:48:00.000+08:00</published><updated>2008-02-01T00:02:51.566+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><title type='text'>4t Tray Minimizer</title><content type='html'>習慣透過 ssh 進入在 VMware 上執行的 VM，因此並不需要看到 VM 的那個虛擬螢幕。所以通常都把 VMware 最小化，丟到工作列上。&lt;br /&gt;&lt;br /&gt;但工作列的空間有限，browser、editor、office、pdf reader、skype... 一下子就佔滿了。於是，這個不需要去看的最小化按鈕就變得很礙眼，讓人想除之而後快。&lt;br /&gt;&lt;br /&gt;經過一番搜尋，終於找到一套很不錯 (而且有免費版) 的軟體：&lt;a href="http://www.4t-niagara.com/tray.html"&gt;4t Tray Minimizer&lt;/a&gt;。他可以讓任何程式從桌面上消失，或者放到 &lt;a href="http://softsmith.blogspot.com/2008/01/system-tray.html"&gt;工作列的通知區域&lt;/a&gt;。有了這套軟體，VMware 就乖乖的變成通知區域的小圖示了。&lt;br /&gt;&lt;br /&gt;PS: 4t Tray Minimizer 和工作列一樣，都能夠自動隱藏非使用中的通知區域圖示，以便讓出空間給工作列按鈕用。但千萬不要同時啟動這兩者，否則可能會因互相拉扯而僵持不下。個人建議，啟動工作列的自動隱藏功能就好。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-3071337546264100763?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/3071337546264100763/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=3071337546264100763' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3071337546264100763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/3071337546264100763'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/01/4t-tray-minimizer.html' title='4t Tray Minimizer'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-7382177690517160283</id><published>2008-01-30T22:28:00.000+08:00</published><updated>2008-01-31T23:01:11.971+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜項'/><title type='text'>原來沒有 System Tray 這一回事</title><content type='html'>很多人都 &lt;span style="font-weight: bold;"&gt;知道&lt;/span&gt; Windows 上有個地方叫做 System Tray 吧？就是一般在畫面下面工作列右手邊的那個區塊。&lt;br /&gt;&lt;br /&gt;其實，在 Microsoft 的正式術語當中，是沒有 System Tray 這個詞的。這個詞的出現源自於誤解，正式的說法應該是 Taskbar Notification Area。也就是說，工作列是由 Start menu (開始功能表)、quick launch bar (快速啟動列)、taskbar buttons (工作列按鈕) 和 notification area (通知區域) 所組成的。&lt;br /&gt;&lt;br /&gt;有興趣的人可以看看以下的第一則參考資料。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;參考資料&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/oldnewthing/archive/2003/09/10/54831.aspx"&gt;Why do some people call the taskbar the "tray"?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Taskbar"&gt;Taskbar (Wikipedia)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-7382177690517160283?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/7382177690517160283/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=7382177690517160283' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7382177690517160283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7382177690517160283'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/01/system-tray.html' title='原來沒有 System Tray 這一回事'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-6288225649950918030</id><published>2008-01-29T22:00:00.001+08:00</published><updated>2008-05-20T22:58:16.395+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><title type='text'>vim 的彩色語法顯示</title><content type='html'>昨天剛安裝好的 &lt;a href="http://softsmith.blogspot.com/2008/01/ubuntu-710-jeos-virtual-appliance.html"&gt;Ubuntu virtual appliance&lt;/a&gt;  有個缺點：vim  不會以彩色來顯示文件的語法格式。&lt;br /&gt;&lt;br /&gt;上網找解法，發現很多人都有相同的問題，也有很多人回答，但排在前幾名的答案都不太管用。我想是每個人的環境都不太相同，問問題的沒有說清楚自己的環境，回答問題的人只就自己的環境來回答的緣故吧？&lt;br /&gt;&lt;br /&gt;研究了很久終於把這問題解決了。希望以下的方法對你是管用的  :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;首先&lt;/span&gt;&lt;/span&gt;，先確定你安裝的 vim 是否有把彩色語法顯示的功能編譯進去。方法是直接問 vim (&lt;span style="color: rgb(51, 204, 255);"&gt;vim --version&lt;/span&gt;)。這個指令除了顯示版本號碼之外，還會顯示有哪些功能。彩色語法顯示這個功能就叫 syntax。如以下範例：&lt;br /&gt;&lt;ul  style="color: rgb(51, 204, 255);font-family:courier new;"&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;# &lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;vim --version | grep syntax&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;-scrollbind -signs -smartindent -sniff -statusline -sun_workshop &lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;-syntax&lt;/span&gt;&lt;/ul&gt;syntax 前面是個減號，就表示這個 vim 根本沒有將彩色語法顯示的功能編譯進去，你再怎麼調整設定也沒有用。Ubuntu 預先安裝的是 vim-tiny 就是這種陽春版，必須安裝標準版的 vim 才有此功能。方法安裝如下：&lt;br /&gt;&lt;ul  style="font-weight: bold;font-family:courier new;"&gt;&lt;span style="color: rgb(51, 204, 255);font-size:85%;" &gt;# apt-get update&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 204, 255);font-size:85%;" &gt;# apt-get install vim&lt;/span&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;接下來&lt;/span&gt;&lt;/span&gt;，找個 source code 或 Makefile 來編輯看看。如果已經有彩色語法顯示，恭喜你大功告成了。如果還不行，請在 vim 上下這個指令看看：「&lt;span style="color: rgb(51, 204, 255);font-family:courier new;" &gt; :syntax on&lt;/span&gt; 」。如果有彩色出現，就代表彩色語法顯示的預設值是關閉的。這時，請編輯 /etc/vim/vimrc 將 syntax on 之前的註解符號移除，就可以打開這個功能。也請看看你的 vi 是否有 alias 到 vim。&lt;br /&gt;&lt;br /&gt;還是不行？那只好請你自己找 Google 先生幫忙了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-6288225649950918030?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/6288225649950918030/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=6288225649950918030' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6288225649950918030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6288225649950918030'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/01/vim.html' title='vim 的彩色語法顯示'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-6454531524660770216</id><published>2008-01-28T20:24:00.002+08:00</published><updated>2008-06-28T15:49:05.644+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMware Player'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu 7.10 JeOS Virtual Appliance</title><content type='html'>今天要推薦另一個 VMware 的 virtual appliance：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.vmware.com/appliances/directory/1124"&gt;Ubuntu 7.10 Jeos with VMware Tools&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;這個 image 有以下特色：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;精簡，不含 X-Windows 等&lt;/li&gt;&lt;li&gt;小巧，只有 225MB，很快就能下載完畢&lt;/li&gt;&lt;li&gt;已安裝好 VMware Tools，可以解決 Guest OS 系統時間的問題&lt;/li&gt;&lt;li&gt;適用於 VMware Player 2.0.* 版&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;這個 virtual appliance 已包含基本開發工具如 gcc、make 等，缺的也很容易自己補 (apt-get install)，很適合在 Linux 上開發非 GUI 程式的人使用 (解開後需要 1GB 的空間，開始使用後會逐漸變大)。&lt;br /&gt;&lt;br /&gt;這個 virtual appliance 預設需要 512MB 的記憶體，如果你的記憶體不夠，請參考 &lt;a href="http://softsmith.blogspot.com/2008/01/centos-5-minimal-virtual-appliance.html"&gt;這裡&lt;/a&gt; 修改 .vmx 檔。&lt;br /&gt;&lt;br /&gt;以下是個人的設定方式，僅供參考：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;以 user 身份登入 (password = user)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;用 sudo 設定 root 密碼  (這樣比較方便) (&lt;span style="color: rgb(51, 204, 255);"&gt;sudo passwd root&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;改以 root 身份登入&lt;/li&gt;&lt;li&gt;安裝 ssh daemon (&lt;span style="color: rgb(51, 204, 255);"&gt;apt-get install ssh&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;用 ifconfig 查看 IP address&lt;br /&gt;&lt;/li&gt;&lt;li&gt;從 PC 用 PuTTY 連到該 IP，因為這樣比較好操作 (可剪貼)&lt;/li&gt;&lt;li&gt;刪除 user 這個帳號 (&lt;span style="color: rgb(51, 204, 255);"&gt;userdel user&lt;/span&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;新增一個自己的帳號 (&lt;span style="color: rgb(51, 204, 255);"&gt;useradd &lt;span style="font-style: italic;"&gt;yourname&lt;/span&gt; -m -s /bin/bash -p &lt;span style="font-style: italic;"&gt;password&lt;/span&gt;&lt;/span&gt;)&lt;/li&gt;&lt;/ul&gt;我習慣設定固定 IP，這樣可以砍掉 VMware 的 DHCP service。Ubuntu 設定固定 IP 的方法如下：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;執行 ifconfig 查看並記下 DHCP server 分配的 IP address、gateway 等資訊&lt;br /&gt;&lt;/li&gt;&lt;li&gt;編輯 /etc/network/interfaces，根據上一步記下的資訊修改 (若要改 IP address，只能改最後一碼)：&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;blockquote style="color: rgb(51, 204, 255);"&gt;# The primary network interface&lt;br /&gt;auto eth0&lt;br /&gt;#iface eth0 inet dhcp&lt;br /&gt;iface eth0 inet static&lt;br /&gt;address 192.168.123.14&lt;br /&gt;netmask 255.255.255.0&lt;br /&gt;network 192.168.123.0&lt;br /&gt;broadcast 192.168.123.255&lt;br /&gt;gateway 192.168.123.2&lt;br /&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;編輯 /etc/resolv.conf，設定 name server：&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;blockquote style="color: rgb(51, 204, 255);"&gt;nameserver 192.168.123.2&lt;/blockquote&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;重新啟動網路介面 &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;blockquote style="color: rgb(51, 204, 255);"&gt;# sudo /etc/init.d/networking restart&lt;br /&gt;&lt;/blockquote&gt;&lt;/ul&gt;我還需要跑 tftp server 以便和發展中的 embedded system 交換資料。設定方法如下：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;安裝 tftp client 和 server&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;blockquote style="color: rgb(51, 204, 255);"&gt;# apt-get install tftp&lt;br /&gt;# apt-get install tftpd&lt;br /&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;第二動還會一併安裝 openbsd-inetd。你必須檢查一下/etc/inetd.conf 看看有沒有需要修改的地方。以下是我的設定：&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;blockquote style="color: rgb(51, 204, 255);"&gt;tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftpboot&lt;/blockquote&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;將 /tftpboot 設好權限，就可以重新啟動 inetd 了：&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;blockquote style="color: rgb(51, 204, 255);"&gt;# chmod 777 /tftpboot&lt;br /&gt;# /etc/init.d/openbsd-inetd restart&lt;br /&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-6454531524660770216?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/6454531524660770216/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=6454531524660770216' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6454531524660770216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6454531524660770216'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/01/ubuntu-710-jeos-virtual-appliance.html' title='Ubuntu 7.10 JeOS Virtual Appliance'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-5631062338115938564</id><published>2008-01-26T22:32:00.000+08:00</published><updated>2008-02-01T22:17:56.689+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMware Player'/><title type='text'>VMware Player -- Guest OS 的 MAC Address</title><content type='html'>VMware Player 有一套演算法來自動決定 Guest OS 虛擬網路卡的 MAC address。這個機制運作得很好不會有問題，但有時候我們就是想自己指定這些 MAC address。要這樣作，只要修改 .vmx 檔就可以了。&lt;br /&gt;&lt;br /&gt;首先，把以下這幾行刪除 (或以 # 「註」掉)：&lt;br /&gt;&lt;blockquote style="color: rgb(51, 204, 255);"&gt;&lt;span style="font-size:100%;"&gt;#ethernet0.addressType = "generated"&lt;br /&gt;#ethernet0.generatedAddress = "00:0c:29:12:34:56"&lt;br /&gt;#ethernet0.generatedAddressOffset = "0"&lt;/span&gt;&lt;/blockquote&gt;然後，增加以下兩行：&lt;br /&gt;&lt;blockquote style="color: rgb(51, 204, 255);"&gt;&lt;span style="font-size:100%;"&gt;ethernet0.addressType = "static"&lt;br /&gt;ethernet0.address = "00:50:56:03:06:14"&lt;/span&gt;&lt;/blockquote&gt;其中 ethernet0.address 一定要在這個範圍之內：&lt;span class="smaller"&gt;&lt;span class="smaller"&gt;&lt;span class="smaller"&gt;00:50:56:00:00:00-00:50:56:3F:FF:FF。&lt;br /&gt;&lt;br /&gt;當然，改完之後要重新啟動 GuestOS 才可以生效。&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;參考資料&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.vmware.com/support/esx2/doc/esx20admin_netwk2.html"&gt;Setting the MAC Address Manually for a Virtual Machine&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://roid.kaienroid.com/wordpress/2005-11-07/28/"&gt;VMWare Workstation 細項調整 (1) NIC mac address&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://virtrix.blogspot.com/2007/04/vmware-configuring-static-mac-address.html"&gt;VMware: configuring a static MAC address in a VM&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-5631062338115938564?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/5631062338115938564/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=5631062338115938564' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5631062338115938564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/5631062338115938564'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/01/vmware-player-guest-os-mac-address.html' title='VMware Player -- Guest OS 的 MAC Address'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-8550128343686538708</id><published>2008-01-21T00:09:00.000+08:00</published><updated>2008-01-30T00:34:19.793+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMware Player'/><title type='text'>CentOS 5 Minimal Virtual Appliance</title><content type='html'>今天要推薦一個 VMware 的 virtual appliance：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.vmware.com/appliances/directory/1029"&gt;CentOS 5 Minimal Installation Virtual Appliance v1.2&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;這個 image 有以下特色：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;精簡，不含 X-Windows 等&lt;/li&gt;&lt;li&gt;小巧，只有 186MB，很快就能下載完畢&lt;/li&gt;&lt;li&gt;已安裝好 VMware Tools，可以解決 Guest OS 系統時間的問題&lt;/li&gt;&lt;li&gt;相容於 VMware Player 1.0.* 版&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;這個 virtual appliance 已包含基本開發工具如 gcc、make 等，缺的也很容易自己補，很適合在 Linux 上開發非 GUI 程式的人使用。(注意！解開後需要 10GB 的空間)&lt;br /&gt;&lt;br /&gt;這個 virtual appliance 預設需要 512MB 的記憶體，若你的主機有 1GB 的 DRAM，這當然不成問題。不過，我的 PC 只有不到 512MB，所以必須自己手動調整。方法很簡單：用 editor 編輯副檔名為 .vmx  的檔案，將 memsize 改小即可。我改成 192，效能還在可接受的範圍之內。&lt;br /&gt;&lt;br /&gt;建議開始使用前，先作一次更新：&lt;br /&gt;&lt;blockquote&gt;&lt;pre style="color: rgb(51, 204, 255);"&gt;# yum update&lt;br /&gt;# yum upgrade&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-8550128343686538708?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/8550128343686538708/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=8550128343686538708' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8550128343686538708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/8550128343686538708'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/01/centos-5-minimal-virtual-appliance.html' title='CentOS 5 Minimal Virtual Appliance'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-7886891711852682453</id><published>2008-01-17T22:52:00.000+08:00</published><updated>2008-01-29T20:48:25.755+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMware Player'/><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><title type='text'>VMware Player</title><content type='html'>對於需要同時使用 Windows 和 Linux 的人來說，VMware Player 是非常實用的工具。&lt;br /&gt;&lt;br /&gt;VMware Player 是可 &lt;a href="http://www.vmware.com/download/player/"&gt;免費下載&lt;/a&gt; 和使用的 x86 虛擬機器，也就是在實體 PC 上以軟體模擬出另一套虛擬的系統。例如；你可以在 Windows 或 Linux 上再執行另一套系統，並讓主系統 (Host OS) 和虛擬系統 (Guest OS) 兩者同時運作，就好像有兩台機器一樣。&lt;br /&gt;&lt;br /&gt;雖然使用多重開機也可以在一部 PC 上安裝多套作業系統，但一次只能選擇一種。而且切換系統時，需要重新開機，不是很方便。&lt;br /&gt;&lt;br /&gt;使用 VMware Player 的缺點當然是 PC 的效能是由 Host OS 和 Guest OS 分享的，速度會稍微差一點。但好處不少：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;兩套系統可以一起運作，例如在 Windows 上看文件，在 Linux 上編譯程式。&lt;/li&gt;&lt;li&gt;不需考慮如何設定開機程式和分割硬碟 (邏輯硬碟的大小可自行設定)。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;可以省下灌作業系統的時間，直接下載別人灌好了的來用。&lt;/li&gt;&lt;li&gt;設定好的虛擬機器只是一般的檔案，可以用各種方法備份起來。&lt;/li&gt;&lt;li&gt;回復虛擬系統就像複製檔案一樣容易。&lt;/li&gt;&lt;li&gt;...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;以個人的實際經驗來說，方便勝過於效能減少的問題，所以還是非常推薦。&lt;br /&gt;&lt;br /&gt;VMware Player 的安裝方法相當非常簡單直接，不需多加介紹。倒是版本有兩個選擇：1.0.* 版和 2.0.*  版。2.0.* 版增加以下的功能：&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Windows Vista support&lt;/li&gt;&lt;li&gt;USB 2.0 Support&lt;/li&gt;&lt;li&gt; Shared folders&lt;/li&gt;&lt;li&gt; Appliance view&lt;/li&gt;&lt;li&gt; Welcome page&lt;/li&gt;&lt;li&gt; Experimental support for Virtual SMP&lt;/li&gt;&lt;/ul&gt;為了這些新功能，似乎付出不少代價。原本安裝 1.0.* 版只需要約 57MB 的空間，升級到 2.0.* 之後竟然需要 243MB！若不需要這些新功能，1.0.* 版已經非常的穩定好用了，所以 PC 資源比較陽春的人，可以考慮用 1.0.* 版就好 (不過，有些現成的 virtual appliance 只能以 2.0.* 版開啟，這一點要納入考量)。&lt;br /&gt;&lt;br /&gt;安裝好 VMware Player 之後，接下來要想辦法弄到所需要的 virtual appliance image，也就是運作在虛擬機器上的 Guest OS。你可以自行製作 image，也可以到以下網站看看有沒有現成的：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.vmware.com/appliances/"&gt;http://www.vmware.com/appliances/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;將下載的 image 解開就可以用 VMware Player 開啟虛擬系統 (*.vmx)。Host OS 和 Guest OS 是同時運作的，但輸入裝置必須共用：點 Player 的視窗就會將輸入介面轉移到 Guest OS；按 Ctrl-Alt 才會切回 Host OS。&lt;br /&gt;&lt;br /&gt;若想自己製作或修改 virtual appliance image 也相當簡單，可以參考以下資料：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/Create%20virtual%20machines%20for%20VMware%20Player"&gt;Create Virtual Machines for VMware Player&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.hackaday.com/2005/10/24/how-to-vmware-player-modification"&gt;How-to: VMware Player Modification&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ffnn.nl/pages/articles/linux/vmware-player-image-creation.php"&gt;VMware Player Image Creation&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;下次有空再推薦幾個現成的 virtual appliance image。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-7886891711852682453?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/7886891711852682453/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=7886891711852682453' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7886891711852682453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/7886891711852682453'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/01/vmware-player.html' title='VMware Player'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-6857319321299175224</id><published>2008-01-14T22:48:00.000+08:00</published><updated>2008-01-26T22:46:07.113+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具程式'/><title type='text'>TeraTerm Pro</title><content type='html'>發展 embedded system 的人，大概都需要透過 console 去控制 target device。這時候就需要一個好用且上手的 terminal emulator 程式了。個人推薦 TeraTerm Pro。&lt;br /&gt;&lt;br /&gt;TeraTerm Pro 的最大強項是巨集 (macro)，具有相當程度的字串和數值資料處理能力。只要稍微花點心思，可以寫出相當有趣的控制邏輯，例如：啟動 tftp 來傳輸資料，並依照傳輸的成功與否來決定下一動作。&lt;br /&gt;&lt;br /&gt;TeraTerm Pro 還有一個功能值得一提：可設定字元或行的傳輸延遲。筆者接觸過不少 target devices，其中有些 console 設計得不太好，輸入太快就會漏字，因此不能 copy&amp;amp;paste，相當不方便。遇到這種情況，通常加個 1 ms 的延遲就可解決。詳細的語法請參考 TeraTerm Pro 的 Help 或 &lt;a href="http://ttssh2.sourceforge.jp/manual/en/macro/"&gt;這裡&lt;/a&gt; (有部份指令是新版才有)。&lt;br /&gt;&lt;br /&gt;TeraTerm Pro 有兩套：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;一套是出自原創者的 &lt;a href="http://hp.vector.co.jp/authors/VA002416/teraterm.html"&gt;2.3 版&lt;/a&gt;。這版雖然已不再維護了，但短小精幹，既穩定又好用。&lt;/li&gt;&lt;li&gt;另一套則是由後繼者維護的 open source 版本：&lt;a href="http://ttssh2.sourceforge.jp/"&gt;UTF-8 TeraTerm Pro with TTSSH2&lt;/a&gt;。除了支援 UTF-8、SSH2 之外，巨集的能力也加強不少。&lt;/li&gt;&lt;/ul&gt;TeraTerm Pro 除了可透過 RS232 連接 console 之外，也支援 TCP/IP 的 telnet 和 ssh/ssh2。但說到 telnet 和 ssh/ssh2 的一般操作，還是 &lt;a href="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/download.html"&gt;PuTTY&lt;/a&gt; 比較好用。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-6857319321299175224?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/6857319321299175224/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=6857319321299175224' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6857319321299175224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/6857319321299175224'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/01/teraterm-pro.html' title='TeraTerm Pro'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7183840757750224171.post-2481293223802097738</id><published>2008-01-01T00:15:00.000+08:00</published><updated>2008-01-25T22:48:08.861+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜項'/><title type='text'>楔子: Softsmith = 軟體工匠</title><content type='html'>還未進入社會，就以寫軟體謀取微薄的報酬維生。在工作時程最緊的時候，常覺得寫軟體就跟黑手工匠一樣累，甚至有過之而無不及。&lt;br /&gt;&lt;br /&gt;Softsmith 是我自創的詞 (但並非首創，Google 一下就知道)。一般來說，-smith 是用於金屬工匠的詞綴。如：goldsmith, silversmith, blacksmith, locksmith, gunsmith 等等，這些都是一般人所認知的黑手工匠。&lt;br /&gt;&lt;br /&gt;其實，wordsmith, tunesmith 也使用 -smith 這個詞綴。我想這些寫作或作曲的人在熬夜趕工的時候，也是覺得自己比黑手工匠還累吧？這樣看來，softsmith 也是挺合理的組合。&lt;br /&gt;&lt;br /&gt;另外，應該沒人沒聽過 sourceforge 吧？Source 都能放進 forge 了，software 當然要有 smith 來敲敲打打。&lt;br /&gt;&lt;br /&gt;我就是那些敲敲打打的 smith 之一，而且還老大不小了。因為年紀一大，記憶力就變差，所以在這個部落格整理工作所需的筆記，自娛娛人。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7183840757750224171-2481293223802097738?l=softsmith.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softsmith.blogspot.com/feeds/2481293223802097738/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7183840757750224171&amp;postID=2481293223802097738' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2481293223802097738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7183840757750224171/posts/default/2481293223802097738'/><link rel='alternate' type='text/html' href='http://softsmith.blogspot.com/2008/01/softsmith.html' title='楔子: Softsmith = 軟體工匠'/><author><name>埋頭苦幹</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
