ALLEN--OneNet魔力...'s profileOneNet魔力小子BlogListsGuestbook Tools Help

OneNet魔力小子

微軟最新技術趨勢

ALLEN--OneNet魔力小子 ALLEN--OneNet魔力小子

Video

   

我的點部落格

May 06

進行UI介面的單元測試 實作與工具篇 (OneNet魔力小子)

         本篇是主要在介紹 UI(使用者介面)的單元測試,在寫單元測試中最讓人頭痛的就是 UI層很難進行測試,尤其是UI層與邏輯層的程式耦合度很高的程式專案,而 NUnitForms 就是用來解決這個問題的良好工具,NUnitForms是作為NUnit的擴展,他主要的用途是專為Windows Forms應用程式的表單測試而設計的。

        NUnitForms 可以跟 NUnit(單元測試)進行良好的配合機制,在撰寫NUnit單元測試的程式碼中,可以利用NUnitForms 的來跟Windows Form進行互動,過程中不需要再經由User(使用者)進行人工操作,因此可以用來模擬使用者操作UI的輸入,來進行接受性的單元測試,NUnit目前可以支援的控制項元素包含需多,如:Buttons, CheckBoxes, ComboBoxes, Labels, ListBoxes, RadioButtons, TabControls, TextBoxes, TreeViews, Context Menus, Forms, MenuItems, Modal Forms, Modal MessageBoxes, and the Mouse 。
官方網站:http://nunitforms.sourceforge.net/index.html

       下載NUnitForms,並安裝完成後,就可以新增一個程式類別專案,對NUnitForm.dll的參考引用,步驟如下:
先新增一個類別專案
001

在專案的參考節點上按右鍵進行參考引用 NUnitForm.dll
002 
003

引用NUnitForms.dll檔後,在命名空間添加
using NUnit.Extensions;
using NUnit.Extensions.Forms;
004 

上述步驟完成後,接下要在單元測試程式碼(NUnit)中針對將要進行測試的Windows Form(表單),需要執行類似下列語法來初始化。
Form1 form = new Fom1();
//進行Form.Show()來顯示啟用表單
form.Show();

     這邊有個觀念需要先特別說明,在NUnitForms框架中,已經實作出很多測試表單(Windows Form)過程中,可以模擬的Control,因此在寫單元測試中,可以根據實際需要模擬的Control,進行宣告物件實體,例如要模擬表單的TextBox,就可以新建一個Object 為 TextBoxTester,模擬Button按鈕,就可以新建立一個 ButtonTester,仔細觀察你會發現,結尾都是Tester居多,而這些模擬的Control都是延自一個基類為 ControlTester。而每個 ***Tester都有提供一些方法與屬性,來供程式呼叫與使用,以下特別撰寫這幾個範例:

ex1:
//使用 ControlTester 來存取 TestBox 控制項的屬性
ControlTester textBoxTest = new ControlTester("textBox1") ;  // textBox1為Windows Form表單上的TextBox控制項ID

ex2:
//使用 ControlTester 來存取 Button 控制項的屬性
ControlTester buttonTest = new ControlTester("button1");    // button1為Windows Form表單上的Button控制項ID

ex3:
// 抓取某個 Form (在此為form1) 上的 button1 控制項
// 如果忽略掉 form1 參數,則NUnitForm將搜尋所有以呼叫 Form.Show() 的表單
ControlTester buttonByFormIdTest = new ControlTester("button1", "form1");


    根據上述語法,將可以順利取得要測試的Control項目,以下根據上述在繼續寫幾個範例,來讀取控制項的屬性或呼叫歸屬方法:

ex1:  
//使用 ControlTester 來存取 TestBox 控制項的屬性
ControlTester textBoxTest = new ControlTester("textBox1") ;  // textBox1為Windows Form表單上的TextBox控制項ID
//讀取 TextBox.Text , 並列印出
System.Console.Out.WriteLine(textBoxTest["Text"].ToString());

ex2:
//使用 ControlTester 來存取 Button 控制項的屬性
// button1為Windows Form表單上的Button控制項ID
ControlTester buttonTest = new ControlTester("button1");   
//觸發Button.Click()方法
buttonTest.FireEvent("Click", new EventArgs());

ex3:
//利用 ButtonTester 來測試 Button 作法
ButtonTester buttonTest2 = new ButtonTester("button1");
//引用Button.Click() 方法
buttonTest2.Click();

[案例分享]
      接下來,筆者將完成一個實作案例,來完成NUnit與NUnitForms的測試案例,案例將模擬有一個Windows Form表單,而這個表單擁有一個Button控制項、一個TestBox控制項、以及一個Label控制項,然後在使用NUnit(單元測試)與NUnitForms,實作出模擬預期使用者操作Form表單後,將出現的值來進行測試案例。 (本篇假設讀者已知NUnit單元測試的實作技巧)
     

       現在在專案裡新增一個Windows Form,並取名為form1

005







 

 

 

 

 

 

在form1,從工具項拖拉Button、TextBox、Label控制項到 form1 裡
006

在button1.Click() (雙點擊button1),撰寫下列語法:

   1: private void button1_Click(object sender, EventArgs e)
   2:        {
   3:            //TextBox輸入字串顯示至Label
   4:            this.label1.Text = this.textBox1.Text;
   5:        }

在專案裡,在新增一個Class,並命名為 NUnitFormsTest.cs,如下圖:

007 

008

在專案裡參考引用 unit.framework.dll 與 NUnitForms.dll
 009

010

在NUnitFormsTest.cs 引用下列命名空間

using NUnit.Framework;
using NUnit.Extensions.Forms;

撰寫下列整合NUnitForms程式碼

   1: // [TestFixture] 標示此 Class 為 NUnit 測試用途
   2:    [TestFixture] 
   3:    public  class NUnitFormsTest
   4:    {
   5:  
   6:        // [Test] 標示此 Method 為 NUnit的測試方法
   7:        [Test]
   8:        public void Test01_ButtonClick()
   9:        {
  10:            //new form1 object and Show form1
  11:            form1 form = new form1();
  12:            form.Show();
  13:            
  14:            TextBoxTester txtTest = new TextBoxTester("textBox1");
  15:            //模擬使用者 KeyIn 值
  16:            txtTest["Text"] = "輸入值測試";
  17:  
  18:            ButtonTester btnTest = new ButtonTester("button1");
  19:            //呼叫Button.Click()
  20:            btnTest.Click();
  21:  
  22:            LabelTester lblTest = new LabelTester("label1");
  23:  
  24:            //進行測試
  25:            Assert.AreEqual("輸入值測試", lblTest["Text"].ToString(), "Error Value Not Mapping..");
  26:  
  27:        }       
  28:    }

執行NUnitGUI,將可以看到執行結果,是否正確
011

在此省略掉NUnit的技巧,如果改天還有時間,我將會補齊這塊NUnit測試技巧。

March 11

從 ANSI 到 OEM 的字元轉換

        包含延伸字元,也就是在 ASCII 字元範圍 32 (space) 到 126 (~) 之外的字元,包括國際字元如 "a,"、"c"、"e"、"n" 和 "s" ,在 SQL Server 中需要特別處理。

在結果集合中的延伸字元表示倚賴使用中的字碼頁。字碼頁是電腦用來解譯及顯示資料屬性的字元集合。字碼頁通常對應到不同的平台及語言,並且被使用在國際化應用程式。例如,ASCII 值 174 會在一個字碼頁以 R 符號出現,而不是在另一個字碼頁以 chevron c 字元出現。

一般來說,字碼頁被分成 ANSI 字碼頁及 OEM 字碼頁。用高數字的 ASCII 值表示國際字元的 ANSI 字碼頁被使用在 Windows。用高數字的 ASCII 值表示畫直線及標點符號字元的 OEM 字碼頁被設計成在 MS-DOS 中使用。

當資料輸入 SQL Server 資料庫時,在本機 (用戶端) 電腦上的 SQL Server 設定指定資料是以 ANSI 或是 OEM 格式儲存。這選項是以在 [SQL Server 用戶端組態] 對話方塊內的 [DB 程式庫選項] 上的 [ANSI 到 OEM 自動轉換] 選項來指定。按一下 [開始] 功能表的 [程式集] 中的 Microsoft SQL Server 7.0 或更新的 [用戶端網路公用程式] 可取得此對話方塊。(關於 ANSI 到 OEM 自動轉換的更詳細資訊,請參考 SQL Server 文件。)

此選項預設是為 SQL Server 用戶端選取的,是能夠造成資料從高數字 ASCII 字元轉換到 OEM 字元的選擇。例如,如果 OEM 轉換選項被設定並且您在資料行中輸入 "Gunther" 名稱,然後儲存資料列,則字元 "u" 會在列存入資料庫之前轉換成另一字元。

您在「查詢設計工具」中所建立的查詢結果受 [SQL Server 用戶端組態] 對話方塊內的 OEM 轉換選項設定組合的延伸字元儲存格式所影響。其根據下列這些變數:

  • 您不能搜尋包含高順位的 ASCII 字元。
  • 您的查詢結果對高順位的 ASCII 字元以不正確字元出現。

一般來說,如果資料以 OEM 格式儲存,您應該設定 OEM 轉換選項,以使資料適當地顯示並且使您能夠搜尋它。如果資料是以 ANSI 格式儲存 (也就是說,它不會被轉換至 OEM 格式),但您已經設定 OEM 轉換選項,則資料將不會被適當地顯示並且您不能夠搜尋它。

若要決定資料是否以 OEM 格式儲存,您可以使用查詢來顯示資料表的內容或您工作的資料表。如果延伸字元不正確地出現,則 OEM 轉換設定可能會錯誤。關閉查詢與 Access 專案,更改在 [SQL Server 用戶端組態] 對話方塊的設定,然後再次開啟 Access 專案與查詢。

October 22

ADO.NET 觀念與實作篇-如何將DataSet裡的DataTable複製一份到另一個DataSet

   在ADO.NET 的物件架構模型中,分為兩大部分,一是 DataProvide 資料提供者,二是DataSet(離線環境),DataSet 資料集是一種存在記憶體裡的物件,您可以把它當作記憶體的關聯式資料庫來處理,DataSet資料集架構裡大致包含Tables、Relations、ExtendedProperties,Tables就是在關聯式資料庫的資料表集合體,Relations 記錄著Table與Table之間的關連性,如父/子資料表,ExtendedProperties您可以在其中放置自訂資訊,如用來產生結果集的 SELECT 陳述式,或產生資料的時間,架構圖如以下
DataSetSchema

 而今天的主體將是要說明如果將一個DataSet資料集(再強調一次,把它當作記憶體裡的一個資料庫)的DataTable(資料庫裡的Table),複製到另外一個DataSet的Table裡,在Sql server的T-SQL的寫法我們通常可以利用如下語法:
   SELECT *
        INTO DatabaseB.schema.tableB
        FROM  DatabaseA.schema.tableA

 但今天我們將利用一個類別成員DataTableReader,在ADO.NET實作 Table 在 Dataset與 DataSet 之間如何有效率運作機制…

 首先建立一個Windows Form的專案,Form的設計畫面大致如下,兩個按鈕Button和兩個DataGirdView和兩個DataSet資料集,第一個button(btnFirTable)是載入DataSet1裡的Table到DataGridVIew1,另外一個button(btnCpTble)是複製第一個button產生的Table到另外一個Dataset2裡畫面設計圖如下:

FormDesign1

 接下來在第一個Button(btnFirTable)的click寫下以下程式碼:
 Code1

private void btnFirTable_Click(object sender, EventArgs e)
        {
            //建立連線物件
            SqlConnection conn;
            conn = new SqlConnection("Data Source=localhost;integrated security=sspi;Initial Catalog=AdventureWorks");
        
            SqlDataAdapter sda=new SqlDataAdapter("select * from Sales.Customer",conn);

            //將資料填入 資料集 dataSet1
            sda.Fill(dataSet1, "table");

            //將資料結果繫結至DataGridView1
            dataGridView1.DataSource = dataSet1.Tables["table"];

            //釋放物件
            conn.Close();
            sda.Dispose();

        }

執行結果圖
result1

 接下來也是主要的關鍵語法,在第二個Button(btnCpTble),撰寫下列語法:
Code2

 private void btnCpTble_Click(object sender, EventArgs e)
        {
            System.Data.DataTableReader drt = dataSet1.CreateDataReader();

            dataSet2.Load(drt, LoadOption.OverwriteChanges, "table1");

            dataGridView2.DataSource = dataSet2.Tables["table1"];

        }

按下第二個Button(btnCpTble),執行結果如下圖:
result2

整個過程就完成實作table在兩個dataset之間複製與移動…

   在應用程式開發領域中,將近有七成以上都跟資料庫有關係,而微軟的開發平台策略上,.NET技術架構中,ADO.NET 就是將所有跟資料處理相關的功能封裝成一個類別庫,因此如果可以將ADO.NET核心觀念與實作掌握住,甚至更可以把微軟的主要資料庫SQL SERVER的技術研究徹底,哪麼您可以稱為一個微軟技術專家了。

October 14

Microsoft Silverlight 2 正式發布

Microsoft Silverlight 2今天終於向用戶發布使用。

Microsoft Silverlight是一個跨瀏覽器的、跨平台的插件,為網路帶來下一代基於.NET的媒體體驗和豐富的交互式應用程式。Silverlight提供靈活的編程模型,並可以很方便地集成到現有的網路應用程式中。Silverlight可以對營運在Mac或Windows上的主流瀏覽器提供高品質視頻訊息的快速、低成本的傳遞。

另外,據 Mary Jo Foley 稱 Silverlight 將會支援 Google Chrome 瀏覽器,但不支援 iPhone(Flash 播放器也不支援 iPhone,看起來是蘋果不允許第三方開發);微軟計畫在 PDC 上公開目前 Silverlight for Windows Mobile 的情況;微軟目前在和 Nokia 合作開發 Symbian 手機上的 Silverlight;有傳言稱微軟和 RIM 共同開發黑莓上的 Silverlight。

更新內容︰
•.NET Framework support with a rich base class library. This is a compatible subset of the full .NET Framework.
• Powerful built-in controls. These include DataGrid, ListBox, Slider, ScrollViewer, Calendar controls and more.
• Advanced skinning and templating support. This makes it easy to customize the look and feel of an application.
• Deep zoom. This enables unparalleled interactivity and navigation of ultrahigh resolution imagery.
• Comprehensive networking support. Out-of-the-box support allows calling REST, WS*/SOAP, POX, RSS and standard HTTP services, enabling users to create applications that easily integrate with existing back-end systems. • Expanded .NET Framework language support. Unlike other runtimes, Silverlight 2 supports a variety of programming languages, including Visual Basic, C#, JavaScript, IronPython and IronRuby, making it easier for developers already familiar with one of these languages to repurpose their existing skill sets.
• Advanced content protection. This now includes Silverlight DRM, powered by PlayReady, offering robust content protection for connected Silverlight experiences.
• Improved server scalability and expanded advertiser support. This includes new streaming and progressive download capabilities, superior search engine optimization techniques, and next-generation in-stream advertising support.
• Vibrant partner ecosystem. Visual Studio Industry Partners such as ComponentOne LLC, Infragistics Inc. and Telerik Inc. are providing products that further enhance developer capabilities when creating Silverlight applications using Visual Studio.
• Cross-platform and cross-browser support. This includes support for Mac, Windows and Linux in Firefox, Safari and Windows Internet Explorer.

點擊進入安裝界面︰http://www.microsoft.com/silverlight/resources/install.aspx?v=2.0

October 09

ASP.NET AJAX Framework 觀念與實作篇-PageMethods 和 WebService

   有時我們在開發WEB應用程式專案時,常常需要去執行SERVER(伺服器)端的程式碼,但我們知道在如果每次只是需要執行一小段程式碼(函式),就需要將整個網頁去POST REQUET,很浪費資源,所以今天我們將利用AJAX CLIENT LIBRARY(JAVA SCRIPT LIBRARY)在瀏覽器端局部呼叫SERVER端的程式函式,有兩種做法,分別為
PageMethods 和 WebService

PageMethods做法

1. 新增一個內含 ScriptManager 控制項的 default.aspx 網頁(從工具箱拖曳ScriptManager控制項至default.aspx頁面)

Default_1

2. 在ScriptManager的控制項屬性視窗中,將EnablePageMethods屬性選取為True,很重要的步驟之一。

Default_2

3.在default.aspx的後製程式碼中,寫一個類別靜態成員方法,此方法一定要宣告為靜態(static)。

    public static string CallPageMethods(string Str)
    {

        return "OneNet魔力小子..CallPathMethods";
    }

需要在此宣告屬性WebMethod Attribute,用來支援Client端的JavaScript程式碼,如以下宣告標示
[System.Web.Services.WebMethod]

  Default_3

4.切換到原始檔頁面,撰寫JavaScript腳本語法去呼叫 剛剛上面撰寫的類別成員靜態方法 CallPageMethods。
..語法如下:
Default_4 

5.在原始檔頁面,放入一個HtmlInuptButton ,語法如下:

 <input id="Button1" type="button" value="button"  onclick="ClientCallPgMds();" />

程式執行結果圖示
Default_5

WebServices …下一篇,將完整介紹…


October 07

ASP.NET AJAX Framework 觀念與實作篇-ScriptManager 和 ScriptManagerProxy

    在您安裝了 ASP.NET AJAX 1.0的TOOLKIT(擴充套件),就可以很不費任何力氣,甚至程式開發人員可以連一行JavaScript都不用撰寫,就可以輕鬆的享受AJAX的非同步傳輸,也是因為這樣在微軟在2007年初推出了ASP.NET AJAX FrameWork,我就深深的愛上它,也很認真的去苦苦專研,雖然WEB RIA的新時代也來臨了,身為追求技術的愛好者,當然又需苦命的埋頭苦讀,微軟的新技術SIVERLIGHT…,但根據多位微軟的技術專家前輩的研判RIA的高峰期可能快者還需一兩年,也或許更久…而至少AJAX也是目前的主流WEB應用。

   在開發ASP.NET  AJAX 的 PAGE頁面第一個過程就是需要從工具箱DRAG-DROP ScriptManager控制項
ScriptManage_20081006
,而且一定要在所有控制項之前(一個頁面僅只能有一個ScriptManager),否者會發生例外(EXCEPTION),這個觀念相信很多人都有,而ScriptManager主要的作用就是要把ASP.NET AJAX CLIENT LIBRARY(JavaScript 函式庫)傳送到CLIENT端的BROWSER,所以UpdatePanel、UpdateProgress都需要這些JavaScrip Library,來實施Ajax的運作過程,而另外一個主體物件ScriptManagerProxy,它是在什麼情形下,最適合拿來應用呢?沒錯,就是在一個頁面需要兩個ScriptManager的情況,如MasterPage主板頁面的網頁(ContentPage也需要個別的JavaScript檔(.js檔)的函式),還有另外一種情形也常需要運用ScriptManager和ScriptManagerProxy的配合運用,就是客製UserControl(使用者控制項)並且UserControl的單獨頁面還會使用到JavaScript檔(.js檔)的函式。我這樣描述可能大家都亂了,我設計一個實作過程…

    首先簡單的新增Button UserControl (檔名為BtnUserControl.ascx)和JavaScript檔案(檔名為JScript.js)
 BtnUserControlMake

BtnUserControlJS
,而BtnUserControl.ascx的功能就是很簡單的呼叫JavaScript檔(JScript.js)的函式。

接下來在BtnUserControl.ascx從工具箱拖拉一個Button控制項,它主要是用途是按下後在client端產生警告訊息(alert),畫面與程式碼如下

 BtnUserControl.ascx設計畫面與過程
 BtnUserControlOK 

<%@ Control Language="C#" AutoEventWireup="true" 
CodeFile="BtnUserControl.ascx.cs"
 Inherits="BtnUserControl" %>

<asp:Button ID="Button1" runat="server" Text="請按我" 
    OnClientClick="JavaAlert('OneNet魔力小子!!')" />
<!-- 去呼叫 JScript.js 檔案裡的 函式 JavaAlert() ></script>  -->

在從工具箱拖曳ScriptManagerProxy控制項
BtnUserControlMake2

設定ScriptManagerProxy控制項的Scripts屬性為Jscript.js,用來載入JavaScript的宣告函式
BtnUserControlMake3 

Jscript.js的程式畫面

BtnUserControlJS_ok

 

再來在預設Default.aspx從工具箱拖曳一個UpdatePanel控制項至頁面,
再將剛剛新增的BtnUserControl.ascx拖曳至UpdatePanel控制項內
ScriptManageDefaultPage

最後執行結果
BtnUserControl_view_OK

原理:
ScriptManageProxy控制項是ScriptManager一種代理script元件,在ScriptManageProxy控制項的Scripts屬性所設定的JavaScript檔定義,最後都會在UserControl(使用者控制項)載入頁面時,自動被附加到ScriptManage的scripts屬性……

October 06

VISTA開發ASP.NET 3.5無法"在瀏覽器中檢視"

    這幾天因為某些原因把我筆電的作業系統從SERVER 2003 OS改成VISTA OS,然後再安裝VISUAL STUDIO 2008和SQL SERVER 2005 DEVELOPER的開發環境,也安裝了Virtual PC 2007,掛載了SERVER 2003、VISTA、XP OS後,花了好多時間,今天總算整個安裝完也更新相關的SERVICE PACK,在很開心的情況下,用STUDIO .NET 2008把之前的ASP.NET WEB SITE的專案打開,然後在DISIGN PAGE去執行"在瀏覽器中檢視"卻出現了以下畫面

WepViewErr

    我就去找尋很多方式以及google搜尋相關網頁,卻找不到相關資源,可是我整個環境都是最乾淨的卻一直出現這個問題,於是我就自己開始try了,我把http://localhost:2410/FirstAjax/Default.aspx改成http://127.0.0.1:2410/FirstAjax/Default.aspx卻可以正常檢視畫面,還好以前我對網路和系統還算熟悉,開始從NETBIOS名稱解析的過程去尋找問題,去找了VISTA的hosts檔案(C:\Windows\System32\drivers\etc下),打開後發現檔案的內容多了一行解析

HostCanas
所以我把 ::1 localhost 註解後存檔就可以順利檢視程式畫面了(前提您需要有可以修改此檔案的權限--步驟我先省略掉,如果有需要詳細過程,可以聯繫我,我很樂意提供解決的方式)
HostCanas_OK

程式瀏覽檢視的結果
ViewOK

September 29

重新出發

      OneNet魔力小子,重新定位生涯規劃,重新開放部落格(BLOG),專屬的部落格網址為:http://blog.netqna.com/
也更加積極參予http://www.dotblogs.com.tw/ 相關系列團隊 1.ASP.NET 團隊  2.資料庫應用團隊  3. Silverlight 開發團隊(0/18) ,
點部落格的文章網址為http://www.dotblogs.com.tw/netqna/,而我的專屬信箱為 allen@netqna.com ...將來此部落格將盡量會多技術文章方向邁進...

 

June 09

Linux雷聲大雨點小 微軟、Symbian無須擔心

6月8日消息,微軟和諾基亞的官員表示,谷歌和其它機構在手機產業推廣開放源代碼軟件的計劃並不新鮮,不會造成太大的影響。

據國外媒體報道稱,谷歌正在大力推廣其基於Linux的Android手機平台,並已經得到了業界30多家大公司的支持。

Linux可能會改變手機產業的遊戲規則,因為它可能削弱手機運營商對它們支持的應用軟件的控制力度。它還使手機廠商和第三方應用軟件開發商在市場方向和流行趨勢方面有更大的話語權。微軟和Symbian可能會失去許可收入。

但是,這些情況還需要很長的時間才會發生。Symbian北美區總經理傑瑞·潘納格羅西說,我們對此並不感到擔心。

市場調研廠商Canalys表示,適用於智能手機的Linux操作系統存在已經好多年了,但只獲得了5%的市場份額。Symbian擁有65%的智能手機市場份額。Symbian是一家合資企業,諾基亞是最大的股東,其它股東還包括索尼愛立信、松下、三星、西門子;微軟Windows Mobile的市場份額為13%,其次是RIM的10%、蘋果的7%。

但是,谷歌今年公佈Android使Linux獲得了很大的支持。Verizon Wireless上個月宣佈支持LiMo,也必將有力地推動Linux在智能手機市場上的發展。

潘納格羅西將目前的手機產業與10年前的PC產業進行了比較。他說,當時人們認為Linux將超越Windows,但許多Linux解決方案提供商或者倒閉,或者被廉價收購了。

觀察人士表示,目前市場上約有40種不同的手機操作系統。業界官員稱這太多了,預計將最終減少到幾種。潘納格羅西說,手機市場將經歷一個大浪淘沙的過程,手機產業的平台數量過多了,它們不可能都能存活下去。

但潘納格羅西指出,Linux不會使這種情況得到改變。他說,日本手機運營商在2000年開始提供無線寬帶服務,它當時只支持兩種平台══Symbian和一個Linux版本,但Symbian獲得了70%的市場份額。潘納格羅西指出,「我們預計美國也會上演類似的一幕。」

微軟的Windows Mobile產品經理斯科特·洛克菲爾德也持相似的觀點。他說,Linux聯盟的數量甚至超過Linux手機。

Linux手機平台的支持者表示,Linux平台的吸引力在於應用軟件能夠在不同的手機和網絡上運行。但洛克菲爾德表示,實際情況並非如此,手機廠商和運營商會根據自己的需要對Linux進行調整,這就降低了兼容性,從而影響Linux的增長。洛克菲爾德稱,「我們沒有必要對Linux憂心忡忡。」

June 06

Silverlight 2 Beta 2功能透露 WPF框架兼容性增強

       國外開發者博客(BLOG)消息,根據在Tech Ed大會上的公告,Silverlight 2的第二個測試版本將會在未來的一周內發佈,這個時間剛好與MIX08大會上透露的信息一致(Beta 1 版本發佈的一個季度後新測試版就能與大家見面,剛好是這周)。

Silverlight 2 Beta 2將會增加很多新功能,開發者透露了其中一些非常有趣的新細節。

‧    跨域訪問到Socket網絡支持的改進,Beta 2 改進了跨域名支持和安全性,WebClient 的上傳支持。

‧    WCF雙向通信。有開發者已經研究了這個特性,不僅僅將它應用在chat-type 程序開發上,驅動將通信機制轉移到業務應用上。

‧    TextWrapping in textbox

‧    專門的Tap控制器。很多應用程序將會用到這個功能,對內置控件是個很好的補充。

‧    Deep Zoom - Beta 2 引入了一種新的基於 XML 的文件格式的 Deep Zoom 圖片功能。

‧    大幅改善的WPF兼容性。新版本對WPF界面框架的支持是眾多開發者喜歡Silverlight的重要原因之一。即使用戶的 操作系統中並沒有安裝.NET框架,但只要安裝了大小為4MB左右的Silverlight 2 Beta1(或Beta 2)安裝包後,就可以成功運行使用.NET開發的Silverlight應用程序。Silverlight 2中的WPF UI框架與.NET基礎類庫均分別是WPF與.NET基礎類庫的一個兼容的子集,因此開發人員可以輕鬆地將Silverlight應用程序轉換成桌面. NET應用程序。這對於廣大開發者來說是一個重要賣點:一個團隊,兩個平台,一種主流技術的整合開發。

此外,Silverlight 2的新測試版本還會加強對可視化開發管理的控制,在LINQ to JSON,ADO.NET數據服務功能也會重大更新。新技術將會在北京奧運會和DNC網上在線直播中採用到。


隨同Silverlight 2 Beta 2同時發佈的還有Expression Blend 2.5和新版本的Deep Zoom Composer。這是個值得期待的夏天,更多的新功能將會逐漸與大家見面。

以上信息編譯自開發者博客,細節尚未證實,更多信息,請參閱微軟的官方說明。
May 28

我竟然眼淚掉下來

      我回來台南故鄉也休息了一陣子,這陣子短暫的休息,讓自己平靜了許多,也更體會一點,不是衝得快就代表成功的機率較高,而是看誰有耐心有毅力也就是誰"續航力"較持久,因為深深的體會到需要"平衡才能夠走的長久",每件事情真的有很多角度與廣度...這個也在資深資訊前輩的部落格感觸很深切,引用近來體會很深的一個廣告....尤其是看完資訊資深前輩董大師的部落格後.........
 
New Mondeo 最新 TVCF 搶先看- 工作篇
   
    在故鄉休息這段時間,不外乎就是看英文、研究程式,手機幾乎完全不想接,誰都不想見,不是我封閉,而是我只想好好陪我的家人,我幾乎把所有時間是完全用在陪陪最親愛的家人,對工作永遠最認真最負責的老爸按摩,也幫全天下最持家永遠為了家庭不顧一切得付出的媽媽按摩,也靜靜聽聽爸媽對我諄諄的教誨,也能感覺爸媽對我的期許與自責,爸媽我真的好愛您們,請原諒孩兒年輕的不懂事,沒有完成爸爸您以前的期許與盼望,讓您從期望到盼望再到失望但爸媽我已經知道以前的不懂事,我早已很努力很努力的彌補以前的荒廢,我一定會證明已經不是以前惹事生非的壞孩子,我會慢慢去腳踏實地去完成您們對我的期許....隨然我心裡知道您們心裡偷偷高興我成長很多,只是您們不說,但您們不說代表我還有很多要改進,老爸老媽我會記住您們對我的叮嚀,我會開始多做事少說話,學會更穩重的處理事情.....
     今天我睡不著覺,因為我明天要會台北了,繼續努力完成我對自己的重大期許與目標,但睡不著不是因為目標與期許,而是我真的好捨不得您們,您們知道嗎?雖然您們現在正在睡覺,今晚我好多念頭出現,好想不回台北了,但我知道要歷練要成長,我還是得暫離開您們,因為這樣我才學會獨立、學會抗壓、學會待人處事、學會面對挫折,爸媽我真的睡不著,因為我真的好愛您們....您們知道嗎?爸媽有時我真得好期望快點完成我對我自己的期許,雖然媽一直告訴我慢慢來,我知道你很努力,但我真的想達成哪天,親口大聲告訴您們,爸媽您兒子讓您很光榮的....爸媽您們等著..........
May 23

PHP5和SQL Server 2005開發環境

     這幾天有個php程式設計師問我幾個問題,我在此整理主要兩個問題摘要,第一個,如何利用php5跟SQL SERVER2005的環境下,有效率的搭配;第二問題,PHP程式設計人員是否該轉向ASP.NET跑道?
    魔力小子針對第一個問題,先在此示範如何擴充PHP對於SQL SERVER環境的配置與撰寫一個PHP5 & SQL SERVER 2005實例

配置:

可連結至此網站 http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3175669&SiteID=1

步驟一:將php_sqlsrv.dll 或 php_sqlsrv_ts.dll 放到PHP的擴充目錄(PATH)中(PHP\EXT).
步驟二:請您修改php.ini主設定檔,附加以下語法:
extension=php_sqlsrv.dll

extension=php_sqlsrv_ts.dll
最後步驟:請您重新啟動服務

實例PHP語法:

<?php
$dbbase='testlab';
$uid='sa'; //請輸入您自己的帳號
$pwd='sa'; //請輸入您自己的密碼
$connectionInfo=array("Database"=>$dbbase,"UID"=>$uid,"PWD"=>$pwd);
$serverName="OneNetSqlDBServer";
if(!($conn=sqlsrv_connect($serverName,$connectionInfo))){
    
echo "Connection could not be established. ";
    
die(print_r(sqlsrv_errors(),true));
}
$tSQL="SELECT login_mail FROM account";
if(!($stmt=sqlsrv_query($conn,$tSQL))){
    
echo "Error in statement. ";
    
die(print_r(sqlsrv_errors(),true));
}
if(!(sqlsrv_fetch($stmt))){
                    
echo "Error in retrieving row. ";
                    
die(print_r(sqlsrv_errors(),true));
}
$loginmail=sqlsrv_get_field($stmt,1);
echo $loginmail;

sqlsrv_close(
$conn);
?>

---->完工........................................

 

      再來針對第二個問題,這個網頁開發人員的觀點都不同,早期OneNet魔力小子也撰寫PHP4~5一段時間,但在 2001~2002間 微軟 .NET的出現,OneNet積極投入此技術平台中,也幾乎完全沒再繼續撰寫PHP,但不是因為PHP不成熟,而是OneNet我對新技術的渴望與追求,而且一投入後,就深深的愛上這個技術架構,如果要我回答此種問題,我只會給建議,就是如果您時間OK,當然強烈建議您多學一種技術,不論是.NET甚至另外類似的JAVA物件導向架構,畢竟物件程式橫行軟體開發界很長的時間了,但是相對於還有一種人,就是完全專研於PHP程式語法,寫得出神入化,OneNet也看過此種php高手的程式碼,也讓我非常得驚訝,可以把php寫得如此高深,因此還是回歸我以前引述得一片文章,不要在爭論與徘徊哪種比較好以及是否該花時間投入,因為在您爭論與徘徊的時間,您不知道已經學了多少.NET的觀念與技術,也或許您在PHP的領域也往另一個更高的境界了...,也在最後引述以前寫過得一片文章 PHP突出開源優勢要做Windows平台一等公民,也就是不論在LINUX平台(Apache)或微軟平台(IIS)都將更加積極完全支援PHP,不要忘了APACHE佔有率會高,很大因素也歸咎於PHP開發人員.........

 

May 21

C#語法比較時間大小三種技巧

(一)比較時間大小的測試
string st1="12:13";
string st2="14:14";
DateTime dt1=Convert.ToDateTime(st1);
DateTime dt2=Convert.ToDateTime(st2);
DateTime dt3=DateTime.Now;
if(DateTime.Compare(dt1,dt2)>0)
msg.Text=st1+">"+st2;
else
msg.Text=st1+"<"+st2;
msg.Text+="\r\n"+dt1.ToString();
if(DateTime.Compare(dt1,dt3)>0)
msg.Text+="\r\n"+st1+">"+dt3.ToString();
else
msg.Text+="\r\n"+st1+"<"+dt3.ToString();

(二)計算兩個時間差值的函數,傳回時間差的絕對值:
private string DateDiff(DateTime DateTime1,DateTime DateTime2)
{
string dateDiff=null;
try
{
TimeSpan ts1=new TimeSpan(DateTime1.Ticks);
TimeSpan ts2=new TimeSpan(DateTime2.Ticks);
TimeSpan ts=ts1.Subtract(ts2).Duration();
dateDiff=ts.Days.ToString()+"天"
+ts.Hours.ToString()+"小時"
+ts.Minutes.ToString()+"分鐘"
+ts.Seconds.ToString()+"秒";
}
catch
{

}
return dateDiff;
}

(三)執行計算DateTime1-36天=DateTime2的功能

TimeSpan ts=new TimeSpan(40,0,0,0);
DateTime dt2=DateTime.Now.Subtract(ts);
msg.Text=DateTime.Now.ToString()+"-"+ts.Days.ToString()+"天\r\n";
msg.Text+=dt2.ToString();
May 19

Silverlight 2今年發佈,但不能播放Flash 動畫格式

        微軟內部的開發人員shish Thapliyal對外公佈了Silverlight 2 Web平台的最新消息,他確認Silverlight 2即將在今年度發佈,並且還確定它與Adobe的Flash視頻FLV不相容.
       Silverlight 2.0 Beta 1最早對外公佈於MIX08,本季度還將發佈一個Beta2版本,它完全相容1.0版本,使用Silverlight 1.0開發的應用程式可完整地運行在2.0上,微軟對這些版本採取了相當寬鬆的版權策略.
      值得特別注意的是,Silverlight 2.0並不支持Adobe Flash視頻的播放,版權問題是一個方面,另外微軟非常自信到認為找不到什麼理由去支持它.
Silverlight 2.0之後是什麼?是一個移動版本,同時Silverlight 3的計劃也已經出現,但目前尚未公佈任何測試版.

開源版 Silverlight - Moonlight 1.0發佈

Silverlight 是微軟的Web技術開發環境,它基於.NET CLR建構的,它包含2D圖形系統和媒體回收引擎,同時還包含一系列標準.NET類別庫.但開源愛好者正在利用Silverlight建構另一個 "Silverlight Mono"計劃,那就是"Moonlight"(暫定名),它包含Silverlight的絕大多數技術,用於Unix平台,但省略了一部分組件.它對於 Silverlight來說是相對獨立的工程,並支持更多平台的開發.
 
謝謝您的瀏覽!
Please wait...
Sorry, the comment you entered is too long. Please shorten it.
You didn't enter anything. Please try again.
Sorry, we can't add your comment right now. Please try again later.
To add a comment, you need permission from your parent. Ask for permission
Your parent has turned off comments.
Sorry, we can't delete your comment right now. Please try again later.
You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
Complete the security check below to finish leaving your comment.
The characters you type in the security check must match the characters in the picture or audio.