<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Dennis van der Stelt</title><link>http://bloggingabout.net/blogs/dennis/default.aspx</link><description>The most votes generally drown out the best votes</description><dc:language>en</dc:language><generator>CommunityServer 2008 SP1 (Build: 30619.63)</generator><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-nc-sa/2.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/dennisvanderstelt" type="application/rss+xml" /><item><title>LINQ to SQL objects and doing in-memory queries over them</title><link>http://feeds.feedburner.com/~r/dennisvanderstelt/~3/331945206/linq-to-sql-objects-and-doing-in-memory-queries-over-them.aspx</link><pubDate>Thu, 10 Jul 2008 18:20:13 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:464649</guid><dc:creator>Dennis van der Stelt</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://bloggingabout.net/blogs/dennis/rsscomments.aspx?PostID=464649</wfw:commentRss><wfw:comment>http://bloggingabout.net/blogs/dennis/commentapi.aspx?PostID=464649</wfw:comment><comments>http://bloggingabout.net/blogs/dennis/archive/2008/07/10/linq-to-sql-objects-and-doing-in-memory-queries-over-them.aspx#comments</comments><description>&lt;p&gt;This is extremely easy and for most of you probably so obvious that you’ll start spamming me that this is time spend better on other things. But it has helped others and maybe it can help some of my visitors. I’ve used it when migrating data between two databases, where the data models were nothing alike.&lt;/p&gt;  &lt;p&gt;When you’re using LINQ to SQL and are creating new objects that are defined in your LINQ to SQL classes (or .dbml) you can still query over them before committing them to the database. Here’s an example.&lt;/p&gt;  &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;// Create root collection that we can query in our application.&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Customer&lt;/span&gt;&amp;gt; customers = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Customer&lt;/span&gt;&amp;gt;();&amp;#160; &lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;Customer&lt;/span&gt; customer = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Customer&lt;/span&gt;();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;customer.CompanyName = &lt;span style="color:#a31515;"&gt;&amp;quot;Class-A&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;customer.ContactName = &lt;span style="color:#a31515;"&gt;&amp;quot;Dennis van der Stelt&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;// Add this customer to our collection.&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;customers.Add(customer);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;Product&lt;/span&gt; product = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Product&lt;/span&gt;();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;product.ProductName = &lt;span style="color:#a31515;"&gt;&amp;quot;i pwn n00bs t-shirt&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;Order_Detail&lt;/span&gt; orderDetails = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Order_Detail&lt;/span&gt;();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;orderDetails.Product = product;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;Order&lt;/span&gt; order = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Order&lt;/span&gt;();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;order.Customer = customer;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;order.Order_Details.Add(orderDetails);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;// Select all ordered products by Dennis&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; query = &lt;span style="color:blue;"&gt;from&lt;/span&gt; c &lt;span style="color:blue;"&gt;in&lt;/span&gt; customers&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;from&lt;/span&gt; o &lt;span style="color:blue;"&gt;in&lt;/span&gt; c.Orders&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;from&lt;/span&gt; d &lt;span style="color:blue;"&gt;in&lt;/span&gt; o.Order_Details&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;select&lt;/span&gt; d.Product;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;As you can see I never used db.SubmitChanges() so it’s not in the database yet. I did however query over the in-memory collection(s) I’ve build. I’ve created a root collection &lt;em&gt;customers&lt;/em&gt; which I’ll use in my application to start querying. You can pass around the list of customers if you’d like.&lt;/p&gt;  &lt;p&gt;With this example I can go through all customers in one database and pass every product. Imagine that Alex Thissen had ordered &lt;a href="http://www.noobstore.com/prod_tshirt-m-ipwn.shtml"&gt;the same t-shirt&lt;/a&gt; (which he didn’t btw, he ordered the &lt;a href="http://www.noobstore.com/prod_tshirt-m-uber.shtml"&gt;übergamer t-shirt&lt;/a&gt; from the n00b store ;-) I’d be able to query the created products, see that it was already created and make a reference to that product, instead of (again) creating a new one.&lt;/p&gt;  &lt;p&gt;Hope that last paragraph makes sense.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=464649" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/dennisvanderstelt?a=Q8DzId"&gt;&lt;img src="http://feeds.feedburner.com/~a/dennisvanderstelt?i=Q8DzId" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dennisvanderstelt/~4/331945206" height="1" width="1"/&gt;</description><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/.NET+Framework+3.5/default.aspx">.NET Framework 3.5</category><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/LINQ/default.aspx">LINQ</category><feedburner:origLink>http://bloggingabout.net/blogs/dennis/archive/2008/07/10/linq-to-sql-objects-and-doing-in-memory-queries-over-them.aspx</feedburner:origLink></item><item><title>Waegis was launched</title><link>http://feeds.feedburner.com/~r/dennisvanderstelt/~3/331565565/waegis-was-launched.aspx</link><pubDate>Thu, 10 Jul 2008 09:04:08 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:464513</guid><dc:creator>Dennis van der Stelt</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://bloggingabout.net/blogs/dennis/rsscomments.aspx?PostID=464513</wfw:commentRss><wfw:comment>http://bloggingabout.net/blogs/dennis/commentapi.aspx?PostID=464513</wfw:comment><comments>http://bloggingabout.net/blogs/dennis/archive/2008/07/10/waegis-was-launched.aspx#comments</comments><description>&lt;p&gt;&lt;img title="waegis" height="98" alt="waegis" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/waegis_5F00_3.png" width="240" align="right" border="0" /&gt; Keyvan Nayyeri has launched his project today, something he calls “&lt;a href="http://nayyeri.net/blog/waegis-ndash-the-web-cleaner/"&gt;The Web Cleaner&lt;/a&gt;”. The official name is &lt;a href="http://waegis.com/"&gt;Waegis&lt;/a&gt; and it’s a service to filter out spam.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h3&gt;Alpha testing&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://bloggingabout.net/"&gt;BloggingAbout.NET&lt;/a&gt; joined the alpha process and we were extremely happy with the results of Waegis. To start with, installation is a breeze. This is also because of Community Server 2008 (CS2008), but you just have to copy two binaries onto the webserver and configure the Waegis spam blocker. Each CS2008 spam blocker rates every comment with some points and based on your own configuration decides if it’s possible spam or should be automatically deleted. During alpha we initially didn’t let Waegis rate comments too high, but after only a few weeks of testing we decided that if Waegis thought it was spam, it should be auto deleted.&lt;/p&gt;  &lt;p&gt;I just installed the latest version and am keeping a close eye on what Waegis does, but if everything goes as smooth as it did, Waegis is going to change the lives (or at least the mail inbox) of our bloggers.&lt;/p&gt;  &lt;h3&gt;API&lt;/h3&gt;  &lt;p&gt;You can &lt;a href="http://waegis.com/download/"&gt;download&lt;/a&gt; ‘custom’ clients for multiple Community Server versions and GraffitiCMS. But there’s also an &lt;a href="http://www.codeplex.com/waegislibrary"&gt;API available on CodePlex&lt;/a&gt; to code against. This way you could write spam blockers for every other blog engine or even Exchange server and/or Outlook.&lt;/p&gt;  &lt;h3&gt;Conclusion&lt;/h3&gt;  &lt;p&gt;We tried Akismet before but weren’t too happy about the results. Comments that were obviously spam weren’t rate by Akismet that way, but Waegis seems to do it’s job perfectly. We’ll see what the future brings, but for now &lt;a href="http://waegis.com/"&gt;Waegis is definitely worth looking into&lt;/a&gt; if you have any problems with (comment) spam.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=464513" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/dennisvanderstelt?a=AslrtQ"&gt;&lt;img src="http://feeds.feedburner.com/~a/dennisvanderstelt?i=AslrtQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dennisvanderstelt/~4/331565565" height="1" width="1"/&gt;</description><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/BloggingAbout.NET/default.aspx">BloggingAbout.NET</category><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Blogging/default.aspx">Blogging</category><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Community+Server/default.aspx">Community Server</category><feedburner:origLink>http://bloggingabout.net/blogs/dennis/archive/2008/07/10/waegis-was-launched.aspx</feedburner:origLink></item><item><title>TypeMock Isolator and LINQ</title><link>http://feeds.feedburner.com/~r/dennisvanderstelt/~3/320827788/typemock-isolator-and-linq.aspx</link><pubDate>Thu, 26 Jun 2008 21:18:49 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:461575</guid><dc:creator>Dennis van der Stelt</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://bloggingabout.net/blogs/dennis/rsscomments.aspx?PostID=461575</wfw:commentRss><wfw:comment>http://bloggingabout.net/blogs/dennis/commentapi.aspx?PostID=461575</wfw:comment><comments>http://bloggingabout.net/blogs/dennis/archive/2008/06/26/typemock-isolator-and-linq.aspx#comments</comments><description>&lt;p&gt;I’m doing some work with TypeMock and I start to love it more and more. For example, how about removing your database completely from your continuous tests? Sure you can do some database testing during the nightly build, but please keep the tests as fast as possible.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A little story about a build&lt;/strong&gt;     &lt;br /&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/table_5F00_2.png"&gt;&lt;img title="table" height="101" alt="table" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/table_5F00_thumb.png" width="332" align="right" border="0" /&gt;&lt;/a&gt;Just a few days ago on a Friday my colleague &lt;a href="http://www.alexthissen.nl/blogs/main/"&gt;Alex Thissen&lt;/a&gt; and I were planning to leave the building. Unfortunately after checking in some code, a few unit tests failed in Alex’s project. It were some really minor changes, but as it was 20:00 hours already, we weren’t as sharp anymore. After 4 trial-and-error sessions getting the test to work, we could go home. The code changes took only a few seconds, running the build took much, much longer. Mainly because Visual Studio 2008 for DB Professionals was deploying the database every time. What if we only needed that during the nightly build and actually had the continuous build running much faster?&lt;/p&gt;  &lt;p&gt;Imagine a nice little table like the one on the right. Just some Class-A trainers in there. Imagine some code retrieving the trainers.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;MyTrainer&lt;/span&gt;&amp;gt; GetTrainers()&lt;/p&gt;    &lt;p style="margin:0px;"&gt;{&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;MyTrainer&lt;/span&gt;&amp;gt; trainers = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;MyTrainer&lt;/span&gt;&amp;gt;();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:blue;"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt; con = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt;())&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; con.ConnectionString = &lt;span style="color:#a31515;"&gt;@&amp;quot;Server=.\sqlexpress;database=courses;integrated security=sspi;&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; con.Open();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt; cmd = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt;();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; cmd.Connection = con;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; cmd.CommandText = &lt;span style="color:#a31515;"&gt;&amp;quot;select * from trainers&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;SqlDataReader&lt;/span&gt; rdr = cmd.ExecuteReader();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;while&lt;/span&gt; (rdr.Read())&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;MyTrainer&lt;/span&gt; t = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MyTrainer&lt;/span&gt;();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; t.Name = rdr[&lt;span style="color:#a31515;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;].ToString();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; trainers.Add(t);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; trainers;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Normal ADO.NET code for retrieving trainers and adding them to a collection of MyTrainer objects. We could just test this with a special test database so that we always get the same results. We could create a very easy test where we just execute the &lt;em&gt;GetTrainers&lt;/em&gt; method and see what data it returns. But as this accesses the database you might want to do this in a nightly batch. To be a little more sure you don’t break the build at night, you can always run these tests from your local machine.&lt;/p&gt;  &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt;   &lt;p style="margin:0px;"&gt;[&lt;span style="color:#2b91af;"&gt;TestMethod&lt;/span&gt;]&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; GetTrainers_DBAccessed_Return7Trainers()&lt;/p&gt;    &lt;p style="margin:0px;"&gt;{&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:#2b91af;"&gt;DAL&lt;/span&gt; dal = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DAL&lt;/span&gt;();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;MyTrainer&lt;/span&gt;&amp;gt; trainers = dal.GetTrainers();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:#2b91af;"&gt;Assert&lt;/span&gt;.IsNotNull(trainers);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:#2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(7, trainers.Count());&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:#2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color:#a31515;"&gt;&amp;quot;Anko Duizer&amp;quot;&lt;/span&gt;, trainers[0].Name);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;But we really want to test the code without actually connecting to the database. You could stub out a lot, but that’s &lt;strong&gt;a lot of work&lt;/strong&gt;. Especially because the datareader is very hard to stub out. I’ve once used a &lt;a href="http://haacked.com/archive/2006/05.aspx"&gt;datareader that was running on a dataset&lt;/a&gt; with one ore more tables in it. Pretty nice, but still took a whole lot of code to fill the datareader initially.&lt;/p&gt;  &lt;p&gt;When we want to use a mocking framework like TypeMock, it still requires some code. We need to actually mock out three objects and create expectations for them. Here’s the code.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt;   &lt;p style="margin:0px;"&gt;[&lt;span style="color:#2b91af;"&gt;TestMethod&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;VerifyMocks&lt;/span&gt;]&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; GetTrainers_NoDBAccess_Return2Trainers()&lt;/p&gt;    &lt;p style="margin:0px;"&gt;{&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:blue;"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;RecordExpectations&lt;/span&gt; rec = &lt;span style="color:#2b91af;"&gt;RecorderManager&lt;/span&gt;.StartRecording())&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt; con = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt;())&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; con.ConnectionString = &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; con.Open();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt; cmd = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt;();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cmd.Connection = con;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cmd.CommandText = &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;SqlDataReader&lt;/span&gt; fakeReader = &lt;span style="color:#2b91af;"&gt;RecorderManager&lt;/span&gt;.CreateMockedObject&amp;lt;&lt;span style="color:#2b91af;"&gt;SqlDataReader&lt;/span&gt;&amp;gt;();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rec.ExpectAndReturn(cmd.ExecuteReader(), fakeReader);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rec.ExpectAndReturn(fakeReader.Read(), &lt;span style="color:blue;"&gt;true&lt;/span&gt;).Repeat(2);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rec.ExpectAndReturn(fakeReader[&lt;span style="color:#a31515;"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;].ToString(), &lt;span style="color:#a31515;"&gt;&amp;quot;Dennis van der Stelt&amp;quot;&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rec.ExpectAndReturn(fakeReader[&lt;span style="color:#a31515;"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;].ToString(), &lt;span style="color:#a31515;"&gt;&amp;quot;Alex Thissen&amp;quot;&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:#2b91af;"&gt;DAL&lt;/span&gt; dal = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DAL&lt;/span&gt;();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;MyTrainer&lt;/span&gt;&amp;gt; trainers = dal.GetTrainers();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:#2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color:#a31515;"&gt;&amp;quot;Dennis van der Stelt&amp;quot;&lt;/span&gt;, trainers[0].Name);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:#2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color:#a31515;"&gt;&amp;quot;Alex Thissen&amp;quot;&lt;/span&gt;, trainers[1].Name);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;As you can see we set up a recorder and created expectations for the values that should be returned. The &lt;em&gt;reader.Read&lt;/em&gt; method should return true twice so we can fill two MyTrainer objects with data. We then set expectations for the two times the &lt;em&gt;name&lt;/em&gt; column is accessed using the reader. When finished recording, we actually execute the code we’re testing and mocking. Of course this is a very simple implementation, but it’s to show how to mock things out. For more advanced scenarios you should check the TypeMock manual.&lt;/p&gt;  &lt;p&gt;Now let’s see how we would retrieve the same data with LINQ.&lt;/p&gt;  &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Trainer&lt;/span&gt;&amp;gt; GetTrainersViaLINQ()&lt;/p&gt;    &lt;p style="margin:0px;"&gt;{&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:#2b91af;"&gt;CoursesDataContext&lt;/span&gt; db = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;CoursesDataContext&lt;/span&gt;();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; query = &lt;span style="color:blue;"&gt;from&lt;/span&gt; t &lt;span style="color:blue;"&gt;in&lt;/span&gt; db.Trainers&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;select&lt;/span&gt; t;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; query.ToList();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;This is a lot less code. When we want to mock this out, we again use a recorder and just use the same code. However LINQ to SQL returns an IQueryable collection of Trainer objects. You can’t use &lt;em&gt;recorder.Return(someList.AsQueryable())&lt;/em&gt; inside the recording-block because then the AsQueryable would be mocked out as well. So we have to prepare the collection of trainers in advance.&lt;/p&gt;  &lt;div style="font-family:Lucida Console;font-size:10pt;color:black;background:white;border-top:windowtext 1pt solid;border-top-color:#CCCCCC;padding-top:1pt;border-left:windowtext 1pt solid;border-left-color:#CCCCCC;padding-left:1pt;border-right:windowtext 1pt solid;border-right-color:#CCCCCC;padding-right:1pt;border-bottom:windowtext 1pt solid;border-bottom-color:#CCCCCC;padding-bottom:1pt;width:100%;overflow:auto;background-color:#F5F5F5;"&gt;
&lt;p style="margin:0px;"&gt;[&lt;span style="color:#2b91af;"&gt;TestMethod&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;VerifyMocks&lt;/span&gt;]&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; GetTrainersViaLINQ_NoDBAccess_Return2Trainers()&lt;/p&gt;
&lt;p style="margin:0px;"&gt;{&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; fakeTrainers = &lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; (&lt;span style="color:blue;"&gt;new&lt;/span&gt; [] { &lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Trainer&lt;/span&gt;() { Name = &lt;span style="color:#a31515;"&gt;&amp;quot;Dennis van der Stelt&amp;quot;&lt;/span&gt; }, &lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Trainer&lt;/span&gt;() { Name = &lt;span style="color:#a31515;"&gt;&amp;quot;Alex Thissen&amp;quot;&lt;/span&gt; } }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; ).AsQueryable();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &lt;span style="color:blue;"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;RecordExpectations&lt;/span&gt; rec = &lt;span style="color:#2b91af;"&gt;RecorderManager&lt;/span&gt;.StartRecording())&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color:#2b91af;"&gt;CoursesDataContext&lt;/span&gt; db = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;CoursesDataContext&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; query = &lt;span style="color:blue;"&gt;from&lt;/span&gt; t &lt;span style="color:blue;"&gt;in&lt;/span&gt; db.Trainers&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;select&lt;/span&gt; t;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &amp;nbsp; rec.Return(fakeTrainers);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;DAL&lt;/span&gt; dal = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DAL&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Trainer&lt;/span&gt;&amp;gt; trainers = dal.GetTrainersViaLINQ();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(2, trainers.Count());&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color:#a31515;"&gt;&amp;quot;Dennis van der Stelt&amp;quot;&lt;/span&gt;, trainers.ElementAt(0).Name);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color:#a31515;"&gt;&amp;quot;Alex Thissen&amp;quot;&lt;/span&gt;, trainers.ElementAt(1).Name);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;   &lt;p&gt;You can see I prepared the &lt;em&gt;fakeTrainers&lt;/em&gt; collection in advance, start recording and set the return value to the prepared collection. I then actually execute the code inside my tested class and assert that everything’s as expected.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=461575" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/dennisvanderstelt?a=4mxD4Q"&gt;&lt;img src="http://feeds.feedburner.com/~a/dennisvanderstelt?i=4mxD4Q" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dennisvanderstelt/~4/320827788" height="1" width="1"/&gt;</description><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Agile/default.aspx">Agile</category><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/TypeMock/default.aspx">TypeMock</category><feedburner:origLink>http://bloggingabout.net/blogs/dennis/archive/2008/06/26/typemock-isolator-and-linq.aspx</feedburner:origLink></item><item><title>The new pc</title><link>http://feeds.feedburner.com/~r/dennisvanderstelt/~3/320569606/the-new-pc.aspx</link><pubDate>Thu, 26 Jun 2008 14:41:31 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:461537</guid><dc:creator>Dennis van der Stelt</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://bloggingabout.net/blogs/dennis/rsscomments.aspx?PostID=461537</wfw:commentRss><wfw:comment>http://bloggingabout.net/blogs/dennis/commentapi.aspx?PostID=461537</wfw:comment><comments>http://bloggingabout.net/blogs/dennis/archive/2008/06/26/the-new-pc.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/napkin1_5F00_2.jpg"&gt;&lt;img title="napkin1" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="137" alt="napkin1" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/napkin1_5F00_thumb.jpg" width="184" align="left" border="0" /&gt;&lt;/a&gt; &lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/napkin2_5F00_2.jpg"&gt;&lt;img title="napkin2" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="137" alt="napkin2" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/napkin2_5F00_thumb.jpg" width="184" align="right" border="0" /&gt;&lt;/a&gt;How about this, a pc in/on a napkin to use, read, write, collaborate with and more…&lt;/p&gt;  &lt;p&gt;As you see in the picture on the left, there are enough in the holder and you can grab one to work with. Or each member of the team grabs one and start drawing out ideas and exchange napkins to share ideas and work them out more.&lt;/p&gt;  &lt;p&gt;When you combine napkins you can create larger surfaces and present something to the team. The idea sounds awesome and I can only hope something like this will become reality. For now, it’s &lt;a href="http://www.nextgendesigncomp.com/entrydetail.aspx?id=863"&gt;just an idea&lt;/a&gt; from a contest. Unfortunately.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=461537" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/dennisvanderstelt?a=DMomKF"&gt;&lt;img src="http://feeds.feedburner.com/~a/dennisvanderstelt?i=DMomKF" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dennisvanderstelt/~4/320569606" height="1" width="1"/&gt;</description><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Miscellaneous/default.aspx">Miscellaneous</category><feedburner:origLink>http://bloggingabout.net/blogs/dennis/archive/2008/06/26/the-new-pc.aspx</feedburner:origLink></item><item><title>PDC08 : Meet me in Los Angeles</title><link>http://feeds.feedburner.com/~r/dennisvanderstelt/~3/314493018/pdc08-meet-me-in-los-angeles.aspx</link><pubDate>Wed, 18 Jun 2008 09:49:35 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:460461</guid><dc:creator>Dennis van der Stelt</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://bloggingabout.net/blogs/dennis/rsscomments.aspx?PostID=460461</wfw:commentRss><wfw:comment>http://bloggingabout.net/blogs/dennis/commentapi.aspx?PostID=460461</wfw:comment><comments>http://bloggingabout.net/blogs/dennis/archive/2008/06/18/pdc08-meet-me-in-los-angeles.aspx#comments</comments><description>&lt;p align="center"&gt;&lt;img title="pdc_registration" height="183" alt="pdc_registration" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/pdc_5F00_registration_5F00_3.png" width="560" border="0" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=460461" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/dennisvanderstelt?a=4LZlMe"&gt;&lt;img src="http://feeds.feedburner.com/~a/dennisvanderstelt?i=4LZlMe" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dennisvanderstelt/~4/314493018" height="1" width="1"/&gt;</description><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/PDC08/default.aspx">PDC08</category><feedburner:origLink>http://bloggingabout.net/blogs/dennis/archive/2008/06/18/pdc08-meet-me-in-los-angeles.aspx</feedburner:origLink></item><item><title>Unit tests are for functionality, not code!</title><link>http://feeds.feedburner.com/~r/dennisvanderstelt/~3/311032006/unit-tests-are-for-functionality-not-code.aspx</link><pubDate>Fri, 13 Jun 2008 09:30:48 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:460252</guid><dc:creator>Dennis van der Stelt</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://bloggingabout.net/blogs/dennis/rsscomments.aspx?PostID=460252</wfw:commentRss><wfw:comment>http://bloggingabout.net/blogs/dennis/commentapi.aspx?PostID=460252</wfw:comment><comments>http://bloggingabout.net/blogs/dennis/archive/2008/06/13/unit-tests-are-for-functionality-not-code.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://bloggingabout.net/blogs/marco/"&gt;Marco&lt;/a&gt; mailed me this morning with the following sentence&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Unit tests are meant to test functionality, NOT code! That means if you write your unit tests after the fact, you’re probably not focusing on the functionality.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This comes from two weblogs that have some unit testing comments. &lt;a href="http://www.ytechie.com/2008/06/unit-tests-are-for-functionality-not-code.html"&gt;Jason Young&lt;/a&gt; posted the sentence and he refers to &lt;a href="http://blog.obishawn.com/2008/06/why-you-should-have-100-code-test.html"&gt;Obishawn&lt;/a&gt; who also has something to say. Why I’m writing this post is for two reasons. Or three actually. The first reason is that I liked the quote. The second reason is that Obishawn tries to prove that you should even test properties, something not many people do. But his argument is that it can grow to something that you definitely would want to test, so you should have a test in place to test the functionality. He also states that you should not trust your framework and although he’s probably right, I wouldn’t test my properties because I don’t trust the framework. If that’d be the case, it’d probably be enough to test a single property because with that I’d have tested them all. I know the .NET Framework has its bugs, but I hope to find these when writing tests that target my own &lt;strike&gt;code&lt;/strike&gt; functionality.&lt;/p&gt;  &lt;p&gt;Anyway, Obishawn also provides a few lines of code to prove you should test properties. I have written a small piece of code to expands on this a bit. There are three errors in it and maybe you can spot them. Although these are extremely simple (once you know which ones I mean) it’s an example of why you should seriously consider writing tests for all your &lt;strike&gt;code&lt;/strike&gt; functionality.&lt;/p&gt;  &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;CoD4&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;Game&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;{&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;gt; _redPlayers;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;gt; _bluePlayers;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; _name;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; CoD4()&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; { &lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Name = &lt;span style="color:#a31515;"&gt;&amp;quot;Call of Duty 4&amp;quot;&lt;/span&gt;; &lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;gt; BluePlayerCount&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;get&lt;/span&gt; { &lt;span style="color:blue;"&gt;return&lt;/span&gt; BluePlayers.Count(); }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; Name&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;get&lt;/span&gt; { &lt;span style="color:blue;"&gt;return&lt;/span&gt; Name; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; AddPlayer(&lt;span style="color:blue;"&gt;string&lt;/span&gt; name)&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;base&lt;/span&gt;.AddPlayer(name);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (_redPlayers.Count &amp;lt;= _bluePlayers.Count)&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _bluePlayers.Add(name);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;else&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _redPlayers.Add(name);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=460252" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/dennisvanderstelt?a=t06FQ8"&gt;&lt;img src="http://feeds.feedburner.com/~a/dennisvanderstelt?i=t06FQ8" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dennisvanderstelt/~4/311032006" height="1" width="1"/&gt;</description><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Agile/default.aspx">Agile</category><feedburner:origLink>http://bloggingabout.net/blogs/dennis/archive/2008/06/13/unit-tests-are-for-functionality-not-code.aspx</feedburner:origLink></item><item><title>Stopwatch snippet</title><link>http://feeds.feedburner.com/~r/dennisvanderstelt/~3/309516199/stopwatch-snippet.aspx</link><pubDate>Wed, 11 Jun 2008 10:00:53 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:460143</guid><dc:creator>Dennis van der Stelt</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://bloggingabout.net/blogs/dennis/rsscomments.aspx?PostID=460143</wfw:commentRss><wfw:comment>http://bloggingabout.net/blogs/dennis/commentapi.aspx?PostID=460143</wfw:comment><comments>http://bloggingabout.net/blogs/dennis/archive/2008/06/11/stopwatch-snippet.aspx#comments</comments><description>&lt;p&gt;A little snippet that I use from time to time when I need information on how long something takes. Type ‘sw’ (without the quotes) and &lt;a href="http://blogs.msdn.com/saraford/archive/2008/06/10/did-you-know-you-can-insert-a-snippet-via-tab-tab-234.aspx"&gt;tab-tab&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Installation is easy, just create a file called “sw.snippet” in your %Documents%\Visual Studio 2008\Code Snippets folder and paste the following in the file. You can use it immediately without restarting Visual Studio.&lt;/p&gt;  &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a31515;"&gt;xml&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;utf-8&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; ?&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CodeSnippets&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CodeSnippet&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Format&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1.0.0&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Header&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Title&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Add Stopwatch code&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Title&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Shortcut&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;sw&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Shortcut&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Description&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Code snippet for adding complete Stopwatch usage and display of elapsed time.&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Description&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Author&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Dennis van der Stelt&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Author&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SnippetTypes&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SnippetType&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Expansion&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SnippetType&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SnippetTypes&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Header&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Snippet&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;References&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Reference&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Assembly&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;System.Diagnostics&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Assembly&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Reference&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;References&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Code&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Language&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;csharp&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;![CDATA[&lt;/span&gt;&lt;span style="color:gray;"&gt;Stopwatch sw = new Stopwatch();&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sw.Start();&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sw.Stop();&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TimeSpan ts = sw.Elapsed;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string elapsedTime = String.Format(&amp;quot;{0:00}:{1:00}:{2:00}.{3:00}&amp;quot;,&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ts.Hours, ts.Minutes, ts.Seconds,&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ts.Milliseconds / 10);&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(String.Format(&amp;quot;\n\nProcessing time : {0}&amp;quot;, elapsedTime));&lt;/span&gt;&lt;span style="color:blue;"&gt;]]&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Code&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Snippet&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CodeSnippet&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CodeSnippets&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=460143" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/dennisvanderstelt?a=gXb400"&gt;&lt;img src="http://feeds.feedburner.com/~a/dennisvanderstelt?i=gXb400" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dennisvanderstelt/~4/309516199" height="1" width="1"/&gt;</description><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Development/default.aspx">Development</category><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Visual+Studio+2005/default.aspx">Visual Studio 2005</category><feedburner:origLink>http://bloggingabout.net/blogs/dennis/archive/2008/06/11/stopwatch-snippet.aspx</feedburner:origLink></item><item><title>Office Live Workspace</title><link>http://feeds.feedburner.com/~r/dennisvanderstelt/~3/306364093/office-live-workspace.aspx</link><pubDate>Fri, 06 Jun 2008 21:01:49 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:459938</guid><dc:creator>Dennis van der Stelt</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://bloggingabout.net/blogs/dennis/rsscomments.aspx?PostID=459938</wfw:commentRss><wfw:comment>http://bloggingabout.net/blogs/dennis/commentapi.aspx?PostID=459938</wfw:comment><comments>http://bloggingabout.net/blogs/dennis/archive/2008/06/06/office-live-workspace.aspx#comments</comments><description>&lt;p&gt;You might know that I’m quite the Microsoft addict. While a lot of people are very sceptic with everything Microsoft releases, I tend to have a positive feeling for everything Microsoft releases, at first. After some experience, I might hate or love it, or just don’t use it because I don’t feel the need for it. Microsoft Sync, Parallel extensions and many more products and frameworks; after I get my hands dirty with it I’ll decide if it does any good for me or not.&lt;/p&gt;  &lt;p&gt;About Office Live Workspace, I know there are many alternatives to it but I really want to give this a change. Everything looks good (I almost always like Microsoft GUI&amp;#39;s), looks familiar, has a nice Office plugin and some other benefits. And hey, it’s a Microsoft product! ;-)&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I just read they released new languages and that May was a very hectic month for them. But I seriously can’t believe why they don’t introduce folders. Everyone is crying out for folders but instead of folders, we get more languages and other stuff. So I thought, let’s see when they’ll introduce folders and went to their blogs. Of course (?) you have to login to place a comment. So I click the little Passport (or Windows Live ID) login icon at the top-right corner. But I get presented a login/registration screen. First thing I thought was that this was some phising attempt for my Windows Live ID username and password. Why use the icon and have a different registration system. Heck, why a different registration system at all? So I left the blogs and decided to write a long and boring post on my own weblog. And guess what, anonymous comments are enabled! :)&lt;/p&gt;  &lt;p&gt;Anyway, I’ve registered for a workspace months ago and would really like to use it, but haven’t done so yet. Simply because of the lack of folders. I’m not even going to upload a small amount of folders to later find out I have to move every single one of them via a web interface.&lt;/p&gt;  &lt;p&gt;Please introduce folders into Office Live Workspace! Thanks.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=459938" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/dennisvanderstelt?a=BPjpf6"&gt;&lt;img src="http://feeds.feedburner.com/~a/dennisvanderstelt?i=BPjpf6" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dennisvanderstelt/~4/306364093" height="1" width="1"/&gt;</description><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Miscellaneous/default.aspx">Miscellaneous</category><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Personal/default.aspx">Personal</category><feedburner:origLink>http://bloggingabout.net/blogs/dennis/archive/2008/06/06/office-live-workspace.aspx</feedburner:origLink></item><item><title>Windows Live Writer and ZoomIt</title><link>http://feeds.feedburner.com/~r/dennisvanderstelt/~3/305558260/windows-live-writer-and-zoomit.aspx</link><pubDate>Thu, 05 Jun 2008 20:17:23 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:459872</guid><dc:creator>Dennis van der Stelt</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://bloggingabout.net/blogs/dennis/rsscomments.aspx?PostID=459872</wfw:commentRss><wfw:comment>http://bloggingabout.net/blogs/dennis/commentapi.aspx?PostID=459872</wfw:comment><comments>http://bloggingabout.net/blogs/dennis/archive/2008/06/05/windows-live-writer-and-zoomit.aspx#comments</comments><description>&lt;p&gt;Two tools I absolutely love!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Windows Live Writer     &lt;br /&gt;&lt;/strong&gt;A new version was just released, June 2nd. &lt;a href="http://windowslivewriter.spaces.live.com/blog/cns!D85741BB5E0BE8AA!1508.entry"&gt;Download it here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Sysinternals ZoomIt     &lt;br /&gt;&lt;/strong&gt;Version 2.0 was released on May 28. I just &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb897434.aspx"&gt;downloaded&lt;/a&gt; that version myself and it has some nice features. However, I did not know about all 1.x existing features myself. I just saw a part of the TechEd keynote and noticed this guy was drawing rectangles and arrows. I thought : “What tool is this guy using? Can it be my favorite tool ZoomIt?” And yes he was!!!&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Draw a &lt;strong&gt;rectangle&lt;/strong&gt; with the &lt;strong&gt;control&lt;/strong&gt; key.&lt;/li&gt;    &lt;li&gt;Draw a &lt;strong&gt;line&lt;/strong&gt; with the &lt;strong&gt;shift&lt;/strong&gt; key.&lt;/li&gt;    &lt;li&gt;Draw an &lt;strong&gt;arrow&lt;/strong&gt; with &lt;strong&gt;control and shift&lt;/strong&gt; keys.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Now I did not know that! New features in 2.0 (afaik) are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Enable a clear &lt;strong&gt;sketch pad&lt;/strong&gt; with the &lt;strong&gt;W&lt;/strong&gt; (white) key or &lt;strong&gt;K&lt;/strong&gt; (black) key.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Save&lt;/strong&gt; a drawing with &lt;strong&gt;CTRL+S&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Change pen width&lt;/strong&gt; by holding ctrl and zooming with the mouse wheel.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Sw33t!!!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=459872" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/dennisvanderstelt?a=gnfaKQ"&gt;&lt;img src="http://feeds.feedburner.com/~a/dennisvanderstelt?i=gnfaKQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dennisvanderstelt/~4/305558260" height="1" width="1"/&gt;</description><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Utilities/default.aspx">Utilities</category><feedburner:origLink>http://bloggingabout.net/blogs/dennis/archive/2008/06/05/windows-live-writer-and-zoomit.aspx</feedburner:origLink></item><item><title>VS2008 DataDude and conditional deployment</title><link>http://feeds.feedburner.com/~r/dennisvanderstelt/~3/302997437/vs2008-datadude-and-conditional-deployment.aspx</link><pubDate>Mon, 02 Jun 2008 14:18:41 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:459767</guid><dc:creator>Dennis van der Stelt</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://bloggingabout.net/blogs/dennis/rsscomments.aspx?PostID=459767</wfw:commentRss><wfw:comment>http://bloggingabout.net/blogs/dennis/commentapi.aspx?PostID=459767</wfw:comment><comments>http://bloggingabout.net/blogs/dennis/archive/2008/06/02/vs2008-datadude-and-conditional-deployment.aspx#comments</comments><description>&lt;p&gt;This has taken us some time; depending on which environment you are, telling Visual Studio 2008 for Database Professionals Edition (or simply DataDude) what user it should use to deploy the SQL scripts, during an automated build. We&amp;#39;re working with Windows XP users, Windows Vista users and Windows 2008 Server. As you might now, XP uses the &amp;quot;ASPNET&amp;quot; user to run IIS and Vista and 2008 use the &amp;quot;Network Service&amp;quot; user.&lt;/p&gt; &lt;p&gt;We&amp;#39;re using FinalBuilder, a most excellent product, which in turn is using MSBuild and were trying to figure out how to pass variables to MSBuild, who should pass them to DataDude, which in turn would have to pass them to SQLCommand. Sounds difficult, but when you&amp;#39;ve figured it out, it&amp;#39;s quite easy! :-)&lt;/p&gt; &lt;p&gt;The goal is to use &amp;quot;Network Service&amp;quot; when automated and let the user specify what user to use when running locally.&lt;/p&gt; &lt;p&gt;Here are the steps we took&lt;/p&gt; &lt;ol&gt; &lt;li&gt;We&amp;#39;re going to use the variable &lt;em&gt;TargetUser&lt;/em&gt; in the default MSBuild targets. &lt;/li&gt; &lt;ol&gt; &lt;li&gt;Open the solution with the DataDude project in it.  &lt;li&gt;Right-click the project and select &amp;quot;Unload Project&amp;quot;  &lt;li&gt;Right-click the now gray project and select &amp;quot;Edit &amp;lt;projectname.dbproj&amp;gt;&amp;quot;  &lt;li&gt;Paste the following code at the bottom, just before the &amp;lt;/Project&amp;gt; tag.&lt;br /&gt;&lt;br /&gt; &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;PropertyGroup&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Condition&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &amp;#39;$(Configuration)&amp;#39; == &amp;#39;Default&amp;#39; &lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SetVariables&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Variable&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;TargetUser&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;ASPNET&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SetVariables&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;PropertyGroup&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt; &lt;li&gt;Now the default is to use the &amp;quot;ASPNET&amp;quot; user, which we want to influence. But just remember that this value is passed on to SQLCommand when building the project.  &lt;li&gt;Change the ASPNET in the above variable to $(DatabaseUser), so you&amp;#39;ll have the following.&lt;br /&gt;&lt;br /&gt; &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;PropertyGroup&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Condition&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &amp;#39;$(Configuration)&amp;#39; == &amp;#39;Default&amp;#39; &lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SetVariables&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Variable&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;TargetUser&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;$(DatabaseUser)&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SetVariables&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;PropertyGroup&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt; &lt;li&gt;Now it&amp;#39;ll insert whatever is in the DatabaseUser property. We&amp;#39;ll still have to add it though.  &lt;li&gt;Go to the top of your .dbproj and you should notice the tag &amp;lt;PropertyGroup&amp;gt; and a lot of properties beneath it.  &lt;li&gt;Add the following property:&lt;br /&gt;&lt;br /&gt; &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DatabaseUser&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;aspnet&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DatabaseUser&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt; &lt;li&gt;Now we have the same effect as in step 4, but we&amp;#39;re providing it via a property. And properties we can change from the command-line with MSBuild!&lt;/li&gt;&lt;/ol&gt; &lt;li&gt;Running MSBuild as follows would build the script and we would pass in &amp;quot;network service&amp;quot; as user.&lt;br /&gt;&lt;br /&gt;msbuild projectname.dbproj /p:DatabaseUser=&amp;quot;Network Service&amp;quot;&lt;br /&gt; &lt;li&gt;However, we&amp;#39;re not yet using the user in our scripts!!!&lt;/li&gt; &lt;ol&gt; &lt;li&gt;For this, open (or reload) your .dbproj file again. &lt;li&gt;Find the file &lt;em&gt;Permissions.sql&lt;/em&gt; under the &lt;em&gt;Scripts/Post-Deployment&lt;/em&gt; folder. &lt;li&gt;At the top you can see the &amp;quot;creat login&amp;quot; script for either your &amp;quot;aspnet&amp;quot; or &amp;quot;network service&amp;quot; user. &lt;li&gt;With the following script you can make it decide what to use.&lt;br /&gt;&lt;strong&gt;I removed some code for clarity. The important part is the IF statement. We defined the &lt;em&gt;TargetUser&lt;/em&gt; in step 1.4 of this tutorial.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/sqlscript_5F00_2.png"&gt;&lt;img height="212" alt="sqlscript" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/sqlscript_5F00_thumb.png" width="634" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;/li&gt;&lt;/ol&gt; &lt;li&gt;Save the script and you should be done.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;If you&amp;#39;re interested how to use this in FinalBuilder, here&amp;#39;s how.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;In your FinalBuilder project, add an MSBuild action and define your dbproj file as in the following image. Pay attention to the Targets that should be executed.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/msbuild_5F00_dbproj_5F00_2.png"&gt;&lt;img height="186" alt="msbuild_dbproj" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/msbuild_5F00_dbproj_5F00_thumb.png" width="569" border="0" /&gt;&lt;/a&gt; &lt;/li&gt; &lt;li&gt;Now set the project properties on the last tab.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/msbuild_5F00_project_5F00_properties_5F00_2.png"&gt;&lt;img height="87" alt="msbuild_project_properties" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/msbuild_5F00_project_5F00_properties_5F00_thumb.png" width="472" border="0" /&gt;&lt;/a&gt; &lt;/li&gt; &lt;li&gt;I&amp;#39;ve used a %AspNetWorkerUser% variable, defined in FinalBuilder self. Here&amp;#39;s how...&lt;/li&gt; &lt;li&gt;Before building your project, add a &amp;quot;Define variable&amp;quot; action.&lt;br /&gt;Here&amp;#39;s how I configured mine.&lt;br /&gt;I&amp;#39;ve used &amp;quot;MyAspNetWorkerUser&amp;quot; and set it as a user variable. Later on I copy this variable to a project variable. Just a personal preference. You do need a user variable though, but don&amp;#39;t set a default value. We need this to be empty.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/fb_5F00_aspnetuser_5F00_4.png"&gt;&lt;img height="334" alt="fb_aspnetuser" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/fb_5F00_aspnetuser_5F00_thumb_5F00_1.png" width="456" border="0" /&gt;&lt;/a&gt; &lt;/li&gt; &lt;li&gt;Define an &amp;quot;If ... then&amp;quot; action. Make sure that if your AspNetWorkerUser is empty, it executes the underlying action(s).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/fb_5F00_ifthen_5F00_2.png"&gt;&lt;img height="102" alt="fb_ifthen" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/fb_5F00_ifthen_5F00_thumb.png" width="333" border="0" /&gt;&lt;/a&gt; &lt;/li&gt; &lt;li&gt;Now add a &amp;quot;Choose one&amp;quot; action. I&amp;#39;ve setup mine as follows:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/fb_5F00_chooseone_5F00_2.png"&gt;&lt;img height="222" alt="fb_chooseone" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/fb_5F00_chooseone_5F00_thumb.png" width="452" border="0" /&gt;&lt;/a&gt; &lt;/li&gt; &lt;li&gt;The final result should be something like this&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/fb_5F00_flow_5F00_2.png"&gt;&lt;img height="108" alt="fb_flow" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/fb_5F00_flow_5F00_thumb.png" width="595" border="0" /&gt;&lt;/a&gt; &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Good luck! :-)&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:dbf35706-c875-45fc-8584-fcc234daac0c" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/FinalBuilder" rel="tag"&gt;FinalBuilder&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MSBuild" rel="tag"&gt;MSBuild&lt;/a&gt;,&lt;a href="http://technorati.com/tags/TeamBuild" rel="tag"&gt;TeamBuild&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Visual%20Studio%202008" rel="tag"&gt;Visual Studio 2008&lt;/a&gt;,&lt;a href="http://technorati.com/tags/VS2008" rel="tag"&gt;VS2008&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DataDude" rel="tag"&gt;DataDude&lt;/a&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=459767" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/dennisvanderstelt?a=69BVxv"&gt;&lt;img src="http://feeds.feedburner.com/~a/dennisvanderstelt?i=69BVxv" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dennisvanderstelt/~4/302997437" height="1" width="1"/&gt;</description><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Development/default.aspx">Development</category><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Visual+Studio+2005/default.aspx">Visual Studio 2005</category><feedburner:origLink>http://bloggingabout.net/blogs/dennis/archive/2008/06/02/vs2008-datadude-and-conditional-deployment.aspx</feedburner:origLink></item><item><title>PDC2008</title><link>http://feeds.feedburner.com/~r/dennisvanderstelt/~3/299816436/pdc2008.aspx</link><pubDate>Wed, 28 May 2008 12:41:09 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:459564</guid><dc:creator>Dennis van der Stelt</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://bloggingabout.net/blogs/dennis/rsscomments.aspx?PostID=459564</wfw:commentRss><wfw:comment>http://bloggingabout.net/blogs/dennis/commentapi.aspx?PostID=459564</wfw:comment><comments>http://bloggingabout.net/blogs/dennis/archive/2008/05/28/pdc2008.aspx#comments</comments><description>&lt;p&gt;It&amp;#39;s happening&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.microsoftpdc.com/"&gt;Website&lt;/a&gt;  &lt;li&gt;Become &lt;a href="http://www.facebook.com/pages/Microsoft-PDC/28139848832"&gt;a facebook fan&lt;/a&gt;  &lt;li&gt;Follow everything on &lt;a href="http://twitter.com/pdc2008"&gt;Twitter&lt;/a&gt;  &lt;li&gt;See &lt;a href="http://www.flickr.com/groups/pdc2008/"&gt;pictures on Flickr&lt;/a&gt;  &lt;li&gt;Get to know more about the &lt;a href="http://microsoftpdc.com/Social/AttendeeParty.aspx"&gt;party&lt;/a&gt;  &lt;li&gt;Get some &lt;a href="http://microsoftpdc.com/Social/Bling.aspx"&gt;bling bling&lt;/a&gt; for on your weblog  &lt;li&gt;&lt;a href="http://microsoftpdc.com/Registration/"&gt;Register&lt;/a&gt; for the event&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=459564" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/dennisvanderstelt?a=y6qWy0"&gt;&lt;img src="http://feeds.feedburner.com/~a/dennisvanderstelt?i=y6qWy0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dennisvanderstelt/~4/299816436" height="1" width="1"/&gt;</description><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/PDC08/default.aspx">PDC08</category><feedburner:origLink>http://bloggingabout.net/blogs/dennis/archive/2008/05/28/pdc2008.aspx</feedburner:origLink></item><item><title>Programmatically creating an IIS7 site</title><link>http://feeds.feedburner.com/~r/dennisvanderstelt/~3/291656176/programmatically-creating-an-iis7-site.aspx</link><pubDate>Fri, 16 May 2008 13:52:46 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:459025</guid><dc:creator>Dennis van der Stelt</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://bloggingabout.net/blogs/dennis/rsscomments.aspx?PostID=459025</wfw:commentRss><wfw:comment>http://bloggingabout.net/blogs/dennis/commentapi.aspx?PostID=459025</wfw:comment><comments>http://bloggingabout.net/blogs/dennis/archive/2008/05/16/programmatically-creating-an-iis7-site.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;m using FinalBuilder to build and deploy websites on our test server. FinalBuilder is a great product, but our client is using Windows Server 2008 and FinalBuilder does not have actions for IIS7. I might add the actions to my weblog, but here&amp;#39;s some code to create a new IIS7 website using C#.&lt;/p&gt; &lt;p&gt;Create a new solution and add a reference to C:\Windows\System32\InetServ\Microsoft.Web.Administration.dll. Paste the following code and you&amp;#39;ve got yourself a website on port 82 using the default application pool. In IIS it&amp;#39;s named &lt;em&gt;MyCoolWebsite&lt;/em&gt;.&lt;/p&gt; &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.Linq;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.Text;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; Microsoft.Web.Administration;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;namespace&lt;/span&gt; TestApp&lt;/p&gt; &lt;p style="margin:0px;"&gt;{&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Program&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp; {&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args)&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt; siteName = &lt;span style="color:#a31515;"&gt;&amp;quot;MyCoolWebsite&amp;quot;&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt; applicationPoolName = &lt;span style="color:#a31515;"&gt;&amp;quot;DefaultAppPool&amp;quot;&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt; virtualDirectoryPath = &lt;span style="color:#a31515;"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt; virtualDirectoryPhysicalPath = &lt;span style="color:#a31515;"&gt;&amp;quot;C:\\temp\\&amp;quot;&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt; ipAddress = &lt;span style="color:#a31515;"&gt;&amp;quot;*&amp;quot;&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt; tcpPort = &lt;span style="color:#a31515;"&gt;&amp;quot;81&amp;quot;&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt; hostHeader = &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt; applicationPath = &lt;span style="color:#a31515;"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;long&lt;/span&gt; highestId = 1;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;ServerManager&lt;/span&gt; mgr = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ServerManager&lt;/span&gt;())&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;Site&lt;/span&gt; site = mgr.Sites[&lt;span style="color:#a31515;"&gt;&amp;quot;siteName&amp;quot;&lt;/span&gt;];&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (site != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt;; &lt;span style="color:green;"&gt;// Site bestaat al&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;ApplicationPool&lt;/span&gt; appPool = mgr.ApplicationPools[applicationPoolName];&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (appPool == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Exception&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;&amp;quot;Application Pool: {0} does not exist.&amp;quot;&lt;/span&gt;, applicationPoolName));&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;Site&lt;/span&gt; mysite &lt;span style="color:blue;"&gt;in&lt;/span&gt; mgr.Sites)&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (mysite.Id &amp;gt; highestId)&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; highestId = mysite.Id;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; highestId++;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; site = mgr.Sites.CreateElement();&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; site.SetAttributeValue(&lt;span style="color:#a31515;"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;, siteName);&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; site.Id = highestId;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; site.Bindings.Clear();&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt; bind = ipAddress + &lt;span style="color:#a31515;"&gt;&amp;quot;:&amp;quot;&lt;/span&gt; + tcpPort + &lt;span style="color:#a31515;"&gt;&amp;quot;:&amp;quot;&lt;/span&gt; + hostHeader;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;Binding&lt;/span&gt; binding = site.Bindings.CreateElement();&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; binding.Protocol = &lt;span style="color:#a31515;"&gt;&amp;quot;http&amp;quot;&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; binding.BindingInformation = bind;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; site.Bindings.Add(binding);&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//site.Bindings.Add(bind, &amp;quot;http&amp;quot;);&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt; app = site.Applications.CreateElement();&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; app.Path = applicationPath;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; app.ApplicationPoolName = applicationPoolName;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;VirtualDirectory&lt;/span&gt; vdir = app.VirtualDirectories.CreateElement();&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vdir.Path = virtualDirectoryPath;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vdir.PhysicalPath = virtualDirectoryPhysicalPath;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; app.VirtualDirectories.Add(vdir);&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; site.Applications.Add(app);&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mgr.Sites.Add(site);&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mgr.CommitChanges();&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt; &lt;p style="margin:0px;"&gt;&amp;nbsp; }&lt;/p&gt; &lt;p style="margin:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=459025" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/dennisvanderstelt?a=wXIFUd"&gt;&lt;img src="http://feeds.feedburner.com/~a/dennisvanderstelt?i=wXIFUd" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dennisvanderstelt/~4/291656176" height="1" width="1"/&gt;</description><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Development/default.aspx">Development</category><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Miscellaneous/default.aspx">Miscellaneous</category><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Utilities/default.aspx">Utilities</category><feedburner:origLink>http://bloggingabout.net/blogs/dennis/archive/2008/05/16/programmatically-creating-an-iis7-site.aspx</feedburner:origLink></item><item><title>Community Server 2008</title><link>http://feeds.feedburner.com/~r/dennisvanderstelt/~3/274509642/community-server-2008.aspx</link><pubDate>Mon, 21 Apr 2008 07:05:48 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:458256</guid><dc:creator>Dennis van der Stelt</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://bloggingabout.net/blogs/dennis/rsscomments.aspx?PostID=458256</wfw:commentRss><wfw:comment>http://bloggingabout.net/blogs/dennis/commentapi.aspx?PostID=458256</wfw:comment><comments>http://bloggingabout.net/blogs/dennis/archive/2008/04/21/community-server-2008.aspx#comments</comments><description>&lt;p&gt;Now that was a smooth transition. Within minutes BloggingAbout.NET was upgraded from version 2007.1 to Community Server 2008. We&amp;#39;ve gotten a brand new license from the great folks over at &lt;a href="http://telligent.com/"&gt;Telligent&lt;/a&gt;, the folks behind &lt;a href="http://communityserver.com/"&gt;Community Server&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;For logged in users, the &lt;a href="http://bloggingabout.net/"&gt;frontpage&lt;/a&gt; will show recent activity of blogs, posts, threads and friends you&amp;#39;re linked to or were active in. Not logged in users will see a welcome message and latest activities. That page is quite empty with no recent activity, I&amp;#39;m looking into it why this is. Also not all posts for every blog comes up in the &lt;a href="http://bloggingabout.net/blogs/"&gt;blogs overview&lt;/a&gt; when you&amp;#39;re not logged in.&lt;/p&gt; &lt;p&gt;If you see any other problems or have questions, don&amp;#39;t hesitate to &lt;a href="http://bloggingabout.net/blogs/dennis/contact.aspx"&gt;contact us&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Thanks,&lt;br /&gt;Dennis van der Stelt&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=458256" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/dennisvanderstelt?a=CJKrNt"&gt;&lt;img src="http://feeds.feedburner.com/~a/dennisvanderstelt?i=CJKrNt" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dennisvanderstelt/~4/274509642" height="1" width="1"/&gt;</description><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/BloggingAbout.NET/default.aspx">BloggingAbout.NET</category><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Community+Server/default.aspx">Community Server</category><feedburner:origLink>http://bloggingabout.net/blogs/dennis/archive/2008/04/21/community-server-2008.aspx</feedburner:origLink></item><item><title>Community Server on Windows 2008</title><link>http://feeds.feedburner.com/~r/dennisvanderstelt/~3/271392001/community-server-on-windows-2008.aspx</link><pubDate>Wed, 16 Apr 2008 12:17:14 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:458222</guid><dc:creator>Dennis van der Stelt</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://bloggingabout.net/blogs/dennis/rsscomments.aspx?PostID=458222</wfw:commentRss><wfw:comment>http://bloggingabout.net/blogs/dennis/commentapi.aspx?PostID=458222</wfw:comment><comments>http://bloggingabout.net/blogs/dennis/archive/2008/04/16/community-server-on-windows-2008.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;TAGS&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;When you&amp;#39;ve installed Community Server on Windows 2008 and especially are running under IIS7, you&amp;#39;ll probably get some problems with at least your tags. Community Server will throw a 404 &amp;quot;Page not found&amp;quot; error on tags with spaces. If that&amp;#39;s the case, open up your web.config and paste the following code at the bottom, but within the &amp;quot;configuration&amp;quot; tags.&lt;/p&gt; &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;system.webServer&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;security&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;requestFiltering&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;allowDoubleEscaping&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;security&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;system.webServer&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;Now IIS7 might still throw an error because the configuration won&amp;#39;t allow you to overrule the default setting. In &lt;a href="http://support.microsoft.com/kb/942076"&gt;this knowledge base article&lt;/a&gt; you&amp;#39;ll find more information.&lt;/p&gt; &lt;p&gt;Find the following file &lt;strong&gt;%windir%\System32\inetsrv\config\applicationHost.config&lt;/strong&gt; and open it in Notepad under Administrator permissions. Find the key &amp;#39;requestFiltering&amp;#39; and set overrideModeDefault to &amp;quot;Allow&amp;quot; instead of &amp;quot;Deny&amp;quot;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;AVATARS&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;When your avatars aren&amp;#39;t showing, it might be because you&amp;#39;re running in &amp;quot;Classic .NET AppPool&amp;quot; mode and not in &amp;quot;Integrated Pipeline&amp;quot;. Change it and it should work.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=458222" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/dennisvanderstelt?a=AEN5gH"&gt;&lt;img src="http://feeds.feedburner.com/~a/dennisvanderstelt?i=AEN5gH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dennisvanderstelt/~4/271392001" height="1" width="1"/&gt;</description><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Community+Server/default.aspx">Community Server</category><feedburner:origLink>http://bloggingabout.net/blogs/dennis/archive/2008/04/16/community-server-on-windows-2008.aspx</feedburner:origLink></item><item><title>New BloggingAbout.NET Server</title><link>http://feeds.feedburner.com/~r/dennisvanderstelt/~3/268767230/new-bloggingabout-net-server.aspx</link><pubDate>Fri, 11 Apr 2008 18:17:47 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:458188</guid><dc:creator>Dennis van der Stelt</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://bloggingabout.net/blogs/dennis/rsscomments.aspx?PostID=458188</wfw:commentRss><wfw:comment>http://bloggingabout.net/blogs/dennis/commentapi.aspx?PostID=458188</wfw:comment><comments>http://bloggingabout.net/blogs/dennis/archive/2008/04/11/new-bloggingabout-net-server.aspx#comments</comments><description>&lt;p&gt;If you&amp;#39;re looking at this, you&amp;#39;re looking at BloggingAbout.NET on a brand new 19&amp;quot; server that&amp;#39;s dedicated to BloggingAbout.NET. We were hosted on a server with about 100 or 200 other sites and we were pulling so much traffic and resources that our sponsor has decided to give us a brand new 19&amp;quot; in their own rack. Here are some pictures.&lt;/p&gt; &lt;p style="text-align:center;" align="center"&gt;&lt;a title="BloggingAbout.NET Server by Dennis van der Stelt, on Flickr" href="http://www.flickr.com/photos/dvdstelt/2384627893/"&gt;&lt;img height="180" alt="BloggingAbout.NET Server" src="http://farm3.static.flickr.com/2094/2384627893_3eed244459_m.jpg" width="240" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a title="BloggingAbout.NET Server by Dennis van der Stelt, on Flickr" href="http://www.flickr.com/photos/dvdstelt/2384630309/"&gt;&lt;img height="180" alt="BloggingAbout.NET Server" src="http://farm3.static.flickr.com/2246/2384630309_4893bda79b_m.jpg" width="240" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Although this won&amp;#39;t be the only site on this server, all will be personal sites and will probably not pull as much traffic as this one. With uncompressed traffic we were pulling over 2.5 Gigabytes a day. On this new server we should be running much faster and hopefully never go down, although that&amp;#39;s all up to me now, with some support from our sponsor of course. Thanks to &lt;a href="http://www.tellus.com/" target="_blank"&gt;Tellus&lt;/a&gt; for providing this!&lt;/p&gt; &lt;p&gt;The first site I tested this with is my brand new personal site &lt;a href="http://dennisvanderstelt.nl/"&gt;http://dennisvanderstelt.nl/&lt;/a&gt; running on GraffitiCMS. Although it&amp;#39;s in Dutch, it&amp;#39;s probably worth taking a look.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=458188" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/dennisvanderstelt?a=imygwD"&gt;&lt;img src="http://feeds.feedburner.com/~a/dennisvanderstelt?i=imygwD" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dennisvanderstelt/~4/268767230" height="1" width="1"/&gt;</description><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/BloggingAbout.NET/default.aspx">BloggingAbout.NET</category><category domain="http://bloggingabout.net/blogs/dennis/archive/tags/Personal/default.aspx">Personal</category><feedburner:origLink>http://bloggingabout.net/blogs/dennis/archive/2008/04/11/new-bloggingabout-net-server.aspx</feedburner:origLink></item></channel></rss>
