2007年12月11日 星期二
2007年2月14日 星期三
使用 Fiddler 觀察瀏覽器(HTTP) 封包與內容
使用 Fiddler 觀察瀏覽器(HTTP) 封包與內容
下載網址 : http://www.fiddlertool.com/Fiddler/version.asp
首先到 Fiddler 的官方網站取得 FiddlerSetup, 目前版本v1.2, 下載安裝後會在IE瀏覽器上多一個圖示
這是我做的一個例子, 開啟 Fiddler後,用IE連上 google;
在HTTP Sessions 視窗下有五列資料, 代表從開啟到目前共有五個外連的通訊, 首先是 Fiddler 自已,由於我是從 yahoo 的網頁到 google,所以多了第二列的 yahoo,然後 google, 疑.... 怎麼又有陰塊不散的 yahoo, 原來是我 Yahoo Blog 沒關 , 但是我沒有作麼事, 由此可知 Blog 開一段時間會自動連線 yahoo, 網頁上看不出來有重整的動作, 大概是用 Ajax技術吧。
用滑鼠點 google 這列,可以在 Performance Statistics 上看到這次傳送接收的封包大小,這可以用在Web 程式開發上,了解你的網頁內容是否過於巨大,超成網路無法負荷,目前很流行的 Ajax 目地就是用來改善這個缺點。
Ajax.NET Professional(ajaxpro) 入門教學-範例
AjaxPro 是一個可以整合在 .NET 1.1 和 2.0 系統下的 Ajax Framework, 雖然微軟目前巳有出自已的 Ajax.NET , 不過公司是用 Visual Studio .NET 2003 為主要開發工具, 在必須使用 .NET 1.1 下似乎 AjaxPro 是目前較好的選擇。
AjaxPro 有通過 MPV, 代表微軟官方也是有認證的。
安裝說明(以 Visual Studio .NET 2003 為範例)
首先到官方網站 http://www.ajaxpro.info/ 下載 6.10.6.2_DLL.zip 目前版本 v6.10.6.2, 解壓縮後會見到 6個檔案。
開啟你要使用 AjaxPro 的 Visual Studio 專案, 然後加入參考選擇 AjaxPro.dll, 如果你是要使用到 .NET 2 就選 AjaxPro2.dll。
用記事本開啟壓縮檔內的 web.config, 用搜尋找 Handler configuration for Ajax.NET Professional ,將找到位置以下標籤 location 的文字區塊內容複製,然後貼上 Visual Studio 專案內的 web.config, 貼上位置在 configuration 標籤之內,記得將預設 type="AjaxPro.AjaxHandlerFactory, AjaxPro.2" 改為 type="AjaxPro.AjaxHandlerFactory, AjaxPro", 詳細可以參考下載的 web.config 設定。
範例程式
1.先在專案內新增處理 Server 端工作的 Class:
在要執行的函數上加上 [AjaxPro.AjaxMethod], 注意Function 是宣告為 static, 這個範例目地是取得 Clent 端傳來的文字加上日期回傳。
public class AjaxProHandle
{
[AjaxPro.AjaxMethod]
public static string Fun(string arg) {
return arg + " - " + System.DateTime.Now.ToString();
}
}
2. 在 Page_Load 下用 AjaxPro.Utility.RegisterTypeForAjax 註冊:
typeof 下是上面 class 的名稱。
private void Page_Load(object sender, System.EventArgs e)
{
// 在這裡放置使用者程式碼以初始化網頁
AjaxPro.Utility.RegisterTypeForAjax(typeof(AjaxProHandle));
}
3. 在網頁 Client 端 撰寫執行接收的 javaScript:
注意這裡的 CWeb.AjaxProHandle 是 namespace + class name , 我的測試是 namespace 不能省略。
function doAjaxTest()
{
var val = document.Form1.content.value;
var obj = CWeb.AjaxProHandle.Fun(val); alert(obj.value);
}
執行後的畫面:
4. 改為非同步執行
上述的範例網頁是要等到 Server 執行回傳才繼續動作, 一般情况希望不影響使用者操作下要改為非同步執行, 只需要修改 javascript 就可以做到了。
function doAjaxAsyncTest()
{
var val = document.Form1.content.value;
CWeb.AjaxProHandle.Fun(val,doAjaxCallBack);
}
function doAjaxCallBack(obj)
{
alert(obj.value);
}
5. 程式碼下載
http://www.divshare.com/download/94716-11e
6. 結論
Ajaxpro 是一個比較單純的 Ajax Framework , 不像其它知名的有很豐富的 UI 支援, 主要是能整合 Visual Studio .NET 2003, 不過在一般資料庫網頁程式上也就夠用了, 其它更多範例可以參考它的網站。
策略模式(Strategy)
策略模式(Strategy)
先把設計物件導向程式的準則列出來,這大概就是心法了
1.獨立變動
2.對介面寫程式
3.多用合成,少用繼承
策略模式(Strategy Pattern)
這應該是我最常用到的模式了,常常我們設計一個類別家族的時候,會出現類別的某一個功能特別容易變化,例如你為公司各式各樣的報表設計了一個家族,如下:
public abstract class Report {
public string title;
public abstract void Print();
}
public class PDFReport:Report{
public override void Print(){
Console.WriteLine("PDF Format...");
}
}
public class WordReport:Report{
public override void Print(){
Console.WriteLine("Word Format...");
}
}
public class ExcelReport:Report{
public override void Print(){
Console.WriteLine("Excel Format...");
}
}
這個 Report 當中的 Print() 功能可能會因為文件格式或印表機的不同而有各式的變化,一般的解決方法像再加一個子類別如 PDFReport2,這造成因為部份改變就增加子類別的類別氾濫,或是在 Print() 內加上 If else 判斷式,這造成必需不斷修改原始類別與函式複雜化。
Strategy 的解決方法是將 Print() 內的演算法獨立出來,另外設計一個 Print 的演算法家族,並讓 Report 可以設定由那一個 Print 執行。
完整程式碼
//獨立 Print 演算法家族
public interface Print {
void print();
}
public class PDFPrint:Print{
public void print(){
Console.WriteLine("PDF Format....");
}
}
public class WordPrint:Print{
public void print(){
Console.WriteLine("Word Format....");
}
}
public class ExcelPrint:Print{
public void print(){
Console.WriteLine("Execl Format....");
}
}
// 改寫 Report 類別
public abstract class Report {
public string title;
protected Print print; // 父類別包涵 print 介面
public void SetPrint(Print aprint){ // 可以在執行時期改變 Print 實作類別
print = aprint;
}
public void Print(){
print.print(); // 交由 Print 實作類別執行
}
}
public class PDFReport:Report{
public PDFReport(){ // Report 巳不需覆寫 Print 函式,但可以在建構式指定預設的 Print 實作類別
print = new PDFPrint();
}
}
public class WordReport:Report{
public WordReport(){
print = new WordPrint();
}
}
public class ExcelReport:Report{
public ExcelReport(){
print = new ExcelPrint();
}
}
// 執行範例
PDFReport report = new PDFReport();
report.Print(); // 產生 "PDF Format.... "
report.SetPrint(new WordPrint()); // 改變預設的 Print
report.Print(); // 產生 "WordFormat.... "
之後如果有需要新的列印(Print)方式,也只要在增加 XXXPrint 物件就好了,這是 Strategy 模式的最大優點。
缺點
1.類別數量增加,程式碼變複雜
這是所有設計模式的通病,不過如果開發團體的成員都對設計模式有一定的了解,反而會使得程式容易被理解,你只要說明這裡使用的模式名稱,團體成員就可以了解一群類別的使用模式。
2.使用者必須了解 Strategy 家族的使用方法
Strategy 有一個很大的好處,就是可以在執行時期改變函式內容,但前題是使用者必須了解 Strategy 家族的使用時機。
程式開發的金牌原則
程式開發的金牌原則
以下是書中的敏捷宣言原則 ,我稍微改變了內容,讓不會程式設計的人容易了解 :
個人及互動勝於流程與工具
人是最重要的因素,溝通良好的一般程式人員比超級程式人員但沒有溝通的人更好。
可用的軟體勝於詳盡的文件
過多的軟體文件比文件太少更糟,產出大量文件耗費時日,甚至得花更多時間來維持文件和程式的同步,如果不同步,它就變成巨大的謊言,成為誤導來源。
文件必須簡短,扼要。除非對文件有立即且重大的需求,否則不產出文件。
與客戶合作勝於合約談判
成功的專案需要客戶定期且頻繁的回饋,通常一開始定義的需求、成本到結束時就不再有意義,與其依賴一紙合約上的工作描述,不如規定團隊需要一起工作的合約。
回應變化勝於墨守計劃
經驗不足的管理者才會先制作一張詳細的計畫表,事實上回應變化的能力才是決定專案是否成功的關鍵,商業環境會變,當客戶看到系統開始運作的面貌後也會改變需求。我們只需要對目標有概念,只對目前的工作詳細計畫。
承上原則的作法
億萬又億萬(Billions & Billions)
爆炸的世界
十八,六百萬兆顆麥子
很久很久以前,有一位宰相發明了一個叫國王死的遊戲,規則
類似現在的象棋,共有八×八個格子。這個遊戲顯然解決了國王日益
無聊的生活問題(這對國王來說太重要了),所以國王龍心大悅,
於是對他說:你要什麼獎賞,無論是金銀財寶甚或城池華宮?
而宰相從容的回答:我只要求一些麥子;在我的棋盤上,第一
格放一粒麥子,第二格放兩粒,而以後每隔一格,麥子的數量就加
倍,直到所有格子都有麥子。
國王當下驚嘆!怎麼會有如此樸實無華的宰相,發明如此重要
的東西居然只要麥粒。當下令麥倉長給他照辦下去。
接下來相信大家已經知道。事實上,十八,六百萬兆麥子(註一)
相當於全球一百五十年的總產值。而結局不是國王感到自慚形穢,
把王位讓給了宰相,就是他也發明了一個叫宰相死的遊戲。
核子反應
以上的故事並不是在幫大家複習數學,只是要說明,受限於人
類智能上最弱的一環(計算能力),於是我們難以查覺這經常發生
的現象。
大約在一九三三年九月,一位物理學家里奧‧席拉(Leo Szilard)
利用相近的原理,發明了核子反應的雛形。他認為,世上必然有一
種化學元素,如果把一個中子打進該物質,該物質的原子核會釋放
出兩個中子,而每個放出的中子,又可以引導原子核釋放出兩個中
子來。於是,他的腦海中浮現了核子連鎖反應的情形。
席拉成功的找到了鈾元素,並力勸當時著名的愛因斯坦寫信給
羅斯福總統,造成了核子彈的產生(但是大家只記得愛因斯坦)。
其實,炸藥也有相似的物理反應,這種現象,我們有一種形容詞叫
「爆炸」。最常見的例子是人口,依現在的計算,大約四十年人口
就要增加一倍,也就是到二○四○年人口大約會直逼一百三十億,
如果以這樣的速度至下個世紀,其糧食需求量將遠超過現今所有的
糧食生產科技,應該說沒有科技可以與人口爆炸抗衡,就算將來也
是(註二)。
這是個爆炸的世界
曾經在帶小朋友看天文時,被問到什麼是「宇宙大爆炸」。當
下我一楞,是啊……為什麼叫作大爆炸?……科學家依據太空中背
景輻射的方向與性質,推測宇宙可能源自同一點,卻創造了一百億
兆顆星球,而這龐大的數字有個有趣的比喻,假設你是掌管天庭的
宙斯,想要了解管轄內的星球數量,從宇宙誕生以來(大約一百五
十億年),以一秒一個數字的速度下,就算你不眠不休,也還數不
到一百萬兆。這種天文級的數字大概也只有「爆炸」作的出來,也
就是說爆炸產生了宇宙,而宇宙產生了我們,我們來到了「爆炸的
世界」。
(註一)麥子總數 = 二的六十四次方減一
(註二)如果人口爆炸的速度不變,一千年內,宇宙的行星將住滿人類。
世界是平的
The World is Flat
作者 : 佛里曼 出版 : 雅言文化
記得是剛畢業的時候吧,大約六年前,那時才剛剛感覺了中國的崛起,心中有點不是滋味卻又不得不承認,那時我就問了自己一個大問題 : "是什麼原因造成有些國家富強,有些國家貧弱。"
是人口嗎? 中國有便宜的工資,廣大的市場。那印度人也很多,何况多的是一些國小人少卻富有的國家。是文化嗎? 中國在戰國時代百家爭鳴,一堆思想家的言論連在數千年後的我都驚訝連連,而在同時,一些在北歐的民族還在樹上爬哩, 但現在他們是近代藝術的發源地。四大文明古國死了兩個,剩下兩個的平均人民所得不到我們的十分之一,最對比的美國,建立也不過兩百年歷史,最初由一群在家鄉混的不好的人開懇,但現在.. 美國的強大使好箂塢電影席捲世界,年青人等於是被他們思想控制,連當初那個把他們趕出家門的英國也不例外。
當時我問了自己這個問題,但是我沒有辦法給自己好的解答,後來某些時候的某個事件又讓我再問了幾次,多年後我卻在這本書上找到了答案。
很多時候問題是有非常多面向的,但單純的我只能想到單純的回答,因為笨所以只能用簡單的角度看事情,而這本書的作者博學多聞到令人讚嘆,所以他能用宏觀的視野看,把這個答案給了我這個笨蛋。
有朋友問我這本書好看嗎,我回答這不是好看,而是很重要,重要到你非看不可,所以囉,還是那句老話,書要自己去看,作者把一生的精華放進書中,你花幾小時幾天就把他看完,這是投資報酬率最高的事了。
額外一提的是,作者應該是阿富汗恐怖主義的專家,他對這個全球大問題的看法也讓我恍然大悟,奇怪,什麼時候我們才可以出一個像這樣的記者。
追風箏的孩子
當天使穿著黑衣出現
作者 : Nathaniel Lachenmeyer
出版 : 大塊文化
如果你也曾經在街頭遇到遊民自言自語,會不會好奇,是不是他們有不同的生世。
這本書使我們幌然大悟,從此以後你看待他們的目光將會不同。
作者的父親曾經是一位博士,之後卻變成了遊民,當他接到了父親的死訊,回朔追尋那段失去的時光,才發現原來父親是個精神分裂症患者,才發現了父親的尊嚴與勇氣,對他的愛。
在書中我最大的震憾是,一般我們對自已的肯定,通常來自於別人的看法,當別人看待你如遊民,經神病患者時,作者的父親還是堅待尊嚴的活著,我常常自認為是堅強的人,但我跟他比起來,就像個不懂事的小孩了。
以下是書皮上的編輯筆記 :
這是一個悲傷的故事,可是開始的時候大家都很幸福。
有一個小男孩,他有疼愛他的爸爸如媽媽,還有一隻狗叫喬冶。
九歲生日的前夕,爸爸帶他去逛海生物館。
小男孩喜歡有牙齒的抹香鯨,爸爸喜歡會唱歌的座頭鯨。
他們搭地鐵回家的路上還打了雪仗。
如果他們在童話,故事會在此嘎然結束,
好讓幸福的餘味久久不散。
可是,這裡是人間,連天使都穿著黑衣出現。
天使行經人間,離開的時候,連小男孩都沒發現....
如果沒有光環和翅膀,如果說著這世界無法明瞭的語言,
如果穿著黑衣出現,祂的美好我們會不會無法分辨 ?
作者簡介:拉胥梅耶(Nathaniel Lachenmeyer) 1969年12月2號生。父親於1995年過世時,他25歲。同年踏上探索父親內心瘋狂風暴之旅,寫下處女作《當天使穿著黑衣出現》便榮獲2000年和平鐘獎。該獎由費城精神健康協會頒發,表彰「對於精神疾病患者及家人意義重大而深遠的貢獻」。與「國際安徒生大獎」得主澳洲插畫大師羅伯‧英潘(Robert Ingpen)合作兒童繪本《破碎的鳥喙》(Broken Beaks)一書,描繪一隻小麻雀與一個遊民之間的友誼,對心理疾病患者的尊嚴與勇氣有細膩的刻畫。 現與妻子住在華府,經常受邀演講關於精神疾病與遊民等議題。
引用網址
http://www.locuspublishing.com/product.asp?book=1111MA038#