五個瀏覽器。

一台電腦。

我可以為網站分瀏覽器來用了。

Posted by yungyuc at 03:58, 0 comment, 0 trackback.

本站舉家遷移到 site5。為了不要因為吃太多資源被趕出家門,得好好改進程式了。

Posted by yungyuc at 17:18, 0 comment, 0 trackback.
我想不出題目,用關鍵字當題目好了

組態 FastCGI 是好幾年前的事了。前一陣子為了測試某個 hosting 的 fastcgi 功能,再花了一番功夫研究 apache 和 fastcgi 的配合,算是又複習了回來。不過,今天要再作一次遷移工作時,程序還是忘記了 @_@

我決定把步驟寫下來,之後還要用的呢。

» continue reading
Posted by yungyuc at 21:32, 0 comment, 0 trackback.

mailman 是很常用的郵件列表系統,它有一個 CGI 式的 web-based 管理頁面,包含了許多的功能連結。

一般來說,一旦安裝好了 mailman,我們就不會再去動這台主機了。不過事必有例外,如果我們的郵件主機移動了,同時連 domain name 都要更改的時候,在 mailman 的 mm_cfg.py 裡也要把相關的 domain 字串一起改掉,例如

DEFAULT_HOST_NAME
DEFAULT_EMAIL_HOST
DEFAULT_URL_HOST

等等。

Note

你也會在 Default.py 裡找到這些設定,但請遵照 mailman manual 的指示,把自訂的設定改在 mm_cfg.py,不要碰預設值為佳。

不過,對已經建好的列表來說,修改 mm_cfg.py 的設定不會影響網頁介面的連結。主要的 email 子系統應該會辨認出 mm_cfg.py 的設定,但 CGI 的管理頁面則會取用 mailing list 資料庫裡的 URL 設定,不會從 mm_cfg.py 抓 URL 資料。

因此,當 mailing list 主機的 domain name 變更了以後,要把各 mailman list 資料庫裡的 URL 資料也修改掉,列表管理員在管理頁面裡才會得到正確的管理連結 (連結不正確的話,管理員就苦了)。

那麼,list 資料庫的 URL 要怎麼改呢?在管理網頁上是沒有地方可以修改的,因為 mailman 不預期這是常用的設定,所以不提供網頁介面。我們必須使用 mailman 提供的 bin/config_list 工具來修改這個設定。

請進入 mailman 目錄,在其中新建一個檔案 (取名為 webdata 好了),內容為:

web_page_url = 'http://the.moved.host/mailman-relocation/'

(當然,你要把 URL 的內容取代成適合的值)。然後執行 (as mailman):

$ bin/config_list -i webdata yourlist

yourlist 意指要修改的郵件列表。一跑之後,你會得到以下的結果:

$ bin/config_list -i webdata yourlist
Non-standard property restored: web_page_url

瞧,mailman 不太喜歡我們改這個值呢!再進入管理頁面,你就會得到正確的連結表了。

Posted by yungyuc at 13:13, 0 comment, 0 trackback.

因為和 Firefox 的版權談不攏,所以 Debian 官方 repository 裡把 firefox 這個套件拿掉了,改用 iceweasel。雖然這隻冰鼬用起來和火狐差不了多少 (當然你可以看見,官網上的圖示比較...嗯),只是偶爾也會出一些小問題,譬如像 google toolbar 這種比較龜毛的 extension。

google toolbar 網站在提供 xpi (extension 檔) 下載的時候會檢查我們瀏覽器的 useragent,iceweasel 用的當然就不是 Firefox 而是 Iceweasel,所以 Google 就說「不行唷,你要不要去抓火狐來用?」然後不給我抓。

所以呢,直接的解法就是把 useragent 改掉。我們可以到 about:config 裡去把 general.useragent.extra.firefox 改成 Firefox/2.0.0.1,然後一切 OK (請參考這串討論)。或者是看看人家冰鼬怎麼教你改

但我不想改 useragent 怎麼辦呢?冰鼬就是冰鼬呀!上火不就融了嗎!?

其實還有個更簡單的方法。直接去 http://dl.google.com/firefox/google-toolbar-linux.xpi 把 xpi 抓回來以後再拉進 iceweasel 安裝。如此一來,以上所述的 useragent 修改法,其實完全不需要 ...

Have fun with iceweasel.

Posted by yungyuc at 10:43, 0 comment, 0 trackback.

Trackback SPAM 是很討厭的東西;它不像 comment SPAM 可以用 captcha 或帳號/密碼來擋。Trackback 都是由 blog 軟體系統發出來的資料,所以要擋可以,必須考慮到這中間缺乏使用者的互動,否則就會連正常的 trackback 也擋掉。

感謝 Mark許多指教,讓我知道處理 trackback SPAM 常用的幾種方法:

  1. 不良的行為。
  2. DNSBL.
  3. 內容驗證。

我處理 trackback SPAM 的經驗還不夠,無法歸納出 trackback 中的「不良的行為」。因此,我往 2, 3 兩種方法裡面去進行。DNSBL 是許多郵件主機 (或客戶端程式) 用來判別的方式,不過不知道是不是我的處理方式有問題,所有進我這邊的 trackback SPAM 來源都不在這些 DNSBL 裡面。

DNSBL 無法擋掉進來的 trackback SPAM,所以就得實作內容驗證的程式了。幸好,這對 Python 來說是小菜一碟,利用 urllib2,不到二十行就解決了。內容驗證的要訣,根據 Mark 提供的原則,是去 trackback 來源的 URL 把 HTML 內容抓回來,在其中搜尋是否有我這個 blog entry 的 URL。這個原則很合理。一般會 trackback 我的人,在 blog 的內容裡面多半都會提到我的 entry (不然他為什麼要 trackback 呢),也通常會附上 entry URL。

目前內容驗證是這裡 anti-trackback-spam 的主力。為了要通過此處的 trackback 內容驗證,希望對此處 entry 進行 trackback 的朋友們,必須在寫完你的 blog,儲存好可以給別人看之後,再進行 trackback 動作。否則,trackback 內容驗證程式抓不到你的 blog 內容,自然會把你的 trackback 當成 SPAM 囉。

Posted by yungyuc at 17:09, 0 comment, 0 trackback.

WordPress CLI Theme 好酷,網站一進去就是 Command Line Interface 了。

好想要喔。

Posted by yungyuc at 20:54, 0 comment, 0 trackback.

對,我開始改這裡的程式了。所以紀錄一下編網頁的時候會用到的 autocmd:

au BufRead *.py set ai et nu sw=4 ts=4 tw=79
au BufRead *.html set ai et nu ts=4 sw=4
au BufRead *.htm set ai et nu ts=4 sw=4
au BufRead *.css set ai et nu ts=4 sw=4

再補一個 reStructuredText 的:

au BufRead *.rst set ai et nu ts=2 sw=2
Posted by yungyuc at 18:11, 0 comment, 0 trackback.

寫網頁程式時,要輸出到網頁上的資料常常會帶有 HTML 標籤,譬如 <html>blahblah</html>,或者資料內容「像」HTML 標籤,例如 <亂講>一通</亂講>。在 Django template 中,提供了一個 filter 來把字串裡的 HTML 標籤相關字碼轉成 HTML entity。這個 filter 就是 escape。相關說明見 Django 文件

用法很簡單:

<span class="message">{{ message.message|escape }}</span>

如果我們沒有在 message.message 後面加上 escape filter,那麼萬一 message.message 這個字串裡放了 <> 一類的字元,就會弄亂 HTML 排版。更有甚者,會造成 XSS vulnerability。

escape 是 Django template 處理字串資料輸出到網頁上簡單、好用而必要的 filter。我們會常常用到它。

Posted by yungyuc at 22:48, 0 comment, 0 trackback.

Thinker 在從 Dynamic 、 script 到 Python 中的

「 KISS; Keep It Simple and Stupid 」,何必將事情搞的很複雜,簡單點不是很好嗎?Template 只需要很簡單的資料置入的功能,何必弄來「能上天下海」的神力。

一言,深獲我心。Django template 強迫移除複雜程式邏輯的作法招致了許多反對的意見,但直到現在,Django 也沒有要改變的意思。ASP, PHP, CFM, PSP 這麼多種 server page,無論一開始多容易撰寫,後續的維護實在是令人頭痛;如果 template language 允許了多一點的可程式化邏輯語法,未來很容易就走進可怕的表現/邏輯混雜的混亂地獄。

那種程式碼很難看,要叫人看那種程式碼得付不少錢才成。

Python 字典是強大無比的概念。撰寫 Python 程式本質上就是建立字典、在字典裡查表的循環。呼叫函式用到字典、存取變數用到字典,最後,整理資料也是字典最好用。初學 Python 的時候只懂得把字典當作字串資料庫來使用,及至經驗累積多了,便慢慢把許多東西都放進字典裡去。一開始是變數,接下來是物件,後來連類別和模組都塞進了字典。偉哉。

合適地組合各種簡單的概念,便能構築強大的系統。

Posted by yungyuc at 15:32, 1 comments, 0 trackback.
Change to page (10 entries in each page): 1 2 3 4
© hover year to navigate month: powered by django