2008/10/16
VIM with Mandriva
在 Mandriva 上使用 VIM 遇過輸入中文,會產生亂碼的現象,例如輸入「中文」這兩個字,「中」是正常,但「文」就變成亂碼,原本都從修改 LC_* 或 TERM 環境變數下手處理,成效不彰。最近發現,出問題的主機都只裝 vim-minimal 而沒有 vim-enhanced 檔案,把 vim-enhanced 補上,就好了,特此一格。
2008/10/14
Security in Plone3
網站的安全機制 (security) 由 Zope 在系統底層負責,管理員和開發者應該了解「權限」「角色」「使用者」「群組」等概念,才能發揮安全機制帶來的便利。
首先,要有足夠的權限才能存取網站內容,不然,會遇到 AccessControl.Unauthorized 的訊息回應。權限 (permission) 並不是直接對應給使用者 (user),而是先被指定給角色 (role),再經角色指定給使用者。
一位使用者,可以被指定多種角色,生效範圍可以是全站性,或是只在特定目錄裡生效。角色也可以指定給群組 (group),如此一來,群組裡的使用者就具備被指定的角色。

在 ZMI 裡 Security 頁籤,可以看到整個系統的「安全列表」,多數權限項目的「Acquire permission settings?」選項是打勾狀態,表示「會繼承上一層目錄的權限結果」,在此情況下,角色設定的效果會再加上去。
一般情況下,並不需要去更改安全列表的設定狀況,即使需要調整,也應該只更改網站根目錄的設定值。除此之外的情況,都會讓整個安全機制變得很複雜。
權限是安全機制裡的最小單位,網站應用軟體如果用到安全機制,通常是要檢查權限,而不是檢查角色。檢查使用者或群組名稱,通常不是好主意。
在 Professional Plone Development 書中第 83 頁,提到 "Security-aware code should almost always check for permissions, rather than roles. Checking for specific user or group names is rarely a good idea, because roles can change depending on the current context and security policy of the site." 我猜,它的意思是「檢查角色、使用者名稱、群組名稱,都應該盡量避免」吧。
首先,要有足夠的權限才能存取網站內容,不然,會遇到 AccessControl.Unauthorized 的訊息回應。權限 (permission) 並不是直接對應給使用者 (user),而是先被指定給角色 (role),再經角色指定給使用者。
一位使用者,可以被指定多種角色,生效範圍可以是全站性,或是只在特定目錄裡生效。角色也可以指定給群組 (group),如此一來,群組裡的使用者就具備被指定的角色。

在 ZMI 裡 Security 頁籤,可以看到整個系統的「安全列表」,多數權限項目的「Acquire permission settings?」選項是打勾狀態,表示「會繼承上一層目錄的權限結果」,在此情況下,角色設定的效果會再加上去。
一般情況下,並不需要去更改安全列表的設定狀況,即使需要調整,也應該只更改網站根目錄的設定值。除此之外的情況,都會讓整個安全機制變得很複雜。
權限是安全機制裡的最小單位,網站應用軟體如果用到安全機制,通常是要檢查權限,而不是檢查角色。檢查使用者或群組名稱,通常不是好主意。
在 Professional Plone Development 書中第 83 頁,提到 "Security-aware code should almost always check for permissions, rather than roles. Checking for specific user or group names is rarely a good idea, because roles can change depending on the current context and security policy of the site." 我猜,它的意思是「檢查角色、使用者名稱、群組名稱,都應該盡量避免」吧。
2008/10/12
My Folder in Plone3
在 Plone3 之前,登入會員帳號後,可以在 personal bar 看到 my folder 的連結項目,但在 Plone3 之後,已取消這樣的呈現方式。

也就是說,即使在 Site Setup 裡 Security 選項,把 Enable User Folders 打勾生效,僅管登入會員帳號後,可用 /Members/myuser 之類的網址找到 myuser 使用者的個人目錄,但在 personal bar 還是找不到 my folder 的連結項目。
如果想要「恢復」原本的呈現效果,可到 ZMI 設定,進入 portal_actions 裡會看到 user 或 portal_tabs 之類的 CMF Action Category 項目,再新增一個 CMF Action 項目 ID 可指定為 myfolder,Title 指定為 My Folder,I18n Domain 指定為 plone,URL (Expression) 指定為 string:${portal/portal_membership/getHomeUrl},Condition (Expression) 指定為 python:(member is not None) and (portal.portal_membership.getHomeFolder() is not None),Permissions 指定為 View,將 Visible 打勾,最後按 Save Changes 確認。
這樣就會在 personal bar 看到 My Folder,但如果想要調整它呈現的位置順序,例如在 Log out 之前,可以利用 Up / Down 按鈕來調整。
詳細的說明可參考 http://dev.plone.org/plone/ticket/7075
也就是說,即使在 Site Setup 裡 Security 選項,把 Enable User Folders 打勾生效,僅管登入會員帳號後,可用 /Members/myuser 之類的網址找到 myuser 使用者的個人目錄,但在 personal bar 還是找不到 my folder 的連結項目。
如果想要「恢復」原本的呈現效果,可到 ZMI 設定,進入 portal_actions 裡會看到 user 或 portal_tabs 之類的 CMF Action Category 項目,再新增一個 CMF Action 項目 ID 可指定為 myfolder,Title 指定為 My Folder,I18n Domain 指定為 plone,URL (Expression) 指定為 string:${portal/portal_membership/getHomeUrl},Condition (Expression) 指定為 python:(member is not None) and (portal.portal_membership.getHomeFolder() is not None),Permissions 指定為 View,將 Visible 打勾,最後按 Save Changes 確認。
這樣就會在 personal bar 看到 My Folder,但如果想要調整它呈現的位置順序,例如在 Log out 之前,可以利用 Up / Down 按鈕來調整。
詳細的說明可參考 http://dev.plone.org/plone/ticket/7075
2008/10/03
Plone Debug Mode
首先,要找到 etc 目錄裡的 zope.conf 檔案,確認設定值是 debug-mode on 的狀態。如果前面有「#」符號,表示是「註解」之意,要移掉「#」符號。
其次在 ZMI 裡找到 portal_css 項目,進入後在 CSS Registry 頁籤,會看到 Debug/development mode 選項,把它打勾,表示要讓 debug mode 生效。

同樣在 ZMI 裡找 portal_javascripts 項目,把 Debug/development 選項打勾生效。

如果沒把 debug mode 生效的話,修改結果不會即時反應。
如果不想經常重新啟動 Zope,可以安裝 plone.reload,最簡單的方法,是在 buildout.cfg 裡的 egg 與 zcml 設定區塊,指定 plone.reload 模組,重新執行 buildout 並以 Manager 身份登入後,透過 http://localhost:8080/@@reload 之類的網址,就可以 Reload Code 或 Reload ZCML 了。
其次在 ZMI 裡找到 portal_css 項目,進入後在 CSS Registry 頁籤,會看到 Debug/development mode 選項,把它打勾,表示要讓 debug mode 生效。
同樣在 ZMI 裡找 portal_javascripts 項目,把 Debug/development 選項打勾生效。
如果沒把 debug mode 生效的話,修改結果不會即時反應。
如果不想經常重新啟動 Zope,可以安裝 plone.reload,最簡單的方法,是在 buildout.cfg 裡的 egg 與 zcml 設定區塊,指定 plone.reload 模組,重新執行 buildout 並以 Manager 身份登入後,透過 http://localhost:8080/@@reload 之類的網址,就可以 Reload Code 或 Reload ZCML 了。
2008/09/16
QOTD: Paul Graham on Language
摘自 Hackers & Painters
* 電腦程式只是文字。選用的語言則決定了你的語彙能力。程式語言是程式設計者思考的方式。
* 程式設計師傾向歸屬於所用語言的派別,甚至比他們所用的語言區隔更大。因此,談到某種語言優於其他,會被認為是壞習慣。但是連程式設計師自己都不相信這種虛偽的禮節。我對於程式語言的看法或許會惹怒很多人,不過我認為這是了解駭客最好的方法。
* 程式語言是用來思考程式,而不是用來展現你已經想出來的程式。它應該像是一支鉛筆,而不是一支鋼筆。如果大家寫程式的方法跟我大學所學相同,靜態型別應該會是一個優秀概念,不過,我所認識的每一位駭客,都不用這種方式來撰寫程式。我需要一個可以隨意擦寫塗抹的程式語言,而不是讓語言要求我正襟危坐地捧著型別,非常禮貌地與嚴謹過時的編譯器對話。
* 電腦程式只是文字。選用的語言則決定了你的語彙能力。程式語言是程式設計者思考的方式。
* 程式設計師傾向歸屬於所用語言的派別,甚至比他們所用的語言區隔更大。因此,談到某種語言優於其他,會被認為是壞習慣。但是連程式設計師自己都不相信這種虛偽的禮節。我對於程式語言的看法或許會惹怒很多人,不過我認為這是了解駭客最好的方法。
* 程式語言是用來思考程式,而不是用來展現你已經想出來的程式。它應該像是一支鉛筆,而不是一支鋼筆。如果大家寫程式的方法跟我大學所學相同,靜態型別應該會是一個優秀概念,不過,我所認識的每一位駭客,都不用這種方式來撰寫程式。我需要一個可以隨意擦寫塗抹的程式語言,而不是讓語言要求我正襟危坐地捧著型別,非常禮貌地與嚴謹過時的編譯器對話。
2008/09/12
NuPlone Hacking
NuPlone 是 Plone3 的內建模組,啟用後能讓網站外觀煥然一新,參看它的程式內容,也可以一窺 GenericSetup 和 CSS Registry 的設定方法。自己還沒找到滿意的 Plone3 Skin 教學文件,而且發現 qPloneSkinDump 目前只支援 Plone2.5,只好逛進 NuPlone 目錄。在 skins/nuplone_styles 裡,像 base.css, columns.css 等檔案是空檔,它們會「蓋」掉系統預設的設定值嗎?
2008/09/03
jQuery Example on Plone
jQuery 是一套 JavaScript 函式庫,可用來處理動態網頁或 AJAX 技術。台灣有 jQuery 中文社群今年六月剛在 http://groups.google.com/group/jquery- 成立討論區。
如何讓 CMS 結合 jQuery 之類的技術呢? 在 David Bain 的示範影片,可以看到 Plone3 製作 Fade In 文字效果的步驟。對新手而言,影片內容過於簡略,我把實作過程的細節補充於此。
進入 ZMI 點選 portal_javascripts 在 Add a new script 方框裡設定 id 為 custom-jquery.js 按 Add 鈕,再把 Debug/development mode 選項打勾按 Save 鈕。
如何讓 CMS 結合 jQuery 之類的技術呢? 在 David Bain 的示範影片,可以看到 Plone3 製作 Fade In 文字效果的步驟。對新手而言,影片內容過於簡略,我把實作過程的細節補充於此。
設定 Kupu 的 Character Style
進入 Site Setup 點選 Visual editor,在 Styles 區塊裡新增 Fade In 選項並存檔,格式和內容如下:Fade In|span|fadeIn
建立並註冊 javascript 程式
進入 ZMI 點選 portal_skins 到 custom 目錄,新增 DTML Document 設定 id 為 custom-jquery.js 點選 Add and Edit,在方框裡填寫如下內容並存檔:jq(document).ready(function(){
//
jq('.fadeIn').fadeIn(10000);
});範例中的「jq」就是 Plone 裡 jQuery 控制符號。進入 ZMI 點選 portal_javascripts 在 Add a new script 方框裡設定 id 為 custom-jquery.js 按 Add 鈕,再把 Debug/development mode 選項打勾按 Save 鈕。
新增 CSS 設定值
進入 ZMI 點選 portal_skins 的 plone_styles,再點選 ploneCustom.css 裡的 Customize 鈕,在方框裡加入下列內容並存檔:點選首頁 Edit 在 Body Text 方框裡選取想要設定 Fade In 效果的文字,存檔後可以看到效果。
.fadeIn {
display: none;
}
Subscribe to:
Posts (Atom)