<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9006641</id><updated>2012-01-20T11:17:25.399+05:00</updated><category term='SubSonic'/><category term='LINQ'/><category term='Code Generation'/><category term='Pakistan Developer Conference 2007'/><category term='State Machine Workflow'/><category term='MOSS 2007'/><category term='O/R Mapper'/><category term='Oddcast'/><category term='Workflow Forms'/><category term='ADO.NET Entity Framework'/><category term='Text-to-Speech'/><category term='TTS'/><category term='MOSS'/><category term='Speech'/><category term='DAL'/><category term='SharePoint Designer 2007'/><category term='SitePal'/><title type='text'>core.net</title><subtitle type='html'>.NET, Speech Technologies, and anything technical (including SharePoint)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>73</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9006641.post-7425232731234894137</id><published>2011-10-21T19:43:00.002+05:00</published><updated>2011-10-21T19:48:05.394+05:00</updated><title type='text'>Branding SharePoint</title><content type='html'>&lt;table cellpadding="10" cellspacing="0" style="border: 1px #b5b5b5 solid; border-style: solid; background: #edf0f1"&gt;&lt;br /&gt;    &lt;tr&gt;&lt;br /&gt;        &lt;td&gt;&lt;a target="_blank" href="http://www.inetapakistan.org"&gt;&lt;img src="http://inetapakistan.org/pics/inetaPakistan.png" border="0" alt="INETA Pakistan"/&gt;&lt;/a&gt;&lt;/td&gt;&lt;br /&gt;        &lt;td style="font-family: Verdana; text-align: center"&gt;&lt;br /&gt;         &lt;div style="font-size: 9pt; color: gray; font-weight: bold"&gt;SharePoint Branding&lt;/div&gt;&lt;br /&gt;         &lt;div style="font-size: 8pt"&gt;&lt;a target="_blank" href="http://inetapakistan.org/post/2011/10/15/Branding-MS-SharePoint-2010.aspx"&gt;Branding MS SharePoint 2010&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;   &lt;div style="font-size: 8pt"&gt;&lt;a target="_blank" href="http://inetapakistan.org/post/2010/11/06/Branding-MS-Office-SharePoint-2007.aspx"&gt;Branding MS Office SharePoint 2007&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;        &lt;/td&gt;&lt;br /&gt;    &lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-7425232731234894137?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/7425232731234894137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=7425232731234894137' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/7425232731234894137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/7425232731234894137'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2011/10/branding-sharepoint.html' title='Branding SharePoint'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-8156369792843137862</id><published>2008-07-27T07:03:00.010+06:00</published><updated>2008-07-28T19:55:17.730+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workflow Forms'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS 2007'/><title type='text'>MOSS 2007 Workflow Forms: Everything you ever wanted to know but were afraid to ask (Part I)</title><content type='html'>&lt;b&gt;Background&lt;/b&gt;&lt;br /&gt;What differentiates a workflow from a typical process written in code is the ability of multiple actors (human or otherwise) to interact with the long-running workflow process during the course of execution. This allows the executing process to behave in a manner that external actors want it to, as opposed to just performing a sequence of operations along a single pre-defined path. The rule-of-thumb while choosing between Sequential and State-Machine Workflows is based on a simple premise based on the scenario for which the workflow is being created:&lt;br /&gt;&lt;ul type="square"&gt;&lt;br /&gt;  &lt;li&gt;&lt;strong&gt;Sequential Workflow:&lt;/strong&gt; Use when a pre-defined sequence of activities need to be executed, involving no external input, and the only repetitive activity executions are through loops.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;strong&gt;State-Machine Workflow:&lt;/strong&gt; Use when external actors are involved, causing the workflow to stop and wait for input from the actor. Also use if the same activity needs to be executed multiple times based on a user-input or external event during the course of workflow execution.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #E0EBF5; border: 1px solid #B0CAE5"&gt;&lt;strong&gt;Note:&lt;/strong&gt; You can choose to use a Sequential workflow even when external actor interaction is involved. However, this will not allow you to jump to another activity, other than the one next in the sequence.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Developing a State-Machine workflow in Visual Studio 2005&lt;/strong&gt;&lt;br /&gt;Read the following posts to learn how to develop a state-machine workflow in VS 2005.&lt;br /&gt;&lt;br /&gt;&lt;ul type="square"&gt;&lt;br /&gt;   &lt;li&gt;&lt;a href="https://blogs.pointbridge.com/Blogs/morse_matt/Lists/Posts/Post.aspx?ID=9" target="_blank"&gt;Creating a MOSS state machine workflow - Part 1 of 4 : Concepts and planning&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;&lt;a href="https://blogs.pointbridge.com/Blogs/morse_matt/Lists/Posts/Post.aspx?ID=11" target="_blank"&gt;Creating a MOSS state machine workflow - Part 2 of 4: Creating InfoPath forms&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;&lt;a href="https://blogs.pointbridge.com/Blogs/morse_matt/Lists/Posts/Post.aspx?ID=16" target="_blank"&gt;Creating a MOSS state machine  workflow - Part 3 of 4 : workflow development&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;&lt;a href="https://blogs.pointbridge.com/Blogs/morse_matt/Pages/Post.aspx?_ID=20" target="_blank"&gt;Creating a MOSS State Machine Workflow - Part 4 of 4: Workflow Deployment&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Apart from the workflow code file (*.cs and/or *.xoml), the workflow project should include the following files:&lt;br /&gt;&lt;ul type="square"&gt;&lt;br /&gt;   &lt;li&gt;feature.xml (Contains information about the SharePoint feature)&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;workflow.xml (Specifies the workflow properties for the SharePoint feature)&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;PostBuildActions.bat (A batch file executed as a Post-build event inside Visual Studio that creates a sub-folder in the 'FEATURES' directory under 12 hive [C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE] and copies feature.xml and workflow.xml files into it; also executes the &lt;code&gt;stsadm&lt;/code&gt; command to activate the deployed feature on a SharePoint site)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #E0EBF5; border: 1px solid #B0CAE5"&gt; &lt;strong&gt;Note:&lt;/strong&gt; You can avoid creating the PostBuildActions.bat file if you use &lt;a href="http://codeplex.com/wspbuilder" target="_blank"&gt;WSPBuilder&lt;/a&gt; to generate a SharePoint solution file (*.wsp) and deploy it from within the VS2005 environment.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The life-cycle of a workflow involves the following stages:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;&lt;b&gt;Development:&lt;/b&gt; Visually creating the workflow in VS2005/VS2008 Workflow Designer and writing code for each activity. Also includes creating workflow.xml, feature.xml, and PostBuildActions.bat&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;b&gt;Deployment:&lt;/b&gt; Deploying the workflow to a SharePoint Server farm and activating it either using the PostBuildActions.bat batch file or using &lt;a href="http://codeplex.com/wspbuilder" target="_blank"&gt;WSPBuilder&lt;/a&gt;. In either case, a new folder is created in the FEATURES directory (explained above), the workflow.xml &amp; feature.xml files are copied to it, the workflow assembly (*.dll) is installed into the GAC or copied to the Virtual Directory's bin folder, and the stsadm command is used to activate the feature&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;b&gt;Association:&lt;/b&gt; Attaching the workflow to a list or content type and specifying when a new workflow instance should kick-off; either manually, OR automatically when a new item is created and/or updated.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;b&gt;Execution:&lt;/b&gt;This stage involves the following sub-stages&lt;/li&gt;&lt;br /&gt;  &lt;ul type="square"&gt;&lt;br /&gt;    &lt;li&gt;&lt;b&gt;Initiation:&lt;/b&gt; This is the first stage for any workflow instance, happens ONLY once during the course of execution, and is marked by firing of the OnWorkflowActivated event.&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;b&gt;Passivation or De-hydration:&lt;/b&gt; This is the process of persisting the workflow instance to a datastore so that it can subsequently re-loaded into memory for further execution. Also, passivation or dehydration occurs when the workflow instance wants to wait for an external input or event to execute further.&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;b&gt;Re-hydration:&lt;/b&gt; This stage involves the workflow instance being loaded back into memory by the workflow engine, after a user input is received OR an external event fires.&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;b&gt;Activity Execution:&lt;/b&gt; This is characterized by the workflow engine executing the code in each of the workflow activities in the defined sequence, or transitioning states in case of a state-machine workflow.&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;b&gt;Modification:&lt;/b&gt; This stage is optional, but it allows workflow actors to inject new values into the workflow instance while it is in execution to alter its behavior. This also entails that the workflow has the logic built into it to process the new values.&lt;/li&gt;&lt;br /&gt;  &lt;/ul&gt;&lt;br /&gt;  &lt;li&gt;&lt;b&gt;Completion:&lt;/b&gt; The competion stage is marked by the workflow instance completing execution successfully, and the status being written to the data store.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;b&gt;Termination:&lt;/b&gt; This stage refers to the workflow instance stopping abruptly due to an internal error, or an actor explicitly ending the workflow instance. Any data written to the list by the workflow instance is NOT rolled-back if the workflow is terminated. Terminated workflows cannot be restarted again.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Having got the above off my chest, lets delve into how users (workflow actors) interact with the workflow.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Workflow Forms&lt;/b&gt;&lt;br /&gt;Workflows Forms (as the name implies) are typical forms that allow user input to be communicated to the workflow. In addition, workflow forms also allow data within the workflow to be presented to the actor so that they can take appropriate action. The 4 types of workflow forms that can be created are:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;&lt;b&gt;Association Forms:&lt;/b&gt; Displayed to the user at the time the workflow is being associated to a list or content type to allow user to enter any additional values that can be used in the workflow association process.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;b&gt;Initiation Forms:&lt;/b&gt; When the users initiates a workflow instance, the Initiation Form is displayed to allow entry of additional parameter values that the workflow instance can process during execution.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;b&gt;Modification Forms:&lt;/b&gt; Modofication forms are displayed either when the workflow instance encounters the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflowactions.enableworkflowmodification.aspx" target="_blank"&gt;EnableWorkflowModification&lt;/a&gt; activity, OR the user clicks the Modification link on the workflow status page.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;b&gt;Task Forms:&lt;/b&gt; During execution, a workflow creates tasks in the Tasks List that tell the user what they need to do, and in most cases, move the workflow forward when a task is marked as complete. From the users' perspective, tasks enable them to know where the workflow stands, and what needs to be done to get to the next process in the flow sequence.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;In my next post, I will cover how to develop each of the Workflow forms in a state-machine workflow using both ASP.NET and Microsoft InfoPath 2007.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-8156369792843137862?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/8156369792843137862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=8156369792843137862' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/8156369792843137862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/8156369792843137862'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2008/07/moss-2007-workflow-forms-everything-you.html' title='MOSS 2007 Workflow Forms: Everything you ever wanted to know but were afraid to ask (Part I)'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-9188426566608195734</id><published>2008-04-14T06:45:00.002+05:00</published><updated>2008-04-14T06:56:19.045+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint Designer 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='State Machine Workflow'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS 2007'/><title type='text'>Creating State Machine Workflows using SharePoint Designer 2007: Addendum</title><content type='html'>In my &lt;a href="http://coredotnet.blogspot.com/2008/03/creating-state-machine-workflows-using.html"&gt;previous post&lt;/a&gt;, I gave an overview of how to mimic State Machine behavior using sequential workflows developed in SharePoint Designer (SPD) 2007. This post is actually a walk-thru of the development process in SPD 2007.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Create Lists&lt;/u&gt;&lt;br /&gt;Create the following 2 lists (See description in previous post cited above):&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Core.NET Content (Document Library)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Core.NET Approval Workflows (Custom List with following columns)&lt;/li&gt;&lt;br /&gt;  &lt;ul&gt;&lt;br /&gt;&lt;br /&gt;    &lt;li&gt;Title: Single line of text&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;File URL: Hyperlink or Picture&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;li&gt;Workflow Status: Choice (with following choice values)&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;Content Analyst: User&lt;/li&gt;&lt;br /&gt;    &lt;ol&gt;&lt;br /&gt;      &lt;li&gt;Awaiting Approval&lt;/li&gt;&lt;br /&gt;      &lt;li&gt;Pending Analysis &amp; Review&lt;/li&gt;&lt;br /&gt;      &lt;li&gt;Awaiting Approval&lt;/li&gt;&lt;br /&gt;      &lt;li&gt;Approved&lt;/li&gt;&lt;br /&gt;    &lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;  &lt;/ul&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Create 'Approval Initiation Workflow' on the 'Core.NET Content' list&lt;/u&gt;&lt;br /&gt;Open an instance of SharePoint Designer 2007 on your machine. Go to &lt;b&gt;File &gt; Open Site...&lt;/b&gt; and enter the URL for the site you created the lists on.&lt;br /&gt;Go to &lt;b&gt;File &gt; New... &gt; Workflow...&lt;/b&gt;, enter &lt;b&gt;Approval Initiation Workflow&lt;/b&gt; as the name of the workflow, and select &lt;b&gt;Core.NET Content&lt;/b&gt; from the drop down list. Make sure that only the second checkbox (Automatically start this workflow when a new item is created) is checked, and click &lt;b&gt;Next&lt;/b&gt;&lt;br /&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_BTxLg4n6gwo/SAKyLE8qCiI/AAAAAAAAACw/_g_hbW1r2hU/s1600-h/spd01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_BTxLg4n6gwo/SAKyLE8qCiI/AAAAAAAAACw/_g_hbW1r2hU/s320/spd01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5188905624060693026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Create workflow action to insert an item into the second list&lt;/u&gt;&lt;br /&gt;Enter &lt;b&gt;Initiate Approval process for uploaded content&lt;/b&gt; as the Step Name. Click the &lt;b&gt;Actions&lt;/b&gt; dropdown button and select &lt;b&gt;Create List Item&lt;/b&gt;&lt;br /&gt; from the dropdown. Click the &lt;b&gt;this list&lt;/b&gt; link on the action, select the &lt;b&gt;Core.NET Approval Workflows&lt;/b&gt; list from the drop down at the top of the 'Create New List Item' dialog, and specify the values for each of the columns as shown below:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;Title = Core.NET Content:Name&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;File URL = Core.NET Content:URL Path&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Workflow Status = Awaiting Assignment&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Click the &lt;b&gt;Finish&lt;/b&gt; button to publish the workflow.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_BTxLg4n6gwo/SAKykk8qCjI/AAAAAAAAAC4/M98oawO9h20/s1600-h/spd02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_BTxLg4n6gwo/SAKykk8qCjI/AAAAAAAAAC4/M98oawO9h20/s320/spd02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5188906062147357234" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The above step simply takes values from the document library (Core.NET Content) and inserts into the &lt;b&gt;Core.NET Approval Workflows&lt;/b&gt; list. We now turn our focus to the other list, and the second workflow.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Create 'Approval Process Workflow' on the 'Core.NET Approval Workflows' list&lt;/u&gt;&lt;br /&gt;Create the workflow as below; enter &lt;b&gt;Approval Process Workflow&lt;/b&gt; as the name of the workflow, and select 'Core.NET Approval Workflows' list from the drop-down. Make usre that the last 2 checkboxes (Automatically start this workflow when a new item is created + Automatically start this workflow whenever an item is changed) are checked.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Create Variables for the workflow&lt;/u&gt;&lt;br /&gt;Click the &lt;b&gt;Variables...&lt;/b&gt; button in the Workflow Designer window, and create variables as below:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_BTxLg4n6gwo/SAKyrk8qCkI/AAAAAAAAADA/bx1ZMnZQB3c/s1600-h/spd03.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_BTxLg4n6gwo/SAKyrk8qCkI/AAAAAAAAADA/bx1ZMnZQB3c/s320/spd03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5188906182406441538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The 'Approval Process Workflow' will consist of the following 3 steps:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;Get Workflow Data&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Process Workflow Status&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Process Approval/Rejection by Manager&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Update Workflow Status&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;u&gt;Note:&lt;/u&gt; By updating the list in the very last step, the subsequent instance of the workflow (started on item update) can kick off immediately. If the current workflow updates the list while it still has some more activities to perform, the second workflow fails.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;An explanation of each of the step follows:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Step 0: Terminate Workflow if already approved&lt;/u&gt;&lt;br /&gt;This step is optional, hence I did not include it in the above list of steps. It simply checks to see if the item has already been approved, and if it is, terminates the workflow using the &lt;b&gt;Stop Workflow&lt;/b&gt; activity.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_BTxLg4n6gwo/SAKz608qClI/AAAAAAAAADI/3qSxgCx1Hls/s1600-h/spd04.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_BTxLg4n6gwo/SAKz608qClI/AAAAAAAAADI/3qSxgCx1Hls/s320/spd04.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5188907543911074386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Step 1: Get Workflow Data&lt;/u&gt;&lt;br /&gt;This step simply intializes the values of the variables and comprises the following 2 steps:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Set the &lt;b&gt;ContentAnalyst&lt;/b&gt; variable to the value of the &lt;b&gt;Content Analyst&lt;/b&gt; column in the Current item. (This value will be empty when the first instance executes)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Initialize the &lt;b&gt;UpdateStatus&lt;/b&gt; variable to 'No'.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_BTxLg4n6gwo/SAK0ME8qCmI/AAAAAAAAADQ/OX0rzN7V0mo/s1600-h/spd05.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_BTxLg4n6gwo/SAK0ME8qCmI/AAAAAAAAADQ/OX0rzN7V0mo/s320/spd05.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5188907840263817826" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Step 2: Process Workflow Status&lt;/u&gt;&lt;br /&gt;This step relies on IF condition activities to process the workflow according to the Workflow Status for that particular instance of the workflow. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_BTxLg4n6gwo/SAK0Wk8qCnI/AAAAAAAAADY/Pu77m-8KbH8/s1600-h/spd06.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_BTxLg4n6gwo/SAK0Wk8qCnI/AAAAAAAAADY/Pu77m-8KbH8/s320/spd06.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5188908020652444274" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Refer to the diagram above; starting from the top&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;The first time the workflow executes, the status is set to &lt;b&gt;Awaiting Assignment&lt;/b&gt;, causing ONLY the Actions for the first Condition to execute. The action themselves are pretty straight-forward and self-explanatory.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;The second condition (where status equals 'Pending Analysis &amp; Review') may be true a number of times, depending on the number of times the manager rejects the document.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;br /&gt;Just like the second condition, this may be true multiple times depending on the number of times the workflow was submitted to the manager for approval.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Alternatively, you can also add a condition here to check if the workflow status is set if 'Approved', and terminate the workflow (as shown below).&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_BTxLg4n6gwo/SAK08k8qCoI/AAAAAAAAADg/Jw-tS-RLuzc/s1600-h/spd07.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_BTxLg4n6gwo/SAK08k8qCoI/AAAAAAAAADg/Jw-tS-RLuzc/s320/spd07.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5188908673487473282" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Note: You can get the user input for a 'Collect Data from a User' action by simply referencing the column of the Tasks list named after that specific input you specified in the 'Custom Task Wizard' dialog.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_BTxLg4n6gwo/SAK1Sk8qCpI/AAAAAAAAADo/SySy0ROsFbI/s1600-h/spd08.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_BTxLg4n6gwo/SAK1Sk8qCpI/AAAAAAAAADo/SySy0ROsFbI/s320/spd08.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5188909051444595346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Step 3: Process Approval/Rejection by Manager&lt;/u&gt;&lt;br /&gt;This step was included since its not possible to have a nested IF statement in the Actions sections of a step. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_BTxLg4n6gwo/SAK1S08qCqI/AAAAAAAAADw/mMY_l2oZ9Ek/s1600-h/spd09.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_BTxLg4n6gwo/SAK1S08qCqI/AAAAAAAAADw/mMY_l2oZ9Ek/s320/spd09.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5188909055739562658" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Either one of the conditions can only be true if and only if the workflow status is &lt;b&gt;Awaiting Approval&lt;/b&gt;. If the Manager APPROVED the document, the &lt;b&gt;NewStatus&lt;/b&gt; variable is set to Approved, if the Manager REJECTED the content document, the &lt;b&gt;NewStatus&lt;/b&gt; variable is set to &lt;b&gt;Pending Analysis &amp; Review&lt;/b&gt;, sending the workflow back to the Analyst specified by the Repository Manager.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Step 4: Update Workflow Status&lt;/u&gt;&lt;br /&gt;This step MUST execute at the very end, to allow the successful termination of the current workflow instance and initiation of the subsequent workflow instance. Also, the &lt;b&gt;UpdateStatus&lt;/b&gt; variable was explicitly set to 'No' at the very start of the workflow instance, and unless a step hasn't set it to 'Yes', the update action in this step will not execute. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_BTxLg4n6gwo/SAK1TE8qCrI/AAAAAAAAAD4/pssemcr9kzA/s1600-h/spd10.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_BTxLg4n6gwo/SAK1TE8qCrI/AAAAAAAAAD4/pssemcr9kzA/s320/spd10.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5188909060034529970" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This step updates the 'Workflow Status' column&lt;br /&gt; to the value in the &lt;b&gt;NewStatus&lt;/b&gt; variable, and the 'Content Analyst' column to the value in the &lt;b&gt;ContentAnalyst&lt;/b&gt; variable (shown below).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_BTxLg4n6gwo/SAK1TU8qCsI/AAAAAAAAAEA/AZx1za1Vykw/s1600-h/spd11.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_BTxLg4n6gwo/SAK1TU8qCsI/AAAAAAAAAEA/AZx1za1Vykw/s320/spd11.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5188909064329497282" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-9188426566608195734?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/9188426566608195734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=9188426566608195734' title='31 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/9188426566608195734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/9188426566608195734'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2008/04/creating-state-machine-workflows-using.html' title='Creating State Machine Workflows using SharePoint Designer 2007: Addendum'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_BTxLg4n6gwo/SAKyLE8qCiI/AAAAAAAAACw/_g_hbW1r2hU/s72-c/spd01.jpg' height='72' width='72'/><thr:total>31</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-3034087381027785530</id><published>2008-03-31T06:57:00.005+05:00</published><updated>2008-04-20T10:02:17.712+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint Designer 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='State Machine Workflow'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><title type='text'>Creating State Machine Workflows using SharePoint Designer 2007</title><content type='html'>NOTE: This is a workaround to mimic state-machine behavior from a sequential workflow developed using SharePoint Designer 2007.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;To get up to speed with developing SharePoint workflows using Visual Studio 2005, watch the &lt;a href="http://www.sheltonblog.com/archive/2007/11/04/series-of-sharepoint-workflow-how-to-videos.aspx"&gt;HOWTO: Series of SharePoint Workflow HOW-TO Videos&lt;/a&gt; by &lt;a href="http://www.sheltonblog.com"&gt;Robert Shelton&lt;/a&gt;.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Sequential workflows are fairly straight forward to create whether you are developing in Visual Studio (VS) or SharePoint Designer (SPD) 2007 and can be used to model most single or multi-step approval workflows. The only downside to Sequential workflows is that you cannot make the workflow jump back to a previous step/activity that may or may not have already executed or, in other words, cannot move from being in one state to the other like a state machine workflow. For most workflow developers/creators, this is reason enough to go for workflow development in VS. While VS worksflows work just the same as those develped using SPD 2007, keep in mind that SPD 2007 is more suited for managers and/or business analysts (non-developers) who may be reluctant to assign workflow development task because of time, resource, and budgetary constraints. This is where the following intuitive solution may come in handy. Lets look at a hypothetical scenario in detail.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Scenario:&lt;/u&gt;&lt;br /&gt;A technical document needs to be analyzed, revised (if need be), and approved to exist in the repository.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Actors:&lt;/u&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Repository Managers&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Content Analysts&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Managers&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="text-align:center" src="http://3.bp.blogspot.com/_BTxLg4n6gwo/R_AMQhi-v_I/AAAAAAAAACg/bnp7l-20dbg/s1600/StateMachineWF.jpg" border="0" alt="Approval State Machine Workflow" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Workflow (see state-machine diagram above):&lt;/u&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;Document Uploaded to MOSS 2007 Document Library. [Document Status updated to &lt;b&gt;Awaiting Assignment&lt;/b&gt;]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Repository Manager assigns document to &lt;b&gt;Content Analyst&lt;/b&gt;. [Document Status updated to &lt;b&gt;Pending Analysis &amp; Review&lt;/b&gt;]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Analyst views documents, makes required changes, and submits document to &lt;b&gt;Manager&lt;/b&gt; for approval. [Document Status updated to &lt;b&gt;Awaiting Approval&lt;/b&gt;]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;If &lt;b&gt;Manager&lt;/b&gt; rejects document, document routed to &lt;b&gt;Content Analyst&lt;/b&gt;. [Document Status updated to &lt;b&gt;Pending Analysis &amp; Review&lt;/b&gt;]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;If &lt;b&gt;Manager&lt;/b&gt; approves document, it is kept in the document library. [Document Status updated to &lt;b&gt;Approved&lt;/b&gt;]&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;The above workflow is pretty straight-forward, and could easily have been created using SharePoint Designer if it were not for step 4, which can happen any number of times until the document gets approved by the Manager. To create a State Machine behavior in a SPD 2007 workflow, create a separate list (say &lt;b&gt;"Content Approval Workflows"&lt;/b&gt;) to maintain the state of the workflow at any given point in time. A separate list also ensures that the user cannot go and manually change the status. Also, 2 workflows would need to be created; one on the actual document library (called &lt;b&gt;"Core.NET Content"&lt;/b&gt;) that houses the uploaded documents, and the other on the &lt;b&gt;Content Approval Workflows&lt;/b&gt; list. The 2 lists we are working with are summarized below:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Core.NET Content&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;List Type: Document Library&lt;br /&gt;Workflow Name: Approval Initiation Workflow&lt;br /&gt;Workflow Executed: On Item creation&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Core.NET Approval Workflows&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;List Type: Custom List&lt;br /&gt;Workflow Name: Approval Processing Workflow&lt;br /&gt;Workflow Executed: On Item creation&lt;br /&gt;; On Item update&lt;br /&gt;&lt;br /&gt;Columns: Title, Document Status (Choice Column with each of the workflow states), WorkflowInstance Id (Lookup column that references ID column in the &lt;b&gt;Core.NET Content&lt;/b&gt; document library)&lt;br /&gt;&lt;br /&gt;To get an even better idea, take a look at the following diagram.&lt;br /&gt;&lt;br /&gt;&lt;img style="text-align:center" src="http://4.bp.blogspot.com/_BTxLg4n6gwo/R_AMVxi-wAI/AAAAAAAAACo/5lw24YlAU5Q/s1600/WorkflowLists.jpg" border="0" alt="Workflow Lists" /&gt;&lt;br /&gt;&lt;br /&gt;The steps modeled in the diagram above are:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;Document uploaded to &lt;b&gt;Core.NET Content&lt;/b&gt; Document Library.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Item creation in &lt;b&gt;Core.NET Content&lt;/b&gt; Document Library kicks off &lt;b&gt;Approval Initiation Workflow&lt;/b&gt; which creates an item in the &lt;b&gt;Content Approval Workflows&lt;/b&gt; list (with the &lt;b&gt;Document Status&lt;/b&gt; value set to "Awaiting Assignment") and completes.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Creation of item in &lt;b&gt;Content Approval Workflows&lt;/b&gt; list kicks off the &lt;b&gt;Approval Processing Workflow&lt;/b&gt; that performs the following operations recursively i.e. completion of every step below updates the &lt;b&gt;Document Status&lt;/b&gt; column value and in-turn starts another &lt;b&gt;Approval Processing Workflow&lt;/b&gt; instance on the same item.&lt;/li&gt;&lt;br /&gt;  &lt;ol&gt;&lt;br /&gt;    &lt;li&gt;Start on item creation - If &lt;b&gt;Document Status&lt;/b&gt; is "Awaiting Assignment", create a task in the Tasks list for &lt;b&gt;Repository Managers&lt;/b&gt;, using the "Collect Feedback from user" activity, assign the task to the username entered in the task, and set the &lt;b&gt;Document Status&lt;/b&gt; value to "Pending Analysis &amp; Review".&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;Start on item update - If &lt;b&gt;Document Status&lt;/b&gt; is "Pending Analysis &amp; Review", create a task in the Tasks list for the user in the &lt;b&gt;Content Analysts&lt;/b&gt; group who was assigned the Analysis &amp; Review task in the preceding step, using the "Collect Feedback from user" activity, and set the &lt;b&gt;Document Status&lt;/b&gt; value to "Awaiting Approval" when the user clicks the "Complete Task" button.&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;Start on item update - If &lt;b&gt;Document Status&lt;/b&gt; is "Awaiting Approval", create an approval task in the Tasks list for &lt;b&gt;Managers&lt;/b&gt; using the "Collect Feedback from user" activity, to either approve or reject the document. If Manager approves the document, set the &lt;b&gt;Document Status&lt;/b&gt; value to "Approved", else set the &lt;b&gt;Document Status&lt;/b&gt; value to "Pending Review &amp; Analysis" which re-starts the workflow from step 3-2.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;/ol&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Note: The IF condition on every step ensures that the workflow takes only one path depending on the value for &lt;b&gt;Document Status&lt;/b&gt;. Also, using the "Collect Feedback" activity in SPD 2007 ensures that the workflow stay in the wait state until the actor specifies the required input, and clicks the "Complete Task" button.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;[UPDATE: Read the process of creating the State-machine workflow using SharePoint Designer 2007 in the following post &lt;a href="http://coredotnet.blogspot.com/2008/04/creating-state-machine-workflows-using.html"&gt;here&lt;/a&gt;]&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-3034087381027785530?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/3034087381027785530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=3034087381027785530' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/3034087381027785530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/3034087381027785530'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2008/03/creating-state-machine-workflows-using.html' title='Creating State Machine Workflows using SharePoint Designer 2007'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_BTxLg4n6gwo/R_AMQhi-v_I/AAAAAAAAACg/bnp7l-20dbg/s72-c/StateMachineWF.jpg' height='72' width='72'/><thr:total>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-870771640247872788</id><published>2007-05-13T09:34:00.000+05:00</published><updated>2007-05-13T09:45:02.719+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pakistan Developer Conference 2007'/><title type='text'>Pakistan Developer Conference 2007</title><content type='html'>With physical presence at Lahore and Islamabad in addition to Karachi, the &lt;a href="http://www.microsoft.com/pakistan/conference" target="_blank"&gt;Pakistan Developer Conference 2007&lt;/a&gt; would be the biggest annual developer event in the country.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_BTxLg4n6gwo/RkaWl8iqV0I/AAAAAAAAAAw/hwtvR3TJI0A/s1600-h/PDC2007_Ad.jpg" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_BTxLg4n6gwo/RkaWl8iqV0I/AAAAAAAAAAw/hwtvR3TJI0A/s320/PDC2007_Ad.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5063900409675536194" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Register now!&lt;/strong&gt; I hope to see you there in Lahore and Karachi.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-870771640247872788?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/870771640247872788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=870771640247872788' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/870771640247872788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/870771640247872788'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2007/05/pakistan-developer-conference-2007.html' title='Pakistan Developer Conference 2007'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_BTxLg4n6gwo/RkaWl8iqV0I/AAAAAAAAAAw/hwtvR3TJI0A/s72-c/PDC2007_Ad.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-7863391849995745804</id><published>2007-04-01T23:35:00.000+05:00</published><updated>2007-04-02T00:33:39.932+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SitePal'/><category scheme='http://www.blogger.com/atom/ns#' term='TTS'/><category scheme='http://www.blogger.com/atom/ns#' term='Text-to-Speech'/><category scheme='http://www.blogger.com/atom/ns#' term='Oddcast'/><category scheme='http://www.blogger.com/atom/ns#' term='Speech'/><title type='text'>A Pal for Web 2.0</title><content type='html'>I &lt;a href="http://coredotnet.blogspot.com/2005/02/taking-tts-to-new-level.html"&gt;blogged&lt;/a&gt; about &lt;a href="http://www.sitepal.com"&gt;SitePal&lt;/a&gt; a long time ago. I am blogging about it again, since I now have a demo account. This post is more of a strategy guide than a technology roadmap. If you have a Flash player installed (or you are reading this post while the demo account is still valid and active), you will be able to see (and hear) it on the right sidebar of my blog.&lt;br /&gt;&lt;br /&gt;The technology news coming out of the World Economic Forum that concluded in Davos, Switzerland not very long ago, was abuzz with talk of &lt;a href="http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html"&gt;Web 2.0&lt;/a&gt;. The essence of Web 2.0 are Rich Internet Applications that give users not only a rich user experience, but which may in fact comprise of data and services from many other 3rd party websites and online resouces. &lt;br /&gt;&lt;br /&gt;In the Web 2.0 world, businesses increasingly have to rely on setting themselves apart through a mixture of content and design to ensure a continued audience and user-base. While the SitePal you see on the right is just a small demonstration of what websites can achieve using this technology, a SitePal can achieve a lot more for your online service than just playing a welcome message. Apart from its obvious usage on Social Networking sites, a SitePal can be leveraged in teaching students online, and for assisting users on insurance, healthcare, or recruitment wesbites. Imagine a website where students learn chemistry from &lt;a href="http://en.wikipedia.org/wiki/Harry_Potter"&gt;Harry Potter&lt;/a&gt;, physics from &lt;a href="http://en.wikipedia.org/wiki/Dexters_laboratory"&gt;Dexter&lt;/a&gt;, and computer programming from &lt;a href="http://en.wikipedia.org/wiki/Jimmy_Neutron"&gt;Jimmy Neutron&lt;/a&gt;; OR in a completely different scenario, allowing senior citizens to hear about diabetes, cancer, and health insurance benefits from a doctor SitePal, without having to read long text from a website or printed brochure.&lt;br /&gt;&lt;br /&gt;The process of creating a SitePal character is pretty straight forward too. The &lt;a href="http://www.sitepal.com/TutorialMovie/"&gt;tutorial movie&lt;/a&gt; on the SitePal website provides an easy-to-follow walk-thru of setting up and hosting a SitePal character. An existing SitePal character can be modified literally within seconds. I modified the current SitePal character on this blog within minutes, and amazingly, she looked completely different (see picture below). [Since I am very fond of blondes with glasses, I ended up using the previous version].&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://4.bp.blogspot.com/_BTxLg4n6gwo/Rg_74g9E3BI/AAAAAAAAAAo/yo4UDAVMUcg/s1600-h/WndSitePal.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_BTxLg4n6gwo/Rg_74g9E3BI/AAAAAAAAAAo/yo4UDAVMUcg/s200/WndSitePal.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5048530655642967058" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;SitePal is not just limited to webpages. You can also embed a SitePal character into your PowerPoint presentation, taking interactivity to a whole new level.&lt;br /&gt;&lt;br /&gt;Try it out for yourself. Certainly reminds one of &lt;a href="http://www.imdb.com/title/tt0258153/"&gt;S1m0ne (Simone)&lt;/a&gt;, doesn't it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-7863391849995745804?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/7863391849995745804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=7863391849995745804' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/7863391849995745804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/7863391849995745804'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2007/04/pal-for-web-20.html' title='A Pal for Web 2.0'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_BTxLg4n6gwo/Rg_74g9E3BI/AAAAAAAAAAo/yo4UDAVMUcg/s72-c/WndSitePal.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-82402871406719535</id><published>2007-03-19T01:10:00.001+05:00</published><updated>2007-03-19T01:15:08.297+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='O/R Mapper'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Generation'/><category scheme='http://www.blogger.com/atom/ns#' term='SubSonic'/><category scheme='http://www.blogger.com/atom/ns#' term='DAL'/><category scheme='http://www.blogger.com/atom/ns#' term='ADO.NET Entity Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>DAL goes SubSonic</title><content type='html'>&lt;i&gt;Oh boy! I have a lot of things to blog about, mainly posts on "Atlas [now ASP.NET AJAX Extensions] at last" and "MS Speech Application SDK". My reason for staying away from blogging was that I was buried in a project in Pakistan till December 2006, after I came back from the MVP Open Days in Turkey in September. Anyway, I have just shifted to USA, and will try to blog regularly from now on.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;As developers (and architects) come to terms with the changes that would come with &lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx"&gt;LINQ&lt;/a&gt; and the &lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=217633"&gt;ADO.NET Entity Framework&lt;/a&gt;, and the impact it would have on business applications, many existing applications developed or ported to C# 2.0 or VB 8.0 from previous version would never be able to exploit its benefits. Architects and developers working on new software applications or application functionality, however, can make the wise choice of using the &lt;a href="http://msdn2.microsoft.com/en-us/library/aa480534.aspx"&gt;Web Service Software Factory&lt;/a&gt; to generate business entities, and expose them through web services. (more on that coming up in future posts, HOPEFULLY).&lt;br /&gt;&lt;br /&gt;Hardly any developer would want to be bogged down with writing business object classes to represent the entity tables in an enterprise application. The alterative for O/R Mapping, in most cases, is to turn to techniques for code generation, that allow generation of business object code for data access; NHibernate being one of the most popular ones.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codeplex.com/actionpack"&gt;SubSonic&lt;/a&gt; is yet another O/R Mapper or DAL code generator on the horizon, and does not involve using a separate application for code generation. All the developer needs to do to use SubSonic is add a reference to the actionpack.dll file and add some tags to the web.config file, and thats it. Even more amazing is the fact that SubSonic allows developers to swiftly generate web pages for inserting, updating, and deleting records in the table, kind of like the ones used in administration sections of most websites. Check out the &lt;a href="http://www.codeplex.com/actionpack"&gt;SubSonic site&lt;/a&gt; to learn more.&lt;br /&gt;&lt;br /&gt;Without a doubt, code generation can give development teams a head-start, when it comes to rapidly generating business entities as soon as they have a database design in place. However, a fact that is often overlooked in enterprise applications, when there are literally hundreds of tables the code needs to be generated for, is that business entities seem to loose their original meaning, and instead exist only as code stubs for data access logic pertaining to the tables they were created for. The same thing happens if you use strongly typed datasets to represent business entities. &lt;br /&gt;&lt;br /&gt;A good data-access pattern within a good system architecture, would be to have a separate layer between the DAL (mainly stored procs and logic residing on the database), and the business logic layer (which includes business objects). This new layer would comprise the code generated using an O/R Mapper. While developers building a project from scratch, and trying to get it completed in the scheduled time, would very much want to overlook this important aspect, since it would need to done manually without any code generation. I will try to illustrate using an example. A typical "Employee" business entity generated using an O/R Mapper might have methods like &lt;code&gt;Insert()&lt;/code&gt; and &lt;code&gt;Update()&lt;/code&gt; for saving and updating a record in the Employee. For most development teams trying to meet the dealine, this is good enough. However, a great design would create the same &lt;code&gt;Employee&lt;/code&gt; class (in a different namespace) that would have methods like &lt;code&gt;Hire()&lt;/code&gt;, &lt;code&gt;Create()&lt;/code&gt;, &lt;code&gt;ChangeAddress()&lt;/code&gt;, &lt;code&gt;IncrementSalary()&lt;/code&gt; etc. calling the same &lt;code&gt;Insert()&lt;/code&gt; and &lt;code&gt;Update()&lt;/code&gt; methods under the covers. Not only does this make the code far more readable and self-explanatory, but also highly maintainable. The advantage of using this approach becomes even more profound when you are dealing with tables that do not necessarily represent real-life entities, and require methods like &lt;code&gt;Debit()&lt;/code&gt;, &lt;code&gt;Credit&lt;/code&gt;, &lt;code&gt;TakeBack()&lt;/code&gt;, &lt;code&gt;Adjust()&lt;/code&gt;, &lt;code&gt;Reconcile()&lt;/code&gt; etc.&lt;br /&gt;&lt;br /&gt;For now, I would recommend a &lt;a href="http://www.wekeroad.com/actionpackintro.html"&gt;Webcast&lt;/a&gt; that should get you up and running with DAL generation at &lt;b&gt;SubSonic&lt;/b&gt; speeds.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-82402871406719535?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/82402871406719535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=82402871406719535' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/82402871406719535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/82402871406719535'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2007/03/dal-goes-subsonic.html' title='DAL goes SubSonic'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-115760862237796442</id><published>2006-09-07T10:48:00.000+05:00</published><updated>2006-09-07T10:57:02.886+05:00</updated><title type='text'>I dream about Turkey!</title><content type='html'>That's the slogan of the Turkish tourism advertisement I saw on my flight from Istanbul to Antalya, on my way there for the Microsoft MVP Open Days event for MEA (Middleast and Africa) region this week, and let me tell you, &lt;b&gt;I dream about Turkey&lt;/b&gt; from now on too.&lt;br /&gt;&lt;br /&gt;&lt;img style="text-align:center" src="http://photos1.blogger.com/blogger/3715/638/1600/ViewFromHotel.gif" border="0" alt="View from my room at the Marmara Hotel, Antalya" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="text-align:center" src="http://photos1.blogger.com/blogger/3715/638/1600/MVPs.gif" border="0" alt="Better Together" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-115760862237796442?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/115760862237796442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=115760862237796442' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/115760862237796442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/115760862237796442'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/09/i-dream-about-turkey.html' title='I dream about Turkey!'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-115580311311149049</id><published>2006-08-17T13:25:00.000+05:00</published><updated>2006-08-17T13:30:36.176+05:00</updated><title type='text'>Is this COOL or what?</title><content type='html'>&lt;p&gt;This is a test post to check Windows Live Writer. You can get more&amp;nbsp;information &lt;a href="http://windowslivewriter.spaces.live.com/"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-115580311311149049?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/115580311311149049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=115580311311149049' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/115580311311149049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/115580311311149049'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/08/is-this-cool-or-what.html' title='Is this COOL or what?'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-115501645395549200</id><published>2006-08-08T10:36:00.000+05:00</published><updated>2006-08-08T11:05:51.676+05:00</updated><title type='text'>Atlas at last! - Part III</title><content type='html'>Previously: &lt;br /&gt;&lt;a href="http://coredotnet.blogspot.com/2006/06/atlas-at-last-part-ii.html"&gt;Atlas at last Part II: &lt;b&gt;Looking to the road ahead&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://coredotnet.blogspot.com/2006/03/atlas-at-last-part-i.html"&gt;Atlas at last Part I: &lt;b&gt;Getting down and dirty with JavaScript&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Matt Gibbs has written an excellent "Atlas at last" article in the &lt;a href="http://msdn.microsoft.com/msdnmag/issues/06/07/default.aspx"&gt;July 2006 issue&lt;/a&gt; of &lt;a href="http://msdn.microsoft.com/msdnmag/default.aspx"&gt;MSDN Magazine&lt;/a&gt;. Check it out: &lt;a href="http://msdn.microsoft.com/msdnmag/issues/06/07/AtlasAtLast/default.aspx"&gt;Atlas At Last: ASP.NET Atlas Powers the AJAX-Style Sites You’ve Been Waiting For&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So much can change between 2 posts is hard to imagine. For one, WinFX was renamed; now its called .NET 3.0 (combining WPF, WCF, WF, WCS). I touched upon the idea of WPF in the web browser in the &lt;a href="http://coredotnet.blogspot.com/2006/06/atlas-at-last-part-ii.html"&gt;previous Atlas at last post&lt;/a&gt;. An article on MSDN titled &lt;a href="http://msdn.microsoft.com/winfx/default.aspx?pull=/library/en-us/dnlong/html/netfx30.asp"&gt;"Deploying Microsoft .NET Framework Version 3.0"&lt;/a&gt; explains how to detect if .NET 3.0 is installed on a PC from within JavaScript/JScript code running inside a browser. Get ready; we would be seeing sites developed using .NET 3.0, with WPF on the presentation tier, very soon. The keyword to remember is "Smart Client"; browser-based applications lending a rich presentation to a SOA (Service-Oriented Architecture) strategy.&lt;br /&gt;&lt;br /&gt;There's more than one way to skin a cat, or so I heard, and that really depends on what you want to do after you've done it. In the same way, you have a choice to develop with Microsoft "Atlas" using 2 different approaches, depending on the type of project you are building, the development time you have, and/or the amount of responsiveness and richness you want in your web app. The 2 approaches are: Server-Centric and Client-Centric Development. The diagram below provides a glimpse of what these 2 approaches encompass.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos1.blogger.com/blogger/3715/638/1600/AtlasProgrammingModel.gif" align="center" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;Very briefly, the Server-Centric approach primarily involves using Atlas Server Controls to achieve the desired result. This essentially means adding the "UpdatePanel" control, and enclosing all other server controls within it. Control Extenders, as the name implies, allow developes to add DHTML behaviors to existing server or client controls. Although the current online literature on Atlas does not classify the use of Control Extenders as a server-centric approach, it is easy to explain Control Extenders to developers in context of the server-centric approach, mainly because they encapsulate DHTML behaviors, shielding the user from the complexity of the JavaScript code, and are used pretty much like pre-developed ASP.NET server controls.&lt;br /&gt;&lt;br /&gt;The Client-Centric approach relies on client-side script (no surprises there) running inside the web browser to not only achieve most of the things possible with the server-centric approach, but to also create and add rich client-side interactivity within the webpage. Remember, these 2 approaches are not alternatives to each other. A single website, or even a single webpage, can have implementations of both approaches. The next 2 "Atlas at last" posts would look into more detail of both these approaches separately.&lt;br /&gt;&lt;br /&gt;It is incorrect to assume that only the client-centric approach involves scripting. There are no clear guidelines in existence that would mandate the use of one approach instead of the other. Many web/ASP.NET developers who are just getting started with Microsoft "Atlas" would want to go with the UpdatePanel control since it requires the least effort and development time. However, the UpdatePanel might not hold the answer to what you wanted to achieve in the first place. I received a couple of queries from people who wanted to know which approach they should follow for their projects, and my answer was always the same: it depends. Its better to choose the approach for each webpage accordingly instead of making a choice of the approach to follow at the beginning of the project and adhereing to it throughout. Let me elaborate through some scenarios.&lt;br /&gt;&lt;br /&gt;&lt;ul type="square"&gt;&lt;br /&gt;  &lt;li&gt;The webpage comprises of static information.&lt;br/&gt;&lt;b&gt;Recommended approach:&lt;/b&gt; &lt;i&gt;None; Since the data contained in the page does not change, it is pointless to use Atlas in it.&lt;/i&gt;&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;The webpage is used to present dynamic information stored on the server in a database/XML file, and loads inside a particular region of the page depending on the query string value.&lt;br/&gt;&lt;b&gt;Recommended approach:&lt;/b&gt; &lt;i&gt;Server-Centric; The UpdatePanel would only change a portion of the page after a response is received from the server, while static portions of the page like header images, logos, menus etc. would not reload.&lt;/i&gt;&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;The webpage lists information from a database table, and the user should not have to navigate to a different webform page to enter new, or modify existing data from that table.&lt;br/&gt;&lt;b&gt;Recommended approach:&lt;/b&gt; &lt;i&gt;Control Extenders; The 'Modal Popup Control Extender' provides an easy-to-implement mechanism to dislay a webform in a modal popup window, graying-out the rest of the portion of the screen outside the popup window, allowing the user to enter new, or change existing, information; When the modal popup closes, the portion of the page that lists the data from the table refreshes to show the updated information from the server (without a full postback).&lt;/i&gt;&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;The webpage consists of multiple dropdown lists (combo-boxes), and each one after the first dropdown list populates with values based on the value selected in a previous dropdown, like a City dropdown populating everytime for the Country seleted from another dropdown list.&lt;br/&gt;&lt;b&gt;Recommended approach:&lt;/b&gt; &lt;i&gt;Control Extenders; The 'Cascading DropDown Control Extender' allows a  dropdown list to call and web service in response to a selection made into it and populate the next dropdown list in the sequence.&lt;/i&gt;&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;You want to give the user the ability to either enter a new value into a textbox or else select from a list of values already stored in the database.&lt;br/&gt;&lt;b&gt;Recommended approach:&lt;/b&gt; &lt;i&gt;Both Client-Centric and Server-Centric approaches support the Auto-Complete behavior (Also see next point).&lt;/i&gt;&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;You want to give the user the ability to either enter a new value into a textbox or else select from a list of values already stored in the database, based on a selection or preference specified ealier.&lt;br/&gt;&lt;b&gt;Recommended approach:&lt;/b&gt; &lt;i&gt;Client-Centric; Only JavaScript would allow the Auto-complete list to be populated based on a condition, since XML-Script and the AutoComplete Control Extender only attach a web service (hard-code) to an autocomplete list, whereas JavaScript code provides the flexibility to select from a list of web services depending on a condition.&lt;/i&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The above does not (and cannot possibly) cover all the scenarios that Microsoft "Atlas" is designed for. Stick around for more "Atlas at last" posts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-115501645395549200?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/115501645395549200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=115501645395549200' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/115501645395549200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/115501645395549200'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/08/atlas-at-last-part-iii.html' title='Atlas at last! - Part III'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-115311430570664452</id><published>2006-07-17T10:23:00.000+05:00</published><updated>2006-07-17T10:34:42.526+05:00</updated><title type='text'>EID Presentation Upload</title><content type='html'>I apologize for not uploading the "Building Next Generation GUIs using Microsoft Expression Interactive Designer" presentation earlier. I just uploaded it to the &lt;a href="http://groups.yahoo.com/group/coredotnet"&gt;Core.NET Yahoo Group&lt;/a&gt; in the "Files &gt; PDC 2006 Slides and Demos &gt; EID" Folder.&lt;br /&gt;&lt;br /&gt;For samples and application demos, check out these URLs.&lt;br /&gt;&lt;ul type="square"&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/expression"&gt;Microsoft Expression Blog&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/wpfsdk"&gt;WPF SDK Blog&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/tims"&gt;Tim Sneath's Blog&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://wpf.netfx3.com/files/default.aspx"&gt;WPF Samples from the .NET 3.0 community website&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://www.thewpfblog.com"&gt;The WPF Blog&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-115311430570664452?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/115311430570664452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=115311430570664452' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/115311430570664452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/115311430570664452'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/07/eid-presentation-upload.html' title='EID Presentation Upload'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-115177726341118769</id><published>2006-07-01T23:00:00.000+05:00</published><updated>2006-07-01T23:27:46.703+05:00</updated><title type='text'>"Atlas" Presentation Slides and Demo Code</title><content type='html'>&lt;img style="text-align:center" src="http://photos1.blogger.com/blogger/3715/638/1600/pdc06.gif" border="0" alt="Pakistan Developer Conference 2006" /&gt;&lt;br /&gt;&lt;br /&gt;I got an overwhelming response from both of my presentations during the 3-day &lt;a href="http://www.microsoft.com/pakistan/conference"&gt;Pakistan Developer Conference 2006&lt;/a&gt;, or PDC 2006 as we like to call it. I have uploaded my presentation slides and demo code for all applications I demonstrated at &lt;a href="http://groups.yahoo.com/group/coredotnet"&gt;Core.NET's Yahoo! Group account&lt;/a&gt;. Download away!&lt;br /&gt;&lt;br /&gt;The three files pertaining to the presentation uploaded in the "Files &gt; PDC 2006 Slides and Demos &gt; AJAX &amp; Atlas" folder are&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;Atlas_AdnanHashmi.PDF&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;PDC06.Demos.NaukriAtlas.ZIP&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;PDC06.Session.Demos.ZIP&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;* The term 'Naukri' in &lt;a href="http://en.wikipedia.org/wiki/Urdu"&gt;Urdu&lt;/a&gt; means 'Job'. NaukriAtlas.NET is an AJAX-enabled job portal.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-115177726341118769?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/115177726341118769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=115177726341118769' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/115177726341118769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/115177726341118769'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/07/atlas-presentation-slides-and-demo.html' title='&quot;Atlas&quot; Presentation Slides and Demo Code'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-115023418741544627</id><published>2006-06-14T02:13:00.000+05:00</published><updated>2006-06-14T02:45:27.606+05:00</updated><title type='text'>More on .NET 3.0</title><content type='html'>Good to see things getting clearer as Tech Ed 2006 approaches. These two articles provide a good understanding about what .NET 3.0 is all about.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ftponline.com/channels/net/reports/tech-ed/2006/rlhotka/"&gt;Realize New Functionality in .NET 3.0&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ftponline.com/channels/net/reports/tech-ed/2006/bhollissmartclient/"&gt;New Technology Offers Dev Challenges, UI Improvements&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;At a glance, &lt;a href="http://www.netfx3.com/"&gt;.NET 3.0 [http://www.netfx3.com/]&lt;/a&gt; includes&lt;br /&gt;&lt;ul type="square"&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;.NET Framework 2.0&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;ul type="square"&gt;&lt;br /&gt;&lt;li&gt;The 2.0 Common Language Runtime (CLR)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The 2.0 Base Class Library&lt;/li&gt;&lt;br /&gt;&lt;li&gt;ADO.NET 2.0, ASP.NET 2.0, Windows Forms 2.0&lt;/li&gt;&lt;br /&gt;&lt;li&gt;VB 8.0 and C# 2.0&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;WinFX&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;ul type="square"&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://wcf.netfx3.com/"&gt;Windows Communication Foundation (WCF) [http://wcf.netfx3.com/]&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://wpf.netfx3.com/"&gt;Windows Presentation Foundation (WPF) [http://wpf.netfx3.com/]&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://wf.netfx3.com/"&gt;Windows Workflow Foundation (WF) [http://wf.netfx3.com/]&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;InfoCard&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;ul type="square"&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://wcs.netfx3.com/"&gt;Renamed to Windows CardSpace (WCS) [http://wcs.netfx3.com/]&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Interestingly, the &lt;a href="http://blogs.msdn.com/somasegar/archive/2006/06/09/624300.aspx"&gt;announcement made about .NET 3.0&lt;/a&gt; on June 9 by &lt;a href="http://blogs.msdn.com/somasegar/"&gt;Somasegar&lt;/a&gt; on his blog was exactly what I had forecasted and &lt;a href="http://www.pkblogs.com/coredotnet/2006/06/atlas-at-last-part-ii.html"&gt;blogged about&lt;/a&gt; in my post just 3 days prior, and I had absolutely no idea at that time that it would come so soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-115023418741544627?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/115023418741544627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=115023418741544627' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/115023418741544627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/115023418741544627'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/06/more-on-net-30.html' title='More on .NET 3.0'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-114997266401778741</id><published>2006-06-11T01:48:00.000+05:00</published><updated>2006-06-11T01:51:04.226+05:00</updated><title type='text'>.NET: 2 Fast, 3 Furious</title><content type='html'>I am not sure how the &lt;a href="http://blogs.msdn.com/somasegar/archive/2006/06/09/624300.aspx"&gt;decision to rename WinFX (which encompasses WPF, WCF, and WF) to .NET 3.0&lt;/a&gt; will go down with developers who are still in the process of trying to explore, and gradually coming to terms with the changes that new technologies like Atlas and WinFX brought to .NET 2.0. Developers, however, were content, knowing that WinFX was built on top of .NET 2.0 and will be supported for the next decade. This new change, in addition to creating a lot of confusion, will also raise a number of questions; Will existing investments in .NET 2.0 go down the drain soon? Should we wait for the new 3.0 platform to mature before we implement it? Is .NET 2.0 gone?&lt;br /&gt;&lt;br /&gt;Hopefully, Microsoft would move swiftly to allay a lot of fears in the coming days. My best guess is that .NET 2.0 (along with its underlying technologies) would be a subset of .NET 3.0 along with Orcas/C# 3.0, WinFX, and LINQ. For now, I am keeping my fingers crossed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-114997266401778741?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/114997266401778741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=114997266401778741' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114997266401778741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114997266401778741'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/06/net-2-fast-3-furious.html' title='.NET: 2 Fast, 3 Furious'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-114953969853541771</id><published>2006-06-06T01:31:00.000+05:00</published><updated>2006-06-06T01:34:58.943+05:00</updated><title type='text'>Atlas at last! - Part II</title><content type='html'>Previously: &lt;br /&gt;&lt;a href="http://www.pkblogs.com/coredotnet/2006/03/atlas-at-last-part-i.html"&gt;Atlas at last-Part I: &lt;b&gt;Getting down and dirty with JavaScript&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;The following text is my own take on the AJAX/Atlas future, and DOES NOT reflect any future Microsoft strategy.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Lets face it; web sites today, regardless of the technology they've been built on, do not come even close to providing the utility envisaged and hyped about in the Dot Com era. Though the future outlook initially looked very promising for e-learning, e-business, and e-everything, the reality has been very different. And so, as it happens, once in a while a technology comes along that holds the promise of changing something that we have become so accustomed to that we don't realize needs fixing. Question is, does &lt;a href="" target="_blank"&gt;AJAX&lt;/a&gt; fall under that category? Certainly not. AJAX, as time will tell, is not an end, but a means to an end. AJAX (and all its implementation frameworks) will do nothing more then allow the idea of asynchronous call-backs to the server without mandating a page refresh to gain acceptance. This would enable a much richer class of web applications then ever before. The trade-off to this, however, is a much longer inital loading time for the page.&lt;br /&gt;&lt;br /&gt;Imagine having to tune your television to the channel you want to watch everytime you want to watch it. Isn't that what has been going on for so many years the internet has been in existence; the whole page refreshing just to display a message on a small portion of the webpage.&lt;br /&gt;&lt;br /&gt;Going with the analogy of television, imagine turning on your television and seeing a "Loading...Please wait" message on the screen. Isn't that what AJAX would put web surfers through when the page loads for the first time? If you happen to have a slow internet connection as I do, it would take a couple of "manual" page refreshes just to see the whole UI on the screen, hopefully without a JavaScript error appearing in the web browser's status bar. Thankfully, such considerations will not slow the buzz that has been generated in web developer circles since the advent of the AJAX approach.&lt;br /&gt;&lt;br /&gt;Getting back to the point I made about asynchronous call-backs and initial loading time above, developers and users/surfers alike would attune to the idea of longer initial loading times just so they get fast responses and a richer experience once the UI has loaded; communicating with web services asynchronously without whole round-trips to the server and complete page refreshes.&lt;br /&gt;&lt;br /&gt;For the time being, that looks like the change we will be seeing in websites. However, if you think that the story ends there, think again. For the Web 2.0 idea to become a reality, and not fade into oblivion after a while, the web has to be a platform. That would put more pressure on the web browsers, since no one would want to see one website work on IE and FireFox but break down in Opera. &lt;a href="http://searchvb.techtarget.com/infoCenter/originalContent/0,294292,sid8_gci1186182_iid2657,00.html"&gt;These unresolved issues&lt;/a&gt; are still in abundance as companies move to invest in web applications that would make use of the AJAX approach.&lt;br /&gt;&lt;br /&gt;How do we move forward then? What does the future hold for AJAX and Atlas? Well, to answer these questions, architects and developers would need to focus on the Smart Client paradigm. The biggest benefit Smart Clients have is that they only need to be installed once on the client PC after being downloaded from the Internet (Click Once deployment). This would allow the application to be used without visiting any website again and wait for the UI to load. The reason the Smart Client model was sidelined (by AJAX) was because it killed the web browsing experience; it did not function inside the web browser, but instead appeared as a stand-alone application. To cut a long story short, for the next generation of web applications, 3 things are of utmost importance:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;Responsiveness (brought about using communication with web services)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Rich User Experience and UI&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Least or No download time&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Uptill now, only the first of the 3 above has been addresed by the AJAX approach. The only way I see 2 and 3 (along with 1) becoming a reality is with XAML and Windows Presentation Foundation (WPF). XAML or eXtensible Application Markup Language in its current form still has a long way to go, but it does hold a promise, simply because it has the capacity to encompass a lot of UI logic declaratively (using tags) without any scripting language. Hence, the next generation web applications UI's would be developed in tools such as Microsoft Expression Interactive Designer, and exist as WPF Express applications. The third point of least or no download time can be made possible by caching the XAML UI after it has loaded into the web-browser so that it does not need to download the next time the user visits the site. Webpages are kept in the browser's cache even now, but that serves no purpose in making the next visit to that page more responsive. Some might argue the need for keeping large amount of UI data in the web-browser's cache even if the surfer may be visiting the site for the first and last time; to which my answer would be: You keep the phone number of the people you call frequently stored in your cellphone so that you dont have to memorize them, or even dial them everytime. However, even if you make a call to someone for the first (and possibly last) time, even then, that number remains in your cellphone's memory for some time. So, web-browsers may prompt the users if they want to keep the UI cached so they dont have to download it again in the next visit. Ideally (and for good reason), web surfers would keep the websites they visit frequently cached in their browsers. What a surfing experience that would be?!&lt;br /&gt;&lt;br /&gt;For now, the idea of declarative programming will gain wider acceptance in the web developer community as they use tags in Atlas to bind UI elements to data or extend existing web controls with control extenders. If nothing else, one thing is certain; JavaScript is back from her death-bed (if not her grave), and has become something for companies to explore and take seriously for the next couple of years.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;See you at the &lt;a href="http://www.microsoft.com/pakistan/conference"&gt;Pakistan Developers Conference 2006&lt;/a&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-114953969853541771?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/114953969853541771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=114953969853541771' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114953969853541771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114953969853541771'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/06/atlas-at-last-part-ii.html' title='Atlas at last! - Part II'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-114875492641926578</id><published>2006-05-27T23:32:00.000+05:00</published><updated>2006-05-27T23:35:33.403+05:00</updated><title type='text'>Pakistan Developers Conference (PDC) 2006</title><content type='html'>&lt;img style="display:block; margin:0px auto 10px; text-align:center" src="http://photos1.blogger.com/blogger/3715/638/1600/pdc2006.gif" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;Awright! Its that time of the year again which developers in Pakistan look forward to; the annual &lt;a href="www.microsoft.com/pakistan/conference"&gt;Microsoft Pakistan Developers Conference 2006&lt;/a&gt; (June 28 ~ June 30). This year, the conference would be bigger and better then previous years, since it would take place in Karachi and Lahore simultaneously. The event in Karachi would be 3 day long, whereas in Lahore, it would only be a single day event. Check out the agendas for both cities &lt;a href="http://www.microsoft.com/middleeast/pakistan/conference/agenda.aspx"&gt;here&lt;/a&gt;. I will be speaking in 2 sessions this time around; &lt;b&gt;"Developing Rich Internet Applications using AJAX and Atlas"&lt;/b&gt; and &lt;b&gt;"Building Next Generation GUI's using Microsoft Expression Interactive Designer"&lt;/b&gt;. I will be posting more about my demos in the coming weeks. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.fillforms.com/middleeast/pakistan/conference/registration.aspx"&gt;Register online&lt;/a&gt; NOW! I hope to see you there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-114875492641926578?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/114875492641926578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=114875492641926578' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114875492641926578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114875492641926578'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/05/pakistan-developers-conference-pdc.html' title='Pakistan Developers Conference (PDC) 2006'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-114750249940055512</id><published>2006-05-13T11:33:00.002+05:00</published><updated>2011-03-27T11:58:57.431+05:00</updated><title type='text'>WPF Data Binding Tutorial</title><content type='html'>&lt;table cellpadding="10" cellspacing="0" style="border: 1px #b5b5b5 solid; border-style: solid; background: #edf0f1"&gt;&lt;br /&gt;    &lt;tr&gt;&lt;br /&gt;        &lt;td&gt;&lt;a target="_blank" href="http://www.inetapakistan.org"&gt;&lt;img src="http://inetapakistan.org/pics/inetaPakistan.png" border="0" alt="INETA Pakistan"/&gt;&lt;/a&gt;&lt;/td&gt;&lt;br /&gt;        &lt;td style="font-family: Verdana; text-align: center"&gt;&lt;br /&gt;         &lt;div style="font-size: 9pt; color: gray; font-weight: bold"&gt;WPF Databinding Tutorial&lt;/div&gt;&lt;br /&gt;         &lt;div style="font-size: 8pt"&gt;Watch the screencast for this tutorial/post &lt;a target="_blank" href="http://www.inetapakistan.org/post/2011/03/26/WPF-Data-Binding-Tutorial.aspx"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;        &lt;/td&gt;&lt;br /&gt;    &lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;As promised, I am posting the code and explanation of the WPF Data Binding example I showed at the "Introduction to Windows Presentation Foundation" &lt;a href="http://groups.yahoo.com/group/neddotnet"&gt;NED.NET&lt;/a&gt; user group event this Saturday.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;A developer typically creates a class to represent an entity (table) in the database, whereby CRUD operations are performed by calling methods on the objects, e.g; for class &lt;code&gt;Employee&lt;/code&gt;, &lt;code&gt;objEmployee.Save()&lt;/code&gt;, &lt;code&gt;objEmployee.Load()&lt;/code&gt;,  &lt;code&gt;objEmployee.Update()&lt;/code&gt;, &lt;code&gt;objEmployee.Delete()&lt;/code&gt; etc. Also, everytime the values in the object change, the developer has to manually write code to update each of the UI elements that display the values stored in the object's members. The same holds true when the values on the UI change. With WPF, you can lessen your code greatly by binding the object directly with the UI (each of object's members data-bound to individual UI elements) using XAML syntax. I will be covering 3 different approaches for displaying data in the object onto the UI.&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;Typical&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Using only C# [&lt;code&gt;INotifyPropertyChanged&lt;/code&gt;]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Using C# and XAML [&lt;code&gt;INotifyPropertyChanged&lt;/code&gt; and XAML]&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;I am going to use the same "Examinee" table I used at several demos earlier this year for the HEC (Higher Education Commission) Web Service example. The columns for the table are&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;RollNo (PK, nvarchar(5), not null)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;FirstName (nvarchar(10), not null)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;LastName (nvarchar(10), not null)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;University (nvarchar(50), not null)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;MarksObtained (int, not null)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Exam (nvarchar(15), not null)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Typical Approach&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;The following provides a glimpse of what goes on in code with the typical approach. The developer creates the &lt;code&gt;Examinee&lt;/code&gt; class for the table as follows: [For clarity, code has been colored and lines numbered. Also, ignore the SqlDataReader use for fetching a single row; it was done to lessen code ;)]&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-size: 7.5pt"&gt;&lt;br /&gt;&lt;span style="color: green"&gt;     // =========================&lt;br /&gt;     //   Code Listing 1&lt;br /&gt;     // =========================&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;  1:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: gray"&gt;  2:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: gray"&gt;  3:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color: gray"&gt;  4:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Data;&lt;br /&gt;&lt;span style="color: gray"&gt;  5:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Data.SqlClient;&lt;br /&gt;&lt;span style="color: gray"&gt;  6:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt;  7:&lt;/span&gt; &lt;span style="color: blue"&gt;namespace&lt;/span&gt; Demos.WPF.Binding.PropertyChangeNotNotified&lt;br /&gt;&lt;span style="color: gray"&gt;  8:&lt;/span&gt; {&lt;br /&gt;&lt;span style="color: gray"&gt;  9:&lt;/span&gt;     &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: teal"&gt;Examinee&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 10:&lt;/span&gt;     {&lt;br /&gt;&lt;span style="color: gray"&gt; 11:&lt;/span&gt;         &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; _RollNo;&lt;br /&gt;&lt;span style="color: gray"&gt; 12:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; RollNo&lt;br /&gt;&lt;span style="color: gray"&gt; 13:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 14:&lt;/span&gt;             &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _RollNo; }&lt;br /&gt;&lt;span style="color: gray"&gt; 15:&lt;/span&gt;             &lt;span style="color: blue"&gt;set&lt;/span&gt; { _RollNo = &lt;span style="color: blue"&gt;value&lt;/span&gt;; }&lt;br /&gt;&lt;span style="color: gray"&gt; 16:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 17:&lt;/span&gt;         &lt;br /&gt;&lt;span style="color: gray"&gt; 18:&lt;/span&gt;         &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; _FirstName;&lt;br /&gt;&lt;span style="color: gray"&gt; 19:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; FirstName&lt;br /&gt;&lt;span style="color: gray"&gt; 20:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 21:&lt;/span&gt;             &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _FirstName; }&lt;br /&gt;&lt;span style="color: gray"&gt; 22:&lt;/span&gt;             &lt;span style="color: blue"&gt;set&lt;/span&gt; { _FirstName = &lt;span style="color: blue"&gt;value&lt;/span&gt;; }&lt;br /&gt;&lt;span style="color: gray"&gt; 23:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 24:&lt;/span&gt;         &lt;br /&gt;&lt;span style="color: gray"&gt; 25:&lt;/span&gt;         &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; _LastName;&lt;br /&gt;&lt;span style="color: gray"&gt; 26:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; LastName&lt;br /&gt;&lt;span style="color: gray"&gt; 27:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 28:&lt;/span&gt;             &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _LastName; }&lt;br /&gt;&lt;span style="color: gray"&gt; 29:&lt;/span&gt;             &lt;span style="color: blue"&gt;set&lt;/span&gt; { _LastName = &lt;span style="color: blue"&gt;value&lt;/span&gt;; }&lt;br /&gt;&lt;span style="color: gray"&gt; 30:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 31:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 32:&lt;/span&gt;         &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; _University;&lt;br /&gt;&lt;span style="color: gray"&gt; 33:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; University&lt;br /&gt;&lt;span style="color: gray"&gt; 34:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 35:&lt;/span&gt;             &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _University; }&lt;br /&gt;&lt;span style="color: gray"&gt; 36:&lt;/span&gt;             &lt;span style="color: blue"&gt;set&lt;/span&gt; { _University = &lt;span style="color: blue"&gt;value&lt;/span&gt;; }&lt;br /&gt;&lt;span style="color: gray"&gt; 37:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 38:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 39:&lt;/span&gt;         &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; _MarksObtained;&lt;br /&gt;&lt;span style="color: gray"&gt; 40:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; MarksObtained&lt;br /&gt;&lt;span style="color: gray"&gt; 41:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 42:&lt;/span&gt;             &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _MarksObtained; }&lt;br /&gt;&lt;span style="color: gray"&gt; 43:&lt;/span&gt;             &lt;span style="color: blue"&gt;set&lt;/span&gt; { _MarksObtained = &lt;span style="color: blue"&gt;value&lt;/span&gt;; }&lt;br /&gt;&lt;span style="color: gray"&gt; 44:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 45:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 46:&lt;/span&gt;         &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; _Exam;&lt;br /&gt;&lt;span style="color: gray"&gt; 47:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; Exam&lt;br /&gt;&lt;span style="color: gray"&gt; 48:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 49:&lt;/span&gt;             &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _Exam; }&lt;br /&gt;&lt;span style="color: gray"&gt; 50:&lt;/span&gt;             &lt;span style="color: blue"&gt;set&lt;/span&gt; { _Exam = &lt;span style="color: blue"&gt;value&lt;/span&gt;; }&lt;br /&gt;&lt;span style="color: gray"&gt; 51:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 52:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 53:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; Examinee()&lt;br /&gt;&lt;span style="color: gray"&gt; 54:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 55:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 56:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 57:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Load()&lt;br /&gt;&lt;span style="color: gray"&gt; 58:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 59:&lt;/span&gt;             if (_RollNo.Trim().Length == 0)&lt;br /&gt;&lt;span style="color: gray"&gt; 60:&lt;/span&gt;                &lt;span style="color: blue"&gt;throw&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;Exception&lt;/span&gt;(&lt;span style="color: maroon"&gt;"Roll Number not specified."&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: gray"&gt; 61:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 62:&lt;/span&gt;             &lt;span style="color: teal"&gt;SqlConnection&lt;/span&gt; oConnection = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlConnection&lt;/span&gt;(&lt;span title="Connection String" style="color: gainsboro"&gt;[...]&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: gray"&gt; 63:&lt;/span&gt;             oConnection.Open();&lt;br /&gt;&lt;span style="color: gray"&gt; 64:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 65:&lt;/span&gt;             &lt;span style="color: blue"&gt;string&lt;/span&gt; str = "";&lt;br /&gt;&lt;span style="color: gray"&gt; 66:&lt;/span&gt;             str += &lt;span style="color: maroon"&gt;"SELECT * "&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt; 67:&lt;/span&gt;             str += &lt;span style="color: maroon"&gt;"FROM Examinee "&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt; 68:&lt;/span&gt;             str += &lt;span style="color: maroon"&gt;"WHERE RollNo = @RollNo"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt; 69:&lt;/span&gt;             &lt;span style="color: teal"&gt;SqlCommand&lt;/span&gt; oCommand = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlCommand&lt;/span&gt;(str, oConnection);&lt;br /&gt;&lt;span style="color: gray"&gt; 70:&lt;/span&gt;             oCommand.CommandType = &lt;span style="color: teal"&gt;CommandType&lt;/span&gt;.Text;&lt;br /&gt;&lt;span style="color: gray"&gt; 71:&lt;/span&gt;             oCommand.Parameters.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlParameter&lt;/span&gt;(&lt;span style="color: maroon"&gt;"@RollNo"&lt;/span&gt;, _RollNo));&lt;br /&gt;&lt;span style="color: gray"&gt; 72:&lt;/span&gt;             &lt;span style="color: teal"&gt;SqlDataReader&lt;/span&gt; oDR = oCommand.ExecuteReader();&lt;br /&gt;&lt;span style="color: gray"&gt; 73:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 74:&lt;/span&gt;             if (oDR.Read())&lt;br /&gt;&lt;span style="color: gray"&gt; 75:&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: gray"&gt; 76:&lt;/span&gt;                 _FirstName = oDR[&lt;span style="color: maroon"&gt;"FirstName"&lt;/span&gt;].ToString();&lt;br /&gt;&lt;span style="color: gray"&gt; 77:&lt;/span&gt;                 _LastName = oDR[&lt;span style="color: maroon"&gt;"LastName"&lt;/span&gt;].ToString();&lt;br /&gt;&lt;span style="color: gray"&gt; 78:&lt;/span&gt;                 _University = oDR[&lt;span style="color: maroon"&gt;"University"&lt;/span&gt;].ToString();&lt;br /&gt;&lt;span style="color: gray"&gt; 79:&lt;/span&gt;                 _MarksObtained = &lt;span style="color: teal"&gt;Convert&lt;/span&gt;.ToInt32(oDR[&lt;span style="color: maroon"&gt;"MarksObtained"&lt;/span&gt;]);&lt;br /&gt;&lt;span style="color: gray"&gt; 80:&lt;/span&gt;                 _Exam = oDR[&lt;span style="color: maroon"&gt;"Exam"&lt;/span&gt;].ToString();&lt;br /&gt;&lt;span style="color: gray"&gt; 81:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 82:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 83:&lt;/span&gt;             oCommand.Dispose();&lt;br /&gt;&lt;span style="color: gray"&gt; 84:&lt;/span&gt;             oConnection.Close();&lt;br /&gt;&lt;span style="color: gray"&gt; 85:&lt;/span&gt;             oConnection.Dispose();&lt;br /&gt;&lt;span style="color: gray"&gt; 86:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 87:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 88:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Update()&lt;br /&gt;&lt;span style="color: gray"&gt; 89:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 90:&lt;/span&gt;             if (_RollNo.Trim().Length == 0)&lt;br /&gt;&lt;span style="color: gray"&gt; 91:&lt;/span&gt;                &lt;span style="color: blue"&gt;throw&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;Exception&lt;/span&gt;(&lt;span style="color: maroon"&gt;"Roll Number not specified."&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: gray"&gt; 92:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 93:&lt;/span&gt;             &lt;span style="color: teal"&gt;SqlConnection&lt;/span&gt; oConnection = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlConnection&lt;/span&gt;(&lt;span title="Connection String" style="color: gainsboro"&gt;"[...]"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: gray"&gt; 94:&lt;/span&gt;             oConnection.Open();&lt;br /&gt;&lt;span style="color: gray"&gt; 95:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 96:&lt;/span&gt;             &lt;span style="color: blue"&gt;string&lt;/span&gt; str = "";&lt;br /&gt;&lt;span style="color: gray"&gt; 97:&lt;/span&gt;             str += &lt;span style="color: maroon"&gt;"UPDATE Examinee "&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt; 98:&lt;/span&gt;             str += &lt;span style="color: maroon"&gt;"SET FirstName = @FirstName, "&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt; 99:&lt;/span&gt;             str += &lt;span style="color: maroon"&gt;"LastName = @LastName, "&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt;100:&lt;/span&gt;             str += &lt;span style="color: maroon"&gt;"University = @University, "&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt;101:&lt;/span&gt;             str += &lt;span style="color: maroon"&gt;"MarksObtained = @Marks "&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt;102:&lt;/span&gt;             &lt;span style="color: teal"&gt;SqlCommand&lt;/span&gt; oCommand = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlCommand&lt;/span&gt;(str, oConnection);&lt;br /&gt;&lt;span style="color: gray"&gt;103:&lt;/span&gt;             oCommand.CommandType = &lt;span style="color: teal"&gt;CommandType&lt;/span&gt;.Text;&lt;br /&gt;&lt;span style="color: gray"&gt;104:&lt;/span&gt;             oCommand.Parameters.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlParameter&lt;/span&gt;(&lt;span style="color: maroon"&gt;"@FirstName"&lt;/span&gt;, _FirstName));&lt;br /&gt;&lt;span style="color: gray"&gt;105:&lt;/span&gt;             oCommand.Parameters.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlParameter&lt;/span&gt;(&lt;span style="color: maroon"&gt;"@LastName"&lt;/span&gt;, _LastName));&lt;br /&gt;&lt;span style="color: gray"&gt;106:&lt;/span&gt;             oCommand.Parameters.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlParameter&lt;/span&gt;(&lt;span style="color: maroon"&gt;"@University"&lt;/span&gt;, _University));&lt;br /&gt;&lt;span style="color: gray"&gt;107:&lt;/span&gt;             oCommand.Parameters.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlParameter&lt;/span&gt;(&lt;span style="color: maroon"&gt;"@Marks"&lt;/span&gt;, _MarksObtained));&lt;br /&gt;&lt;span style="color: gray"&gt;108:&lt;/span&gt;             oCommand.Parameters.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlParameter&lt;/span&gt;(&lt;span style="color: maroon"&gt;"@RollNo"&lt;/span&gt;, _RollNo));&lt;br /&gt;&lt;span style="color: gray"&gt;109:&lt;/span&gt;             oCommand.ExecuteNonQuery();&lt;br /&gt;&lt;span style="color: gray"&gt;110:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt;111:&lt;/span&gt;             oCommand.Dispose();&lt;br /&gt;&lt;span style="color: gray"&gt;112:&lt;/span&gt;             oConnection.Close();&lt;br /&gt;&lt;span style="color: gray"&gt;113:&lt;/span&gt;             oConnection.Dispose();&lt;br /&gt;&lt;span style="color: gray"&gt;114:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt;115:&lt;/span&gt;     }&lt;br /&gt;&lt;span style="color: gray"&gt;116:&lt;/span&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr noshade color="#808080" size="1" /&gt;&lt;br /&gt;I figured that since it is XAML that we are demonstrating, might as well develop the UI in Microsoft Cider, the Visual Studio 2005 add-in visual designer for XAML. So, to use the above class, the UI would be something like this.&lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center" src="http://photos1.blogger.com/blogger/3715/638/1600/WPF_DataBinding_UI.gif" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;The resulting XAML for the window shown above is&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-size: 7.5pt"&gt;&lt;br /&gt;&lt;span style="color: green"&gt;&lt;br /&gt; &amp;lt;!-- &lt;br /&gt; =========================&lt;br /&gt;    Code Listing 2&lt;br /&gt;    Simple.xaml&lt;br /&gt; =========================&lt;br /&gt; --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Window&lt;/span&gt; &lt;br /&gt; &lt;span style="color: red"&gt;x:Class&lt;/span&gt;="&lt;span style="color: blue"&gt;Demos.WPF.Binding.Simple&lt;/span&gt;"&lt;br /&gt; &lt;span style="color: red"&gt;xmlns&lt;/span&gt;="&lt;span style="color: blue"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/span&gt;"&lt;br /&gt; &lt;span style="color: red"&gt;xmlns:x&lt;/span&gt;="&lt;span style="color: blue"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/span&gt;"&lt;br /&gt; &lt;span style="color: red"&gt;Title&lt;/span&gt;="&lt;span style="color: blue"&gt;Demos.WPF.Binding&lt;/span&gt;" &lt;span style="color: red"&gt;Height&lt;/span&gt;="&lt;span style="color: blue"&gt;209&lt;/span&gt;" &lt;span style="color: red"&gt;Width&lt;/span&gt;="&lt;span style="color: blue"&gt;371&lt;/span&gt;"&lt;br /&gt; &lt;span style="color: red"&gt;Background&lt;/span&gt;="&lt;span style="color: blue"&gt;WhiteSmoke&lt;/span&gt;" &lt;span style="color: red"&gt;WindowStartupLocation&lt;/span&gt;="&lt;span style="color: blue"&gt;CenterScreen&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Label&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Top&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Left&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Column&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.ColumnSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Row&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.RowSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Margin&lt;/span&gt;="&lt;span style="color: blue"&gt;21.37,23,0,0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Width&lt;/span&gt;="&lt;span style="color: blue"&gt;76.63&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Height&lt;/span&gt;="&lt;span style="color: blue"&gt;23.2766666666667&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;label1&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Roll Number:&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Label&lt;/span&gt; &lt;br /&gt;     &lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Top&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Left&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Column&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.ColumnSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Row&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.RowSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Margin&lt;/span&gt;="&lt;span style="color: blue"&gt;20.37,42.7233333333333,0,0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Width&lt;/span&gt;="&lt;span style="color: blue"&gt;76.63&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Height&lt;/span&gt;="&lt;span style="color: blue"&gt;23.2766666666667&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;label2&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;First Name:&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Label&lt;/span&gt; &lt;br /&gt;     &lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Top&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Left&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Column&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.ColumnSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Row&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.RowSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Margin&lt;/span&gt;="&lt;span style="color: blue"&gt;20.37,66,0,0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Width&lt;/span&gt;="&lt;span style="color: blue"&gt;75.63&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Height&lt;/span&gt;="&lt;span style="color: blue"&gt;23.2766666666667&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;label3&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Last Name:&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Label&lt;/span&gt; &lt;br /&gt;     &lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Top&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Left&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Column&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.ColumnSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Row&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.RowSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Margin&lt;/span&gt;="&lt;span style="color: blue"&gt;21.37,89,0,0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Width&lt;/span&gt;="&lt;span style="color: blue"&gt;62.63&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Height&lt;/span&gt;="&lt;span style="color: blue"&gt;23.2766666666667&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;label4&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;University:&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Label&lt;/span&gt; &lt;br /&gt;     &lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Top&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Left&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Column&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.ColumnSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Row&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.RowSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Margin&lt;/span&gt;="&lt;span style="color: blue"&gt;21.37,112.723333333333,0,0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Width&lt;/span&gt;="&lt;span style="color: blue"&gt;62.63&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Height&lt;/span&gt;="&lt;span style="color: blue"&gt;23.276666666666671&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;label5&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Marks:&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt; &lt;br /&gt;     &lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Top&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Stretch&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Column&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.ColumnSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Row&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.RowSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Margin&lt;/span&gt;="&lt;span style="color: blue"&gt;134,23,56,0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Width&lt;/span&gt;="&lt;span style="color: blue"&gt;NaN&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Height&lt;/span&gt;="&lt;span style="color: blue"&gt;20&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;txtRollNo&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;BorderBrush&lt;/span&gt;="&lt;span style="color: blue"&gt;#FF000000&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Foreground&lt;/span&gt;="&lt;span style="color: blue"&gt;#FF336699&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt; &lt;br /&gt;     &lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Top&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Stretch&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Column&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.ColumnSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Row&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.RowSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Margin&lt;/span&gt;="&lt;span style="color: blue"&gt;134,46,56,0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Width&lt;/span&gt;="&lt;span style="color: blue"&gt;NaN&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Height&lt;/span&gt;="&lt;span style="color: blue"&gt;20&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;txtFirstName&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Foreground&lt;/span&gt;="&lt;span style="color: blue"&gt;#FF336699&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;BorderBrush&lt;/span&gt;="&lt;span style="color: blue"&gt;#FF000000&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt; &lt;br /&gt;     &lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Top&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Stretch&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Column&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.ColumnSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Row&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.RowSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Margin&lt;/span&gt;="&lt;span style="color: blue"&gt;134,69.2766666666667,56,0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Width&lt;/span&gt;="&lt;span style="color: blue"&gt;NaN&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Height&lt;/span&gt;="&lt;span style="color: blue"&gt;20&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;txtLastName&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Foreground&lt;/span&gt;="&lt;span style="color: blue"&gt;#FF336699&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;BorderBrush&lt;/span&gt;="&lt;span style="color: blue"&gt;#FF000000&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt; &lt;br /&gt;     &lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Top&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Stretch&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Column&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.ColumnSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Row&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.RowSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Margin&lt;/span&gt;="&lt;span style="color: blue"&gt;134,92.2766666666667,56,0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Width&lt;/span&gt;="&lt;span style="color: blue"&gt;NaN&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Height&lt;/span&gt;="&lt;span style="color: blue"&gt;20&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;txtUniversity&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Foreground&lt;/span&gt;="&lt;span style="color: blue"&gt;#FF336699&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;BorderBrush&lt;/span&gt;="&lt;span style="color: blue"&gt;#FF000000&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt; &lt;br /&gt;     &lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Top&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Stretch&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Column&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.ColumnSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Row&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.RowSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Margin&lt;/span&gt;="&lt;span style="color: blue"&gt;134,114,56,0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Width&lt;/span&gt;="&lt;span style="color: blue"&gt;NaN&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Height&lt;/span&gt;="&lt;span style="color: blue"&gt;20&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;txtMarks&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Foreground&lt;/span&gt;="&lt;span style="color: blue"&gt;#FF336699&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;BorderBrush&lt;/span&gt;="&lt;span style="color: blue"&gt;#FF000000&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Button&lt;/span&gt; &lt;br /&gt;     &lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Bottom&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Left&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Column&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.ColumnSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Row&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.RowSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Margin&lt;/span&gt;="&lt;span style="color: blue"&gt;134,0,0,11&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Width&lt;/span&gt;="&lt;span style="color: blue"&gt;51&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Height&lt;/span&gt;="&lt;span style="color: blue"&gt;23&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;btnLoad&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Click&lt;/span&gt;="&lt;span style="color: blue"&gt;btnLoad_Click&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Load&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Button&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Button&lt;/span&gt; &lt;br /&gt;     &lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Bottom&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Right&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Column&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.ColumnSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Row&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.RowSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Margin&lt;/span&gt;="&lt;span style="color: blue"&gt;0,0,128.5625,11&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Width&lt;/span&gt;="&lt;span style="color: blue"&gt;48.4375&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Height&lt;/span&gt;="&lt;span style="color: blue"&gt;23&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;btnUpdate&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Click&lt;/span&gt;="&lt;span style="color: blue"&gt;btnUpdate_Click&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Update&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Button&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Button&lt;/span&gt; &lt;br /&gt;     &lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Bottom&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Right&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Column&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.ColumnSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Row&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.RowSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Margin&lt;/span&gt;="&lt;span style="color: blue"&gt;0,0,56,11&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Width&lt;/span&gt;="&lt;span style="color: blue"&gt;55&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Height&lt;/span&gt;="&lt;span style="color: blue"&gt;23&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;btnCheck&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Click&lt;/span&gt;="&lt;span style="color: blue"&gt;btnCheck_Click&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Check&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Button&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Button&lt;/span&gt; &lt;br /&gt;     &lt;span style="color: red"&gt;VerticalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Top&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;HorizontalAlignment&lt;/span&gt;="&lt;span style="color: blue"&gt;Right&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Column&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.ColumnSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.Row&lt;/span&gt;="&lt;span style="color: blue"&gt;0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Grid.RowSpan&lt;/span&gt;="&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Margin&lt;/span&gt;="&lt;span style="color: blue"&gt;0,115,12,0&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Width&lt;/span&gt;="&lt;span style="color: blue"&gt;39&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Height&lt;/span&gt;="&lt;span style="color: blue"&gt;19&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;btnAddTen&lt;/span&gt;" &lt;br /&gt;     &lt;span style="color: red"&gt;Click&lt;/span&gt;="&lt;span style="color: blue"&gt;btnAddTen_Click&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;+10&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Button&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Window&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr noshade color="#808080" size="1" /&gt;&lt;br /&gt;The app lets the user enter the Roll Number for a student, and dislays the Examinee's stats when the "Load" button is clicked. The user can then make any changes in values if required (except for the Roll Number), and click "Update" to make the changes in the database. Nothing fancy here. The code-behind file is pretty straight-forward as well. I have placed a "Check" button on the form to let the user view and compare the values in both, the &lt;code&gt;Examinee&lt;/code&gt; object and on the UI.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-size: 7.5pt"&gt;&lt;br /&gt;&lt;span style="color: green"&gt;     // =========================&lt;br /&gt;     //   Code Listing 3&lt;br /&gt;     //   Simple.xaml.cs&lt;br /&gt;     // =========================&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;  1:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: gray"&gt;  2:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows;&lt;br /&gt;&lt;span style="color: gray"&gt;  3:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Controls;&lt;br /&gt;&lt;span style="color: gray"&gt;  4:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Data;&lt;br /&gt;&lt;span style="color: gray"&gt;  5:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Documents;&lt;br /&gt;&lt;span style="color: gray"&gt;  6:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Media;&lt;br /&gt;&lt;span style="color: gray"&gt;  7:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Media.Imaging;&lt;br /&gt;&lt;span style="color: gray"&gt;  8:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Shapes;&lt;br /&gt;&lt;span style="color: gray"&gt;  9:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; Demos.WPF.Binding.PropertyChangeNotNotified;&lt;br /&gt;&lt;span style="color: gray"&gt; 10:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 11:&lt;/span&gt; &lt;span style="color: blue"&gt;namespace&lt;/span&gt; Demos.WPF.Binding&lt;br /&gt;&lt;span style="color: gray"&gt; 12:&lt;/span&gt; {&lt;br /&gt;&lt;span style="color: gray"&gt; 13:&lt;/span&gt;     &lt;span style="color: blue"&gt;public partial class&lt;/span&gt; &lt;span style="color: teal"&gt;Simple&lt;/span&gt; : &lt;span style="color: teal"&gt;Window&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 14:&lt;/span&gt;     {&lt;br /&gt;&lt;span style="color: gray"&gt; 15:&lt;/span&gt;         &lt;span style="color: teal"&gt;Examinee&lt;/span&gt; oExaminee = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;Examinee&lt;/span&gt;();&lt;br /&gt;&lt;span style="color: gray"&gt; 16:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 17:&lt;/span&gt;         &lt;span style="color: blue"&gt;public &lt;/span&gt; Simple()&lt;br /&gt;&lt;span style="color: gray"&gt; 18:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 19:&lt;/span&gt;             InitializeComponent();&lt;br /&gt;&lt;span style="color: gray"&gt; 20:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 21:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 22:&lt;/span&gt;         &lt;span style="color: blue"&gt;private void&lt;/span&gt; btnLoad_Click(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: teal"&gt;EventArgs&lt;/span&gt; e)&lt;br /&gt;&lt;span style="color: gray"&gt; 23:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 24:&lt;/span&gt;             &lt;span style="color: blue"&gt;try&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 25:&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: gray"&gt; 26:&lt;/span&gt;                 oExaminee.RollNo = txtRollNo.Text;&lt;br /&gt;&lt;span style="color: gray"&gt; 27:&lt;/span&gt;                 oExaminee.Load();&lt;br /&gt;&lt;span style="color: gray"&gt; 28:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 29:&lt;/span&gt;                 &lt;span style="color: green"&gt;// tedious code to update UI with object's properties&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 30:&lt;/span&gt;                 txtFirstName.Text = oExaminee.FirstName;&lt;br /&gt;&lt;span style="color: gray"&gt; 31:&lt;/span&gt;                 txtLastName.Text = oExaminee.LastName;&lt;br /&gt;&lt;span style="color: gray"&gt; 32:&lt;/span&gt;                 txtUniversity.Text = oExaminee.University;&lt;br /&gt;&lt;span style="color: gray"&gt; 33:&lt;/span&gt;                 txtMarks.Text = oExaminee.MarksObtained.ToString();&lt;br /&gt;&lt;span style="color: gray"&gt; 34:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 35:&lt;/span&gt;             &lt;span style="color: blue"&gt;catch&lt;/span&gt; (&lt;span style="color: teal"&gt;Exception&lt;/span&gt; oEx)&lt;br /&gt;&lt;span style="color: gray"&gt; 36:&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: gray"&gt; 37:&lt;/span&gt;                 &lt;span style="color: teal"&gt;MessageBox&lt;/span&gt;.Show(oEx.Message);&lt;br /&gt;&lt;span style="color: gray"&gt; 38:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 39:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 40:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 41:&lt;/span&gt;         &lt;span style="color: blue"&gt;private void&lt;/span&gt; btnUpdate_Click(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: teal"&gt;EventArgs&lt;/span&gt; e)&lt;br /&gt;&lt;span style="color: gray"&gt; 42:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 43:&lt;/span&gt;             &lt;span style="color: blue"&gt;try&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 44:&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: gray"&gt; 45:&lt;/span&gt;                 &lt;span style="color: green"&gt;// tedious code to set object's properties from UI elements&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 46:&lt;/span&gt;                 oExaminee.FirstName = txtFirstName.Text;&lt;br /&gt;&lt;span style="color: gray"&gt; 47:&lt;/span&gt;                 oExaminee.LastName = txtLastName.Text;&lt;br /&gt;&lt;span style="color: gray"&gt; 48:&lt;/span&gt;                 oExaminee.University = txtUniversity.Text;&lt;br /&gt;&lt;span style="color: gray"&gt; 49:&lt;/span&gt;                 oExaminee.MarksObtained = &lt;span style="color: teal"&gt;Convert&lt;/span&gt;.ToInt32(txtMarks.Text);&lt;br /&gt;&lt;span style="color: gray"&gt; 50:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 51:&lt;/span&gt;                 oExaminee.Update();&lt;br /&gt;&lt;span style="color: gray"&gt; 52:&lt;/span&gt;                 MessageBox.Show(&lt;span style="color: maroon"&gt;"Information Updated."&lt;/span&gt;, &lt;span style="color: maroon"&gt;"Update"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: gray"&gt; 53:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 54:&lt;/span&gt;             &lt;span style="color: blue"&gt;catch&lt;/span&gt; (&lt;span style="color: teal"&gt;Exception&lt;/span&gt; oEx)&lt;br /&gt;&lt;span style="color: gray"&gt; 55:&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: gray"&gt; 56:&lt;/span&gt;                 &lt;span style="color: teal"&gt;MessageBox&lt;/span&gt;.Show(oEx.Message);&lt;br /&gt;&lt;span style="color: gray"&gt; 57:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 58:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 59:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 60:&lt;/span&gt;         &lt;span style="color: blue"&gt;private void&lt;/span&gt; btnCheck_Click(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: teal"&gt;EventArgs&lt;/span&gt; e)&lt;br /&gt;&lt;span style="color: gray"&gt; 61:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 62:&lt;/span&gt;             &lt;span style="color: blue"&gt;string&lt;/span&gt; str = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: maroon"&gt;"OBJECT:\nFirstName: {0}"&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 63:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nLastName: {1}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 64:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nUniversity: {2}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 65:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nMarksObtained: {3}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 66:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\n\nUI:"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 67:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nFirst Name: {4}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 68:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nLast Name: {5}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 69:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nUniversity: {6}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 70:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nMarksObtained: {7}"&lt;/span&gt;, &lt;br /&gt;&lt;span style="color: gray"&gt; 71:&lt;/span&gt;                 oExaminee.FirstName, &lt;br /&gt;&lt;span style="color: gray"&gt; 72:&lt;/span&gt;                 oExaminee.LastName, &lt;br /&gt;&lt;span style="color: gray"&gt; 73:&lt;/span&gt;                 oExaminee.University, &lt;br /&gt;&lt;span style="color: gray"&gt; 74:&lt;/span&gt;                 oExaminee.MarksObtained.ToString(), &lt;br /&gt;&lt;span style="color: gray"&gt; 75:&lt;/span&gt;                 txtFirstName.Text, &lt;br /&gt;&lt;span style="color: gray"&gt; 76:&lt;/span&gt;                 txtLastName.Text, &lt;br /&gt;&lt;span style="color: gray"&gt; 77:&lt;/span&gt;                 txtUniversity.Text, &lt;br /&gt;&lt;span style="color: gray"&gt; 78:&lt;/span&gt;                 txtMarks.Text);&lt;br /&gt;&lt;span style="color: gray"&gt; 79:&lt;/span&gt;             &lt;span style="color: teal"&gt;MessageBox&lt;/span&gt;.Show(str);&lt;br /&gt;&lt;span style="color: gray"&gt; 80:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 81:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 82:&lt;/span&gt;         &lt;span style="color: blue"&gt;private void&lt;/span&gt; btnAddTen_Click(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;&lt;span style="color: gray"&gt; 83:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 84:&lt;/span&gt;             &lt;span style="color: blue"&gt;if&lt;/span&gt; ((oExaminee.MarksObtained + 10) &gt; 100)&lt;br /&gt;&lt;span style="color: gray"&gt; 85:&lt;/span&gt;                 oExaminee.MarksObtained = 100;&lt;br /&gt;&lt;span style="color: gray"&gt; 86:&lt;/span&gt;             &lt;span style="color: blue"&gt;else&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 87:&lt;/span&gt;                 oExaminee.MarksObtained += 10;&lt;br /&gt;&lt;span style="color: gray"&gt; 88:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 89:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 90:&lt;/span&gt;     }&lt;br /&gt;&lt;span style="color: gray"&gt; 91:&lt;/span&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr noshade color="#808080" size="1" /&gt;&lt;br /&gt;Notice that in the event handlers for both, the "Load" (lines 29 to 33) and "Update" (lines 45 to 49) buttons, the values need to be shuttled between the object and the UI elements to keep them synchronized. If the form had, lets say, 30+ UI elements, the developer would have to write atleast 60 additional lines of code to achieve this synchronization. Ironically, this is what usually happens.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Using only C# [&lt;code&gt;INotifyPropertyChanged&lt;/code&gt;]&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;The typical approach is pretty cumbersome. The same result can be achieved by implementing the INotifyPropertyChanged interface in the &lt;code&gt;Examinee&lt;/code&gt; class to generate an event everytime the value in the object's property changes. I have highlighted portions in code listing 4 that need to be added to implement INotifyPropertyChanged.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-size: 7.5pt"&gt;&lt;br /&gt;&lt;span style="color: green"&gt;     // =========================&lt;br /&gt;     //   Code Listing 4&lt;br /&gt;     // =========================&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;  1:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: gray"&gt;  2:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: gray"&gt;  3:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color: gray"&gt;  4:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Data;&lt;br /&gt;&lt;span style="color: gray"&gt;  5:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Data.SqlClient;&lt;br /&gt;&lt;span style="color: gray"&gt;  6:&lt;/span&gt; &lt;span style="background-color: #D4D5D8; border: 1px solid #0A246A"&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.ComponentModel;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;  7:&lt;/span&gt;  &lt;br /&gt;&lt;span style="color: gray"&gt;  8:&lt;/span&gt; &lt;span style="color: blue"&gt;namespace&lt;/span&gt; Demos.WPF.Binding.PropertyChangeNotified&lt;br /&gt;&lt;span style="color: gray"&gt;  9:&lt;/span&gt; {&lt;br /&gt;&lt;span style="color: gray"&gt; 10:&lt;/span&gt;     &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: teal"&gt;Examinee&lt;/span&gt; &lt;span style="background-color: #D4D5D8; border: 1px solid #0A246A"&gt;: &lt;span style="color: teal"&gt;INotifyPropertyChanged&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 11:&lt;/span&gt;     {&lt;br /&gt;&lt;span style="color: gray"&gt; 12:&lt;/span&gt;         &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; _RollNo;&lt;br /&gt;&lt;span style="color: gray"&gt; 13:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; RollNo&lt;br /&gt;&lt;span style="color: gray"&gt; 14:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 15:&lt;/span&gt;             &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _RollNo; }&lt;br /&gt;&lt;span style="color: gray"&gt; 16:&lt;/span&gt;             &lt;span style="color: blue"&gt;set&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 17:&lt;/span&gt;             { &lt;br /&gt;&lt;span style="color: gray"&gt; 18:&lt;/span&gt;                _RollNo = &lt;span style="color: blue"&gt;value&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt; 19:&lt;/span&gt;                &lt;span style="color: green"&gt;// Notify Property Change&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 20:&lt;/span&gt;                &lt;span style="background-color: #D4D5D8; border: 1px solid #0A246A"&gt;OnPropertyChanged(&lt;span style="color: maroon"&gt;"RollNo"&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 21:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 22:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 23:&lt;/span&gt;        &lt;br /&gt;&lt;span style="color: gray"&gt; 24:&lt;/span&gt;         &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; _FirstName;&lt;br /&gt;&lt;span style="color: gray"&gt; 25:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; FirstName&lt;br /&gt;&lt;span style="color: gray"&gt; 26:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 27:&lt;/span&gt;             &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _FirstName; }&lt;br /&gt;&lt;span style="color: gray"&gt; 28:&lt;/span&gt;             &lt;span style="color: blue"&gt;set&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 29:&lt;/span&gt;             { &lt;br /&gt;&lt;span style="color: gray"&gt; 30:&lt;/span&gt;                _FirstName = &lt;span style="color: blue"&gt;value&lt;/span&gt;; &lt;br /&gt;&lt;span style="color: gray"&gt; 31:&lt;/span&gt;                &lt;span style="color: green"&gt;// Notify Property Change&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 32:&lt;/span&gt;                &lt;span style="background-color: #D4D5D8; border: 1px solid #0A246A"&gt;OnPropertyChanged(&lt;span style="color: maroon"&gt;"FirstName"&lt;/span&gt;);&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 33:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 34:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 35:&lt;/span&gt;         &lt;br /&gt;&lt;span style="color: gray"&gt; 36:&lt;/span&gt;         &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; _LastName;&lt;br /&gt;&lt;span style="color: gray"&gt; 37:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; LastName&lt;br /&gt;&lt;span style="color: gray"&gt; 38:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 39:&lt;/span&gt;             &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _LastName; }&lt;br /&gt;&lt;span style="color: gray"&gt; 40:&lt;/span&gt;             &lt;span style="color: blue"&gt;set&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 41:&lt;/span&gt;             { &lt;br /&gt;&lt;span style="color: gray"&gt; 42:&lt;/span&gt;                _LastName = &lt;span style="color: blue"&gt;value&lt;/span&gt;; &lt;br /&gt;&lt;span style="color: gray"&gt; 43:&lt;/span&gt;                &lt;span style="color: green"&gt;// Notify Property Change&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 44:&lt;/span&gt;                &lt;span style="background-color: #D4D5D8; border: 1px solid #0A246A"&gt;OnPropertyChanged(&lt;span style="color: maroon"&gt;"LastName"&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 45:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 46:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 47:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 48:&lt;/span&gt;         &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; _University;&lt;br /&gt;&lt;span style="color: gray"&gt; 49:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; University&lt;br /&gt;&lt;span style="color: gray"&gt; 50:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 51:&lt;/span&gt;             &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _University; }&lt;br /&gt;&lt;span style="color: gray"&gt; 52:&lt;/span&gt;             &lt;span style="color: blue"&gt;set&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 53:&lt;/span&gt;             { &lt;br /&gt;&lt;span style="color: gray"&gt; 54:&lt;/span&gt;                _University = &lt;span style="color: blue"&gt;value&lt;/span&gt;; &lt;br /&gt;&lt;span style="color: gray"&gt; 55:&lt;/span&gt;                &lt;span style="color: green"&gt;// Notify Property Change&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 56:&lt;/span&gt;                &lt;span style="background-color: #D4D5D8; border: 1px solid #0A246A"&gt;OnPropertyChanged(&lt;span style="color: maroon"&gt;"University"&lt;/span&gt;);&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 57:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 58:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 59:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 60:&lt;/span&gt;         &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; _MarksObtained;&lt;br /&gt;&lt;span style="color: gray"&gt; 61:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; MarksObtained&lt;br /&gt;&lt;span style="color: gray"&gt; 62:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 63:&lt;/span&gt;             &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _MarksObtained; }&lt;br /&gt;&lt;span style="color: gray"&gt; 64:&lt;/span&gt;             &lt;span style="color: blue"&gt;set&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 65:&lt;/span&gt;             { &lt;br /&gt;&lt;span style="color: gray"&gt; 66:&lt;/span&gt;                _MarksObtained = &lt;span style="color: blue"&gt;value&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt; 67:&lt;/span&gt;                &lt;span style="color: green"&gt;// Notify Property Change&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 68:&lt;/span&gt;                &lt;span style="background-color: #D4D5D8; border: 1px solid #0A246A"&gt;OnPropertyChanged(&lt;span style="color: maroon"&gt;"MarksObtained"&lt;/span&gt;);&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 69:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 70:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 71:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 72:&lt;/span&gt;         &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; _Exam;&lt;br /&gt;&lt;span style="color: gray"&gt; 73:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; Exam&lt;br /&gt;&lt;span style="color: gray"&gt; 74:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 75:&lt;/span&gt;             &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; _Exam; }&lt;br /&gt;&lt;span style="color: gray"&gt; 76:&lt;/span&gt;             &lt;span style="color: blue"&gt;set&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 77:&lt;/span&gt;             { &lt;br /&gt;&lt;span style="color: gray"&gt; 78:&lt;/span&gt;                _Exam = &lt;span style="color: blue"&gt;value&lt;/span&gt;; &lt;br /&gt;&lt;span style="color: gray"&gt; 79:&lt;/span&gt;                &lt;span style="color: green"&gt;// Notify Property Change&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 80:&lt;/span&gt;                &lt;span style="background-color: #D4D5D8; border: 1px solid #0A246A"&gt;OnPropertyChanged(&lt;span style="color: maroon"&gt;"Exam"&lt;/span&gt;);&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 81:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 82:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 83:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 84:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; Examinee()&lt;br /&gt;&lt;span style="color: gray"&gt; 85:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 86:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 87:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 88:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Load()&lt;br /&gt;&lt;span style="color: gray"&gt; 89:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 90:&lt;/span&gt;             if (_RollNo.Trim().Length == 0)&lt;br /&gt;&lt;span style="color: gray"&gt; 91:&lt;/span&gt;                &lt;span style="color: blue"&gt;throw&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;Exception&lt;/span&gt;(&lt;span style="color: maroon"&gt;"Roll Number not specified."&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: gray"&gt; 92:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 93:&lt;/span&gt;             &lt;span style="color: teal"&gt;SqlConnection&lt;/span&gt; oConnection = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlConnection&lt;/span&gt;(&lt;span title="Connection String" style="color: gainsboro"&gt;[...]&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: gray"&gt; 94:&lt;/span&gt;             oConnection.Open();&lt;br /&gt;&lt;span style="color: gray"&gt; 95:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 96:&lt;/span&gt;             &lt;span style="color: blue"&gt;string&lt;/span&gt; str = "";&lt;br /&gt;&lt;span style="color: gray"&gt; 97:&lt;/span&gt;             str += &lt;span style="color: maroon"&gt;"SELECT * "&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt; 98:&lt;/span&gt;             str += &lt;span style="color: maroon"&gt;"FROM Examinee "&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt; 99:&lt;/span&gt;             str += &lt;span style="color: maroon"&gt;"WHERE RollNo = @RollNo"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt;100:&lt;/span&gt;             &lt;span style="color: teal"&gt;SqlCommand&lt;/span&gt; oCommand = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlCommand&lt;/span&gt;(str, oConnection);&lt;br /&gt;&lt;span style="color: gray"&gt;101:&lt;/span&gt;             oCommand.CommandType = &lt;span style="color: teal"&gt;CommandType&lt;/span&gt;.Text;&lt;br /&gt;&lt;span style="color: gray"&gt;102:&lt;/span&gt;             oCommand.Parameters.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlParameter&lt;/span&gt;(&lt;span style="color: maroon"&gt;"@RollNo"&lt;/span&gt;, _RollNo));&lt;br /&gt;&lt;span style="color: gray"&gt;103:&lt;/span&gt;             &lt;span style="color: teal"&gt;SqlDataReader&lt;/span&gt; oDR = oCommand.ExecuteReader();&lt;br /&gt;&lt;span style="color: gray"&gt;104:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt;105:&lt;/span&gt;             if (oDR.Read())&lt;br /&gt;&lt;span style="color: gray"&gt;106:&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: gray"&gt;107:&lt;/span&gt;                 _FirstName = oDR[&lt;span style="color: maroon"&gt;"FirstName"&lt;/span&gt;].ToString();&lt;br /&gt;&lt;span style="color: gray"&gt;108:&lt;/span&gt;                 _LastName = oDR[&lt;span style="color: maroon"&gt;"LastName"&lt;/span&gt;].ToString();&lt;br /&gt;&lt;span style="color: gray"&gt;109:&lt;/span&gt;                 _University = oDR[&lt;span style="color: maroon"&gt;"University"&lt;/span&gt;].ToString();&lt;br /&gt;&lt;span style="color: gray"&gt;110:&lt;/span&gt;                 _MarksObtained = &lt;span style="color: teal"&gt;Convert&lt;/span&gt;.ToInt32(oDR[&lt;span style="color: maroon"&gt;"MarksObtained"&lt;/span&gt;]);&lt;br /&gt;&lt;span style="color: gray"&gt;111:&lt;/span&gt;                 _Exam = oDR[&lt;span style="color: maroon"&gt;"Exam"&lt;/span&gt;].ToString();&lt;br /&gt;&lt;span style="color: gray"&gt;112:&lt;/span&gt;                 &lt;br /&gt;&lt;span style="color: gray"&gt;113:&lt;/span&gt;                 &lt;span style="color: green"&gt;// following code raises onPropertyChanged event because &lt;br /&gt;&lt;span style="color: gray"&gt;114:&lt;/span&gt;                 // properties are being set from within the class itself.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;115:&lt;/span&gt;                 &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-top:1px solid #0A246A; background-color: #D4D5D8;"&gt;OnPropertyChanged(&lt;span style="color: maroon"&gt;"FirstName"&lt;/span&gt;);    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;116:&lt;/span&gt;                 &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;OnPropertyChanged(&lt;span style="color: maroon"&gt;"LastName"&lt;/span&gt;);     &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;117:&lt;/span&gt;                 &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;OnPropertyChanged(&lt;span style="color: maroon"&gt;"University"&lt;/span&gt;);   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;118:&lt;/span&gt;                 &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;OnPropertyChanged(&lt;span style="color: maroon"&gt;"MarksObtained"&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;119:&lt;/span&gt;                 &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-bottom:1px solid #0A246A; background-color: #D4D5D8;"&gt;OnPropertyChanged(&lt;span style="color: maroon"&gt;"Exam"&lt;/span&gt;);         &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;120:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt;121:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt;122:&lt;/span&gt;             oCommand.Dispose();&lt;br /&gt;&lt;span style="color: gray"&gt;123:&lt;/span&gt;             oConnection.Close();&lt;br /&gt;&lt;span style="color: gray"&gt;124:&lt;/span&gt;             oConnection.Dispose();&lt;br /&gt;&lt;span style="color: gray"&gt;125:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt;126:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt;127:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Update()&lt;br /&gt;&lt;span style="color: gray"&gt;128:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt;129:&lt;/span&gt;             if (_RollNo.Trim().Length == 0)&lt;br /&gt;&lt;span style="color: gray"&gt;130:&lt;/span&gt;                &lt;span style="color: blue"&gt;throw&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;Exception&lt;/span&gt;(&lt;span style="color: maroon"&gt;"Roll Number not specified."&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: gray"&gt;131:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt;132:&lt;/span&gt;             &lt;span style="color: teal"&gt;SqlConnection&lt;/span&gt; oConnection = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlConnection&lt;/span&gt;(&lt;span title="Connection String" style="color: gainsboro"&gt;"[...]"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: gray"&gt;133:&lt;/span&gt;             oConnection.Open();&lt;br /&gt;&lt;span style="color: gray"&gt;134:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt;135:&lt;/span&gt;             &lt;span style="color: blue"&gt;string&lt;/span&gt; str = "";&lt;br /&gt;&lt;span style="color: gray"&gt;136:&lt;/span&gt;             str += &lt;span style="color: maroon"&gt;"UPDATE Examinee "&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt;137:&lt;/span&gt;             str += &lt;span style="color: maroon"&gt;"SET FirstName = @FirstName, "&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt;138:&lt;/span&gt;             str += &lt;span style="color: maroon"&gt;"LastName = @LastName, "&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt;139:&lt;/span&gt;             str += &lt;span style="color: maroon"&gt;"University = @University, "&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt;140:&lt;/span&gt;             str += &lt;span style="color: maroon"&gt;"MarksObtained = @Marks "&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: gray"&gt;141:&lt;/span&gt;             &lt;span style="color: teal"&gt;SqlCommand&lt;/span&gt; oCommand = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlCommand&lt;/span&gt;(str, oConnection);&lt;br /&gt;&lt;span style="color: gray"&gt;142:&lt;/span&gt;             oCommand.CommandType = &lt;span style="color: teal"&gt;CommandType&lt;/span&gt;.Text;&lt;br /&gt;&lt;span style="color: gray"&gt;143:&lt;/span&gt;             oCommand.Parameters.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlParameter&lt;/span&gt;(&lt;span style="color: maroon"&gt;"@FirstName"&lt;/span&gt;, _FirstName));&lt;br /&gt;&lt;span style="color: gray"&gt;144:&lt;/span&gt;             oCommand.Parameters.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlParameter&lt;/span&gt;(&lt;span style="color: maroon"&gt;"@LastName"&lt;/span&gt;, _LastName));&lt;br /&gt;&lt;span style="color: gray"&gt;145:&lt;/span&gt;             oCommand.Parameters.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlParameter&lt;/span&gt;(&lt;span style="color: maroon"&gt;"@University"&lt;/span&gt;, _University));&lt;br /&gt;&lt;span style="color: gray"&gt;146:&lt;/span&gt;             oCommand.Parameters.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlParameter&lt;/span&gt;(&lt;span style="color: maroon"&gt;"@Marks"&lt;/span&gt;, _MarksObtained));&lt;br /&gt;&lt;span style="color: gray"&gt;147:&lt;/span&gt;             oCommand.Parameters.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SqlParameter&lt;/span&gt;(&lt;span style="color: maroon"&gt;"@RollNo"&lt;/span&gt;, _RollNo));&lt;br /&gt;&lt;span style="color: gray"&gt;148:&lt;/span&gt;             oCommand.ExecuteNonQuery();&lt;br /&gt;&lt;span style="color: gray"&gt;149:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt;150:&lt;/span&gt;             oCommand.Dispose();&lt;br /&gt;&lt;span style="color: gray"&gt;151:&lt;/span&gt;             oConnection.Close();&lt;br /&gt;&lt;span style="color: gray"&gt;152:&lt;/span&gt;             oConnection.Dispose();&lt;br /&gt;&lt;span style="color: gray"&gt;153:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt;154:&lt;/span&gt;         &lt;br /&gt;&lt;span style="color: gray"&gt;155:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-top:1px solid #0A246A; background-color: #D4D5D8;"&gt; &lt;span style="color: blue"&gt;public event&lt;/span&gt; &lt;span style="color: teal"&gt;PropertyChangedEventHandler&lt;/span&gt; PropertyChanged;                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;156:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt; &lt;span style="color: blue"&gt;protected void&lt;/span&gt; OnPropertyChanged(&lt;span style="color: blue"&gt;string&lt;/span&gt; propertyName)                    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;157:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt; {                                                                        &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;158:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;     if (&lt;span style="color: blue"&gt;this&lt;/span&gt;.PropertyChanged != &lt;span style="color: blue"&gt;null&lt;/span&gt;)                                    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;159:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;        PropertyChanged(&lt;span style="color: blue"&gt;this&lt;/span&gt;, &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;PropertyChangedEventArgs&lt;/span&gt;(propertyName));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;160:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-bottom:1px solid #0A246A; background-color: #D4D5D8;"&gt; }                                                                        &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;161:&lt;/span&gt;     }&lt;br /&gt;&lt;span style="color: gray"&gt;162:&lt;/span&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr noshade color="#808080" size="1" /&gt;&lt;br /&gt;Changes made to class &lt;code&gt;Examinee&lt;/code&gt; of listing 1 are given in code listing 4 above. The &lt;code&gt;INotifyPropertyChanged&lt;/code&gt; interface implementation allows the class to raise the PropertyChanged event everytime a property value changes. The above class can now be instanitated in the code-behind file (see code listing 5 below) of another XAML file (WithoutXAML.xaml) which is similar to that of code listing 2.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-size: 7.5pt"&gt;&lt;br /&gt;&lt;span style="color: green"&gt;     // =========================&lt;br /&gt;     //   Code Listing 5&lt;br /&gt;     //   WithoutXAML.xaml.cs&lt;br /&gt;     // =========================&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;  1:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: gray"&gt;  2:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows;&lt;br /&gt;&lt;span style="color: gray"&gt;  3:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Controls;&lt;br /&gt;&lt;span style="color: gray"&gt;  4:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Data;&lt;br /&gt;&lt;span style="color: gray"&gt;  5:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Documents;&lt;br /&gt;&lt;span style="color: gray"&gt;  6:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Media;&lt;br /&gt;&lt;span style="color: gray"&gt;  7:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Media.Imaging;&lt;br /&gt;&lt;span style="color: gray"&gt;  8:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Shapes;&lt;br /&gt;&lt;span style="color: gray"&gt;  9:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; Demos.WPF.Binding.PropertyChangeNotified;&lt;br /&gt;&lt;span style="color: gray"&gt; 10:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 11:&lt;/span&gt; &lt;span style="color: blue"&gt;namespace&lt;/span&gt; Demos.WPF.Binding&lt;br /&gt;&lt;span style="color: gray"&gt; 12:&lt;/span&gt; {&lt;br /&gt;&lt;span style="color: gray"&gt; 13:&lt;/span&gt;     &lt;span style="color: blue"&gt;public partial class&lt;/span&gt; &lt;span style="color: teal"&gt;WithoutXAML&lt;/span&gt; : &lt;span style="color: teal"&gt;Window&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 14:&lt;/span&gt;     {&lt;br /&gt;&lt;span style="color: gray"&gt; 15:&lt;/span&gt;         &lt;span style="color: teal"&gt;Examinee&lt;/span&gt; oExaminee = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;Examinee&lt;/span&gt;();&lt;br /&gt;&lt;span style="color: gray"&gt; 16:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 17:&lt;/span&gt;         &lt;span style="color: blue"&gt;public &lt;/span&gt; Simple()&lt;br /&gt;&lt;span style="color: gray"&gt; 18:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 19:&lt;/span&gt;             InitializeComponent();&lt;br /&gt;&lt;span style="color: gray"&gt; 20:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 21:&lt;/span&gt;         &lt;br /&gt;&lt;span style="color: gray"&gt; 22:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-top:1px solid #0A246A; background-color: #D4D5D8;"&gt;&lt;span style="color: blue"&gt;private void&lt;/span&gt; WithoutXAML_Load(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: teal"&gt;EventArgs&lt;/span&gt; e) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 23:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;{                                                         &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 24:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;   oExaminee.PropertyChanged += oExaminee_PropertyChanged;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 25:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-bottom:1px solid #0A246A; background-color: #D4D5D8;"&gt;}                                                         &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 26:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 27:&lt;/span&gt;         &lt;span style="color: green"&gt;// Property Changed Event Handler [Pathetic Code!]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 28:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-top:1px solid #0A246A; background-color: #D4D5D8;"&gt;&lt;span style="color: blue"&gt;private void&lt;/span&gt; oExaminee_PropertyChanged(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender,          &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 29:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;                    &lt;span style="color: teal"&gt;PropertyChangedEventArgs&lt;/span&gt; e)                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 30:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;{                                                              &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 31:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;    &lt;span style="color: blue"&gt;switch&lt;/span&gt;(e.PropertyName)                                     &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 32:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;    {                                                          &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 33:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;        &lt;span style="color: blue"&gt;case&lt;/span&gt; &lt;span style="color: maroon"&gt;"FirstName"&lt;/span&gt;:                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 34:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;            txtFirstName.Text = oExaminee.FirstName;           &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 35:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;            break;                                             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 36:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;        &lt;span style="color: blue"&gt;case&lt;/span&gt; &lt;span style="color: maroon"&gt;"LastName"&lt;/span&gt;:                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 37:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;            txtLastName.Text = oExaminee.LastName;             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 38:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;            break;                                             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 39:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;        &lt;span style="color: blue"&gt;case&lt;/span&gt; &lt;span style="color: maroon"&gt;"University"&lt;/span&gt;:                                     &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 40:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;            txtUniversity.Text = oExaminee.University;         &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 41:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;            break;                                             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 42:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;        &lt;span style="color: blue"&gt;case&lt;/span&gt; &lt;span style="color: maroon"&gt;"MarksObtained"&lt;/span&gt;:                                  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 43:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;            txtMarks.Text = oExaminee.MarksObtained.ToString();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 44:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;            break;                                             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 45:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;    }                                                          &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 46:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-bottom:1px solid #0A246A; background-color: #D4D5D8;"&gt;}                                                              &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 47:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 48:&lt;/span&gt;         &lt;span style="color: blue"&gt;private void&lt;/span&gt; btnLoad_Click(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: teal"&gt;EventArgs&lt;/span&gt; e)&lt;br /&gt;&lt;span style="color: gray"&gt; 49:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 50:&lt;/span&gt;             &lt;span style="color: blue"&gt;try&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 51:&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: gray"&gt; 52:&lt;/span&gt;                 oExaminee.RollNo = txtRollNo.Text;&lt;br /&gt;&lt;span style="color: gray"&gt; 53:&lt;/span&gt;                 oExaminee.Load();&lt;br /&gt;&lt;span style="color: gray"&gt; 54:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 55:&lt;/span&gt;             &lt;span style="color: blue"&gt;catch&lt;/span&gt; (&lt;span style="color: teal"&gt;Exception&lt;/span&gt; oEx)&lt;br /&gt;&lt;span style="color: gray"&gt; 56:&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: gray"&gt; 57:&lt;/span&gt;                 &lt;span style="color: teal"&gt;MessageBox&lt;/span&gt;.Show(oEx.Message);&lt;br /&gt;&lt;span style="color: gray"&gt; 58:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 59:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 60:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 61:&lt;/span&gt;         &lt;span style="color: blue"&gt;private void&lt;/span&gt; btnUpdate_Click(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: teal"&gt;EventArgs&lt;/span&gt; e)&lt;br /&gt;&lt;span style="color: gray"&gt; 62:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 63:&lt;/span&gt;             &lt;span style="color: blue"&gt;try&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 64:&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: gray"&gt; 65:&lt;/span&gt;                 oExaminee.Update();&lt;br /&gt;&lt;span style="color: gray"&gt; 66:&lt;/span&gt;                 MessageBox.Show(&lt;span style="color: maroon"&gt;"Information Updated."&lt;/span&gt;, &lt;span style="color: maroon"&gt;"Update"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: gray"&gt; 67:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 68:&lt;/span&gt;             &lt;span style="color: blue"&gt;catch&lt;/span&gt; (&lt;span style="color: teal"&gt;Exception&lt;/span&gt; oEx)&lt;br /&gt;&lt;span style="color: gray"&gt; 69:&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: gray"&gt; 70:&lt;/span&gt;                 &lt;span style="color: teal"&gt;MessageBox&lt;/span&gt;.Show(oEx.Message);&lt;br /&gt;&lt;span style="color: gray"&gt; 71:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 72:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 73:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 74:&lt;/span&gt;         &lt;span style="color: blue"&gt;private void&lt;/span&gt; btnCheck_Click(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: teal"&gt;EventArgs&lt;/span&gt; e)&lt;br /&gt;&lt;span style="color: gray"&gt; 75:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 76:&lt;/span&gt;             &lt;span style="color: blue"&gt;string&lt;/span&gt; str = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: maroon"&gt;"OBJECT:\nFirstName: {0}"&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 77:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nLastName: {1}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 78:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nUniversity: {2}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 79:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nMarksObtained: {3}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 80:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\n\nUI:"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 81:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nFirst Name: {4}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 82:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nLast Name: {5}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 83:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nUniversity: {6}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 84:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nMarksObtained: {7}"&lt;/span&gt;, &lt;br /&gt;&lt;span style="color: gray"&gt; 85:&lt;/span&gt;                 oExaminee.FirstName, &lt;br /&gt;&lt;span style="color: gray"&gt; 86:&lt;/span&gt;                 oExaminee.LastName, &lt;br /&gt;&lt;span style="color: gray"&gt; 87:&lt;/span&gt;                 oExaminee.University, &lt;br /&gt;&lt;span style="color: gray"&gt; 88:&lt;/span&gt;                 oExaminee.MarksObtained.ToString(), &lt;br /&gt;&lt;span style="color: gray"&gt; 89:&lt;/span&gt;                 txtFirstName.Text, &lt;br /&gt;&lt;span style="color: gray"&gt; 90:&lt;/span&gt;                 txtLastName.Text, &lt;br /&gt;&lt;span style="color: gray"&gt; 91:&lt;/span&gt;                 txtUniversity.Text, &lt;br /&gt;&lt;span style="color: gray"&gt; 92:&lt;/span&gt;                 txtMarks.Text);&lt;br /&gt;&lt;span style="color: gray"&gt; 93:&lt;/span&gt;             &lt;span style="color: teal"&gt;MessageBox&lt;/span&gt;.Show(str);&lt;br /&gt;&lt;span style="color: gray"&gt; 94:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 95:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 96:&lt;/span&gt;         &lt;span style="color: blue"&gt;private void&lt;/span&gt; btnAddTen_Click(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;&lt;span style="color: gray"&gt; 97:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 98:&lt;/span&gt;             &lt;span style="color: blue"&gt;if&lt;/span&gt; ((oExaminee.MarksObtained + 10) &gt; 100)&lt;br /&gt;&lt;span style="color: gray"&gt; 99:&lt;/span&gt;                 oExaminee.MarksObtained = 100;&lt;br /&gt;&lt;span style="color: gray"&gt;100:&lt;/span&gt;             &lt;span style="color: blue"&gt;else&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt;101:&lt;/span&gt;                 oExaminee.MarksObtained += 10;&lt;br /&gt;&lt;span style="color: gray"&gt;102:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt;103:&lt;/span&gt;         &lt;br /&gt;&lt;span style="color: gray"&gt;104:&lt;/span&gt;         &lt;span style="color: green"&gt;///////////////////////////////////&lt;br /&gt;&lt;span style="color: gray"&gt;105:&lt;/span&gt;         // WARNING: Pathetic Code below! //&lt;br /&gt;&lt;span style="color: gray"&gt;106:&lt;/span&gt;         // Event-handlers for text-boxes //&lt;br /&gt;&lt;span style="color: gray"&gt;107:&lt;/span&gt;         ///////////////////////////////////&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;108:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt;109:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-top:1px solid #0A246A; background-color: #D4D5D8;"&gt;&lt;span style="color: blue"&gt;private void&lt;/span&gt; txtRollNo_TextChanged(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender,   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;110:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;  &lt;span style="color: teal"&gt;EventArgs&lt;/span&gt; e)   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;111:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;{      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;112:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;    oExaminee.RollNo = txtRollNo.Text;   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;113:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-bottom:1px solid #0A246A; background-color: #D4D5D8;"&gt;}      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;114:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt;115:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-top:1px solid #0A246A; background-color: #D4D5D8;"&gt;&lt;span style="color: blue"&gt;private void&lt;/span&gt; txtFirstName_TextChanged(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender,  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;116:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;  &lt;span style="color: teal"&gt;EventArgs&lt;/span&gt; e)   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;117:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;{      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;118:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;    oExaminee.FirstName = txtFirstName.Text;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;119:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-bottom:1px solid #0A246A; background-color: #D4D5D8;"&gt;}      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;120:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt;121:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-top:1px solid #0A246A; background-color: #D4D5D8;"&gt;&lt;span style="color: blue"&gt;private void&lt;/span&gt; txtLastName_TextChanged(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender,  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;122:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;  &lt;span style="color: teal"&gt;EventArgs&lt;/span&gt; e)   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;123:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;{      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;124:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;    oExaminee.LastName = txtLastName.Text;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;125:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-bottom:1px solid #0A246A; background-color: #D4D5D8;"&gt;}      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;126:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt;127:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-top:1px solid #0A246A; background-color: #D4D5D8;"&gt;&lt;span style="color: blue"&gt;private void&lt;/span&gt; txtUniversity_TextChanged(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender,  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;128:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;  &lt;span style="color: teal"&gt;EventArgs&lt;/span&gt; e)   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;129:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;{      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;130:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;    oExaminee.University = txtUniversity.Text;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;131:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-bottom:1px solid #0A246A; background-color: #D4D5D8;"&gt;}      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;132:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt;133:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-top:1px solid #0A246A; background-color: #D4D5D8;"&gt;&lt;span style="color: blue"&gt;private void&lt;/span&gt; txtMarks_TextChanged(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender,   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;134:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;  &lt;span style="color: teal"&gt;EventArgs&lt;/span&gt; e)   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;135:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;{      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;136:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;    &lt;span style="color: blue"&gt;int&lt;/span&gt; marks = 0;     &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;137:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;    &lt;span style="color: blue"&gt;if&lt;/span&gt; (&lt;span style="color: blue"&gt;int&lt;/span&gt;.TryParse(txtMarks.Text, &lt;span style="color: blue"&gt;out&lt;/span&gt; marks))  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;138:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; background-color: #D4D5D8;"&gt;        oExaminee.MarksObtained = marks;   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;139:&lt;/span&gt;         &lt;span style="border-left:1px solid #0A246A; border-right:1px solid #0A246A; border-bottom:1px solid #0A246A; background-color: #D4D5D8;"&gt;}      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;140:&lt;/span&gt;     }&lt;br /&gt;&lt;span style="color: gray"&gt;141:&lt;/span&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr noshade color="#808080" size="1" /&gt;&lt;br /&gt;Notice that the &lt;code&gt;oExaminee_PropertyChanged&lt;/code&gt; event handler (lines 27 to 46) updates the UI with object values everytime a PropertyChanged event occurs on the &lt;code&gt;Examinee&lt;/code&gt; object. To update the object with UI values, &lt;code&gt;TextChanged&lt;/code&gt; event handlers were added for all the textboxes (see lines 104 to 139).&lt;br /&gt;&lt;br /&gt;Notice also that the "Load" and "Update" button event handlers do not contain the Object-to-UI and UI-to-Object update code as that is now being handles by the event handlers.&lt;br /&gt;&lt;br /&gt;However, just because we implemented the &lt;code&gt;INotifyPropertyChanged&lt;/code&gt; interface in our &lt;code&gt;Examinee&lt;/code&gt; class, we were not absolved of the responsibility to write custom event handlers for the object and UI update logic. The whole point of all the above code is to show the tedious coding required to keep the object and UI in sync.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Using C# and XAML [&lt;code&gt;INotifyPropertyChanged&lt;/code&gt; and XAML]&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;Both the approaches described above were used with typical Windows applications, although I created the form using XAML. The final approach (and the right one at that) uses the Data Binding syntax in XAML, and would show you how easy it is to bind UI elements directly to an object that implements &lt;code&gt;INotifyPropertyChanged&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;To see WPF Data Binding in action, the Binding sytax in the textboxes' "Text" property values. The XAML file would not look something like code listing 6. [Changes from previous XAML file have been highlighted.]&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-size: 7.5pt"&gt;&lt;br /&gt;&lt;span style="color: green"&gt;&lt;br /&gt; &amp;lt;!-- &lt;br /&gt; =========================&lt;br /&gt;    Code Listing 6&lt;br /&gt;    WithXAML.xaml&lt;br /&gt; =========================&lt;br /&gt; --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Window&lt;/span&gt; &lt;br /&gt; &lt;span style="color: red"&gt;x:Class&lt;/span&gt;="&lt;span style="color: blue"&gt;Demos.WPF.Binding.WithXAML&lt;/span&gt;"&lt;br /&gt; &lt;span style="color: red"&gt;xmlns&lt;/span&gt;="&lt;span style="color: blue"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/span&gt;"&lt;br /&gt; &lt;span style="color: red"&gt;xmlns:x&lt;/span&gt;="&lt;span style="color: blue"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/span&gt;"&lt;br /&gt; &lt;span style="color: red"&gt;Title&lt;/span&gt;="&lt;span style="color: blue"&gt;Binding - Using XAML Binding Syntax&lt;/span&gt;" &lt;br /&gt; &lt;span style="color: red"&gt;Height&lt;/span&gt;="&lt;span style="color: blue"&gt;209&lt;/span&gt;" &lt;span style="color: red"&gt;Width&lt;/span&gt;="&lt;span style="color: blue"&gt;371&lt;/span&gt;" &lt;span style="color: red"&gt;Background&lt;/span&gt;="&lt;span style="color: blue"&gt;WhiteSmoke&lt;/span&gt;"&lt;br /&gt; &lt;span style="color: red"&gt;WindowStartupLocation&lt;/span&gt;="&lt;span style="color: blue"&gt;CenterScreen&lt;/span&gt;" &lt;span style="color: red"&gt;Loaded&lt;/span&gt;="&lt;span style="color: blue"&gt;WithXAML_Load&lt;/span&gt;" &lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Grid&lt;/span&gt; &lt;span style="background-color: #FFFF99; border: 1px solid #CC9900"&gt;&lt;span style="color: blue"&gt;x:Name&lt;/span&gt;="&lt;span style="color: red"&gt;myGrid&lt;/span&gt;"&lt;/span&gt; &lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Label&lt;/span&gt; ...&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Roll Number:&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Label&lt;/span&gt; ...&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;First Name:&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Label&lt;/span&gt; ...&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Last Name:&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Label&lt;/span&gt; ...&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;University:&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Label&lt;/span&gt; ...&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Marks:&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt;&lt;br /&gt;     ...&lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;txtRollNo&lt;/span&gt;" &lt;br /&gt;     &lt;span style="background-color: #FFFF99; border: 1px solid #CC9900"&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;="&lt;span style="color: blue"&gt;{Binding Path=RollNo}&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt; &lt;br /&gt;     ...&lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;txtFirstName&lt;/span&gt;" &lt;br /&gt;     &lt;span style="background-color: #FFFF99; border: 1px solid #CC9900"&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;="&lt;span style="color: blue"&gt;{Binding Path=FirstName}&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt;&lt;br /&gt;     ...&lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;txtLastName&lt;/span&gt;" &lt;br /&gt;     &lt;span style="background-color: #FFFF99; border: 1px solid #CC9900"&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;="&lt;span style="color: blue"&gt;{Binding Path=LastName}&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt;&lt;br /&gt;     ...&lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;txtUniversity&lt;/span&gt;" &lt;br /&gt;     &lt;span style="background-color: #FFFF99; border: 1px solid #CC9900"&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;="&lt;span style="color: blue"&gt;{Binding Path=University}&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt;&lt;br /&gt;     ... &lt;br /&gt;     &lt;span style="color: red"&gt;Name&lt;/span&gt;="&lt;span style="color: blue"&gt;txtMarks&lt;/span&gt;" &lt;br /&gt;     &lt;span style="background-color: #FFFF99; border: 1px solid #CC9900"&gt;&lt;span style="color: red"&gt;Text&lt;/span&gt;="&lt;span style="color: blue"&gt;{Binding Path=MarksObtained}&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Button&lt;/span&gt; ...&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Load&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Button&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Button&lt;/span&gt; ...&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Update&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Button&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Button&lt;/span&gt; ...&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Check&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Button&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Button&lt;/span&gt; ...&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;+10&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Button&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Window&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr noshade color="#808080" size="1" /&gt;&lt;br /&gt;The Binding statement added to the XAML above allows you to discard all the event-handlers in the code-behind that were needed before. The function that we wanted from our app is now achievable with a lot less code.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-size: 7.5pt"&gt;&lt;br /&gt;&lt;span style="color: green"&gt;     // =========================&lt;br /&gt;     //   Code Listing 7&lt;br /&gt;     //   WithXAML.xaml.cs&lt;br /&gt;     // =========================&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt;  1:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: gray"&gt;  2:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows;&lt;br /&gt;&lt;span style="color: gray"&gt;  3:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Controls;&lt;br /&gt;&lt;span style="color: gray"&gt;  4:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Data;&lt;br /&gt;&lt;span style="color: gray"&gt;  5:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Documents;&lt;br /&gt;&lt;span style="color: gray"&gt;  6:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Media;&lt;br /&gt;&lt;span style="color: gray"&gt;  7:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Media.Imaging;&lt;br /&gt;&lt;span style="color: gray"&gt;  8:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Shapes;&lt;br /&gt;&lt;span style="color: gray"&gt;  9:&lt;/span&gt; &lt;span style="color: blue"&gt;using&lt;/span&gt; Demos.WPF.Binding.PropertyChangeNotified;&lt;br /&gt;&lt;span style="color: gray"&gt;  10:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 11:&lt;/span&gt; &lt;span style="color: blue"&gt;namespace&lt;/span&gt; Demos.WPF.Binding&lt;br /&gt;&lt;span style="color: gray"&gt; 12:&lt;/span&gt; {&lt;br /&gt;&lt;span style="color: gray"&gt; 13:&lt;/span&gt;     &lt;span style="color: blue"&gt;public partial class&lt;/span&gt; &lt;span style="color: teal"&gt;WithXAML&lt;/span&gt; : &lt;span style="color: teal"&gt;Window&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 14:&lt;/span&gt;     {&lt;br /&gt;&lt;span style="color: gray"&gt; 15:&lt;/span&gt;         &lt;span style="color: teal"&gt;Examinee&lt;/span&gt; oExaminee = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;Examinee&lt;/span&gt;();&lt;br /&gt;&lt;span style="color: gray"&gt; 16:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 17:&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; WithXAML()&lt;br /&gt;&lt;span style="color: gray"&gt; 18:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 19:&lt;/span&gt;             InitializeComponent();&lt;br /&gt;&lt;span style="color: gray"&gt; 20:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 21:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 22:&lt;/span&gt;         &lt;span style="color: blue"&gt;private void&lt;/span&gt; WithXAML_Load(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: teal"&gt;EventArgs&lt;/span&gt; e)&lt;br /&gt;&lt;span style="color: gray"&gt; 23:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 24:&lt;/span&gt;             &lt;span style="background-color: #D4D5D8; border: 1px solid #0A246A"&gt;myGrid.DataContext = oExaminee;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 25:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 26:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 27:&lt;/span&gt;         &lt;span style="color: blue"&gt;private void&lt;/span&gt; btnAddTen_Click(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: teal"&gt;EventArgs&lt;/span&gt; e)&lt;br /&gt;&lt;span style="color: gray"&gt; 28:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 29:&lt;/span&gt;             &lt;span style="color: blue"&gt;if&lt;/span&gt; ((oExaminee.MarksObtained + 10) &gt; 100)&lt;br /&gt;&lt;span style="color: gray"&gt; 30:&lt;/span&gt;                 oExaminee.MarksObtained = 100;&lt;br /&gt;&lt;span style="color: gray"&gt; 31:&lt;/span&gt;             &lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 32:&lt;/span&gt;                 oExaminee.MarksObtained += 10;&lt;br /&gt;&lt;span style="color: gray"&gt; 33:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 34:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 35:&lt;/span&gt;         &lt;span style="color: blue"&gt;private void&lt;/span&gt; btnLoad_Click(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: teal"&gt;EventArgs&lt;/span&gt; e)&lt;br /&gt;&lt;span style="color: gray"&gt; 36:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 37:&lt;/span&gt;             &lt;span style="color: blue"&gt;try&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 38:&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: gray"&gt; 39:&lt;/span&gt;                 oExaminee.Load();&lt;br /&gt;&lt;span style="color: gray"&gt; 40:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 41:&lt;/span&gt;             &lt;span style="color: blue"&gt;catch&lt;/span&gt; (&lt;span style="color: teal"&gt;Exception&lt;/span&gt; oEx)&lt;br /&gt;&lt;span style="color: gray"&gt; 42:&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: gray"&gt; 43:&lt;/span&gt;                 &lt;span style="color: teal"&gt;MessageBox&lt;/span&gt;.Show(oEx.Message);&lt;br /&gt;&lt;span style="color: gray"&gt; 44:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 45:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 46:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 47:&lt;/span&gt;         &lt;span style="color: blue"&gt;private void&lt;/span&gt; btnUpdate_Click(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: teal"&gt;EventArgs&lt;/span&gt; e)&lt;br /&gt;&lt;span style="color: gray"&gt; 48:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 49:&lt;/span&gt;             &lt;span style="color: blue"&gt;try&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 50:&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: gray"&gt; 51:&lt;/span&gt;                 oExaminee.Update();&lt;br /&gt;&lt;span style="color: gray"&gt; 52:&lt;/span&gt;                 &lt;span style="color: teal"&gt;MessageBox&lt;/span&gt;.Show(&lt;span style="color: maroon"&gt;"Information Updated."&lt;/span&gt;, &lt;span style="color: maroon"&gt;"Update"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: gray"&gt; 53:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 54:&lt;/span&gt;             &lt;span style="color: blue"&gt;catch&lt;/span&gt; (&lt;span style="color: teal"&gt;Exception&lt;/span&gt; oEx)&lt;br /&gt;&lt;span style="color: gray"&gt; 55:&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: gray"&gt; 56:&lt;/span&gt;                 &lt;span style="color: teal"&gt;MessageBox&lt;/span&gt;.Show(oEx.Message);&lt;br /&gt;&lt;span style="color: gray"&gt; 57:&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: gray"&gt; 58:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 59:&lt;/span&gt; &lt;br /&gt;&lt;span style="color: gray"&gt; 60:&lt;/span&gt;         &lt;span style="color: blue"&gt;private void&lt;/span&gt; btnCheck_Click(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: teal"&gt;EventArgs&lt;/span&gt; e)&lt;br /&gt;&lt;span style="color: gray"&gt; 61:&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: gray"&gt; 62:&lt;/span&gt;             &lt;span style="color: blue"&gt;string&lt;/span&gt; str = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: maroon"&gt;"OBJECT:\nFirstName: {0}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 63:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nLastName: {1}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 64:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nUniversity: {2}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 65:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nMarksObtained: {3}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 66:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\n\nUI:"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 67:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nFirst Name: {4}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 68:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nLast Name: {5}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 69:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nUniversity: {6}"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 70:&lt;/span&gt;                 + &lt;span style="color: maroon"&gt;"\nMarksObtained: {7}",&lt;/span&gt;&lt;br /&gt;&lt;span style="color: gray"&gt; 71:&lt;/span&gt;                 oExaminee.FirstName,&lt;br /&gt;&lt;span style="color: gray"&gt; 72:&lt;/span&gt;                 oExaminee.LastName,&lt;br /&gt;&lt;span style="color: gray"&gt; 73:&lt;/span&gt;                 oExaminee.University,&lt;br /&gt;&lt;span style="color: gray"&gt; 74:&lt;/span&gt;                 oExaminee.MarksObtained.ToString(),&lt;br /&gt;&lt;span style="color: gray"&gt; 75:&lt;/span&gt;                 txtFirstName.Text,&lt;br /&gt;&lt;span style="color: gray"&gt; 76:&lt;/span&gt;                 txtLastName.Text,&lt;br /&gt;&lt;span style="color: gray"&gt; 77:&lt;/span&gt;                 txtUniversity.Text,&lt;br /&gt;&lt;span style="color: gray"&gt; 78:&lt;/span&gt;                 txtMarks.Text);&lt;br /&gt;&lt;span style="color: gray"&gt; 79:&lt;/span&gt;             &lt;span style="color: teal"&gt;MessageBox&lt;/span&gt;.Show(str);&lt;br /&gt;&lt;span style="color: gray"&gt; 80:&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: gray"&gt; 81:&lt;/span&gt;     }&lt;br /&gt;&lt;span style="color: gray"&gt; 82:&lt;/span&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr noshade color="#808080" size="1" /&gt;&lt;br /&gt;The only change occured in line 24 in the &lt;code&gt;WithXAML_Load&lt;/code&gt; event handler; the &lt;code&gt;Examinee&lt;/code&gt; object was assigned to the main Grid's DataContext property. The highlighted statement in code listing 7 above defines a data context for the Grid, the UI element that encloses all the other UI controls. WPF introduces the concept of "Dependency Properties" that enables a XAML UI element to inherit a value from its parent UI control (in this case the grid). Once the data context is set in the form load event, the &lt;code&gt;{Binding Path=...}&lt;/code&gt; statements in XAML simply retrieve the values from the bound object or resource and place them in the target textbox. If you run the application now, everytime you change the value in a textbox, the corresponding value in the object changes (You can test this by clicking the "Check" button after you update the value in a textbox). Same holds true for the object. If you click the "+10" (btnAddTen) button, the value in the object is incremented by 10. However, you will also see that the value is automatically updated in the textbox as well.&lt;br /&gt;&lt;br /&gt;Try the above, and feel free to ask any questions that you may have. I have really outdone myself with this post. I guess I am all set to write a book now.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Download source code from &lt;a href="http://groups.yahoo.com/group/coredotnet/files/Window%20Presentation%20Foundation/Demos.WPF.Binding.zip"&gt;here&lt;/a&gt;.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-114750249940055512?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/114750249940055512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=114750249940055512' title='54 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114750249940055512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114750249940055512'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/05/wpf-data-binding-tutorial.html' title='WPF Data Binding Tutorial'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>54</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-114657078001769829</id><published>2006-05-02T16:41:00.000+05:00</published><updated>2006-05-02T21:32:08.250+05:00</updated><title type='text'>Developing Speech Applications - Part II</title><content type='html'>ASP.NET Speech applications developed using the Microsoft Speech Application SDK (SASDK) resemble typical ASP.NET applications in terms of their programming and exection model. Hence, it is extremely easy for web developers to use their existing skill set to develop speech applications from scratch, or use their existing ASP.NET code to speech enable a previously developed project.&lt;br /&gt;&lt;br /&gt;In &lt;a href="http://www.pkblogs.com/coredotnet/2006/03/developing-speech-applications-part-i_27.html"&gt;Part I&lt;/a&gt;, I slightly touched upon the type of speech applications i.e. Voice-Only and Multi-modal, that you can develop using the SASDK. The diagram below would give you some idea about how ASP.NET Speech apps differ from the traditional ASP.NET web apps.&lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center" src="http://photos1.blogger.com/blogger/3715/638/1600/SpeechAppTypes.gif" border="0" alt="Application Types" /&gt;&lt;br /&gt;The only difference between a typical web app, a voice-only speech app, and a multi-modal speech app is the top layer that the user interacts with. In the typical ASP.NET web application (left-most in the figure), the GUI simply comprises one or more web forms containing text-boxes, combo-boxes, images, plain-text etc.  In a multi-modal speech applicaion (right-most), the user, although interacts with the application through the GUI (web forms displayed in a browser), can also use voice commands to make selections in combo-boxes, speak text into a text-box, etc. In both of these scenarios (typical web application and multi-modal speech application), the web form loads into the user's browser in response to a request sent by the client to the web server. A voice-only speech app (middle of diagram), is different from the previous two in that it does not have a GUI that a user can interact with; nor does it load into a web browser on the client user's PC. The voice-only application user interacts with the app through a telephone using her voice or touch-tone (DTMF), with the speech application running on a remote server. The output is also in the form of voice, which the user hears on her phone. It is important to note that in the voice-only application scenario, the speech app is infact running in a web browser (like all ASP.NET applications) on the server, but the loaded web pages are composed of &lt;a href="http://www.saltforum.org"&gt;SALT&lt;/a&gt; instead of HTML tags. Also, while the ASP.NET portion of the application is hosted in IIS, the task of receiving the call and transferring voice commands and responses between the telephone line and the app rests with Microsoft Speech Server (MSS).&lt;br /&gt;&lt;br /&gt;To start off, lets look at a typical ASP.NET application first. The figure below provides an overview of how your everyday ASP.NET web app works.&lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center" src="http://photos1.blogger.com/blogger/3715/638/1600/AppTypicalWeb.gif" border="0" alt="Typical ASP.NET Application" /&gt;&lt;br /&gt;The series of steps/events shown in the above diagram are:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;Request sent from a web form loaded into the client's web browser.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Request processed.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Query sent to database.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Query results returned to the application.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Response generated and sent to the requesting web browser.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Keeping the above in mind, lets take a look at our FlightEnquiry.NET voice-only ASP.NET speech application. &lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center" src="http://photos1.blogger.com/blogger/3715/638/1600/AppSpeech.gif" border="0" alt="Voice Only ASP.NET Speech Application" /&gt;&lt;br /&gt;On an abstract level,  the application works like this.&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;The user calls the FlightEnquiry.NET application from her phone. The app picks up the phone, plays a welcome prompt, and asks the user for the Flight she wants to enquire about.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;The caller speaks the flight number.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;[...]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;[...]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;[...]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;[...]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;[...]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;[...]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;[...]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;[...]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;[...]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;The application tells the caller the status of the flight and the call is disconnected.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;The reason I left out points 3 to 11 was because they are hidden from the caller and mainly involve processing done by the application. Lets now look at the technical details of the FlightEnquiry.NET speech demo.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Step 1:&lt;/u&gt;&lt;br /&gt;When the phone call is received, Microsoft Speech Server answers the phone by playing a pre-recorded prompt. This prompt could be a recorded voice or that coming from a Text-to-Speech (TTS) Engine.&lt;br /&gt;&lt;i&gt;The FightEnquiry.NET application played the prompt, "Welcome to FlightEnquiry Dot Net. Please say the Airline Name and Flight Number."&lt;/i&gt;&lt;br /&gt;&lt;hr noshade color="#C0C0C0" size="1" /&gt;&lt;br /&gt;&lt;u&gt;Step 2:&lt;/u&gt;&lt;br /&gt;The caller speaks the flight name and number she wants to enquire about.&lt;br /&gt;&lt;i&gt;Depending on how flexible your have built your app, the caller can say the Flight Name and Number in a number of ways; Pakistan International Airlines PK 347, Pakistan International Airlines 347, PIA 347, PK 347, PIA Flight 347, PIA Flight PK 347, etc.&lt;/i&gt;&lt;br /&gt;&lt;hr noshade color="#C0C0C0" size="1" /&gt;&lt;br /&gt;&lt;u&gt;Step 3:&lt;/u&gt;&lt;br /&gt;The spoken input is validated against a grammar rule. All grammar rules exist inside a separate *.srgs file that contains the XML for the grammar. In order to allow the caller to answer in a number of possible ways, the grammar should take into consideration the maximum number of possibilities that the caller can say in response to a played prompt. The result of the grammar validation is plain XML within a SML (Semantic Markup Language) tag.&lt;br /&gt;&lt;i&gt;The resultant SML for the FlightEnquiry.NET app looks like this:&lt;/i&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;SML&amp;gt;&lt;br /&gt;  &amp;lt;FlightNumber&amp;gt;PK347&amp;lt;/FlightNumber&amp;gt;&lt;br /&gt;&amp;lt;/SML&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;hr noshade color="#C0C0C0" size="1" /&gt;&lt;br /&gt;&lt;u&gt;Step 4:&lt;/u&gt;&lt;br /&gt;Values can be extracted from the generated SML using an XPath query that you specified during application development. The extracted value is then stored in an object variable called a semantic item. Each semantic item can hold only one value. A semantic item is simply a server control that can be shared between the browser and ASP.NET application.&lt;br /&gt;&lt;i&gt;The value "PK347" we got from the generated SML is stored in a semantic item called "siFlightNumber".&lt;/i&gt;&lt;br /&gt;&lt;hr noshade color="#C0C0C0" size="1" /&gt;&lt;br /&gt;&lt;u&gt;Step 5:&lt;/u&gt;&lt;br /&gt;Once the value is stored in the semantic item, it is submitted to the server. The value of the semantic item can be accessed inside the browser using JavaScript through its value property, i.e. siFlightNumber.value. However, on the server, the semantic item's value is accessed using the Text property, i.e. siFlightNumber.Text.&lt;br /&gt;&lt;hr noshade color="#C0C0C0" size="1" /&gt;&lt;br /&gt;&lt;u&gt;Step 6:&lt;/u&gt;&lt;br /&gt;As with any typical ASP.NET web application, the request is processed.&lt;br /&gt;&lt;hr noshade color="#C0C0C0" size="1" /&gt;&lt;br /&gt;&lt;u&gt;Step 7:&lt;/u&gt;&lt;br /&gt;The database is queried for the flight's status.&lt;br /&gt;&lt;hr noshade color="#C0C0C0" size="1" /&gt;&lt;br /&gt;&lt;u&gt;Step 8:&lt;/u&gt;&lt;br /&gt;Query results are returned back to the application.&lt;br /&gt;&lt;hr noshade color="#C0C0C0" size="1" /&gt;&lt;br /&gt;&lt;u&gt;Step 9:&lt;/u&gt;&lt;br /&gt;The Flight status is now returned, again as a semantic item back to the client.&lt;br /&gt;&lt;hr noshade color="#C0C0C0" size="1" /&gt;&lt;br /&gt;&lt;u&gt;Step 10:&lt;/u&gt;&lt;br /&gt;In order to play the Flight's status back to the caller, a client-side JavaScript code written at the time of development formats the status it receives in the form of a semantic item from the server. This JavaScript code resides inside a prompt function (*.pf) file  that contains both XML and JavaScript, and converts the status into a form that can be spoken back to the caller.&lt;br /&gt;&lt;hr noshade color="#C0C0C0" size="1" /&gt;&lt;br /&gt;&lt;u&gt;Step 11:&lt;/u&gt;&lt;br /&gt;The prompt function returns a string that would be spoken either by the TTS or would be generated from pre-recorded prompts and played to the caller i.e. &lt;i&gt;Pakistan International Airlines Flight P K three four seven from Karachi to Lahore departing six thirty and arriving wight fourty is on schedule. Thank you for calling Flight Enquiry Dot Net.&lt;/i&gt;&lt;br /&gt;&lt;hr noshade color="#C0C0C0" size="1" /&gt;&lt;br /&gt;&lt;u&gt;Step 12:&lt;/u&gt;&lt;br /&gt;The callers hears the TTS/prompt voice and the call ends.&lt;br /&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Whew! Hopefully, I have been able to explain how my FlightEnquiry.NET demo works in this post. I would be covering the steps for speech-enabling the FlightEnquiry.NET application in my next post, the last of this series on developing speech application using Microsoft SASDK. Comments and feedback are always welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-114657078001769829?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/114657078001769829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=114657078001769829' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114657078001769829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114657078001769829'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/05/developing-speech-applications-part-ii.html' title='Developing Speech Applications - Part II'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-114582264136404642</id><published>2006-04-24T00:52:00.000+05:00</published><updated>2006-04-24T01:04:01.376+05:00</updated><title type='text'>In all its Glory!</title><content type='html'>&lt;img style="display:block; margin:0px auto 10px; text-align:center;" src="http://photos1.blogger.com/blogger/3715/638/1600/isb_PMSecretariat.gif" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Pakistan's capital Islamabad is ranked as the most beautiful capital city in the region. The picture above show the Prime Minister's Secretariat decorated with lights (as were many buildings in Islamabad) because of a religious holiday; Eid Milad-un-Nabi, Prophet Muhammad's birthday.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Last week was monumental. Firstly, fellow MVP, Country Leader INETA Pakistan, and good friend &lt;a href="http://msaqib.blogspot.com"&gt;Saqib Ilyas&lt;/a&gt; got married. I couldn't attend because I was in Islamabad. Anyway, best wishes for him and his wife. My reason for visiting Islamabad  was to conduct events at 4 universities; Mohammad Ali Jinnah University (MAJU), FAST, Allama Iqbal Open University (AIOU), and COMSATS Institute of Information Technology (CIIT); all in a span of 1 week. This time around, I was fortunate to be presenting with some very talented and young individuals from Islamabad. Tenoon Raza and Salma Nasir from Microsoft Islamabad office presented at the first 2 presentations each, and the latest edition to the Pakistani MVP Community, Ahmed Salam, presented at the remaining two.&lt;br /&gt;&lt;br /&gt;Islamabad always charges me up. I look forward to going back soon.&lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;" src="http://photos1.blogger.com/blogger/3715/638/1600/isb_MVP_CMS.1.jpg" border="0" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-114582264136404642?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/114582264136404642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=114582264136404642' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114582264136404642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114582264136404642'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/04/in-all-its-glory.html' title='In all its Glory!'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-114418052716196533</id><published>2006-04-05T00:49:00.000+05:00</published><updated>2006-12-20T13:07:49.123+05:00</updated><title type='text'>UX Article</title><content type='html'>My article on User eXperience published in &lt;a href="http://www.microsoft.com/betaexperience/en/newsletter.aspx"&gt;The Beta Experience&lt;/a&gt; Newsletter 2.&lt;br /&gt;&lt;br /&gt;Check it out &lt;a target="_blank" href="http://www.microsoft.com/betaexperience/nlarchive/bexp2/issue_2/userexperience.aspx"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-114418052716196533?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/114418052716196533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=114418052716196533' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114418052716196533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114418052716196533'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/04/ux-article.html' title='UX Article'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-114340463351475099</id><published>2006-03-27T01:20:00.001+05:00</published><updated>2006-03-27T01:23:53.536+05:00</updated><title type='text'>Developing Speech Applications - Part I</title><content type='html'>&lt;i&gt;Haven't blogged, or conducted a session, about Speech Technologies (my second love) and the Microsoft Speech Application SDK (SASDK) for quite sometime. However, I have received a lot of requests for the SASDK tutorial on FlightEnquiry.NET Speech Demo that I showed at the Microsoft ISV Community Days in March 2005, Pakistan Developer Conference 2005 in June 2005, and at various &lt;a href="http://mea.ineta.org/pakistan/"&gt;INETA Pakistan&lt;/a&gt; user group events last year. I have figured that it is better to blog about something in a series of posts, as opposed to trying to type one HUGE post and be absent from the blogging world for days and weeks. So, if time and old age permit, I will hopefully try to blog about the SASDK tutorial in 3 posts. (I will try to keep the "Atlas at last" posts coming during this time too.)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;NOTE: Most of the following text had been written about 8 months ago.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;BACKGROUND&lt;/b&gt;&lt;br /&gt;When ASP.NET first appeared on the horizon, most of us heaved a sigh a relief; No more having to work with ASP's two separate languages, VBScript on the server and JavaScript on the client; no spaghetti code; and most importantly, no need to worry about posting data back on to the form when it reloaded. With a number of cool ASP.NET server controls, life had been made simpler for the Web Developer. In a sense, for a brief moment in time, ASP Developers (who had shifted to ASP.NET) forgot all about JavaScript, since all ASP.NET controls had client-side logic built into it. The burden of writing JavaScript (or JScript) code had shifted from the Web Application Developer to the ASP.NET Server Control developer.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;INTRODUCTION&lt;/b&gt;&lt;br /&gt;Enter Microsoft Speech Application SDK (SASDK). Suddenly, client-side scripting became relevant again. Speech Applications built with the SASDK were browser-based ASP.NET applications with much of the handling done at the client i.e. web-browser. In making their Speech platform compatible with ASP.NET, Microsoft had 2 objectives: (1) to allow companies to use their existing ASP.NET code infrastructure in developing Speech apps; and (2) to make use of SALT (Speech Application Language Tags), a standard for providing speech input and output in the web-browser using tags. In various talks and speaker session, I have repeatedly been asked if the Microsoft SASDK would speech-enable websites or allow voice-activated web browsing. My answer: yes and no, depending on the type of platform you are developing the speech application for. &lt;br /&gt;&lt;br /&gt;A Speech Application developed using the Microsoft SASDK can be in either one of two categories; (1) Voice-only (2) Multi-Modal. Both application types leverage existing ASP.NET code but differ in implementation. Voice-only applications have a VUI (Voice User Interface) and no GUI i.e. all communication between the app and the user is by means of voice or DTMF (Dual-Tone Multi-Frequency) that may be transferred over a telephone line or any other voice carrier medium. Multi-Modal applications, on the other hand, have a VUI as well as a GUI. This allows the user to interact with the application using voice as well as with the mouse and keyboard. The use of Voice-only telephony applications is understandable, but why use Multi-Modal? Fact of the matter is that the bulk of Multi-Modal applications that would be developed within the next few years won't be for the desktop PC, but would instead be for Mobile and Smart Clients. PC users typically have all the hardware they need, namely the keyboard and mouse, to interact with their applications. However, it is difficult to use Mobile/Smart Client application because of the small keypad or even stylus while on the road. Microsoft's release of the Mobile Internet Toolkit did not really bring about increased development of Mobile applications as many would have expected because mobile or smart client applications are extremely difficult to use because of the small size of the device they are running on. Speech-enabled Mobile or Smart Client applications require minimal use of the keypad or stylus and rely more on speech for input (and even output), thus providing increased ease-of-use. &lt;b&gt;[NOTE: Multi-modal applications failed to take-off in a way that Microsoft had exepected. The Speech API (SAPI) 5.3 that comes built into Windows Vista would allow development of desktop speech applications and DOES NOT make use of SALT. You can download a video of the Multi-modal Speech Application (Sublime Demo) running on a hand-held device from &lt;a href="http://www.cs.cmu.edu/~jsherwan/"&gt;Jahanzeb Sherwani's web page&lt;/a&gt;.]&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The execution model followed by an application developed using the SASDK is somewhat the same as any ASP.NET application, consisting mainly of a certain number of requests and responses. However, the client-side processing done for a speech application is different. In a typical web form (non-speech app) scenario, information is submitted to the server through form controls (textboxes, checkboxes, radio buttons etc.) which form the GUI. In speech applications, input is received by the a speech control that is not visually rendered but is in fact hosted inside a web page using the tag from SALT specification. When a voice input is received, it is processed on the client by JScript, meaningful information is extracted and sent to the server by means of a variable known in the SASDK domain as a "semantic item". The importance of JScript that I highlighted at the start of this article stems from this client side processing of the speech input. This scenario is valid for both, Voice-only and Multi-modal Speech applications. For more information on SALT, check out the &lt;a href="http://www.saltforum.org"&gt;SALT Forum&lt;/a&gt; web site. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Please note that in order for Internet Explorer to interpret SALT tags, you need to have Microsoft Enterprise Instrumentation Framework (EIF) installed on your PC. EIF is a pre-requisite and comes with the SASDK. Also, SASDK v1.0 and v1.1 work only with .NET Framework 1.1 and Visual Studio.NET 2003.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In the second part of this 3 part series of posts, I will briefly discuss the series of functions performed during the execution of a typical Voice-only application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-114340463351475099?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/114340463351475099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=114340463351475099' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114340463351475099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114340463351475099'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/03/developing-speech-applications-part-i_27.html' title='Developing Speech Applications - Part I'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-114305931027697198</id><published>2006-03-23T01:23:00.000+05:00</published><updated>2006-03-23T01:33:20.033+05:00</updated><title type='text'>Atlas at last! - Part I</title><content type='html'>&lt;i&gt;The great thing about being a Microsoft MVP is that you are always out to learn new tools, technologies, tips, and tricks, in anticipation of being asked a technical question on any forum regardless of what your competencies actually are. Not only does gaining knowledge benefit MVPs themselves; it also lets them share that knowledge, expertise, and experience to the developer community at large. I simply love doing it, and I am glad that I too am finally blogging about AJAX and Atlas after so many of my fellow -MVPs and -bloggers around the world have already done so. I hope to blog about Atlas, as I have understood it, in a series of posts.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;You might have been hearing and reading a lot about Web 2.0 lately. If you haven't heard about it, and you apparently live in a cave (as the saying goes) check out an indepth article on it &lt;a href="http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;AJAX is all about JavaScript as it involves using the &lt;a href="http://en.wikipedia.org/wiki/Xmlhttp"&gt;XmlHTTP&lt;/a&gt; object built into your web browser, and has been a part of the browser since 1998. I dont think a lot web developers would want to get down to writing AJAX apps using directly the XmlHttp object, and would instead rely on pre-built libraries that leverage XmlHTTP. If you happen to be an ASP.NET developer (and you probably are), you need to get hold of &lt;a href="http://atlas.asp.net"&gt;Atlas&lt;/a&gt;, the client and server-side libraries and controls for building AJAX applications from Microsoft. Since Atlas has not been finally released, you might have to do a lot of JavaScript coding yourself. The thing with working with JavaScript is that when you are getting down and dirty writing code in a language that you usually do not program in, and reluctantly learning many of the details of client-side scripting that you are not accustomed to or atleast did not care about previously, you are bound to get an error once in a while. Many times, the line of code that is marked as being the culprit for the error is not actually the one that has something wrong with it. Since you might not get a lot of Intellisense and debugging support in the VS IDE for client-side scripts (although Microsoft is working to change that in future), there are a couple of things that I recommend you do when you encounter a JavaScript error.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;Pray that you are able to solve the problem within the next hour. [Optional]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Go and have a glass of water. [Mandatory]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Take a deep breath and relax. [Mandatory]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Empty your web-browser's cache. [Optional]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Go over your script's code, one statement at a time, to ensure that you did not mis-spell anything. Check variable and function names. Do not assume that your typing skills are excellent. You could be great, but that changes when you are typing JavaScript code. DO IT! [Mandatory]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;REMEMBER, JavaScript is case-sensitive, so &lt;code&gt;textbox&lt;/code&gt; is not the same as &lt;code&gt;textBox&lt;/code&gt;. [Mandatory]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Use the JavaScript 'alert' function judiciously to display values in a browser dialog box, to ensure variable values are what you think they are at a particular point in your code. [Mandatory]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;There is NOTHING wrong with the Atlas client libraries (*.js files inserted into the project when an Atlas website is created); so if you get an error at, lets say, line no. 1554, check to see if you have closed all Atlas tags correctly. [Mandatory]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;IE would do just so much to let you know the line of code that has the error. It is highly likely that the line marked with having the error is perfectly alright. Check to see if that line in followed by a function-call statement. If it is, go to point no. 5 and start debugging that function. [Mandatory]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;REMEMBER, AJAX/Atlas involves calling web services asynchronously. Every web service call must also specify a call-back function, which is executed when the service finishes executing and returns data back to the browser.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;When you get an error on the JavaScript statement calling a web service, be sure to debug the call-back function (the function that executes once the web service returns the results of its execution). [Mandatory]&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;There are more indepth tutorials and technical stuff that I would cover in my future "Atlas at last" posts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-114305931027697198?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/114305931027697198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=114305931027697198' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114305931027697198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/114305931027697198'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/03/atlas-at-last-part-i.html' title='Atlas at last! - Part I'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-113973898315187206</id><published>2006-02-12T15:06:00.000+05:00</published><updated>2006-02-12T15:09:43.173+05:00</updated><title type='text'>Book on MS Speech Server</title><content type='html'>I can hardly wait.&lt;br /&gt;&lt;a href="http://msmvps.com/blogs/williamryan/archive/2006/01/25/81837.aspx"&gt;http://msmvps.com/blogs/williamryan/archive/2006/01/25/81837.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-113973898315187206?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/113973898315187206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=113973898315187206' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113973898315187206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113973898315187206'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/02/book-on-ms-speech-server.html' title='Book on MS Speech Server'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-113933174092671901</id><published>2006-02-07T21:53:00.000+05:00</published><updated>2006-02-07T22:04:57.613+05:00</updated><title type='text'>Google on IE7 NOW!</title><content type='html'>It literally took ages for the good people at Microsoft to realize the importance of search, and they only came out with their search engine once Google's domination of the search market was complete; their time to respond to this reality being horribly slow.&lt;br /&gt;&lt;br /&gt;I had (finally) started using MSN Search for the past few days, ever since I downloaded and installed Internet Explorer 7 Beta 2, as it provided the MSN Search textbox on the top-right side of the window without having to visit a particular webpage to enter the search query. Not any more. Today, as I typed www.google.com.pk in my IE7 web browser, the Google search page had a new addition on the top-right hand corner of the page, prompting me to make Google the search engine in IE. I clicked the "Make Google my search" button and the 13.6 KB download instantly added the Google search option to a web browser that is still in its Beta. Talk about quick response. What's in-store for Web 2.0, I wonder? The good people of Google are swift.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/3715/638/1600/googleIE.2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3715/638/320/googleIE.2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;" src="http://photos1.blogger.com/blogger/3715/638/1600/googleIE2.jpg" border="0" alt="" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-113933174092671901?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/113933174092671901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=113933174092671901' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113933174092671901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113933174092671901'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/02/google-on-ie7-now.html' title='Google on IE7 NOW!'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-113912690991975211</id><published>2006-02-05T12:58:00.000+05:00</published><updated>2006-02-05T13:08:29.936+05:00</updated><title type='text'>Enter Sparkle</title><content type='html'>I just can't get enough of the UX enhancements. Cider, the Visual Designer for XAML is brilliant. However, with the release of Microsoft Interactive Designer (aka Sparkle) CTP for January 2006, designers can get excited too. Firstly, don't be fooled by the design environment that looks a lot like Macromedia Flash. Sparkle is totally different. Its not just draw, drag and drop. The ability to zoom not just the scene you are drawing, but also the design/development environment panels is truely remarkable. &lt;br /&gt;&lt;br /&gt;Secondly, anyone using the Interactive Designer must take into account the object hierarcy that is formed when you create an object or UI element on the scene/window. This entails that you explicitly activate a drawn element by double clicking it in the timeline panel (NOT on the design surface), and then droping another element onto it, to make the latter the former's child in the hierarchy. This hierarchical element tree allows child elements to be bound to a field in a data context bound to the parent element, instead of having to create and bind individual data contexts for elements.&lt;br /&gt;&lt;br /&gt;Lastly, designers and developers can work on the same project using different development environments, i.e. VS 2005 (with WinFX installed), and Sparkle interactive designer. Although, coding support is available in Sparkle, it was never built for development, just for designing.&lt;br /&gt;&lt;br /&gt;After playing around with the Fabrikam Catalog Application tutorials, I was ready to create a small Contacts application on my own; not exactly rocket science, but a beauty indeed!&lt;br /&gt;&lt;br /&gt;[Click on images to view a larger version]&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/3715/638/1600/AddressBook.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3715/638/320/AddressBook.jpg" border="0" alt="Address Book Application" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/3715/638/1600/AddressBook_Sparkle.4.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3715/638/320/AddressBook_Sparkle.11.jpg" border="0" alt="Address Book Application in the Expression Interactive Designer" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/3715/638/1600/AddressBook_Cider.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3715/638/320/AddressBook_Cider.jpg" border="0" alt="Address Book Application in Visual Studio 2005" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-113912690991975211?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/113912690991975211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=113912690991975211' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113912690991975211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113912690991975211'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/02/enter-sparkle.html' title='Enter Sparkle'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-113912870842939473</id><published>2006-02-04T23:27:00.000+05:00</published><updated>2006-02-05T23:34:45.453+05:00</updated><title type='text'>LAUNCHED!</title><content type='html'>The SQL Server 2005/VS2005 Launch event at NED today was a smash hit! What makes user group events really exciting is the enthusiasm of the audience, and at the NED University of Engineering and Technology, excitement is not hard to muster, and my experience as speaker there is always one to blog about. Great work NEDians!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/3715/638/1600/launch01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3715/638/320/launch01.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/3715/638/1600/launch02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3715/638/320/launch02.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/3715/638/1600/launch03.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3715/638/320/launch03.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-113912870842939473?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/113912870842939473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=113912870842939473' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113912870842939473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113912870842939473'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/02/launched.html' title='LAUNCHED!'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-113891693377178468</id><published>2006-02-03T02:40:00.000+05:00</published><updated>2006-02-03T02:48:53.816+05:00</updated><title type='text'>Whats Cookin', Good Lookin'?</title><content type='html'>User eXperience, it seems, is everywhere. Even before the release of Windows Vista, apps have already started to look and feel a lot like those Windows Vista. Firstly, MSN Messenger 8.0 Beta gives a feel of the Vista Search capabilities/experience by short-listing entries in a list as the use types in the search-box. Yahoo also seems to have jumped on the UX bandwagon. &lt;a href="http://widgets.yahoo.com"&gt;Yahoo widgets&lt;/a&gt; have a glass-style user experience similar to that of Vista. Here's a screenshot of both apps I just mentioned, captured off my desktop.&lt;br /&gt;&lt;br /&gt;[Click on images below to view a larger version.]&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/3715/638/1600/UX_MSNMessenger.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3715/638/200/UX_MSNMessenger.jpg" border="0" alt="Windows Live Messenger" /&gt;&lt;/a&gt;&lt;a href="http://photos1.blogger.com/blogger/3715/638/1600/UX_YahooWidgets.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3715/638/200/UX_YahooWidgets.jpg" border="0" alt="Yahoo Widgets" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-113891693377178468?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/113891693377178468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=113891693377178468' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113891693377178468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113891693377178468'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/02/whats-cookin-good-lookin.html' title='Whats Cookin&apos;, Good Lookin&apos;?'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-113622688352623269</id><published>2006-01-02T23:31:00.000+05:00</published><updated>2006-01-02T23:34:43.550+05:00</updated><title type='text'>Technology's New Year Resolutions</title><content type='html'>Here is how I think technology will change and the way we live, work, travel, communicate, and think in 2006.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt; &lt;br /&gt;  &lt;li&gt;In: Services; Out: Web Services&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;The new paradigm will be &lt;b&gt;Service-Orientation&lt;/b&gt;. We will see a clear distinction between infrastructure providers and service/content providers. Devices such as cellphones, digital camera, laptops, PDAs, televisions, CD/DVD Players would be able to connect to the Internet and consume services.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;The cell phone has achieved greater penetration than anyone had previosuly imagined, even more than the Internet. The move will be towards telephony applications accessed through voice, or using mobiles/handheld devices.&lt;li&gt;&lt;br /&gt;  &lt;li&gt;The convergence of Internet and Telephones/Cell-phones would usher in a new era of Speech applications, which would become more accurate and mainstream.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Technology will become more accessible to the less priviledged around the world with the release of MIT's $100 laptop, bringing world-class pornography to children even in remote villages, since they wont know what else to do with their new toy.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;i&gt;Star Bucks&lt;/i&gt; will open more outlets throughout the world.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;HAPPY NEW YEAR!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-113622688352623269?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/113622688352623269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=113622688352623269' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113622688352623269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113622688352623269'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2006/01/technologys-new-year-resolutions.html' title='Technology&apos;s New Year Resolutions'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-113587067725380746</id><published>2005-12-29T20:35:00.000+05:00</published><updated>2005-12-29T20:37:57.270+05:00</updated><title type='text'>XAML Respite! Orcas CTP is here!</title><content type='html'>Only a month after developers got a breadth of fresh air in form of the WinFX November 2005 CTP becoming part of the Windows Longhorn Platform SDK, the Visual Studio Extensions/Development Tools for WinFX December 2005 CTP with a Visual designer for XAML is indeed the best New Year gift from Microsoft one could have hoped for. The next generation Visual Studio code-named Orcas would allow developers to visually design Windows' GUI in the typical drag and drop fashion, generating XAML in the background. &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=2297BDC9-B5AE-4B8A-B601-EEF54A52867A&amp;displaylang=en"&gt;Download&lt;/a&gt; and check it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-113587067725380746?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/113587067725380746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=113587067725380746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113587067725380746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113587067725380746'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/12/xaml-respite-orcas-ctp-is-here.html' title='XAML Respite! Orcas CTP is here!'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-113519623018769263</id><published>2005-12-22T01:05:00.000+05:00</published><updated>2005-12-22T01:17:10.223+05:00</updated><title type='text'>READY!</title><content type='html'>I agree I've been a bit lazy about User Group events lately. Anyway, Core.NET is &lt;strong&gt;Ready to Launch&lt;/strong&gt;. We would announce the dates for our User Group events at NED, IBA-Karachi, and IBA-Sukkur real soon. Get more information about launch events from the following URL.&lt;br /&gt;&lt;a href="http://mea.ineta.org/pakistan/coredotnet/launch/"&gt;http://mea.ineta.org/pakistan/coredotnet/launch/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I intend to demonstrate a hypothetical "State Bank of Pakistan" Web Services Architecture example at this first event on VS 2005 Team Suite for Software Architects and SQL Server 2005. See you there!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mea.ineta.org/pakistan/coredotnet/launch/"&gt;&lt;img src="http://photos1.blogger.com/blogger/3715/638/1600/LaunchReady.jpg" border="0" alt="Core.NET Launch Website" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-113519623018769263?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/113519623018769263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=113519623018769263' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113519623018769263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113519623018769263'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/12/ready.html' title='READY!'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-113484445186305800</id><published>2005-12-17T23:23:00.000+05:00</published><updated>2005-12-17T23:34:11.883+05:00</updated><title type='text'>Tools of the UX Trade</title><content type='html'>A little more than ten years ago, when the Internet was introduced in Pakistan for the first time, a large number of people wanting to jump on the bandwagon immediately turned to learning HTML. I remember going to CD shops in 1996 and seeing piles and piles of tutorial CDs for HTML and web page designing. It was difficult to even find a book on HTML at one point because all had been sold out. Little did anyone realize that pretty soon, web page designing would evolve from knowing more than just plain HTML to something more subtle. All web page designers, pretty soon, started using tools like Microsoft FrontPage, Macromedia Dreamweaver/Fireworks etc. for all web page designing. HTML became less important; WYSIWYG tools could achieve more and in lesser time.&lt;br /&gt;&lt;br /&gt;Fast-forward to 2005, the paradigm for the presentation layer is about to change dramatically. Windows Vista would allow designing of GUIs like never before. At the forefront of this change in paradigm is Microsoft's eXtensible Application Markup Language (XAML) and the programming subsystem/framework called Windows Presentation Foundation (WPF), formerly Avalon.&lt;br /&gt;&lt;br /&gt;Its natural for anyone wanting to explore WPF to start off with XAML, but keeping in mind what happened to HTML, the focus should turn more towards the designing aspects of the User eXperience and the programming aspects of WPF.  I intend to blog about XAML in the coming weeks and months as I delve into this exciting new technology. These days, I have focused a bulk of my attention to the Visual designing tools for XAML, namely &lt;a href="http://www.microsoft.com/products/expression/en/graphic_designer/default.aspx"&gt;Microsoft Expression Acrylic&lt;/a&gt; [&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=cb74ed8b-943e-4fc8-9169-9a58fca54afe&amp;DisplayLang=en"&gt;Download link&lt;/a&gt;], &lt;a href="http://www.zam3d.com"&gt;Electronic Rain ZAM 3D&lt;/a&gt;, and &lt;a href="www.mobiform.com"&gt;Mobiform Aurora&lt;/a&gt;. By the way, Microsoft would come up with 2 more design tools in the not-so-distant future, &lt;a href="http://www.microsoft.com/products/expression/en/interactive_designer/default.aspx"&gt;Microsoft Expression Sparkle&lt;/a&gt; and &lt;a href="http://www.microsoft.com/products/expression/en/web_designer/default.aspx"&gt;Microsoft Expression Quartz&lt;/a&gt;. Stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-113484445186305800?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/113484445186305800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=113484445186305800' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113484445186305800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113484445186305800'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/12/tools-of-ux-trade.html' title='Tools of the UX Trade'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-113480132344325547</id><published>2005-12-17T11:35:00.000+05:00</published><updated>2005-12-17T11:35:23.460+05:00</updated><title type='text'>The WinFX Checklist</title><content type='html'>Many people install WinFX and later realize that its not functioning properly. The following checklist includes all the items and in the order that you need to install for WinFX to work.&lt;br /&gt;&lt;br /&gt;0) Visual Studio 2005&lt;br /&gt;1) WinFX Runtime Components 3, Beta 2&lt;br /&gt;2) WinFX SDK&lt;br /&gt;3) Visual Studio Extensions for WinFX&lt;br /&gt;4) Visual Studio Extensions for Windows Workflow Foundation Beta 1.2&lt;br /&gt;&lt;br /&gt;Note: The above checklist is for WinFX November 2005 CTP. (CTPs before September 2005 did not include Windows Workflow Foundation)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-113480132344325547?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/113480132344325547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=113480132344325547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113480132344325547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113480132344325547'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/12/winfx-checklist.html' title='The WinFX Checklist'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-113250255261639709</id><published>2005-11-20T20:52:00.000+05:00</published><updated>2005-11-20T21:28:08.250+05:00</updated><title type='text'>The Power of UX</title><content type='html'>&lt;img style="display:block; margin:0px auto 10px; text-align:center" src="http://photos1.blogger.com/blogger/3715/638/1600/aero.jpg" border="0" alt="" /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center" src="http://photos1.blogger.com/blogger/3715/638/1600/VistaIcons.0.jpg" border="0" alt="Windows Vista Icons" /&gt;&lt;br /&gt;Things are always changing in the software world; and with every new release or version of every software application in the market, the one thing that always changes or improves is the UI. I always emphasize the need for the UI to always be consistent, attractive, and user friendly in my speaking sessions and blogs. After all, the UI is the application. UI design guidelines have existed before, but they would become less effective, if not completely redundant, when Windows Vista is released next year. Microsoft is attempting to come out with a clear set of guidelines for designing the UI which make the application easy to use, easy to learn, and enjoyable for users. UX (User Experience) as it would be called in Windows Vista, has been codenamed "Aero". The Aero theme file would allows Vista developers to easily bring the UX design into their apps. &lt;br /&gt;&lt;br /&gt;While the detailed "UX Guidelines" can be downloaded from the Microsoft website, you need to go through the process of validating yourself as a genuine Windows user, Genuine Windows Advantage as they call it, to be able to download the 14.5 MB self-extracting executable file. The top rules that govern the UX design are:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;Use the Aero Theme and System Font (Segoe UI)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Use common controls and common dialogs&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Use the standard window frame, use glass judiciously&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Use icons and graphics consistent with the Windows Vista style and quality&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Use task dialogs for new or frequently used dialog boxes and error messages&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Use Aero Wizards&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Use Explorer-hosted, navigation-based user interfaces, provide a Back button&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Use the standard Windows Search&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Use the Windows Vista tone in all UI text&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Clean up the user interface&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Use notifications judiciously&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Reserve development time for "fit and finish"!&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;A couple of weeks ago, I heard an instructor, at a Training I was attending, dismiss the need for an attractive GUI for entreprise applications; applications that need to work in a business environment, according to him, need to be sound in their working, and not their GUI. I couldn't disagree more. How would anyone, entreprise user or otherwise, react if she/he could see the Windows on the desktop like this?&lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center" src="http://photos1.blogger.com/blogger/3715/638/1600/VistaWindows.jpg" border="0" alt="Windows Vista Screenshot" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-113250255261639709?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/113250255261639709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=113250255261639709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113250255261639709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113250255261639709'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/11/power-of-ux.html' title='The Power of UX'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-113234407851453892</id><published>2005-11-19T00:55:00.000+05:00</published><updated>2005-11-19T01:01:18.516+05:00</updated><title type='text'>SpeechFX?</title><content type='html'>While there has never been any formal announcement by Microsoft on referring to the new Speech capabilities in WinFX as SpeechFX, I have read it a couple of times on the blogs of the Microsoft Speech team members. Anyway, read this nice article about &lt;a href="http://msdn.microsoft.com/msdnmag/issues/06/01/speechinWindowsVista/#void"&gt;Exploring New Speech Recognition And Synthesis APIs In Windows Vista&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-113234407851453892?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/113234407851453892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=113234407851453892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113234407851453892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113234407851453892'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/11/speechfx.html' title='SpeechFX?'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-113234341261003137</id><published>2005-11-18T23:24:00.000+05:00</published><updated>2005-11-19T00:50:12.646+05:00</updated><title type='text'>Microsoft to "Unveil" the next generation Speech Platform</title><content type='html'>Microsoft has been researching "speech" for over a decade, long before the release of Speech Server in 2004. However, this time around, speech would be featured big time in Windows Vista, with a new &lt;code&gt;System.Speech&lt;/code&gt; namespace in the WinFX SDK (not be confused with the &lt;code&gt;System.Web.Speech&lt;/code&gt; namespace in the Speech Application SDK).&lt;br /&gt;&lt;br /&gt;Last month, Microsoft announced that it had acquired certain intellectual property assets from &lt;a href="http://www.unveil.com"&gt;Unveil Technologies Inc.&lt;/a&gt; However, now the story is that Microsoft has indeed acquired the whole company, and would also absorb some of its employees into Microsoft. Why? The Unveil Conversation Suite was a brilliant piece of software; a killer-app to be precise; and allowed non-speech developers to rapidly design and develop Enterprise Speech applications graphically. This was more then what &lt;a href="http://www.pronexus.com"&gt;Pronexus&lt;/a&gt;'s VBSALT offered.&lt;br /&gt;&lt;br /&gt;So, this adds another company to the growing list of speech companies being acquired and merged in the recent months; Scansoft and Nuance, Unveil and Microsoft, and yet another one, &lt;a href="http://www.intervoice.com"&gt;Intervoice&lt;/a&gt; and &lt;a href="http://www.edify.com"&gt;Edify&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;By acquiring Unveil, Microsoft has killed two birds with one stone, so to speak. While the Conversation Manager would surely be a vital component in the next release of the Speech Server, Microsoft has also taken a great J2EE-based speech product for the IBM Speech platform, off the market. I call this brilliant strategy. Great thinking Bill!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-113234341261003137?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/113234341261003137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=113234341261003137' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113234341261003137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113234341261003137'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/11/microsoft-to-unveil-next-generation.html' title='Microsoft to &quot;Unveil&quot; the next generation Speech Platform'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-113000599196846729</id><published>2005-10-22T23:30:00.000+05:00</published><updated>2005-10-22T23:33:11.976+05:00</updated><title type='text'>The Speech Overkill: Possible Solutions</title><content type='html'>I had a very interesting discussion with Jahanzeb Sherwani, a PhD student at Carnegie Mellon University who was visiting Pakistan on vacations in July. He pointed out the ineffectiveness of many Telephony Speech applications in the US that simply were too difficult for callers to use, and often irritating because of the way they would prompt users for input, without clearly understanding the spoken input provided to them, signifying a very weak VUI design. Prompting callers without specifically telling them what the system expects and how it expects the spoken input can elicit responses that can't always be defined using Grammar files. A hypothetical example could be&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;System: Welcome to the Apparel Directory. How many I help you?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caller: I am just trying to check out the weaknesses in VUI design in your Speech application.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;System: What designs are you interested in?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caller: I am not interested in any Apparel Designs!&lt;/li&gt;&lt;br /&gt;&lt;li&gt;System: Good choice. Should I tell you the names of all the vendors or would you like to connect to a particular one?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caller: Aarghhhh! Whats wrong with you motherfucker??!!!&lt;/li&gt;&lt;br /&gt;&lt;li&gt;System: Connecting to Mothercare now. Thank you for calling.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;While Microsoft and IBM have come out with their (somewhat ambigiuous) guidelines for designing VUI's, a much better option would be to provide prompt controls, just like the Speech input controls that come with the Speech Application SDK for common answers as Yes/No/Cancel etc. as guidelines are not easy to enforce, and prompt controls may be able to provide boilerplate text for creating effective prompt messages depending on the type of input required. For unknown reasons, the speech developer still has to hand-code GRXML code and databind it to a table's column to create dynamic grammars. Is someone listening ... errr reading?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-113000599196846729?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/113000599196846729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=113000599196846729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113000599196846729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/113000599196846729'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/10/speech-overkill-possible-solutions.html' title='The Speech Overkill: Possible Solutions'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-112966002113482338</id><published>2005-10-18T23:14:00.000+05:00</published><updated>2005-10-18T23:27:01.140+05:00</updated><title type='text'>(Nuance)ScanSoft</title><content type='html'>First it was &lt;b&gt;Speechify&lt;/b&gt;, whose TTS engine is part of Microsoft Speech Server 2004, which merged with &lt;b&gt;ScanSoft&lt;/b&gt; (of the Dragon Naturally Speaking fame) to form a bigger and better Speech company, about a year ago. Now, its ScanSoft, which has been renamed to &lt;b&gt;&lt;a href="http://www.nuance.com"&gt;Nuance Communications, Inc&lt;/a&gt;&lt;/b&gt;. The new slogan/tagline for the company, &lt;b&gt;"The experience speaks for itself&lt;sup&gt;TM&lt;/sup&gt;"&lt;/b&gt; also speakes a lot for itself, about the extensive suite of speech products and the vast experience brought together. Good news for the Industry indeed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-112966002113482338?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/112966002113482338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=112966002113482338' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/112966002113482338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/112966002113482338'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/10/nuancescansoft.html' title='(Nuance)ScanSoft'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-112873421589755164</id><published>2005-10-08T06:12:00.000+05:00</published><updated>2005-10-08T06:18:46.186+05:00</updated><title type='text'>Microsoft MVP Summit 2005</title><content type='html'>&lt;img src="http://photos1.blogger.com/blogger/3715/638/200/DSC00087.jpg" border="0" align="center" /&gt;&lt;br /&gt;&lt;br /&gt;Just returned from the Microsoft MVP Summit 2005 in Seattle. The visit was an experience to remember. MVP Summits are always a great way to network with MVPs from around the world in addition to Microsoft product groups and employees. I have maintained a separate blog for my visit. Check it out &lt;a href="http://mvp2005.blogspot.com"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-112873421589755164?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/112873421589755164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=112873421589755164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/112873421589755164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/112873421589755164'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/10/microsoft-mvp-summit-2005.html' title='Microsoft MVP Summit 2005'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-112594691790299694</id><published>2005-09-05T23:59:00.000+05:00</published><updated>2005-09-06T00:01:57.906+05:00</updated><title type='text'>Welcome Vista!</title><content type='html'>I got the Beta-1 of Windows Longhorn (Vista) in my MSDN Subscription mail this month, and I was tempted to install it to see what it is all about. Since this is just the Beta version, it does not allow you to override your current windows installation (what a relief!), but requires 6GB of space on an NTFS partition. For all of you who were expecting Vista to be considerably different from previous Windows', well, apart from the GUI, dont expect a lot of changes from it. The GUI, I agree, is really cool and fast (performance-wise); but for us hardcore developers, it seems a bit...well...how should I  put this...over-childish. The vastly multi-colored GUI seems unreasonable and unnecessary. When I say that the GUI is fast, I dont mean that the whole OS is fast; its just that buttons and menus respond more efficiently then Windows XP and/or its predecessors. Some of the features are really slow, like when I double-clicked the volume icon in the system-tray, it literally took a few minutes (NOT seconds) for the volume control dialog to open. An Avalon applicaion with a cool GUI would look far more attractive deployed in Windows XP instead of Vista which would over-shadow it with its own GUI.&lt;br /&gt;&lt;br /&gt;A cool thing I found was the Text-to-Speech Voice called Microsoft Anna that comes with Vista. The TTS still has a long way to go before it can compete with the ScanSoft Speechify TTS engine, but compare that to the horrible TTS voices (Mary, Mike, and Sam) that came with the Windows XP, it is absolutely wonderful. All in all, after using Vista myself, I am yet to comprehend the real reason for an operating system that has taken so long to develop and does not have all the changes I was expecting, but has enough to get most Windows users excited.&lt;br /&gt;&lt;br /&gt;Click the following links to see the screenshots I captured of Windows Vista.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mea.ineta.org/pakistan/vista/startmenu.gif" target="_blank"&gt;Start Menu&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mea.ineta.org/pakistan/vista/mycomputer.gif" target="_blank"&gt;My Computer&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mea.ineta.org/pakistan/vista/mypictures.gif" target="_blank"&gt;My Pictures&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mea.ineta.org/pakistan/vista/opendialog.gif" target="_blank"&gt;Open Dialog for Images&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mea.ineta.org/pakistan/vista/controlpanel.gif" target="_blank"&gt;Control Panel Window&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-112594691790299694?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/112594691790299694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=112594691790299694' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/112594691790299694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/112594691790299694'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/09/welcome-vista.html' title='Welcome Vista!'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-112344203951273394</id><published>2005-08-07T21:15:00.000+05:00</published><updated>2005-08-08T00:13:59.520+05:00</updated><title type='text'>Hop goes the VS Developer [VS.NET IDE for Linux!]</title><content type='html'>Many people had been inquiring how they can use their existing .NET skills to develop applications for Linux. &lt;a href="http://www.mono-project.com"&gt;Mono&lt;/a&gt; was what got people excited but I have seen all the interest and enthusiasm recede as soon as people get a glimpse of how they can go about developing applications using Mono. I believe its primarily because most .NET developers are Windows users and don't have enough Linux skills to get started on Mono.&lt;br /&gt;&lt;br /&gt;Enter &lt;a href="http://dev.mainsoft.com"&gt;Grasshoper&lt;/a&gt;, the Visual Studio .NET IDE for Linux. You DO NOT actually have to install Linux on your machine to get started; you would still be developing using C# or VB.NET in your VS.NET Development Environment installed on the Windows platform. The download comes bundled with Tomcat and the PostgreSQL 8.0 database. A separate download on the Grasshopper site is LIW or Linux Inside Windows, to allow you to build and test web applications in a Linux virtual environment. Please note that you need to have both, C# and VB.NET installed with your VS.NET 2003 to install Grasshopper. Although J# installation is also required, you can proceed with the installation and install J# support later.&lt;br /&gt;&lt;br /&gt;Once installed, Grasshopper would add a VS.NET add-in to the Microsoft Development Environment (MDE), called Visual MainWin. Remember, to create a new project, the Tomcat server would need to be started. All other things remain the same. When you run the project, it would run on the localhost:8080 address as opposed localhost for normal .NET web apps. Additionally, if you right-click a project in the Solution Explorer, the popup menu would have an item 'Generate J2EE Project'.&lt;br /&gt;&lt;br /&gt;Now I come to the really cool part; MainSoft Corp, the company that created Grasshopper aims to release a version for Whidbey when VS 2005 is released. Apart from supporting ASP.NET 2.0, the Whidbey version would include Web Parts mapping to Java Specification Request (JSR) 168, Generics, Java Development Kit (JDK) 1.5 Support, and Web Service-Security (WS-Security) + additional WS standards; means all the cool things that were available only to ASP.NET implementations would now be available to J2EE implementations as well. And maybe, just maybe, this could be a good start for J# as non-.NET developers (Java Developers in particular) would be inclined to use Visual MainWin and J# using the VS.NET IDE.&lt;br /&gt;&lt;br /&gt;I would recommend .NET developers to try it out NOW! &lt;a href="http://groups.yahoo.com/group/coredotnet"&gt;Core.NET&lt;/a&gt; and INETA Pakistan would certainly be conducting a UG event on this technology in the coming weeks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-112344203951273394?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/112344203951273394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=112344203951273394' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/112344203951273394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/112344203951273394'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/08/hop-goes-vs-developer-vsnet-ide-for.html' title='Hop goes the VS Developer [VS.NET IDE for Linux!]'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-112289594239349700</id><published>2005-08-01T16:30:00.000+05:00</published><updated>2005-08-01T16:32:22.400+05:00</updated><title type='text'>Comparing the Un-Comparable</title><content type='html'>A project I was working on required variables of type struct to be stored in an ArrayList. The storing-in-ArrayList part was very easy because any variable that derives from class 'Object' can be stored in a Collection/ArrayList. However, a problem surfaced when I wanted to call the 'Sort' method on the ArrayList to sort all the stored values. Remember, variables of a user-defined type cannot be sorted since there is no pre-defined mechanism to compare 2 variables of that user-defined type. So, if you are ever faced with a similar situation, rest-assured, .NET would never leave you out in the cold.&lt;br /&gt;&lt;br /&gt;You would need to implement the &lt;b&gt;IComparable&lt;/b&gt; interface in your definition, and define the mechanism for comparison of 2 instances of that type. Visual Studio .NET makes it more easy; as soon as you type the declarator statement for the struct type (preceding the opening de-limiter operator), a tool-tip text would appear saying 'Press TAB to implement stubs for interface System.iComparable'. Press the TAB key and behold; VS.NET would automatically add a 'CompareTo' method that accepts an object as argument and returns an integer. The 'CompareTo' method is where you would define your comparison mechanism, which would subsequently be called when a comparison between variables of that type is to be made. In most cases, the result of a comparison operation is boolean (0 or 1); however, in case you need to know if instance of one variable is greater than-, less than-, or equal to- the another instance, you need three flags or values (-1, 0, and 1); hence the int return type in the 'CompareTo' method. To elaborate, I am including a simple example below:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public struct Length : IComparable&lt;br /&gt;{&lt;br /&gt; public int Feet;&lt;br /&gt; public int Inches;&lt;br /&gt;&lt;br /&gt; #region IComparable Members&lt;br /&gt;&lt;br /&gt; public int CompareTo(object obj)&lt;br /&gt; {&lt;br /&gt;  if (!(obj is Length)) &lt;br /&gt;   throw new Exception("Cannot compare.");&lt;br /&gt;&lt;br /&gt;  Length l = new Length();&lt;br /&gt;  l = (Length)obj;&lt;br /&gt;&lt;br /&gt;  if (Feet == l.Feet &amp;&amp; Inches == l.Inches)&lt;br /&gt;   return 0;&lt;br /&gt;  else if (Feet &gt; l.Feet)&lt;br /&gt;   return 1;&lt;br /&gt;  else&lt;br /&gt;   return -1;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; #endregion&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-112289594239349700?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/112289594239349700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=112289594239349700' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/112289594239349700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/112289594239349700'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/08/comparing-un-comparable.html' title='Comparing the Un-Comparable'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-112276104186075414</id><published>2005-07-28T14:57:00.000+05:00</published><updated>2005-07-31T03:04:01.866+05:00</updated><title type='text'>Welcome HP Pavilion!</title><content type='html'>Notice any changes ? No ? Well, you can't. Thats because it is I who is blogging today from my brand new HP Pavilion ze2160ea notebook; 1.8 GHz Intel Centrino Processor, 1 GB RAM, 80 GB HDD, a DVD writer alongside a number of other things are making me love every bit of it. Although I had previously been using a Toshiba with a 2.4 GHz Intel P4 Processor with 512 MB RAM and a 40 GB HDD, the new HP takes the cake.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-112276104186075414?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/112276104186075414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=112276104186075414' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/112276104186075414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/112276104186075414'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/07/welcome-hp-pavilion.html' title='Welcome HP Pavilion!'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-111987577299995009</id><published>2005-06-27T17:33:00.000+05:00</published><updated>2005-06-27T17:36:13.003+05:00</updated><title type='text'>Courtesy, For God's sake !</title><content type='html'>Been trying to blog this for quite a while. Today, I finally found the courage to post it.&lt;br /&gt;&lt;br /&gt;I love what I do; not just software development, but helping people, listening to their problems patiently, suggesting solutions, and if possible giving them a complete walk thru of how to go about solving a complex problem. All this I do not for the sake of any material rewards, or appreciation, or gratitude, but for the simple reason of inspiring and motivating my fellow countrymen to help others. The satisfaction and inspiration one gets from sharing with others, is something that cannot be described in words. This is what keeps me going. This is what I want to keep doing as long as I physically can.&lt;br /&gt;&lt;br /&gt;But lately, people have started to take all this for granted. They feel that assisting anyone and everyone is somehow an obligation for us MVPs (Microsoft Most-Valuable Professionals) and INETA office-bearers. People have completely forgotten that we too have personal lives of our own, that we also have work to do to earn a living (Microsoft does not pay MVPs), we have other engagements too with our families and friends, and we need time for ourselves too, so we expect a little privacy. While sharing and helping is too noble a cause to set aside, and although it does take precedence over what other things we do most of the time, there is absolutely nothing to suggest that we are thinking of becoming MotherTeresa.NET! So, it really angers me when someone calls me at odd timings, or e-mails me asking for something that they take would take credit for from their bosses, or even asks me to visit them because they are facing a problem. I mean, C'mon. Since when does the well go to thirsty instead of the other way around. So, anyone and everyone reading this, I request you to understand our situation, understand that we expect a little privacy, and that we love to share knowledge and ideas, but certainly NOT at a very high cost to us. Hope you understand.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-111987577299995009?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/111987577299995009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=111987577299995009' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111987577299995009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111987577299995009'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/06/courtesy-for-gods-sake.html' title='Courtesy, For God&apos;s sake !'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-111943847302356753</id><published>2005-06-22T16:05:00.000+05:00</published><updated>2005-06-22T16:07:53.026+05:00</updated><title type='text'>INETA Pakistan @ PDC 2005</title><content type='html'>&lt;i&gt;I had to fly to Islamabad the very next day PDC 2005 ended so I couldn't blog about this earlier. I am back in Karachi now, so here goes.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.microsoft.com/pakistan/pdc"&gt;Pakistan Developer Conference&lt;/a&gt; this year, as in 2003 and 2004, was a roaring success. In addition to the great speakers including Rafal Lukawiecki, Stephen Forte, Clemens Vesters, Arvindra Sehmi,  and Goksin Bakir (who also happens to be the Regional Head for INETA MEA region), the major difference at PDC 2005 was the Community Lounge, providing delegates with an opportunity to network with professionals, MVPs, and ofcourse the Speakers. For me personally, the experience was unforgettable. I was always accompanied by my 2 trusted comarades, Saqib Ilyas and Hammad Rajjoub. Since Hammad sahab was visiting Karachi from Dubai after almost 3 months, it was great to have him with us. I think INETA Pakistan was really able to reach out to the Pakistani .NET community during the 3 days of the conference. We have been invited to a number of cities in Pakistan, specifically Sukkur, Hyderabad, and Nawabshah. Also, many people in Karachi who did not take INETA Pakistan seriously are now bombarding us with e-mails, inviting us to speak at their venues. And while Saqib sahab, Hammad sahab, and I were running about doing our stuff during the conference, a handful of volunteers from NED University of Engineering and Technology worked tirelessly to talk to people about INETA, the Microsoft MVP Program, and Imagine Cup. I thank you volunteers; Miss Sabrina, Miss Shehzina, Miss Sundaleen, Miss ZumZum, and Miss Preeyaa; all of you did a great job.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-111943847302356753?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/111943847302356753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=111943847302356753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111943847302356753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111943847302356753'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/06/ineta-pakistan-pdc-2005.html' title='INETA Pakistan @ PDC 2005'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-111575028696551805</id><published>2005-05-10T23:35:00.000+05:00</published><updated>2005-05-10T23:38:06.970+05:00</updated><title type='text'>The Business Value of Speech</title><content type='html'>&lt;i&gt;(My Article for INETA Pakistan Newsletter - Debut Edition)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Imagine being able to speak to your TV set about which channel to tune on what number; or setting the timer on your microwave or the thermostat of your refrigerator using nothing but simple voice commands. As far back as I can remember, all science fiction movies had at least one talking computer that was able to converse intelligently with humans. Many people (myself included) still remember their fascination with ‘Kit’, the talking car in the 80’s hit TV series ‘Knight Rider’.&lt;br /&gt;&lt;br /&gt;Although only fiction a decade ago, interaction with computers using Speech has become a reality today that would increasingly affect how we communicate with machines in the years to come. Already, the Microsoft Automotive Initiative, of which speech technology is an intrinsic part, is putting PC’s into cars to allow drivers to give spoken instructions to the onboard computer and look up the nearest gas station or coffee shop and dial phone calls using speech. Fact of the matter is: speech is going to be part of all software applications and devices in some form or the other within a decade. This statement may sound a bit farfetched at the moment, but businesses around the world, even today, are realizing the benefits of Speech applications in their processes and customer relationship management.&lt;br /&gt;&lt;br /&gt;To begin with, use of Speech technology is on the rise in contact center deployments to facilitate operators by transferring only those calls to them which require human interaction; the rest of the calls are handled by speech applications, thus increasing operator productivity. In addition, survey results put the cost of handling calls by automated speech applications at only 20 cents per call as opposed to $5 to $10 per call handled by a human operator. From the customer or caller’s view point, with telephony speech applications, callers get an ever-courteous voice ready to be of service; one that would never hang-up on the caller until and unless the call has been serviced. Anybody who has ever had to call any of our utility companies with a complaint or query can very well understand the importance of this.&lt;br /&gt;&lt;br /&gt;Industry standards such as SALT (Speech Application Language Tags), SRGS (Speech Recognition Grammar Specification), and SSML (Speech Synthesis Markup Language) are helping to drive speedy adoption of speech in business. The release of Microsoft Speech Server 2004 last year would further pave the way for companies to use existing code-base and infrastructure to deploy speech applications in-house for managing customer relationships, without having to outsource this vital link between them and the outside world to a third party. The death of the call center BPO (business process outsourcing) model, although still far away, is imminent.&lt;br /&gt;&lt;br /&gt;So, as developer, decision-maker, or customer, the next time you pick up the phone to talk to your bank, travel agent, stock broker, or even the doctor for an appointment, imagine the possibilities, experience, and swiftness of having a speech application on the other side of the line. My advice at this point is “Speech NOW or forever hold your peace”.&lt;br /&gt;&lt;br /&gt;Related Links:&lt;br /&gt;&lt;a href="http://www.microsoft.com/speech"&gt;Microsoft Speech Website&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/automotive"&gt;Microsoft Automotive Initiative&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.saltforum.org"&gt;SALT Forum&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-111575028696551805?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/111575028696551805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=111575028696551805' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111575028696551805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111575028696551805'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/05/business-value-of-speech.html' title='The Business Value of Speech'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-111502842135596611</id><published>2005-05-02T15:02:00.000+05:00</published><updated>2005-05-02T15:07:01.356+05:00</updated><title type='text'>Introducing Zindagi XP Professional Edition</title><content type='html'>Started a new blog today. Check it out.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://zindagixp.blogspot.com"&gt;Zindagi XP&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-111502842135596611?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/111502842135596611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=111502842135596611' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111502842135596611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111502842135596611'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/05/introducing-zindagi-xp-professional.html' title='Introducing Zindagi XP Professional Edition'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-111488350869836513</id><published>2005-04-30T22:50:00.001+05:00</published><updated>2005-04-30T22:51:48.700+05:00</updated><title type='text'>What's Next: Voice-SQL (pronounced V-Sequel)</title><content type='html'>Although nothing of this sort exists at the moment, today I stumbled on the idea of using voice commands to retrieve information from the database. How is this supposed to work? Well, its not about speaking SQL statements and getting the result on display. Its a bit more complex. The idea is to allow people who do not have any idea of SQL to get the information they want by speaking to a V-SQL Query Analyzer, similar to the SQL Query Analyzer in SQL Server. The reason I thought of bringning Speech into this was because of the inherent capabilities of Speech Recognition Grammar Specification (SRGS) and the Microsoft Speech Application SDK (SASDK) to process utterances like 'List all Customers who live in Islamabad' or 'List Customers from Islamabad' in a similar fashion. If the user is simply provided with a textbox to enter commands like the ones I mentioned above, I would be re-inventing the wheel by having to process the text input, when the same can be done by the SASDK Speech Recognition Engine for spoken input. Once the information (or tokens) have been extracted from the voice command, the resulting tokens can be used to generate a simple SQL SELECT statement. The rest is pretty easy. However, all this would require creating a dictionary of commonly used terms/words for database objects, like Customer, Product etc. and then matching the word spoken by the user (from the dictionary) to the Synonym for a database object. I hope I am making sense.&lt;br /&gt;&lt;br /&gt;SQL Server is not exactly my core competency. I look forward to asking quite a few questions from Stephen Forte, the SQL Server MVP, who would be visiting to speak at Microsoft PDC 2005. Wish me luck.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-111488350869836513?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/111488350869836513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=111488350869836513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111488350869836513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111488350869836513'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/04/whats-next-voice-sql-pronounced-v.html' title='What&apos;s Next: Voice-SQL (pronounced V-Sequel)'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-111463989450193667</id><published>2005-04-28T03:09:00.000+05:00</published><updated>2005-04-28T03:11:34.503+05:00</updated><title type='text'>Consuming a Web Service with Flash (finally, Thank God)</title><content type='html'>(I had promised the attendees at the INETA Pakistan event on "Flash Remoting with .NET" at SSUET that I would blog about this within 2 days, something that I m doing today after 2 weeks; so, my apologies to all of you.)&lt;br /&gt;&lt;br /&gt;Can't believe this is so simple. Its even easier than consuming a web service any other way. This is because Flash provides a way to bind values returned by a web service to Flash Components. No coding is required; only a couple of clicks and drags, thats it! This is a great way to develop Flash tickers to display data (possibly Stock Quotes, Currency Exchange Rates, etc.) on a web page without ever needing to refresh it for updated data. So, how to go about doing this? Very simple.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;1) Create a Web Service&lt;/u&gt;&lt;br /&gt;Create a simple "Hello World" Web Service; one that simply returns the string "Hello World" when invoked. If you develop the Service using Visual Studio .NET, the code for "Hello World" is generated automatically. Run and test the Web Service in your web browser. Copy the URL for your Web Service Description or WSDL document i.e. if the URL for your web service is "http://localhost/FlashRemoting/HelloWorld.asmx", then you can access its service description at "http://localhost/FlashRemoting/HelloWorld.asmx?WSDL".&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Run Macromedia Flash MX 2004 Professional, and create a new Flash document.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;2) Link the Flash Movie to the Web Service&lt;/u&gt;&lt;br /&gt;Open the "Web Services" panel by going to Window &gt; Development Panels &gt; Web Services. Click the globe icon on the panel; a small window will appear. Click the "+" Add button on the window, and enter the URL you copied for the WSDL document in step 1. (This will not work if you simply enter the URL for your web service; it MUST be the URL for the WSDL document). When you click the OK button, you will see that the Web Service has been added to the list in the Web Services panel. Expand the "[&lt;i&gt;Your Web Service Name&lt;/i&gt;]" Node in the panel and right-click the method you want to call. From the pop-up menu, click "Add Method Call". (An instance of the Web Service Connector component would be added to the stage).&lt;br /&gt;&lt;br /&gt;&lt;u&gt;3) Place Flash UI Components on the stage&lt;/u&gt;&lt;br /&gt;Go to Window &gt; Development Panels &gt; Components, and drag a "Label" and "Button" control on to the main Flash movie stage.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;4) Name all the Component Instances on the stage&lt;/u&gt;&lt;br /&gt;Name all 3 component instances on the stage, the Label, the Button, and the WebServiceConnector component from the "Properties" panel.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;5) Bind Web Service Result to the UI Component&lt;/u&gt;&lt;br /&gt;In order to display the string returned from the web service, you need to bind the result to the Label component you placed on the stage. Go to Window &gt; Development Panels &gt; Component Inspector. Select the Label component on the stage and go to the "Bindings" tab on the "Component Inspector" window. Click the "+" Add Binding button. Select "text : String" from the list and click the OK button. Now that you have specified the UI component property to bind to, you now need to specify the Data Source that would provide the value to display in the Label component. Select the "bound to" item in the Key-Value list on the "Bindings" tab, and then click the Magnifying Glass icon (The "Bound To" window will appear). From the "Component Path" list on the left, select the "WebServiceConnector &amp;lt;[&lt;i&gt;Your Web Service Name&lt;/i&gt;]&amp;gt;" node, select "result : String" from the "Schema Location" list on the right, and click the OK button.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;6) Add Behavior to Invoke/Trigger the Web Service&lt;/u&gt;&lt;br /&gt;To invoke the web service, you need to add a behavior to the button. Go to Window &gt; Development Panels &gt; Behaviors. Select the Button component on the stage and on the "Behaviors" panel, click the "+" Add Behavior button. On the context menu, go to Data &gt; Trigger Data Source (The "Trigger Data Source" window will appear). Select the "[&lt;i&gt;Your Web Service Name&lt;/i&gt;]" node and click the OK button.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;7) Run the Flash Movie&lt;/u&gt;&lt;br /&gt;Press Ctrl+Enter to compile and run the Flash movie. When you click the button, the web service will be invoked and the returned text will appear in the Label component.&lt;br /&gt;&lt;br /&gt;Thats It! I told you it was very easy.&lt;br /&gt;Look Mom ! No Code. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-111463989450193667?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/111463989450193667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=111463989450193667' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111463989450193667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111463989450193667'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/04/consuming-web-service-with-flash.html' title='Consuming a Web Service with Flash (finally, Thank God)'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-111342240987429912</id><published>2005-04-14T00:58:00.000+05:00</published><updated>2005-05-12T12:54:09.420+05:00</updated><title type='text'>Dhoop Kinaray and .NET Flash Remoting</title><content type='html'>&lt;i&gt;Raat yoon dil mein teree&lt;br /&gt;Khowee howee yaad aaey,&lt;br /&gt;Jaisay weraanay mein chupkay say bahaar aa jaaey,&lt;br /&gt;Jaisay sehraaoon mein holay say chalay baad-e-naseem,&lt;br /&gt;Jaisay beemaar ko bay-wajah qaraar aa jaaeey.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The one-minute long title song for "Dhoop Kinaray", a hit TV serial in the 80's by Haseena Moin on Pakistan Television and sung by Nayyara Noor. After searching for it for 17 years, I finally managed to get my hands on it. Have already listened to it countless times today (listening to it still); copied it to the Nomad MP3 Player (sent by Microsoft as a gift for becoming an MVP), to listen to it even while on the road; I am happy. (This song should have been an hour long).&lt;br /&gt;&lt;br /&gt;There would be an INETA Pakistan event at SSUET on Saturday, and I have to deliver a lecture on "Flash Remoting using .NET". So, after procrastinating for 2 months, I am finally blogging it.&lt;br /&gt;&lt;br /&gt;Flash Remoting is a way for creating Macromedia Flash UI's that communicate with business logic developed using .NET, Java, or ColdFusion. I have mentioned this in a previous blog too; the great thing about developing Web Applications with a Flash GUI is the page does not have to reload after a postback, thus limiting the data transferred to and from the server. Once a Flash movie has loaded into the web browser, the UI does not re-load when some new data is retrieved from the server/database. Apart for the speed, a Flash UI also provides a rich user experience. Even images can be dynamically loaded into the Flash movie at runtime, and masks can be applied to them without re-creating those images as would typically be required if the GUI comprised of HTML pages. In addition, Flash GUI's can be used in 4 ways; by communicating with an ASP.NET web form page, by consuming an XML Web Service, by communicating with a .NET assembly, and by retrieveing data from an ADO.NET DataSet.&lt;br /&gt;&lt;br /&gt;There are many code samples available on the internet to demonstrate how to connect a Flash GUI to back-end server logic, so there really is no point in getting into all that now. However, I have been bombarded by the same questions about Flash Remoting again and again, from people who were unable to run those code samples. Ok then, lets start.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Download and Install Flash Remoting Components&lt;/u&gt;&lt;br /&gt;When first starting out with Flash Remoting, download the Flash Remoting components from the &lt;a href="http://www.macromedia.com/software/flashremoting/downloads/components/"&gt;Macromedia Flash Remoting site&lt;/a&gt;. Be sure to check which Flash version you are using; Flash MX or Flash MX 2004, and download components accordingly. Run and install the downloaded file. You will be able to see the Flash Remoting classes in the ActionScript panel once the components have been installed.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Add a reference to flashgateway.dll&lt;/u&gt;&lt;br /&gt;First of all, add a reference to the flashgateway.dll file (If you can't find the flashgateway assembly, download a sample application from the macromedia site; that would hopefully contain the flashgateway.dll file).&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Add the flashgateway.dll registration to the web.config file&lt;/u&gt;&lt;br /&gt;The main reason most people are unable to run remoting samples is they dont perform this task. &lt;b&gt;DO NOT FORGET TO COPY THE FOLLOWING INTO YOUR WEB.CONFIG FILE, OTHERWISE DON'T E-MAIL ME.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  &amp;lt;httpModules&amp;gt;&lt;br /&gt;  &amp;lt;add name="GatewayController"&lt;br /&gt;       type="FlashGateway.Controller.GatewayController,flashgateway" /&amp;gt;&lt;br /&gt;  &amp;lt;/httpModules&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Create a Web Form page for the Flash UI to communicate with&lt;/u&gt;&lt;br /&gt;Create a web form page in Visual Studio.NET; lets call it MyWebPage.aspx and place the page class in the MyApp.FlashRemoting Namespace (You can use your own names for the web page and class but I have used the names for reasons of clarity). The code for the web page and page-class in the code-behind file would look like this:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;i&gt;MyWebPage.aspx&lt;/i&gt;&lt;/u&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;%@ Register TagPrefix="Macromedia" Namespace="FlashGateway" &lt;br /&gt;   Assembly="flashgateway" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Page language="c#" Codebehind="MyWebPage.aspx.cs" &lt;br /&gt;  AutoEventWireup="false" Inherits="MyApp.FlashRemoting.myWebPage" %&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" &amp;gt;&lt;br /&gt;&amp;lt;HTML&amp;gt;&lt;br /&gt; &amp;lt;HEAD&amp;gt;&lt;br /&gt;  &amp;lt;title&amp;gt;FlashUI_Page&amp;lt;/title&amp;gt;&lt;br /&gt; &amp;lt;/HEAD&amp;gt;&lt;br /&gt; &amp;lt;body&amp;gt;&lt;br /&gt;  &amp;lt;form method="post" runat="server"&amp;gt;&lt;br /&gt;   &amp;lt;Macromedia:Flash ID="Flash" runat="server" /&amp;gt;&lt;br /&gt;  &amp;lt;/form&amp;gt;&lt;br /&gt; &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/HTML&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;i&gt;MyWebPage.aspx.cs&lt;/i&gt;&lt;/u&gt;&lt;pre&gt;&lt;br /&gt;namespace MyApp.FlashRemoting&lt;br /&gt;{&lt;br /&gt; public class MyWebPage : System.Web.UI.Page&lt;br /&gt; {&lt;br /&gt;  protected FlashGateway.Flash Flash;&lt;br /&gt; &lt;br /&gt;  private void Page_Load(object sender, System.EventArgs e)&lt;br /&gt;  {&lt;br /&gt;   if (Flash.Params.Count == 0) &lt;br /&gt;   { &lt;br /&gt;     throw new Exception("No arguments received."); &lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   string myString;&lt;br /&gt;   myString = "Hello ";&lt;br /&gt;   myString += Flash.Params[0].ToString(); &lt;br /&gt;   myString += " !!!";&lt;br /&gt;   Flash.Result = myString;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /% ----------------------------------&lt;br /&gt;  //  Web Form Designer generated code&lt;br /&gt;  %/ ----------------------------------&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Create the gateway.aspx file&lt;/u&gt;&lt;br /&gt;Create an empty *.aspx file in your ASP.NET project, remove the markup, and even the Page directive from the page, and name it gateway.aspx. REMEMBER, the gateway.aspx file should be in the directory in which you created MyWebPage.aspx above.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Specify the Classpath in Macromedia Flash Environment&lt;/u&gt;&lt;br /&gt;Forgetting to perform this is the second most common mistake people make. Firstly, if you are using Macromedia Flash MX 2004, you have to use the import statement as opposed to the #include statement, as you can see from the ActionScript code in the next step. Keep one thing in mind. Namespaces in ActionScript are not logical hierarchical names as in .NET languages. Instead, ActionScript namespaces reflect the hierarchical directory structure. So, the following import statement represents the &lt;b&gt;NetServices.as&lt;/b&gt; file in the &lt;b&gt;remoting&lt;/b&gt; sub-directory in the &lt;b&gt;mx&lt;/b&gt; directory. But where is the &lt;b&gt;mx&lt;/b&gt; directory located? Well, its in the directory you specified in the &lt;b&gt;class-path panel&lt;/b&gt;. On the top menu, go to Edit &gt; Preferences, and click the &lt;b&gt;ActionScipt 2.0 Settings&lt;/b&gt; button in the &lt;b&gt;ActionScript&lt;/b&gt; tab. Locate directory where you unzipped the Flash remoting component files you downloaded from the Macromedia website, click the '+' button on the Class-Path Panel and enter that path for that directory. There you go; now every time you enter the following import statement, Flash would look it up in classpath you specified.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;import mx.remoting.NetServices&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Write ActionScript code in Flash&lt;/u&gt;&lt;br /&gt;Type the following ActionScript code on Frame 1 of the main timeline of your Flash movie. (Code lines have been numbered)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; 1: import mx.remoting.NetServices&lt;br /&gt; 2: &lt;br /&gt; 3: if (inited == null)&lt;br /&gt; 4: {&lt;br /&gt; 5:  inited = true;&lt;br /&gt; 6:  &lt;br /&gt; 7:  NetServices.setDefaultGatewayUrl("http://localhost/MyApp/gateway.aspx");&lt;br /&gt; 8:  var gatewayConnection = NetServices.createGatewayConnection();&lt;br /&gt; 9:  var aspxService = gatewayConnection.getService("MyApp.FlashRemoting", this);&lt;br /&gt;10: }&lt;br /&gt;11: &lt;br /&gt;12: function MyWebPage( name )&lt;br /&gt;13: {&lt;br /&gt;14:  if( (name != null) &amp;&amp; (name != "") )&lt;br /&gt;15:  {&lt;br /&gt;16:   aspxService.MyWebPage ( name );&lt;br /&gt;17:  }&lt;br /&gt;18: }&lt;br /&gt;19: &lt;br /&gt;20: function MyWebPage_Result( result ) &lt;br /&gt;21: {&lt;br /&gt;22:  if( txtResult == undefined )&lt;br /&gt;23:  {&lt;br /&gt;24:      _root.createTextField( "txtResult", 100, 5.7, 87, 160, 18 );&lt;br /&gt;25:  }&lt;br /&gt;26:  txtResult.text = result;&lt;br /&gt;27:  txtResult.autoSize = true;&lt;br /&gt;28: }&lt;br /&gt;29: &lt;br /&gt;30: function MyWebPage_Status( error )&lt;br /&gt;31: {&lt;br /&gt;32:  trace( error.code );&lt;br /&gt;33:  trace( error.description );&lt;br /&gt;34:  trace( error.details );&lt;br /&gt;35: }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;NOTE:&lt;/b&gt;Be sure to correctly specify the URL of your gateway.aspx on Line 7. Also, On Line 9, specify the Namespace of the page-class in your web page's code-behind file. ALL the methods must be named after your Web Form page i.e. MyWebPage. That is how Flash knows which ASP.NET web form to communicate with.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Create a button to call the Method&lt;/u&gt;&lt;br /&gt;Lastly, create a button on the stage. The &lt;b&gt;on&lt;/b&gt; event handler for the button shoulw look like this.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;on (release) &lt;br /&gt;{&lt;br /&gt; // call the method named after your web page&lt;br /&gt; MyWebPage("Dhoop Kinaray");&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This has been a very long post. I just CAN'T seem to get enough of this song. Looks like I will be listening to it throughout the night.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-111342240987429912?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/111342240987429912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=111342240987429912' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111342240987429912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111342240987429912'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/04/dhoop-kinaray-and-net-flash-remoting.html' title='Dhoop Kinaray and .NET Flash Remoting'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-111316234338138797</id><published>2005-04-11T00:41:00.000+05:00</published><updated>2005-04-13T00:06:26.116+05:00</updated><title type='text'>Effective VUI Design + SRGS</title><content type='html'>&lt;ol&gt;&lt;br /&gt;&lt;li&gt;System: &lt;music in the background&gt; Welcome to FoodTalks.NET Food Ordering service. Please say your Customer Account Number?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caller: The account number is &lt;u&gt;FT1234&lt;/u&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;System: Please say or key-in your 5 digit code number.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caller: &lt;u&gt;78699&lt;/u&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;System: Thank you; Would you like to place a new order or would you prefer a repeat of your previous order.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caller: I think I will go for a &lt;u&gt;new order&lt;/u&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;System: Very well. Please say the meal ID on the FoodTalks.NET menu card that you would like to order.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caller: Ummmm...Meal ID &lt;u&gt;786&lt;/u&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;System: I understood Meal ID 786. Is that correct?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caller: &lt;u&gt;Yes&lt;/u&gt;, that is correct.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;System: Would you like any thing else?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caller: &lt;u&gt;No&lt;/u&gt; thanks, that will do for now.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;System: Your meal cost has been deducted from your account. Your meal will be delivered to your address in 15 minutes. Thank you for calling FoodTalks.NET; We look forward to serving you again. Good bye.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;The above is a typical interaction between a caller and a Speech-enabled Voice-only (telephony) FoodTalks.NET (fictitious restaurant) application. For clarity, the utterances have been numbered. Little does one realize that they are talking to a machine and not a real-life human operator. Although the above example also goes to show a good VUI (Voice User Interface) design practice, what I wanted to demonstrate here is the use of the Speech Recognition Grammar Specification (SRGS). Lets look at the above call closely by understanding the utterances by both, the System and Caller, and looking at the &lt;u&gt;underlined&lt;/u&gt; words in the utterances by the caller.&lt;br /&gt;&lt;br /&gt;When the call is connected, the music allows the caller to know that he is hearing a recorded message so there really is no need for the message to explicitly say that the caller is talking to an automated system. Also, instead of saying "What is your Customer Account Number?" which would confuse the caller whether she has to dial the Account Number or say it, the system clearly asked the caller to SAY the Customer Account Number (Utterance 1).&lt;br /&gt;&lt;br /&gt;The underlined words in the Caller utterances above represent 'tokens'. A Token is that part of an utterance which is of use to the system; the rest of the uttered words are ignored. For example, in Utterance 2, the caller could have said '&lt;i&gt;My account number is &lt;u&gt;FT1234&lt;/u&gt;&lt;/i&gt;', '&lt;i&gt;My customer account number is &lt;u&gt;FT1234&lt;/u&gt;&lt;/i&gt;', '&lt;i&gt;The Customer account number is &lt;u&gt;FT1234&lt;/u&gt;&lt;/i&gt;',  '&lt;i&gt;Customer account number is &lt;u&gt;FT1234&lt;/u&gt;&lt;/i&gt;' or simple '&lt;i&gt;&lt;u&gt;FT1234&lt;/u&gt;&lt;/i&gt;' instead of '&lt;i&gt;The account number is &lt;u&gt;FT1234&lt;/u&gt;&lt;/i&gt;'. In each case, only the Customer Account Number i.e. FT1234 is to be used by the application to validate the caller. However, in order for the system to process any of the utterances by a caller, a Grammar has to be pre-defined to allow the system to extract the token from an utterance and generate a value from the processed voice input. The Grammar is defined using the Speech Recognition Grammar Specification or SRGS (which I would blog about in detail later). In short, SRGS is an XML specification that allows Speech Application Developers to create Grammars rules in a Grammar (*.grxml) file. One grammar file can contain multiple validation rules. The Grammar file is then processed in the browser by SALT's prompt tag to process a spoken utterance by a user. For example, the grammer to process Utterance 2 would be something like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;rule id="AccountNumber" scope="public"&amp;gt;&lt;br /&gt;  &amp;lt;item repeat="0-1"&amp;gt;&lt;br /&gt;    &amp;lt;?MS_Grammar_Editor GroupWrap?&amp;gt;&lt;br /&gt;      &amp;lt;one-of&amp;gt;&lt;br /&gt;        &amp;lt;item&amp;gt;The Customer Account Number is&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item&amp;gt;The Account Number is&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item&amp;gt;My Customer Account Number is&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item&amp;gt;My Account Number is&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item&amp;gt;Customer Account Number is&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item&amp;gt;Account Number is&amp;lt;/item&amp;gt;&lt;br /&gt;     &amp;lt;/one-of&amp;gt;&lt;br /&gt;  &amp;lt;/item&amp;gt;&lt;br /&gt;  &amp;lt;item&amp;gt;F. T.&amp;lt;/item&amp;gt;&lt;br /&gt;  &amp;lt;ruleref uri="Library.grxml#Digit4" type="application/srgs+xml"/&amp;gt;&lt;br /&gt;&amp;lt;/rule&amp;gt;&lt;/pre&gt;&lt;br /&gt;The repeat="0-1" attribute represents that the item is optional and may or may not occur. The ruleref tag specifies that another rule for a 4-digit number in a seperate grammar file (Library.grxml) is being accessed.&lt;br /&gt;&lt;br /&gt;OK, thats it for me. My meal (Meal ID 786) would be here soon. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-111316234338138797?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/111316234338138797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=111316234338138797' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111316234338138797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111316234338138797'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/04/effective-vui-design-srgs.html' title='Effective VUI Design + SRGS'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-111248129406665404</id><published>2005-04-03T03:34:00.000+05:00</published><updated>2005-04-04T01:12:49.353+05:00</updated><title type='text'>Microsoft's Most Valuable Professional (MVP)</title><content type='html'>Its been 2 weeks since I first got word that I am one of the 3 receipients (from Pakistan) of Microsoft's Most Valuable Professional (MVP) award for 2005 along with my 2 comarades, &lt;a href="http://msaqib.blogspot.com"&gt;Mr. Saqib Ilyas&lt;/a&gt; and &lt;a href="http://dotnetwizards.blogspot.com"&gt;Mr. Hammad Rajjoub&lt;/a&gt;. Today, it was made official when I received an e-mail from Microsoft. It took 2 years; I am finally there.&lt;br /&gt;&lt;br /&gt;Check out my &lt;a href="https://mvp.support.microsoft.com/profile=CF9B3BB6-E724-4E52-ADCF-D9C2A5BBD8F3"&gt;MVP Profile&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-111248129406665404?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/111248129406665404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=111248129406665404' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111248129406665404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111248129406665404'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/04/microsofts-most-valuable-p_111248129406665404.html' title='Microsoft&apos;s Most Valuable Professional (MVP)'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-111221933830849449</id><published>2005-03-31T02:33:00.000+05:00</published><updated>2005-03-31T02:53:26.596+05:00</updated><title type='text'>FoodTalks.NET + A simple Business Tip</title><content type='html'>Had a meeting with a famous restaurant chain owner who wanted to get an application developed from scratch and replace his existing touch-system Point-of-Sale (POS) system with a (Multi-modal) POS Speech Application. He needed a demo to see first-hand how Speech works in a business environment. So I've started working on a new demo which I have chosen to call "FoodTalks.NET". This application would, for the first time ever, also include the logo for Voicability, my latest business venture.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Business Tip:&lt;/em&gt; Demos have been instrumental in securing software projects. So a good demo is not sufficient; you need to come up with a GREAT demo; one that does not satisfy the customers, but delights them. So take your time when you are developing a sample or demo application and pay special attention to the GUI, since it would largely impact and influence the customer's decision-making within the first 5 minutes of your demonstration meeting. An attractive GUI is of paramount importance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-111221933830849449?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/111221933830849449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=111221933830849449' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111221933830849449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111221933830849449'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/03/foodtalksnet-simple-business-tip.html' title='FoodTalks.NET + A simple Business Tip'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-111204571307193330</id><published>2005-03-29T02:32:00.000+05:00</published><updated>2005-04-03T04:22:46.043+05:00</updated><title type='text'>FlightEnquiry.NET</title><content type='html'>FlightEnquiry.NET is a small ASP.NET project that demonstrates best practices for accessing data stored in SQL Server 2000 by means of the Microsoft Data Access Application Block. The project was actually developed to showcase the Mcrosoft Speech Application SDK (SASDK) by showing ease-of-use of the SASDK (at the Microsoft ISV Community Days at Karachi and Lahore on March 18 and March 19, 2005 respectively), by speech-enabling the FlightEnquiry.NET application.&lt;br /&gt;&lt;br /&gt;My laptop started functioning again (thanks to my brother) I have uploaded the FlightEnquiry.NET source code to the &lt;a href="http://groups.yahoo.com/group/coredotnet"&gt;core.net&lt;/a&gt; User Group site on Yahoo.&lt;br /&gt;&lt;br /&gt;&lt;a href='http://photos1.blogger.com/img/174/4516/640/FlightEnquiry.jpg'&gt;&lt;img border='0' class='phostImg' src='http://photos1.blogger.com/img/174/4516/320/FlightEnquiry.jpg'&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-111204571307193330?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/111204571307193330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=111204571307193330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111204571307193330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111204571307193330'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/03/flightenquirynet_29.html' title='FlightEnquiry.NET'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-111200576549298404</id><published>2005-03-28T15:24:00.000+05:00</published><updated>2005-03-28T15:29:25.493+05:00</updated><title type='text'>Stay tuned !</title><content type='html'>My laptop suddenly decided to stop working when I returned from Islamabad. So I haven't been able to upload the code for the &lt;strong&gt;FlightEnquiry.NET&lt;/strong&gt; application I demonstrated at the Microsoft ISV Community Days event and at the AIOU seminar. Will do so as soon my notebook becomes functional.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-111200576549298404?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/111200576549298404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=111200576549298404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111200576549298404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111200576549298404'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/03/stay-tuned.html' title='Stay tuned !'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-111195897050757752</id><published>2005-03-28T02:24:00.000+05:00</published><updated>2005-03-28T02:29:30.506+05:00</updated><title type='text'>To my Enemy...</title><content type='html'>(The following is a poem I wrote back in 2000; I am yet to have my vengence.)&lt;br /&gt;&lt;br /&gt;There will be another time.&lt;br /&gt;There will be another battle.&lt;br /&gt;You'll meet your doom&lt;br /&gt;and suffer the pain,&lt;br /&gt;you'll bear the scars&lt;br /&gt;when I'm through with you.&lt;br /&gt;There will be triumph,&lt;br /&gt;and there will be glory,&lt;br /&gt;but all for me&lt;br /&gt;and none for you,&lt;br /&gt;for I will strike&lt;br /&gt;and you will perish.&lt;br /&gt;There will be a funeral.&lt;br /&gt;There will be a grave,&lt;br /&gt;Beneath it you would rot.&lt;br /&gt;Above, I would rejoice.&lt;br /&gt;Not one soul would mourn,&lt;br /&gt;beside your decaying corpse.&lt;br /&gt;There will be a consequence.&lt;br /&gt;There will be a fatality.&lt;br /&gt;Suffer you will, suffer you must.&lt;br /&gt;Hail my words friend my foe,&lt;br /&gt;'There will be another time,&lt;br /&gt;and there will be another battle.'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-111195897050757752?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/111195897050757752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=111195897050757752' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111195897050757752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111195897050757752'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/03/to-my-enemy.html' title='To my Enemy...'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-111182316618995479</id><published>2005-03-24T23:42:00.000+05:00</published><updated>2005-03-26T12:46:06.190+05:00</updated><title type='text'>Karachi, Lahore, Islamabad :: INETA Rules !</title><content type='html'>Had a fun-filled week that took me from Karachi, passing through Lahore, all the way to Islamabad. The reason, Microsoft ISV Community Days. After conducting a session on "Microsoft Speech Application SDK" at Sheraton Karachi on March 18, proceeded to Lahore alongside Mr. Saqib Ilyas, and conducted the same session at the Lahore University of Management Sciences (LUMS) on March 19. Went on to Islamabad from there. An INETA seminar was arranged in a hurry on March 24 at Allama Iqbal Open University (AIOU) comprising 2 sessions; "Introduction to INETA and the Microsoft .NET Framework" and "Developing Speech Applications in .NET". INETA Pakistan has already had a strong presence at Karachi. Now, Islamabad is on fire !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-111182316618995479?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/111182316618995479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=111182316618995479' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111182316618995479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/111182316618995479'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/03/karachi-lahore-islamabad-ineta-rules.html' title='Karachi, Lahore, Islamabad :: INETA Rules !'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-110967200102532369</id><published>2005-02-20T15:06:00.000+05:00</published><updated>2005-03-01T15:13:21.026+05:00</updated><title type='text'>Speech RAD with a pinch of SALT</title><content type='html'>&lt;p&gt;&lt;a href="http://www.vbsalt.net"&gt;VBSALT&lt;/a&gt;, a Rapid Application Development (RAD) environment from &lt;a href="http://www.pronexus.com"&gt;Pronexus&lt;/a&gt; (Microsoft Speech Partner), is a Visual Studio .NET Add-in that allows rapid development of Speech applications for the Microsoft Speech Server (MSS), making full use of components provided by the Speech Application SDK (SASDK). The name "VBSALT" may be a bit misleading at times because application code can be generated for both, VB.NET and C# applications. The company probably used "VB" in the name since VBSALT is the .NET version of "VBVoice", a Speech RAD tool for Visual Basic (classic).&lt;/p&gt;&lt;p&gt;VBSALT lets IT Managers, programmers, and Call Center developers define call-flow and swiftly generate SALT-side portion of their Speech apps, thus enabling them to concentrate on the business logic. The steps involved in developing an app using VBSALT are:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Planning the System&lt;/li&gt;&lt;li&gt;Creating the Call Flow Diagram and Setting Properties&lt;/li&gt;&lt;li&gt;Creating Grammars&lt;/li&gt;&lt;li&gt;Creating and Configuring Greetings&lt;/li&gt;&lt;li&gt;Testing the System&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;VBSALT also comes with a couple of pre-recorded greeting prompts. Call-flows can easily be defined using drag-and-drop components, which are subsequently linked together to build a visual flow-chart of call-flow logic. Grammars can be developed either using the Grammar builder provided by the SASDK or using the VBSALT VoiceForm wizard, although I think the former one is much better. Come to think of it, people had been developing Grammars by simply typing in notepad before the SASDK arrived. For now, Life is Good !&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-110967200102532369?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/110967200102532369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=110967200102532369' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110967200102532369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110967200102532369'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/02/speech-rad-with-pinch-of-salt.html' title='Speech RAD with a pinch of SALT'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-110829159227356300</id><published>2005-02-10T21:22:00.000+05:00</published><updated>2005-02-13T15:46:32.276+05:00</updated><title type='text'>Enter KOMaL v1.0</title><content type='html'>I was trying to develop an Adaptive Learning System back in 2000 and came up with an idea of Developing a GUIML (Graphic User Interface Markup Language), but the only issue was the development of a Runtime to parse and generate the GUI in real time. Luckily, Microsoft solved that problem (even though much later) by launching XAML (eXtensible Application Markup Language). I stumbled on SCORM (Sharable Content Object Reference Model) during that time too. There are a number of underlying problems with SCORM, something I would blog later.&lt;br /&gt;&lt;br /&gt;KOMaL (Knowledge Object Modeling Language) is something I have been trying to develop for the past 2 years (but my schedule wouldn't let me). Anyway, I finally came with the following small description for KOMaL which I would refine further as I discover new tools and technologies.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;The Internet is an almost-limitless resource of Information which exists in the form of web pages, followed by images, pdf files etc. However, web pages provide the only means for hosting information, each one having a URL, and acessible only through a web browser which renders the HTML in the page to display the content. Looking up or searching for information on a particular topic involves knowing the exact URL or by using a search engine where searches can only be made for a keyword. &lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Currently, the global directory of domain names maintained by InterNIC has no means of indentifying the type of content hosted at a particular domain name. In most cases, a user does not necessarily get to the exact information she requires since a search usually turns up thousands of results and it is impossible to look each one up. Since web pages are composed of textual information contained within markup, the only way the content of that page can be characterized is by making a search on the terms and keywords in it. Usually, the meta tag is used to explicitly add keywords to a web page so they may be picked up by a spider or web-crawler.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;With the advent of computers decades ago, the word "data" was adopted and used in connection with the textual and numerical facts and figues used in electronic data processing. With the proliferation of Internet a little more than a decade ago, the word "Information Technology" with emphasis on "Information" became widely used. The focus now has shifted to the word "knowledge" which primarily refers to the Information that is of particular use to an individual or organization. True, vast information is available on the internet; however, the internet failed to become a source of knowledge i.e. the most relevant and meaningful information for an individual or enterprise. In order to allow information to be represented as knowledge, changes in the existing internet architecture or infrastructure is not a possible option. The need is to come up with a new architecture that can run parallel to the existing system, is sharable, and can enable a more thorough representation of knowledge and its search mechanisms.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Finally, I have also found a couple of energetic students at SSUET to undertake this project. Wish 'em all the best.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-110829159227356300?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/110829159227356300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=110829159227356300' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110829159227356300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110829159227356300'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/02/enter-komal-v10.html' title='Enter KOMaL v1.0'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-110829265229193770</id><published>2005-02-05T15:50:00.000+05:00</published><updated>2005-03-28T15:49:41.553+05:00</updated><title type='text'>Taking TTS to a new level</title><content type='html'>I have been helping a couple of students from Jinnah University for Women develop a natural sounding Urdu TTS (Text-to-Speech) Engine. An Urdu TTS is absolutely essential if Urdu Speech Applications are to be proliferated in Pakistan. The possibilites for Urdu Speech applications here are endless for all Banks, Brokerage Houses, Call Centres, Restaurants etc., which can only be achieved with development of Urdu Speech Recognition and TTS apps.&lt;br /&gt;&lt;br /&gt;I mentioned the real-sounding SpeechWorks/ScanSoft TTS in one of my previous blogs. But one TTS I came across with actually took my breath away. It not only gives voice output (as most TTS engines do) but also provides a human character developed in Flash to speak the voice output. Brilliant work, and can prove very effective in teaching applications. Check it out at &lt;a href="http://www.sitepal.com"&gt;http://www.sitepal.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-110829265229193770?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/110829265229193770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=110829265229193770' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110829265229193770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110829265229193770'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/02/taking-tts-to-new-level.html' title='Taking TTS to a new level'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-110831584662740455</id><published>2005-02-02T22:29:00.000+05:00</published><updated>2005-02-13T22:30:46.630+05:00</updated><title type='text'>A Decade of Change</title><content type='html'>It would be 10 years since the release of Windows 1995 this year, an event that triggered the wide-spread use of computers, specially by home users, thus realizing Bill Gates' dream of "a PC in every American household". This got me thinking about so many things that happened a decade ago. For the people of my generation, or rather my age-group, this would be the first time in our lives that we would clearly be able to recall things that happened a decade ago, because before now, it was difficult (or impossible) to recall decade-old things since it would take us to a time we weren't old enough to remember or process as much information. My moving to Pakistan from abroad, my first experience with software programming, an aunt's wedding, my first crush :), all happened a decade ago, in a world that has undergone tremendous transformation and yet so much still remains. Pretty soon, it would be a decade since the release of .NET, or even Visual Studio .NET Whidbey. So, here's to a decade of across the World progress, if not prosperity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-110831584662740455?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/110831584662740455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=110831584662740455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110831584662740455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110831584662740455'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/02/decade-of-change.html' title='A Decade of Change'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-110589977087489890</id><published>2005-01-15T23:20:00.000+05:00</published><updated>2005-01-16T23:22:50.873+05:00</updated><title type='text'>INETA Pakistan Event at NED</title><content type='html'>Had a joint speaking session with Mr. Hammad Rajjoub at NED Audio-Visual Lab; the topic: "Data Access Patterns". The session was great, although the lesser than expected turnout was a turn-off. Anyway, at the end of the event, Mr. Hammad was presented with 2 DVDs: "Windows 2003 Server (Trial)" and "We Rock 24/7.NET" (both of which I ended up snatching after we got out of the hall), while I was presented with the book "Writing Secure Code" by Michael Howard &amp;amp; David LeBlanc. Great Book ! Read the first 2 chapters and am hooked to it.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-110589977087489890?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/110589977087489890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=110589977087489890' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110589977087489890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110589977087489890'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/01/ineta-pakistan-event-at-ned.html' title='INETA Pakistan Event at NED'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-110589951759473500</id><published>2005-01-14T23:55:00.000+05:00</published><updated>2005-03-28T02:48:40.760+05:00</updated><title type='text'>Debugging a Windows Service (at KFC)</title><content type='html'>&lt;p&gt;Had a nice Zinger Dinner at KFC, Gulshan-e-Iqbal with Mr. &lt;a href="http://msaqib.blogspot.com/"&gt;Saqib Ilyas&lt;/a&gt; (INETA Pakistan Country Leader) and Mr. &lt;a href="http://dotnetwizards.blogspot.com"&gt;Hammad Rajjoub&lt;/a&gt;. Discussion Points: INETA Activities, INETA Event at NED the next day, and MSMQ + Windows Services.&lt;br /&gt;&lt;br /&gt;I had spent the past 3 days trying to figure out why a Windows Service I had developed wasn't performing the task I expected it to, and since I couldn't figure out a way to debug a Windows Service, Mr Hammad (who also happens to be my Guru) was the one person I knew I could count on. :)&lt;/p&gt;&lt;p&gt;Windows Services are primarily background processes that keep running while you are free to do something else. If you want to perform a task that takes a lot of time in ASP.NET, a Windows Service is the best choice, since the ASP.NET page that initiated the (long running) process would probably timeout before the process ends. The ASP.NET page does not initiate or communicate directly with the Windows Service. It sends/places one or more Messages in a Queue (Microsoft Message Queueing) which is/are subsequently read by the Windows Service and the task is initiated.&lt;/p&gt;&lt;p&gt;Anyway, if you try to run or debug a Windows Service in Visual Studio.NET, the "Cannot start service from the command line or a debugger. A Windows Service must first be installed (using installutil.exe) and then started with the ServerExplorer, Windows Services Administrative tool or the NET START command." message would appear (and for good reason too). As I mentioned before, Windows Services are applications that run in the background and cannot be run like other applications. Also, you cannot catch and display Exceptions in a Windows Service as you would in a typical Windows or Web App. In order to run a Windows Service, do the following:&lt;/p&gt;&lt;p&gt;1) Build your Windows Service Project in VS.NET to generate its exe.&lt;/p&gt;&lt;p&gt;2) Run the Visual Studio.NET 2003 Command Prompt; OR On the DOS prompt, go to &lt;span style="font-family:courier new;"&gt;C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322&lt;/span&gt; (Directory path may vary).&lt;/p&gt;&lt;p&gt;3) Use the following command to run your Windows Service. (Subsitute the items in [...] according to your local app.)&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;installutil C:\[YourAppPath]\[AppName]\[Debug  Release]\[AppName].exe&lt;/span&gt;&lt;/p&gt;&lt;p&gt;You can view your Service running by Navigating to Start &gt; Control Panel &gt; Administrative Tools &gt; Services.&lt;/p&gt;&lt;p&gt;To start your Service, right-click it and select Start from the context menu. Thats it !&lt;br /&gt;So, How do you Debug a Windows Service? Very Simple.&lt;/p&gt;&lt;p&gt;a) Insert a breakpoint in your Windows Service app in VS.NET.&lt;/p&gt;&lt;p&gt;b) Build and run your service using Steps 1 to 3 above.&lt;/p&gt;&lt;p&gt;c) Select "Processes..." from the "Debug" Menu at the top. (The Processes Window would appear)&lt;/p&gt;&lt;p&gt;d) Locate your service in the list. (It would appear with the name you gave to the Service Project, NOT the one you specified in its property sheet.)&lt;/p&gt;&lt;p&gt;e) Click you Service in the list and click the "Attach" button.&lt;/p&gt;&lt;p&gt;To uninstall/unload the Windows Service, use the following command at the DOS prompt.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;installutil /u C:\[YourAppPath]\[AppName]\[Debug  Release]\[AppName].exe&lt;/span&gt;&lt;/p&gt;&lt;p&gt;As it turned out, my Windows Service wasn't running becoz I had used a "\" (backslash) in a value (without the escape character) that had been read from a config file. The 3 of us sat there glued to my laptop's screen, although I was distracted by the young ladies on the other table. :) Fortunatly for me, Hammad my man was there to save the day.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-110589951759473500?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/110589951759473500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=110589951759473500' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110589951759473500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110589951759473500'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/01/debugging-windows-service-at-kfc.html' title='Debugging a Windows Service (at KFC)'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-110547425147104448</id><published>2005-01-12T01:46:00.000+05:00</published><updated>2005-02-13T03:02:16.523+05:00</updated><title type='text'>ActionScript 2.0</title><content type='html'>Had a chance to go through a lot of Flash Remoting applications. None of them seemed to work. After searching for a while, I realized that all the sample applications that exist on the web were developed in Flash MX using ActionScript 1.0 which was completely based on JavaScript; while I was trying to run them on Flash MX 2004 which uses ActionScript 2.0. You can immediately tell whether the code is in ActionScript 1.0 or 2.0 simply by looking at the very first line on the code.&lt;br /&gt;&lt;br /&gt;ActionScript 1.0 uses a C/C++ resembling syntax for the include directive for including .as files to the code, like&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#include "NetServices.as";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:0;"&gt;&lt;/span&gt;&lt;br /&gt;Whereas ActionScript 2.0 uses C#-resembling syntax as&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import mx.remoting.NetServices  // Use without the semi-colon&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Also, you could not define variable type in a declaration statement in ActionScript 1.0 just like JavaScript and objects had to be explicitly instantiated in a variable to give it a type which could be changed at a later time in the program. For example&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var s; // Declaration&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;s = new String(); // Object Instantiation&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;... some code ...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;s = new Number(); // Yes, this was possible !&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, with ActionScript 2.0, you can specify type in the declaration statement.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var s:String;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Or&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var n:Number;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;NOTE: Don't waste time trying to run ActionScript 1.0 code on Flash MX 2004. For more information on Flash Remoting with ActionScript 2.0, go to&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.person13.com/flashremoting/"&gt;http://www.person13.com/flashremoting/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-110547425147104448?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/110547425147104448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=110547425147104448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110547425147104448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110547425147104448'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/01/actionscript-20.html' title='ActionScript 2.0'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-110529206571811200</id><published>2005-01-09T22:14:00.000+05:00</published><updated>2005-01-09T23:21:05.650+05:00</updated><title type='text'>Flash Remoting :: A New GUI Design Paradigm</title><content type='html'>ASP.NET, I believe, is the best Web Application technology to-date. Not only does it drastically cut down the development time, but it also enables developers to create re-usable ASP.NET Server components.&lt;br /&gt;&lt;br /&gt;However, as with every other Web Application development technology, the emphasis is on the generation of HTML that would be sent to the web browser. Each and every ASP.NET Server control needs to generate some HMTL code that would allow it to be visible when the page is rendered. This holds true even for web apps communicating with XML web services. The bottomline is, HTML is needed to format and display any information that needs to be displayed, and for every postback that occurs on a typical web page, a lot of unchanged HTML is again loaded into the browser.&lt;br /&gt;&lt;br /&gt;Enter Flash Remoting Component for .NET. This component would completely change how GUIs are developed for Web Applications in future by allowing Flash movies loaded into the browser only once to communicate with .NET Assemblies and web services without having to load again when information needs to be sent back to the page (postback). Also, in contrast with ASP.NET Server components where the developer has to think about style (GUI) as well as behavior (functionaliy), Flash Components require less attention in terms of the GUI and developers can focus more on the behavior. Recent examples include the GUI of &lt;a href="http://www.myWallop.com"&gt;www.myWallop.com&lt;/a&gt; where the whole application is Flash-based as opposed to the typical HTML web pages we are accustomed to seeing.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-110529206571811200?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/110529206571811200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=110529206571811200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110529206571811200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110529206571811200'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/01/flash-remoting-new-gui-design-paradigm.html' title='Flash Remoting :: A New GUI Design Paradigm'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-110529427177640455</id><published>2005-01-06T16:49:00.000+05:00</published><updated>2005-01-09T23:18:03.120+05:00</updated><title type='text'>Speech Works TTS</title><content type='html'>Speech Works (&lt;a href="http://www.SpeechWorks.com"&gt;http://www.SpeechWorks.com&lt;/a&gt;) has been Microsoft 's development partner for MS Speech Server 2004, mainly providing their Text-to-Speech (TTS) engine to the SDK, and have recently merged with ScanSoft.&lt;br /&gt;&lt;br /&gt;Their TTS, known as RealSpeak, is excellent. In addition to supporting multiple languages, it provides very natural sounding Speech in American, British, Australian, and Indian accents. They also have a web-based demo app. Check it out !&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.scansoft.com/realspeak/solo/"&gt;http://www.scansoft.com/realspeak/solo/&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-110529427177640455?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/110529427177640455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=110529427177640455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110529427177640455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110529427177640455'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2005/01/speech-works-tts.html' title='Speech Works TTS'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-110430615000705654</id><published>2004-12-29T13:39:00.000+05:00</published><updated>2004-12-29T12:42:30.006+05:00</updated><title type='text'>SCONEST 2004 :: JUW</title><content type='html'>Just came back from the Inaugural session of IEEE SCONEST 2004 at Jinnah University for Women. Can't seem to understand something...Why is it that the most foolish of people ends up being the IT Minister of Sindh?&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-110430615000705654?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/110430615000705654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=110430615000705654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110430615000705654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110430615000705654'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2004/12/sconest-2004-juw.html' title='SCONEST 2004 :: JUW'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-110430567620959300</id><published>2004-12-28T21:28:00.000+05:00</published><updated>2004-12-29T12:34:36.210+05:00</updated><title type='text'>Microsoft Data Access Application Block</title><content type='html'>The Data Access Application Block v2 is good and provides reusable and efficient code to retrieve and update info into the SQL Server Database, and comprises of 2 classes; SQLHelper, and SQLHelperParameterCache. However, I noticed that the code was a bit hard to understand and the code comments weren't very helpful either, so I m re-writing the whole class and hope to present it in my speech on "Data Access Patterns" at PAF KIET on December 30.&lt;br /&gt;&lt;br /&gt;Back to Work...&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-110430567620959300?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/110430567620959300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=110430567620959300' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110430567620959300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110430567620959300'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2004/12/microsoft-data-access-application.html' title='Microsoft Data Access Application Block'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-110421455659385592</id><published>2004-12-24T15:02:00.000+05:00</published><updated>2004-12-28T11:20:08.440+05:00</updated><title type='text'>INETA Seminar at NED :: Project Ideas</title><content type='html'>Had a chance to give a speech to NED final year students today about the Projects they should be working on. The Seminar went &lt;strong&gt;GREAT&lt;/strong&gt;; the students were very ambitious (reminded me of myself when I as at that stage) but had a few apprehensions whether they would be able to get through with the limited hands-on experience they have of .NET etc.&lt;br /&gt;&lt;br /&gt;All in all, the seminar gave a good idea of where to start from and they left the lecture hall knowing that INETA Pakistan was there for them.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-110421455659385592?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/110421455659385592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=110421455659385592' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110421455659385592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110421455659385592'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2004/12/ineta-seminar-at-ned-project-ideas.html' title='INETA Seminar at NED :: Project Ideas'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-110382012125475094</id><published>2004-12-23T22:01:00.000+05:00</published><updated>2004-12-23T21:42:01.253+05:00</updated><title type='text'>Islamabad, Here I come !</title><content type='html'>Rapping things up aroung here. Shifted some stuff out of my office. Took the Company's large sign off from the building. No stopping me now. Final Destination: Islamabad (Hopefully for ever).&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-110382012125475094?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/110382012125475094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=110382012125475094' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110382012125475094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110382012125475094'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2004/12/islamabad-here-i-come.html' title='Islamabad, Here I come !'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-110381984817000146</id><published>2004-11-24T21:22:00.000+05:00</published><updated>2004-12-23T21:37:28.170+05:00</updated><title type='text'>Pakistan's Public Sector catching up</title><content type='html'>Had a chance to go and observe first-hand the working of Sui Southern Gas Company, a large Public sector utility company of Pakistan, and I must say, it was comparable to any Public sector organization around the world. Much had been done to make the organization's working more efficient. Since I was there as a consultant, I was supposed to observe their bidding procedures and suggest how improvements could be made. They wanted to have a "Bid Ticker" (a name I suggested) developed to display the bids' information to the Vendors/Bidders as and when they were opened (Bids were submitted in writing and/or through the Internet). Naturally, I immediately suggested that in addition to only displaying the information, it would be great to have the bids announced by the computer, and a couple of demos later, they agreed. Got the Project !&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-110381984817000146?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/110381984817000146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=110381984817000146' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110381984817000146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110381984817000146'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2004/11/pakistans-public-sector-catching-up.html' title='Pakistan&apos;s Public Sector catching up'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-110102723150883325</id><published>2004-11-21T13:47:00.000+05:00</published><updated>2004-11-21T13:53:51.510+05:00</updated><title type='text'>Back in Karachi</title><content type='html'>Good to be back in Karachi after 2 weeks in Islamabad and Lahore. Spent the last days of Ramadan in Islamabad, and spent Eid in Lahore. Loved every bit of it !&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-110102723150883325?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/110102723150883325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=110102723150883325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110102723150883325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/110102723150883325'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2004/11/back-in-karachi.html' title='Back in Karachi'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-109976996294483672</id><published>2004-11-07T01:15:00.000+05:00</published><updated>2004-11-07T00:39:22.943+05:00</updated><title type='text'>Walking, Talking Microsoft Agents</title><content type='html'>Just downloaded the Microsoft Agent Linguistic Information Sound Editing Tool (6.2 MB exe) from &lt;a href="http://www.microsoft.com/products/msagent/downloads/developer.asp"&gt;http://www.microsoft.com/products/msagent/downloads/developer.asp&lt;/a&gt; which, simply stated, allows developers to generate the lip movement for the voice that you record into it. This is mainly to make Miscrosoft Agents talk (using speech) and make them sound more natural. Currently, the ones that pop-out in MS Office application don't talk. On the same page, is also a link to download the Microsoft Agent Character Editor, so you can develop (or edit) you own cute, and not so cute, Agents.&lt;br /&gt;&lt;br /&gt;This blends well with my own project for developing technologies to enable children learn better and smarter. More on that later.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-109976996294483672?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coredotnet.blogspot.com/feeds/109976996294483672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9006641&amp;postID=109976996294483672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/109976996294483672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/109976996294483672'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2004/11/walking-talking-microsoft-agents.html' title='Walking, Talking Microsoft Agents'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9006641.post-109957816690120249</id><published>2004-11-04T19:19:00.000+05:00</published><updated>2004-11-04T19:22:46.900+05:00</updated><title type='text'>Not a Speech-specific blog</title><content type='html'>Welcome,&lt;br /&gt;&lt;br /&gt;Although we would be discussing &lt;u&gt;Speech Technologies&lt;/u&gt; for the most part, this is &lt;strong&gt;not&lt;/strong&gt; a Speech-specific blog. Hope you can make the most of it.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9006641-109957816690120249?l=coredotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/109957816690120249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9006641/posts/default/109957816690120249'/><link rel='alternate' type='text/html' href='http://coredotnet.blogspot.com/2004/11/not-speech-specific-blog.html' title='Not a Speech-specific blog'/><author><name>Adnan Farooq Hashmi</name><uri>http://www.blogger.com/profile/02084186570374676836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
