huihui 說要研究這個......
先把看懂的記下來:
我的學習心得、我的心情記事…
在下義務管理的電子郵件主機被主任嫌垃圾信過濾太差了!
我是沒有認真的去做過統計到底效果是怎樣,只是每天一早收信時,個人的信箱除固定收到主機 security report 之外,大概過濾掉幾十到一百多封的垃圾信,只偶爾有少數漏網之魚罷了。至少過濾掉 95% 以上的垃圾信吧。公開的網管人員帳號收到的垃圾信應該是全校最多了吧?!
好啦,我承認沒花學校半毛錢的 postfix + procmail + spamassasin 過濾垃圾信的效果真的不如 google 的 gmail ,這樣還不滿意,只好拿掉 procmail + spamassassin ,讓學校另請高明做垃圾郵件防治,我管不了啦。
huihui ,對不起你啦!
有鑑於學校的網管義工大概不用做了,放在學校的 blog 也就不是很穏了,加上 blog 放在學校,想要大鳴大放總是有顧忌,還是趁早搬出來比較好。
就來試試 blogger 吧,如果用得習慣,準備把整個 lss 實驗室搬過來這裡。
經常看到有人不小心下了一個指令:
rm -rf /
造成慘劇。但是,如果有心要讓慘劇發生的話,這個方法其實不太好。為什麼?因為只要來得及強迫停止執行、關機……等,沒刪掉的檔案還是救得回來。
目前我想得到的最邪惡的方法是:
dd if=/dev/null of=/dev/sda bs=1m
把硬碟最開頭的 1MB 幹掉,又快又方便。雖然其他的部份沒有清掉,但是想要救回,大概也要進實驗室了吧? @@
今天聽到了一些事,讓我感覺以前做了太多白工傻事。應該要把兩台乾淨的主機還給學校才對,不需要做什麼義工了。
有人能提供更快速邪惡的方法嗎?哈…哈…哈…
伙伴 huihui 交代要做一個 DNS LiveCD ,而且催了好幾遍,於是找上 SLAX ,玩了兩天做出來了。據說這兩天就要上線試用看看。
重點是,這東西還 真好玩 !
所以, SLAX 實驗室就開張了。
SLAX 是基於 slackware linux 版本的 LiveCD ,重點在輕薄短小,把大小控制在 180 MB 以下,能燒進 8 公分的小光碟隨身攜帶,又要有桌面系統、應用程式…… 。
自己客製化 SLAX 也是非常方便的,因為 SLAX 使用模組來組織整個 OS ,而包裝、修改模組的工作也很方便。這回,就是用 192 MB 的 SLAX server edition 再精簡化後,改成只有大約 80 MB 的 DNS LiveCD 。其實,熟練以後,整個客製化過程也不會太久,花了兩天,是因為要從頭熟悉 SLAX 架構,以及再重溫久遠之前玩 slackware linux 的回憶。真正客製化的過程,應該半個小時就足夠了。
最近會先把 SLAX DNS LiveCD 的心得先整理記下來。
為了轉台到 Ubuntu ,裝了個 innotek VirtualBox 來安裝 ubuntu-7.10-server-i386.iso 。好容易裝起來了,結果如下:
上網查了一下,好像是 VirtualBox 的問題。殘念 -_-
有大德能指點一下明燈嗎?若沒有,只好去用還要註冊碼的 VMWare 了。
搞了一個禮拜的東西,記一下,做個紀念!
遇到的問題:
使用 procmail 替代直接遞送 mail box ,是造成上述問題的原因。如果是由 postfix 遞送郵件到收件人信箱,無法遞送時 ( 如我遇到的收件者信箱 quota exceeded 問題 ) 會由 postfix 退信。但是如果是由 promail 遞送到收件者信箱, postfix 把信交給 procmail 時,就算完工了,而 procmail 則是無法退信 ( 註1 ) ,於是送信到預設的 mbox 信箱去了。
我決定採用 Postfix After-Queue Content Filter 裡的 Simple content filter ,讓 procmail 做為 mail filter ( 註2 ) ,將郵件 pipe 給 spamc 過濾加標籤,再 pipe 給 sendmail ,讓郵件重回 postfix 的 mail queue ,讓 postfix 做最後的遞送到收件人信箱。如此,就可以解決收件人信箱 quota exceeded 的問題了。
以下是各項設定:
以前使用 procmail + spamassassin 過濾垃圾信,只會搭配 mbox 信箱使用,後來為了設定用戶信箱的 qutoa ,將信箱格式改為 Maildir/ 目錄信箱格式,就不再使用 procmail ,而改用 amavisd-new 了。
現在放棄 amavisd-new ,回頭改用 procmail ,搭配 Maildir/ 的問題得想辦法解決。終於給我搞定了,紀錄如下:
上週升級 mail 主機的痛苦之一,是套件庫裡雖有 spamassassin ,但是少了 spamc / spamd 。學校的 mail 主機,真正在用的人雖然不多,但是垃圾著實不少,還是得用 spamc / spamd 來得安全些。
既然套件庫沒有,那就自己抓 source 來安裝吧。
上週把 mail 主機的 Mandriva 升級為最新的 2008.0 Free 版本,結果,讓我一週來吃不好睡不好,日子難過。為什麼?因為我升級的「太早」。
為什麼,因為我不懂得要忍一下,沒有等到台灣的 mirror 站完全 mirror 完所有套件。
mail 主機的 email 服務,我是使用 postfix + amavisd-new + spamassassin ( spamd / spamc ) 的組合做 spam filter 。最早是用 postfix + procmail + spamassassin ,但是因為資源有限,必需控管用戶信箱的 quota ,所以 postfix 改用 Maildir/ 格式的信箱。但是當時 procmail 搞不定 Maildir/ 格式信箱,只能使用 mbox 格式,不合用。後來就改用 amavisd-new 當 postfix 的 filter server 取代使用 mailbox_command 的 procmail 。
在 Mandrake 2006 時,因為 postfix / amavisd-new / spamassassin / spamd /spamc 都有現成的套件,而且相依性的處理很好,只要簡單的 urpmi xxx ,然後修改設定檔就可以搞定了。
這回升級到 2008.0 Free 時,問題可大了:
poppassd 透過 pam 來改密碼,預設是使用 DES 編碼,要改用比較安全的 MD5 ,要修改 /etc/pam.d/poppassd
#%PAM-1.0
auth required pam_pwdb.so shadow nullok
account required pam_pwdb.so
password required pam_cracklib.so retry=3
password required pam_pwdb.so md5 use_authtok nullok
在第四行的 pam_pwdb.so 加上 md5 參數就行了。
以前用 SquirrelMail 時,有一個 change_password plugin 很好用,我是用 poppassd backend ,可以讓使用者直接在 webmail 裡修改自己帳號的密碼。
後來因故放棄 SquirrelMail 後,改用 V-webmail ,界面什麼都不錯,中文問題也修得差不多了,就是沒有線上改密碼的功能。於是,動手把 SquirrelMail 的 change_password plugin 裡的 poppassd beckend 給移植過來用,效果蠻不錯的。
最近將 Mail 主機升級 ( 其實是重新安裝 ) 成 Mandriva 2008.0 Free ,結果慘劇發生,完全相同的程式碼,不管輸入的密碼是多麼的正確,一律給錯:
500 Old password is incorrect
好不容易終於解決了。因為是 poppassd 的問題,所以,解決這個問題後, SquirrelMail 的 change_password plugin 不能換密碼的問題也可以一併解決。
huihui 今天有感而發,寫了這篇「這個可能要用電腦…」。以下的內容原本是那篇文章的回應,後來想想,這樣的言論還是放自己的 blog 好了。
對於那些 動不動 / 一有機會 就把「這個可能要用電腦…」掛在嘴邊的業務執行人員,想理所當然的把工作推給「懂電腦的人」,我想回應你們幾句話:
「沒那個屁股,就不要吃那堆泄藥。」
「這可能要用電腦…」「可以啊,自己做」
「我又不會?」「那就不要用電腦做啊!」
「你比較厲害啦!」「要你管。」
「這一定得用電腦啦!」「既然如此,幹嘛不早學?」
「這個馬上就要,我做不出來。」「那是你家的事。」
「我不管了,就給他開天窗吧。」「那還是你家的事。」
就這樣。
伙伴 huihui 最近在玩 ca 認證主機,幫 blog 簽了一個 SSL 憑證,要試試虛擬主機是否能使用獨立的憑證。
試完了,想說 SSL 憑證不用白不用,於是動手改一改 LifeType 程式,看看能否做到後台管理界面都在 SSL 連線下作業,至少 login 時輸入帳號密碼會比較安全。
初步試驗算蠻成功的,只修改兩個地方:
純筆記!
IP-based Virtual host 可以各自擁有獨立的 SSL 憑證, Name-based Virtual host 則只能共用一個 SSL 憑證。
原因: SSL 為比 http 更底層的協定, Name-based Virtual host 是在 http 層才能分辨,而 SSL 憑證早在這之前就載入了。
若 Virtual host 要同時支援 http 與 https 協定,要當成兩個 Virtual host 設定,分別監聽 80 port 與 443 port ,但是把網址與文件目錄設為相同。至於 access log 與 error log 最好是分開以方便未來利用。
訂閱了五十多個 RSS ,一直都是用 Firefox + Sage 當 RSS Reader ,也用得很順,就是要維護家裡和學校幾台電腦裡的訂閱清單一致,覺得麻煩而已。
一直嚐試找一個好用的 online RSS Reader ,試過了 Bloglines ,他的界面跟我沒緣份;也試過 Newsgator ,但是太慢了。後來折衷的方法是,把一些比較關注的 RSS 用 Newsgator 做成聯播,放在 blog 上,權充線上閱讀器使用。
google reader 也試用過,但是以前的界面覺得不是那麼方便閱讀文章,留下了一堆 RSS 後,就沒理他了。
前一陣子終於 google reader 改版並且出中文界面了,於是嚐試改用 google reader 取代 Firefox + Sage 的組合。一段時間的使用後, google reader 速度快、界面清爽好用,配合 google toolbar 工具按鈕提示,實在很滿意。於是決定切換到 google reader 上,讓 Sage 從 Firefox 上退役。
本站上的網誌聯播也一併被取代,功成身退了。
這是怎麼回事啊?! @@?
剛剛用 iGoogle 的自動翻譯查一下「 skinniest 」這個單字,結果自動翻譯的結果竟然是「藍心湄」?!
有圖有真相:
用 google 搜尋一下 「 skinniest 藍心湄 」 ,也只得到似乎是自動翻譯的結果。有人知道是怎麼回事嗎? :D :D :D :D :D
忍無可忍了,只有祭出 RewriteRule 來堵一下:
RewriteEngine on
RewriteRule \.mp3$ - [F,L]
好你個百度mp3音樂盒,再來試試。
不聽宣導勸導的學生,我準備要拿 access_log 出來簽校規 ( 國立內壢高中學生獎懲實施要點補充規定 第四條、第二款 ) 處分了。
繼上個學期初的垃圾筒消失事件之後,本學期又再次發生了。難道每學期都要發生個一次嗎?
上次是隔天就把垃圾筒找回來了,這回不知道要多久?
[update 2007-10-01]
上回是伙伴 huihui 在垃圾筒消失一段時間候才 post 文章,實際找回垃圾筒已經是多日後了。
另,今天垃圾筒已經自己出現了。
Daniel Miessler 的 dmiessler.com 寫了一篇好文章介紹超好用的網管指令 lsof ,以前都不知道,真是受教了。
先記下連結: http://dmiessler.com/study/lsof/ ,找時間要全文翻過來放著用。
前一陣子教集訓同學走迷宮問題。那自然需要範例的迷宮檔案,以前都偷懶用亂數產生迷宮裡的牆,再手動修一下來使用。
今年花了點時間研究迷宮產生器的寫法,在 google 上搜尋後,找到以下兩個很有用的連結:
MyChat 數位男女 > 程式設計 的這篇討論裡,有唐老鴨寫的現成程式,稍微修改就可以跑了。基本上,是使用「挖通道」的方式,寫遞迴函數來挖迷宮。判斷原則是:「如果牆的另一邊沒有通道,則把牆挖穿,並挖出通道;否則就退回換個方向再試。」
另外,「也是回顧」的 tu 寫了很多關於迷宮的文章,讓我獲益良多。雖然沒有現成的程式可以參考,但是在「產生迷宮的另一種方法」裡所提出的用 set Union 方法產生迷宮,讓我搞清楚了 ( 單一解 ) 迷宮的本質:所有的通道都是相通的,都屬於同一個集合。這樣,我也搞清楚了為什麼唐老鴨的程式挖通道時,碰到通道就不挖了的原因。
再深入研究後,發現要產生單一解的迷宮其實非常的簡單。這篇文章只是先記下以上兩個連結,免得以後忘了。我的迷宮產生器寫法待整理好了再拿出來獻醜吧。
記得古早、古早以前寫 C 的時候,依稀記得圓周率 PI 在 math.h 標頭檔裡面有定義一個 macro ,可以直接使用。但最近在 C++ 裡嚐試要用時,卻告訴我「未宣告的識別項」錯誤。
調出 math.h 來看,找到答案了!裡面有一段註解:
/* Define _USE_MATH_DEFINES before including math.h to expose these macro
* definitions for common math constants. These are placed under an #ifdef
* since these commonly-defined names are not part of the C/C++ standards.
*/
這學期上課使用 moodle 時,一個班的學生同時使用線上測驗時,就會發生大部份同學遇到 MySQL OverLoad 的問題,進主機用 top 觀察一下,記憶體用量沒問題,但是 mysqld 卻使用了 99.9% 的 CPU 。
檢查了一下 moodle 的 db 使用量,發覺有一個資料表 mdl_cache_text 就用掉了 400MB 以上。這個表應該是前端網頁文字的快取用途,看了一下內容,裡面的條目重複情形還蠻多的。
既然是 cache ,那代表即使刪掉了,也會自己重建吧?!另外,猜測每次執行時,可能會大量 qurey 這個表,所以大膽猜一下,這個表可能是造成系統瓶頸的原因。所以,動手將這個表的內容清掉了。重新進入 moodle 後,感覺反應確實有變快了。
再來就是等星期三上課時的實測效果,看看是不是真的能有效的解決問題了。
[update 2007-09-26]
今天上課時,完全沒有再發生 MySQL OverLoad 問題了,所有學生 ( 44 人 ) 都很順利在同一段時間裡進入隨堂測驗。看來之前的猜測沒錯。有空再來看看 moodle 這個 text_cache 機制到底是怎麼回事?!
C / C++ 的標準函式庫裡,找不到一個類似 VB 裡的 isNumeric() 可以判斷字串是否為數值型式的標準函式可用。
沒錯, Visual C++ 的 System 命名空間裡,有 Char::isNumeric 可以用,但是非 VC++ 的 compiler 不能用。
另外,有找到一份 C++ Programming How-To ,裡面有一份強化過的 A! Dev's String class ,看起來遠比標準 C++ 的 String class 好多了,有空應該研究看看。只是學生比賽時,這樣的程式庫不知道可不可以用?
回到 isNumeric() 函式,看來只有自己手工打造一個來用了。
常見的中置式求值做法,是要操作運算元堆疊和運算子堆疊,比較運算子優先順序逐一運算求值。
今天有人問我,想實驗用 VB 的 Print 指令直接求出中置式的值,例如輸入的中置式字串
"(5-3)*4/2+(2+3)"
先把運算子符號放一個陣列(例如叫 opr()),運算元數字放一個陣列(例如叫 opd()),再用 for next 依原來順序放在 Print 指令後執行
Print opr(0);opd(0);opr(1);opd(1)...
結果呢?當然是印出原運算式字串。
那有沒有辦法做到呢?其實是可以的。
馬英九因為特支費使用發票有問題,即使據說那是合法的用途,但不能因為用途是正確的,就可以使用非法的手段。
陳水扁因為國務機要費使用發票有問題,即使據說是用在機密外交…等,但不能因為目的是正義的,就可以使用非法的手段。
即使是應得的收入,名實不相符,還是不要拿的好!
有感而發,別理我。
昨天升級了 LifeType 1.2.1 ,今天檢查一下 error_log ,看到一堆如下的 error :
[Wed Apr 25 13:31:01 2007] [error] [client xxx.xxx.xxx.xxx] File does not exist: /var/www/html/lifetype/js/tinymce/jscripts, referer: http://blog.nlhs.tyc.edu.tw/category/2/9
都是找不到 TinyMCE 的 emotions 表情圖。原因是以前自己做 TinyMCE 包的路徑和後來 Mark 包進 LifeType 正式版的路徑不同造成的。
一時手賤,進資料庫改回響裡的回文表情圖路徑,沒改完就放棄了。不過,有改的,卻變成最近回響了。 ^_^|||
伙伴 huihui 發表了一個關閉學生應用程式的電腦教室管理工具。初看到這一段:
……其實用 WMI 加上 Script 就可以達成任務……
天真的我以為是在 AP 裡執行現成的 Windows 命令來達成將學生電腦的 IE 關掉的目的 ( 經過求證,我太天真了 ) ,於是便搜尋看看到底是用那個 Windows 命令完成的,結果找到了一個與 linux 上的 kill 命令相似的 Windows 內建命令: taskkill 。使用 taskkill 命令加上其他命令的配合,便可以達成「一口氣關閉整間電腦教室的 IE 瀏覽器」的目的。
這次要用的命令,除了 taskkill 之外,還有 for 與 start 搭配使用。
數位學習網站的紀錄功能壞了好一陣子了,懶得修啊!
今天查了一下,原來是紀錄 log 的 mdl_log table 壞了,用下面的 SQL 語法:
repair table mdl_log
就可以修復了。關於 repair 語法的參考: REPAIR TABLE Syntax
看完獨孤木的「揮揮衣袖,不帶走一片雲彩(中)」,裡面提到不論是破釜沈舟走定了,還是以退為進有所要求,記得找個代罪羔羊來幫你說話。
已經過了好幾年的不愉快往事不想再提,只是想說,文中提到的方法,除了出國進修之外,其他的我都真實遇到了。我的家人不是代罪羔羊,是苦主啊!
這裡可以再提供一個苦主(當時讀幼稚園的小女兒)的說法:「爸爸已經一個月沒有回家陪我吃晚飯了。」
吐吐苦水,沒事。