20070202115848759.jpg

無論你是要觀察瀏覽器連到某個網頁時的封包內容,還是電腦內的程式透過 Http 做了什麼事,還是 Web 開發時測試網頁大小,都可以使用這個免費好用的小工具 Fiddler。
下載網址 : http://www.fiddlertool.com/Fiddler/version.asp

首先到 Fiddler 的官方網站取得 FiddlerSetup, 目前版本v1.2, 下載安裝後會在IE瀏覽器上多一個圖示20070202013005630.jpg ,按下後程式就會自動監控你的 Http 通道正在做什麼事。

這是我做的一個例子, 開啟 Fiddler後,用IE連上 google;
20070202011638916.jpg

在HTTP Sessions 視窗下有五列資料, 代表從開啟到目前共有五個外連的通訊, 首先是 Fiddler 自已,由於我是從 yahoo 的網頁到 google,所以多了第二列的 yahoo,然後 google, 疑.... 怎麼又有陰塊不散的 yahoo, 原來是我 Yahoo Blog 沒關 , 但是我沒有作麼事, 由此可知 Blog 開一段時間會自動連線 yahoo, 網頁上看不出來有重整的動作, 大概是用 Ajax技術吧。

用滑鼠點 google 這列,可以在 Performance Statistics 上看到這次傳送接收的封包大小,這可以用在Web 程式開發上,了解你的網頁內容是否過於巨大,超成網路無法負荷,目前很流行的 Ajax 目地就是用來改善這個缺點。

felixhuang 發表在 痞客邦 留言(1) 人氣()

主管電腦上發生的問題,XP的工具列上的按鈕消失了,就是程式最小化後不會出現在下方的工具列上,後來經由孤狗大神的協助(孤狗真是MIS的好朋友),找到了這個 TaskbarRepairToolPlus!小工具,發現還真的很好用,這個程式幾乎可以解決所有工具列上的問題,粗列有......

工具列的問題 
Taskbar is Missing
Lock Taskbar Greyed Out
Minimized Programs Missing
Reduce Size of Buttons
Toolbars Greyed Out or Missing
Disable Taskbar Context Menus
Remove Taskbar and Start Menu from the Control Panel
Disable Right Click/Properties
Lock Size and Position of the Taskbar
Hide or Show the Taskbar
Repair Taskbar Icon Views
Hide or Show the Start Button
Enable or Disable Taskbar Grouping (Removes the options from Properties)
Repair, Disable or Enable the Task Manager

右下角工具列(系統列)的問題
Hide or Show All Listed Icons
Hide or Show All Inactive Icons
Remove Past Items
Show Missing Icons
Restore/Remove the Clock
Disable Balloon Tips
Remove the Notification Area
Disable Low Disk Space Warning Message and Icon

快速啟動列的問題
Can't Create Toolbar Error Message (Create)
Can't Create Toolbar Error Message (Repair) This one corrects the current issue that spyware cleaners break.
Restore Show Desktop Icon
Save Quick Launch Sort Order

程式下載連結:
http://www.kellys-korner-xp.com/TaskbarRepairToolPlus!.zip  or
http://www.divshare.com/download/787394-cd5

大家也可以到作者的網站上看看,還有很多有關解決 XP 視窗問題的程式 ...
http://www.kellys-korner-xp.com/xp.htm

 

felixhuang 發表在 痞客邦 留言(0) 人氣()

設計模式之於程式,就像招式之於武術,招式練習的,就是常見的進攻方式,所以設計模式就是一種常見的設計招式,一開始練習時,常要思考這裡要用什麼設計模式,後來慢慢的,無意中你就是用模式來寫程式,然後就像武術大師,無招勝有招了。

先把設計物件導向程式的準則列出來,這大概就是心法了
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 家族的使用時機。

felixhuang 發表在 痞客邦 留言(0) 人氣()


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, 不過在一般資料庫網頁程式上也就夠用了, 其它更多範例可以參考它的網站。

felixhuang 發表在 痞客邦 留言(0) 人氣()

我是一個在程式路上走了五、六年的人,最近看了 Pobert Cecil Martin 的"敏捷軟體開發",從這位軟體大師在書中內容,比對到我這些年的工作經驗,以下提到的原則對於任何有關軟體開發的所有人,都是明智的忠告,更像是金科玉律,即使你只是參於開發的業務,也可以用來比對你們的軟體團隊是否依照最有效率的方式在執行。
 

以下是書中的敏捷宣言原則 ,我稍微改變了內容,讓不會程式設計的人容易了解 : 
個人及互動勝於流程與工具
人是最重要的因素,溝通良好的一般程式人員比超級程式人員但沒有溝通的人更好。
 

可用的軟體勝於詳盡的文件
過多的軟體文件比文件太少更糟,產出大量文件耗費時日,甚至得花更多時間來維持文件和程式的同步,如果不同步,它就變成巨大的謊言,成為誤導來源。

文件必須簡短,扼要。除非對文件有立即且重大的需求,否則不產出文件。

與客戶合作勝於合約談判
成功的專案需要客戶定期且頻繁的回饋,通常一開始定義的需求、成本到結束時就不再有意義,與其依賴一紙合約上的工作描述,不如規定團隊需要一起工作的合約。
 

回應變化勝於墨守計劃
 經驗不足的管理者才會先制作一張詳細的計畫表,事實上回應變化的能力才是決定專案是否成功的關鍵,商業環境會變,當客戶看到系統開始運作的面貌後也會改變需求。我們只需要對目標有概念,只對目前的工作詳細計畫。
 

 承上原則的作法
>業務人員與開發者必須在專案全程中天天一起工作。
>開發團隊之內與團隊之間,效率最高且效果最佳的資訊傳達方式是面對面的溝通。
>將系統切割為不能再小的可用軟體,經常交附可用的軟體,頻率可以是數週到數個月,以較短時間隔為佳。
>可用的軟體功能是最主要的進度量測方法。
>經由及早與持續交付有價值的軟體以滿足客戶需求是我們最優先要做的事。
>竭誠歡迎改變需求,甚至巳處於開發後期亦然,敏捷流程掌控變更以維護客戶的競爭優勢。
>用動機強的人來建構專案,給予他們適當的環境,充份的資源,並相信他們可以完成工作。
>敏捷開發提倡能持續的開發步調。贊助者、開發人員以及使用者應當能維持一個可以穩定而恒的步調。
>持續追求優越的技術與優良的設計,以強化敏捷性。
>簡單化-讓不需處理的工作最大化技巧-是不可或缺的。
>最佳的架構、需求與設計皆源自於自身組織良好的開發團隊。
>在規律的時間間隔中,開發團隊思考如何變的更有效率,然後據之適當的調整與修正自己的行為。

felixhuang 發表在 痞客邦 留言(0) 人氣()