<?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-3664591498734981084</id><updated>2011-12-26T22:23:57.484-08:00</updated><title type='text'>Developer's Corner</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>51</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-8317259826761322268</id><published>2011-12-26T22:15:00.000-08:00</published><updated>2011-12-26T22:23:57.495-08:00</updated><title type='text'>Free Online E-Books</title><content type='html'>&lt;a href="http://www.wowebook.com/"&gt;&lt;br /&gt;Click Here For Free Online E-Books&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-8317259826761322268?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/8317259826761322268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=8317259826761322268&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/8317259826761322268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/8317259826761322268'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2011/12/free-online-e-books.html' title='Free Online E-Books'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-7207896835850888037</id><published>2009-12-01T23:07:00.000-08:00</published><updated>2009-12-01T23:09:09.562-08:00</updated><title type='text'>Using LINQ to SQL</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: arial; font-size: small; "&gt;&lt;h3 style="font-size: 1.1em; text-decoration: none; "&gt;&lt;u&gt;What Is LINQ to SQL?&lt;/u&gt;&lt;/h3&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;LINQ to SQL is an &lt;a href="http://en.wikipedia.org/wiki/Object-relational_mapping" target="_blank" style="color: rgb(51, 153, 255); "&gt;O/RM&lt;/a&gt; (object relational mapping) implementation that ships in the .NET Framework "Orcas" release, and which allows you to model a relational database using .NET classes.  You can then query the database using LINQ, as well as update/insert/delete data from it.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;LINQ to SQL fully supports transactions, views, and stored procedures.  It also provides an easy way to integrate data validation and business logic rules into your data model.&lt;/p&gt;&lt;h3 style="font-size: 1.1em; text-decoration: none; "&gt;&lt;u&gt;Modeling Databases Using LINQ to SQL:&lt;/u&gt;&lt;/h3&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Visual Studio "Orcas" ships with a LINQ to SQL designer that provides an easy way to model and visualize a database as a LINQ to SQL object model.  My next blog post will cover in more depth how to use this designer (you can also &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/01/28/video-using-linq-with-asp-net-in-vs-orcas-part-1.aspx" target="_blank" style="color: rgb(51, 153, 255); "&gt;watch this video&lt;/a&gt; I made in January to see me build a LINQ to SQL model from scratch using it). &lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Using the LINQ to SQL designer I can easily create a representation of the sample "Northwind" database like below:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img src="http://www.scottgu.com/blogposts/linqtosql/step1.jpg" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; max-width: none; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;My LINQ to SQL design-surface above defines four entity classes: Product, Category, Order and OrderDetail.  The properties of each class map to the columns of a corresponding table in the database.  Each instance of a class entity represents a row within the database table.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The arrows between the four entity classes above represent associations/relationships between the different entities.  These are typically modeled using primary-key/foreign-key relationships in the database.  The direction of the arrows on the design-surface indicate whether the association is a one-to-one or one-to-many relationship.  Strongly-typed properties will be added to the entity classes based on this.  For example, the Category class above has a one-to-many relationship with the Product class.  This means it will have a "Categories" property which is a collection of Product objects within that category.  The Product class then has a "Category" property that points to a Category class instance that represents the Category to which the Product belongs.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The right-hand method pane within the LINQ to SQL design surface above contains a list of stored procedures that interact with our database model.  In the sample above I added a single "GetProductsByCategory" SPROC.  It takes a categoryID as an input argument, and returns a sequence of Product entities as a result.  We'll look at how to call this SPROC in a code sample below.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;u&gt;Understanding the DataContext Class&lt;/u&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;When you press the "save" button within the LINQ to SQL designer surface, Visual Studio will persist out .NET classes that represent the entities and database relationships that we modeled.  For each LINQ to SQL designer file added to our solution, a custom DataContext class will also be generated.  This DataContext class is the main conduit by which we'll query entities from the database as well as apply changes.  The DataContext class created will have properties that represent each Table we modeled within the database, as well as methods for each Stored Procedure we added.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;For example, below is the NorthwindDataContext class that is persisted based on the model we designed above:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img src="http://www.scottgu.com/blogposts/linqtosql/step2.jpg" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; max-width: none; " /&gt;&lt;/p&gt;&lt;h3 style="font-size: 1.1em; text-decoration: none; "&gt;&lt;u&gt;LINQ to SQL Code Examples&lt;/u&gt;&lt;/h3&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Once we've modeled our database using the LINQ to SQL designer, we can then easily write code to work against it.  Below are a few code examples that show off common data tasks:&lt;/p&gt;&lt;h4&gt;&lt;u&gt;1) Query Products From the Database&lt;/u&gt;&lt;/h4&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The code below uses LINQ query syntax to retrieve an IEnumerable sequence of Product objects.  Note how the code is querying across the Product/Category relationship to only retrieve those products in the "Beverages" category:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;em&gt;C#:&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img src="http://www.scottgu.com/blogposts/linqtosql/step3.jpg" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; max-width: none; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;em&gt;VB:&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img src="http://www.scottgu.com/blogposts/linqtosql/step9.jpg" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; max-width: none; " /&gt;&lt;/p&gt;&lt;h4&gt;&lt;u&gt;2) Update a Product in the Database&lt;/u&gt;&lt;/h4&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The code below demonstrates how to retrieve a single product from the database, update its price, and then save the changes back to the database:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;em&gt;C#:&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img src="http://www.scottgu.com/blogposts/linqtosql/step5.jpg" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; max-width: none; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;em&gt;VB:&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img src="http://www.scottgu.com/blogposts/linqtosql/step11.jpg" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; max-width: none; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;em&gt;Note: VB in "Orcas" Beta1 doesn't support Lambdas yet.  It will, though, in Beta2 - at which point the above query can be rewritten to be more concise.&lt;/em&gt;&lt;/p&gt;&lt;h4&gt;&lt;u&gt;3) Insert a New Category and Two New Products into the Database&lt;/u&gt;&lt;/h4&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The code below demonstrates how to create a new category, and then create two new products and associate them with the category.  All three are then saved into the database.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;Note below how I don't need to manually manage the primary key/foreign key relationships. Instead, just by adding the Product objects into the category's "Products" collection, and then by adding the Category object into the DataContext's "Categories" collection, LINQ to SQL will know to automatically persist the appropriate PK/FK relationships for me. &lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;em&gt;C#&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img src="http://www.scottgu.com/blogposts/linqtosql/step4.jpg" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; max-width: none; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;em&gt;VB:&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img src="http://www.scottgu.com/blogposts/linqtosql/step12.jpg" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; max-width: none; " /&gt;&lt;/p&gt;&lt;h4&gt;&lt;u&gt;4) Delete Products from the Database&lt;/u&gt;&lt;/h4&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The code below demonstrates how to delete all Toy products from the database:&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;em&gt;C#:&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img src="http://www.scottgu.com/blogposts/linqtosql/step6.jpg" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; max-width: none; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;em&gt;VB:&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img src="http://www.scottgu.com/blogposts/linqtosql/step13.jpg" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; max-width: none; " /&gt;&lt;/p&gt;&lt;h4&gt;&lt;u&gt;5) Call a Stored Procedure&lt;/u&gt;&lt;/h4&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The code below demonstrates how to retrieve Product entities not using LINQ query syntax, but rather by calling the "GetProductsByCategory" stored procedure we added to our data model above.  Note that once I retrieve the Product results, I can update/delete them and then call db.SubmitChanges() to persist the modifications back to the database.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;em&gt;C#:&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img src="http://www.scottgu.com/blogposts/linqtosql/step7.jpg" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; max-width: none; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;em&gt;VB:&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img src="http://www.scottgu.com/blogposts/linqtosql/step14.jpg" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; max-width: none; " /&gt;&lt;/p&gt;&lt;h4&gt;&lt;u&gt;6) Retrieve Products with Server Side Paging&lt;/u&gt;&lt;/h4&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;The code below demonstrates how to implement efficient server-side database paging as part of a LINQ query.  By using the Skip() and Take() operators below, we'll only return 10 rows from the database - starting with row 200.&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;em&gt;C#:&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img src="http://www.scottgu.com/blogposts/linqtosql/step8.jpg" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; max-width: none; " /&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;em&gt;VB:&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;&lt;img src="http://www.scottgu.com/blogposts/linqtosql/step10.jpg" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; max-width: none; " /&gt;&lt;/p&gt;&lt;h3 style="font-size: 1.1em; text-decoration: none; "&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/h3&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; "&gt;LINQ to SQL provides a nice, clean way to model the data layer of your application.  Once you've defined your data model you can easily and efficiently perform queries, inserts, updates and deletes against it.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-7207896835850888037?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/7207896835850888037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=7207896835850888037&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7207896835850888037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7207896835850888037'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2009/12/using-linq-to-sql.html' title='Using LINQ to SQL'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-5972918187836929429</id><published>2009-11-05T20:46:00.000-08:00</published><updated>2009-11-05T20:49:56.134-08:00</updated><title type='text'>Currency Format for Server Side Controls</title><content type='html'>monthReceipts.Text = String.Format("{0:£#,##0.00}", Convert.ToDecimal(m_accin));&lt;br /&gt;&lt;br /&gt;m_accin = Parameter Name&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-5972918187836929429?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/5972918187836929429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=5972918187836929429&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/5972918187836929429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/5972918187836929429'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2009/11/currency-format-for-server-side.html' title='Currency Format for Server Side Controls'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-4686737341691114022</id><published>2009-01-22T01:11:00.000-08:00</published><updated>2009-01-22T01:12:48.000-08:00</updated><title type='text'>Java Script Debugger in Internet Explorer 8</title><content type='html'>&lt;p&gt;When Internet Explorer 8 is installed, built-in Java Script debugger ships along. Since this is an in-proc debugger one need not launch a separate app. &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.google.com/duttavr/R9ksygyj6GI/AAAAAAAAA44/EGgU4yhhcBY/image%5B9%5D"&gt;&lt;img style="border: 0px none ;" alt="image" src="http://lh6.google.com/duttavr/R9ks3Qyj6HI/AAAAAAAAA5A/3-qupaBy8Sc/image_thumb%5B5%5D" width="443" border="0" height="95" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;span class="fullpost"&gt;It has all the familiar &lt;a title="Visual Studio 2008 Features" href="http://msdotnetsupport.blogspot.com/2007/11/22-new-features-of-visual-studio-2008.html" target="_blank" rel="Visual Studio 2008 Features"&gt;Visual Studio 2008 Features&lt;/a&gt; debugger like call stacks, watches, locals and immediate window.     &lt;p align="center"&gt;&lt;a href="http://msdotnetsupport.blogspot.com/2008/03/$InternetExplorer_8_JavaScript_Debugger.png" target="_blank"&gt;&lt;img style="border-width: 0px;" alt="image" src="http://lh4.google.com/duttavr/R9ks5wyj6II/AAAAAAAAA5I/fops1LhIjXA/image_thumb%5B4%5D" width="479" border="0" height="306" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;To get to the debugger just press SHIFT+F12, or click the developer tools icon in the command bar.     &lt;br /&gt;After launching the Developer Tools, switch to the script tab.&lt;/p&gt;&lt;/span&gt;&lt;br /&gt;&lt;img src="file:///C:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/moz-screenshot-2.jpg" alt="" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-4686737341691114022?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/4686737341691114022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=4686737341691114022&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/4686737341691114022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/4686737341691114022'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2009/01/java-script-debugger-in-internet.html' title='Java Script Debugger in Internet Explorer 8'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-6411455119698996886</id><published>2008-12-12T07:01:00.000-08:00</published><updated>2008-12-12T07:09:49.824-08:00</updated><title type='text'></title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:85%;"  &gt;&lt;u&gt;What is Multi-Targeting?&lt;/u&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:85%;"  &gt; &lt;/span&gt;&lt;/div&gt;&lt;p style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;With the past few releases of Visual Studio, each Visual Studio release only supported a specific version of the .NET Framework.  For example, VS 2002 only worked with .NET 1.0, VS 2003 only worked with .NET 1.1, and VS 2005 only worked with .NET 2.0.&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt; &lt;/span&gt;&lt;p style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;One of the big changes we are making starting with the VS 2008 release is to support what we call "Multi-Targeting" - which means that Visual Studio will now support targeting multiple versions of the .NET Framework, and developers will be able to start taking advantage of the new features Visual Studio provides without having to always upgrade their existing projects and deployed applications to use a new version of the .NET Framework library.&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt; &lt;/span&gt;&lt;p style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;Now when you open an existing project or create a new one with VS 2008, you can pick which version of the .NET Framework to work with - and the IDE will update its compilers and feature-set to match this.  Among other things, this means that features, controls, projects, item-templates, and assembly references that don't work with that version of the framework will be hidden, and when you build your application you'll be able to take the compiled output and copy it onto a machine that only has an older version of the .NET Framework installed, and you'll know that the application will work.&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt; &lt;/span&gt;&lt;h3 style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;u&gt;Creating a New Project in VS 2008 that targets .NET 2.0&lt;/u&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt; &lt;/span&gt;&lt;/div&gt;&lt;p style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;To see an example of multi-targeting in action on a recent build of VS 2008 Beta 2, we can select File-&gt;New Project to create a new application.  &lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt; &lt;/span&gt;&lt;p style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;Notice below how in the top-right of the new project dialog there is now a dropdown that allows us to indicate which versions of the .NET Framework we want to target when we create the new project.  If I keep it selected on .NET Framework 3.5, I'll see a bunch of new project templates listed that weren't in previous versions of VS (including support for WPF client applications and WCF web service projects):&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;img src="http://www.scottgu.com/blogposts/multitarget/step1.jpg" /&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;If I change the dropdown to target .NET 2.0 instead, it will automatically filter the project list to only show those project templates supported on machines with the .NET 2.0 framework installed:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;img src="http://www.scottgu.com/blogposts/multitarget/step2.jpg" /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;If I create a new ASP.NET Web Application with the .NET 2.0 dropdown setting selected, it will create a new ASP.NET project whose compilation settings, assembly references, and web.config settings are configured to work with existing ASP.NET 2.0 servers:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;img src="http://www.scottgu.com/blogposts/multitarget/step3.jpg" /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;br /&gt;When you go to the control Toolbox, you'll see that only those controls that work on ASP.NET 2.0 are listed:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.scottgu.com/blogposts/multitarget/step5.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;And if you choose Add-&gt;Reference and bring up the assembly reference picker dialog, you'll see that those .NET class assemblies that aren't supported on .NET 2.0 are grayed out and can't be added to the project (notice how the "ok" button is not active below when I have a .NET 3.0 or .NET 3.5 assembly selected):&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;img src="http://www.scottgu.com/blogposts/multitarget/step4.jpg" /&gt;&lt;br /&gt;&lt;h3 style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;u&gt;So why use VS 2008 if you aren't using the new .NET 3.5 features?&lt;/u&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt; &lt;/span&gt;&lt;/div&gt;&lt;p style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;You might be wondering: "so what value do I get when using VS 2008 to work on a ASP.NET 2.0 project versus just using my VS 2005 today?"  Well, the good news is that you get a ton of tool-specific value with VS 2008 that you'll be able to take advantage of immediately with your existing projects without having to upgrade your framework/ASP.NET version.  A few big tool features in the web development space I think you'll really like include:&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt; &lt;/span&gt;&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt; &lt;li&gt;JavaScript intellisense  &lt;/li&gt;&lt;li&gt;Much richer JavaScript debugging  &lt;/li&gt;&lt;li&gt;Nested ASP.NET master page support at design-time  &lt;/li&gt;&lt;li&gt;Rich CSS editing and layout support within the WYSIWYG designer  &lt;/li&gt;&lt;li&gt;Split-view designer support for having both source and design views open on a page at the same time  &lt;/li&gt;&lt;li&gt;A much faster ASP.NET page designer - with dramatic perf improvements in view-switches between source/design mode  &lt;/li&gt;&lt;li&gt;Automated .SQL script generation and hosting deployment support for databases on remote servers&lt;/li&gt;&lt;/span&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt; &lt;/span&gt;&lt;/div&gt;&lt;p style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;You'll be able to use all of the above features with any version of the .NET Framework - without having to upgrade your project to necessarily target newer framework versions.  I'll be blogging about these features (as well as the great new framework features) over the next few weeks.&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt; &lt;/span&gt;&lt;/div&gt;&lt;h3 style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;u&gt;So how can I upgrade an existing project to .NET 3.5 later?&lt;/u&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt; &lt;/span&gt;&lt;/div&gt;&lt;p style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;If at a later point you want to upgrade your project/site to target the NET 3.0 or NET 3.5 version of the framework libraries, you can right-click on the project in the solution explorer and pull up its properties page:&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;img src="http://www.scottgu.com/blogposts/multitarget/step6.jpg" /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;You can change the "Target Framework" dropdown to select the version of the framework you want the project to target.  Doing this will cause VS to automatically update compiler settings and references for the project to use the correct framework version.  For example, it will by default add some of the new LINQ assemblies to your project, as well as add the new System.Web.Extensions assembly that ships in .NET 3.5 which delivers new ASP.NET controls/runtime features and provides built-in ASP.NET AJAX support (this means that you no longer need to download the separate ASP.NET AJAX 1.0 install - it is now just built-in with the .NET 3.5 setup):&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;img src="http://www.scottgu.com/blogposts/multitarget/step8.jpg" /&gt;&lt;br /&gt;&lt;p style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;Once you change your project's target version you'll also see new .NET 3.5 project item templates show up in your add-&gt;new items dialog, you'll be able to reference assemblies built against .NET 3.5, as well as see .NET 3.5 specific controls show up in your toolbox.  &lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt; &lt;/span&gt;&lt;/div&gt;&lt;p style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;For example, below you can now see the new &lt;asp:listview&gt; control (which is an awesome new control that provides the ability to do data reporting, editing, insert, delete and paging scenarios - with 100% control over the markup generated and no inline styles or other html elements), as well as the new &lt;asp:linqdatasource&gt; control (which enables you to easily bind and work against LINQ to SQL data models), and &lt;asp:datapager&gt; control show up under the "Data" section of our toolbox:&lt;/asp:datapager&gt;&lt;/asp:linqdatasource&gt;&lt;/asp:listview&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;img src="http://www.scottgu.com/blogposts/multitarget/step9.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="text-align: justify;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Note that in addition to changing your framework version "up" in your project properties dialog, you can also optionally take a project that is currently building against .NET 3.0 or 3.5 and change it "down" (for example: move it from .NET 3.5 to 2.0).  This will automatically remove the newer assembly references from your project, update your web.config file, and allow you to compile against the older framework (note: if you have code in the project that was written against the new APIs, obviously you'll need to change it).&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:arial;font-size:85%;"&gt; &lt;/span&gt;&lt;h3&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;u&gt;What about .NET 1.0 and 1.1?&lt;/u&gt;&lt;/span&gt;&lt;/h3&gt;&lt;span style="font-family:arial;font-size:85%;"&gt; &lt;/span&gt;&lt;p style="text-align: justify;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Unfortunately the VS 2008 multi-targeting support only works with .NET 2.0, .NET 3.0 and .NET 3.5 - and not against older versions of the framework.  The reason for this is that there were significant CLR engine changes between .NET 1.x and 2.x that make debugging very difficult to support.  In the end the costing of the work to support that was so large and impacted so many parts of Visual Studio that we weren't able to add 1.1 support in this release.  &lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;p style="text-align: justify;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;VS 2008 does run side-by-side, though, with VS 2005, VS 2003, and VS 2002.  So it is definitely possible to continue targeting .NET 1.1 projects using VS 2003 on the same machine as VS 2008.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-6411455119698996886?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/6411455119698996886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=6411455119698996886&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/6411455119698996886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/6411455119698996886'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/12/what-is-multi-targeting-with-past-few.html' title=''/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-4652631038360446531</id><published>2008-12-03T05:02:00.000-08:00</published><updated>2008-12-03T09:15:11.173-08:00</updated><title type='text'>New Features of Visual Studio 2008 for .NET Professionals</title><content type='html'>&lt;span style="font-weight: bold;"&gt;1. LINQ Support&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a title="Introduction to LINQ" href="http://dotnetslackers.com/articles/csharp/IntroducingLINQ1.aspx" target="_blank" rel="Introduction to LINQ"&gt;LINQ&lt;/a&gt; essentially is the composition of many standard query operators that allow you to work with data in a more intuitive way regardless.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh6.google.com/duttavr/R0TMnp8D4CI/AAAAAAAAAZQ/2qS6OPbHgnQ/LINQ%5B6%5D" target="_blank"&gt;&lt;/a&gt;&lt;img src="http://lh3.google.com/duttavr/R0TMp58D4DI/AAAAAAAAAZY/2AHbn0FC1RE/LINQ_thumb%5B4%5D" /&gt;&lt;br /&gt;&lt;br /&gt;The benefits of using &lt;a title="Introduction to LINQ" href="http://dotnetslackers.com/articles/csharp/IntroducingLINQ1.aspx" target="_blank" rel="Introduction to LINQ"&gt;LINQ&lt;/a&gt; are significant – Compile time checking C# language queries, and the ability to debug step by step through queries.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Expression Blend Support&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Expression blend is &lt;a title="XAML Overview" href="http://en.wikipedia.org/wiki/XAML" target="_blank" rel="XAML Overview"&gt;XAML&lt;/a&gt; generator tool for silverlight applications. You can install &lt;a title="Expression blend" href="http://www.microsoft.com/expression/products/overview.aspx?key=blend" target="_blank" rel="Expression blend"&gt;Expression blend&lt;/a&gt; as an embedded plug-in to Visual Studio 2008. By this you can get extensive web designer and JavaScript tool.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Windows Presentation Foundation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;WPF provides you an extensive graphic functionality you never seen these before. Visual Studio 2008 contains plenty of WPF &lt;a title="Windows Presentation Foundation Library" href="http://en.wikipedia.org/wiki/Windows_Presentation_Foundation" target="_blank" rel="Windows Presentation Foundation Library"&gt;Windows Presentation Foundation Library&lt;/a&gt; templates. By this a visual developer who is new to .NET, C# and VB.NET can easily develop the 2D and 3D graphic applications.&lt;br /&gt;&lt;br /&gt;Visual Studio 2008 provides free &lt;a title="game development library" href="http://www.microsoft.com/express/samples/GameCreators/" target="_blank" rel="game development library"&gt;game development library&lt;/a&gt; kits for games developers. currently this game development kits are available for C++ and also 2D/3D &lt;a title="Dark Matter" href="http://en.wikipedia.org/wiki/Dark_matter" target="_blank" rel="Dark Matter"&gt;Dark Matter&lt;/a&gt; one image and sounds sets.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4. VS 2008 Multi-Targeting Support&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Earlier you were not able to working with .NET 1.1 applications directly in visual studio 2005. Now in Visual studio 2008 you are able to create, run, debug the &lt;a title=".NET 2.0" href="http://www.google.co.in/url?sa=t&amp;amp;ct=res&amp;amp;cd=3&amp;amp;url=http%3A%2F%2Fmsdn.microsoft.com%2Fnetframework%2F&amp;amp;ei=vpxER83XFZrOswL3p6HLDQ&amp;amp;usg=AFQjCNHyM1-motNTSr9hPQJHnObteVUaQg&amp;amp;sig2=UKjAzmVN7cXnA0dsKsR4nw" target="_blank" rel=".NET 2.0"&gt;.NET 2.0&lt;/a&gt;, &lt;a title=".NET 3.0" href="http://www.google.co.in/url?sa=t&amp;amp;ct=res&amp;amp;cd=3&amp;amp;url=http%3A%2F%2Fmsdn.microsoft.com%2Fnetframework%2F&amp;amp;ei=vpxER83XFZrOswL3p6HLDQ&amp;amp;usg=AFQjCNHyM1-motNTSr9hPQJHnObteVUaQg&amp;amp;sig2=UKjAzmVN7cXnA0dsKsR4nw" target="_blank" rel=".NET 3.0"&gt;.NET 3.0&lt;/a&gt; and &lt;a title=".NET 3.5" href="http://www.google.co.in/url?sa=t&amp;amp;ct=res&amp;amp;cd=3&amp;amp;url=http%3A%2F%2Fmsdn.microsoft.com%2Fnetframework%2F&amp;amp;ei=vpxER83XFZrOswL3p6HLDQ&amp;amp;usg=AFQjCNHyM1-motNTSr9hPQJHnObteVUaQg&amp;amp;sig2=UKjAzmVN7cXnA0dsKsR4nw" target="_blank" rel=".NET 3.5"&gt;.NET 3.5&lt;/a&gt; applications. You can also deploy .NET 2.0 applications in the machines which contains only .NET 2.0 not .NET 3.x.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5. AJAX support for ASP.NET&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh5.google.com/duttavr/R0TMtZ8D4FI/AAAAAAAAAZo/CSZnmwaDTV4/AJAX_thumb" /&gt;&lt;br /&gt;&lt;br /&gt;Previously developer has to install AJAX control library separately that does not come from VS, but now if you install Visual Studio 2008, you can built-in AJAX control library. This Ajax Library contains plenty of rich AJAX controls like Menu, TreeView, webparts and also these components support &lt;a title="JSON" href="http://json.org/" target="_blank" rel="JSON"&gt;JSON&lt;/a&gt; and VS 2008 contains in built ASP.NET AJAX Control Extenders.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;6. JavaScript Debugging Support&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Since starting of web development all the developers got frustration with solving javascript errors. Debugging the error in javascript is very difficult. Now Visual Studio 2008 makes it is simpler with javascript debugging. You can set break points and run the javaScript step by step and you can watch the local variables when you were debugging the javascript and solution explorer provides javascript document navigation support.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;7. Nested Master Page Support&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Already Visual Studio 2005 supports nested master pages concept with .NET 2.0, but the problem with this Visual Studio 2005 that pages based on nested masters can't be edited using &lt;a title="WYSIWYG" href="http://en.wikipedia.org/wiki/WYSIWYG" target="_blank" rel="WYSIWYG"&gt;WYSIWYG&lt;/a&gt; web designer. But now in VS 2008 you can even edit the nested master pages.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;8. LINQ Intellisense and Javascript Intellisense support for silverlight applications&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh4.google.com/duttavr/R0TMyJ8D4HI/AAAAAAAAAZ4/mMtjR754nk0/javascriptintellisense_thumb%5B1%5D" /&gt;&lt;br /&gt;&lt;br /&gt;Most happy part for .NET developers is Visual Studio 2008 contains intellisense support for javascript. Javascript Intellisense makes developers life easy when writing client side validation, AJAX applications and also when writing &lt;a title="Silverlight" href="http://silverlighttutorials.blogspot.com/" target="_blank" rel="Silverlight"&gt;Silverlight&lt;/a&gt; applications&lt;br /&gt;Intellisense Support: When we are writing the LINQ Query VS provides LINQ query syntax as tool tips.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;9. Organize Imports or Usings&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; We have Organize Imports feature already in &lt;a title="Eclipse" href="http://www.eclipse.org/" target="_blank" rel="Eclipse"&gt;Eclipse&lt;/a&gt;. SInce many days I have been waiting for this feature even in VS. Now VS contains Organize Imports feature which removes unnecessary namespaces which you have imported. You can select all the namespaces and right click on it, then you can get context menu with Organize imports options like "Remove Unused Usings", "Sort Usings", "Remove and Sort". Refactoring support for new .NET 3.x features like Anonymous types, Extension Methods, Lambda Expressions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;10. Intellisense Filtering&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Earlier in VS 2005 when we were typing with intellisense box all the items were being displayed. For example If we type the letter 'K' then intellisense takes you to the items starts with 'K' but also all other items will be presented in intellisense box. Now in VS 2008 if you press 'K' only the items starts with 'K' will be filtered and displayed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;11. Intellisense Box display position&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh6.google.com/duttavr/R0TM0p8D4II/AAAAAAAAAaA/JknKg6bHd_Y/javascriptintellisense%5B6%5D" target="_blank" /&gt;&lt;br /&gt;&lt;br /&gt;Earlier in some cases when you were typing the an object name and pressing . (period) then intellisense was being displayed in the position of the object which you have typed. Here the code which we type will go back to the dropdown, in this case sometimes programmer may disturb to what he was typing. Now in VS 2008 If you hold the Ctrl key while the intellisense is dropping down then intellisense box will become semi-transparent mode.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;12. Visual Studio 2008 Split View&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh5.google.com/duttavr/R0TM4Z8D4KI/AAAAAAAAAaQ/4LIzIojeIxw/spit%5B5%5D" /&gt;&lt;br /&gt;&lt;br /&gt;VS 2005 has a feature show both design and source code in single window. but both the windows tiles horizontally. In VS 2008 we can configure this split view feature to vertically, this allows developers to use maximum screen on laptops and wide-screen monitors.&lt;br /&gt;&lt;br /&gt;Here one of the good feature is if you select any HTML or ASP markup text in source window automatically corresponding item will be selected in design window.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;13. HTML JavaScript warnings, not as errors&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;VS 2005 mixes HTML errors and C# and VB.NET errors and shows in one window. Now VS 2008 separates this and shows javascript and HTML errors as warnings. But this is configurable feature.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;14. Debugging .NET Framework Library Source Code&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now in VS 2008 you can debug the source code of .NET Framework Library methods. Lets say If you want to debug the DataBind() method of DataGrid control you can place a debugging point over there and continue with debug the source code of DataBind() method.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;15. In built Silverlight Library&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh3.google.com/duttavr/R0TM758D4MI/AAAAAAAAAag/e1zRUYwZzrg/silverlight%5B3%5D" target="_blank" /&gt;&lt;br /&gt;&lt;br /&gt;Earlier we used to install &lt;a title="silverlight SDK" href="http://silverlighttutorials.blogspot.com/" target="_blank" rel="silverlight SDK"&gt;silverlight SDK&lt;/a&gt; separately, Now in VS 2008 it is inbuilt, with this you can create, debug and deploy the silverlight applications.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;16. Visual Studio &lt;/span&gt;&lt;a style="font-weight: bold;" title="Introduction to LINQ" href="http://dotnetslackers.com/articles/csharp/IntroducingLINQ1.aspx" target="_blank" rel="Introduction to LINQ"&gt;LINQ&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; Designer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh6.google.com/duttavr/R0TNBp8D4PI/AAAAAAAAAa4/1scKG0pkR7o/LINQ_thumb%5B6%5D" /&gt;&lt;br /&gt;&lt;br /&gt;Already you know in VS 2005 we have inbuilt SQL Server IDE feature. by this you no need to use any other tools like &lt;a title="SQL Server Query Analyzer" href="http://www.sql-server-performance.com/tips/query_analyzer_p1.aspx" target="_blank" rel="SQL Server Query Analyzer"&gt;SQL Server Query Analyzer&lt;/a&gt; and &lt;a title="SQL Server Enterprise Manger" href="http://msdn2.microsoft.com/en-us/library/aa215396%28SQL.80%29.aspx" target="_blank" rel="SQL Server Enterprise Manger"&gt;SQL Server Enterprise Manger&lt;/a&gt;. You have directly database explorer by this you can create connections to your database and you can view the tables and stored procedures in VS IDE itself. But now in VS 2008 it has View Designer window capability with LINQ-to-SQL.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;17. Inbuilt C++ SDK&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Earlier It was so difficult to download and configure the C++ SDK Libraries and tools for developing windows based applications. Now it is inbuilt with VS 2008 and configurable&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;18. Multilingual User Interface Architecture - MUI&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh4.google.com/duttavr/R0TNDJ8D4QI/AAAAAAAAAbA/o_Xl_k4licM/MUI%5B4%5D" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a title="MUI Architecture" href="http://en.wikipedia.org/wiki/Multilingual_User_Interface" target="_blank" rel="MUI Architecture"&gt;MUI&lt;/a&gt; is an architecture contains packages from &lt;a title="Microsoft" href="http://en.wikipedia.org/wiki/Microsoft" target="_blank" rel="Microsoft"&gt;Microsoft&lt;/a&gt; &lt;a title="Windows" href="http://en.wikipedia.org/wiki/Microsoft_Windows" target="_blank" rel="Windows"&gt;Windows&lt;/a&gt; and &lt;a title="Microsoft Office" href="http://en.wikipedia.org/wiki/Microsoft_Office" target="_blank" rel="Microsoft Office"&gt;Microsoft Office&lt;/a&gt; libraries. This supports the user to change the text language display as he wish.&lt;br /&gt;Visual Studio is now in English, Spanish, French, German, Italian, Chinese Simplified, Chinese Traditional, Japanese, and Korean. Over the next couple of months. Microsoft is reengineering the MUI which supports nine local languages then you can even view Visual studio in other 9 local languages.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;19. Microsoft Popfly Support&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh3.google.com/duttavr/R0TNI58D4TI/AAAAAAAAAbY/QpyVkr6mRhQ/popfly_thumb" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a title="Microsoft Popfly" href="http://en.wikipedia.org/wiki/Popfly" target="_blank" rel="Microsoft Popfly"&gt;Microsoft Popfly&lt;/a&gt; explorer is an add-on to VS 2008, by this directly you can deploy or hosting the &lt;a title="Silverlight" href="http://silverlighttutorials.blogspot.com/" target="_blank"&gt;Silverlight&lt;/a&gt; applications and &lt;a title="Marshup" href="http://en.wikipedia.org/wiki/Mashup_%28web_application_hybrid%29" target="_blank" rel="Marshup"&gt;Marshup&lt;/a&gt; objects&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;20. Free Tools and Resources&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;People may feel that I am a promoter to Visual Studio 2008 as a salesman, but we get plenty of free resources and free tools with Visual Studio 2008.&lt;br /&gt;&lt;a title="Visual Studio 2008 Download" href="http://www.google.co.in/url?sa=t&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fmsdn2.microsoft.com%2Fen-us%2Fvstudio%2Fproducts%2Faa700831.aspx&amp;amp;ei=Qo9ER8aWOprOswL1p6HLDQ&amp;amp;usg=AFQjCNEHY96_pm6BWmPShgpUZ8PQqboi6w&amp;amp;sig2=tfbu4UMxXzsMFeXHayyaDA" target="_blank" rel="Visual Studio 2008 Download"&gt;Visual Studio 2008 Trial&lt;/a&gt;&lt;br /&gt;&lt;a title="LINQ Samples" href="http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx" target="_blank" rel="LINQ Samples"&gt;101 LINQ Samples&lt;/a&gt;&lt;br /&gt;Free .NET 3.5 control libraries with free sample programs,&lt;br /&gt;You can get plenty of free video training tutorials from &lt;a title="BDLC - Beginner Developer Learning Center" href="http://msdn2.microsoft.com/en-us/beginner/default.aspx" target="_blank" rel="BDLC - Beginner Developer Learning Center"&gt;Microsoft BDLC - Beginner Developer Learning Center&lt;/a&gt;,&lt;br /&gt;C++ games development library,&lt;br /&gt;Microsoft has provided lot of e-Books,&lt;br /&gt;P2P library and&lt;br /&gt;Microsoft is providing Coding4Fun sample program kit.&lt;br /&gt;Visual Studio Registration Discounts: If you register the Visual Studio you get Free Control Libraries, Books, Images, and Discounts.&lt;br /&gt;&lt;a title="Download Visual Studio 2008" href="http://msdn2.microsoft.com/hi-in/vstudio/aa700830.aspx" target="_blank" rel="Download Visual Studio 2008"&gt;Download Visual Studio 2008&lt;/a&gt; free trial&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;21. We can use for Commercial&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Earlier you were spending lot of money to host your .NET applications for commercial use. Now you no need to worry Now Microsoft is providing you to host your application free on Popfly for web pages and also visual studio express projects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-4652631038360446531?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/4652631038360446531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=4652631038360446531&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/4652631038360446531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/4652631038360446531'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/12/21-new-features-of-visual-studio-2008.html' title='New Features of Visual Studio 2008 for .NET Professionals'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-4073376242131109741</id><published>2008-11-27T01:25:00.000-08:00</published><updated>2008-11-27T01:35:41.023-08:00</updated><title type='text'>Microsoft Chart Controls for Microsoft .NET Framework 3.5</title><content type='html'>Microsoft recently released a cool new ASP.NET server control - &lt;asp:chart /&gt; - that can be used for free with ASP.NET 3.5 to enable rich browser-based charting scenarios:&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=130f7986-bf49-4fe5-9ca8-910ae6ea442c&amp;DisplayLang=en" target="_blank"&gt;Download the free Microsoft Chart Controls&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=1D69CE13-E1E5-4315-825C-F14D33A303E9&amp;displaylang=en" target="_blank"&gt;Download the VS 2008 Tool Support for the Chart Controls&lt;/a&gt;&lt;br /&gt;&lt;a href="http://code.msdn.microsoft.com/mschart/Release/ProjectReleases.aspx?ReleaseId=1591" target="_blank"&gt;Download the Microsoft Chart Controls Samples&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=EE8F6F35-B087-4324-9DBA-6DD5E844FD9F&amp;displaylang=en" target="_blank"&gt;Download the Microsoft Chart Controls Documentation&lt;/a&gt;&lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/MSWinWebChart/threads/" target="_blank"&gt;Visit the Microsoft Chart Control Forum&lt;/a&gt;&lt;br /&gt;Once installed the &lt;asp:chart/&gt; control shows up under the "Data" tab on the Toolbox, and can be easily declared on any ASP.NET page as a standard server control.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-4073376242131109741?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/4073376242131109741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=4073376242131109741&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/4073376242131109741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/4073376242131109741'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/11/microsoft-chart-controls-for-microsoft.html' title='Microsoft Chart Controls for Microsoft .NET Framework 3.5'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-8628898564542561608</id><published>2008-10-23T22:05:00.000-07:00</published><updated>2008-10-23T22:09:01.864-07:00</updated><title type='text'>Get Max Number On String</title><content type='html'>--"TOOL_TYP_CODE" = COLUMN NAME&lt;br /&gt;--"DMS_DCT_TOOL_TYPE" = TABLE&lt;br /&gt;--"WBD0" = CODE LAST&lt;br /&gt;SELECT &lt;br /&gt;MAX(CONVERT(INTEGER,SUBSTRING(TOOL_TYP_CODE,5,4)))&lt;br /&gt;FROM DMS_DCT_TOOL_TYPE&lt;br /&gt;WHERE TOOL_TYP_CODE LIKE 'WBD0%'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-8628898564542561608?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/8628898564542561608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=8628898564542561608&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/8628898564542561608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/8628898564542561608'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/10/get-max-number-on-string.html' title='Get Max Number On String'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-7297997149439674683</id><published>2008-10-16T22:27:00.000-07:00</published><updated>2008-10-16T22:28:31.011-07:00</updated><title type='text'>To disable autorecovery in .net</title><content type='html'>To disable autorecovery in .net : &lt;br /&gt;&lt;br /&gt;Go to Registry and change to 0 (zero) value of the following key:&lt;br /&gt;&lt;br /&gt;HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\90\Tools\Shell\General\AutoRecover\AutoRecover Enabled&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-7297997149439674683?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/7297997149439674683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=7297997149439674683&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7297997149439674683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7297997149439674683'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/10/to-disable-autorecovery-in-net.html' title='To disable autorecovery in .net'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-1971860589021887800</id><published>2008-10-16T01:40:00.000-07:00</published><updated>2008-10-16T01:41:18.185-07:00</updated><title type='text'>Generate Serial No. in SQL</title><content type='html'>Row_Number() over (Order by Emp_ID) as Serial&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-1971860589021887800?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/1971860589021887800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=1971860589021887800&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/1971860589021887800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/1971860589021887800'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/10/generate-serial-no-in-sql.html' title='Generate Serial No. in SQL'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-8549697308351661594</id><published>2008-10-06T21:33:00.000-07:00</published><updated>2008-10-06T21:34:12.838-07:00</updated><title type='text'>C# Basic Questions</title><content type='html'>Que:- What’s the implicit name of the parameter that gets passed into the class’ set method? &lt;br /&gt;Ans:- Value, and its datatype depends on whatever variable we’re changing. &lt;br /&gt;&lt;br /&gt;Que:- How do you inherit from a class in C#?&lt;br /&gt;Ans:- Place a colon and then the name of the base class. Notice that it’s double &lt;br /&gt;colon in C++.&lt;br /&gt;&lt;br /&gt;Que:- Does C# support multiple inheritance?&lt;br /&gt;Ans:- No, use interfaces instead. &lt;br /&gt;&lt;br /&gt;Que:- When you inherit a protected class-level variable, who is it available to? &lt;br /&gt;Ans:- Classes in the same namespace. &lt;br /&gt;&lt;br /&gt;Que:- Are private class-level variables inherited? &lt;br /&gt;Ans:- Yes, but they are not accessible, so looking at it you can honestly say that they are not inherited. But they are. &lt;br /&gt;&lt;br /&gt;Que:- Describe the accessibility modifier protected internal. &lt;br /&gt;Ans:- It’s available to derived classes and classes within the same Assembly (and naturally from the base class it’s declared in). &lt;br /&gt;&lt;br /&gt;Que:- C# provides a default constructor for me. I write a constructor that takes a string as a parameter, but want to keep the no parameter one. How many constructors should I write? &lt;br /&gt;Ans:- Two. Once you write at least one constructor, C# cancels the freebie constructor, and now you have to write one yourself, even if there’s no implementation in it. &lt;br /&gt;&lt;br /&gt;Que:- What’s the top .NET class that everything is derived from?&lt;br /&gt;Ans:- System.Object.&lt;br /&gt;&lt;br /&gt;Que:- How’s method overriding different from overloading?&lt;br /&gt;Ans:- When overriding, you change the method behavior for a derived class. Overloading simply involves having a method with the same name within the class. &lt;br /&gt;&lt;br /&gt;Que:- What does the keyword virtual mean in the method definition? &lt;br /&gt;Ans:- The method can be over-ridden. &lt;br /&gt;&lt;br /&gt;Que:- Can you declare the override method static while the original method is non-static? &lt;br /&gt;Ans:- No, you can’t, the signature of the virtual method must remain the same, only the keyword virtual is changed to keyword override. &lt;br /&gt;&lt;br /&gt;Que:- Can you override private virtual methods? &lt;br /&gt;Ans:- No, moreover, you cannot access private methods in inherited classes, have to be protected in the base class to allow any sort of access. &lt;br /&gt;&lt;br /&gt;Que:- Can you prevent your class from being inherited and becoming a base class for some other classes? &lt;br /&gt;Ans:- Yes, that’s what keyword sealed in the class definition is for. The developer trying to derive from your class will get a message: cannot inherit from Sealed class WhateverBaseClassName. It’s the same concept as final class in Java. &lt;br /&gt;&lt;br /&gt;Que:- Can you allow class to be inherited, but prevent the method from being over-ridden? &lt;br /&gt;Ans:- Yes, just leave the class public and make the method sealed. &lt;br /&gt;&lt;br /&gt;Que:- What’s an abstract class?&lt;br /&gt;Ans:- A class that cannot be instantiated. A concept in C++ known as pure virtual method. A class that must be inherited and have the methods over-ridden. Essentially, it’s a blueprint for a class without any implementation. &lt;br /&gt;&lt;br /&gt;Que:- When do you absolutely have to declare a class as abstract (as opposed to free-willed educated choice or decision based on UML diagram)? &lt;br /&gt;Ans:- When at least one of the methods in the class is abstract. When the class itself is inherited from an abstract class, but not all base abstract methods have been over-ridden. &lt;br /&gt;&lt;br /&gt;Que:- What’s an interface class?&lt;br /&gt;Ans:- It’s an abstract class with public abstract methods all of which must be implemented in the inherited classes. &lt;br /&gt;&lt;br /&gt;Que:- Why can’t you specify the accessibility modifier for methods inside the interface? &lt;br /&gt;Ans:- They all must be public. Therefore, to prevent you from getting the false impression that you have any freedom of choice, you are not allowed to specify any accessibility, it’s public by default. &lt;br /&gt;&lt;br /&gt;Que:- Can you inherit multiple interfaces? &lt;br /&gt;Ans:- Yes, why not.&lt;br /&gt;&lt;br /&gt;Que:- And if they have conflicting method names? &lt;br /&gt;Ans:- It’s up to you to implement the method inside your own class, so implementation is left entirely up to you. This might cause a problem on a higher-level scale if similarly named methods from different interfaces expect different data, but as far as compiler cares you’re okay. &lt;br /&gt;&lt;br /&gt;Que:- What’s the difference between an interface and abstract class?&lt;br /&gt;Ans:- In the interface all methods must be abstract; in the abstract class some methods can be concrete. In the interface no accessibility modifiers are allowed, which is ok in abstract classes. &lt;br /&gt;&lt;br /&gt;Que:- How can you overload a method?&lt;br /&gt;Ans:- Different parameter data types, different number of parameters, different order of parameters. &lt;br /&gt;&lt;br /&gt;Que:- If a base class has a bunch of overloaded constructors, and an inherited class has another bunch of overloaded constructors, can you enforce a call from an inherited constructor to an arbitrary base constructor?&lt;br /&gt;Ans:- Yes, just place a colon, and then keyword base (parameter list to invoke the appropriate constructor) in the overloaded constructor definition inside the inherited class. &lt;br /&gt;&lt;br /&gt;Que:- What’s the difference between System.String and System.StringBuilder classes? &lt;br /&gt;Ans:- System.String is immutable; System.StringBuilder was designed with the purpose of having a mutable string where a variety of operations can be performed. &lt;br /&gt;&lt;br /&gt;Que:- What’s the advantage of using System.Text.StringBuilder over System.String?&lt;br /&gt;Ans:- StringBuilder is more efficient in the cases, where a lot of manipulation is done to the text. Strings are immutable, so each time it’s being operated on, a new instance is created. &lt;br /&gt;&lt;br /&gt;Que:- Can you store multiple data types in System.Array?&lt;br /&gt;Ans:- No. &lt;br /&gt;&lt;br /&gt;Que:- What’s the difference between the System.Array.CopyTo() and System.Array.Clone()? &lt;br /&gt;Ans:- The first one performs a deep copy of the array, the second one is shallow. &lt;br /&gt;&lt;br /&gt;Que:- How can you sort the elements of the array in descending order? &lt;br /&gt;Ans:- By calling Sort() and then Reverse() methods. &lt;br /&gt;&lt;br /&gt;Que:- What’s the .NET datatype that allows the retrieval of data by a unique key? &lt;br /&gt;Ans:- HashTable. &lt;br /&gt;&lt;br /&gt;Que:- What’s class SortedList underneath?&lt;br /&gt;Ans:- A sorted HashTable. &lt;br /&gt;&lt;br /&gt;Que:- Will finally block get executed if the exception had not occurred? &lt;br /&gt;Ans:- Yes. &lt;br /&gt;&lt;br /&gt;Que:- What’s the C# equivalent of C++ catch (…), which was a catch-all statement for any possible exception?&lt;br /&gt;Ans:- A catch block that catches the exception of type System.Exception. You can also omit the parameter data type in this case and just write catch {}. &lt;br /&gt;&lt;br /&gt;Que:- Can multiple catch blocks be executed?&lt;br /&gt;Ans:- No, once the proper catch code fires off, the control is transferred to the finally block (if there are any), and then whatever follows the finally block. &lt;br /&gt;&lt;br /&gt;Que:- Why is it a bad idea to throw your own exceptions?&lt;br /&gt;Ans:- Well, if at that point you know that an error has occurred, then why not write the proper code to handle that error instead of passing a new Exception object to the catch block? Throwing your own exceptions signifies some design flaws in the project. &lt;br /&gt;&lt;br /&gt;Que:- What’s a delegate?&lt;br /&gt;Ans:- A delegate object encapsulates a reference to a method. In C++ they were referred to as function pointers. &lt;br /&gt;&lt;br /&gt;Que:- What’s a multicast delegate?&lt;br /&gt;Ans:- It’s a delegate that points to and eventually fires off several methods. &lt;br /&gt;&lt;br /&gt;Que:- How’s the DLL Hell problem solved in .NET? &lt;br /&gt;Ans:- Assembly versioning allows the application to specify not only the library it needs to run (which was available under Win32), but also the version of the assembly. &lt;br /&gt;&lt;br /&gt;Que:- What are the ways to deploy an assembly?&lt;br /&gt;Ans:- An MSI installer, a CAB archive, and XCOPY command. &lt;br /&gt;&lt;br /&gt;Que:- What’s a satellite assembly?&lt;br /&gt;Ans:- When you write a multilingual or multi-cultural application in .NET, and want to distribute the core application separately from the localized modules, the localized assemblies that modify the core application are called satellite assemblies. &lt;br /&gt;&lt;br /&gt;Que:- What namespaces are necessary to create a localized application? &lt;br /&gt;Ans:- System.Globalization, System.Resources. &lt;br /&gt;&lt;br /&gt;Que:- What’s the difference between // comments, /* */ comments and /// comments? &lt;br /&gt;Ans:- Single-line, multi-line and XML documentation comments. &lt;br /&gt;&lt;br /&gt;Que:- How do you generate documentation from the C# file commented properly with a command-line compiler? &lt;br /&gt;Ans:- Compile it with a /doc switch. &lt;br /&gt;&lt;br /&gt;Que:- What’s the difference between and XML documentation tag? &lt;br /&gt;Ans:- Single line code example and multiple-line code example. &lt;br /&gt;&lt;br /&gt;Que:- Is XML case-sensitive?&lt;br /&gt;Ans:- Yes, so and are different elements. &lt;br /&gt;&lt;br /&gt;Que:- What debugging tools come with the .NET SDK?&lt;br /&gt;Ans:- CorDBG – command-line debugger, and DbgCLR – graphic debugger. Visual Studio .NET uses the DbgCLR. To use CorDbg, you must compile the original C# file using the /debug switch. &lt;br /&gt;&lt;br /&gt;Que:- What does the This window show in the debugger?&lt;br /&gt;Ans:- It points to the object that’s pointed to by this reference. Object’s instance data is shown. &lt;br /&gt;&lt;br /&gt;Que:- What does assert() do?&lt;br /&gt;Ans:- In debug compilation, assert takes in a Boolean condition as a parameter, and shows the error dialog if the condition is false. The program proceeds without any interruption if the condition is true. &lt;br /&gt;&lt;br /&gt;Que:- What’s the difference between the Debug class and Trace class? &lt;br /&gt;Ans:- Documentation looks the same. Use Debug class for debug builds, use Trace class for both debug and release builds. &lt;br /&gt;&lt;br /&gt;Que:- Why are there five tracing levels in System.Diagnostics.TraceSwitcher? &lt;br /&gt;Ans:- The tracing dumps can be quite verbose and for some applications that are constantly running you run the risk of overloading the machine and the hard drive there. Five levels range from None to Verbose, allowing to fine-tune the tracing activities.&lt;br /&gt;&lt;br /&gt;Que:- Where is the output of TextWriterTraceListener redirected? &lt;br /&gt;Ans:- To the Console or a text file depending on the parameter passed to the constructor. &lt;br /&gt;&lt;br /&gt;Que:- How do you debug an ASP.NET Web application? &lt;br /&gt;Ans:- Attach the aspnet_wp.exe process to the DbgClr debugger. &lt;br /&gt;&lt;br /&gt;Que:- What are three test cases you should go through in unit testing? &lt;br /&gt;Ans:- Positive test cases (correct data, correct output), negative test cases (broken or missing data, proper handling), exception test cases (exceptions are thrown and caught properly). &lt;br /&gt;&lt;br /&gt;Que:- Can you change the value of a variable while debugging a C# application? &lt;br /&gt;Ans:- Yes, if you are debugging via Visual Studio.NET, just go to Immediate window. &lt;br /&gt;&lt;br /&gt;Que:- Explain the three services model (three-tier application). &lt;br /&gt;Ans:- Presentation (UI), business (logic and underlying code) and data (from storage or other sources). &lt;br /&gt;&lt;br /&gt;Que:- What are advantages and disadvantages of Microsoft-provided data provider classes in ADO.NET? &lt;br /&gt;Ans:- SQLServer.NET data provider is high-speed and robust, but requires SQL Server license purchased from Microsoft. OLE-DB.NET is universal for accessing other sources, like Oracle, DB2, Microsoft Access and Informix, but it’s a .NET layer on top of OLE layer, so not the fastest thing in the world. ODBC.NET is a deprecated layer provided for backward compatibility to ODBC engines. &lt;br /&gt;&lt;br /&gt;Que:-. What’s the role of the DataReader class in ADO.NET connections? &lt;br /&gt;Ans:- It returns a read-only dataset from the data source when the command is executed. &lt;br /&gt;&lt;br /&gt;Que:- What is the wildcard character in SQL? Let’s say you want to query database with LIKE for all employees whose name starts with La. &lt;br /&gt;Ans:- The wildcard character is %, the proper query with LIKE would involve ‘La%’. &lt;br /&gt;&lt;br /&gt;Que:- Explain ACID rule of thumb for transactions.&lt;br /&gt;Ans:- Transaction must be Atomic (it is one unit of work and does not dependent on previous and following transactions), Consistent (data is either committed or roll back, no “in-between” case where something has been updated and something hasn’t), Isolated (no transaction sees the intermediate results of the current transaction), Durable (the values persist if the data had been committed even if the system crashes right after). &lt;br /&gt;&lt;br /&gt;Que:- What connections does Microsoft SQL Server support?&lt;br /&gt;Ans:- Windows Authentication (via Active Directory) and SQL Server authentication (via Microsoft SQL Server username and passwords). &lt;br /&gt;&lt;br /&gt;Que:- Which one is trusted and which one is untrusted? &lt;br /&gt;Ans:- Windows Authentication is trusted because the username and password are checked with the Active Directory, the SQL Server authentication is untrusted, since SQL Server is the only verifier participating in the transaction. &lt;br /&gt;&lt;br /&gt;Que:- Why would you use untrusted verificaion?&lt;br /&gt;Ans:- Web Services might use it, as well as non-Windows applications. &lt;br /&gt;&lt;br /&gt;Que:- What does the parameter Initial Catalog define inside Connection String? &lt;br /&gt;Ans:- The database name to connect to. &lt;br /&gt;&lt;br /&gt;Que:- What’s the data provider name to connect to Access database? &lt;br /&gt;Ans:- Microsoft.Access. &lt;br /&gt;&lt;br /&gt;Que:- What does Dispose method do with the connection object? &lt;br /&gt;Ans:- Deletes it from the memory. &lt;br /&gt;&lt;br /&gt;Que:- What is a pre-requisite for connection pooling?&lt;br /&gt;Ans:- Multiple processes must agree that they will share the same connection, where every parameter is the same, including the security settings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-8549697308351661594?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/8549697308351661594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=8549697308351661594&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/8549697308351661594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/8549697308351661594'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/10/c-basic-questions.html' title='C# Basic Questions'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-7357969595021453054</id><published>2008-10-06T21:30:00.000-07:00</published><updated>2008-10-06T21:32:57.058-07:00</updated><title type='text'>Asp.net Questions</title><content type='html'>Que:- What is the sequence in which ASP.NET events are processed ?&lt;br /&gt;Ans:- Following is the sequence in which the events occur :-&lt;br /&gt;* Page_Init.&lt;br /&gt;* Page_Load.&lt;br /&gt;* Control events.&lt;br /&gt;* Page_Unload event.&lt;br /&gt;Page_init event only occurs when first time the page is started, but Page_Load occurs in subsequent request of the page.&lt;br /&gt;&lt;br /&gt;Que:- In which event are the controls fully loaded ?&lt;br /&gt;Ans:- Page_load event guarantees that all controls are fully loaded. Controls are also accessed in Page_Init events but you will see that viewstate is not fully loaded during this event.&lt;br /&gt;&lt;br /&gt;Que:- How can we identify that the Page is PostBack ?&lt;br /&gt;Ans:- Page object has a “IsPostBack” property which can be checked to know that is the page posted back.&lt;br /&gt;&lt;br /&gt;Que:-What is event bubbling ?&lt;br /&gt;Ans:- Server controls like Datagrid, DataList, Repeater can have other child controls inside them. Example DataGrid can have combo box inside datagrid. These child control do not raise there events by themselves, rather they pass the event to the container parent (which can be a datagrid, datalist, repeater), which passed to the page as “ItemCommand” event. As the child control send there events to parent this is termed as event bubbling.&lt;br /&gt;&lt;br /&gt;Que:- If we want to make sure that no one has tampered with ViewState, how do we ensure it?&lt;br /&gt;Ans:- Using the @Page directive EnableViewStateMac to True.&lt;br /&gt;&lt;br /&gt;Que:- What is AppSetting Section in “Web.Config” file?&lt;br /&gt;Ans:- Web.config file defines configuration for a webproject. Using “AppSetting” section we can define user defined values. Example below defined is ConnectionString” section which will be used through out the project for database connection.&lt;br /&gt;&lt;br /&gt;Que:- Where is ViewState information stored ?&lt;br /&gt;Ans:- In HTML Hidden Fields.&lt;br /&gt;&lt;br /&gt;Que:- How can we create custom controls in ASP.NET ?&lt;br /&gt;Ans:- User controls are created using .ASCX in ASP.NET. After .ASCX file is created you need to two things in order that the ASCX can be used in project:&lt;br /&gt;&lt;br /&gt;* Register the ASCX control in page using the &lt;br /&gt;* Now to use the above accounting footer in page you can use the below directive.&lt;br /&gt;&lt;br /&gt;Que:- How many types of validation controls are provided by ASP.NET ?&lt;br /&gt;Ans:- There are six main types of validation controls :-&lt;br /&gt;1). RequiredFieldValidator :-&lt;br /&gt;&lt;br /&gt;It checks whether the control have any value. It's used when you want the control should not be empty.&lt;br /&gt;&lt;br /&gt;2). RangeValidator :- &lt;br /&gt;&lt;br /&gt;It checks if the value in validated control is in that specific range. Example&lt;br /&gt;TxtCustomerCode should not be more than eight length.&lt;br /&gt;&lt;br /&gt;3). CompareValidator:-&lt;br /&gt;&lt;br /&gt;It checks that the value in controls should match the value in other control. Example&lt;br /&gt;Textbox TxtPie should be equal to 3.14.&lt;br /&gt;&lt;br /&gt;4). RegularExpressionValidator:-&lt;br /&gt;&lt;br /&gt;When we want the control value should match with a specific regular expression.&lt;br /&gt;&lt;br /&gt;5). CustomValidator:-&lt;br /&gt;&lt;br /&gt;It is used to define UserDefined validation.&lt;br /&gt;&lt;br /&gt;6). ValidationSummary:-&lt;br /&gt;&lt;br /&gt;It displays summary of all current validation errors.&lt;br /&gt;&lt;br /&gt;Que:- Can you explain what is “AutoPostBack” feature in ASP.NET ?&lt;br /&gt;Ans:- If we want the control to automatically postback in case of any event, we will need to check this attribute as true. Example on a ComboBox change we need to send the event immediately to the server side then set the “AutoPostBack” attribute to true.&lt;br /&gt;&lt;br /&gt;Que:- How can you enable automatic paging in DataGrid ?&lt;br /&gt;Ans:- Following are the points to be done in order to enable paging in Datagrid :-&lt;br /&gt;* Set the “AllowPaging” to true.&lt;br /&gt;* In PageIndexChanged event set the current pageindex clicked.&lt;br /&gt;&lt;br /&gt;Que:-What is the difference between “Web.config” and “Machine.Config” ?&lt;br /&gt;Ans:- “Web.config” files apply settings to each web application, while Machine.config” file apply settings to all ASP.NET applications.&lt;br /&gt;&lt;br /&gt;Que:- What is the difference between Server.Transfer and response.Redirect ?&lt;br /&gt;Ans:- Following are the major differences between them:-&lt;br /&gt;* Response.Redirect sends message to the browser saying it to move to some&lt;br /&gt;different page, while server.transfer does not send any message to the browser&lt;br /&gt;but rather redirects the user directly from the server itself. So in server.transfer&lt;br /&gt;there is no round trip while response.redirect has a round trip and hence puts&lt;br /&gt;a load on server.&lt;br /&gt;&lt;br /&gt;* Using Server.Transfer you can not redirect to a different from the server itself.&lt;br /&gt;Example if your server is www.yahoo.com you can use server.transfer to move&lt;br /&gt;to www.microsoft.com but yes you can move to www.yahoo.com/travels, i.e.&lt;br /&gt;within websites. This cross server redirect is possible only using&lt;br /&gt;Response.redirect.&lt;br /&gt;&lt;br /&gt;* With server.transfer you can preserve your information. It has a parameter&lt;br /&gt;called as “preserveForm”. So the existing query string etc. will be able in the&lt;br /&gt;calling page. In response.redirect you can maintain the state, but has&lt;br /&gt;lot of drawbacks.&lt;br /&gt;&lt;br /&gt;Que:- What is the difference between Authentication and authorization?&lt;br /&gt;Ans:- This can be a tricky question. These two concepts seem altogether similar but there is wide range of difference. Authentication is verifying the identity of a user and authorization is process where we check does this identity have access rights to the system. In short we can say the following authentication is the process of obtaining some sort of credentials from the users and using those credentials to verify the user’s identity. Authorization is the process of allowing an authenticated user access to resources. Authentication always proceed to Authorization; even if your application lets anonymous users connect and use&lt;br /&gt;the application, it still authenticates them as being anonymous.&lt;br /&gt;&lt;br /&gt;Que:- What are the various ways of authentication techniques in ASP.NET?&lt;br /&gt;Ans:- Selecting an authentication provider is as simple as making an entry in the web.config file for the application. You can use one of these entries to select the corresponding built in authentication provider:&lt;br /&gt;&lt;br /&gt;* authentication mode=”windows”&lt;br /&gt;* authentication mode=”passport”&lt;br /&gt;* authentication mode=”forms”&lt;br /&gt;* Custom authentication where you might install an ISAPI filter in IIS that&lt;br /&gt;compares incoming requests to list of source IP addresses, and considers&lt;br /&gt;requests to be authenticated if they come from an acceptable address. In that&lt;br /&gt;case, you would set the authentication mode to none to prevent any of the&lt;br /&gt;.net authentication providers from being triggered.&lt;br /&gt;&lt;br /&gt;Que:- How does authorization work in ASP.NET?&lt;br /&gt;Ans:- ASP.NET impersonation is controlled by entries in the applications web.config file. The default setting is “no impersonation”. You can explicitly specify that ASP.NET shouldn’t use impersonation by including the following code in the file&lt;br /&gt;&lt;br /&gt;It means that ASP.NET will not perform any authentication and runs with its own&lt;br /&gt;privileges. By default ASP.NET runs as an unprivileged account named ASPNET. You&lt;br /&gt;can change this by making a setting in the processModel section of the machine.config&lt;br /&gt;file. When you make this setting, it automatically applies to every site on the server. To user a high-privileged system account instead of a low-privileged set the userNameattribute of the processModel element to SYSTEM. Using this setting is a definite security risk, as it elevates the privileges of the ASP.NET process to a point where it can do bad things to the operating system.&lt;br /&gt;&lt;br /&gt;Que:- What’s difference between Datagrid, Datalist and repeater ?&lt;br /&gt;Ans:- A Datagrid, Datalist and Repeater are all ASP.NET data Web controls.&lt;br /&gt;They have many things in common like DataSource Property, DataBind Method&lt;br /&gt;ItemDataBound and ItemCreated.&lt;br /&gt;When you assign the DataSource Property of a Datagrid to a DataSet then each DataRow&lt;br /&gt;present in the DataRow Collection of DataTable is assigned to a corresponding&lt;br /&gt;DataGridItem and this is same for the rest of the two controls also. But The HTML code generated for a Datagrid has an HTML TABLE element created for the particular DataRow and its a Table form representation with Columns and Rows.&lt;br /&gt;For a Datalist its an Array of Rows and based on the Template Selected and the&lt;br /&gt;RepeatColumn Property value We can specify how many DataSource records should&lt;br /&gt;appear per HTML table row. In short in datagrid we have one record per row, but in&lt;br /&gt;datalist we can have five or six rows per row.&lt;br /&gt;For a Repeater Control, the Datarecords to be displayed depends upon the Templates&lt;br /&gt;specified and the only HTML generated is the due to the Templates.&lt;br /&gt;In addition to these, Datagrid has a in-built support for Sort, Filter and paging the Data,which is not possible when using a DataList and for a Repeater Control we would require to write an explicit code to do paging.&lt;br /&gt;&lt;br /&gt;Que:- From performance point of view how do they rate ?&lt;br /&gt;Ans:- Repeater is fastest followed by Datalist and finally datagrid.&lt;br /&gt;&lt;br /&gt;Que:- What is the method to customize columns in DataGrid?&lt;br /&gt;Ans:- Use the template column.&lt;br /&gt;&lt;br /&gt;Que:- How can we format data inside DataGrid?&lt;br /&gt;Ans:- Use the DataFormatString property.&lt;br /&gt;&lt;br /&gt;Que:- How to decide on the design consideration to take a Datagrid, datalist or repeater ?&lt;br /&gt;Ans:- Many make a blind choice of choosing datagrid directly, but that's not the right way.&lt;br /&gt;Datagrid provides ability to allow the end-user to sort, page, and edit its data. But it comes at a cost of speed. Second the display format is simple that is in row and columns.&lt;br /&gt;Real life scenarios can be more demanding that With its templates, the DataList provides more control over the look and feel of the displayed data than the DataGrid. It offers better performance than datagrid Repeater control allows for complete and total control. With the Repeater, the only HTML emitted are the values of the databinding statements in the templates along with the HTML markup specified in the templates—no "extra" HTML is emitted, as with the DataGrid and DataList. By requiring the developer to specify the complete generated HTML markup, the Repeater often requires the longest development time. But repeater does not provide editing features like datagrid so everything has to be coded by programmer. However, the Repeater does boast the best performance of the three data Web controls.&lt;br /&gt;Repeater is fastest followed by Datalist and finally datagrid.&lt;br /&gt;&lt;br /&gt;Que:- Difference between ASP and ASP.NET?&lt;br /&gt;Ans:- ASP.NET new feature supports are as follows :-&lt;br /&gt;&lt;br /&gt;Better Language Support&lt;br /&gt;&lt;br /&gt;* New ADO.NET Concepts have been implemented.&lt;br /&gt;ASP.NET supports full language (C#, VB.NET, C++) and not simple scripting&lt;br /&gt;like VBSCRIPT..&lt;br /&gt;&lt;br /&gt;Better controls than ASP&lt;br /&gt;&lt;br /&gt;* ASP.NET covers large set’s of HTML controls..&lt;br /&gt;* Better Display grid like Datagrid, Repeater and datalist.Many of the display&lt;br /&gt;grids have paging support.&lt;br /&gt;&lt;br /&gt;Controls have events support&lt;br /&gt;&lt;br /&gt;* All ASP.NET controls support events.&lt;br /&gt;* Load, Click and Change events handled by code makes coding much simpler and much better organized.&lt;br /&gt;&lt;br /&gt;Compiled Code&lt;br /&gt;&lt;br /&gt;The first request for an ASP.NET page on the server will compile the ASP.NET code and&lt;br /&gt;keep a cached copy in memory. The result of this is greatly increased performance.&lt;br /&gt;Better Authentication Support&lt;br /&gt;ASP.NET supports forms-based user authentication, including cookie management and&lt;br /&gt;automatic redirecting of unauthorized logins. (You can still do your custom login page and custom user checking).&lt;br /&gt;&lt;br /&gt;User Accounts and Roles&lt;br /&gt;&lt;br /&gt;ASP.NET allows for user accounts and roles, to give each user (with a given role) access to different server code and executables.&lt;br /&gt;&lt;br /&gt;High Scalability&lt;br /&gt;&lt;br /&gt;* Much has been done with ASP.NET to provide greater scalability.&lt;br /&gt;* Server to server communication has been greatly enhanced, making it possible&lt;br /&gt;to scale an application over several servers. One example of this is the ability&lt;br /&gt;to run XML parsers, XSL transformations and even resource hungry session objects on other servers.&lt;br /&gt;&lt;br /&gt;Easy Configuration&lt;br /&gt;&lt;br /&gt;Configuration of ASP.NET is done with plain text files.&lt;br /&gt;* Configuration files can be uploaded or changed while the application is running.&lt;br /&gt;No need to restart the server. No more metabase or registry puzzle.&lt;br /&gt;&lt;br /&gt;Easy Deployment&lt;br /&gt;&lt;br /&gt;No more server restart to deploy or replace compiled code. ASP.NET simply redirects all new requests to the new code.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Que:- What are major events in GLOBAL.ASAX file ?&lt;br /&gt;Ans:- The Global.asax file, which is derived from the HttpApplication class, maintains a pool&lt;br /&gt;of HttpApplication objects, and assigns them to applications as needed. The Global.asax&lt;br /&gt;file contains the following events:&lt;br /&gt;&lt;br /&gt;Application_Init: Fired when an application initializes or is first called. It is invoked for&lt;br /&gt;all HttpApplication object instances.&lt;br /&gt;&lt;br /&gt;Application_Disposed: Fired just before an application is destroyed. This is the ideal&lt;br /&gt;location for cleaning up previously used resources.&lt;br /&gt;&lt;br /&gt;Application_Error: Fired when an unhandled exception is encountered within the&lt;br /&gt;application.&lt;br /&gt;&lt;br /&gt;Application_Start: Fired when the first instance of the HttpApplication class is created.&lt;br /&gt;It allows you to create objects that are accessible by all HttpApplication instances.&lt;br /&gt;Application_End: Fired when the last instance of an HttpApplication class is destroyed.&lt;br /&gt;It is fired only once during an application's lifetime.&lt;br /&gt;&lt;br /&gt;Application_BeginRequest: Fired when an application request is received. It is the first&lt;br /&gt;event fired for a request, which is often a page request (URL) that a user enters.&lt;br /&gt;&lt;br /&gt;Application_EndRequest: The last event fired for an application request.&lt;br /&gt;&lt;br /&gt;Application_PreRequestHandlerExecute: Fired before the ASP.NET page framework&lt;br /&gt;begins executing an event handler like a page or Web service.&lt;br /&gt;&lt;br /&gt;Application_PostRequestHandlerExecute: Fired when the ASP.NET page framework has finished executing an event handler&lt;br /&gt;&lt;br /&gt;Applcation_PreSendRequestHeaders: Fired before the ASP.NET page framework sends&lt;br /&gt;HTTP headers to a requesting client (browser).&lt;br /&gt;&lt;br /&gt;Application_UpdateRequestCache: Fired when the ASP.NET page framework completes&lt;br /&gt;handler execution to allow caching modules to store responses to be used to handle&lt;br /&gt;subsequent requests.&lt;br /&gt;&lt;br /&gt;Application_AuthenticateRequest: Fired when the security module has established the&lt;br /&gt;current user's identity as valid. At this point, the user's credentials have been validated.&lt;br /&gt;Application_AuthorizeRequest: Fired when the security module has verified that a user&lt;br /&gt;can access resources.&lt;br /&gt;&lt;br /&gt;Session_Start: Fired when a new user visits the application Web site.&lt;br /&gt;&lt;br /&gt;Session_End: Fired when a user's session times out, ends, or they leave the application&lt;br /&gt;Web site.&lt;br /&gt;&lt;br /&gt;Que:- What order they are triggered ?&lt;br /&gt;Ans:- They're triggered in the following order:&lt;br /&gt;&lt;br /&gt;* Application_BeginRequest&lt;br /&gt;* Application_AuthenticateRequest&lt;br /&gt;* Application_AuthorizeRequest&lt;br /&gt;* Application_ResolveRequestCache&lt;br /&gt;* Application_AcquireRequestState&lt;br /&gt;* Application_PreRequestHandlerExecute&lt;br /&gt;* Application_PreSendRequestHeaders&lt;br /&gt;* Application_PreSendRequestContent&lt;br /&gt;&lt;&gt;&lt;br /&gt;* Application_PostRequestHandlerExecute&lt;br /&gt;* Application_ReleaseRequestState&lt;br /&gt;* Application_UpdateRequestCache&lt;br /&gt;* Application_EndRequest.&lt;br /&gt;&lt;br /&gt;Que:- How can we force all the validation control to run ?&lt;br /&gt;Ans:- Page.Validate&lt;br /&gt;&lt;br /&gt;Que:- How can we check if all the validation control are valid and proper ?&lt;br /&gt;Ans:- Using the Page.IsValid() property you can check whether all the validation are done.&lt;br /&gt;&lt;br /&gt;Que:- Which JavaScript file is referenced for validating the validators at the client side ?&lt;br /&gt;Ans:- WebUIValidation.js javascript file installed at “aspnet_client” root IIS directory is used&lt;br /&gt;to validate the validation controls at the client side&lt;br /&gt;&lt;br /&gt;Que:- What is Tracing in ASP.NET ?&lt;br /&gt;Ans:- Tracing allows us to view how the code was executed in detail.&lt;br /&gt;&lt;br /&gt;Que:- How do we enable tracing ?&lt;br /&gt;Ans:- &lt;br /&gt;&lt;br /&gt;Que:- How can we kill a user session ?&lt;br /&gt;Ans:- Session.abandon&lt;br /&gt;&lt;br /&gt;Que:- How do I send email message from ASP.NET ?&lt;br /&gt;ANs:- ASP.NET provides two namespaces System.WEB.mailmessage classand&lt;br /&gt;System.Web.Mail.Smtpmail class. Just a small homework create a Asp.NET project and&lt;br /&gt;send a email at "Email Adress". Do not Spam.&lt;br /&gt;&lt;br /&gt;Que:- Explain the differences between Server-side and Client-side code?&lt;br /&gt;Ans:- Server side code is executed at the server side on IIS in ASP.NET framework, while&lt;br /&gt;client side code is executed on the browser.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-7357969595021453054?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/7357969595021453054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=7357969595021453054&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7357969595021453054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7357969595021453054'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/10/aspnet-questions.html' title='Asp.net Questions'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-2952889044807310684</id><published>2008-10-04T08:50:00.000-07:00</published><updated>2008-10-04T08:57:57.286-07:00</updated><title type='text'>Multiple Duplicate Keys in App.Config Files</title><content type='html'>&lt;span style="font-family: sans-serif; font-size: 9pt; color: rgb(0, 0, 0);"&gt; In Windows applications written before the advent of .NET, developers used various methods for providing configuration information to applications, such as .&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;INI&lt;/span&gt; files, System Registry, etc. All .NET applications are designed to read configuration from either the &lt;/span&gt;&lt;span style="font-family: sans-serif; font-style: italic; font-size: 9pt; color: rgb(0, 0, 0);"&gt;app.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;config&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: sans-serif; font-size: 9pt; color: rgb(0, 0, 0);"&gt; (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Winform&lt;/span&gt; or console apps) or &lt;/span&gt;&lt;span style="font-family: sans-serif; font-style: italic; font-size: 9pt; color: rgb(0, 0, 0);"&gt;web.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;config&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: sans-serif; font-size: 9pt; color: rgb(0, 0, 0);"&gt; (web apps) file. This normally means the developer adds configuration data to the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;appSettings&lt;/span&gt; section of the app.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;config&lt;/span&gt; file, as shown below.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: rgb(153, 0, 0); font-family: georgia;"&gt;&lt;span style="font-family: times new roman;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;appSettings&lt;br /&gt;    add key="myKey" value="myValue"&lt;br /&gt;appsettings&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: sans-serif; font-size: 9pt; color: rgb(0, 0, 0);"&gt; The developer can access this information in the application by the use of the following code:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(153, 0, 0);"&gt;Dim value As String = &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;ConfigurationSettings&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;AppSettings&lt;/span&gt;("&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;myKey&lt;/span&gt;")&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: sans-serif; font-size: 9pt; color: rgb(0, 0, 0);"&gt;This works fine for most applications, but as application complexity increases, a need arises to have duplicate keys in the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;appSettings&lt;/span&gt; section. There is a problem in the implementation of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;AppSettings&lt;/span&gt; Method.  When the application loads, the app.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;config&lt;/span&gt; file is read by the application (behind the scenes) and the values from the App.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;Config&lt;/span&gt; file are placed in a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;NamedValueCollection&lt;/span&gt;.  The problem is that if you have multiple duplicate keys in a section, only the last value in the section will be placed into the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;NamedValueCollection&lt;/span&gt;.  The reason for this is that the collection works like a  VB Collection, where you &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;cannont&lt;/span&gt; have duplicate keys.  If you examine the code through Reflector, you will see that the code is implemented in the following way:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: sans-serif; font-size: 9pt; color: rgb(153, 0, 0);"&gt;collection(i).value = key ' if the value already exists&lt;br /&gt;&lt;br /&gt;instead of&lt;br /&gt;&lt;br /&gt;    collection(i).Add(key)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: sans-serif; font-size: 9pt; color: rgb(0, 0, 0);"&gt; In order to get around this shortcoming, you can implement a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;sosphicated&lt;/span&gt; solution by using &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;IConfigurationSectionHandler&lt;/span&gt;.  However, any chance I have to keep something simple, I always do it.  That's a rule of life with me as a programmer.  To me, there is enough complication in programming Windows and Web applications, that cannot be escaped, to unnecessarily complicate something, just to use something that I have never used in the .NET Framework.  Some will not agree, but as you know, if you have read many of my articles, the KISS (keep it simple stupid) principle is always in my mind.&lt;br /&gt;&lt;br /&gt;My simple solution allows multiple "logical" duplicate keys without actually having real duplicates in the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;appSettings&lt;/span&gt; section.  &lt;/span&gt;&lt;span style="font-family: sans-serif; font-style: italic; font-size: 9pt; color: rgb(0, 0, 0);"&gt;After all, the whole purpose is to get the data to the application without having to recompile the application every time you want to add the ability to handle new customers, etc., in the application&lt;/span&gt;&lt;span style="font-family: sans-serif; font-size: 9pt; color: rgb(0, 0, 0);"&gt;.  In this example, I have the requirement to be able to add a new customer name along with a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;userid&lt;/span&gt; and password to the app.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;config&lt;/span&gt; file.  The application will use the customer names in a combo box, from which the user will select the desired customer.  The application will then pick up the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;userid&lt;/span&gt; and password associated with the customer and use it to call a Web Service.&lt;br /&gt;&lt;br /&gt;The code shown below, in the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;FillCustomerCollection&lt;/span&gt; method, will be called by the Form_Load event.  This method will build a collection of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;CustAcctPW&lt;/span&gt; objects.  On return from this method, a method to load the combo box will be called.  Finally, when the user selects a user from the combo box, the application will go through the collection to find the selected customer, and then retrieve the associated &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;userid&lt;/span&gt; and password.  I will not show all of that ancillary code, but I will quickly explain the logic behind this simple method.&lt;br /&gt;&lt;br /&gt;Instead of having multiple, duplicate keys in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;appSettings&lt;/span&gt;, which will not work, I will place a "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;NumberCustomers&lt;/span&gt;" key and value in the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;appSettings&lt;/span&gt; section of the app.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;config&lt;/span&gt; file.  Next, I will add two "Customer" keys and associated values.  Instead of duplicating the key, I simply give them keys of "Customer001", "Customer002", etc.  The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;appSetting&lt;/span&gt; section that contains my customers is shown below.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(128, 0, 0);"&gt;configuration&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(128, 0, 0);"&gt;appSettings&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;&lt;!&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 128, 0);"&gt;-- Add Customer keys with Name|Account|PW --&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;     &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(128, 0, 0);"&gt;add&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 0);"&gt;key&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;=&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;"NUMBERCUSTOMERS"&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 0);"&gt;value&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;=&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;"2"&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;/&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;     &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(128, 0, 0);"&gt;add&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 0);"&gt;key&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;=&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;"CUSTOMER001"&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 0);"&gt;value&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;="Jones Co|JONESUser|!23*(Abc1"&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;/&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;     &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(128, 0, 0);"&gt;add&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 0);"&gt;key&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;=&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;"CUSTOMER002"&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 0);"&gt;value&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;=&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;"NYTA|NYTAUserid|y*hg01K"&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;/&gt;&lt;br /&gt;   &lt;/&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(128, 0, 0);"&gt;appSettings&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;&lt;/&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(128, 0, 0);"&gt;configuration&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: sans-serif; font-size: 9pt; color: rgb(0, 0, 0);"&gt;The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;NumberCustomers&lt;/span&gt; value will determine the number of times to loop to retrieve the customers and associated data values.  Obviously, you want to make sure that the value of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;NumberCustomers&lt;/span&gt; changes if you add or remove a customer, but then any other invalid value in your app.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;config&lt;/span&gt; file will probably cause something ugly in your application.  I use the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;NumberCustomers&lt;/span&gt; as an index which will be converted to string and appended to "Customer" to access the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;appSetting&lt;/span&gt;.  I concatenate multiple values of Customer, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;Userid&lt;/span&gt; (Account), and Password in the value field delimited by "|".  The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;FillCustomerCollection&lt;/span&gt; method is shown below, along with the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;CustAcctPW&lt;/span&gt; class and collection.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 128, 0);"&gt;''' &lt;summary&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 128, 0);"&gt;''' The App &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;Config&lt;/span&gt; file will have multiple &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;CUSTNBRnnn&lt;/span&gt; keys in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;appsettings&lt;/span&gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 128, 0);"&gt;''' It will also have a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;NumberCustomers&lt;/span&gt; key with value = &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;nbr&lt;/span&gt; of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;CustNbr&lt;/span&gt; occurrences.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 128, 0);"&gt;''' Retrieve the number and use it to compute the value of each &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;CustNbrnnn&lt;/span&gt; key value.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 128, 0);"&gt;''' This must be done because the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;ConfigurationSettings&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;AppSettings&lt;/span&gt; method only picks up&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 128, 0);"&gt;''' the last value of a duplicate key name (bummer).  This is because the code that builds&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 128, 0);"&gt;''' the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;NamedValueCollection&lt;/span&gt; stores into the collection, if a value exists, instead of&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 128, 0);"&gt;''' adding to the collection.  It's built like an old VB Collection.  I.,e., you can't have&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 128, 0);"&gt;''' but one occurrence of the same key name.  But we &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48"&gt;wlll&lt;/span&gt; not be daunted...&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 128, 0);"&gt;''' &lt;/summary&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 128, 0);"&gt;''' &lt;remarks&gt;&lt;/remarks&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Private&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Sub&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_49"&gt;FillCustomerCollection&lt;/span&gt;()&lt;br /&gt;      &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_50"&gt;nbrCusts&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;As&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Integer&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; = _&lt;br /&gt;         &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_51"&gt;CType&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;(&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_52"&gt;ConfigurationSettings&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_53"&gt;AppSettings&lt;/span&gt;(&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt;"&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_54"&gt;NUMBERCUSTOMERS&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;), &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Integer&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;      &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_55"&gt;colCustomers&lt;/span&gt; = &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;New&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; Collection&lt;br /&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;For&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; i &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;As&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Integer&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; = 1 &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;To&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_56"&gt;nbrCusts&lt;/span&gt;&lt;br /&gt;         &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_57"&gt;custKey&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;As&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;String&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; = &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt;"CUSTOMER"&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &amp;amp; Format(i, &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt;"000"&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;         &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_58"&gt;custValue&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;As&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;String&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; = &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_59"&gt;ConfigurationSettings&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_60"&gt;AppSettings&lt;/span&gt;(&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_61"&gt;custKey&lt;/span&gt;)&lt;br /&gt;         &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_62"&gt;cust&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;As&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;New&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_63"&gt;CustAcctPW&lt;/span&gt;&lt;br /&gt;         &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; m &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;As&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; Match = Regex.Match(custValue, _&lt;br /&gt;            &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt;"(?&lt;cust&gt;\w+)\|(?&lt;acct&gt;\w+)\|(?&lt;pw&gt;\w+)"&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;         &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;If&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; m.Success &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Then&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;            cust.Customer = m.Groups(&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt;"cust"&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;).Value&lt;br /&gt;            cust.Account = m.Groups(&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt;"acct"&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;).Value&lt;br /&gt;            cust.PW = m.Groups(&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(255, 0, 255);"&gt;"pw"&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;).Value&lt;br /&gt;            colCustomers.Add(cust)&lt;br /&gt;         &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;End&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;If&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;      &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Next&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;End&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Sub&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Private&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; colCustomers &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;As&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; Collection&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;   Public&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Class&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; CustAcctPW&lt;br /&gt;      &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Public&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; Customer &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;As&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;String&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;      &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Public&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; Account &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;As&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;String&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;      &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Public&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; PW &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;As&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;String&lt;br /&gt;   End&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Class&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: sans-serif; font-size: 9pt; color: rgb(0, 0, 0);"&gt;The following method fills the combo box from the collection of customer data created by the FillCustomerCollection method shown above.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 128, 0);"&gt;' Fill the customer combo box with customer numbers from the&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 128, 0);"&gt;' colCustomers collection.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Private&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Sub&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; FillCustomerCombo(&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;ByVal&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; colCustomers &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;As&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; Collection)&lt;br /&gt;      &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Me&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;.cboSelectCustomer.Items.Clear()&lt;br /&gt;      &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;For&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; i &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;As&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Integer&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; = 1 &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;To&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; colCustomers.Count&lt;br /&gt;         &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; cust &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;As&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; CustAcctPW = &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;CType&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;(colCustomers(i), CustAcctPW)&lt;br /&gt;         &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Me&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;.cboSelectCustomer.Items.Add(cust.Customer)&lt;br /&gt;      &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Next&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;End&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Sub&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: sans-serif; font-size: 9pt; color: rgb(0, 0, 0);"&gt;&lt;br /&gt;Finally, the following combo box event handler fills the userid and password text boxes when the user selects a customer in the combo box.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Private&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Sub&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; cboSelectCustomer_SelectedIndexChanged(&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;ByVal&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; sender &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;As&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; System.Object, _&lt;br /&gt;      &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;ByVal&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; e &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;As&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; System.EventArgs) &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Handles&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; cboSelectCustomer.SelectedIndexChanged&lt;br /&gt;      &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;If&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; formLoading &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Then&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Exit&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Sub&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;      &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;For&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; i &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;As&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Integer&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; = 1 &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;To&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; colCustomers.Count&lt;br /&gt;         &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; cust &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;As&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; CustAcctPW = &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;CType&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;(colCustomers(i), CustAcctPW)&lt;br /&gt;         &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;If&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; cust.Customer = cboSelectCustomer.Text &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Then&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;            &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Me&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;.txtAccount.Text = cust.Account&lt;br /&gt;            &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Me&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;.txtPassword.Text = cust.PW&lt;br /&gt;         &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;End&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;If&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;      &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Next&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;End&lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="font-family: monospace; font-size: 9pt; color: rgb(0, 0, 255);"&gt;Sub&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-2952889044807310684?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/2952889044807310684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=2952889044807310684&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/2952889044807310684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/2952889044807310684'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/10/multiple-duplicate-keys-in-appconfig.html' title='Multiple Duplicate Keys in App.Config Files'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-5865106477887857874</id><published>2008-09-04T02:23:00.001-07:00</published><updated>2008-09-04T02:23:45.900-07:00</updated><title type='text'>Inserting Multiple Record in SQL</title><content type='html'>DECLARE @intFlag INT&lt;br /&gt;SET @intFlag = 1&lt;br /&gt;WHILE (@intFlag &lt;=28)&lt;br /&gt;BEGIN&lt;br /&gt;UPDATE 'TABLE NAME'&lt;br /&gt;SET 'Column Name' = '000000' -- Note: Column Name that you want to update.&lt;br /&gt;WHERE ('Column ID' = @intFlag) -- Note: Unique Column ID of TAble&lt;br /&gt;SET @intFlag = @intFlag + 1&lt;br /&gt;END&lt;br /&gt;GO&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-5865106477887857874?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/5865106477887857874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=5865106477887857874&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/5865106477887857874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/5865106477887857874'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/09/inserting-multiple-record-in-sql.html' title='Inserting Multiple Record in SQL'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-2848508508828456006</id><published>2008-08-04T22:52:00.001-07:00</published><updated>2008-08-04T22:52:48.209-07:00</updated><title type='text'>Label Formatting</title><content type='html'>Label1.Text = System.Text.RegularExpressions.Regex.Replace(objListTrn.CourseOutLine, "\n", "&lt;br /&gt;", System.Text.RegularExpressions.RegexOptions.IgnoreCase);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-2848508508828456006?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/2848508508828456006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=2848508508828456006&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/2848508508828456006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/2848508508828456006'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/08/label-formatting.html' title='Label Formatting'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-2615416004988949975</id><published>2008-07-18T22:34:00.000-07:00</published><updated>2008-07-18T22:56:51.425-07:00</updated><title type='text'>Delegates in .NET</title><content type='html'>&lt;strong&gt;What is a Delegate?&lt;br /&gt;&lt;/strong&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;When we talk about delegates in .NET then one thing that comes to our mind is what delegate means to a novice developer. In simple words we can say delegates are a .NET object which points to a method that matches its specific signature.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;In other words delegates are function pointers that point to function of matching signatures. Function pointers which are extensively used in c/c++ to points to a function holds only the memory address of the function, it doesn’t carry further information about the function parameters, return type etc. On the other hand .NET framework has introduced a type-safe mechanism called delegates, with automatic verification of the signature by the compiler. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:+0;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;So comparatively delegates add a safety dimension in handling function pointers in .NET.&lt;br /&gt;So we can say that delegates are type-safe, object oriented, secure .NET objects which can be used to invoke methods of matching signature.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;While using delegates it is very much necessary to make sure that the functions which the delegates points has the same number of argument type and same return type. For example if we have a method that takes a single string as a parameter and another method that takes two string parameters, then we need to have two separate delegate type for each method.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:85%;"&gt;Types of Delegate:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Single cast delegate&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;A delegate is called single cast delegate if it invokes a single method. In other words we can say that SingleCast Delegates refer to a single method with matching signature. SingleCast Delegates derive from the &lt;span style="color:#990000;"&gt;System.Delegate&lt;/span&gt; class&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;SingleCast Delegates can be defined using the following syntax:&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:85%;color:#990000;"&gt;public delegate int mySingleCastDelegate int iFirstargument, int iSecondArgument);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Single cast delegate example:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;color:#3333ff;"&gt;using System;  &lt;br /&gt;namespace SingleCastDelegateDemoApplication  &lt;br /&gt;{      &lt;br /&gt;    class mySingleDelegateClass  &lt;br /&gt;    {  &lt;br /&gt;        public  delegate int mySingleCastDelegate(int iFirstargument,   &lt;br /&gt;            int iSecondArgument);         &lt;br /&gt;        static void Main(string[] args)  &lt;br /&gt;        {  &lt;br /&gt;            mySingleDelegateClass clsSingleCastDelegate = new mySingleDelegateClass();  &lt;br /&gt;          mySingleCastDelegate singleCastMaxNumberDelegate =   &lt;br /&gt;             new mySingleCastDelegate(clsSingleCastDelegate.myMaxFunction);  &lt;br /&gt;            int iMaxNumberResult = singleCastMaxNumberDelegate(10, 20);  &lt;br /&gt;            Console.WriteLine(@"Result by calling the myMaxFunction method using a  &lt;br /&gt;               delegate: {0}", iMaxNumberResult);  &lt;br /&gt;            Console.Read();  &lt;br /&gt;        }  &lt;br /&gt;        public int myMaxFunction(int iFirstNumber, int iSecondNumber)  &lt;br /&gt;        {  &lt;br /&gt;            if (iFirstNumber &gt; iSecondNumber)  &lt;br /&gt;                return iFirstNumber;  &lt;br /&gt;            else &lt;br /&gt;                return iSecondNumber;  &lt;br /&gt;        }  &lt;br /&gt;    }  &lt;br /&gt;}   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;color:#3333ff;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;Multicast Delegates:&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;MultiCast Delegates are nothing but a single delegate that can invoke multiple methods of matching signature. MultiCast Delegate derives from System.MulticastDelegate class which is a subclass of System.Delegate.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;In Multi-Casting basically we create a single delegate that in turn invokes multiple encapsulated methods. We can use MultiCast Delegates when multiple calls to different methods are required. For example if we are required to call two methods on a single button click event or mouse over event then using MultiCast Delegates we can easily call the methods.&lt;br /&gt;&lt;br /&gt;The System.MulticastDelegate class provides required methods to play with delegates. There are two methods, Combine and Remove, which are used to play with delegates.&lt;br /&gt;&lt;br /&gt;The Combine method is a static method of System.MulticastDelegate class which is used to combine the delegates and the Remove method is used to remove the delegate from the list.&lt;br /&gt;The Combine method takes an array of delegate as a parameter and returns a new delegate that represents the combination of all the delegates in the array.&lt;br /&gt;&lt;br /&gt;MultiCast Delegate can have arguments and can have return values as well. The only things is that the methods pointed by delegate needs to have same return type as that of the return type of delegate.&lt;br /&gt;&lt;br /&gt;In the below code snippet I have defined a delegate which can act as a multicast delegate to encapsulate methods that takes two parameter as of type integer and returns nothing.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#990000;"&gt;public delegate void MyMulticastDelegate(int p, int q);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:100%;"&gt;Multi cast delegate example:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using System;  &lt;br /&gt;namespace MultiCastDelegatesDemoapplication  &lt;br /&gt;{  &lt;br /&gt;    class MultiCastDelegatesClass  &lt;br /&gt;    {  &lt;br /&gt;        //delegate declaration  &lt;br /&gt;        Public delegate void MyMulticastDelegate(int p, int q);  &lt;br /&gt;        static void Main(string[] args)  &lt;br /&gt;        {  &lt;br /&gt;            MultiCastDelegatesClass clsMultiCastDelegate =   &lt;br /&gt;               new MultiCastDelegatesClass();  &lt;br /&gt;            MyMulticastDelegate myDelegate = null;  &lt;br /&gt;            MyMulticastDelegate myMultiCastDelegateAddition =   &lt;br /&gt;               new MyMulticastDelegate(clsMultiCastDelegate.myAddtionfunction);  &lt;br /&gt;            MyMulticastDelegate myMultiCastDelegateMaxNumber =   &lt;br /&gt;               new MyMulticastDelegate(clsMultiCastDelegate.myMaxFunction);  &lt;br /&gt;            Console.WriteLine("Used Combine function to bind the delegates... ");  &lt;br /&gt;myDelegate = (MyMulticastDelegate)System.Delegate.Combine(myMultiCastDelegateAddition,  &lt;br /&gt;   myMultiCastDelegateMaxNumber);  &lt;br /&gt;            //call made using the multicast delegate  &lt;br /&gt;            myDelegate(10, 23);  &lt;br /&gt;            Console.WriteLine();  &lt;br /&gt;            Console.WriteLine(@"Used Remove function to remove the delegate from   &lt;br /&gt;               the list.. ");  &lt;br /&gt;            myDelegate = (MyMulticastDelegate)System.Delegate.Remove(myDelegate,  &lt;br /&gt;               myMultiCastDelegateMaxNumber);  &lt;br /&gt;            myDelegate(10, 23);  &lt;br /&gt;            Console.Read();  &lt;br /&gt;        }  &lt;br /&gt;        //function calculates the sum of passed arguments   &lt;br /&gt;        public void myAddtionfunction(int iFirstNumber, int iSecondNumber)  &lt;br /&gt;        {  &lt;br /&gt;            int result = iFirstNumber + iSecondNumber;  &lt;br /&gt;            Console.WriteLine(@"In myAddtionfunction called by a multi cast delegate:  &lt;br /&gt;               Result is :" + result);  &lt;br /&gt;        }  &lt;br /&gt;        //function checks the max value of passed arguments  &lt;br /&gt;        public void myMaxFunction(int iFirstNumber, int iSecondNumber)  &lt;br /&gt;        {  &lt;br /&gt;            int max ;  &lt;br /&gt;            if (iFirstNumber &gt; iSecondNumber)  &lt;br /&gt;            {  &lt;br /&gt;                max = iFirstNumber;  &lt;br /&gt;            }  &lt;br /&gt;            else &lt;br /&gt;            {  &lt;br /&gt;                max = iSecondNumber;                &lt;br /&gt;            }  &lt;br /&gt;            Console.WriteLine(@"In myMaxFunction called by a multi cast delegate:   &lt;br /&gt;               Result is :" + max);  &lt;br /&gt;        }  &lt;br /&gt;    }  &lt;br /&gt;&lt;/span&gt;}   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-2615416004988949975?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/2615416004988949975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=2615416004988949975&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/2615416004988949975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/2615416004988949975'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/07/delegates-in-net.html' title='Delegates in .NET'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-8886972295908258575</id><published>2008-07-03T21:04:00.000-07:00</published><updated>2008-07-03T21:37:24.365-07:00</updated><title type='text'>Passing Values between ASP.NET Web Forms</title><content type='html'>&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Introduction:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;ASP.NET webforms  provide excellent event driven programming model to developers. This does simplifies the overall design of your application but poses some problems of its own. For example, in traditional ASP you can easily pass values from one ASP page to another ASP page using POST. The same thing is not possible in ASP.NET if you want to stick to web form model (i.e. Server side form and control processing.). There are, however, some ways that can be used to overcome this situation. This article examines various possibilities to do the same. More specifically we will cover how to pass values using querystring, how to use session variables to do the same and finally how to use Server.Transfer method to do that.&lt;/div&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#cc0000;"&gt;&lt;strong&gt;Using Querystring:&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#990000;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;div align="justify"&gt;Querystring is a day old mechanism to pass values across pages. The main advantage of this method is it is very simple. However, disadvantages are the values are visible in the browser address bar and you can not pass objects this way. This method is best suited when you want to pass small number of values that need not be secured from others. In order to implement this method you will follow these steps: &lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="justify"&gt;Create the web form with controls.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Provide some button or link button that posts the form back.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;In the click event of the button create a string that holds URL for another.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Add control values to this URL as querystring parameters .&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Response.Redirect to another form with this URL.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p align="justify"&gt; Following code snippet shows how it works: &lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;Source Web Form:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#3333ff;"&gt;private void Button1_Click&lt;br /&gt;(object sender, System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;string url;&lt;br /&gt;url="anotherwebform.aspx?name=" +&lt;br /&gt;TextBox1.Text + "&amp;amp;email=" +&lt;br /&gt;TextBox2.Text;&lt;br /&gt;Response.Redirect(url);&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;Destination Web Form:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#3333ff;"&gt;private void Page_Load&lt;br /&gt;(object sender, System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;Label1.Text=Request.QueryString["name"];&lt;br /&gt;Label2.Text=Request.QueryString["email"];&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Using Session variables:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;This is yet another way to pass values across pages. Here you store control values in session variables and access them in another web form. However, as you know storing too much data in session can be an overhead on the server. So, you should use this method with care. Also, it requires some kind of clean up action from your side so that unwanted session variables are removed. The typical sequence of steps will be as follows:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="justify"&gt;Create the web form with controls.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Provide some button or link button that posts the form back.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;In the click event of the button add session variables and set them to control values.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Response.Redirect to another form.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;In that form access Session variables and remove them if necessary. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p align="justify"&gt;Following code shows this in action: &lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;Source Web Form:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#3333ff;"&gt;private void Button1_Click&lt;br /&gt;(object sender, System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;//textbox1 and textbox2 are webform&lt;br /&gt;//controls&lt;br /&gt;Session["name"]=TextBox1.Text;&lt;br /&gt;Session["email"]=TextBox2.Text;&lt;br /&gt;Server.Transfer("anotherwebform.aspx");&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;Destination Web Form:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#3333ff;"&gt;private void Page_Load&lt;br /&gt;(object sender, System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;Label1.Text=Session["name"].ToString();&lt;br /&gt;Label2.Text=Session["email"].ToString();&lt;br /&gt;Session.Remove("name");&lt;br /&gt;Session.Remove("email");&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Using Server.Transfer:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="color:#000000;"&gt;This is somewhat complex but sophisticated method of passing values across pages. Here you expose the values you want to access in other pages as properties of the page class. This methods require you to code extra properties that you can access in another web form. However, the efforts are worth considering. Overall this method is much cleaner and object oriented&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="color:#000000;"&gt; than earlier methods. The entire process works as follows:&lt;/span&gt; &lt;/span&gt;&lt;span style="color:#3333ff;"&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="color:#000000;"&gt;Create the web form with controls.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="color:#000000;"&gt;Create property Get procedures that will return control values.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="color:#000000;"&gt;Provide some button or link button that posts the form back.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="color:#000000;"&gt;In the button click event handler call Server.Transfer method that will transfer execution to the specified form.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="color:#000000;"&gt;In the second form you can get a reference to the first form instance by using Context.Handler property. Then you will use the get properties we created to access the control values.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;Source Web Form:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#3333ff;"&gt;public string Name&lt;br /&gt;{&lt;br /&gt;get&lt;br /&gt;{&lt;br /&gt;return TextBox1.Text;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;public string EMail&lt;br /&gt;{&lt;br /&gt;get&lt;br /&gt;{&lt;br /&gt;return TextBox2.Text;&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="color:#000000;"&gt;Now, call Server.Transfer.&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#3333ff;"&gt;private void Button1_Click &lt;/span&gt;&lt;span style="color:#3333ff;"&gt;(object sender, System.EventArgs e)&lt;/span&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#3333ff;"&gt;{ &lt;/span&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#3333ff;"&gt;Server.Transfer("anotherwebform.aspx");&lt;/span&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#3333ff;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#ff0000;"&gt;&lt;strong&gt;Destination Web Form:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="color:#3333ff;"&gt;private void Page_Load&lt;br /&gt;(object sender, System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;//create instance of source web form&lt;br /&gt;WebForm1 wf1;&lt;br /&gt;//get reference to current handler instance&lt;br /&gt;wf1=(WebForm1)Context.Handler;&lt;br /&gt;Label1.Text=wf1.Name;&lt;br /&gt;Label2.Text=wf1.EMail;&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p align="justify"&gt;&lt;br /&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-8886972295908258575?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/8886972295908258575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=8886972295908258575&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/8886972295908258575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/8886972295908258575'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/07/passing-values-between-aspnet-web-forms.html' title='Passing Values between ASP.NET Web Forms'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-4388337173431403755</id><published>2008-07-02T01:37:00.000-07:00</published><updated>2008-07-02T01:40:36.193-07:00</updated><title type='text'>10 of the Biggest Platform Development Mistakes</title><content type='html'>&lt;p&gt;Just like with golf, technology is as much about ensuring that your bad hits are recoverable as it is ensuring that you make great ones. We’re all going to have failures in our careers but avoiding the really big pitfalls will help you keep your company on the right growth path. Here are 10 common mistakes we at &lt;a href="http://www.akf-consulting.com/index.html"&gt;AKF Consulting&lt;/a&gt; see made during platform development — and the ones we believe are the most important to avoid.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1) Failing to design for rollback:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;If you’re developing a SaaS platform and you can only make one tweak to your current process, make it so that you can always roll back any code changes. We know that it takes additional engineering work and testing but in our experience, such effort yields the greatest ROI.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2) Confusing product release with product success:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;Do you have “release” parties? Don’t — you are sending your team the wrong message. A release has little to do with creating shareholder value. Align your celebrations with achieving specific business objectives, such as increasing sign-ups by 10 percent.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3) Assuming a new Product Development Lifecycle (PDLC) will fix issues with missing delivery dates: &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Too often CTOs see repeated problems in their development life cycles, such as missing release dates, and wrongly blame the development methodology. Make sure you’re fixing the right thing — lack of ownership or involvement in and/or incomplete understanding of the current PDLC are among the most common root causes of late dates.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4) Allowing history to repeat itself:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Organizations don’t spend enough time looking at past failures. The best and easiest way to improve your future performance is to track your past failures, group them by causation and treat the root cause rather than the symptoms. Keep incident logs and review them monthly to identify recurring problems.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5) Scaling through third parties:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;If you’re a hyper-growth SaaS site, you don’t want to be locked into a vendor for your future business viability; rather you want to make sure that the &lt;a href="http://akf-consulting.com/techblog/2008/05/22/splitting-databases-for-scale/"&gt;scalability&lt;/a&gt; of your site is a core competency and that it’s &lt;a href="http://akf-consulting.com/techblog/2008/05/08/splitting-applications-or-services-for-scale/"&gt;built&lt;/a&gt; into your architecture. &lt;a href="http://akf-consulting.com/techblog/2008/04/01/a-case-for-technology-agnostic-design-tad/"&gt;Define how your platform scales through your efforts&lt;/a&gt;, not through the systems that a third-party vendor provides.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;6) Relying on QA to find your mistakes:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;You cannot test quality into a system and it’s mathematically impossible to test all possibilities within complex systems to guarantee the correctness of a platform or feature. QA is a risk mitigation function and it should be treated as such. Defects are an engineering problem, and that’s where the problem should be treated.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;7) Relying on “revolutionary” or “big bang” fixes: &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The degree of success of complete rewrites or re-architecture efforts typically ranges somewhere between not returning the expected ROI and complete failure. The best projects — and the ones with the greatest returns — are not revolutionary but evolutionary. Go ahead and paint that vivid description of the ideal future, but approach it as a series of small steps.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;8) Not taking into account the multiplicative effect of failure:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Every time you have one service call another service in a synchronous fashion, you are lowering your theoretical availability. If each of your services is designed to be 99.999 percent available, then the product of all of the service calls is your theoretical availability. Five calls is (.99999)^5 or 99.995 availability. Eliminate synchronous calls wherever possible and create &lt;a href="http://akf-consulting.com/techblog/2008/05/30/fault-isolative-architectures-or-%e2%80%9cswimlaning%e2%80%9d/"&gt;fault-isolative architectures&lt;/a&gt; to help you identify problems quickly.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;9) Failing to create and incent a culture of excellence:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://akf-consulting.com/techblog/2007/12/07/seed-feed-and-weed-to-succeed/"&gt;Bring in the right people&lt;/a&gt; and hold them to high standards. You will never know what your team can do unless you find out how far they can go. Set aggressive yet achievable goals and motivate them with your vision. &lt;a href="http://akf-consulting.com/techblog/2008/03/03/be-a-leader/"&gt;Be a leader&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;10) Not having a business continuity/disaster recovery plan:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;No one expects a disaster, but they happen, and if you can’t maintain normal business operations you will lose both revenue and customers. A solid business continuity plan explains to everyone how to operate in the event of an emergency. Even worse is not having a disaster recovery plan, which outlines how you will restore your site in the event a disaster shuts down a critical piece of your infrastructure, such as your collocation facility or connectivity provider. Our preference is to provide your own disaster recovery through multiple collocation facilities. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-4388337173431403755?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/4388337173431403755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=4388337173431403755&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/4388337173431403755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/4388337173431403755'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/07/10-of-biggest-platform-development.html' title='10 of the Biggest Platform Development Mistakes'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-7894395773636178423</id><published>2008-07-01T01:43:00.000-07:00</published><updated>2008-07-01T02:03:34.692-07:00</updated><title type='text'>What's New in MSDN Code Gallery?</title><content type='html'>&lt;a href="http://msdn.microsoft.com/en-us/cc537547.aspx" target="_blank"&gt;What's New in MSDN Code Gallery?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-7894395773636178423?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/7894395773636178423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=7894395773636178423&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7894395773636178423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7894395773636178423'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/07/whats-new-in-msdn-code-gallery.html' title='What&apos;s New in MSDN Code Gallery?'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-957090881753546389</id><published>2008-06-29T22:03:00.000-07:00</published><updated>2008-06-29T22:05:13.970-07:00</updated><title type='text'>How technology changes us......</title><content type='html'>&lt;img src="http://i270.photobucket.com/albums/jj113/defaulthoney/technology.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-957090881753546389?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/957090881753546389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=957090881753546389&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/957090881753546389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/957090881753546389'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/06/how-technology-changes-us.html' title='How technology changes us......'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-8895337673609107459</id><published>2008-06-27T23:19:00.000-07:00</published><updated>2008-06-27T23:43:16.021-07:00</updated><title type='text'>SQL Server Function to Determine a Leap Year</title><content type='html'>&lt;div align="justify"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;There are few rules to consider when determining when a year is a leap year. For instance, contrary to popular belief not all years divisible by 4 are leap years. For instance, the year 1900 was not a leap year. However, you needn't bother yourself about leap year rules... you can let the SQL Server engine do the work for you!&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;The following scalar function takes in a year and returns a bit flag indicating whether the passed in year is a leap year or not.&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;create function dbo.fn_IsLeapYear (@year int)&lt;/div&gt;&lt;div align="justify"&gt;returns bit&lt;/div&gt;&lt;div align="justify"&gt;as&lt;/div&gt;&lt;div align="justify"&gt;begin&lt;/div&gt;&lt;div align="justify"&gt;return(select case datepart(mm, dateadd(dd, 1, cast((cast(@year as varchar(4)) + '0228') as datetime))) &lt;/div&gt;&lt;div align="justify"&gt;when 2 then 1 &lt;/div&gt;&lt;div align="justify"&gt;else 0 &lt;/div&gt;&lt;div align="justify"&gt;end)&lt;/div&gt;&lt;div align="justify"&gt;end&lt;/div&gt;&lt;div align="justify"&gt;go&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;That's all there is to it! The function takes in the year, appends '0228' to it (for February 28th) and adds a day. If the month of the next day is a 2 (as extracted by the DATEPART function), then we're still in February so it must be a leap year! If not, it is not a leap year.&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Here are a few examples:&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;br /&gt;&lt;img src="http://i270.photobucket.com/albums/jj113/defaulthoney/Leapyear.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-8895337673609107459?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/8895337673609107459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=8895337673609107459&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/8895337673609107459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/8895337673609107459'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/06/sql-server-function-to-determine-leap.html' title='SQL Server Function to Determine a Leap Year'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-4729023007913906858</id><published>2008-06-26T20:53:00.000-07:00</published><updated>2008-06-27T07:53:23.765-07:00</updated><title type='text'>Improve Web Application Performance</title><content type='html'>&lt;span style="font-family: verdana;font-size:100%;" &gt;&lt;strong&gt;Introduction:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;In the IT world, software applications are being rapidly developed. Clients, and so employers, are just looking for those teams/individuals who can build up applications rapidly, just bothering to make their application live; but what often happens after an application goes live is that users start to use the application and it doesn’t respond well. At this point, clients start to lose users and business.&lt;br /&gt;&lt;br /&gt;To code an application is not a big deal; I believe it can be done by virtually anyone, meaning it is not necessary to have great knowledge or experience. Improving performance of an existing application (especially an one put together rapidly) could be quite risky and could cause many ripple effects. Things must be planned first to avoid horrible results.&lt;br /&gt;The following are a few points that can make a site scalable and reliable; but which may initially slow down development. I believe that overall, when maintenance and future changes are taken into account, total development time would be reduced.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1. Minimize HTTP based Requestss:&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Problem 1: &lt;/strong&gt;Serving images - no matter if they are of less than 1 KB - as separate web resources, cause separate web requests to the server, which impact performance.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Solutions:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Use &lt;a href="http://www.w3.org/TR/html401/struct/objects.html" rel="nofollow"&gt;Image Maps&lt;/a&gt; to merge up images, though image Maps could only merge up those images which are in sequence, like navigation images, so it depends upon your web site/page design. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Use &lt;a href="http://www.elf.org/essay/inline-image.html" rel="nofollow"&gt;Inline images&lt;/a&gt;. Inline images could increase your HTML page size but would cause fewer requests to the server.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://alistapart.com/articles/sprites" rel="nofollow"&gt;CSS Sprites&lt;/a&gt; can also be used to merge up images and setting their position and backgrounds.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;Problem 2: &lt;/strong&gt;Using CSS is very good practice but serving stylesheets as separate resources, thus causing separate requests, should be considered very carefully.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;Solutions:&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Try your best to combine all your CSS based classes into a single .css file as lot of .css files will cause a large amount of requests, regardless of the file sizes. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;.css files are normally cached by browsers, so a single and heavy .css file doesn’t cause a long wait on each page request. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Inline .css classes could make HTML heavy, so again: go ahead with a single.css file.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;Problem 3:&lt;/strong&gt; JavaScript is an awesome scripting language which can be quite powerful to play with. Nonetheless, it should be used carefully not only for request size issues; but also because it can have a way of causing unpredictable performance issues.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;Inline JavaScript could make the HTML page heavy, so it’s preferred to serve separate .js files or a single JavaScript file to keep all JavaScript-based scripts in a single place.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;JavaScript files also get cached automatically by browsers, so they usually aren’t requested each time the page is loaded by the browsers.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;2. HTTP Compression:&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;HTTP Compression is used to compress contents from the web server. HTTP requests and responses could be compressed, which can result in great performance gains. Through HTTP compression, the size of the payload can be reduced by about 50%, which is great. Isn’t it?&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;HTTP Compression is now widely supported by browsers and web servers.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;If HTTP compression is enabled on the web server, and if the request header includes an Accept-Encoding: gzip, deflate header, the browser supports gzip and deflate compression mechanisms, so the response can be compressed in any of the given formats by the web server in order to reduce the payload size. This leads to an increase in performance. Latter that compressed response is decompressed by the browser and rendered normally.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;Following are very good links which detail HTTP Compression and their implementations:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Click &lt;a href="http://www.ibm.com/developerworks/web/library/wa-httpcomp/" rel="nofollow"&gt;here&lt;/a&gt; to get detailed knowledge on HTTP compression. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Click &lt;a href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/502ef631-3695-4616-b268-cbe7cf1351ce.mspx?mfr=true" rel="nofollow"&gt;here&lt;/a&gt; to learn how to enable HTTP compression in IIS.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;3. Correct Formatted Images at the Right Place:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Normally designers use JPG or GIF formats quite randomly and ignore some other good formats to compress images.&lt;br /&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;Correct format should be used for right purpose like:-&lt;br /&gt;If you have to place a background image, some large image or a screenshot then the suggested format is JPG/JPEG.&lt;br /&gt;If you have to use small graphics like button images, header images, footer images, navigation bar images or clip arts, then the suggested format is PNG.&lt;br /&gt;If an image is not required to be in high or true colors and 256 colors are enough, then GIF is preferred.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;4. Compress CSS, JavaScript and Images&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;CSS files (.css), images and JavaScript (.js) files can be compressed, as normally .css and .js files contain unnecessary spaces, comments, unnecessary code and such other things. A number of high quality (and free) utilities are available to help you pre-compress your files.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;Following are a few good links for such utilities:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Compress PNG images by clicking &lt;a href="http://omar.mvps.org/tool/png.zip" rel="nofollow"&gt;here&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Compress JPG images by clicking &lt;a href="http://omar.mvps.org/tool/jpeg.zip" rel="nofollow"&gt;here&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Compress .CSS files by clicking &lt;a href="http://iceyboard.no-ip.org/projects/css_compressor" rel="nofollow"&gt;here&lt;/a&gt; and &lt;a href="http://www.cssdrive.com/index.php/main/csscompressor" rel="nofollow"&gt;here&lt;/a&gt; and &lt;a href="http://www.roscripts.com/Compress_CSS_code-99.html" rel="nofollow"&gt;here&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Compress .Js files by clicking &lt;a href="http://www.xtreeme.com/javascript-optimizer/" rel="nofollow"&gt;here&lt;/a&gt; and &lt;a href="http://www.softpicks.net/software/JS-Compress-12582.htm" rel="nofollow"&gt;here&lt;/a&gt; and &lt;a href="http://www.programurl.com/js-compress.htm" rel="nofollow"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;5. CSS at Top&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;The recommended approach is to put CSS links on top of the web page, as it makes the page render progressively efficient. Since users want to see the contents of a page whilst it’s loading rather than white spaces, contents/formats should be given on top. &lt;a href="http://www.w3.org/TR/html4/struct/links.html" rel="nofollow"&gt;HTML Specifications&lt;/a&gt; clearly say to declare style sheets in the head section of a web page.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;6. Javascript at Bottom&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;When scripts are defined on top of the page they can take unnecessary time to load; they don’t show the contents that users are expecting after making any request to an HTTP web server. It's better to display a the HTML contents of a page, then load any scripting code (when possible, of course).&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;Preferably use/link up JavaScript-based scripts at the bottom of a web page. Alternatively you can use the defer attribute, which runs the script at the end of page loading, but that is not the preferable approach as it is not browser independent. For example, Firefox doesn’t support it and could mess up with document.write, so only use it once you fully understand the implications.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;7. Content Delivery Network: (CDN)&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;When a browser makes a request to any web page – that is, he types a URL/URI of any web page or web site, a request goes through many hops (routers and computers) and then finally reaches its final destination. This happens both for requests and responses. This operation affects performance and can severely effect load time.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;A Content Delivery Network implies a collection of computers, distributed all over the world, which deliver data (contents). Through a CDN you can have your website data on multiple servers distributed in different locations around the world. Distribute web application data in different places around the world so request can be served from the nearest location and save time (which means performance and money as well).&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;8. Ajax&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Problemm:&lt;/span&gt; Ajax is being increasingly used to improve usability, but oftentimes in a way which increases overall server load.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Solutions:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;Preferably use the GET method for Ajax based Requests, because if you use POST method then the request header would be sent first, followed by the data, which basically splits the request in two steps. A single-step request can be achieved with GET if a cookie is not too long and the URL is not larger than 2k.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;When using ASP.NET AJAX and the UpdatePanel control for partial page rendering, use the maximum number of update panels to update small chunks of page, but use them wisely. Don’t set the Update property to Always unless needed. Instead, set the update mode to Conditional, otherwise all the partial chunks would be sent together after each asynchronous postback.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;Ajax based requests can also be cached when using the GET method. If the URL is the same, then cached data can be used from the client, and a round trip to the server can be avoided.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;9. Ajax vs. Callback&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Problem:&lt;/span&gt; Ajax is a great solution for asynchronous communication between client (web browser) and HTTP servers, but one solution can't be applied to every problem. This means that Ajax is great mechanism for sending requests to the server without making a full page postback, but what if you need to send a request to the server and don’t even need partial rendering?&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Solution:&lt;/span&gt; Best solution is Callback.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;For example, if you need to check whether a user exists or not, or if a user has forgotten his/her password and you just need to send a request to the server to check if user name exist, there is no need for client-side render - just a server side operation.&lt;br /&gt;Following are a couple of great links which explain callbacks: Please click &lt;a href="http://aspalliance.com/1537" rel="nofollow"&gt;here&lt;/a&gt;&lt;a href="http://aspalliance.com/1537" rel="nofollow"&gt;here&lt;/a&gt;.&lt;br /&gt;and &lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;10. Reduce Cookie size&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;Cookies are stored on the client side to keep information about users (authentication and personalization). Since HTTP is a stateless protocol, cookies are common in web development to maintain information and state. Cookies are sent with every HTTP requests, so try to keep them low in size to minimize effects on the HTTP response.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Cookie’s size should be minimized as much as possible.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Cookies shouldn’t contain secret information. If really needed, that information should be either encrypted or encoded.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Try to minimize the number of cookies by removing unnecessary cookies.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Cookies should expire as soon as they become useless for an application.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;11. Use Cache appropriately&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;Cache mechanism is a great way to save server round trips - and also database server round trips - as both round trips are expensive processes. By caching data we can avoid hitting them when unnecessary. Following are few guidelines for implementing caching::&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Static contents should be cached, like “Contact us” and “About us” pages, and such other pages which contain static information.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;If a page is not fully static, it contains some dynamic information. Such pages can leverage the ASP.NET technology, which supports partial page caching.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;If data is dynamically accessed and used in web pages - like data being accessed from some file or database - and even if data is consistently or regularly changed, then that data could be cached by using ASP.NET 2.0 cache dependency features. As soon as data changes from the back-end by some other means, the cache would be updated.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Now that web technologies such ASP.NET have matured and offer such great caching capabilities, there's really no reason not to make extensive use of them.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;Following are few very good links to implement caching for different types of data (static and dynamic):&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Click &lt;a href="http://aspnet.4guysfromrolla.com/articles/022802-1.aspx" rel="nofollow"&gt;here&lt;/a&gt; to cache Full page (static page caching).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Click &lt;a href="http://support.microsoft.com/kb/308378" rel="nofollow"&gt;here&lt;/a&gt; and &lt;a href="http://support.microsoft.com/kb/308378"&gt;here&lt;/a&gt; to cache partial page caching.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Click &lt;a href="http://msdn2.microsoft.com/en-us/magazine/cc163955.aspx" rel="nofollow"&gt;here&lt;/a&gt; to cache dynamic data with dependency.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;12. Upload compiled code rather than source code&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;Pre-compiled ASP.NET pages perform much better than source code versions. Actually pre-compilation give web sites a performance boost especially when the first request is made to a folder containing that resource. Uploading a pre-compiled version boosts up performance since the server doesn’t need to compile a page at request-time.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;13. Conclusions&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;Following are few good practices to gain better performance::&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;For HTTP compression, GZip is considered the most effective and most popular by means of browsers and HTTP server. It can reduce file size up to 70% in size.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Always keep JavaScript and CSS in external files.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Avoid redirects until needed. Server.Transfer is also provided so consider that as well since it performs better in some conditions.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Minimize use of Iframes as it's costly.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Avoid try-catch blocks for control-flow as they perform poorly. Exceptions should be used only in truly exceptional situations.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Minimize Cookie/CSS sizes.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Minimize DOM objects on page as they are heavy weight.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Use link tags rather than @import to use/link up CSS.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Favicon, being a static image displayed in the browser’s address bar, should be cacheable and compressed.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Always prefer a cache-friendly folder structure. For example, create specific folders for static contents, like /static for static images/static pages…&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;SSL can never be cached so minimize its usage. Keep it for those pages which need to be secure, rather than using it for all the pages.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;HTTP Post requests can’t be cached, so choose the HTTP method appropriately.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Prevent Denial of Service (Dos) attacks.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Prevent SQL Injection.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Prevent Cross Site Scripting (XSS).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-4729023007913906858?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/4729023007913906858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=4729023007913906858&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/4729023007913906858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/4729023007913906858'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/06/improve-web-application-performance.html' title='Improve Web Application Performance'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-3820757105810679597</id><published>2008-06-24T01:30:00.000-07:00</published><updated>2008-06-24T03:05:54.589-07:00</updated><title type='text'>Hghlight Datagrid or GridView Row on Mouse Over</title><content type='html'>This article will show how you can Ajax with GridView to display popup messages when mouse moves over certain column. In the demo project I have added first column as an image column with a help icon in it. This kind of implements a feature that if you want more information about the row you can move mouse over this icon, a asynchronous request is sent to server for data about that row and when call returns the returned message is show as a popup message. This technique combines traditional use of GridView along with AJAX to get more data on demand for grid. I have used Anthem.Net AJAX library in my demo project. You can use library of your choice if you are not familiar with Anthem.Net.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;img src="http://www.netomatix.com/development/images/gridviewpophelp.png" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;I have used the technique from my article &lt;a href="http://www.netomatix.com/development/GridViewClientSideAccess.aspx"&gt;How to access gridview cell values on client side&lt;/a&gt; and &lt;a href="http://www.netomatix.com/development/GridViewRowHighlight.aspx"&gt;How to highlight datagrid or GridView row on mouse over&lt;/a&gt; to raise the client side events for AJAX with appropriate values for that record from client side. Following code snippet from the demo project shows how I have added handlers for onmouseover and onmouseout eventd for the cells. In onmouseover event I pass ProductId value of the record which gets passed back to server during AJAX call. protected void OnRowCreated(object sender, GridViewRowEventArgs e)&lt;br /&gt;{&lt;br /&gt;if (e.Row.RowType == DataControlRowType.Header)&lt;br /&gt;{&lt;br /&gt;if (String.Empty != m_strSortExp)&lt;br /&gt;{&lt;br /&gt;AddSortImage(e.Row);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;if (e.Row.RowType == DataControlRowType.DataRow)&lt;br /&gt;{&lt;br /&gt;DataRowView drv = e.Row.DataItem as DataRowView;&lt;br /&gt;if (null != drv)&lt;br /&gt;{&lt;br /&gt;Object ob = drv["ProductID"];&lt;br /&gt;e.Row.Cells[0].Attributes.Add("onmouseover", "onMouseOnRow('" + ob.ToString() + "');");&lt;br /&gt;e.Row.Cells[0].Attributes.Add("onmouseout", "onMouseOutOfRow();");&lt;br /&gt;e.Row.Attributes.Add("onmouseover", "this.className='hightlighrow';");&lt;br /&gt;e.Row.Attributes.Add("onmouseout", "this.className='normalrow'");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;m_iRowIdx++;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;AJAX and Anthem Usage&lt;br /&gt;Following steps describe the steps to follow in using Anthem.Net. Most of this discussion is available in Anthem.Net InvokePageMethodsample project of this library.&lt;br /&gt;Add a public method called GetGridRowHelp to your page so that it takes in ProductId value as parameter:&lt;br /&gt;public String GetGridRowHelp(String strRecordId)&lt;br /&gt;{&lt;br /&gt;if (null != m_dsProducts)&lt;br /&gt;{&lt;br /&gt;Int32 iProdId = 0;&lt;br /&gt;Int32.TryParse(strRecordId, out iProdId);&lt;br /&gt;DataRow prodRow = GetProductDataRow(iProdId);&lt;br /&gt;if (null != prodRow)&lt;br /&gt;{&lt;br /&gt;return String.Format("Price for {0} is {1:c}", prodRow["Name"], prodRow["ListPrice"]);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;return "Could not find product " + strRecordId;&lt;br /&gt;}&lt;br /&gt;Apply the Anthem.Method attribute to the GetGridRowHelp method. Without this, it can't be invoked from clients:&lt;br /&gt;[Anthem.Method]&lt;br /&gt;public String GetGridRowHelp(String strRecordId)&lt;br /&gt;{&lt;br /&gt;........&lt;br /&gt;}&lt;br /&gt;Register the page with the Anthem manager when the page fires its Load event:&lt;br /&gt;protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;Anthem.Manager.Register(this);&lt;br /&gt;......&lt;br /&gt;}&lt;br /&gt;In event that gets fired when mouse moves over the image icon in grid view, call Anthem_InvokePageMethod which results in calling server-side GetGridRowHelp method:&lt;br /&gt;&lt;script language="javascript" type="text/javascript"&gt;&lt;br /&gt;function onMouseOnRow(recId)&lt;br /&gt;{&lt;br /&gt;var posX = window.event.x;&lt;br /&gt;var posY = window.event.y;&lt;br /&gt;getGridHelpMsgControls();&lt;br /&gt;if (!bHelpCallInProgress)&lt;br /&gt;{&lt;br /&gt;bHelpCallInProgress = true;&lt;br /&gt;Anthem_InvokePageMethod(&lt;br /&gt;'GetGridRowHelp',&lt;br /&gt;[recId],&lt;br /&gt;function(result)&lt;br /&gt;{&lt;br /&gt;showHelpMsg(result.value, posX, posY);bHelpCallInProgress = false;&lt;br /&gt;}&lt;br /&gt;);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;The first argument to Anthem_InvokePageMethod needs to be the name of the method you want to invoke&lt;br /&gt;The second argument is the array of parameters for that method&lt;br /&gt;The third argument is a function that will get invoked here on the client when the server-side call back completes&lt;br /&gt;The argument to the client-side call back function is a result object. It has a value and an error property. If an error occurred on the server, value will be null and error won't be:&lt;br /&gt;On server side, we retrieve DataRow corresponding to the ProductId passed from client side, and construct our simple help message. When client call completes, this help message is set in a span and the div holding that span is made visible. In onmouseout event the div showing help message is hidden again.&lt;br /&gt;This mixing of GridView with AJAX could not get any simpler than this. You can extent this technique to do more wonderful things with presentation of data in DataGrid or GridView&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-3820757105810679597?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/3820757105810679597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=3820757105810679597&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/3820757105810679597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/3820757105810679597'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/06/hghlight-datagrid-or-gridview-row-on.html' title='Hghlight Datagrid or GridView Row on Mouse Over'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-3582186643315653237</id><published>2008-06-21T23:30:00.000-07:00</published><updated>2008-06-21T23:38:13.278-07:00</updated><title type='text'>ATLAS FilteredTextBox Extender</title><content type='html'>&lt;p&gt;What is an extender? The &lt;code&gt;AJAX Control Toolkit&lt;/code&gt; uses extenders to provide additional capabilities that go beyond what the normal ASP.NET controls can do out-of-the-box. This is because these extenders use client-side script to perform animations, transformations, or other cool effects. These features are available in &lt;code&gt;DHTML&lt;/code&gt;, while some may be browser-specific; however, to the developer, the extender handles all the work through the script that it emits, and all we need to worry about is the setup of the extender. &lt;/p&gt; &lt;h3&gt;Using the FilteredTextBox Extender&lt;/h3&gt; &lt;p&gt;To use the toolkit, you have to download it (the link is in the References section), and unzip it in your Visual Studio 2005\Projects folder. Navigate to the SampleWebSite\bin directory to get to the &lt;code&gt;AjaxControlToolkit.dll&lt;/code&gt; file, which contains all of the extenders. In the code sample, I used the following web configuration setup in the pages element:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt;&lt;br /&gt; &lt;span class="attr"&gt;tagPrefix&lt;/span&gt;&lt;span class="kwrd"&gt;="ajaxtoolkit"&lt;/span&gt;&lt;br /&gt; &lt;span class="attr"&gt;namespace&lt;/span&gt;&lt;span class="kwrd"&gt;="AjaxControlToolkit"&lt;/span&gt;&lt;br /&gt; &lt;span class="attr"&gt;assembly&lt;/span&gt;&lt;span class="kwrd"&gt;="AjaxControlToolkit"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;Using this following configuration, I setup a sample that allows the user to enter a phone number. The code segment is as follows: &lt;/p&gt;&lt;pre class="csharpcode"&gt;Enter a Phone Number:&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;asp:TextBox&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="txtPhoneNumber"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxtoolkit:FilteredTextBoxExtender&lt;/span&gt;&lt;br /&gt;  &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="extPhoneNumber"&lt;/span&gt;&lt;br /&gt;  &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;br /&gt;  &lt;span class="attr"&gt;TargetControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="txtPhoneNumber"&lt;/span&gt;&lt;br /&gt;  &lt;span class="attr"&gt;FilterType&lt;/span&gt;&lt;span class="kwrd"&gt;="Numbers, Custom"&lt;/span&gt;&lt;br /&gt;  &lt;span class="attr"&gt;ValidChars&lt;/span&gt;&lt;span class="kwrd"&gt;="-"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxtoolkit:FilteredTextBoxExtender&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt; &lt;/pre&gt; &lt;p&gt;Notice that the &lt;code&gt;textbox&lt;/code&gt; doesn't have anything special added to it; the extender emits script for it, which an extender is linked to it through the &lt;code&gt;TargetControlID&lt;/code&gt; (a consistent &lt;code&gt;property&lt;/code&gt; to target a &lt;code&gt;control&lt;/code&gt; throughout the control library). The other properties that were used were:  &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;FilterType&lt;/code&gt; - The filter type is an &lt;code&gt;enumeration&lt;/code&gt; that supports multiple assignments separated by a comma. It has possible values of &lt;code&gt;LowerCaseLetters&lt;/code&gt;, &lt;code&gt;UpperCaseLetters&lt;/code&gt;, &lt;code&gt;Numbers&lt;/code&gt;, and Custom. In the above example, I use Numbers and Custom options.  &lt;/li&gt;&lt;li&gt;&lt;code&gt;ValidChars&lt;/code&gt; - When using Custom &lt;code&gt;FilterType&lt;/code&gt;, the &lt;code&gt;ValidChars property&lt;/code&gt; contains a listing of characters that are the only ones allowed in the &lt;code&gt;textbox&lt;/code&gt;. &lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;Result&lt;/h3&gt; &lt;p&gt;The effective result is that only numbers and the - character are allowed to be typed in to the &lt;code&gt;textbox&lt;/code&gt;. No other values can be keyed in. However, validation is still needed to ensure that the values are in the correct order (this extender doesn't require the values be in any order). In the above example, I would have still needed that a &lt;code&gt;RegularExpressionValidator&lt;/code&gt; be used to ensure a correct format. This is a way though, to ensure that the correct results are provided in your applications that you develop.&lt;/p&gt; &lt;h3&gt;Another Example&lt;/h3&gt; &lt;p&gt;How would you set this up for name? &lt;code&gt;FilterType&lt;/code&gt; has a combination of &lt;code&gt;UppercaseLetters&lt;/code&gt; and &lt;code&gt;LowercaseLetters&lt;/code&gt; that can be used; however, this doesn't take care of the space. This means that the Custom option must be used as well, allowing for a &lt;code&gt;ValidChars&lt;/code&gt; parameter of " ". Using this, you can also ensure that only the correct name data can be entered. The example is below: &lt;/p&gt;&lt;pre class="csharpcode"&gt;Enter your Name:&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;asp:TextBox&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="txtName"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxtoolkit:FilteredTextBoxExtender&lt;/span&gt;&lt;br /&gt;  &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="extName"&lt;/span&gt;&lt;br /&gt;  &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;br /&gt;  &lt;span class="attr"&gt;TargetControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="txtName"&lt;/span&gt;&lt;br /&gt;  &lt;span class="attr"&gt;FilterType&lt;/span&gt;&lt;span class="kwrd"&gt;="UppercaseLetters,LowercaseLetters,Custom"&lt;/span&gt;&lt;br /&gt;  &lt;span class="attr"&gt;ValidChars&lt;/span&gt;&lt;span class="kwrd"&gt;=" "&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt; &lt;/pre&gt; &lt;p&gt;When running the form, this filter actually restricts the keyboard from entering values outside this range. Only letters and spaces are allowed to be typed in. The extender adds a script reference that points to a script stored as an embedded resource in the &lt;code&gt;DLL&lt;/code&gt; for the &lt;code&gt;control library&lt;/code&gt;, and the reference is generated dynamically. Using this extender, you can see a means to make validation of data easier in your applications. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-3582186643315653237?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/3582186643315653237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=3582186643315653237&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/3582186643315653237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/3582186643315653237'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/06/atlas-filteredtextbox-extender.html' title='ATLAS FilteredTextBox Extender'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-5534361242372822585</id><published>2008-06-19T05:06:00.000-07:00</published><updated>2008-06-19T05:29:13.428-07:00</updated><title type='text'>Introduction to Silverlight</title><content type='html'>&lt;h3&gt;What is Silverlight?&lt;/h3&gt;  &lt;p&gt;&lt;code&gt;Silverlight&lt;/code&gt; is a browser plug-in that that extends the web development   experience far beyond the limitations of plain &lt;code&gt;HTML&lt;/code&gt; and &lt;code&gt;JavaScript&lt;/code&gt;.   Being a Microsoft product, you might expect it to work best (or only) on   Windows and Internet Explorer. So you may be pleasantly surprised to   know that it works equally well on Windows and on the Mac, and it also works   equally well on the Firefox and Safari web browsers. Since &lt;code&gt;Silverlight&lt;/code&gt;   is a client side technology, it doesn't matter what backend server software   or platform you're running - even Apache/Linux will do just fine. &lt;/p&gt;   &lt;h3&gt;Version 1.0&lt;/h3&gt;  &lt;p&gt;&lt;code&gt;Silverlight&lt;/code&gt; version 1.0 - scheduled for release this summer - is very   comparable to Adobe Flash. It delivers high performance multimedia and   animation capabilities that can blend seamlessly with HTML. It's   capable of playing a variety of audio and video file formats, such as MP3,   WMA, and WMV. It handles streaming quite well, so media can start   playing immediately without having to wait for the entire file to download.  &lt;/p&gt;   &lt;p&gt;Silverlight's user interface is   defined with a subset of  &lt;a href="http://dotnetslackers.com/articles/silverlight/IntroductiontoXAMLPart1.aspx"&gt;XAML&lt;/a&gt; - an XML format shared with   &lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa663326.aspx" rel="nofollow"&gt;Windows   Presentation Foundation (WPF)&lt;/a&gt;. This facilitates vector based   animations, a claim that goes beyond Flash's current capabilities.   Silverlight's compiled object model can be navigated via &lt;code&gt;JavaScript&lt;/code&gt; for   seamless interaction between embedded &lt;code&gt;Silverlight&lt;/code&gt; components and the page   that hosts them.&lt;/p&gt;   &lt;p&gt;  When users encounter a &lt;code&gt;Silverlight&lt;/code&gt; 1.0 enhanced web page for the first time,   they'll be prompted with the quick &amp;amp; easy installation that's only   about a 1.2 megabyte download.&lt;/p&gt;   &lt;p&gt;  You can &lt;a href="http://silverlight.net/GetStarted/" rel="nofollow"&gt;download the beta   version&lt;/a&gt; of Silverlight 1.0 now.&lt;/p&gt;   &lt;h3&gt;Version 1.1&lt;/h3&gt;  &lt;p&gt;While the multimedia and animation capabilities of &lt;code&gt;Silverlight&lt;/code&gt; 1.0 are   certainly great for graphic designers, &lt;code&gt;Silverlight&lt;/code&gt; version 1.1 (currently in alpha) starts to provide the kind of business oriented functionality that   the majority of web developers need.&lt;/p&gt;   &lt;p&gt;  Probably the most exciting feature of version 1.1 is the built-in cross   platform subset of the &lt;code&gt;.NET&lt;/code&gt; Framework. While you can still mix in as   much (or as little) &lt;code&gt;JavaScript&lt;/code&gt; as you'd like, you'll now have the option of   running your own fully compiled &lt;code&gt;.NET&lt;/code&gt; code within IE, Firefox, or Safari.   Those developers who hate &lt;code&gt;JavaScript&lt;/code&gt; should be thrilled to know they can now   write their client side code in &lt;code&gt;C#&lt;/code&gt;, &lt;code&gt;VB.NET&lt;/code&gt;, or any other &lt;code&gt;.NET&lt;/code&gt; language.   This &lt;code&gt;.NET&lt;/code&gt; code can interact with the browser's object model so it can   manipulate the page's &lt;code&gt;HTML&lt;/code&gt; in addition to interacting with any &lt;code&gt;Silverlight&lt;/code&gt;   user interface that may be embedded in the page. You'll now be able to   replace slow performing &lt;code&gt;JavaScript&lt;/code&gt; code with fully compiled .NET code that   could easily execute hundreds of times faster.&lt;/p&gt;   &lt;p&gt;  A variety of useful classes are included in &lt;code&gt;Silverlight&lt;/code&gt; 1.1 for working with   cutting edge technologies like  &lt;a href="http://dotnetslackers.com/articles/csharp/introducinglinq1.aspx"&gt;  LINQ&lt;/a&gt;, &lt;code&gt;generics&lt;/code&gt;, &lt;code&gt;multithreading&lt;/code&gt;, and &lt;code&gt;invocation&lt;/code&gt; of  &lt;a href="http://dotnetslackers.com/WCF/re-49256_An_Introduction_to_WCF_Part_1.aspx"&gt;  Windows Communication Foundation (WCF)&lt;/a&gt; web services. There's also   support for XML manipulation, networking, I/O, collections, globalization,   and &lt;code&gt;JSON&lt;/code&gt; serialization.&lt;/p&gt;   &lt;p&gt;  &lt;code&gt;ASP.NET&lt;/code&gt; support is also provided for things like personalization, profiles,   role membership, and invocation of ASMX web services. On a related   note, the next release of ASP.NET is expected to include a variety of tools   for easing &lt;code&gt;Silverlight&lt;/code&gt; development, including built-in controls that make it   easy to embed &lt;code&gt;Silverlight&lt;/code&gt; content.&lt;/p&gt;   &lt;p&gt;  Unfortunately there are currently no definite plans to include any   significant number of controls in &lt;code&gt;Silverlight&lt;/code&gt; 1.1 - not even a basic &lt;code&gt;button&lt;/code&gt;   control is currently in the mix. They do at least provide a control   class that can be used to build your own controls, and alternately it's not   terribly difficult to make basic controls using &lt;code&gt;XAML&lt;/code&gt; and some custom code -   but certainly we'd prefer not to have to write such basic code.   Luckily there are  &lt;a href="http://nerddawg.blogspot.com/2007/05/silverlight-ui-controls.html" rel="nofollow"&gt;  several controls available&lt;/a&gt; in the separate  &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=54B85D84-604D-43DB-BCFE-7AFD278208D8&amp;amp;displaylang=en" rel="nofollow"&gt;  Silverlight 1.1 Alpha SDK download&lt;/a&gt;.&lt;/p&gt;   &lt;p&gt;  Since &lt;code&gt;Silverlight&lt;/code&gt; 1.1 is still only in alpha, its uncertain exactly what   other functionality may ultimately make it into the release version.   The current download size for this far more functional version of   &lt;code&gt;Silverlight&lt;/code&gt; hovers at around 4MB.&lt;/p&gt;   &lt;h3&gt;Future Versions&lt;/h3&gt;  &lt;p&gt;From my conversations with &lt;code&gt;Silverlight&lt;/code&gt; mastermind  &lt;a href="http://weblogs.asp.net/scottgu/default.aspx" rel="nofollow"&gt;Scott Guthrie&lt;/a&gt; and   his merry band of genius underlings, they've got a lot of mouthwatering   functionality planned for upcoming versions of &lt;code&gt;Silverlight&lt;/code&gt;. General   themes include a rich set of built-in controls, data binding support, &lt;code&gt;XLINQ&lt;/code&gt;,   RSS, Xml Serialization, Opera support, and improved layout management.   And that's just for starters.&lt;/p&gt;   &lt;p&gt;  In general the vision is to transform &lt;code&gt;Silverlight&lt;/code&gt; from its current 1.0   state of multimedia powerhouse into a highly productive business tool   capable of powering rich applications of virtually every kind.&lt;/p&gt;   &lt;p&gt;  Even with all this extra functionality, Silverlight's team has a long term   secret goal of keeping the download size under 5MB. Shhhh! Don't   tell anybody!&lt;/p&gt;   &lt;h3&gt;Development Tools&lt;/h3&gt;  &lt;p&gt;Currently the lack of polished tools for developing &lt;code&gt;Silverlight&lt;/code&gt;   applications is its biggest hindrance. The next version of Visual   Studio (codenamed  &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=5d9c6b2d-439c-4ec2-8e24-b7d9ff6a2ab2&amp;amp;DisplayLang=en" rel="nofollow"&gt;  Orcas&lt;/a&gt;) is expected to ship with rich &lt;code&gt;Silverlight&lt;/code&gt; support. However,   the current beta version of &lt;code&gt;Orcas&lt;/code&gt; clearly still needs a lot of work before   achieving this goal. If you're brave enough to be tinkering with the  &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=5d9c6b2d-439c-4ec2-8e24-b7d9ff6a2ab2&amp;amp;DisplayLang=en" rel="nofollow"&gt;  Orcas&lt;/a&gt; beta then you might as well  &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=6C2B309B-8F2D-44A5-B04F-836F0D4EC1C4&amp;amp;displaylang=en" rel="nofollow"&gt;  download the Silverlight Tools Alpha&lt;/a&gt; add-on to try out its &lt;code&gt;Silverlight&lt;/code&gt;   development capabilities.&lt;/p&gt;   &lt;p&gt;  Microsoft's new Expression suite of products is currently closer to being in   a finished state. They are presently more polished and less buggy than   &lt;code&gt;Orcas&lt;/code&gt;. Specifically,  &lt;a href="http://www.microsoft.com/Expression/products/download.aspx?key=blend2maypreview" rel="nofollow"&gt;  Expression Blend&lt;/a&gt; is probably the most valuable Expression product for   &lt;code&gt;Silverlight&lt;/code&gt; development. However, be forewarned that the Expression   suite is intended more for graphic designers than software developers.   Therefore Visual Studio-oriented developers should expect a significant   learning curve. &lt;/p&gt;   &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;&lt;code&gt;Silverlight&lt;/code&gt; is a brilliant idea that still has a   ways to go before it reaches its potential. Nevertheless, it should   definitely be on every web developer's radar. It's a distinct   possibility that &lt;code&gt;Silverlight&lt;/code&gt; could be &lt;em&gt;the&lt;/em&gt; future of web   development. Imagine a world where web developers no longer deal with   HTML, and instead write rich, compiled .NET code that runs everywhere as   ubiquitously as &lt;code&gt;HTML&lt;/code&gt; does now. If Microsoft plays its cards right,   this will happen.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-5534361242372822585?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/5534361242372822585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=5534361242372822585&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/5534361242372822585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/5534361242372822585'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/06/introduction-to-silverlight.html' title='Introduction to Silverlight'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-809597789722631920</id><published>2008-06-16T08:35:00.000-07:00</published><updated>2008-06-16T08:38:09.588-07:00</updated><title type='text'>JavaScript with ASP.NET 2.0 Pages</title><content type='html'>&lt;p&gt;&lt;span id="ctl00_ArticleInfo1_desc"&gt;ASP.NET 2.0 has made quite a few enhancements over ASP.NET 1.x in terms of handling common client-side tasks. It has also created new classes, properties and method of working with JavaScript code. This article explores the enhancements and the various ways of injecting JavaScript programmatically into ASP.NET 2.0 pages. &lt;/span&gt;&lt;/p&gt; 		                 &lt;h3&gt;Introduction&lt;/h3&gt; &lt;p&gt;In ASP.NET 1.x days, many client-side tasks, such as tracking mouse events, setting page focus, displaying/hiding a section of page, was not directly supported by asp.net. This is because ASP.NET applications are server-based; all web control events are handled on the server side. The constant round trips to and from server often slows down work processes, and the page-refreshing often ensured a web form would to lose its focus or its scroll position. Therefore programmers still rely on a multitude of JavaScript to keep web pages nimble and responsive. However, in ASP.NET 1.x, injecting JavaScript always involves two steps and quite some code: First, you weave your JavaScript function into a string in your code-behind page; second, you use the &lt;code&gt;Page&lt;/code&gt; class of your web form to register the script, using either the &lt;code&gt;Page.RegisterStartupScript&lt;/code&gt; or the &lt;code&gt;Page.RegisterClientScriptBlock&lt;/code&gt; method. &lt;/p&gt; &lt;p&gt;ASP.NET 2.0 has inherited some of the ASP.NET 1.x approaches of including JavaScript in a web form. Moreover, it has added many methods and properties to smooth and simplify the handling of some of the most common client-side tasks. It has also introduced new ways to include JavaScript on the server side or load JavaScript from resources. In this article will go into detail of the enhancements and the various ways of working with Script code in ASP.NET 2.0. &lt;/p&gt; &lt;h3&gt;Client-Side Enhancements&lt;/h3&gt; &lt;p&gt;In this section, we will consider three common client-side tasks that ASP.NET 2.0 have made as easy as setting properties of controls. &lt;/p&gt; &lt;p&gt;&lt;b&gt;1. Setting focus to web controls&lt;/b&gt; &lt;/p&gt; &lt;p&gt;In ASP.NET 1.x, it is not possible to programmatically set focus to a web server control without a bit help from the JavaScript's function &lt;code&gt;focus()&lt;/code&gt;. Here is how it was commonly done in C#: &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//ASP 1.x method of setting focus to a specific control. You need&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;//to first pass the control's id as the parameter, then define the &lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;//JavaScript function in a string variable then call the Page class&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;//to register the script. You may use either RegisterStartupScript() &lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;//or RegisterClientScriptBlock() method.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetFocus(String ctrlID)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;// Build the JavaScript String&lt;/span&gt;&lt;br /&gt;System.Text.StringBuilder sb = &lt;span class="kwrd"&gt;new&lt;/span&gt; System.Text.StringBuilder();&lt;br /&gt;sb.Append(&lt;span class="str"&gt;"&lt;script language="'javascript'"&gt;"&lt;/span&gt;);&lt;br /&gt; sb.Append(&lt;span class="str"&gt;"document.getElementById('"&lt;/span&gt;);&lt;br /&gt; sb.Append(ctrlID);&lt;br /&gt; sb.Append(&lt;span class="str"&gt;"').focus()"&lt;/span&gt;);&lt;br /&gt; sb.Append(&lt;span class="str"&gt;"&lt;/script&gt;"&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;// Register the script code with the page.&lt;/span&gt;&lt;br /&gt;Page.RegisterStartupScript(&lt;span class="str"&gt;"FocusScript"&lt;/span&gt;, sb.ToString());&lt;br /&gt;}&lt;/pre&gt; &lt;p&gt;However, in ASP 2.0, there are three ways to dynamically set the focus to a specific control, all in just one line of code. You pass the control ID as the parameter and call the &lt;code&gt;Page.SetFocus(control)&lt;/code&gt; method, which enables you to set the focus to a particular control immediately after a page is initiated or loaded.&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Init(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;SetFocus(ControlToSetFocus);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Or you can call the &lt;code&gt;Focus&lt;/code&gt; method that is available to all web controls. You can call it in the Page_load event or based on a user's response to set up a skip pattern. For example, if you have a &lt;code&gt;TextBox&lt;/code&gt; web control called &lt;code&gt;Textbox1&lt;/code&gt;, you may simply call: &lt;/p&gt;&lt;pre class="csharpcode"&gt;TextBox1.Focus();&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;ASP 2.0 web forms also have a property called &lt;code&gt;DefaultFocus&lt;/code&gt;. By setting the &lt;code&gt;DefaultFocus&lt;/code&gt; property, you can set the focus to a desired control when page loads. &lt;/p&gt; &lt;p&gt;For example, the code below will automatically set the focus on &lt;code&gt;TextBox2&lt;/code&gt; when the web form is loaded: &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;defaultfocus&lt;/span&gt;&lt;span class="kwrd"&gt;="textbox2"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;asp:textbox&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="textbox1"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;asp:textbox&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="textbox2"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;form&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt; &lt;/span&gt;&lt;/pre&gt; &lt;p&gt;&lt;b&gt;2. Popping up Message Boxes&lt;/b&gt; &lt;/p&gt; &lt;p&gt;Confirming with users before they take actions with potentially irreversible consequences like record deleting is a common practice, so is alerting users about important information with a JavaScript alert box. In ASP.NET 1.x, with either a delete column of a &lt;code&gt;DataGrid&lt;/code&gt;, or a regular web control, we need to attach the JavaScript &lt;code&gt;alert(msg)&lt;/code&gt; or &lt;code&gt;confirm(msg)&lt;/code&gt; function to the control's attributes or register the script with the &lt;code&gt;Page&lt;/code&gt; class. &lt;/p&gt; &lt;p&gt;For example, we can use the following code to add the alert script to a button control: &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;language&lt;/span&gt;&lt;span class="kwrd"&gt;="C#"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt;  &lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Load(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e){&lt;br /&gt;  &lt;span class="rem"&gt;//Set the button's client-side onmouseover event&lt;/span&gt;&lt;br /&gt;  btnClick.Attributes.Add(&lt;span class="str"&gt;"onClick"&lt;/span&gt;, &lt;span class="str"&gt;"alert('Ouch, you clicked me!');"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;asp:button&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Click Me!"&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="btnClick"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;form&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;Or similarly we can attach the &lt;code&gt;confirm(msg)&lt;/code&gt; script to a button. &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;language&lt;/span&gt;&lt;span class="kwrd"&gt;="C#"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Load(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e){&lt;br /&gt;  &lt;span class="rem"&gt;//Set the button's client-side onmouseover event&lt;/span&gt;&lt;br /&gt;  btnDelete.Attributes.Add(&lt;span class="str"&gt;"onClick"&lt;/span&gt;,&lt;br /&gt;  &lt;span class="str"&gt;"return confirm('You sure you want to delete the record?');"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;asp:button&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Delete!"&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="btnDelete"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;form&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;However, with a ASP.NET 1.x &lt;code&gt;DataGrid&lt;/code&gt;, we need to place the code for confirm messagebox in the DataGrid's &lt;code&gt;OnItemDataBound&lt;/code&gt; or &lt;code&gt;OnItemCreated&lt;/code&gt; event handler. The code below shows how this can be done in the &lt;code&gt;OnItemDataBound&lt;/code&gt; event. &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;language&lt;/span&gt;&lt;span class="kwrd"&gt;="c#"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DataGrid1_ItemDataBound(Object sender, DataGridItemEventArgs e)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="rem"&gt;// First, make sure we're NOT dealing with a Header or Footer row&lt;/span&gt;&lt;br /&gt;  If (e.Item.ItemType == ListItemType.Item ||&lt;br /&gt;      e.Item.ItemType == ListItemType.AlternatingItem )&lt;br /&gt;  {&lt;br /&gt;    &lt;span class="rem"&gt;//Assume  the first column of DataGrid1 is the Delete ButtonColumn&lt;/span&gt;&lt;br /&gt;    LinkButton deleteButton = e.Item.Cells(0).Controls(0);&lt;br /&gt;&lt;br /&gt;    &lt;span class="rem"&gt;//We can now add the onclick event handler&lt;/span&gt;&lt;br /&gt;    deleteButton.Attributes.Add(&lt;span class="str"&gt;"onclick"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="str"&gt;"javascript:return confirm('Are you sure you want to delete&lt;br /&gt;       this record?')"&lt;/span&gt;;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;asp:datagrid&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="DataGrid1"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;br /&gt;  ...&lt;br /&gt;  &lt;span class="attr"&gt;OnItemDataBound&lt;/span&gt;&lt;span class="kwrd"&gt;="DataGrid1_ItemDataBound"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;  ...&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;asp:datagrid&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;form&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;In ASP.NET 2.0, to add a client-side message box is just a matter of setting the &lt;code&gt;OnClientClick&lt;/code&gt; property, as the following: &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Button&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;=&lt;span class="attr"&gt;button1&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;=&lt;span class="attr"&gt;server&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;OnClientClick&lt;/span&gt;&lt;span class="kwrd"&gt;="return('Are you sure you want to delete this record')"&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Delete Record"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;However, with &lt;code&gt;GridView&lt;/code&gt;, the approach is similar to that of ASP.NET 1.x in terms of adding a confirmation box before deleting a &lt;code&gt;GridView&lt;/code&gt; row. That is, you have to attach the &lt;code&gt;confirm()&lt;/code&gt; script to the attributes of the delete column. Only with ASP.NET 2.0, you need to place the confirmation script within the &lt;code&gt;RowDataBound&lt;/code&gt; event handler. &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;language&lt;/span&gt;&lt;span class="kwrd"&gt;="c#"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;// ...&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GridView1_RowDataBound(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, GridViewRowEventArgs e)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="kwrd"&gt;if&lt;/span&gt; (e.Row.RowType == DataControlRowType.DataRow)&lt;br /&gt;  {&lt;br /&gt;    &lt;span class="rem"&gt;//suppose you have a link button column&lt;/span&gt;&lt;br /&gt;    LinkButton l = (LinkButton)e.Row.FindControl(&lt;span class="str"&gt;"LinkButton1"&lt;/span&gt;);&lt;br /&gt;    l.Attributes.Add(&lt;span class="str"&gt;"onclick"&lt;/span&gt;,&lt;br /&gt;    &lt;span class="str"&gt;"javascript:return confirm('Are you sure you want to delete&lt;br /&gt;       this record?'"&lt;/span&gt;);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;As an alternative, you can convert the &lt;code&gt;CommandField&lt;/code&gt; to a &lt;code&gt;TemplateField&lt;/code&gt; and add a Button with the &lt;code&gt;onClientClick&lt;/code&gt; property set to &lt;code&gt;confirm()&lt;/code&gt;. &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="form1"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;asp:SqlDataSource&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;br /&gt;  &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="SqlDataSource2"&lt;/span&gt;&lt;br /&gt;  &lt;span class="attr"&gt;ConnectionString&lt;/span&gt;&lt;span class="kwrd"&gt;="..."&lt;/span&gt;&lt;br /&gt;  &lt;span class="attr"&gt;SelectCommand&lt;/span&gt;&lt;span class="kwrd"&gt;="SELECT [CategoryID], [CategoryName],&lt;br /&gt;                [Description] FROM [Categories]"&lt;/span&gt;&lt;br /&gt;  &lt;span class="attr"&gt;DeleteCommand&lt;/span&gt;&lt;span class="kwrd"&gt;="Delete from categories where categoryID=@categoryID"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;DeleteParameters&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Parameter&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;=&lt;span class="attr"&gt;categoryID&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;=&lt;span class="attr"&gt;int16&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;DeleteParameters&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;asp:SqlDataSource&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;asp:GridView&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="GridView2"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;=&lt;span class="attr"&gt;server&lt;/span&gt; &lt;span class="attr"&gt;AutoGenerateColumns&lt;/span&gt;&lt;span class="kwrd"&gt;="False"&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;datasourceid&lt;/span&gt;&lt;span class="kwrd"&gt;="SqlDataSource2"&lt;/span&gt; &lt;span class="attr"&gt;DataKeyNames&lt;/span&gt;=&lt;span class="attr"&gt;CategoryID&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;Columns&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;asp:BoundField&lt;/span&gt; &lt;span class="attr"&gt;DataField&lt;/span&gt;&lt;span class="kwrd"&gt;="CategoryID"&lt;/span&gt;&lt;br /&gt;    &lt;span class="attr"&gt;HeaderText&lt;/span&gt;&lt;span class="kwrd"&gt;="ID"&lt;/span&gt;&lt;br /&gt;    &lt;span class="attr"&gt;readonly&lt;/span&gt;=&lt;span class="attr"&gt;true&lt;/span&gt;&lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;asp:BoundField&lt;/span&gt; &lt;span class="attr"&gt;DataField&lt;/span&gt;&lt;span class="kwrd"&gt;="CategoryName"&lt;/span&gt; &lt;span class="attr"&gt;HeaderText&lt;/span&gt;&lt;span class="kwrd"&gt;="Name"&lt;/span&gt;&lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;asp:BoundField&lt;/span&gt; &lt;span class="attr"&gt;DataField&lt;/span&gt;&lt;span class="kwrd"&gt;="Description"&lt;/span&gt; &lt;span class="attr"&gt;HeaderText&lt;/span&gt;&lt;span class="kwrd"&gt;="Description"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;asp:TemplateField&lt;/span&gt; &lt;span class="attr"&gt;HeaderText&lt;/span&gt;&lt;span class="kwrd"&gt;="Delete"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;ItemTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Button&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="deleteButton"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;br /&gt;          &lt;span class="attr"&gt;CommandName&lt;/span&gt;&lt;span class="kwrd"&gt;="Delete"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Delete"&lt;/span&gt;&lt;br /&gt;          &lt;span class="attr"&gt;OnClientClick&lt;/span&gt;&lt;span class="kwrd"&gt;="return confirm('Are you sure you want&lt;br /&gt;          to delete this record?');"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;ItemTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;asp:TemplateField&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;Columns&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;asp:GridView&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;img src="http://dotnetslackers.com/images/articleimages/WorkingWithJScript1.jpg" /&gt;  &lt;p&gt;&lt;b&gt;3. Maintaining Page Scrolling Position&lt;/b&gt; &lt;/p&gt; &lt;p&gt;In ASP 2.0, it is very easy to maintain a web page's scrolling position across postbacks. To achieve this, simply add a page directive at the top of your webpage: &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="asp"&gt;&lt;%@ Page ... MaintainScrollPositionOnPostback="true" %&gt;&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;However in ASP 1.x, it is not quite so simple, even though ASP.NET 1.x has a &lt;code&gt;Smartnavigation&lt;/code&gt; page directive that supposedly enables you to achieve the same goal. But as noted in many online posts and publications, &lt;code&gt;SmartNavigation&lt;/code&gt; has many &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;314206"&gt;known issues &lt;/a&gt;and it works only with Internet Explorer 5.5 or later. Several developers wrote some JavaScript code and wrapped the code inside a custom server control to work around the problem. For example, there is an article by Steve Stchur addressing this issue: &lt;a href="http://aspnet.4guysfromrolla.com/articles/111704-1.aspx"&gt;Maintaining Scroll Position on Postback&lt;/a&gt; &lt;/p&gt; &lt;h3&gt;Injecting JavaScript Code&lt;/h3&gt; &lt;p&gt;ASP.NET 2.0 not only provides ways to simplify some of the most common client-side tasks, it also allows you to write and include your own JavaScript in a web form. There are three ways to do so:&lt;/p&gt; &lt;ol&gt;&lt;li&gt;Injecting script blocks directly into a web page  &lt;/li&gt;&lt;li&gt;Including JavaScript on the server side  &lt;/li&gt;&lt;li&gt;Embedding JavaScript in Resources&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;As mentioned above, in ASP.NET 1.x, to include script in a web page, you always have to take two steps:  &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Define the JavaScript in a string variable  &lt;/li&gt;&lt;li&gt;Register with the &lt;code&gt;Page&lt;/code&gt; class&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;In ASP.NET 2.0, there is a similar approach. However, instead of the &lt;code&gt;Page&lt;/code&gt; class, it is recommended you register the script using the methods exposed by the &lt;code&gt;ClientScript&lt;/code&gt; property of the &lt;code&gt;Page&lt;/code&gt; class. &lt;code&gt;ClientScript&lt;/code&gt; is an instance of a new ASP.NET 2.0 class called &lt;code&gt;ClientScriptManager&lt;/code&gt;. Moreover, &lt;code&gt;ClientScript&lt;/code&gt; has many more new methods to work with JavaScript. &lt;/p&gt; &lt;p&gt;&lt;b&gt;Injecting Script blocks on demand&lt;/b&gt; &lt;/p&gt; &lt;p&gt;Script blocks on demand are code that execute only if a code-specific event is triggered on the client side. To inject script blocks on demand, use &lt;code&gt;ClientScript.RegisterClientScriptBlock&lt;/code&gt;. The following example shows how to pop up a new window when the button &lt;code&gt;btnPopUp&lt;/code&gt; is clicked using the &lt;code&gt;RegisterClientScriptBlock&lt;/code&gt; method: &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnPopUp_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="rem"&gt;//Build a Pop Up JavaScript&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;//please note the peculiar '/script' in the last line of the script string&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;//This is to work around the problem that compiler would mistake the &lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;//closing script tag as the outer script closing tag.&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;//For details, please see&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;//http://support.microsoft.com/default.aspx?scid=kb;EN-US;827420&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  System.Text.StringBuilder sb = &lt;span class="kwrd"&gt;new&lt;/span&gt; System.Text.StringBuilder();&lt;br /&gt;  sb.Append(&lt;span class="str"&gt;"&lt;script language="'javascript'"&gt;&lt;/script&gt;"&lt;/span&gt;);&lt;br /&gt;  sb.Append(&lt;span class="str"&gt;"window.open('javascript.htm', 'CustomPopUp',"&lt;/span&gt;);&lt;br /&gt;  sb.Append(&lt;span class="str"&gt;"'width=200, height=200, menubar=yes, resizable=no');&lt;"&lt;/span&gt;);&lt;br /&gt;  sb.Append(&lt;span class="str"&gt;"/script&gt;"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;  &lt;span class="rem"&gt;//register with ClientScript&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;//The RegisterStartupScript method is also slightly different&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;//from ASP.NET 1.x&lt;/span&gt;&lt;br /&gt;  Type t = &lt;span class="kwrd"&gt;this&lt;/span&gt;.GetType();&lt;br /&gt;  &lt;span class="kwrd"&gt;if&lt;/span&gt; (!ClientScript.IsClientScriptBlockRegistered(t, &lt;span class="str"&gt;"PopupScript"&lt;/span&gt;))&lt;br /&gt;    ClientScript.RegisterClientScriptBlock(t,&lt;span class="str"&gt;"PopupScript"&lt;/span&gt;, sb.ToString());&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="form2"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Button&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="btnPopUp"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;br /&gt;  &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="PopUp"&lt;/span&gt; &lt;span class="attr"&gt;OnClick&lt;/span&gt;&lt;span class="kwrd"&gt;="btnPopUp_Click"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;form&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;&lt;b&gt;Startup Script Blocks &lt;/b&gt;&lt;/p&gt; &lt;p&gt;Like the &lt;code&gt;Page.RegisterStartupScript&lt;/code&gt; method with ASP.NET 1.x, ASP.NET 2.0 has &lt;code&gt;ClientScript.RegisterStartupScript&lt;/code&gt; to execute JavaScript when the page first loads. The above example could be converted to: &lt;/p&gt;&lt;pre class="csharpcode"&gt;// ...&lt;br /&gt;Type t = this.GetType();&lt;br /&gt;if (!ClientScript.IsStartUpScriptRegistered(t, "PopupScript"))&lt;br /&gt;ClientScript.RegisterStartUpScript(t,"PopupScript", popupScript);&lt;/pre&gt; &lt;p&gt;&lt;b&gt;Including JavaScript on the server side &lt;/b&gt;&lt;/p&gt; &lt;p&gt;You can also include external JavaScript files via codebehind. Let's say you have a JavaScript file called myJavaScript.js, and you would like include it inside the web form by using the &lt;code&gt;RegisterClientScriptInclude&lt;/code&gt; method, as shown in the following: &lt;/p&gt;&lt;pre class="csharpcode"&gt;ClientScript.RegisterClientScriptInclude("MyScript","MyJavaScript.js")&lt;/pre&gt; &lt;p&gt;This piece of code will inject the following JavaScript include in your html code generated by the server: &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;="MyJavaScript.js"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;!--&lt;/span--&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;&lt;b&gt;Embedding JavaScript in Resources&lt;/b&gt; &lt;/p&gt; &lt;p&gt;In ASP.NET 2.0, you can also add your JavaScript or image files or CSS stylesheet as embedded resources. However, to do so, you must create a custom control, add necessary scripts or files to the project, then set the files property of &lt;code&gt;Build Action&lt;/code&gt; as an embedded resources, as illustrated in the following screenshot: &lt;/p&gt;&lt;img src="http://dotnetslackers.com/images/articleimages/WorkingWithJScript2.jpg" /&gt;  &lt;p&gt;For this article, I borrowed (however simplified) a custom control called &lt;a href="http://www.dotnetjohn.com/articles.aspx?articleid=215"&gt;AutoComplete Dropdownlist &lt;/a&gt;as an example. Briefly, to be able to access the JavaScript in the embedded resource, you need to take two steps: Declare the resource in the control's class file or in the &lt;code&gt;AssemblyInfo.cs&lt;/code&gt; using the syntax: &lt;/p&gt;&lt;pre class="csharpcode"&gt;[assembly: WebResource("{namespace}.{filename}", "{content-type}")]&lt;/pre&gt; &lt;p&gt;And in our example, it would be:&lt;/p&gt;&lt;pre class="csharpcode"&gt;[assembly: WebResource("WebControlLibrary1.AutoComplete.js", "text/javascript")]&lt;/pre&gt; &lt;p&gt;By doing so, we mark the file as accessible through the &lt;code&gt;WebResource.axd&lt;/code&gt; HTTP handler, then we may retrieve the actual file from the resources of the project's assembly by calling the method &lt;code&gt;GetWebResourceUrl(type, webresource)&lt;/code&gt;. &lt;/p&gt; &lt;p&gt;Now we can inject the JavaScript or other resource file by using the &lt;code&gt;RegisterClientScriptInclude&lt;/code&gt; method. &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnPreRender(EventArgs e)&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;base&lt;/span&gt;.OnPreRender(e);&lt;br /&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.Page.ClientScript.RegisterClientScriptInclude(&lt;span class="str"&gt;"AutoComplete"&lt;/span&gt;,&lt;br /&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.Page.ClientScript.GetWebResourceUrl(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(AutoCompleteDropDownList),&lt;br /&gt;&lt;span class="str"&gt;"WebControlLibrary1.AutoComplete.js"&lt;/span&gt;));&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt; &lt;h3&gt;Summary&lt;/h3&gt; &lt;p&gt;JavaScript is essential to keep web pages nimble and responsive. While ASP.NET 1.x has been cumbersome working with script, ASP.NET 2.0 has made great enhancements to remedy the limitations. It has made dealing with some of the most common client-side tasks as easy as setting control properties, and has introduced new classes and methods to allow injecting JavaScript into &lt;code&gt;webforms&lt;/code&gt; more flexible. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-809597789722631920?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/809597789722631920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=809597789722631920&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/809597789722631920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/809597789722631920'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/06/javascript-with-aspnet-20-pages.html' title='JavaScript with ASP.NET 2.0 Pages'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-7408327943841487359</id><published>2008-06-15T01:15:00.000-07:00</published><updated>2008-06-15T01:21:08.202-07:00</updated><title type='text'>.NET Framework 3.5 New Features</title><content type='html'>&lt;p class="MsoNormal" style="margin: 0in 0in 10pt; text-align: justify;"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Calibri;"&gt;.NET Framework 3.5 New Features&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;table class="MsoNormalTable" style="width: 534pt; border-collapse: collapse; text-align: left; margin-left: 0px; margin-right: 0px;" border="0" cellpadding="0" cellspacing="0" width="712"&gt; &lt;tbody&gt; &lt;tr style="height: 13.65pt;"&gt; &lt;td class="" style="border: 1pt solid black; padding: 0.05in 0.1in; background: black none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 178pt; height: 13.65pt;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; vertical-align: baseline; line-height: 13.65pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span style="font-size: 8pt; color: white; font-family: 'Arial','sans-serif';"&gt;Faster  .NET Framework execution&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" style="border-color: black black black rgb(236, 233, 216); border-top: 1pt solid black; border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; background: black none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 178pt; height: 13.65pt;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; vertical-align: baseline; line-height: 13.65pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span style="font-size: 8pt; color: white; font-family: 'Arial','sans-serif';"&gt;Base  Class Library – New Class Additions&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" style="border-color: black black black rgb(236, 233, 216); border-top: 1pt solid black; border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; background: black none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 178pt; height: 13.65pt;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; vertical-align: baseline; line-height: 13.65pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span style="font-size: 8pt; color: white; font-family: 'Arial','sans-serif';"&gt;Language  Integrated Query (LINQ)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 64.5pt;"&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black; border-left: 1pt solid black; border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; width: 178pt; height: 64.5pt; background-color: transparent; text-align: justify;" valign="top" width="237"&gt; &lt;p class="MsoNormalCxSpMiddle" style="margin: 0in 0in 0pt 45.35pt; vertical-align: baseline; text-indent: -0.25in; line-height: normal; font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;span style=""&gt;1.&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: black;"&gt;Faster  garbage collection&lt;/span&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormalCxSpMiddle" style="margin: 0in 0in 0pt 45.35pt; vertical-align: baseline; text-indent: -0.25in; line-height: normal; font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;span style=""&gt;2.&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: black;"&gt;Smarter,  faster NGen requiring smaller working set RAM&lt;/span&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormalCxSpMiddle" style="margin: 0in 0in 0pt 45.35pt; vertical-align: baseline; text-indent: -0.25in; line-height: normal; font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;span style=""&gt;3.&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: black;"&gt;64  bit client improvements&lt;/span&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormalCxSpMiddle" style="margin: 0in 0in 0pt 45.35pt; vertical-align: baseline; text-indent: -0.25in; line-height: normal; font-family: verdana;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;span style=""&gt;4.&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: black;"&gt;ThreadPool  performance improvements&lt;/span&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormalCxSpMiddle" style="margin: 0in 0in 0pt 45.35pt; vertical-align: baseline; text-indent: -0.25in; line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size: 9pt; font-family: verdana;"&gt;&lt;span style=""&gt;5.&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size: 9pt; color: black;"&gt;&lt;span style="font-family: verdana;"&gt;Security  check caching during NGen&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black rgb(236, 233, 216); border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; width: 178pt; height: 64.5pt; background-color: transparent; text-align: justify;" valign="top" width="237"&gt; &lt;p class="MsoNormalCxSpMiddle" style="margin: 0in 0in 0pt 45.35pt; vertical-align: baseline; text-indent: -0.25in; line-height: normal; font-family: verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;span style=""&gt;6.&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size: 9pt; color: black;" lang="SV"&gt;BigInteger,  HashSet and DateTime2 types&lt;/span&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormalCxSpMiddle" style="margin: 0in 0in 0pt 45.35pt; vertical-align: baseline; text-indent: -0.25in; line-height: normal; font-family: verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;span style=""&gt;7.&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size: 9pt; color: black;" lang="SV"&gt;NSA  Suite ”B” and FIPs compliant cryptography&lt;/span&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormalCxSpMiddle" style="margin: 0in 0in 0pt 45.35pt; vertical-align: baseline; text-indent: -0.25in; line-height: normal; font-family: verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;span style=""&gt;8.&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size: 9pt; color: black;" lang="SV"&gt;Lightweight  Reader/Writer Lock Classes&lt;/span&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormalCxSpMiddle" style="margin: 0in 0in 0pt 45.35pt; vertical-align: baseline; text-indent: -0.25in; line-height: normal; font-family: verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;span style=""&gt;9.&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size: 9pt; color: black;" lang="SV"&gt;Anonymous  and Named Pipes IO Classes&lt;/span&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormalCxSpMiddle" style="margin: 0in 0in 0pt 45.35pt; vertical-align: baseline; text-indent: -0.25in; line-height: normal;"&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-size: 9pt;"&gt;&lt;span style=""&gt;10.&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size: 9pt; color: black; font-family: verdana;" lang="SV"&gt;&lt;span style="font-family: trebuchet ms;"&gt;Integration  with Event Tracing for&lt;/span&gt; &lt;span style="font-family: verdana;"&gt;Windows&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; font-family: verdana;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormalCxSpMiddle" style="margin: 0in 0in 0pt 45.35pt; vertical-align: baseline; text-indent: -0.25in; line-height: normal;"&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-size: 9pt;"&gt;&lt;span style=""&gt;11.&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-size: 9pt; color: black;"&gt;New  Addin hosting model for extensibility&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: black;"&gt;  &lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black rgb(236, 233, 216); border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; width: 178pt; height: 64.5pt; background-color: transparent; font-family: verdana; text-align: justify;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 2.15pt 0in 0pt; vertical-align: baseline; line-height: normal;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size: 9pt; color: black;"&gt;Deep  integration of LINQ data-awareness into the programming languages and  framework.&lt;/span&gt;&lt;span style="font-size: 18pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 20.55pt;"&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black; border-left: 1pt solid black; border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; background: black none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 178pt; height: 20.55pt;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; vertical-align: baseline; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 8pt; color: white; font-family: 'Arial','sans-serif';"&gt;Workflow  Enabled Services – Process and Messaging together&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black rgb(236, 233, 216); border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; background: black none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 178pt; height: 20.55pt;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; vertical-align: baseline; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 8pt; color: white; font-family: 'Arial','sans-serif';"&gt;Web  2.0 Friendly and AJAX Enabled WCF Services&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black rgb(236, 233, 216); border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; background: black none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 178pt; height: 20.55pt;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; vertical-align: baseline; line-height: normal;"&gt;&lt;b&gt;&lt;span style="font-size: 8pt; color: white; font-family: 'Arial','sans-serif';"&gt;Visual  Studio Developer Tools for WF, WCF and in Visual Studio “Orcas”&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 81.3pt;"&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black; border-left: 1pt solid black; border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; width: 178pt; height: 81.3pt; background-color: transparent; text-align: justify;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 2.15pt 0in 0pt; vertical-align: baseline; line-height: normal;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-size: 9pt; color: black;" lang="SV"&gt;Using  workflow to provide for durable and long-running services. New Tools, WF  activities and new programming model classes have been added to simplify  building workflow-enabled services using WF and WCF. This allows a .NET  Framework developer to build business logic for a service using WF and expose  messaging from that service using WCF. These improvements not only provide tools  for this scenario but they reduce the amount of glue code that was previously  required.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black rgb(236, 233, 216); border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; width: 178pt; height: 81.3pt; background-color: transparent; text-align: justify;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 2.15pt 0in 0pt; vertical-align: baseline; line-height: normal;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-size: 9pt; color: black;" lang="SV"&gt;Ajax  is a web development technique for making asynchronous exchanges of small  amounts of data between browser and web service calls from the browser client  script to the web server. A programming model is provided for building Ajax  style web applications using WCF services. An HTTP programming model is also  provided allowing for REST style web services.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: black;" lang="SV"&gt;  &lt;/span&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black rgb(236, 233, 216); border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; width: 178pt; height: 81.3pt; background-color: transparent; text-align: justify;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 2.15pt 0in 0pt; vertical-align: baseline; line-height: normal;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-size: 9pt; color: black;" lang="SV"&gt;Visual  Studio”Orcas” has built in tools for web service authoring with WCF and for  building workflow enabled software with WF. There are new project templates for  WCF services, WF business logic, workflow enabled services, and AJAX services.  The templates are conveniently set up to compile and run even before any custom  code is added enabling .NET developers to get going quickly. There are also  numerous other tools for developing with WF, WCF and WPF.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: black;" lang="SV"&gt;  &lt;/span&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 13.65pt;"&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black; border-left: 1pt solid black; border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; background: black none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 178pt; height: 13.65pt;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; vertical-align: baseline; line-height: 13.65pt;"&gt;&lt;b&gt;&lt;span style="font-size: 8pt; color: white; font-family: 'Arial','sans-serif';"&gt;More  WS-* Standards Support&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black rgb(236, 233, 216); border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; background: black none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 178pt; height: 13.65pt;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; vertical-align: baseline; line-height: 13.65pt;"&gt;&lt;b&gt;&lt;span style="font-size: 8pt; color: white; font-family: 'Arial','sans-serif';"&gt;RSS  and ATOM Syndication API&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black rgb(236, 233, 216); border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; background: black none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 178pt; height: 13.65pt;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; vertical-align: baseline; line-height: 13.65pt;"&gt;&lt;b&gt;&lt;span style="font-size: 8pt; color: white; font-family: 'Arial','sans-serif';"&gt;Partial  Trust Support for WCF Hosting&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 89.7pt;"&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black; border-left: 1pt solid black; border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; width: 178pt; height: 89.7pt; background-color: transparent; text-align: justify;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 2.15pt 0in 0pt; vertical-align: baseline; line-height: normal;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-size: 9pt; color: black;" lang="SV"&gt;Implementation  in WCF of the latest OASIS specifications Web Services Atomic Transaction  (WS-AtomicTransaction) 1.1, WS-ReliableMessaging 1.1, WS-SecureCOnversation and  Web Services Coordination (WS-Coordination) 1.1.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: black;" lang="SV"&gt;  &lt;/span&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black rgb(236, 233, 216); border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; width: 178pt; height: 89.7pt; background-color: transparent; text-align: justify;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 2.15pt 0in 0pt; vertical-align: baseline; line-height: normal;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-size: 9pt; color: black;" lang="SV"&gt;Applications  built using WCF will be able to easily expose syndicated data which can be  consumed by an RSS or ATOM reader.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: black;" lang="SV"&gt;  &lt;/span&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black rgb(236, 233, 216); border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; width: 178pt; height: 89.7pt; background-color: transparent; text-align: justify; font-family: verdana;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 2.15pt 0in 0pt; vertical-align: baseline; line-height: normal;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size: 9pt; color: black;" lang="SV"&gt;Partial  trust on the vlient is provided for ASMX parity focussing mainly on partially  trusted WCF applications deployed through click-once. Support is provided for  basic HTTP binding provided that the application runs in the Internet zone  permissions and have granted the apropriate WebPermission. Secure communication  is possible through transport security only. All other features are not  available to partially trusted applications including hosting services, duplex  communications, non-HTTP transports, WS-* protocols and any WF use.&lt;/span&gt;&lt;span style="font-size: 9pt; color: black;" lang="SV"&gt;  &lt;/span&gt;&lt;span style="font-size: 18pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 13.65pt;"&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black; border-left: 1pt solid black; border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; background: black none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 178pt; height: 13.65pt;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; vertical-align: baseline; line-height: 13.65pt;"&gt;&lt;b&gt;&lt;span style="font-size: 8pt; color: white; font-family: 'Arial','sans-serif';"&gt;Rules  Data Improvements&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black rgb(236, 233, 216); border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; background: black none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 178pt; height: 13.65pt;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; vertical-align: baseline; line-height: 13.65pt;"&gt;&lt;b&gt;&lt;span style="font-size: 8pt; color: white; font-family: 'Arial','sans-serif';"&gt;Built-in  WPF tools for Visual Studio “Orcas”&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black rgb(236, 233, 216); border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; background: black none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 178pt; height: 13.65pt;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; vertical-align: baseline; line-height: 13.65pt;"&gt;&lt;b&gt;&lt;span style="font-size: 8pt; color: white; font-family: 'Arial','sans-serif';"&gt;Additional  WPF Features and Improved Performance&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 47.65pt;"&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black; border-left: 1pt solid black; border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; width: 178pt; height: 47.65pt; background-color: transparent; text-align: justify;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 2.15pt 0in 0pt; vertical-align: baseline; line-height: normal;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-size: 9pt; color: black;" lang="SV"&gt;The  rules engine in WF is improved to add support for C# 3.0 extension metods, and  for operator overloading . Also the ”new” operator is added to compete the base  set of expression types.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: black;" lang="SV"&gt;  &lt;/span&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black rgb(236, 233, 216); border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; width: 178pt; height: 47.65pt; background-color: transparent; text-align: justify;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 2.15pt 0in 0pt; vertical-align: baseline; line-height: normal;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-size: 9pt; color: black;"&gt;The  Visual Studio designer for WPF was previously released as a CTP. It is not  integrated into the development environment and is significantly  improved.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" style="border-color: rgb(236, 233, 216) black black rgb(236, 233, 216); border-right: 1pt solid black; border-bottom: 1pt solid black; padding: 0.05in 0.1in; width: 178pt; height: 47.65pt; background-color: transparent; text-align: justify;" valign="top" width="237"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; vertical-align: baseline; line-height: normal;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-size: 9pt; color: black;"&gt;WPF  has smoother animations, faster startup and better overall performance. There  are also new data types available for data binding with LINQ. Better integration  support is now provided for with codename “WPF/E”.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 18pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 10pt; text-align: justify;"&gt;&lt;o:p&gt;&lt;span style="font-family:Calibri;font-size:100%;"&gt; &lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-7408327943841487359?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/7408327943841487359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=7408327943841487359&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7408327943841487359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7408327943841487359'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/06/net-framework-35-new-features.html' title='.NET Framework 3.5 New Features'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-7192432266963170905</id><published>2008-06-11T23:51:00.000-07:00</published><updated>2008-06-11T23:53:32.230-07:00</updated><title type='text'>C# Object Clone Wars</title><content type='html'>&lt;p&gt;Cloning C# objects is one of those things that appears easy but is actually quite complicated with many "gotchas." This article describes the most common ways to clone a C# object.&lt;/p&gt; &lt;p&gt;&lt;span id="more-157"&gt;&lt;/span&gt;&lt;/p&gt; &lt;h3&gt;Shallow vs. Deep Cloning&lt;/h3&gt; &lt;p&gt;There are two types of object cloning: shallow and deep&lt;strong&gt;.  &lt;/strong&gt;A shallow clone copies the references but not the referenced objects.  A deep clone copies the referenced objects as well.&lt;/p&gt; &lt;p&gt;Hence, a reference in the original object and the same reference in a shallow-cloned object both point to the same object. Whereas a deep-cloned object contains a copy of everything directly or indirectly referenced by the object. See &lt;a href="http://en.wikipedia.org/wiki/Object_copy" target="_blank"&gt;wikipedia&lt;/a&gt; for a detailed explanation.&lt;/p&gt; &lt;p style="text-align: center;"&gt;&lt;a href="http://www.csharp411.com/wordpress/wp-content/uploads/2008/05/objectclone.jpg"&gt;&lt;img src="http://www.csharp411.com/wordpress/wp-content/uploads/2008/05/objectclone-thumb.jpg" style="border-width: 0px;" alt="Object Clone" border="0" height="195" width="400" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;ICloneable Interface&lt;/h3&gt; &lt;p&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/system.icloneable.aspx" target="_blank"&gt;ICloneable&lt;/a&gt; interface contains a single &lt;a href="http://msdn.microsoft.com/en-us/library/system.icloneable.clone.aspx" target="_blank"&gt;Clone&lt;/a&gt; method, which is used to create a copy of the current object.&lt;/p&gt; &lt;blockquote&gt; &lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;interface&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ICloneable&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt; &lt;span style="color: rgb(1, 0, 1);"&gt;Clone&lt;/span&gt;();&lt;br /&gt;}&lt;/pre&gt; &lt;/blockquote&gt; &lt;p&gt;The problem with ICloneable is that the Clone method does not explicitly specify whether it is performing a shallow or deep copy, so callers can never be sure. Hence, there is some &lt;a href="http://blogs.msdn.com/brada/archive/2004/05/03/125427.aspx" target="_blank"&gt;discussion&lt;/a&gt; about making ICloneable obsolete in the .NET Framework. The MSDN documentation seems to hint that Clone should perform a deep copy, but it is never explicitly stated:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;&lt;em&gt;The ICloneable interface contains one member, Clone, which is intended to support cloning beyond that supplied by MemberWiseClone… &lt;em&gt;The MemberwiseClone method creates a shallow copy…&lt;/em&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;h3&gt;Type-Safe Clone&lt;/h3&gt; &lt;p&gt;Another disadvantage of ICloneable is that the Clone method returns an object, hence every Clone call requires a cast:&lt;/p&gt; &lt;blockquote&gt; &lt;pre class="code"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Person&lt;/span&gt; &lt;span style="color: rgb(1, 0, 1);"&gt;joe&lt;/span&gt; = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Person&lt;/span&gt;();&lt;br /&gt;&lt;span style="color: rgb(1, 0, 1);"&gt;joe&lt;/span&gt;.&lt;span style="color: rgb(1, 0, 1);"&gt;Name&lt;/span&gt; = &lt;span style="color: rgb(163, 21, 21);"&gt;"Joe Smith"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Person&lt;/span&gt; &lt;span style="color: rgb(1, 0, 1);"&gt;joeClone&lt;/span&gt; = (&lt;span style="color: rgb(43, 145, 175);"&gt;Person&lt;/span&gt;)&lt;span style="color: rgb(1, 0, 1);"&gt;joe&lt;/span&gt;.&lt;span style="color: rgb(1, 0, 1);"&gt;Clone&lt;/span&gt;();&lt;/pre&gt; &lt;/blockquote&gt; &lt;p&gt;One way to avoid the cast is to provide your own type-safe Clone method. Note that you must still provide the ICloneable.Clone method to satisfy the ICloneable interface:&lt;/p&gt; &lt;blockquote&gt; &lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Person&lt;/span&gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;ICloneable&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; &lt;span style="color: rgb(1, 0, 1);"&gt;Name&lt;/span&gt;;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ICloneable&lt;/span&gt;.&lt;span style="color: rgb(1, 0, 1);"&gt;Clone&lt;/span&gt;()&lt;br /&gt;   {&lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.&lt;span style="color: rgb(1, 0, 1);"&gt;Clone&lt;/span&gt;();&lt;br /&gt;   }&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Person&lt;/span&gt; &lt;span style="color: rgb(1, 0, 1);"&gt;Clone&lt;/span&gt;()&lt;br /&gt;   {&lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;Person&lt;/span&gt;)&lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.&lt;span style="color: rgb(1, 0, 1);"&gt;MemberwiseClone&lt;/span&gt;();&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt; &lt;/blockquote&gt; &lt;h2&gt;Clone Options&lt;/h2&gt; &lt;p&gt;Following are some of the more common approaches to clone a C# object:&lt;/p&gt; &lt;h3&gt;1. Clone Manually&lt;/h3&gt; &lt;p&gt;One way to guarantee that an object will be cloned exactly how you want it is to manually clone every field in the object. The disadvantage to this method is it's tedious and error prone: if you add or change a field in the class, chances are you will forget to update the Clone method. Note that care must be taken to avoid an infinite loop when cloning referenced objects that may refer back to the original object. Here is a simple example that performs a deep copy:&lt;/p&gt;&lt;blockquote&gt; &lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Person&lt;/span&gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;ICloneable&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; &lt;span style="color: rgb(1, 0, 1);"&gt;Name&lt;/span&gt;;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Person&lt;/span&gt; &lt;span style="color: rgb(1, 0, 1);"&gt;Spouse&lt;/span&gt;;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt; &lt;span style="color: rgb(1, 0, 1);"&gt;Clone&lt;/span&gt;()&lt;br /&gt;   {&lt;br /&gt;       &lt;span style="color: rgb(43, 145, 175);"&gt;Person&lt;/span&gt; &lt;span style="color: rgb(1, 0, 1);"&gt;p&lt;/span&gt; = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Person&lt;/span&gt;();&lt;br /&gt;       &lt;span style="color: rgb(1, 0, 1);"&gt;p&lt;/span&gt;.&lt;span style="color: rgb(1, 0, 1);"&gt;Name&lt;/span&gt; = &lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.&lt;span style="color: rgb(1, 0, 1);"&gt;Name&lt;/span&gt;;&lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (&lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.&lt;span style="color: rgb(1, 0, 1);"&gt;Spouse&lt;/span&gt; != &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;)&lt;br /&gt;           &lt;span style="color: rgb(1, 0, 1);"&gt;p&lt;/span&gt;.&lt;span style="color: rgb(1, 0, 1);"&gt;Spouse&lt;/span&gt; = (&lt;span style="color: rgb(43, 145, 175);"&gt;Person&lt;/span&gt;)&lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.&lt;span style="color: rgb(1, 0, 1);"&gt;Spouse&lt;/span&gt;.&lt;span style="color: rgb(1, 0, 1);"&gt;Clone&lt;/span&gt;();&lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; &lt;span style="color: rgb(1, 0, 1);"&gt;p&lt;/span&gt;;&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt; &lt;/blockquote&gt; &lt;h3&gt;2. Clone with MemberwiseClone&lt;/h3&gt; &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.object.memberwiseclone.aspx" target="_blank"&gt;MemberwiseClone&lt;/a&gt; is a protected method in the Object class that creates a shallow copy by creating a new object, and then copying the nonstatic fields of the current object to the new object. For value-type fields, this performs a bit-by-bit copy. For reference-type fields, the reference is copied but the referred object is not; therefore, the original object and its clone refer to the same object. Note this works for all derived classes, and hence you only need to define the Clone method once in the base class. Here is a simple example:&lt;/p&gt; &lt;blockquote&gt; &lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Person&lt;/span&gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;ICloneable&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; &lt;span style="color: rgb(1, 0, 1);"&gt;Name&lt;/span&gt;;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Person&lt;/span&gt; &lt;span style="color: rgb(1, 0, 1);"&gt;Spouse&lt;/span&gt;;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt; &lt;span style="color: rgb(1, 0, 1);"&gt;Clone&lt;/span&gt;()&lt;br /&gt;   {&lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.&lt;span style="color: rgb(1, 0, 1);"&gt;MemberwiseClone&lt;/span&gt;();&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt; &lt;/blockquote&gt; &lt;h3&gt;3. Clone with Reflection&lt;/h3&gt; &lt;p&gt;Cloning by Reflection uses &lt;a href="http://msdn.microsoft.com/en-us/library/system.activator.createinstance.aspx" target="_blank"&gt;Activator.CreateInstance&lt;/a&gt; to create a new object of the same type, then performs a shallow copy of each field using Reflection. The advantage of this method is it's automated and does not need to be adjusted when members are added or removed from the object. Also, it can be written to provide a deep copy. The disadvantage is it uses Reflection, which is slower and not allowed in &lt;a href="http://www.csharp411.com/executing-code-in-partial-trust-environments/" target="_blank"&gt;partial trust&lt;/a&gt; environments.  &lt;a href="http://www.codeproject.com/KB/cs/cloneimpl_class.aspx" target="_blank"&gt;Sample code&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;4. Clone with Serialization&lt;/h3&gt; &lt;p&gt;One of the easiest ways to clone an object is to serialize it and immediately deserialize it into a new object. Like the Reflection approach, the Serialization approach is automated and does not need to be adjusted when members are added or removed from the object. The disadvantage is that serialization can be slower than other methods including Reflection, and all cloned and referenced objects must be marked &lt;a href="http://msdn.microsoft.com/en-us/library/system.reflection.typeattributes.serializable.aspx" target="_blank"&gt;Serializable&lt;/a&gt;. Also, depending on what type of serialization you use (XML, Soap, Binary), private members may not be cloned as desired. Sample code &lt;a href="http://www.codeproject.com/KB/cs/ObjectCloner.aspx" target="_blank"&gt;here&lt;/a&gt; and &lt;a href="http://www.codeproject.com/KB/cs/CloneManager.aspx" target="_blank"&gt;here&lt;/a&gt; and &lt;a href="http://www.codeproject.com/KB/tips/SerializedObjectCloner.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;h3&gt;5. Clone with IL&lt;/h3&gt; &lt;p&gt;A fringe solution is to use IL (Intermediate Language) to clone objects. This approach creates a DynamicMethod, gets the ILGenerator, emits code in the method, compiles it to a delegate, and executes the delegate. The delegate is cached so that the IL is generated only the first time and not for each subsequent cloning. Although this approach is faster than Reflection, it is difficult to understand and maintain. &lt;a href="http://whizzodev.blogspot.com/2008/03/object-cloning-using-il-in-c.html" target="_blank"&gt;Sample code&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;6. Clone with Extension Methods&lt;/h3&gt; &lt;p&gt;Havard Stranden created a &lt;a href="http://ox.no/posts/extension-methods-for-copying-or-cloning-objects" target="_blank"&gt;custom cloning framework&lt;/a&gt; using extension methods. The framework creates a deep copy of an object and all referenced objects, no matter how complex the object graph is. The disadvantage is this is a custom framework with no source code (Update: source code now included, see comment below), and it cannot copy objects created from private classes without parameterless constructors. Another problem, which is common to all automated deep copy methods, is that deep copying often requires intelligence to handle special cases (such as unmanaged resources) that cannot be easily automated.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-7192432266963170905?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/7192432266963170905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=7192432266963170905&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7192432266963170905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7192432266963170905'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/06/c-object-clone-wars.html' title='C# Object Clone Wars'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-3332647511414480528</id><published>2008-06-11T03:36:00.000-07:00</published><updated>2008-06-11T03:40:10.440-07:00</updated><title type='text'>Google to Deliver GWT 1.5</title><content type='html'>Google is expected to roll out the latest version of the Google Web Toolkit at its developer conference.&lt;br /&gt;&lt;br /&gt;Google will hold its second major software developer conference May 28 and 29, delivering a host of new technology, services and advice for developers around the Google platform.&lt;br /&gt;&lt;br /&gt;Among the new technology expected to be delivered at the event in San Francisco, known as Google I/O, will be a new version of the GWT (Google Web Toolkit), sources said. Google is expected to announce the availability of GWT 1.5 in some capacity.&lt;br /&gt;&lt;br /&gt;The Google Web Toolkit makes it easier for Java developers to write high-performance Asynchronous JavaScript and AJAX (Asynchronous JavaScript and XML) applications in Java.&lt;br /&gt;&lt;br /&gt;“You write your front end in the Java programming language and GWT compiles your source into highly optimized JavaScript,” said a description of GWT on Google’s Web site. “Writing Web apps today is a tedious and error-prone process. You spend 90 percent of your time working around browser quirks, and JavaScript's lack of modularity makes sharing, testing and reusing AJAX components difficult and fragile. It doesn't have to be that way.”&lt;br /&gt;&lt;br /&gt;Although he did not address the issue of a GWT 1.5 announcement, Bruce Johnson, a Google software engineer and tech lead for GWT, said one of the biggest areas where Google has made a lot of progress recently is that “we can fully support the Java 5 system” with support for generics and annotations.&lt;br /&gt;&lt;br /&gt;Another area of major progress is in performance. “With [GWT] 1.5, we’ve added a whole new set of compiler optimizations,” Johnson said. He added that “performance matters so much. With GWT, you can take a nice Java code base and compile it into JavaScript that runs faster than code you can write by hand.”&lt;br /&gt;&lt;br /&gt;In addition, today any important application is going to be written and targeted at the browser, Johnson said. With the advent of AJAX, “you see a focus on higher functionality within the browser. But with JavaScript there are so many browser quirks that it’s like a minefield,” Johnson said.&lt;br /&gt;&lt;br /&gt;He said fighting these browser quirks is not a good use of people’s time, “so we realized a tool needed to be invented. GWT takes the focus of using existing tools.”&lt;br /&gt;&lt;br /&gt;Google also provides API libraries for GWT, including an API that supports its Gears online/offline browser extension. “We provide an out-of-the-box API in low-level JavaScript to provide a nice way to Gears-enable your apps,” he said.&lt;br /&gt;&lt;br /&gt;In the future, areas of focus for GWT include delivering better tools for the platform, Johnson said. GWT currently supports all the major Java IDE (integrated development environments), but one area of focus might be to deliver a plug-in for Eclipse to make it even easier to use the open-source IDE with GWT. Google also plans to continue to drive performance with compiler optimizations and other things, Johnson said.&lt;br /&gt;&lt;br /&gt;Adoption of GWT has been good, Johnson said. “We gauge it by the quality of the apps” being built with GWT, although the technology has had millions of downloads, he said.&lt;br /&gt;&lt;br /&gt;Lombardi Software is one GWT user that has built some compelling technology with the Google tool. Lombardi provides BPM (business process management) technology and services to help customers with their process improvement initiatives. Lombardi products are built on open standards and provide ongoing prioritization, planning, visibility and control of business processes, said Wayne Snell, senior director of marketing at the company.&lt;br /&gt;&lt;br /&gt;Snell said Lombardi is using GWT because “it offers the best platform for our engineers to quickly develop and easily maintain a true enterprise-class Web 2.0 application using standard Java tooling and skills.”&lt;br /&gt;&lt;br /&gt;About two years ago, Lombardi decided to create a new product for the BPM market that combined easy-to-use process modeling and wiki-like collaboration for business users to document processes, Lombardi said. The current market was full of traditional client-server offerings that required the user to install the software locally and set up central servers if they wanted to collaborate with other users.&lt;br /&gt;&lt;br /&gt;“So, we designed the world’s first enterprise-class Web 2.0 process modeling tool—Lombardi Blueprint,” Snell said. “We needed the user’s experience to be fast, highly interactive and easy enough to use by any business user.”&lt;br /&gt;&lt;br /&gt;He said Lombardi looked at four or five different toolkits and even prototyped the mapping and diagramming views in Adobe Flash and the Dojo Toolkit before settling on GWT.&lt;br /&gt;&lt;br /&gt;“The tooling for these other options wasn’t up to par compared to Java IDEs and the effort to maintain straight JavaScript or ActionScript would have become overwhelming over time,” Snell said. “In addition, we required an enterprise-class run-time that could handle several thousand concurrent users collaborating in real-time per server.”&lt;br /&gt;&lt;br /&gt;He said Lombardi developers gain four main benefits from using GWT: support for tooling, hosted mode debugging, cross-compilation and the ability to use existing skills in Java.&lt;br /&gt;&lt;br /&gt;“We can use the excellent modern tools and IDEs available for Java to write code for GWT,” Snell said. “Refactoring operations that would be very difficult to perform directly in JavaScript can be done easily when using GWT because the source code is Java. The tool chain for Java development is fantastic and lots of these tools can be applied to developing code for GWT. In the end, allowing our Java developers to use their tools of choice speeds development compared to alternatives.”&lt;br /&gt;&lt;br /&gt;In addition, regarding cross-compilation, “we can compile the same GWT Java code to both JavaScript and Java byte code and run it both in a browser and on the server,” Snell said.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-3332647511414480528?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/3332647511414480528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=3332647511414480528&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/3332647511414480528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/3332647511414480528'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/06/google-to-deliver-gwt-15.html' title='Google to Deliver GWT 1.5'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-7765703602723475471</id><published>2008-06-10T22:17:00.000-07:00</published><updated>2008-06-10T22:25:03.100-07:00</updated><title type='text'>What's New in the .NET Framework 3.5</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;strong&gt;.NET Compact Framework &lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The .NET Compact Framework version 3.5 expands support for distributed mobile applications by including the Windows Communication Foundation (WCF) technology. It also adds new language features such as LINQ, new APIs based on community feedback, and improves debugging with updated diagnostic tools and features.&lt;br /&gt;For details about these new features and enhancements, see &lt;a id="ctl00_rs1_mainContentContainer_ctl04" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149269_cctl00_rs1_mainContentContainer_ctl04',this);" href="http://msdn.microsoft.com/en-us/library/bb397835.aspx"&gt;What's New in the .NET Compact Framework Version 3.5&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;ASP.NET&lt;/span&gt;&lt;br /&gt;&lt;/strong&gt;&lt;a name="sectionToggle1"&gt;&lt;/a&gt;&lt;br /&gt;The .NET Framework 3.5 includes enhancements in targeted areas of ASP.NET and Visual Web Developer. The most significant advance is improved support for the development of AJAX-enabled Web sites. ASP.NET supports server-centric AJAX development with a set of new server controls and APIs. You can enable an existing ASP.NET 2.0 page for AJAX by adding a &lt;a id="ctl00_rs1_mainContentContainer_ctl16" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149270_cctl00_rs1_mainContentContainer_ctl16',this);" href="http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.aspx"&gt;ScriptManager&lt;/a&gt; control and an &lt;a id="ctl00_rs1_mainContentContainer_ctl17" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149270_cctl00_rs1_mainContentContainer_ctl17',this);" href="http://msdn.microsoft.com/en-us/library/system.web.ui.updatepanel.aspx"&gt;UpdatePanel&lt;/a&gt; control so that the page can update without requiring a full page refresh.&lt;br /&gt;ASP.NET also supports client-centric AJAX development with a new client library called the Microsoft AJAX Library. The Microsoft AJAX Library supports client-centric, object-oriented development, which is browser-independent. By using the library classes in your ECMAScript (JavaScript) you can enable rich UI behaviors without roundtrips to the server. You can mix the degree of server-centric and client-centric development to meet the needs of your application. Furthermore, Visual Web Developer includes improved IntelliSense support for JavaScript and support for the Microsoft AJAX Library.&lt;br /&gt;ASP.NET and Visual Web Developer now support the creation of both ASMX and WCF-based Web services and the seamless use of either implementation from Web pages using Microsoft AJAX Library. Furthermore, server-side application services including forms authentication, roles management, and profiles are now exposed as Web services that can be consumed in WCF-compatible applications, including client script and Window Forms clients. ASP.NET enables all Web-based applications to share these common application services.&lt;br /&gt;Other improvements in ASP.NET include a new data control, &lt;a id="ctl00_rs1_mainContentContainer_ctl18" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149270_cctl00_rs1_mainContentContainer_ctl18',this);" href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.aspx"&gt;ListView&lt;/a&gt;, for displaying data; a new data source control, &lt;a id="ctl00_rs1_mainContentContainer_ctl19" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149270_cctl00_rs1_mainContentContainer_ctl19',this);" href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.linqdatasource.aspx"&gt;LinqDataSource&lt;/a&gt;, that exposes Language Integrated Query (LINQ) to Web developers through the ASP.NET data source control architectures; a new tool, &lt;a id="ctl00_rs1_mainContentContainer_ctl20" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149270_cctl00_rs1_mainContentContainer_ctl20',this);" href="http://msdn.microsoft.com/en-us/library/bb397866.aspx"&gt;ASP.NET Merge Tool (Aspnet_merge.exe)&lt;/a&gt;, for merging precompiled assemblies; and tight integration with IIS 7.0. &lt;a id="ctl00_rs1_mainContentContainer_ctl21" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149270_cctl00_rs1_mainContentContainer_ctl21',this);" href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.aspx"&gt;ListView&lt;/a&gt; is a highly customizable control (using templates and styles) that also supports edit, insert, and delete operations, as well as sorting and paging functionality. The paging functionality for &lt;a id="ctl00_rs1_mainContentContainer_ctl22" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149270_cctl00_rs1_mainContentContainer_ctl22',this);" href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.aspx"&gt;ListView&lt;/a&gt; is provided by a new control called &lt;a id="ctl00_rs1_mainContentContainer_ctl23" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149270_cctl00_rs1_mainContentContainer_ctl23',this);" href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datapager.aspx"&gt;DataPager&lt;/a&gt;. You can use the merge tool to combine assemblies to support a range of deployment and release management scenarios. The integration of ASP.NET and IIS 7.0 includes the ability to use ASP.NET services, such as authentication and caching, for any content type. It also includes the ability to develop server pipeline modules in ASP.NET managed code and supports unified configuration of modules and handlers.&lt;br /&gt;Other improvements in Visual Web Developer include multitargeting support, inclusion of Web Application Projects, a new Design view, new Cascading Style Sheets (CSS) design tools, and support for LINQ for SQL databases. Multitargeting enables you to use Visual Web Developer to target development of Web applications to specific versions of the .NET Framework, including versions 2.0, 3.0, and 3.5.&lt;br /&gt;For more information, see &lt;a id="ctl00_rs1_mainContentContainer_ctl24" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149270_cctl00_rs1_mainContentContainer_ctl24',this);" href="http://msdn.microsoft.com/en-us/library/s57a598e.aspx"&gt;What's New in ASP.NET and Web Development&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Add-Ins and Extensibility&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;a name="sectionToggle2"&gt;&lt;/a&gt;&lt;br /&gt;The System.AddIn.dll assembly in the .NET Framework 3.5 provides powerful and flexible support to developers of extensible applications. It introduces a new architecture and model that helps developers with the initial work to add extensibility to an application and by ensuring that their extensions continue working as the host application changes. The model provides the following features:&lt;br /&gt;Discovery&lt;br /&gt;You can easily find and manage sets of add-ins in multiple locations on a computer with the &lt;a id="ctl00_rs1_mainContentContainer_ctl30" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149271_cctl00_rs1_mainContentContainer_ctl30',this);" href="http://msdn.microsoft.com/en-us/library/system.addin.hosting.addinstore.aspx"&gt;AddInStore&lt;/a&gt; class. You can use this class to search for and obtain information about add-ins by their base types without having to load them.&lt;br /&gt;Activation&lt;br /&gt;After an application chooses an add-in, the &lt;a id="ctl00_rs1_mainContentContainer_ctl31" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149271_cctl00_rs1_mainContentContainer_ctl31',this);" href="http://msdn.microsoft.com/en-us/library/system.addin.hosting.addintoken.aspx"&gt;AddInToken&lt;/a&gt; class makes it easy to activate. Simply choose the isolation and sandboxing level and the system takes care of the rest.&lt;br /&gt;Isolation&lt;br /&gt;There is built-in support for application domains and process isolation of add-ins. The isolation level for each add-in is in the control of the host. The system handles loading application domains and processes and shutting them down after their add-ins have stopped running.&lt;br /&gt;Sandboxing&lt;br /&gt;You can easily configure add-ins with either a default or customized trust level. Support includes Internet, Intranet, Full Trust, and “same-as-host” permission sets, as well as overloads that let the host specify a custom permission set.&lt;br /&gt;UI Composition&lt;br /&gt;The add-in model supports direct composition of Windows Presentation Foundation (WPF) controls that span application domain boundaries. You can easily allow add-ins to contribute directly to the UI of the host while still retaining the benefits of isolation, ability to unload, sandboxing, and versioning.&lt;br /&gt;Versioning&lt;br /&gt;The add-in architecture makes it possible for hosts to introduce new versions of their object model without breaking existing add-ins or impacting the developer experience for new ones.&lt;br /&gt;For more information, see &lt;a id="ctl00_rs1_mainContentContainer_ctl32" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149271_cctl00_rs1_mainContentContainer_ctl32',this);" href="http://msdn.microsoft.com/en-us/library/bb384241.aspx"&gt;Add-ins and Extensibility&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Common Language Runtime&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;a name="sectionToggle3"&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;Collections&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl75" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl75',this);" href="http://msdn.microsoft.com/en-us/library/bb359438.aspx"&gt;HashSet&lt;(Of &lt;(T&gt;)&gt;)&lt;/a&gt; provides high performance set operations to the .NET Framework. A set is a collection that contains no duplicate elements, and whose elements are in no particular order. For more information, see &lt;a id="ctl00_rs1_mainContentContainer_ctl78" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl78',this);" href="http://msdn.microsoft.com/en-us/library/bb397727.aspx"&gt;HashSet Collection Type&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;Diagnostics&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a id="ctl00_rs1_mainContentContainer_ctl79" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl79',this);" href="http://msdn.microsoft.com/en-us/library/system.diagnostics.eventschematracelistener.aspx"&gt;EventSchemaTraceListener&lt;/a&gt; class provides tracing of end-to-end, schema-compliant events. You can use end-to-end tracing for a system that has heterogeneous components that cross thread, &lt;a id="ctl00_rs1_mainContentContainer_ctl80" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl80',this);" href="http://msdn.microsoft.com/en-us/library/system.appdomain.aspx"&gt;AppDomain&lt;/a&gt;, process, and computer boundaries. A standardized event schema (see &lt;a id="ctl00_rs1_mainContentContainer_ctl81" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl81',this);" href="http://go.microsoft.com/fwlink/?LinkId=78955"&gt;Event Representation for Event Consumers&lt;/a&gt;) has been defined to enable tracing across these boundaries. This schema is shared by various tracing technologies, including Windows Vista diagnostics tools such as Event Viewer. The schema also enables the addition of custom, schema-compliant elements.&lt;br /&gt;The &lt;a id="ctl00_rs1_mainContentContainer_ctl82" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl82',this);" href="http://msdn.microsoft.com/en-us/library/system.diagnostics.eventschematracelistener.aspx"&gt;EventSchemaTraceListener&lt;/a&gt; class is tuned for logging performance with implicit support for lock-free tracing.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;I/O and Pipes&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Pipes provide interprocess communication between any processes running on the same computer, or on any other Windows computer within a network. The .NET Framework provides access to two types of pipes: anonymous pipes and named pipes. For more information about pipes, see &lt;a id="ctl00_rs1_mainContentContainer_ctl83" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl83',this);" href="http://msdn.microsoft.com/en-us/library/bb762927.aspx"&gt;Pipes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;Garbage Collection&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;The &lt;a id="ctl00_rs1_mainContentContainer_ctl84" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl84',this);" href="http://msdn.microsoft.com/en-us/library/system.runtime.gcsettings.aspx"&gt;GCSettings&lt;/a&gt; class has a new &lt;a id="ctl00_rs1_mainContentContainer_ctl85" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl85',this);" href="http://msdn.microsoft.com/en-us/library/system.runtime.gcsettings.latencymode.aspx"&gt;LatencyMode&lt;/a&gt; property that you can use to adjust the time that the garbage collector intrudes in your application. You set this property to one of the values of the new &lt;a id="ctl00_rs1_mainContentContainer_ctl86" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl86',this);" href="http://msdn.microsoft.com/en-us/library/system.runtime.gclatencymode.aspx"&gt;GCLatencyMode&lt;/a&gt; enumeration.&lt;br /&gt;The &lt;a id="ctl00_rs1_mainContentContainer_ctl87" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl87',this);" href="http://msdn.microsoft.com/en-us/library/system.gc.aspx"&gt;GC&lt;/a&gt; class has a new &lt;a id="ctl00_rs1_mainContentContainer_ctl88" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl88',this);" href="http://msdn.microsoft.com/en-us/library/bb356724.aspx"&gt;Collect(Int32, GCCollectionMode)&lt;/a&gt; method overload that you can use to adjust the behavior for a forced garbage collection. For example, you can use this overload to specify that the garbage collector should determine whether the current time is optimal to reclaim objects. This overload takes a value from the new &lt;a id="ctl00_rs1_mainContentContainer_ctl89" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl89',this);" href="http://msdn.microsoft.com/en-us/library/bb495757.aspx"&gt;GCCollectionMode&lt;/a&gt; enumeration.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;Reflection and Reflection Emit in Partial Trust&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Assemblies that run with partial trust can now emit code and execute it. Emitted code that calls only public types and methods needs no permissions beyond the permissions demanded by the types and methods that are accessed. The new &lt;a id="ctl00_rs1_mainContentContainer_ctl90" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl90',this);" href="http://msdn.microsoft.com/en-us/library/bb360425.aspx"&gt;DynamicMethod(String, Type, array&lt;type&gt;[]()[])&lt;/a&gt; constructor makes it easy to emit such code.&lt;br /&gt;When emitted code needs to access private data, the new &lt;a id="ctl00_rs1_mainContentContainer_ctl93" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl93',this);" href="http://msdn.microsoft.com/en-us/library/bb348332.aspx"&gt;DynamicMethod(String, Type, array&lt;type&gt;[]()[], Boolean)&lt;/a&gt; constructor allows restricted access. The host must grant &lt;a id="ctl00_rs1_mainContentContainer_ctl96" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl96',this);" href="http://msdn.microsoft.com/en-us/library/system.security.permissions.reflectionpermission.aspx"&gt;ReflectionPermission&lt;/a&gt; with the new &lt;a id="ctl00_rs1_mainContentContainer_ctl97" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl97',this);" href="http://msdn.microsoft.com/en-us/library/system.security.permissions.reflectionpermissionflag.restrictedmemberaccess.aspx"&gt;RestrictedMemberAccess&lt;/a&gt; flag to enable this feature, which gives emitted code the ability to access private data only for types and methods in assemblies with equal or lesser trust levels. See &lt;a id="ctl00_rs1_mainContentContainer_ctl98" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl98',this);" href="http://msdn.microsoft.com/en-us/library/bb384237.aspx"&gt;Walkthrough: Emitting Code in Partial Trust Scenarios&lt;/a&gt;.&lt;br /&gt;For reflection, a host grant of &lt;a id="ctl00_rs1_mainContentContainer_ctl99" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl99',this);" href="http://msdn.microsoft.com/en-us/library/system.security.permissions.reflectionpermissionflag.restrictedmemberaccess.aspx"&gt;RestrictedMemberAccess&lt;/a&gt; similarly allows restricted use of methods that access private properties, call private methods, and so on, but only for target assemblies with equal or lesser trust levels.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;Better Reader/Writer Lock&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;The new &lt;a id="ctl00_rs1_mainContentContainer_ctl100" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl100',this);" href="http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx"&gt;ReaderWriterLockSlim&lt;/a&gt; class provides performance that is significantly better than &lt;a id="ctl00_rs1_mainContentContainer_ctl101" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl101',this);" href="http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlock.aspx"&gt;ReaderWriterLock&lt;/a&gt;, and comparable with the lock statement (SyncLock in Visual Basic). Transitions between lock states have been simplified to make programming easier and to reduce the chances of deadlocks. The new class supports recursion to simplify migration from lock and from &lt;a id="ctl00_rs1_mainContentContainer_ctl102" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl102',this);" href="http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlock.aspx"&gt;ReaderWriterLock&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;ThreadPool Performance Enhancements&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Throughput for the dispatch of work items and I/O tasks in the managed thread pool is significantly improved. Dispatch is now handled in managed code, without transitions to unmanaged code and with fewer locks. The use of &lt;a id="ctl00_rs1_mainContentContainer_ctl103" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl103',this);" href="http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx"&gt;ThreadPool&lt;/a&gt; is recommended over application-specific thread pool implementations.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Time Zone Improvements&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Two new types, &lt;a id="ctl00_rs1_mainContentContainer_ctl104" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl104',this);" href="http://msdn.microsoft.com/en-us/library/system.datetimeoffset.aspx"&gt;DateTimeOffset&lt;/a&gt; and &lt;a id="ctl00_rs1_mainContentContainer_ctl105" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl105',this);" href="http://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx"&gt;TimeZoneInfo&lt;/a&gt;, improve support for time zones and make it easier to develop applications that work with dates and times in different time zones. For a discussion of which type to use in particular situations, see &lt;a id="ctl00_rs1_mainContentContainer_ctl106" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl106',this);" href="http://msdn.microsoft.com/en-us/library/bb384267.aspx"&gt;Choosing Between DateTime, DateTimeOffset, and TimeZoneInfo&lt;/a&gt;.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;TimeZoneInfo&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The new &lt;a id="ctl00_rs1_mainContentContainer_ctl107" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl107',this);" href="http://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx"&gt;TimeZoneInfo&lt;/a&gt; class largely supplants the existing &lt;a id="ctl00_rs1_mainContentContainer_ctl108" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl108',this);" href="http://msdn.microsoft.com/en-us/library/system.timezone.aspx"&gt;TimeZone&lt;/a&gt; class. You can use &lt;a id="ctl00_rs1_mainContentContainer_ctl109" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl109',this);" href="http://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx"&gt;TimeZoneInfo&lt;/a&gt; to retrieve any time zone defined in the registry, rather than just the local time zone and Coordinated Universal Time (UTC). You can also use this class to define custom time zones, to serialize and deserialize custom time zone data, and to convert times between time zones. For more information about developing applications that use the &lt;a id="ctl00_rs1_mainContentContainer_ctl110" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl110',this);" href="http://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx"&gt;TimeZoneInfo&lt;/a&gt; class, see &lt;a id="ctl00_rs1_mainContentContainer_ctl111" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl111',this);" href="http://msdn.microsoft.com/en-us/library/bb384268.aspx"&gt;Times and Time Zones&lt;/a&gt;.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;DateTimeOffset&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;The new &lt;a id="ctl00_rs1_mainContentContainer_ctl112" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl112',this);" href="http://msdn.microsoft.com/en-us/library/system.datetimeoffset.aspx"&gt;DateTimeOffset&lt;/a&gt; structure extends the &lt;a id="ctl00_rs1_mainContentContainer_ctl113" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl113',this);" href="http://msdn.microsoft.com/en-us/library/system.datetime.aspx"&gt;DateTime&lt;/a&gt; structure to make working with times across time zones easier. The &lt;a id="ctl00_rs1_mainContentContainer_ctl114" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe149272_cctl00_rs1_mainContentContainer_ctl114',this);" href="http://msdn.microsoft.com/en-us/library/system.datetimeoffset.aspx"&gt;DateTimeOffset&lt;/a&gt; structure stores date and time information as a UTC date and time together with an offset value that indicates how much the time differs from UTC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-7765703602723475471?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/7765703602723475471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=7765703602723475471&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7765703602723475471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7765703602723475471'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/06/whats-new-in-net-framework-35.html' title='What&apos;s New in the .NET Framework 3.5'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-6142213135292413945</id><published>2008-06-08T02:48:00.000-07:00</published><updated>2008-06-08T03:11:17.539-07:00</updated><title type='text'>SQL Server 2005 SP1 Users Face Vista, Longhorn Glitches</title><content type='html'>&lt;span class="txt"&gt; Microsoft SQL Server 2005 customers will have to upgrade from Service Pack 1 to an as-yet unavailable Service Pack 2 before their applications will be able to work with Vista or the Longhorn server.Microsoft's corporate customers may have another reason to take their time upgrading to Vista. The latest one is that the current version, Microsoft's SQL Server 2005 Service Pack 1, released in April 2006, won't work with Vista or with the related Longhorn server. &lt;p&gt;These two operating systems will only support &lt;a rel="nofollow" href="http://www.microsoft.com/sql/howtobuy/sqlonvista.mspx" target="_blank"&gt;SQL Server 2005 SP2 &lt;/a&gt; "or later when it becomes available," according to Microsoft's SQL Server support Web pages. But there is no indication on these sites of how soon it will deliver SP2 or whether it will deliver the service pack at about the same time Vista and Longhorn are released.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="txt"&gt;&lt;p&gt;Microsoft is also reminding customers that even older versions of the database, SQL Server 7.0 or 6.5, won't run on Vista or Longhorn and it might be a good time to update to SQL Server 2005 because it was "designed to take advantage of the upcoming security and performance enhancements" in the new operating systems. &lt;/p&gt;&lt;p&gt;Microsoft is urging customers using earlier versions of the database to obtain a trial version of SQL Server 2005 and Vista Beta 2 to test their applications to resolve any incompatibilities. &lt;/p&gt;&lt;p&gt;&lt;ziffsection id="27172"&gt;&lt;ziffimage id="118972" align="right" notable="" nopopup="" nocaption=""&gt;&lt;/ziffimage&gt;  &lt;/ziffsection&gt;&lt;/p&gt;&lt;p&gt;Furthermore, MDSE (Microsoft SQL Server Desktop Engine) 1.0 and 2000, free bare-bones versions of the database engine, also won't work with Vista. &lt;/p&gt;&lt;p&gt;Microsoft is telling customers that they should switch to the SQL Server 2005 Express Edition to replace MSDE if they plan to build a new application and distribute it with a database. &lt;/p&gt;&lt;p&gt;It's apparent that Microsoft is fine-tuning the marketing and distribution of virtually all the versions database product. This includes the mobile edition, which until recently has been known as SQL Server Everywhere. &lt;/p&gt;&lt;p&gt;The new name is SQL Server Compact Edition, as confirmed on the MSDN blog of Microsoft product manager Steve Lasker.   &lt;/p&gt;&lt;p&gt;He wrote on Oct. 31 that the company is going back to an earlier name for the product because "compact" reflects its true nature. &lt;/p&gt;&lt;p&gt;"By leveraging an existing name, it allowed us to quickly turn around the name change and meet our commitment to ship in '06," Lasker wrote. &lt;/p&gt;&lt;p&gt;He also suggested the name change would help clear up any potential market confusion between the SQL Server Compact and Express editions. &lt;/p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-6142213135292413945?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/6142213135292413945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=6142213135292413945&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/6142213135292413945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/6142213135292413945'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/06/sql-server-2005-sp1-users-face-vista.html' title='SQL Server 2005 SP1 Users Face Vista, Longhorn Glitches'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-1515913188329109780</id><published>2008-06-06T03:54:00.001-07:00</published><updated>2008-06-06T03:54:51.261-07:00</updated><title type='text'>C# Class Wrapping</title><content type='html'>public class Class1&lt;br /&gt;{&lt;br /&gt;public Class1()&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;public int GetResult(ref string parameter1, int parameter2)&lt;br /&gt;{&lt;br /&gt;parameter1 = "Class1 did this";&lt;br /&gt;return 1011;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;public class Class2&lt;br /&gt;{&lt;br /&gt;public Class2()&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;public int GetResult(ref string parameter1, int parameter2)&lt;br /&gt;{&lt;br /&gt;parameter1 = "Class2 did this";&lt;br /&gt;return 2048;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;They don't do much, but the "trick" is to call the right one through her name, not actually knowing which one is it. // Replace "Remote1" with Name of the assembly where your class definitions are&lt;br /&gt;string sClassName = "Remote1." + textBox1.Text;&lt;br /&gt;System.Runtime.Remoting.ObjectHandle ObjHandle; // with this we "wrap" the right class&lt;br /&gt;object ObjUnwrapped;&lt;br /&gt;System.Reflection.MethodInfo PerformMethod;&lt;br /&gt;object[] MethodParameters = new object[2]; // array of parameters&lt;br /&gt;MethodParameters[0] = " "; // since it's ref string, we have to give it some value&lt;br /&gt;MethodParameters[1] = 0; // integer&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;ObjHandle = Activator.CreateInstance("Remote1", sClassName);&lt;br /&gt;ObjUnwrapped = ObjHandle.Unwrap(); // We "Unwrap the object&lt;br /&gt;PerformMethod = ObjUnwrapped.GetType().GetMethod("GetResult"); // This is method we want&lt;br /&gt;int Result = Convert.ToInt32(PerformMethod.Invoke( ObjUnwrapped, MethodParameters));&lt;br /&gt;}&lt;br /&gt;catch (Exception ex)&lt;br /&gt;{&lt;br /&gt;// if anything goes wrong, we end up in here&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-1515913188329109780?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/1515913188329109780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=1515913188329109780&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/1515913188329109780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/1515913188329109780'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/06/c-class-wrapping.html' title='C# Class Wrapping'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-3737990562897258733</id><published>2008-06-03T21:22:00.000-07:00</published><updated>2008-06-03T21:32:46.146-07:00</updated><title type='text'>Great Computer Programming Quotes</title><content type='html'>&lt;strong&gt;&lt;span style="font-family:arial;"&gt;Computers:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;"Computers are useless. They can only give you answers."&lt;br /&gt;(Pablo Picasso)&lt;br /&gt;&lt;br /&gt;"Computers are like bikinis. They save people a lot of guesswork."&lt;br /&gt;(Sam Ewing)&lt;br /&gt;&lt;br /&gt;"They have computers, and they may have other weapons of mass destruction."&lt;br /&gt;(Janet Reno)&lt;br /&gt;&lt;br /&gt;"That's what's cool about working with computers. They don't argue, they remember everything, and they don't drink all your beer."&lt;br /&gt;(Paul Leary)&lt;br /&gt;&lt;br /&gt;"If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside."&lt;br /&gt;(Robert X. Cringely)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:arial;"&gt;Computer Intelligence:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;"Computers are getting smarter all the time. Scientists tell us that soon they will be able to talk to us. (And by 'they', I mean 'computers'. I doubt scientists will ever be able to talk to us.)"&lt;br /&gt;(Dave Barry)&lt;br /&gt;&lt;br /&gt;"I've noticed lately that the paranoid fear of computers becoming intelligent and taking over the world has almost entirely disappeared from the common culture. Near as I can tell, this coincides with the release of MS-DOS."&lt;br /&gt;(Larry DeLuca)&lt;br /&gt;&lt;br /&gt;"The question of whether computers can think is like the question of whether submarines can swim."&lt;br /&gt;(Edsger W. Dijkstra)&lt;br /&gt;&lt;br /&gt;"It's ridiculous to live 100 years and only be able to remember 30 million bytes. You know, less than a compact disc. The human condition is really becoming more obsolete every minute."&lt;br /&gt;(Marvin Minsky)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:arial;"&gt;Trust:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;"The city's central computer told you? R2D2, you know better than to trust a strange computer!"&lt;br /&gt;(C3PO)&lt;br /&gt;&lt;br /&gt;"Never trust a computer you can't throw out a window."&lt;br /&gt;(Steve Wozniak)&lt;br /&gt;&lt;br /&gt;Software:&lt;br /&gt;&lt;br /&gt;"Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves."&lt;br /&gt;(Alan Kay)&lt;br /&gt;&lt;br /&gt;"I've finally learned what 'upward compatible' means. It means we get to keep all our old mistakes."&lt;br /&gt;(Dennie van Tassel)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:arial;"&gt;Operating Systems:&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;"There are two major products that come out of Berkeley: LSD and UNIX. We don't believe this to be a coincidence."&lt;br /&gt;(Jeremy S. Anderson)&lt;br /&gt;&lt;br /&gt;"19 Jan 2038 at 3:14:07 AM"&lt;br /&gt;(End of the word according to Unix–2^32 seconds after January 1, 1970)&lt;br /&gt;&lt;br /&gt;"Every operating system out there is about equal… We all suck."&lt;br /&gt;(Microsoft senior vice president Brian Valentine describing the state of the art in OS security, 2003)&lt;br /&gt;&lt;br /&gt;"Microsoft has a new version out, Windows XP, which according to everybody is the 'most reliable Windows ever.' To me, this is like saying that asparagus is 'the most articulate vegetable ever.' "&lt;br /&gt;(Dave Barry)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:arial;"&gt;Internet:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;"The Internet? Is that thing still around?"&lt;br /&gt;(Homer Simpson)&lt;br /&gt;&lt;br /&gt;"The Web is like a dominatrix. Everywhere I turn, I see little buttons ordering me to Submit."&lt;br /&gt;(Nytwind)&lt;br /&gt;&lt;br /&gt;"Come to think of it, there are already a million monkeys on a million typewriters, and Usenet is nothing like Shakespeare."&lt;br /&gt;(Blair Houghton)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:arial;"&gt;Software Industry:&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;"The most amazing achievement of the computer software industry is its continuing cancellation of the steady and staggering gains made by the computer hardware industry."&lt;br /&gt;(Henry Petroski)&lt;br /&gt;&lt;br /&gt;"True innovation often comes from the small startup who is lean enough to launch a market but lacks the heft to own it."&lt;br /&gt;(Timm Martin)&lt;br /&gt;&lt;br /&gt;"It has been said that the great scientific disciplines are examples of giants standing on the shoulders of other giants. It has also been said that the software industry is an example of midgets standing on the toes of other midgets."&lt;br /&gt;(Alan Cooper)&lt;br /&gt;&lt;br /&gt;"It is not about bits, bytes and protocols, but profits, losses and margins."&lt;br /&gt;(Lou Gerstner)&lt;br /&gt;&lt;br /&gt;"We are Microsoft. Resistance Is Futile. You Will Be Assimilated."&lt;br /&gt;(Bumper sticker)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:arial;"&gt;Hardware:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;"Hardware: The parts of a computer system that can be kicked."&lt;br /&gt;(Jeff Pesis)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:arial;"&gt;Programmers:&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;"Programmers are in a race with the Universe to create bigger and better idiot-proof programs, while the Universe is trying to create bigger and better idiots. So far the Universe is winning."&lt;br /&gt;(Rich Cook)&lt;br /&gt;&lt;br /&gt;"Most of you are familiar with the virtues of a programmer. There are three, of course: laziness, impatience, and hubris."&lt;br /&gt;(Larry Wall)&lt;br /&gt;&lt;br /&gt;"The trouble with programmers is that you can never tell what a programmer is doing until it's too late."&lt;br /&gt;(Seymour Cray)&lt;br /&gt;&lt;br /&gt;"That's the thing about people who think they hate computers. What they really hate is lousy programmers."&lt;br /&gt;(Larry Niven)&lt;br /&gt;&lt;br /&gt;"For a long time it puzzled me how something so expensive, so leading edge, could be so useless. And then it occurred to me that a computer is a stupid machine with the ability to do incredibly smart things, while computer programmers are smart people with the ability to do incredibly stupid things. They are, in short, a perfect match."&lt;br /&gt;(Bill Bryson)&lt;br /&gt;&lt;br /&gt;"Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter."&lt;br /&gt;(Eric Raymond)&lt;br /&gt;&lt;br /&gt;"A programmer is a person who passes as an exacting expert on the basis of being able to turn out, after innumerable punching, an infinite series of incomprehensive answers calculated with micrometric precisions from vague assumptions based on debatable figures taken from inconclusive documents and carried out on instruments of problematical accuracy by persons of dubious reliability and questionable mentality for the avowed purpose of annoying and confounding a hopelessly defenseless department that was unfortunate enough to ask for the information in the first place."&lt;br /&gt;(IEEE Grid newsmagazine)&lt;br /&gt;&lt;br /&gt;"A hacker on a roll may be able to produce–in a period of a few months–something that a small development group (say, 7-8 people) would have a hard time getting together over a year. IBM used to report that certain programmers might be as much as 100 times as productive as other workers, or more."&lt;br /&gt;(Peter Seebach)&lt;br /&gt;&lt;br /&gt;"The best programmers are not marginally better than merely good ones. They are an order-of-magnitude better, measured by whatever standard: conceptual creativity, speed, ingenuity of design, or problem-solving ability."&lt;br /&gt;(Randall E. Stross)&lt;br /&gt;&lt;br /&gt;"A great lathe operator commands several times the wage of an average lathe operator, but a great writer of software code is worth 10,000 times the price of an average software writer."&lt;br /&gt;(Bill Gates)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:arial;"&gt;Programming:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;"Don't worry if it doesn't work right. If everything did, you'd be out of a job."&lt;br /&gt;(Mosher's Law of Software Engineering)&lt;br /&gt;&lt;br /&gt;"Measuring programming progress by lines of code is like measuring aircraft building progress by weight."&lt;br /&gt;(Bill Gates)&lt;br /&gt;&lt;br /&gt;"Writing code has a place in the human hierarchy worth somewhere above grave robbing and beneath managing."&lt;br /&gt;(Gerald Weinberg)&lt;br /&gt;&lt;br /&gt;"First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack."&lt;br /&gt;(George Carrette)&lt;br /&gt;&lt;br /&gt;"First, solve the problem. Then, write the code."&lt;br /&gt;(John Johnson)&lt;br /&gt;&lt;br /&gt;"Optimism is an occupational hazard of programming; feedback is the treatment."&lt;br /&gt;(Kent Beck)&lt;br /&gt;&lt;br /&gt;"To iterate is human, to recurse divine."&lt;br /&gt;(L. Peter Deutsch)&lt;br /&gt;&lt;br /&gt;"The best thing about a boolean is even if you are wrong, you are only off by a bit."&lt;br /&gt;(Anonymous)&lt;br /&gt;&lt;br /&gt;"Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration."&lt;br /&gt;(Stan Kelly-Bootle)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:arial;"&gt;Users:&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;"Any fool can use a computer. Many do."&lt;br /&gt;(Ted Nelson)&lt;br /&gt;&lt;br /&gt;"There are only two industries that refer to their customers as 'users'."&lt;br /&gt;(Edward Tufte)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-3737990562897258733?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/3737990562897258733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=3737990562897258733&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/3737990562897258733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/3737990562897258733'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/06/great-computer-programming-quotes.html' title='Great Computer Programming Quotes'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-6203043900721256654</id><published>2008-06-01T03:29:00.000-07:00</published><updated>2008-06-07T03:31:19.474-07:00</updated><title type='text'>Windows Communication Foundation Service (WCF )</title><content type='html'>&lt;span class="NormalText"&gt;&lt;span id="ctl00_ContentPlaceHolder1_BlogDetail1_LabelDescription"&gt;Windows Communication Foundation or WCF, is a robust programming model used to build applications that inter-communicate running in different platform and different system.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div id="div2"&gt;&lt;span id="ctl00_ContentPlaceHolder1_BlogDetail1_LabelBlogDetail"&gt;&lt;p&gt;&lt;u&gt;&lt;span style="font-family:times new roman, times, serif;font-size:130%;color:#000000;"&gt;Why WCF ?&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;color:#000000;"&gt;Today, when we build distributed applications, we have number of programming models. In present .net 2.0 we can use following concept to build distributed applications.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;1. ASP.NET Web Services (ASMX)&lt;br /&gt;2. Web Services Enhancements (WSE)&lt;br /&gt;3. MSMQ / System. Messaging&lt;br /&gt;4. Enterprise Services&lt;br /&gt;5. Remoting&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;Each programming model has a different set of APIs, different feature sets, and a different core set of scenarios like,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;color:#000000;"&gt;&lt;strong&gt;1. ASP.NET Web Services (ASMX)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;Our current Web services stack provides basic Web services support and interoperability with Web services running on non-Microsoft platform.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:100%;color:#000000;"&gt;2. Web Services Enhancements (WSE)&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;A supported extension to the .NET Framework that provides end-to-end standards-based security for Web services.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;strong&gt;&lt;span style="font-size:100%;"&gt;3. System. Messaging&lt;/span&gt;&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;This namespace in the .NET Framework provides managed APIs to MSMQ, enabling developers to build asynchronous reliable distributed applications.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:100%;color:#000000;"&gt;4. Enterprise Services&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;Provided through the System.EnterpriseServices namespace in the .NET Framework, Enterprise Services (or “ES”) provides managed APIs to COM+. COM+ provides component-based programming for doing enterprise critical functionality such as transaction.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;strong&gt;&lt;span style="font-size:100%;"&gt;5. Remoting&lt;/span&gt;&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;Provided through the System.Remoting namespace in the .NET Framework, .NET Remoting exposes the CLR type system remotely and provides location transparency for objects.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;strong&gt;Features Table 1&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;table style="WIDTH: 540pt; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" width="717" border="0" str=""&gt;&lt;colgroup&gt;&lt;col style="WIDTH: 122pt" width="162"&gt;&lt;col style="WIDTH: 83pt" width="110"&gt;&lt;col style="WIDTH: 80pt" width="106"&gt;&lt;col style="WIDTH: 86pt" width="114"&gt;&lt;col style="WIDTH: 81pt" width="108"&gt;&lt;col style="WIDTH: 88pt" width="117"&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="HEIGHT: 12.75pt" height="17"&gt;&lt;td class="xl22" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; WIDTH: 122pt; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75ptcolor:black;" width="162" height="17" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;Functionalities&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl23" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 1pt solid; BORDER-LEFT: windowtext; WIDTH: 83pt; BORDER-BOTTOM: windowtext 0.5pt solidcolor:black;" width="110" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;Web Service&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl23" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 1pt solid; BORDER-LEFT: windowtext; WIDTH: 80pt; BORDER-BOTTOM: windowtext 0.5pt solidcolor:black;" width="106" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;WSE&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl23" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 1pt solid; BORDER-LEFT: windowtext; WIDTH: 86pt; BORDER-BOTTOM: windowtext 0.5pt solidcolor:black;" width="114" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;MSMQ&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl23" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 1pt solid; BORDER-LEFT: windowtext; WIDTH: 81pt; BORDER-BOTTOM: windowtext 0.5pt solidcolor:black;" width="108" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;ES&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl24" style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext 1pt solid; BORDER-LEFT: windowtext; WIDTH: 88pt; BORDER-BOTTOM: windowtext 0.5pt solidcolor:black;" width="117" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;Remoting&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 12.75pt" height="17"&gt;&lt;td class="xl25" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 1pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: rgb(51,51,153)" height="17"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;Inter Operability&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl27" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solidcolor:green;" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;YES&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl27" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solidcolor:green;" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;YES&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl31" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: rgb(204,255,255)"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ff0000;"&gt;&lt;strong&gt;NO&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl31" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: rgb(204,255,255)"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ff0000;"&gt;&lt;strong&gt;NO&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl33" style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: rgb(204,255,255)"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ff0000;"&gt;&lt;strong&gt;NO&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 12.75pt" height="17"&gt;&lt;td class="xl25" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 1pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: rgb(51,51,153)" height="17"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;Security(End to End)&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl31" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: rgb(204,255,255)"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ff0000;"&gt;&lt;strong&gt;NO&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl27" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solidcolor:green;" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;YES&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl27" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solidcolor:green;" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;YES&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl27" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solidcolor:green;" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;YES&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl28" style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solidcolor:green;" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;YES&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 12.75pt" height="17"&gt;&lt;td class="xl25" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 1pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: rgb(51,51,153)" height="17" str="Reliable "&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#ffffff;"&gt;&lt;strong&gt;&lt;span style="font-family:Arial;"&gt;Reliable&lt;span style="font-size:+0;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl31" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: rgb(204,255,255)"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ff0000;"&gt;&lt;strong&gt;NO&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl31" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: rgb(204,255,255)"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ff0000;"&gt;&lt;strong&gt;NO&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl27" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solidcolor:green;" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;YES&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl31" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: rgb(204,255,255)"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ff0000;"&gt;&lt;strong&gt;NO&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl33" style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: rgb(204,255,255)"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ff0000;"&gt;&lt;strong&gt;NO&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 12.75pt" height="17"&gt;&lt;td class="xl25" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 1pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: rgb(51,51,153)" height="17"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;Transaction&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl31" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: rgb(204,255,255)"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ff0000;"&gt;&lt;strong&gt;NO&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl31" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: rgb(204,255,255)"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ff0000;"&gt;&lt;strong&gt;NO&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl31" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: rgb(204,255,255)"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ff0000;"&gt;&lt;strong&gt;NO&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl27" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solidcolor:green;" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;YES&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl28" style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solidcolor:green;" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;YES&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 13.5pt" height="18"&gt;&lt;td class="xl26" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 1pt solid; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 13.5pt; BACKGROUND-COLOR: rgb(51,51,153)" height="18"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl32" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: rgb(204,255,255)"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ff0000;"&gt;&lt;strong&gt;NO&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl32" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: rgb(204,255,255)"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ff0000;"&gt;&lt;strong&gt;NO&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl30" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solidcolor:green;" &gt;&lt;strong&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;YES&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td class="xl30" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solidcolor:green;" &gt;&lt;strong&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;YES&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td class="xl29" style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solidcolor:green;" &gt;&lt;strong&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;YES&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;While these technologies provide a wide range of functionality, they exist in silos – isolated from one another. This creates an impedance mismatch across the technologies hindering our ability as developers to “compose” or combine functionality across them. For example:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;We want to use .NET Remoting for its rich extensibility model, but we want an ES-style transaction to flow. How do we do this? Or we want to use ASMX for its interoperability, but you want to provide direct reliable messaging guarantees. How is this accomplished?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;Today, scenarios like these that involve the combination of functionality across these technologies are more of a challenge than it should be. They often involve hundreds and sometimes thousands of lines of code to accomplish. With WCF, the challenges of silo programming models become a thing of the past. WCF provides you with a unified programming model that brings together the best aspects of existing Microsoft technologies. What this means is that, with WCF, you will no longer need to wonder “which technology do I use (ASMX, Remoting, etc)” when building a connected system. All of the application-to-application and intra-application communication for your connected will be handled by WCF. This unified programming model is exposed to you through the System. Service Model namespace. Since WCF provides all of the features of these existing Microsoft technologies, WCF supports all of the scenarios currently supported by these technologies.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;strong&gt;Features Table 2&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;table style="WIDTH: 205pt; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" width="272" border="0" str=""&gt;&lt;colgroup&gt;&lt;col style="WIDTH: 122pt" width="162"&gt;&lt;col style="WIDTH: 83pt" width="110"&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="HEIGHT: 12.75pt" height="17"&gt;&lt;td class="xl24" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; WIDTH: 122pt; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75ptcolor:black;" width="162" height="17" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;Functionalities&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl25" style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext 1pt solid; BORDER-LEFT: windowtext; WIDTH: 83pt; BORDER-BOTTOM: windowtext 0.5pt solidcolor:black;" width="110" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;WCF&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 12.75pt" height="17"&gt;&lt;td class="xl26" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 1pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: rgb(51,51,153)" height="17"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;Inter Operability&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl28" style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solidcolor:green;" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;YES&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 12.75pt" height="17"&gt;&lt;td class="xl26" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 1pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: rgb(51,51,153)" height="17"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;Security(End to End)&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl28" style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solidcolor:green;" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;YES&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 12.75pt" height="17"&gt;&lt;td class="xl26" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 1pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: rgb(51,51,153)" height="17" str="Reliable "&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#ffffff;"&gt;&lt;strong&gt;&lt;span style="font-family:Arial;"&gt;Reliable&lt;span style="font-size:+0;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl28" style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solidcolor:green;" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;YES&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 12.75pt" height="17"&gt;&lt;td class="xl26" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 1pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 12.75pt; BACKGROUND-COLOR: rgb(51,51,153)" height="17"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;Transaction&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl28" style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solidcolor:green;" &gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;YES&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 13.5pt" height="18"&gt;&lt;td class="xl27" style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 1pt solid; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 13.5pt; BACKGROUND-COLOR: rgb(51,51,153)" height="18"&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl29" style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solidcolor:green;" &gt;&lt;strong&gt;&lt;span style="font-family:Arial;font-size:85%;color:#ffffff;"&gt;YES&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;In addition, WCF enables new scenarios that are currently not possible or very hard to implement with existing technologies because WCF allows you to compose functionality across these existing technologies. For example, this means that you’ll be able to achieve secure, reliable, transacted Web services by combining/composing the functionality that previously existed in silos.&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-6203043900721256654?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/6203043900721256654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=6203043900721256654&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/6203043900721256654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/6203043900721256654'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/06/windows-communication-foundation.html' title='Windows Communication Foundation Service (WCF )'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-4285934894222122338</id><published>2008-05-30T04:19:00.000-07:00</published><updated>2008-05-30T04:21:43.993-07:00</updated><title type='text'>10 Things You Can Do To Motivate Your Team</title><content type='html'>&lt;h3&gt;#1: Believe in your team’s objectives&lt;/h3&gt; &lt;p&gt;Do you believe in what you want the team to accomplish? Do you think your goals are realistic? If not, rethink your position, because your team will sense your uncertainty. You may say the right words, but your body language and overall demeanor will give you away. On the other hand, if you truly are dedicated and believe in your goals, your team will sense it and will react accordingly.&lt;/p&gt; &lt;h3&gt;#2: Model the behavior you want from the team&lt;/h3&gt; &lt;p&gt;Don’t be a hypocrite — lead by example. You want your team to interact courteously and professionally with others, but do you do so yourself? If you ask them to put in extra hours, are you there along with them? Country artist &lt;a href="http://www.rodneyatkins.com/main/" target="_blank"&gt;Rodney Atkins&lt;/a&gt; sings about how one day, his four-year-old son said “a four-letter word,” but how later that night, all by himself he got on his knees and prayed. What did the son say when asked about how he learned to do both things? “I’ve been watchin’ you.”&lt;/p&gt; &lt;h3&gt;#3: Keep a positive attitude&lt;/h3&gt;&lt;p&gt;Don’t laugh. If you have these attitudes, how do you think your team will react? If you model a negative attitude, your team will pick it up. I know it sounds trite, but try to stay upbeat.&lt;/p&gt; &lt;p&gt;Doing so doesn’t mean being unrealistic. It does mean, however, that you try to look at the glass as being half full rather than half empty. Instead of saying, for example, “This project will never succeed because of issues 1, 2, and 3,” consider saying, “If we want this project to succeed, it’s critical that we resolve issues 1, 2, and 3.”&lt;/p&gt; &lt;h3&gt;#4: Be clear about your goals&lt;/h3&gt; &lt;p&gt;It’s hard for your team to accomplish its goals if those goals are unclear or unknown to them. More important, it’s hard to get them even to agree with those goals if they don’t know what they are. Make sure your team knows what you are expecting of them. If you can quantify your goals so that you can measure how well you did compared to what you expected, so much the better.&lt;/p&gt; &lt;h3&gt;#5: Get feedback from the team members&lt;/h3&gt; &lt;p&gt;Unless you hear from your team members, you may have little or no idea of how effective or clear you are. Few of us enjoy hearing bad news or criticism, but if there’s a problem in what we’re doing, it’s important that we hear it.&lt;/p&gt; &lt;p&gt;When discussing issues with the team, don’t shoot the messenger. When listening to a team member, try to separate the message and issue from the person. Similarly, when someone is offering suggestions or discussing issues, try to separate your own self and ego from the discussion. If you do shoot the messenger, all you will have done is make your team even more reluctant to talk frankly with you in the future.&lt;/p&gt; &lt;h3&gt;#6: Set expectations&lt;/h3&gt; &lt;p&gt;Make sure your team knows what to expect of you. If they do, there’s less chance that they’ll be unpleasantly surprised or disappointed.&lt;/p&gt; &lt;p&gt;Suppose, from the previous point, you had a discussion with a team member, who made a few suggestions. Some of them are workable (so that you could act on them), but others aren’t. Before having this discussion, it would be good to let your team know that while you will listen to them, you may or may not adopt all of their suggestions. One would hope they’d realize this already, but it’s best to be explicit. Furthermore, if you &lt;em&gt;do&lt;/em&gt; adopt a suggestion, make sure everyone knows about it.&lt;/p&gt; &lt;h3&gt;#7: Avoid mixed messages&lt;/h3&gt; &lt;p&gt;Consultant and trainer Robert Mager, in his book &lt;em&gt;&lt;a href="http://www.amazon.com/Analyzing-Performance-Problems-Really-Wanna-How/dp/1879618176/ref=sr_1_14?ie=UTF8&amp;amp;s=books&amp;amp;qid=1211304585&amp;amp;sr=8-14" target="_blank"&gt;Analyzing Performance Problems&lt;/a&gt;&lt;/em&gt;, discusses the uses of consequences and rewards in shaping human behavior. Specifically, he points out that to encourage desirable behavior, there must be positive rewards for it. Conversely, to discourage undesirable behavior, there must be consequences that result from it. Believe it or not, some people mix up these two points. Have you, as a parent, ever said to your child, “Any time you have problem, you can talk to Mommy or Daddy”? What happens when they do? You become irritated and yell at them, “Come back later! Can’t you see I’m busy?!” If you send similar mixed messages to your staff, you will make it harder for them to act the way you want.&lt;/p&gt; &lt;h3&gt;#8: Know the difference between exhorting and belittling&lt;/h3&gt; &lt;p&gt;It’s fine and good for you to want greater and higher quality results from your team. However, be aware of the line between exhorting someone to do better and belittling them because they aren’t right now. The latter might work, but the chances are greater that it might only create resentment and turn out to be counterproductive.&lt;/p&gt; &lt;p&gt;A couple of weeks ago, after a rehearsal of the choir I direct, I said to two young men, “I want to see confidence in your eyes when you’re singing.” I didn’t say to them, “You idiots, you don’t know the music.” In other words, in keeping with the positive/negative point discussed earlier, I focused on where I wanted them to be, rather than on the fact that they weren’t there right now.&lt;/p&gt; &lt;h3&gt;#9: Correct in private&lt;/h3&gt; &lt;p&gt;If personal issues of a team member are becoming a problem, address them with the person in private. Don’t embarrass the person by bringing it up in public. Such issues include attendance and punctuality, dress, and general professionalism.&lt;/p&gt; &lt;p&gt;What about a mistake involving work? Use discretion here. Using the choir example again: Suppose a person has an incorrect rhythm in a measure. I will just take a moment and work it out with that person in front of the group. If he or she gets it, fine. However, if he or she were &lt;em&gt;consistently&lt;/em&gt; missing notes and rhythms, I would need to talk privately with that person to see what’s going on.&lt;/p&gt; &lt;h3&gt;#10: Praise in public&lt;/h3&gt; &lt;p&gt;When someone does something right, you probably are happy and want that person to continue doing it. You also probably want to make that person look good in front of the others, and for the others to be motivated to improve their own performance. For those reasons, recognize good work in public, rather than in private.&lt;/p&gt; &lt;p&gt;Other things being equal, of course, most people would prefer money and praise rather than praise alone. However, praise alone still can motivate, as long as you’re sincere and specific in what you’re praising. Generalities are unhelpful. Rather, focus on the specific action, and how it benefited the group.&lt;/p&gt; &lt;p&gt;In the case of the young men I mentioned earlier, I spoke to them again just a few days ago, after our last rehearsal, which went really well. I said to one of them, “Remember I told you I wanted to see confidence in your eyes? Well, I see it now.” To the other, I said, “You’ve been practicing, right?” When he nodded yes, I continued, “See what a difference it makes?”&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-4285934894222122338?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/4285934894222122338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=4285934894222122338&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/4285934894222122338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/4285934894222122338'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/05/10-things-you-can-do-to-motivate-your.html' title='10 Things You Can Do To Motivate Your Team'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-1208590308678717398</id><published>2008-05-29T00:05:00.000-07:00</published><updated>2008-05-29T00:11:29.672-07:00</updated><title type='text'>"A Programmer is a device for turning coffee into code"</title><content type='html'>&lt;div class="postcontent"&gt; 			&lt;span style="font-family:Verdana;font-size:85%;"&gt; &lt;p align="left"&gt;On the merits of caffeine:&lt;/p&gt; &lt;p align="left"&gt;“As the mathematician Paul Erdos said, 'A mathematician is a device for turning coffee into theorems.' Academics, designers, programmers, and creative professionals everywhere will surely empathize.”&lt;/p&gt; &lt;p align="left"&gt;&lt;a href="http://www.oreilly.com/catalog/mindhks/chapter/hack92.pdf"&gt;http://www.oreilly.com/catalog/mindhks/chapter/hack92.pdf&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;  		&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-1208590308678717398?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/1208590308678717398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=1208590308678717398&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/1208590308678717398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/1208590308678717398'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/05/programmer-is-device-for-turning-coffee.html' title='&quot;A Programmer is a device for turning coffee into code&quot;'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-405418144906975089</id><published>2008-05-26T08:51:00.000-07:00</published><updated>2008-05-26T08:53:54.809-07:00</updated><title type='text'>Power Toys for .NET Compact Framework 3.5 have been released</title><content type='html'>&lt;p&gt;The Power Toys for .NET Compact Framework 3.5 have just gone live at &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=C8174C14-A27D-4148-BF01-86C2E0953EAB&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=C8174C14-A27D-4148-BF01-86C2E0953EAB&amp;amp;displaylang=en"&gt;&lt;span style="color: rgb(0, 51, 153);"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=C8174C14-A27D-4148-BF01-86C2E0953EAB&amp;amp;displaylang=en&lt;/span&gt;&lt;/a&gt;.  If you downloaded a previous version, you might want to upgrade as there have  been several bug fixes and improvements made to several of the tools.&lt;/p&gt; &lt;h2&gt;&lt;span style="font-size:100%;"&gt;&lt;u&gt;What’s New&lt;/u&gt;&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;Many here are likely familiar with Remote Performance Monitor which shipped  as a part of .NET Compact Framework 2.0 SP1 and the Heap Viewer extension that  shipped 2.0 SP2. This time we’ve added the CLR Profiler based on the desktop  tool, NetCF SVCUtil for making it easy to consume WCF services on device, and  the App Config tool for creating config files on the fly. We’ve improved our  remote tools platform to make it significantly easier to use: client side tools  components now deploy automatically so tools “just work”, everything works with  emulators and a common device manager UI is provided to keep tabs on all your  remote devices.&lt;/p&gt; &lt;p&gt;Comprehensive documentation for the tools is now also provided out of the box  in the form of a chm file.&lt;/p&gt; &lt;h2&gt;&lt;span style="font-size:100%;"&gt;&lt;u&gt;The Tools&lt;/u&gt;&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;&lt;b&gt;NETCF CLR Profiler&lt;/b&gt; – CLR Profiler is an instrumenting allocation  profiler for NETCF applications. It provides detailed allocation visualizations,  allocation callstacks and other views of the managed heap for diagnosing various  memory management issues. &lt;/p&gt; &lt;p&gt;&lt;b&gt;NETCF ServiceModel Metadata Tool&lt;/b&gt; – The .NET Compact Framework  ServiceModel Metadata Tool (netcfsvcutil.exe) allows you to generate a Windows  Communication Foundation (WCF) client proxy to help developers consume WCF  services on device. Like svcutil.exe, which is the desktop version of the  utility, netcfsvcutil.exe is a command-line tool that generates service model  code from metadata documents and generates metadata documents from service model  code.&lt;/p&gt; &lt;p&gt;&lt;b&gt;App Configuration Tool&lt;/b&gt; - On-device tool for specifying what version of  NETCF an application will run against (ie. Create config file), displaying  installed versions of NETCF and displaying info about DLLs in the GAC.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Remote Logging Configuration Tool&lt;/b&gt;– The Logging Configuration Tool  enables users to easily configure logging options on a NETCF device including:  loader, interop, network, error and finalizer logs. (used to be a part of  RPM)&lt;/p&gt; &lt;p&gt;&lt;b&gt;Remote Performance Monitor and GC Heap Viewer&lt;/b&gt; – Provides real time  counter data (ranging from Garbage Collector activity to type loading info) on a  running NETCF application. The GC Heap Viewer feature allows you to capture the  managed heap at any moment your app is running to view live references, and  allows you to compare multiple snapshots to find memory leaks. &lt;/p&gt; &lt;p&gt;&lt;b&gt;NETCF Network Log Viewer&lt;/b&gt; – A utility for viewing NETCF network log  data.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-405418144906975089?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/405418144906975089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=405418144906975089&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/405418144906975089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/405418144906975089'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/05/power-toys-for-net-compact-framework-35.html' title='Power Toys for .NET Compact Framework 3.5 have been released'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-9056859384331246793</id><published>2008-05-25T03:06:00.000-07:00</published><updated>2008-05-25T03:10:17.543-07:00</updated><title type='text'>Microsoft Windows XP Service Pack 3 Release</title><content type='html'>Windows XP Service Pack 3 (SP3) is a rollup of the hotfixes and updates released since the Release to Manufacturing (RTM) of Windows XP Service Pack 2 (SP2). It does not include any new features.&lt;br /&gt;&lt;br /&gt;  1. Microsoft Windows XP Professional SP3 supports the same product key range available in the SP2c release. System builders who updated their images with SP2c will not have to re-image in order for the product keys on SP3 Certificates of Authenticity (COAs) to install the software successfully.&lt;br /&gt; &lt;br /&gt;  2. No extended product key range is available for Microsoft Windows XP Home and Starter editions. These two products will not have the product key range extended with this release. You can continue to use existing images without any issues.&lt;br /&gt; &lt;br /&gt;  3. No integrated SP3 release is available for Microsoft Windows XP Media Center Edition or Microsoft Windows XP Tablet PC Edition. The SP3 releases for these products will be available only through Windows Update.    &lt;p&gt; &lt;a rel="nofollow" target="_blank" href="http://oem.microsoft.com/script/ContentPage.aspx?pageid=564232&amp;amp;wa=wsignin1.0"&gt;http://oem.microsof t.com/script/ ContentPage. aspx?pageid= 564232&amp;amp;wa=wsignin1. 0&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/3664591498734981084-9056859384331246793?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/9056859384331246793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=9056859384331246793&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/9056859384331246793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/9056859384331246793'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/05/microsoft-windows-xp-service-pack-3.html' title='Microsoft Windows XP Service Pack 3 Release'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-1920930328939134994</id><published>2008-05-24T10:59:00.000-07:00</published><updated>2008-05-24T11:02:01.896-07:00</updated><title type='text'>Windows 7( Vienna)</title><content type='html'>&lt;b  style="color: rgb(255, 102, 0);font-family:trebuchet ms,sans-serif;"&gt;&lt;span style="color: rgb(0, 51, 0);font-size:130%;" &gt;Formerly known as Blackcomb and Vienna is the successor of Windows Vista. Windows 7 is expected to be released sometime in 2010&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Windows 7&lt;/b&gt;&lt;span style="font-family:trebuchet ms,sans-serif;"&gt; (formerly known as &lt;/span&gt;&lt;b style="color: rgb(0, 102, 0); font-family: trebuchet ms,sans-serif;"&gt;Blackcomb&lt;/b&gt;&lt;span style="font-family:trebuchet ms,sans-serif;"&gt; and &lt;/span&gt;&lt;b style="color: rgb(0, 102, 0); font-family: trebuchet ms,sans-serif;"&gt;Vienna&lt;/b&gt;&lt;span style="color: rgb(0, 102, 0);font-family:trebuchet ms,sans-serif;" &gt;)&lt;/span&gt;&lt;span style="font-family:trebuchet ms,sans-serif;"&gt; is the working name for the next major version of &lt;/span&gt;&lt;b style="color: rgb(0, 102, 0); font-family: trebuchet ms,sans-serif;"&gt;Microsoft Windows&lt;/b&gt;&lt;span style="font-family:trebuchet ms,sans-serif;"&gt; as the successor of &lt;/span&gt;&lt;b  style="font-family:trebuchet ms,sans-serif;"&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;Windows Vista.[1]&lt;/span&gt; &lt;/b&gt;&lt;span style="font-family:trebuchet ms,sans-serif;"&gt;Microsoft has announced that it is "scoping Windows 7 development to a three-year timeframe", and that "the specific release date will ultimately be determined by meeting the quality bar."[2] Windows 7 is expected to be released sometime in 2010.[3] The client versions of Windows 7 will ship in both &lt;/span&gt;&lt;b style="color: rgb(0, 102, 0); font-family: trebuchet ms,sans-serif;"&gt;32-bit&lt;/b&gt;&lt;span style="font-family:trebuchet ms,sans-serif;"&gt; and &lt;/span&gt;&lt;b  style="font-family:trebuchet ms,sans-serif;"&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;64-bit&lt;/span&gt; &lt;/b&gt;&lt;span style="font-family:trebuchet ms,sans-serif;"&gt;versions.[2] A server variant, codenamed Windows Server 7, is also under development.&lt;/span&gt;&lt;br /&gt;&lt;img src="http://i270.photobucket.com/albums/jj113/defaulthoney/image013.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i270.photobucket.com/albums/jj113/defaulthoney/image006.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i270.photobucket.com/albums/jj113/defaulthoney/image002.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-1920930328939134994?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/1920930328939134994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=1920930328939134994&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/1920930328939134994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/1920930328939134994'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/05/windows-7-vienna.html' title='Windows 7( Vienna)'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-7483605617050235631</id><published>2008-05-24T05:46:00.000-07:00</published><updated>2008-05-24T05:54:27.647-07:00</updated><title type='text'>C# String Tips</title><content type='html'>&lt;h2 style="color: rgb(153, 153, 255);"&gt;Fill a String with Repeating Characters:&lt;/h2&gt;To fill a string with repeating characters, use the string class &lt;a href="http://msdn2.microsoft.com/EN-US/library/aa331867.aspx" target="_blank"&gt;constructor&lt;/a&gt;.  For example, to fill a string with twenty asterisks: &lt;blockquote&gt; &lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; s = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;( &lt;span style="color: rgb(163, 21, 21);"&gt;'*'&lt;/span&gt;, 20 );&lt;/pre&gt; &lt;/blockquote&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(153, 153, 255);"&gt;Check for Blank String:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A blank string can be represented by a null reference or empty string (&lt;a href="http://msdn2.microsoft.com/en-US/library/system.string.empty.aspx" target="_blank"&gt;String.Empty&lt;/a&gt; or ""). If you attempt to call a method on a null string, an exception will occur. Hence, to check for a blank string, you should use the new .NET v2.0 static function &lt;a href="http://msdn2.microsoft.com/en-us/library/system.string.isnullorempty.aspx" target="_blank"&gt;String.IsNullOrEmpty&lt;/a&gt;: &lt;blockquote&gt; &lt;pre class="code"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;String&lt;/span&gt;.IsNullOrEmpty( s )&lt;br /&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;/pre&gt; &lt;/blockquote&gt;&lt;span style="color: rgb(153, 153, 255);font-size:180%;" &gt;&lt;span style="font-weight: bold;"&gt;Reverse a String:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;There has been extensive analysis on algorithms to reverse a string. The following is a good balance between speed and clarity and works well with Unicode and alternate character sets:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; Reverse( &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; s )&lt;br /&gt;{&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;char&lt;/span&gt;[] charArray = s.ToCharArray();&lt;br /&gt;   &lt;span style="color: rgb(43, 145, 175);"&gt;Array&lt;/span&gt;.Reverse( charArray );&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;( charArray );&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;h2 style="color: rgb(153, 153, 255);"&gt;Compare Strings:&lt;/h2&gt;Because a string reference can be null, you should avoid using the equality symbol == or the Compare member function when comparing strings. Instead, use the static &lt;a href="http://msdn2.microsoft.com/en-us/library/system.string.compare.aspx" target="_blank"&gt;String.Compare&lt;/a&gt; method. This method has the advantage that it can handle null string references, compare strings ignoring case, and compare strings using a specific culture: &lt;blockquote&gt; &lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;String&lt;/span&gt;.Compare( s1, s2, &lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt; ) == 0)&lt;/pre&gt; &lt;/blockquote&gt;&lt;br /&gt;&lt;h2 style="color: rgb(153, 153, 255);"&gt;Convert String to Numeric Value:&lt;/h2&gt;Each numeric data type such as int, Int32, double, etc. has a static &lt;a href="http://msdn2.microsoft.com/en-us/library/system.int32.tryparse.aspx" target="_blank"&gt;TryParse&lt;/a&gt; method that converts a string to that data type without throwing an exception. The method returns a bool whether the string contained a value with the specified data type. For example: &lt;blockquote&gt; &lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; s = &lt;span style="color: rgb(163, 21, 21);"&gt;"42″&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; i;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;.TryParse( s, &lt;span style="color: rgb(0, 0, 255);"&gt;out&lt;/span&gt; i );&lt;/pre&gt; &lt;/blockquote&gt;&lt;br /&gt;&lt;h2 style="color: rgb(153, 153, 255);"&gt;String Right:&lt;/h2&gt;Noticeably absent from the string class is the Right method.  But you can replicate it easily using the &lt;a href="http://msdn2.microsoft.com/en-us/library/hxthx5h6.aspx" target="_blank"&gt;Substring&lt;/a&gt; method.  Here is a simple method that wraps this up nicely:  &lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; Right( &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; s, &lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; count )&lt;br /&gt;{&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; newString = &lt;span style="color: rgb(43, 145, 175);"&gt;String&lt;/span&gt;.Empty;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (s != &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; count &gt; 0)&lt;br /&gt;   {&lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; startIndex = s.Length - count;&lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (startIndex &gt; 0)&lt;br /&gt;           newString = s.Substring( startIndex, count );&lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;br /&gt;&lt;/span&gt;            newString = s;&lt;br /&gt;   }&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; newString;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;h2 style="color: rgb(153, 153, 255);"&gt;IndexOf Ignoring Case:&lt;/h2&gt;The string's IndexOf methods are all case-sensitive.  Fortunately, the Globalization namespace contains the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.globalization.compareinfo.aspx" target="_blank"&gt;CompareInfo&lt;/a&gt; class that includes a case-insensitive IndexOf method.  For example: &lt;blockquote&gt; &lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System.Globalization;&lt;/pre&gt;  &lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; s1 = &lt;span style="color: rgb(163, 21, 21);"&gt;"C# is a GREAT programming language."&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; s2 = &lt;span style="color: rgb(163, 21, 21);"&gt;"great"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;CompareInfo&lt;/span&gt; Compare = &lt;span style="color: rgb(43, 145, 175);"&gt;CultureInfo&lt;/span&gt;.InvariantCulture.CompareInfo;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; i = Compare.IndexOf( s1, s2, &lt;span style="color: rgb(43, 145, 175);"&gt;CompareOptions&lt;/span&gt;.IgnoreCase );&lt;/pre&gt; &lt;/blockquote&gt;&lt;br /&gt;&lt;pre class="code"&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/3664591498734981084-7483605617050235631?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/7483605617050235631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=7483605617050235631&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7483605617050235631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7483605617050235631'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/05/c-string-tips.html' title='C# String Tips'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-5729328326505652346</id><published>2008-05-15T01:05:00.000-07:00</published><updated>2008-05-15T02:06:41.143-07:00</updated><title type='text'>Visual Studio 2008 and .NET Framework 3.5 Service Pack 1 Beta</title><content type='html'>&lt;p&gt;Earlier today we shipped a public beta of our upcoming .NET 3.5 SP1 and VS 2008 SP1 releases.  These servicing updates provide a roll-up of bug fixes and performance improvements for issues reported since we released the products last November.  They also contain a number of feature additions and enhancements that make building .NET applications better (see below for details on some of them).&lt;/p&gt; &lt;p&gt;We plan to ship the final release of both .NET 3.5 SP1 and VS 2008 SP1 this summer as free updates.  You can download and install the beta &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx"&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/3664591498734981084-5729328326505652346?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/5729328326505652346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=5729328326505652346&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/5729328326505652346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/5729328326505652346'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/05/visual-studio-2008-and-net-framework-35.html' title='Visual Studio 2008 and .NET Framework 3.5 Service Pack 1 Beta'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-1732848866349691313</id><published>2008-05-15T00:58:00.000-07:00</published><updated>2008-05-15T01:04:45.089-07:00</updated><title type='text'>SQL Prompt Pro - now with customizable code layout</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;a href="https://www.red-gate.com/dynamic/downloads/downloadform.aspx?download=sqlprompt"&gt;&lt;img src="http://www.red-gate.com/products/SQL_Prompt/Images/downloadpromptbutton.gif" title="Download SQL Prompt" alt="Download SQL Prompt" border="0" height="82" width="277" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;SQL Prompt now has automatic code layout for easy code readability. No more eye-strain viewing unfamiliar scripts.&lt;br /&gt;&lt;br /&gt;Combined with SQL Prompt parsing your queries as you type and suggesting keywords, table names, and join conditions (amongst others), writing and editing queries just got even easier.&lt;br /&gt;&lt;br /&gt;Below shows some code before and after layout - the formatting can be customized to your own preferred style if desired.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.red-gate.com/products/SQL_Prompt/index.htm"&gt;Find out more about SQL Prompt Pro &lt;/a&gt;or &lt;a href="https://www.red-gate.com/dynamic/downloads/downloadform.aspx?download=sqlpromptpro"&gt;try it for yourself&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.red-gate.com/products/SQL_Prompt/Images/layout2b.gif" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.red-gate.com/products/SQL_Prompt/Images/layout1b.gif" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-1732848866349691313?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/1732848866349691313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=1732848866349691313&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/1732848866349691313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/1732848866349691313'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/05/sql-prompt-pro-now-with-customizable.html' title='SQL Prompt Pro - now with customizable code layout'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-2303751434215624364</id><published>2008-05-10T02:18:00.000-07:00</published><updated>2008-05-10T02:20:57.832-07:00</updated><title type='text'>Convert .NET data types using Parse and TryParse</title><content type='html'>&lt;a href="http://www.ezzylearning.com/tutorial.aspx?tid=3063477" target="_blank"&gt;Convert .NET data types using Parse and TryParse&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;All base types in .NET Framework offer Parse method which is used to convert string value to different types. For example, you can convert string into int, double, short, float, boolean etc. Parse methods are very useful because programmers donâ€™t need to write any of their own conversion routines for common input scenarios. However, these methods also have some problems which programmers must need to keep in mind when they are writing their code which is using Parse methods.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ezzylearning.com/tutorial.aspx?tid=3063477" target="_blank"&gt;Click to Read Full Tutorial&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-2303751434215624364?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/2303751434215624364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=2303751434215624364&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/2303751434215624364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/2303751434215624364'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/05/convert-net-data-types-using-parse-and.html' title='Convert .NET data types using Parse and TryParse'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-2126453867088253538</id><published>2008-05-10T01:47:00.000-07:00</published><updated>2008-05-10T02:06:24.765-07:00</updated><title type='text'>C# Free Video Programming Tutorials</title><content type='html'>C# Free Video Programming Tutorials&lt;br /&gt;&lt;br /&gt;Learn programming for free&lt;br /&gt;Free Video lessons&lt;br /&gt;Click here &gt;&gt;&gt; &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://c-sharp.us/" target="_blank"&gt;C# Free Video Programming Tutorials&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-2126453867088253538?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/2126453867088253538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=2126453867088253538&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/2126453867088253538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/2126453867088253538'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/05/c-free-video-programming-tutorials.html' title='C# Free Video Programming Tutorials'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-537849925913598890</id><published>2008-05-05T00:46:00.000-07:00</published><updated>2008-05-05T00:49:19.989-07:00</updated><title type='text'>Windows Workflow Foundation Web Workflow Approvals Starter Kit</title><content type='html'>&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=A438A9B9-9F15-42EC-866F-2EA58E10DB36&amp;amp;displaylang=en"&gt;http://www.microsof t.com/downloads/ details.aspx? FamilyID= A438A9B9- 9F15-42EC- 866F-2EA58E10DB3 6&amp;amp;displaylang= en&lt;/a&gt;&lt;/p&gt; &lt;h4&gt;Overview&lt;/h4&gt; &lt;div class="downloadInfo"&gt;&lt;a rel="nofollow" name="Description"&gt;&lt;/a&gt;&lt;span&gt;This starter kit is a Visual Studio 2005 (with updates for Visual Studio 2008) project that demonstrates using Windows Workflow Foundation for simple task-oriented workflow in an ASP.NET Web application. A workflow model is used to automate work order requests at a small example company. It includes three pre-defined roles which each play a part in the work order creation, approval and monitoring. The starter kit may be modified for other workflow models to suit other small Web-based task management systems.&lt;/span&gt;&lt;/div&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=A438A9B9-9F15-42EC-866F-2EA58E10DB36&amp;amp;displaylang=en"&gt;http://www.microsof t.com/downloads/ details.aspx? FamilyID= A438A9B9- 9F15-42EC- 866F-2EA58E10DB3 6&amp;amp;displaylang= en&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/3664591498734981084-537849925913598890?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/537849925913598890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=537849925913598890&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/537849925913598890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/537849925913598890'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/05/windows-workflow-foundation-web.html' title='Windows Workflow Foundation Web Workflow Approvals Starter Kit'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-831924973242504016</id><published>2008-05-05T00:44:00.000-07:00</published><updated>2008-05-05T00:45:52.944-07:00</updated><title type='text'>10 Things You Should Know About Microsoft's Silverlight</title><content type='html'>&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9029725"&gt;http://www.computer world.com/ action/article. do?command= viewArticleBasic&amp;amp;articleId=9029725&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Crafting a Web strategy is important for any thriving business. However, implementing that strategy with rich Internet applications is not always as easy as it should be. To ease that pain, &lt;b&gt;&lt;a rel="nofollow" title="More stories related to Microsoft Corporation" target="_blank" href="http://www.cio.com/article/128700/subject/Microsoft+Corporation"&gt;Microsoft Corp.&lt;/a&gt;&lt;/b&gt; recently announced &lt;b&gt;&lt;a rel="nofollow" target="_blank" href="http://www.silverlight.net/"&gt;Silverlight&lt;/a&gt;&lt;/b&gt;, a cross-platform, cross-browser plug-in for Web application developers. The plug-in, currently available as a Release Candidate (which for all intents and purposes means it's released now), enables rich application development including media, interactivity and animation. The Silverlight plug-in currently works with &lt;b&gt;&lt;a rel="nofollow" title="More stories related to Microsoft Internet Explorer" target="_blank" href="http://www.cio.com/article/128700/subject/Microsoft+Internet+Explorer"&gt;Internet Explorer&lt;/a&gt;&lt;/b&gt; and &lt;b&gt;&lt;a rel="nofollow" title="More stories related to Mozilla Firefox" target="_blank" href="http://www.cio.com/article/128700/subject/Mozilla+Firefox"&gt;Firefox&lt;/a&gt;&lt;/b&gt; Web browsers on Windows and with &lt;a rel="nofollow" title="Mozilla Firefox" target="_blank" href="http://www.computerworld.com/action/inform.do?command=search&amp;amp;searchTerms=Mozilla+Firefox"&gt;Firefox&lt;/a&gt; and Safari on Mac OS X. &lt;/p&gt; &lt;p&gt;For the complete article please follow the link below:&lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9029725"&gt;http://www.computer world.com/ action/article. do?command= viewArticleBasic&amp;amp;articleId=9029725&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/3664591498734981084-831924973242504016?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/831924973242504016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=831924973242504016&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/831924973242504016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/831924973242504016'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/05/10-things-you-should-know-about.html' title='10 Things You Should Know About Microsoft&apos;s Silverlight'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-3476116676219090194</id><published>2008-05-03T01:17:00.000-07:00</published><updated>2008-05-03T02:37:18.945-07:00</updated><title type='text'>60 More AJAX- and Javascript Solutions For Professional Coding</title><content type='html'>&lt;div align="justify"&gt;&lt;a rel="nofollow" target="_blank" href="http://www.smashingmagazine.com/2008/04/15/60-more-ajax-and-javascript-solutions-for-professional-coding/"&gt;http://www.smashing magazine. com/2008/ 04/15/60- more-ajax- and-javascript- solutions- for-professional -coding/&lt;/a&gt;&lt;/div&gt;  &lt;div&gt; &lt;/div&gt;  &lt;div&gt;This post presents &lt;strong&gt;over 60 new useful Ajax scripts, libraries and solutions which you can use in your future projects&lt;/strong&gt;. License agreements can change from time to time — please read them carefully before using the script in a commercial web-application.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Useful Ajax Scripts&lt;/span&gt;&lt;br /&gt;&lt;a style="color: rgb(51, 51, 255);" href="http://greghoustondesign.com/demos/mocha/"&gt;Mocha UI&lt;/a&gt;&lt;br /&gt;Mocha is a web applications user interface library built on the Mootools javascript framework.&lt;br /&gt;&lt;img src="http://i270.photobucket.com/albums/jj113/defaulthoney/ajax-21.jpg" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;a href="http://www.filamentgroup.com/lab/developing_an_accessible_slider/"&gt;An Accessible Slider&lt;/a&gt;&lt;br /&gt;“Recently we designed and developed an interface that required a slider control, which allows users to choose one or a range of values on a continuum. Values on a slider can represent anything from hours on a clock to the volume on a music player to a complex, proprietary data set. In its simplest form, the slider is displayed as an axis of values with a handle to drag and select a value, or two handles for selecting a range.”&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i270.photobucket.com/albums/jj113/defaulthoney/ajax-05.jpg" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;a href="http://digitarald.de/project/fancyupload/1-0/"&gt;FancyUpload&lt;/a&gt;&lt;br /&gt;Swf meets Ajax. An upload widget that allows queued multiple-file upload including progress bars.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i270.photobucket.com/albums/jj113/defaulthoney/ajax-23.jpg" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;a href="http://jqueryfordesigners.com/coda-popup-bubbles/"&gt;Coda Popup Bubbles&lt;/a&gt;&lt;br /&gt;“When you move the mouse over the popup, this triggers a mouseout on the image used to trigger the popup being shown. I’ll explain (carefully) how to make sure the effect doesn’t fail in this situation.”&lt;br /&gt;&lt;img src="http://i270.photobucket.com/albums/jj113/defaulthoney/ajax-04.jpg" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;a href="http://devthought.com/textboxlist-meets-autocompletion/"&gt;Facebook Style Input Box&lt;/a&gt;&lt;br /&gt;The approach to re-create the autocomplete method of adding multiple recipients to messages used on Facebook. “I’d seen it in Facebook before, which has a really decent implementation of this concept (it work well, but it doesn’t respect any modern programming principles; basically, it’s a big tag soup with lots of inline Javascript)”&lt;br /&gt;&lt;img src="http://i270.photobucket.com/albums/jj113/defaulthoney/auto.png" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;a href="http://developer.yahoo.com/yui/examples/editor/index.html"&gt;Rich Text Editor&lt;/a&gt;&lt;br /&gt;The Rich Text Editor is a UI control that replaces a standard HTML textarea. It allows for the rich formatting of text content, including common structural treatments like lists, formatting treatments like bold and italic text, and drag-and-drop inclusion and sizing of images. The Rich Text Editor’s Toolbar is extensible via a plugin architecture so that advanced implementations can achieve a high degree of customization. The tool is based upon&lt;a href="http://developer.yahoo.com/yui/"&gt;Yahoo UI Library.&lt;/a&gt;&lt;a&gt;&lt;br /&gt;&lt;img src="http://i270.photobucket.com/albums/jj113/defaulthoney/texteditor.png" border="0" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Further Ajax scripts&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.dayfoxdesigns.co.nr/downloads.php"&gt;Maillist&lt;/a&gt;&lt;br /&gt;&lt;div align="justify"&gt;An AJAX addon for your site, a Mail list. An email address can be submitted without having to reload the whole page.&lt;br /&gt;&lt;a href="http://www.labsmedia.com/clickheat/index.html"&gt;ClickHeat&lt;/a&gt;&lt;br /&gt;ClickHeat is an Ajax-powered visual heatmap of clicks on a page, showing hot and cold click zones. You can also use the heatmap generator outside ClickHeat for your own applications, using PHP and GD library.&lt;br /&gt;&lt;a href="http://www.prototype-ui.com/%3EPrototype%20UI%3C/a%3E%3Cbr%3EPrototype%20UI%20is%20an%20open-source%20configurable%20Modal%20Window%20system.%20The%20library%20allows%20you%20to%20add%20a%20window%20or%20a%20dialogue.%20Windows%20can%20have%20a%20shadow%20and%20be%20scannable;%20modal%20mode%20is%20available,%20and%20there%20is%20a%20window%20manager%20for%20Web%20OS%20behavior.%3Cbr%3E%3Ca%20href=" de="" protoload=""&gt;&lt;/a&gt;&lt;a href="http://icant.co.uk/sandbox/stepbystep/index.html"&gt;Step by Step - Show and explain visitors what your page has for them.&lt;/a&gt;&lt;br /&gt;You might have encountered interactive demos created with screencasting and screengrabbing software that explain an interface to users in a step-by-step manner. This is exactly what this script does for web sites.&lt;br /&gt;&lt;a href="http://dev.justinmaier.com/fontSize/"&gt;FontSize slider&lt;/a&gt;&lt;br /&gt;Enables visitors to define the font-size of the page.&lt;br /&gt;&lt;a href="http://famspam.com/facebox"&gt;Facebox&lt;/a&gt;&lt;br /&gt;Facebox is a jQuery-based, Facebook-style lightbox which can display images, divs, or entire remote pages. It’s simple to use and easy on the eyes. Download the tarball, view the examples, then start enjoying the curves.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-3476116676219090194?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/3476116676219090194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=3476116676219090194&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/3476116676219090194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/3476116676219090194'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/05/60-more-ajax-and-javascript-solutions.html' title='60 More AJAX- and Javascript Solutions For Professional Coding'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-8179060165567538145</id><published>2008-05-02T03:21:00.000-07:00</published><updated>2008-05-02T03:36:04.140-07:00</updated><title type='text'>.NET 3.5 Enhancements Training Kit</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="font-family:Verdana;"&gt;Brief Description&lt;/span&gt;&lt;/span&gt;&lt;o&gt;&lt;/o&gt;&lt;/b&gt;&lt;/span&gt; &lt;div id="quickDescription"&gt; &lt;div class="MsoNormal"&gt;&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;&lt;span style=";font-family:Verdana;font-size:12;"  &gt;&lt;span style="font-size:100%;"&gt;.NET Framework 3.5 Enhancements Training Kit&lt;/span&gt; containing Labs, Demos and PPTs&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;o&gt;&lt;/o&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;h4&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="font-family:Verdana;"&gt;Overview&lt;/span&gt;&lt;/span&gt;&lt;o&gt;&lt;/o&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt; &lt;div&gt; &lt;div class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="Description"&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:100%;"  &gt;&lt;span style=";font-family:Verdana;font-size:12;"  &gt;The.NET Framework 3.5 Enhancements Training Kit includes presentations,&lt;wbr&gt;hands-on labs, and demos. This content is designed to help you learnhow to utilize the .NET 3.5 Enhancement features including: ASP.NETMVC, ASP.NET Dynamic Data, ASP.NET AJAX History, ASP.NET Silverlightcontrols&lt;wbr&gt;, ADO.NET Data Services and ADO.NET Entity Framework.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;o&gt;&lt;/o&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;span style=";font-family:Verdana;font-size:100%;"  &gt;&lt;span style=";font-family:Verdana;font-size:12;"  &gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=355C80E9-FDE0-4812-98B5-8A03F5874E96&amp;amp;displaylang=en" target="_blank"&gt;http://www.microsof t.com/downloads/ details.aspx? FamilyID= 355C80E9- FDE0-4812- 98B5-8A03F5874E9 6&amp;amp;displaylang= en&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-8179060165567538145?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/8179060165567538145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=8179060165567538145&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/8179060165567538145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/8179060165567538145'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/05/net-35-enhancements-training-kit.html' title='.NET 3.5 Enhancements Training Kit'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-7143051904660998209</id><published>2008-05-02T00:49:00.000-07:00</published><updated>2008-05-02T00:58:08.706-07:00</updated><title type='text'>20 Tips to Improve ASP.net Application Performance</title><content type='html'>&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;Not a .net Developer?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Are you an asp.net developer? If you aren't don't worry, If you are an ASP.net developer, listen up!&lt;br /&gt;Get Ready for Massive Gains&lt;br /&gt;&lt;br /&gt;There are certain things you should take into account when you are developing your applications. Over the last 12 years or so of working with asp and asp.net, I have learned to avoid and do certain things that increase your application performance by a massive amount! Below are my top 20 tips to improving ASP.net application Performance.&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;1. Disable Session State&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Disable Session State if you're not going to use it. By default it's on. You can actually turn this off for specific pages, instead of for every page:&lt;br /&gt;&lt;br /&gt;&lt;%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebApplication1.WebForm1" EnableSessionState="false" %&gt;&lt;br /&gt;&lt;br /&gt;You can also disable it across the application in the web.config by setting the mode value to Off.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;2. Output Buffering&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Take advantage of this great feature. Basically batch all of your work on the server, and then run a Response.Flush method to output the data. This avoids chatty back and forth with the server.&lt;br /&gt;&lt;br /&gt;&lt;%response.buffer=true%&gt;&lt;br /&gt;&lt;br /&gt;Then use:&lt;br /&gt;&lt;br /&gt;&lt;%response.flush=true%&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;3. Avoid Server-Side Validation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Try to avoid server-side validation, use client-side instead. Server-Side will just consume valuable resources on your servers, and cause more chat back and forth.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;4. Repeater Control Good, DataList, DataGrid, and DataView controls Bad&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Asp.net is a great platform, unfortunately a lot of the controls that were developed are heavy in html, and create not the greatest scaleable html from a performance standpoint. ASP.net repeater control is awesome! Use it! You might write more code, but you will thank me in the long run!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;5. Take advantage of HttpResponse.IsClientConnected before performing a large operation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;if (Response.IsClientConnected)&lt;br /&gt;{&lt;br /&gt;// If still connected, redirect&lt;br /&gt;// to another page.&lt;br /&gt;Response.Redirect("Page2CS.aspx", false);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;What is wrong with Response.Redirect? Read on...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;6. Use HTTPServerUtility.Transfer instead of Response.Redirect&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Redirect's are also very chatty. They should only be used when you are transferring people to another physical web server. For any transfers within your server, use .transfer! You will save a lot of needless HTTP requests.&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;7. Always check Page.IsValid when using Validator Controls&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So you've dropped on some validator controls, and you think your good to go because ASP.net does everything for you! Right? Wrong! All that happens if bad data is received is the IsValid flag is set to false. So make sure you check Page.IsValid before processing your forms!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;8. Deploy with Release Build&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Make sure you use Release Build mode and not Debug Build when you deploy your site to production. If you think this doesn't matter, think again. By running in debug mode, you are creating PDB's and cranking up the timeout. Deploy Release mode and you will see the speed improvements.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;9. Turn off Tracing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Tracing is awesome, however have you remembered to turn it off? If not, make sure you edit your web.config and turn it off! It will add a lot of overhead to your application that is not needed in a production environment.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;10. Page.IsPostBack is your friend&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Make sure you don't execute code needlessly. I don't know how many web developers forget about checking IsPostBack! It seems like such a basic thing to me! Needless processing!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;11. Avoid Exceptions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Avoid throwing exceptions, and handling useless exceptions. Exceptions are probably one of the heaviest resource hogs and causes of slowdowns you will ever see in web applications, as well as windows applications. Write your code so they don't happen! Don't code by exception!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;12. Caching is Possibly the number one tip!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Use Quick Page Caching and the ASP.net Cache API! Lots to learn, its not as simple as you might think. There is a lot of strategy involved here. When do you cache? what do you cache?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;13. Create Per-Request Cache&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Use HTTPContect.Items to add single page load to create a per-request cache.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;14. StringBuilder&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;StringBuilder.Append is faster than String + String. However in order to use StringBuilder, you must&lt;br /&gt;&lt;br /&gt;new StringBuilder()&lt;br /&gt;&lt;br /&gt;Therefore it is not something you want to use if you don't have large strings. If you are&lt;br /&gt;concatenating less than 3 times, then stick with String + String. You can also try String.Concat&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;15. Turn Off ViewState&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you are not using form postback, turn off viewsate, by default, controls will turn on viewsate and slow your site.&lt;br /&gt;&lt;br /&gt;public ShowOrdersTablePage()&lt;br /&gt;{&lt;br /&gt;this.Init += new EventHandler(Page_Init);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void Page_Init(object sender, System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;this.EnableViewState = false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;16. Use Paging&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Take advantage of paging's simplicity in .net. Only show small subsets of data at a time, allowing the page to load faster. Just be careful when you mix in caching. How many times do you hit the page 2, or page 3 button? Hardly ever right! So don't cache all the data in the grid! Think of it this way: How big would the first search result page be for "music" on Google if they cached all the pages from 1 to goggle ;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;17. Use the AppOffline.htm when updating binaries&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I hate the generic asp.net error messages! If I never had to see them again I would be so happy. Make sure your users never see them! Use the AppOffline.htm file!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;18. Use ControlState and not ViewState for Controls&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you followed the last tip, you are probably freaking out at the though of your controls not working. Simply use Control State. Microsoft has an excellent example of using ControlState here, as I will not be able to get into all the detail in this short article.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;19. Use the Finally Method&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you have opened any connections to the database, or files, etc, make sure that you close them at the end! The Finally block is really the best place to do so, as it is the only block of code that will surely execute.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-size:130%;" &gt;20. Option Strict and Option Explicit&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is an oldy, and not so much a strictly ASP.net tip, but a .net tip in general. Make sure you turn BOTH on. you should never trust .net or any compiler to perform conversions for you. That's just shady programming, and low quality code anyway. If you have never turned both on, go turn them on right now and try and compile. Fix all your errors.&lt;br /&gt;&lt;br /&gt;There are hundreds more where these came from, however I really feel that these are the most critical of the speed improvements you can make in ASP.net that will have a dramatic impact on the user experience of your application. As always if you have any suggestions or tips to add, please let us know! We would love to hear them!&lt;br /&gt;&lt;br /&gt;Have web development!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-7143051904660998209?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/7143051904660998209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=7143051904660998209&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7143051904660998209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/7143051904660998209'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/05/20-tips-to-improve-aspnet-application.html' title='20 Tips to Improve ASP.net Application Performance'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-5741800550992795349</id><published>2008-04-30T06:10:00.000-07:00</published><updated>2008-04-30T06:18:36.200-07:00</updated><title type='text'>How to Videos (Visual Studio 2008)</title><content type='html'>&lt;u&gt;&lt;span style="font-weight: bold;"&gt;Useful Videos/Material for VS 2008&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/vs2008/bb964532.aspx" target="_blank"&gt;Learn Visual Studio 2008&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://visualstudio2008.defyallchallenges.com/videos.htm" target="_blank"&gt;Visual Studio 2008 in Action&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-5741800550992795349?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/5741800550992795349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=5741800550992795349&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/5741800550992795349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/5741800550992795349'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/04/how-to-videos-visual-studio-2008.html' title='How to Videos (Visual Studio 2008)'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3664591498734981084.post-3692284740086489575</id><published>2008-04-30T01:40:00.000-07:00</published><updated>2008-04-30T01:48:20.518-07:00</updated><title type='text'>Looking For Cool Technology Toys?</title><content type='html'>&lt;div class="post-header-line-1"&gt;&lt;/div&gt;&lt;div class="post-body entry-content"&gt;&lt;ol&gt;&lt;span id="intelliTXT" name="intelliTxt"&gt;&lt;li&gt;&lt;b style="color: rgb(153, 0, 0);"&gt;Elekit Robotic Arm&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt; &lt;/span&gt;- Everyone can use an extra hand and now you can actually get one. Elekit has created a fully programmable and workable USB Robotic Arm. It has five separate movements: grab/release, lift/lower, pivot sideways, and rotate wrist. Internal LED lights allow you to see it at work. This is a kit, so you actually have to do a small amount of assembly, but just keep thinking of the rewards of your labors when it passes you those Doritos that are not quite in reach. The Robotic Arm will be making its Japanese $80.00 debut in March in a limited addition from &lt;a target="_blank" href="http://www.elekit.co.jp/material/english_product_html/MR-999.php"&gt;Elekit&lt;/a&gt;.&lt;/li&gt;  &lt;p&gt;  &lt;/p&gt;&lt;li&gt;&lt;img src="http://askbobrankin.com/G100-keyboard.jpg" alt="X7-G100 Game Board" align="right" /&gt;&lt;b style="color: rgb(153, 0, 0);"&gt;X7-G100 Game Board&lt;/b&gt; - Easy to Master... who needs a Joystick? The A4Tech X7-G100 Gaming Keyboard has 4 large swappable red rubber keys and a one-touch volume control. The G100 is heavier than a regular keyboard for stability and even better, it’s waterproof so you don’t have to worry about spilling your Bud while you thwart off the bad guys. It’s available at &lt;a target="_blank" href="http://www.a4tech.com/en/product2.asp?CID=2&amp;amp;SCID=117&amp;amp;MNO=X7+G100"&gt;A4Tech&lt;/a&gt; for $29.00. Plug it into your USB and let the games begin.&lt;/li&gt;  &lt;p&gt;  &lt;/p&gt;&lt;li&gt;&lt;img src="http://askbobrankin.com/thankowirelessmouse.jpg" alt="USB Wireless Mouse" align="right" /&gt;&lt;b style="color: rgb(153, 0, 0);"&gt;USB Wireless Mouse&lt;/b&gt; - Just admit it... you'd much rather check your e-mail in the comfort of your own bed with a laptop than sit at some back-wrenching computer desk for hours on end. Thanko, most famous for their nifty plug-and-play warming gadgets, has developed the USB Wireless Mouse EZ that can actually be utilized in the air. Simply place and move your finger on the red light and watch the screen cursor respond. The button also functions as a single or double clicker. Compatible with both PC and Mac, it can be used as a normal optical mouse and can recharge its batteries while you work. Find this clever computer rodent at &lt;a target="_blank" href="http://raremonoshop.com/catalog/product_info.php?cPath=28&amp;amp;products_id=94"&gt;Thanko’s RareMono Shop&lt;/a&gt; for a price of $35.67.&lt;/li&gt;  &lt;p&gt;  &lt;/p&gt;&lt;li&gt;&lt;img src="http://askbobrankin.com/usbchillerwarmer.jpg" alt="USB Warmer Chiller" align="right" /&gt;&lt;b style="color: rgb(153, 0, 0);"&gt;USB Gadget Keeps Beverages Cool or Warm&lt;/b&gt; - There are cup warmers and then there are beverage coolers. USB.brando has managed to combine the two. Simply plug it into your USB connection, set it to &lt;i&gt;chill&lt;/i&gt; for a 13 degree decrease or &lt;i&gt;warm&lt;/i&gt; for a 29º increase, then wait 10 minutes. The gadget has a built-in fan and comes with a 98cm cable so you don’t have to worry about your coffee spilling into your keyboard if you're only mildly awake. Available at &lt;a target="_blank" href="http://usb.brando.com.hk/prod_detail.php?prod_id=00221"&gt;USB.brando&lt;/a&gt; for an inexpensive $24.00.&lt;/li&gt;  &lt;p&gt;  &lt;/p&gt;&lt;li&gt;&lt;img src="http://askbobrankin.com/EasyShare5300.jpg" alt="Kodak Easyshare AIO Inkjet" align="right" /&gt;&lt;b style="color: rgb(153, 0, 0);"&gt;Kodak Easyshare AIO Inkjet Printers&lt;/b&gt; - The folks at Eastman Kodak are coming out with their own line of Easyshare All-In-One inkjet printers. Claiming to save up to 50% in professional printing costs, this translates into a 4x6 inch image for as inexpensive as ten cents a print. Kodak’s ink cartridges will cost you a mere $9.99 for black and $14.99 for color. You can get the 5100 and 5300 models at Best Buy beginning in March for $149.99 and $199.99 respectively. The deluxe 5500 will be available in April at the &lt;a target="_blank" href="http://www.kodak.com/eknec/PageQuerier.jhtml?pq-path=10580&amp;amp;pq-locale=en_Us"&gt;Kodak Store&lt;/a&gt; for $299.99.&lt;/li&gt;  &lt;p&gt;  &lt;/p&gt;&lt;li&gt;&lt;img src="http://askbobrankin.com/missle-launcher.jpg" alt="USB Missile Launchers" align="right" /&gt;&lt;b style="color: rgb(153, 0, 0);"&gt;Missile Launchers Cure Cubicle Boredom&lt;/b&gt; - Feeling claustrophobic in your Dilbertesque space at work? One alternative to hanging out at the water cooler is this missile launcher. With 3 feet of USB cable, this plug-and-play can move horizontally or vertically and comes with 3 foam missiles. It can shoot up to 20 feet, is compatible with Windows XP, and comes with sound effects software. Get two and not only will you save a few dollars, you can have wars with the cubicle next to you. The launcher can be found at &lt;a target="_blank" href="http://www.latestbuy.com.au/usb_missile_launcher.html"&gt;Latest Buy&lt;/a&gt; for AU $39.99 (US $31.56) and the Twin Battle Pack is available for US $59.21.&lt;/li&gt;  &lt;p&gt;  &lt;/p&gt;&lt;li&gt;&lt;img src="http://askbobrankin.com/ittusbturntable.jpg" alt="ION Audio iTTUSB Turntable" align="right" /&gt;&lt;b style="color: rgb(153, 0, 0);"&gt;ION Audio iTTUSB Turntable Converts Analogue to Digital&lt;/b&gt; - What top 10 list is complete without a musical gadget? The plug-n-play ION Audio iTTUSB Turntable connects to your PC or Mac and &lt;a href="http://www.askbobrankin.com/converting_vinyl_records_to_cd.html"&gt; turns your vinyl collection into digital CD&lt;/a&gt; or MP3s. It will work with 33 1/3, 45, and 78 rpm records, and features high-speed recording, adjustable pitch, and anti-skate capabilities. It even includes an auxiliary line in to convert audio cassettes, and RCA outputs to play records through your speaker systems when you are done converting. The iTTUSB comes with stylus, 45 adapter, and 90-day warranty, and can be found at &lt;a target="_blank" href="http://www.sharperimage.com/us/en/catalog/product/sku__IA001"&gt;Sharper Image&lt;/a&gt; for $199.95.&lt;/li&gt;  &lt;p&gt;  &lt;/p&gt;&lt;li&gt;&lt;img src="http://askbobrankin.com/wooden-peripherals.jpg" alt="Wooden Peripherals" align="right" /&gt;&lt;b style="color: rgb(153, 0, 0);"&gt;Wood Contour Peripherals&lt;/b&gt; - This line of peripherals just oozes your inner CEO. Wood Contour offers luxury wood and stone keyboards, monitors, and mice. Each one is custom made from one piece of hardwood such as cherry, oak, ash, and mahogany, or Corian stone. You can even request personalizations such as your company’s logo or initial engraving. Class does not come cheap, but if you cannot afford a whole set, you can compromise with the company’s overstock of individual peripherals from prices beginning at $129.95. If you want to look like YOU should be the boss, visit &lt;a target="_blank" href="http://woodcontour.com/index.php"&gt;Wood Countour&lt;/a&gt; for your own set of wood-be peripherals.&lt;/li&gt;  &lt;p&gt;  &lt;/p&gt;&lt;li&gt;&lt;img src="http://askbobrankin.com/blu-usb-lava-lamp.jpg" alt="USB Lava Lamp" align="right" /&gt;&lt;b style="color: rgb(153, 0, 0);"&gt;USB Lava Lamp&lt;/b&gt; - For a change of pace, hook up this nostalgic lava lamp to your computer. At a height of 6-inches and in colors of white, red, or blue, you can rest your eyes from the glare of your monitor for at least a few minutes. LavaWorld also carries USB glitter lamps, computer vacuums, and lava fans. The groovy gadgets are available at &lt;a target="_blank" href="http://www.lavaworld.com/listProducts.cfm"&gt;LavaWorld&lt;/a&gt; and various retail outlets at prices starting at $6.99.&lt;/li&gt;  &lt;p&gt;  &lt;/p&gt;&lt;li&gt;&lt;img src="http://askbobrankin.com/starwars-mimobots.jpg" alt="Star Wars mimobots" align="right" /&gt;&lt;b style="color: rgb(153, 0, 0);"&gt;Star Wars mimobots&lt;/b&gt; - Your new favorite USB storage keys just have to be mimobots. Launched in 2005, &lt;a target="_blank" href="http://lab.mimoco.com/"&gt;Mimoco&lt;/a&gt; has basically turned a simple concept into a collection with a cult following. In limited editions of 250 - 500 units, all are hi-speed and come in 256MB, 512MB, 1GB or 2GB capacities. You'll dig their Star Wars collection with Chewy and Darth Vader, now that they've recently added a Storm Trooper and R2-D2. Prices start at $79.95.&lt;/li&gt;&lt;/span&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3664591498734981084-3692284740086489575?l=developerscon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://developerscon.blogspot.com/feeds/3692284740086489575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3664591498734981084&amp;postID=3692284740086489575&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/3692284740086489575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3664591498734981084/posts/default/3692284740086489575'/><link rel='alternate' type='text/html' href='http://developerscon.blogspot.com/2008/04/looking-for-cool-technology-toys.html' title='Looking For Cool Technology Toys?'/><author><name>dr.honey (IT SURGEON)</name><uri>http://www.blogger.com/profile/05544648292773857747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://2.bp.blogspot.com/_2Hyus6YBSGk/SOmZf8_b54I/AAAAAAAAACY/GeFcnYofIHs/S220/k.jpg'/></author><thr:total>0</thr:total></entry></feed>
