Recent Articles / Archives

新年可以休息一星期

經過今天的工作後,下星期會休息,總算可以放鬆一下。

我很喜歡農曆新年,可以和一些平日很少見的親戚朋友聚一聚,而且過年的一個禮拜真正可以休息的時間,可以做一些平日很想做而沒有時間的事情。

February 16, 2007 · 生活隨筆, 工作日誌 · No Comments Yet

程式從 setuid 轉用 sudo

今天是星期日,原本想好好休息一下,但下午回家後又不其然地開始工作。首先是將一些原本用 C 及 Perl 寫成的系統管理工具修改,理由是這些程式是用 setuid 來執行一些系統工作,例如 restart server,但這實在存有安全性的問題。現在改為使用 sudo 來實現,而 sudo 就是一個讓某些使用者以其他用戶身份 (包括 root) 執行特定指令的程式,如果有用 Ubuntu 的朋友應該不會陌生。

我只將原本的 C 及 Perl 修改,而實際上 sudo 也可以該 PHP 或其他 scripting language 執行一些系統管理工作。

然後傾好替一個網站做 maintain 的工作,但那個網站是用 JSP 寫成,還好只是 maintain,因為我的 JSP 語法已經忘記得七七八八,至於為何星期日也接到 job,因為那位合作伙伴與我一樣星期日也工作。

January 21, 2007 · 程式設計分享, 工作日誌 · Comments (1)

沒有註解的程式碼

近日有一項工作是優化程式的執行速度,照慣例我要先看看程式碼才報價。開啟程式碼一看,雖然程式的縮排做得很好,但竟然完全沒有 comment。

當然面對這類程式,要維護實在要花點時間看程式碼,所以在寫程式時不管什麼理由,也該花點時間寫註解,這不單是為了往後接手的程式員著想,也是為了自己著想。試想想如果過了一兩年後要進行維護,我想連自己寫的是什麼也會忘記。還好這個程式有做縮排及命名變數及函數沒有馬虎,不然我想我不會接這個 job。

進度方面,現在已找到問題根源,但因為要更改 mysql 資料表結構,可能還要一兩天才做好優化及測試。

January 17, 2007 · 工作日誌 · No Comments Yet

忙得透不過氣來

踏入 2007 年後真是十分忙,手上要完成的工作有很多,所以幾天也沒有貼文。

近來大致上是在做兩個 programming 的工作,以及 servers 方面的一些維護。上星期發現車子有起步打冷震,拿去車房換了機油及波箱油(變速箱油),以及車內的 Hi-Fi 收音機壞了一段時間,順便換了一個新機頭。

很時工作好像同一時間到來,但現在我也盡量在晚間不工作,以及星期天休息,始終人生除了工作及賺錢外,還有很多其他事情值得花時間的。

January 9, 2007 · 生活隨筆, 工作日誌 · No Comments Yet

與基金有關的 Project

剛接到一單 project,是從 Morningstar 讀取客戶訂取的基金資料 XML 檔,然後做一個搜索介面,搜索基金及顯示基金詳細內容,最後做出基金的 PDF 檔給用戶下載。

現在 Morningstar 提供了十個 XML 樣式檔案給我做測試,正式推出後才會加入其他基金。我只需做 programming 的部份,預計不會用太多時間。我經常也到 Morningstar 瀏覽,只是第一次做有關基金的程式工作。

January 6, 2007 · 工作日誌 · Comments (1)


連線今天已好轉

今天可以連上 OnlineNIC 登入,替客戶註冊及 renew domain,還收到經 2Checkout 的付款,只可惜大部份外國網頁不靠 proxy 還是看不到。

這幾天我沒有打過電話去 PCCW,大家都知發生什麼事,何須打去搵人出氣呢? 客戶是有權查詢修復進度,但我相信 PCCW 已經盡了最大努力,如果是平日經常斷線,我會十分不滿,但這次受無可預計的天災影響,那麼忍耐一下也不為過。

December 29, 2006 · 互聯網筆記, 工作日誌 · No Comments Yet

電訊癱瘓對我工作的影響

今天晨早開始工作,因為現在還未解決未能連到海外網站的問題,影響也是十分之大。

影響最大的是 domain name 的部份,香港域名未受到影響,但國際域名影響就大了,因為現在不能讓客戶在網站上查詢 domain 是否可以註冊,而且也不能登入 OnlineNIC 註冊及 renew domain。可能有些客戶在這幾天才繳費,而域名剛好在這幾天到期,可能會被 lock。還好一般上域名過期不到過一個月,重新 renew 也沒什麼因難。

現在有點身在互聯網孤島的感覺,內部完全沒有問題,但就「與世隔絕」。

December 28, 2006 · 互聯網筆記, 工作日誌 · No Comments Yet

解決 PHP Spam 問題

如果主機上寄存了一個以上網站,網站執行 PHP 一律會用 nobody 或 apache 身份,那麼當有人用 PHP 發送 Spam 的話,要找出是那一個網站很麻煩。

而且很多時不是網站持有人發送,而是 PHP 程式本身設計有問題,讓 spammers 可以利用一般的 form to mail 程式發送,在 Preventing spam when using PHP’s mail function 有詳細說明。

今天寫了一個 perl script,取名為 /usr/sbin/sendmail,並將原本的 /usr/sbin/sendmail 移到別處。當有人用 PHP 發送郵件時便可以用那個 perl script 記錄是那一個目錄,並寫入記錄檔。總算解決了一直困擾著自己的問題,下次遇到同樣問題就輕鬆得多了。

September 21, 2006 · 工作日誌 · Comments (2)

MySQL 或 PostgreSQL 轉移到 DB2 Express-C

IBM Developer 看到這篇文章,值得收藏一下,有需要時可以用得上。

文章內不只是講述轉移的做法,還介紹了 MySQL, PostgreSQL 及 DB2 背後的運作模式 及 Storage engine 等內容,即使不需要移換 DBMS,但對於要管理 DBMS 的朋友也值得一看:

Migrate from MySQL or PostgreSQL to DB2 Express-C

June 19, 2006 · 工作日誌 · No Comments Yet

Qmail 使用 RBL 過濾垃圾郵件

有些機構提供 RBL (Remote Black Lists) 供 Email Server 阻檔垃圾電郵,這些 RBL 的好處是不用在本機加入大量 spam rules,而且免除更新的程序。在 QMail Scanner 配合 RBL 使用後,系統發現郵件符合 RBL 規則,那便不會接收該郵件,並把紀錄寫入 /var/log/qmail/smtpd/current 內。

以下是在 QMail Scanner 加入支援 RBL 的方法:

1. 開啟 /var/qmail/supervise/qmail-smtpd/run 檔案

2. 有一行是類似 "/var/qmail/bin/qmail-smtpd \",在這一行前面加上以下內容:

rblsmtpd \
-r sbl.spamhaus.org \
-r bl.spamcop.net \

3. 執行 qmailctl restart 重新啟動 Qmail。

4. 現在已經完成了,執行 qmailctl stat 查看沒有異樣便完成了。



我的工作環境

上星期買了一張新書枱及轉椅,書枱覺得很好用,因為以前的很細,現在的有四呎多。至於轉椅,我自己把一對扶手拆掉,因當鍵盤伸出來時會丁住扶手。

我的數碼相機前陣子壞了,還未找到合適的型號,只有用手機拍,所以拍得不太好。

computer desk
這是日常工作的電腦。

computer desk
而旁邊擺放著打印機、FAX 機及作 testing 的 server。

如何請 Google 不儲存快取

在 Google 的搜尋頁面裡面,每個網頁也有一個 "庫存網頁",這是 Google 把該頁面內容儲存下來的快取。如果想網頁繼續保留在搜尋結果,而不想 Google 快取你的網頁,根據 Google’s FAQ for webmasters 的講法,只要在網頁加上以下 META Tag,Google 便不會對網頁儲存快取:

<META NAME="ROBOTS" CONTENT="NOARCHIVE">

手機監察伺服器運作

現在我的伺服器數量慢慢增加,管理上也跟以往有了改變,很多時就是為了監察伺服器的運作,家中的電腦幾乎是長開。昨天寫了一個小程式,可以產生簡單的伺服器資訊,用手機便可隨時隨地監察所有伺服器的運作。

以前有想過用 PPC 做流通上網,但 PPC 的體積比電話大得多,當沒有拿公事包外出的話,攜帶上很麻煩,因為我習慣將手機放在褲袋 (真擔心手機會爆炸)。所以到目前為止,對我來說流動上網還是用手機較方便。

March 23, 2006 · 工作日誌 · Comments (2)

"Argument list too long" 問題

昨天升級 Email Server 的 SquirrelMail,當我將舊版本 SquirrelMail 下面的 data 目錄資料複製到新版本時,出現了 "Argument list too long",然後找了找,發現原來在 Linux 下用 cp, mv, rm 這些指令時,如果輸入的檔案數目太多會出現 "Argument list too long" 錯誤。

因為在 Linux Kernel 內對 command-line arguments 限製了記億體的使用,就例如在一個目錄下有很多檔案,如果用 "cp * /home/user/",那便會出現這個問題,以下列出兩個解決辦法:

1. 分開多個指令執行: 可以將檔案分成幾個指令執行,例如:

cp [0-9]* /path/to/
cp [a-l]* /path/to/
cp [m-z]* /path/to/

2. 使用 find 指令: 另一個方法是用 find 指令,可以一句便完成:

find /file_from/* -type f -name ‘*’ -exec cp {} /path/to/. \;

以上指令會將 /file_from/ 目錄下的所有檔案覆製到 /path/to/ 下面。

P.S. 如果想修改 kernel 以解決問題,可以開啟在 kernel source 下面的 include/linux/binfmts.h 檔案,在開頭的位置裡面有一行 "#define MAX_ARG_PAGES 32",將 32 改成更大的數值,例如 64 或 128,然後重新編譯 kernel。

用 mod_rewrite 防止偷圖

以前我有一位客戶,他的網站流量十分大,經過檢查後發覺大部份的流量都用在圖片上,這也無可厚非,他的圖片解像度比較高,但另一個原因是有人在其他論壇貼上他的圖片,而貼圖的方法是直接使用他的圖片連結。我問過他的意見,他不介面別人貼出他的圖片,直接下載圖片再重新上載的話沒有問題,因為每張圖片也有出現他的網站名稱,只是不想人家浪費了他的流量。

然後我覺得用 mod_rewrite 是較方便的做法,而如果你的網站也支援 mod_rewrite 功能,在 .htaccess 加上以下內容,也可防止給別人偷圖:

RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http://www.anotherwebsite.com/.*$ [NC]
RewriteRule ^/img/indieband\.jpg$ http://www.mydomain.com/nkotb.jpg [R]

以上的第一行是開放 RewriteEngine,如果你的 .htaccess 已經有這一行就不用加上;第二行是其他網站的網址;第三行是將 /img/indieband.jpg 導向 /nkotb.jpg,而這個 /nkotb.jpg 可以是說明圖片出處的圖片。



  Next Page »