2010年8月31日星期二

2001年與2010年的IT行業

昨晚看到一篇已很多很多年前看過的文章,應該是大約2003年左右,因為當年正是我轉做寫程式的時候,但其實這篇文是2001年出來,在台灣和中國大陸都廣泛流傳。
這篇文章叫做<程式與香雞排>是台灣一名叫蔡學鏞先生寫的文章,如果我沒有交代他是什麼人,可能你會當他和我一樣,
只是一個平庸的怨氣IT友。

就看看蔡學鏞的個人簡介:
蔡學鏞先生小檔案:
蔡學鏞,台灣省台南縣人。畢業於台灣清華大學資訊系(Computer Science)碩士班。1983 年的夏天,蔡學鏞就讀小學時,開始學程式設計。這一路下來,使用過的程式語言依序為 BASIC、dBase III+、Clipper、C、x86 組合語言、C++、Java、C#。這些年來,程式設計也從個人的純興趣,變成學業,再變成工作。不管是變成學業還是變成工作,蔡學鏞對於程序設計的興趣未曾稍減。除了程式設計之外,蔡學鏞也喜歡音樂、電影、閱讀、寫作、繪圖、唱歌。

蔡學鏞目前居住在台北市,擔任的工作包括了:軟體公司的軟件工程師兼講師、出版社與雜誌社的作者與編輯、軟件技術諮詢顧問。

這段時間,有人再次談論起這篇<程式與香雞排>,是因為有人在比較台灣10年前和10年後的IT業,
大家有興趣可能看看mobile01網站30多頁的討論串,看過後,2009未時,台灣的IT業和香港有很多相似的地方,例如:
  1. 台灣一般有幾年經驗的Programmer人工約70,000新台幣,等於約17,000港元,在台灣,$TWD 70,000這個價已經是樽頸位,同樣地在香港有幾年經驗的Analysis Programmer有$HKD17,000已經很好運。
  2. 薪金同樣追不上物價通漲,樓價高企的時代。
  3. 台灣有很多One-Man-Project,寫好後,測試一下就交貨收錢,香港亦是。
  4. 業界人踩人的惡性競爭下,台灣的軟件訂單利潤太低,程式員的薪金都不會高得幾多,和香港一樣,什麼$HKD 1,000一個網頁程式...

當然還有很多相同之處,大家看過就明白。

其實台灣有賣雞扒,香港做Programmer又何嘗不是慘過斬叉燒呢...據說天水圍有個地方賣叉燒飯送半隻咸蛋只需要$25,但一天可以賣過百多盒,假設一盒利潤有$15的話,一天已經隨意賺千多元,不要以為我想順勢就吹牛,住天水圍的人應該知道吧,因為都是在香港討論區見到有人介紹我食的。

當然最後就一定要看看<程式與香雞排>吧,如果你是同行,看過後,你想一想這其實是2001年的文章,再想一想今天,你可能和我一樣歎息,業界其實十年都沒有進步過。
<程式與香雞排>
http://csie-tw.blogspot.com/2008/09/blog-post_29.html
Mirror (內容一樣)
http://jeffchang001.blogspot.com/2008/09/blog-post_30.html

2010年8月30日星期一

Windows 7 高品質主題

Microsoft官方發佈了很多高質素的ThemePack,WallPaper都是1920x1200高解像的,其中Bing’s Best系列,以及各國風景系列都是十分美麗。
大家可以在Personalization Gallery home下載。
另外日本MSN發佈了日本VS2010主題的ThemePack,以日本夜景為主。
http://closeup.jp.msn.com/visualstudio2010/


正確應付ASP.NET 4.0的Request Validation

這個錯誤,我幾乎肯定每一個寫ASP.NET的人都會遇過 :
從客戶端(xxx)中檢測到有潛在危險的Request.Form 值。 說明: 請求驗証過程檢測到有潛在危險的客戶端輸入值,對請求的處理已經中止。...

若上網搜尋解決方法,有半數的答案都是叫你在Page Detective把validateRequest設成"false",Ajax CallBack的話可能會叫你在web.config加入<httpRuntime requestValidationMode="2.0" />就了事。

ASP.NET 4.0的Request Validation由以往2.0時的*.aspx層面擴大至web service (*.asmx)和http handler(*.ashx)層面 (請參考ASP.NET 4 Breaking Changes)。其實既然MS提供全面的防止跨網站(XSS)指令碼攻擊,我們何必把它關掉,如果你想你的網站安全,就必須在Client-Side和Server-Side下功夫。

在設計ASP.NET頁期間,大家都會知道如Button Control都會有OnClick和OnClientClick事件,但如果用上jQueryUI這類純HTML Element的話,大家自然會加上runat="Server",然後掛上Event Handler (如btnSave_OnClick),例如jQueryUI的Button:
<button id="btnSave" runat="server" type="button" OnServerClick="btnSave_Click">
<span>Save</span>
</button>
大家都明白 :
上述Button中的OnServerClick等於ASP.NET原生的Button Control的OnClick ;同樣地OnClick亦等於OnClientClick。

兩者可以並存,而且亦因為會先觸發OnClick的事件,之後再觸發OnServerClick,所以要避免出現Request Validation的錯誤,正確做法就是Post Form前,先用JavaScript把String做一HTML Encode,然後再Post至Server,才是正確的做法。

JavaScript的HTML Encode和Decode,簡單的可以用Replace方法,但我就使用PHPJS的方法,PHPJS中有兩個方法, htmlentities() 和 html_entity_decode(),就是給你做Encode和Decode之用。

假設我有一個TextBox叫txtTitle,一個Button叫btnSave的話,那實際做法就是:
<script type="text/javascript">
$(document).ready(function () {
HtmlDecode();
});

function HtmlEncode() {
html = $('#txtTitle').val();
$('#txtTitle').val(htmlentities(html));

}
function HtmlDecode() {
s = $('#txtTitle').val();
$('#txtTitle').val(html_entity_decode(s));

}
</script>
<asp:TextBox ID="txtTitle" runat="server" MaxLength="100" Width="400" ClientIDMode="Static"></asp:TextBox>
<button id="btnSave" clientidmode="Static" runat="server" type="button" onclick="HtmlEncode();" onserverclick="btnSave_Click">
<span>Save</span>
</button>
這就會在PostBack前,先把txtTitle.Text做一次Encode,那就可以避免出現問題。

上述的程序其實已經做了Encode,所以Server那邊是否需要再做一次HttpUtility.HtmlEncode()呢,我就覺得看你是否對PHPJS或你自定義的方法是否信任,我就安全為上,寫入Database時都會再做一次HttpUtility.HtmlEncode()。

2010年8月29日星期日

推薦使用SMPlayer播放RMVB

K-Lite Codec Mega Pack由6.2.0之後不再連帶任何商業的Codec,Divx和Real Codec日後都不再包含在內,所以我都很苦惱有什麼代替品,雖然安裝Real Alternative都是一樣,但始終對我這類有電腦潔癖的人,就是不太願意安裝太多有FootPrint的軟件。

不知為什麼大陸的日劇組總是喜歡轉做RMVB格式發佈,其實今時今日RMVB已經再沒有優勢,在個個都用寬頻上網和BT的環境下,根本300MB和1000MB其實分別已經不大。

我找遍Google都再找不到Codec Pack有Real Codec而且還有更新,例如PureCodec已經半死狀態。
所以我試一試VLC Player看看播RMVB效果如何,其實我都不是第一次用VLC,老實說,我對它的界面感覺很差,設定又很複雜。
在PortableApps下載後,試試播RMVB,感覺好似有點一格格的Lag,Seeking又Lag,畫面好似怪怪地,好似比常淡色和較光,不到3分鐘我就刪除,我懶得去做調整。

之後再試MPlayer的變種SMPlayer,同樣是使用Portable版,下載之後,試播,效果很好。
完全沒有VLC的問題,但和我使用的舊版K-Lite比較之下,還是K-Lite比較好,主要是當我1680x1050 Full Screen時,K-Lite的起格情況沒有那麼嚴重,不過在沒有選擇情況下,我只好用SMPlayer做臨時方案。

20100828_202332-t.png