2010年6月21日星期一

升級WordPress 3.0注意事項

剛剛完成WordPress升級至3.0,其實3.0版沒有太多新驚喜,盡量保持原有結構的簡潔,這亦都是WordPress的優點。
搭建Menu的新功能要Theme支援,剛巧我的未支援,所以試不出有什麼特別。

不過升級3.0有兩樣事要注意:

1. wp-config.php變更
直至2.92版,很多人升級應該都是保留原有wp-config.php,但3.0版比舊版多了幾個authentication keys。
舊版本:
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');

3.0版本:
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',  'put your unique phrase here');
define('NONCE_KEY',  'put your unique phrase here');
define('AUTH_SALT',  'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');

雖然你忽略這些Keys都可以運作正常,不過這些亂數產生的keys和安全性有關,大家可以經由WordPress.org secret-key service取得這些authentication unique keys.

2. 升級時出現Error message:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 2964967 bytes) in /home/content/.../html/wp-includes/http.php on line 1363

這錯誤可能會出現在Share hosting上,如果hosting把php.ini中的memory_limit設定少於32M,就有可能會發生,因為WP3.0要求PHP不少於32MB memory。
解決方法最簡單就是升級前,打開wp-config.php,加上這句:
define('WP_MEMORY_LIMIT', '256M' );

如果還解決不到,就試試使用這個Plugin - Memory Bump
http://wordpress.org/extend/plugins/memory-bump/

2010年6月11日星期五

ASP.NET 4.0的ClientIDMode="Static"未必是最好

ASP.NET 4.0新增的ClientIDMode是一項重大的更新,不知這是什麼的話,可以在這裡看看。
預設ClientIDMode是Inherit 不過我想大多數人都會把焦點放在ClientIDMode="Static"。

由於預設是Inherit,ClientIDMode會以預設的AutoID去制定Controls ID,或者有人會直接在Page Detective把ClientIDMode設定為"Static"供ClientIDMode去Inherit。
<%@Page ClientIDMode="Static"%>

那就不用每個WebControl都設定一次,但問題就來了,部份Third Party的WebControls未必能可以在Static ID下運作,特別是需要ClientScript做CallBack的,可能會找不到Render HTML後的ID。
目前至少AjaxControltoolKit中的AsyncFileUpload已經要設定ClientIDMode="AutoID"才能正確運作。

而值得看看的是Predictable Mode,Predictable 主要是給Data Control使用,例如Repeater,DataList這些會重複Generate HTML Element的WebControls。
因為當你制定ItemTemplate時,你不可能期望每一項Item中的Controls ID都相同,同樣亦不合理,例如Repeater:
<tr>
<td>
<span id="mySpan">Row1</span>
</td>
</tr>
<tr>
<td>
<span id="mySpan">Row2</span>
</td>
</tr>

所以"Predictable"的出現就是給你設定ClientIDRowSuffix property,自行制定。其實我會建議在DataControl中ItemTemplate或EditTemplate下,所有Web Control都加上ClientIDMode為AutoID或者Predictable,即使設成AutoID感覺上很多餘,但基於有override的可能性,都是加上好一點。

或者ASP.NET老手已經深明這些道理,但剛學ASP.NET的話,亦無需要太追求簡短的ID,這類型ID,"ctl00_ContentPlaceHolder1_HideProductImage",我們都習慣了。

2010年6月10日星期四

Windows 7 安裝廣東輸入法

我輸入中文除了用速成之外,還有用廣東輸入法以輔助,近10年都是這樣,缺一都不可,速成雖然可以應付大部份中文,但有時總會有一些字,你懂得讀,但忘記怎樣寫,這就是為什麼我一直都還使用廣東輸入法了。
多年前買了這個輸入法 - 廣東話輸入法2002,真的不錯。

不過在Windows 7 / Vista 環境下,安裝方法有所不同。
首先建議Right Click安裝程式,以WinXP相容模式起動,安裝後,你還需要一個叫uniime.dll的東西才可以使用。
下載後,把uniime.dll放在
"C:\Windows\System32\" 系統目錄內,如果是64Bit Windows的話,就放在"C:\Windows\SystemWOW64\"
然後照正常新增輸入法即可。

廣東話輸入法2002 Download
uniime.dll Download

Windows Vista / 7 / Server 2008 不能安裝SQL Server 2008 R2解決方法

今天剛安裝好Windows 7後,去Windows Update完全更新後,就下載SQL Server 2008,我的版本是Express R2 64Bit中文版本,但安裝時出現程式錯誤,而且是強行關閉那種,我執行安裝程式的System Configuration Checker,發現出現一個錯誤 : PerfMonCounterNotCorruptedCheck

中文版Error Message :
檢查現有的效能計數器登錄區是否一致。效能計數器登錄區已損毀。若要繼續,您必須修復效能計數器登錄區。如需詳細資訊,請參閱 http://support.microsoft.com/kb/300956。

英文版Error Message :
Checks if existing performance counter registry hive is consistent. The performance counter registry hive is corrupted. To continue, you must repair the performance counter registry hive. For more information, see http://support.microsoft.com/kb/300956.

我唯有試試32Bit版本,結果依然,再試之前原先在Vista上使用的非R2英文版本,竟然錯誤都一樣。



於是我就去http://support.microsoft.com/kb/300956看看,老實說,MS提供的解決方法極度複雜。
我唯有上Google Search "PerfMonCounterNotCorruptedCheck",果然有很多人都有同樣問題,亦有很多不同的建議,但我試過了都不行。
甚至很多人說在[執行]以下的會成功,我都不行。
lodctr /R:PerfStringBackup.INI 

綜合不同受害者的結論,花了幾個小時去研究,最後發現這是Windows語言版本問題,所以為什麼依據別人的方法都不能解決問題。

首先大家要知道我的OS是Windows 7 Ultimate 64Bit 香港中文版 (請注意"香港中文版"了,這是關鍵!)
而問題成因的效能計數器登錄區是藏在registry中的
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Perflib\

細看之下,裡面只有[009]和[0404]兩個項目,而大家大概都知道這是LCID,"009"代表英文,"0404"代表台灣中文,那香港中文的"0C04"呢?
假如SQL Server安裝程式會檢查我的OS語系的話,應該大概就是因為這樣沒有"0C04"而錯誤吧?
那我新建一個"0C04"項目,直接由"0404"人手Copy&Paste過"0C04"再重新開機。



再次試試安裝中文版,依然都是一樣,但試英文版64Bit時,竟然可以完成安裝,而且用了兩天都沒有問題。
所以解決方法很明顯就是新建一個自己Windows語系的LCID。
雖然中文版未解決,但我亦覺得用英文版本都沒有所謂。

這是一個十分奇怪的Bugs,當我上網找答案時,連台灣中文的用家都說有這問題,甚至日文,英文,德文的用家都有出現,全部都有一個共同點就是使用Windows Vista / 7 / 2008 Server,顯然這是一個Vista核心在特定情況才出現的Bugs。
但我的Windows 7是Clean Install,只是上了Windows Update的Patch,Windows 7是由MSDN Subscription下載的,所以我個人幾乎肯定香港中文用戶90%會中招。

2010-11-29更新
發現台灣網友同樣出現這個問題,他們都有提供自家的解決方法。
大家可以去參考一下:
安裝MS SQL Server時發生 效能計數器登錄區一致性的錯誤
Win7上安裝SQL2008 效能計數器登錄區一致性的錯誤解決辦法