<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>VB.NET</title>
        <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/category/58.aspx</link>
        <description>VB.NET</description>
        <language>en-US</language>
        <copyright>Shawn Weisfeld</copyright>
        <generator>Subtext Version 2.1.2.2</generator>
        <item>
            <title>Populating a Generic List in VB.NET</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2009/06/16/populating-a-generic-list-in-vb-net.aspx</link>
            <description>&lt;p&gt;Got a question on how to populate a generic list in VB.NET, and while I am a C# guy, I figured I would show some VB.NET love. &lt;/p&gt;  &lt;p&gt;For this example I will be using a customer class, he is real simple just 2 properties. One for first name and one for last name. &lt;/p&gt;  &lt;p /&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; Customer&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Private&lt;/span&gt; _first_name &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; FirstName() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Get&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            &lt;span class="kwrd"&gt;Return&lt;/span&gt; _first_name&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Set&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            _first_name = value&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Set&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Private&lt;/span&gt; _last_name &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; LastName() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Get&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            &lt;span class="kwrd"&gt;Return&lt;/span&gt; _last_name&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Set&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            _last_name = value&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Set&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p /&gt;

&lt;p&gt;Now that I have a class I can new up a list of that type:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; customers &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; List(Of Customer)&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p /&gt;

&lt;p&gt;Now I can create an object of type customer set its properties and add it to the list:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; c &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Customer&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        c.FirstName = &lt;span class="str"&gt;"Shawn"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        c.LastName = &lt;span class="str"&gt;"Weisfeld"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        customers.Add(c)&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;That is a bit tedious, lets simplify using the with statement:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; c2 &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Customer&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        &lt;span class="kwrd"&gt;With&lt;/span&gt; c2&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            .FirstName = &lt;span class="str"&gt;"Shawn"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            .LastName = &lt;span class="str"&gt;"Weisfeld"&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;With&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        customers.Add(c2)&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p /&gt;

&lt;p&gt;Still too long, how about we create a constructor by adding the following code to our customer object: (NOTE: that I create 2 constructors, the first one that has no parameters is created by us automatically by VB.NET, however when we specify our own constructor VB.NET doesn’t give us the default one for free, so we have to code him up, assuming we wanted to have a parameter-less constructor)&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt;()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; first_name &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; last_name &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Me&lt;/span&gt;.FirstName = first_name&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Me&lt;/span&gt;.LastName = last_name&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;Now that I have the constructor I can now new up the customer and add him to my list in one line of code:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        customers.Add(&lt;span class="kwrd"&gt;New&lt;/span&gt; Customer(&lt;span class="str"&gt;"Shawn"&lt;/span&gt;, &lt;span class="str"&gt;"Weisfeld"&lt;/span&gt;))&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt; &lt;/div&gt;

&lt;div class="csharpcode"&gt;Well that is all good, but what if we don’t own the class and cannot add constructors. Well VS.NET 2008 (.NET 3.5) includes something called Object Initializers:&lt;/div&gt;

&lt;div class="csharpcode"&gt; &lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; c3 = &lt;span class="kwrd"&gt;New&lt;/span&gt; Customer() &lt;span class="kwrd"&gt;With&lt;/span&gt; {.FirstName = &lt;span class="str"&gt;"Shawn"&lt;/span&gt;, .LastName = &lt;span class="str"&gt;"Weisfeld"&lt;/span&gt;}&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        customers.Add(c3)&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;That is better and we can even get it to a 1 line-er:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        customers.Add(&lt;span class="kwrd"&gt;New&lt;/span&gt; Customer() &lt;span class="kwrd"&gt;With&lt;/span&gt; {.FirstName = &lt;span class="str"&gt;"Shawn"&lt;/span&gt;, .LastName = &lt;span class="str"&gt;"Weisfeld"&lt;/span&gt;})&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Now your objects can go forth an multiply!&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/302.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2009/06/16/populating-a-generic-list-in-vb-net.aspx</guid>
            <pubDate>Tue, 16 Jun 2009 05:17:35 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/302.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2009/06/16/populating-a-generic-list-in-vb-net.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/302.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/302.aspx</trackback:ping>
        </item>
        <item>
            <title>What do your error messages reveal?</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2009/03/09/what-do-your-error-messages-reveal.aspx</link>
            <description>&lt;p mce_keep="true"&gt;I know that most of you all know this already, but I figured it was worth a blog post since I just saw this from &lt;a href="http://www.autosite.com/"&gt;http://www.autosite.com&lt;/a&gt;. I got this very informative error message back when using their site earlier. . . &lt;/p&gt;
&lt;p mce_keep="true"&gt;Query Of Queries runtime error.&lt;br /&gt;Expected type STRING but encountered type NULL on the left of the LIKE condition  &lt;br /&gt;The error occurred in D:\INETPUB\wwwroot\content\Research\kbb\act_valueReport.cfm: line 74 &lt;br /&gt;Called from D:\INETPUB\WWWROOT\content\Research\kbb\index.cfm: line 21&lt;br /&gt;72 : &lt;br /&gt;73 :  &amp;lt;cfmodule template="mod_kbbtable.cfm" width="#kbbModTableWidth#"&amp;gt;&lt;br /&gt;74 :  &amp;lt;cfquery dbtype="query" name="qEquip"&amp;gt;&lt;br /&gt;75 :  SELECT * FROM valueReport.Equipments WHERE GroupCode LIKE 'M' ORDER BY DisplayOrder&lt;br /&gt;76 :  &amp;lt;/cfquery&amp;gt;&lt;/p&gt;
&lt;p mce_keep="true"&gt;While it is important for us as developers to log this type of information, there is NO reason for us to show it to our customers. Now I know table names, physical paths, and other good stuff. In your asp.net applicaitons make sure you set your customer errors to “On” (&lt;a href="http://msdn.microsoft.com/en-us/library/h0hfz6fc.aspx"&gt;http://msdn.microsoft.com/en-us/library/h0hfz6fc.aspx&lt;/a&gt;). You also want to make sure that you have logging so that you as the developer can triage errors. &lt;/p&gt;
&lt;p mce_keep="true"&gt;Oh and here is a BONUS TIP: Don’t use Select *, in most cases you don’t need all the columns and there is no reason to have the DB send them all back. . . . &lt;/p&gt;
&lt;p mce_keep="true"&gt;Let’s start a campaign to call out any website that we see on the internet that doesn’t properly hide their dirty laundry. &lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/281.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2009/03/09/what-do-your-error-messages-reveal.aspx</guid>
            <pubDate>Mon, 09 Mar 2009 17:46:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/281.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2009/03/09/what-do-your-error-messages-reveal.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/281.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/281.aspx</trackback:ping>
        </item>
        <item>
            <title>A review of Professional DotNetNuke 5: Open Source Web Application Framework for ASP.NET from Wrox</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2009/03/01/a-review-of-professional-dotnetnuke-5-open-source-web-application.aspx</link>
            <description>&lt;p&gt;A few weeks ago I got a copy of Professional DotNetNuke 5: Open Source Web Application Framework for ASP.NET (&lt;a href="http://www.amazon.com/Professional-DotNetNuke-Application-Framework-ASP-NET/dp/0470438703/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1235867832&amp;amp;sr=8-1"&gt;http://www.amazon.com/Professional-DotNetNuke-Application-Framework-ASP-NET/dp/0470438703/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1235867832&amp;amp;sr=8-1&lt;/a&gt;). Figured since I had been to presentations by 3 of the 5 authors I just had to have the book. Brian Scarbeau, Stan Schultes and Ryan Morgan are avid speakers in the Florida .NET community and knowing them I knew this book was going to be a good read. A cross country flight from Dallas Texas to Seattle Washington provided the perfect opportunity to concentrate on reading a new book. &lt;/p&gt;
&lt;p&gt;While waiting for my plane to take off I made it through the first chapter of the book written by the father of DotNetNuke Shaun Walker. This chapter talks about the history of where DNN came from and trials and tribulations that Shaun and his team had giving birth to what we know today. I think that anyone that is interested in starting an open source product should spend a few minutes and learn from the lessons that Shaun learned in the creation of DNN, especially if you are trying to build an open source product that sits on the very not open source Windows platform. &lt;/p&gt;
&lt;p&gt;The next few chapters of the book provide information on just about everything that administrator/end-user would need to know in order to go from an empty hosting account to having a DNN site. This includes installation, an overview of the modules and how to administer the lot. The next chunk of the book talks about the architecture of DNN. For years I have been telling developers looking for reference architectures to look at products like DNN. This set of chapters not only includes information on how the DNN team did what they did, but perhaps more importantly WHY they did it that way. For me knowing the why behind these types of decisions allows me to leverage the lessons learned by other developers and apply that to my applications, even non-DNN applications. The ability to learn from the experience/knowledge/mistakes of others makes us all better developers. The last chunk of the book is the how to information that you need to extend DNN. They cover modules, skinning, and distribution. &lt;/p&gt;
&lt;p&gt;This book provides a good overview of all the major components in the DNN products. It covers the architecture of the DNN infrastructure and how to extend it with your own custom modules and skins. This book provides the developer and the administrator what they need to get their feet wet with DNN, and as an added bonus you get a great narrative on the birth of an open source software package.&lt;/p&gt;
&lt;p&gt;BTW: At the time I wrote this DNN was the second most popular download on codeplex with just fewer than 20,000 downloads in the last 7 days. The only thing that beat it was a plug-in for World of Warcraft.  &lt;/p&gt;
&lt;p&gt;Oh and when my family needed a website for their small business guess what they got? (&lt;a href="http://www.apickygourmet.com/"&gt;http://www.apickygourmet.com&lt;/a&gt;)&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/280.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2009/03/01/a-review-of-professional-dotnetnuke-5-open-source-web-application.aspx</guid>
            <pubDate>Sun, 01 Mar 2009 07:12:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/280.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2009/03/01/a-review-of-professional-dotnetnuke-5-open-source-web-application.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/280.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/280.aspx</trackback:ping>
        </item>
        <item>
            <title>Ramp Up</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2009/01/06/ramp-up.aspx</link>
            <description>&lt;p mce_keep="true"&gt;Microsoft has started a new program called Ramp UP (&lt;a href="http://msdn.microsoft.com/en-us/rampup/default.aspx" mce_href="http://msdn.microsoft.com/en-us/rampup/default.aspx"&gt;http://msdn.microsoft.com/en-us/rampup/default.aspx&lt;/a&gt;). “Ramp Up is a free, online, community-based learning program, with a number of different tracks that will help you build your portfolio of professional development skills. Ramp Up has a solid foundation of premium technical content from subject-matter gurus, and provides easy-to-access content in a variety of forms that guide you in learning the important skills.”&lt;br /&gt;At this time they have 6 tracks. . . &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div mce_keep="true"&gt;SharePoint for Developers (Part 1)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div mce_keep="true"&gt;Visual Studio 2008&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div mce_keep="true"&gt;Aspiring Developer (migrating to VS 2005)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div mce_keep="true"&gt;Java Developer (migrating to VS 2005)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div mce_keep="true"&gt;VB 6.0 Developer (migrating to VS 2005)&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div mce_keep="true"&gt;VS 2002/2003 Developer (migrating to VS 2005)&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p mce_keep="true"&gt;Check it out!&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/276.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2009/01/06/ramp-up.aspx</guid>
            <pubDate>Tue, 06 Jan 2009 18:08:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/276.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2009/01/06/ramp-up.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/276.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/276.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET charting controls</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2008/12/05/asp-net-charting-controls.aspx</link>
            <description>&lt;p mce_keep="true"&gt;Microsoft released a set of controls called the ASP.NET charting controls. I don’t know if they licensed this from Dundas, however in one of my projects I was able to replace Dundas with this in about 30 min. Most of the class names are the same. Oh and they are FREE!!!!! The only caveat is that you have to be using .NET 3.5.&lt;/p&gt;
&lt;p mce_keep="true"&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/274.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2008/12/05/asp-net-charting-controls.aspx</guid>
            <pubDate>Fri, 05 Dec 2008 19:04:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/274.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2008/12/05/asp-net-charting-controls.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/274.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/274.aspx</trackback:ping>
        </item>
        <item>
            <title>WCF &amp;amp; Using Statements</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2008/11/13/wcf-amp-using-statements.aspx</link>
            <description>&lt;p mce_keep="true"&gt;I was attending the Dallas Connected Systems UG last night (&lt;a href="http://biztalkusergroup.com/" mce_href="http://biztalkusergroup.com/"&gt;http://biztalkusergroup.com/&lt;/a&gt;) and during the presentation I made the bold assertion that one should NOT use the "using statement" when working with WCF. Now I am a HUGE proponent of the using statement in normal circumstances. IMHO if it implements IDisposable use the using statement, except with WCF. This has to do with the way that WCF errors out and when that happens how the connection gets closed. . . &lt;br /&gt;&lt;br /&gt;Doing my best LeVar Burton "But you don't have to take my word for it" (&lt;a href="http://en.wikipedia.org/wiki/Reading_Rainbow" mce_href="http://en.wikipedia.org/wiki/Reading_Rainbow"&gt;http://en.wikipedia.org/wiki/Reading_Rainbow&lt;/a&gt;). Microsoft even says it in the documentation, "You should not use the using statement (Using in Visual Basic) because it may mask exceptions in certain failure modes. " (&lt;a href="http://msdn.microsoft.com/en-us/library/ms735103.aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms735103.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms735103.aspx&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Also check out a post by Dan Rigsby that goes into more detail. &lt;a href="http://www.danrigsby.com/blog/index.php/2008/02/26/dont-wrap-wcf-service-hosts-or-clients-in-a-using-statement/" mce_href="http://www.danrigsby.com/blog/index.php/2008/02/26/dont-wrap-wcf-service-hosts-or-clients-in-a-using-statement/"&gt;http://www.danrigsby.com/blog/index.php/2008/02/26/dont-wrap-wcf-service-hosts-or-clients-in-a-using-statement/&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/271.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2008/11/13/wcf-amp-using-statements.aspx</guid>
            <pubDate>Thu, 13 Nov 2008 17:29:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/271.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2008/11/13/wcf-amp-using-statements.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/271.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/271.aspx</trackback:ping>
        </item>
        <item>
            <title>Microsoft Web Platform Installer</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2008/11/04/microsoft-web-platform-installer.aspx</link>
            <description>While I was not able to attend PDC, Microsoft did good by the community and has provided free recordings of many of the sessions (&lt;a href="http://www.microsoftpdc.com/"&gt;http://www.microsoftpdc.com&lt;/a&gt;). While this is cool and has some great content, the purpose of this blog post is to talk about the Microsoft Web Platform Installer (&lt;a href="http://www.microsoft.com/web/channel/products/WebPlatformInstaller.aspx"&gt;http://www.microsoft.com/web/channel/products/WebPlatformInstaller.aspx&lt;/a&gt;). This tool allows for single deployment model for all the bits and pieces needed to put together a clean PC image for a developer use (i.e. VS.NET, SQL SVR, and IIS). IMHO this is a great idea and Microsoft is only scratching the surface of what they could  do in this space. Currently the tool works for the express editions, which is good for the hobbyist and more importantly at schools. With my experiences teaching .NET at the University anything that helps bring students into a working development environment faster and easier is goodness. However this will become much more valuable when it gets pushed into the enterprise environment. Currently one of the most frustrating jobs that I have my day job is helping team members with the setup of development machines. Anything that MSFT can do to stream line and reduce errors in the process of installing the entire suite of development tools is much appreciated.&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/270.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2008/11/04/microsoft-web-platform-installer.aspx</guid>
            <pubDate>Tue, 04 Nov 2008 07:39:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/270.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2008/11/04/microsoft-web-platform-installer.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/270.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/270.aspx</trackback:ping>
        </item>
        <item>
            <title>Building a solution with many projects is SLOWWWWWWW</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2008/06/04/building-a-solution-with-many-projects-is-slowwwwwww.aspx</link>
            <description>&lt;p&gt;This week I am attending TechEd in Orlando FL and I was honored to be requested to work the C# booth by the MVP and C# teams. I got many great questions from attendees and I thought I would post some of the more interesting ones. So here goes. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;An attendee, let’s call him Bob, came up and said that his builds were very slow. After some chatting Bob told me that he has a huge number of projects in his solution all “joined” together using project references. This is a convent feature of Visual Studio that provides for “cascading” builds. By that I mean if you change some code in a business library when VS does the build it will build that library first, copy the dll into any projects that reference it, then build those projects. This is very convent but as Bob noted when he changes one line of code in a method it causes the entire project to rebuild. This is not a big deal if the project is small and the builds are quick but if the project is large this could be a very painful experience. So we tossed around some things I would classify as workarounds like for example writing some post build steps that would move dll’s around and the like. But in my opinion the best solution is a properly architected solution. To that end I pointed Bob to an article put together by the P&amp;amp;P group at Microsoft that provides guidance for the architecture of large application with many projects and how to break them up into manageable chunks. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Structuring Projects and Solutions &lt;br /&gt;&lt;a href="http://www.codeplex.com/VSTSGuidance/Wiki/View.aspx?title=Chapter%203%20-%20Structuring%20Projects%20and%20Solutions%20in%20Source%20Control"&gt;http://www.codeplex.com/VSTSGuidance/Wiki/View.aspx?title=Chapter%203%20-%20Structuring%20Projects%20and%20Solutions%20in%20Source%20Control&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p mce_keep="true"&gt; &lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/250.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2008/06/04/building-a-solution-with-many-projects-is-slowwwwwww.aspx</guid>
            <pubDate>Wed, 04 Jun 2008 16:47:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/250.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2008/06/04/building-a-solution-with-many-projects-is-slowwwwwww.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/250.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/250.aspx</trackback:ping>
        </item>
        <item>
            <title>Fiddler Web Debugging Proxy</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/09/04/fiddler-web-debugging-proxy.aspx</link>
            <description>&lt;p mce_keep="true"&gt;Went to an MSDN event by Russ (&lt;a href="http://blogs.msdn.com/rfustino/" mce_href="http://blogs.msdn.com/rfustino/"&gt;http://blogs.msdn.com/rfustino/&lt;/a&gt;) a few weeks ago and during his demo he displayed this cool tool called Fiddler (&lt;a href="http://www.fiddler2.com/" mce_href="http://www.fiddler2.com/"&gt;http://www.fiddler2.com/&lt;/a&gt;).  A must have debugging tool for any Smart Client or Web Developer. &lt;br /&gt;&lt;br /&gt;Fiddler is a Web Debugging Proxy which logs all HTTP(S) traffic between your computer and the Internet. Fiddler allows you to inspect all HTTP(S) traffic, set breakpoints, and "fiddle" with incoming or outgoing data. Fiddler includes a powerful event-based scripting subsystem, and can be extended using any .NET language.&lt;br /&gt;&lt;br /&gt;Fiddler is freeware and can debug traffic from virtually any application, including Internet Explorer, Mozilla Firefox, Opera, and thousands more. &lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/205.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/09/04/fiddler-web-debugging-proxy.aspx</guid>
            <pubDate>Tue, 04 Sep 2007 19:00:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/205.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/09/04/fiddler-web-debugging-proxy.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/205.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/205.aspx</trackback:ping>
        </item>
        <item>
            <title>Notes from the TechEd 2007 Birds of a Feather I did with Alan</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/06/09/notes-from-the-teched-2007-birds-of-a-feather-i.aspx</link>
            <description>&lt;p mce_keep="true"&gt;Shawn Weisfeld&lt;br /&gt;C# MVP&lt;br /&gt;President Orlando .NET Users Group&lt;br /&gt;&lt;a href="http://www.shawnweisfeld.com/"&gt;http://www.shawnweisfeld.com&lt;/a&gt;&lt;br /&gt;&lt;a href="mailto:shawn@shawnweisfeld.com"&gt;shawn@shawnweisfeld.com&lt;/a&gt;&lt;/p&gt;
&lt;p mce_keep="true"&gt;Alan Stevens &lt;br /&gt;President East Tennessee .NET Users Group &lt;br /&gt;&lt;a href="mailto:alanstevens@gmail.com"&gt;alanstevens@gmail.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://netcave.org/"&gt;http://netcave.org/&lt;/a&gt;&lt;/p&gt;
&lt;p mce_keep="true"&gt;&lt;br /&gt;Notes by Dave Noderer: &lt;a href="mailto:daven@computerways.com"&gt;daven@computerways.com&lt;/a&gt;&lt;br /&gt;(thanks Dave for taking notes during the session)&lt;/p&gt;
&lt;p mce_keep="true"&gt; - Microsoft out of the box solution. &lt;br /&gt; - Drag and drop to create a database and CRUD sql statements&lt;br /&gt; - Subclass controls to add functionality&lt;br /&gt; - Billie has a set of controls to add a number of functionality&lt;br /&gt; - How do you do this??&lt;br /&gt;   - Ken Getz App dev videos&lt;br /&gt;   - Many examples out there&lt;br /&gt;   - Much easier with 2005 than 2003&lt;br /&gt;   - ASP.NET for dummies&lt;br /&gt; - In many cases the out of the box method does not work in the realworld&lt;br /&gt; - If you write your own, you know exactly what it does&lt;br /&gt; - One person does CICS migration to .net so adds validation to cover all the bases&lt;br /&gt; - Enterprise service blocks has a lot of validation&lt;br /&gt; - Difference between data abstraction layer and data access layer.&lt;br /&gt;   - Access – just layer above ado.net&lt;br /&gt;   - Data abstraction – business objects and operatios&lt;br /&gt; - MyGeneration – Useful for one user&lt;br /&gt;   - Third party tool free tool&lt;br /&gt;   - Looks at db and generates data abstraction&lt;br /&gt;   - Have to use it out of visual studio or it will sometimes crash&lt;br /&gt; - Typed datasets&lt;br /&gt;   - Depends on platform  - 1.0 problems, 2.0 much better&lt;br /&gt;   - Nice start on business objects&lt;br /&gt;   - Create dataset up front, generates classes, uses partial classes&lt;br /&gt;   - Can extend it through the partial classes&lt;br /&gt;   - Have to stay within the lines.&lt;br /&gt; - SQL Junkie… use stored procedures, design database&lt;br /&gt; - CSLA&lt;br /&gt;   - Application framework&lt;br /&gt;   - Have a book to learn it from&lt;br /&gt;   - Lots of community support&lt;br /&gt;   - Limits&lt;br /&gt;   - Mark Dunn has training contract with Rocky Lhotka&lt;br /&gt;   - Has been around for many years, over many generations&lt;br /&gt;   - APRESS – Professional Business Objects&lt;br /&gt; - Ibinding lists – generics&lt;br /&gt;   - Generics – Collection of anything, employees, customers, etc.&lt;br /&gt;   - Common list functionality but put any type of object&lt;br /&gt;   - Strongly typed vs arraylist, arraylist required boxing/unboxing&lt;br /&gt;   - Generic collections are very high performance&lt;br /&gt;   - Generic methods takes any type&lt;br /&gt;   - Collections is one but there are others&lt;br /&gt;   - Ibindinglist does a lot of the work for you&lt;br /&gt;   - Binary search menthod, find, findall comes back with a collection&lt;br /&gt; - Other issues&lt;br /&gt;   - Code is always the same&lt;br /&gt;   - Very boring&lt;br /&gt; - Codesmith&lt;br /&gt;   - Templates are easy to create&lt;br /&gt;   - Existing templates can be used as well&lt;br /&gt; - Net tiers?? Is this a separate&lt;br /&gt;   - Makes you inherit from their classes&lt;br /&gt;   - Expresses business objects as excel rows and columns&lt;br /&gt; - Business Objects&lt;br /&gt;   - Dataset is memory image of data, tables, rows, columns, relationships&lt;br /&gt;   - Business objects is Customers -&amp;gt; Orders -&amp;gt; OrderDetails as objects&lt;br /&gt;   - List of invoices as a collection&lt;br /&gt;   - Al: Database is for efficient storage and retrieval of data but Application wants to have the data modeled in the application domain&lt;br /&gt;   - In VS2k5 there is business object datasource&lt;br /&gt; - Hiearchy – Levels of pain&lt;br /&gt;   - 1. Datasets are a cheap ORM&lt;br /&gt;        Directly related to the database&lt;br /&gt;   - 2. Business objects close to db but adds some business rules&lt;br /&gt;        Employee address required if employee is full time&lt;br /&gt;   - 3. Are there business classes not persisted to the database&lt;br /&gt;          Then it might make sense&lt;br /&gt; - UI validation&lt;br /&gt;   - UI – but spreads around&lt;br /&gt;   - Biz Object – Centralized, easy to manage&lt;br /&gt;   - DB – Centralized but much more obscure and removed from the UI&lt;br /&gt; - ORM – Object Relational Mapping&lt;br /&gt;   - Check out &lt;a href="http://www.dotnetrocks.com/"&gt;www.dotnetrocks.com&lt;/a&gt; pod casts.&lt;br /&gt;   - There were a number of ORM related shows and an ORM smack down recently&lt;br /&gt;   - Many others.. subsonic, nhibernate, llbgenpro&lt;br /&gt;   - From Microsoft will be coming the “Entity Framework”&lt;br /&gt;          Generates ORM from db&lt;br /&gt;          April to be released&lt;br /&gt;          Link to SQL due out with VS2008 but very limited&lt;br /&gt;   - Also have Entity SQL which is common sql that will work for both SQL Server and Oracle&lt;br /&gt; - LINQ&lt;br /&gt;   - Allows sql type of synatax in the language to allow you to query over any collection, xml or data.&lt;br /&gt;          Linq to objects - Basic linq over in memory collections and business objects&lt;br /&gt;          Linq to SQL extends out the to database&lt;br /&gt;          Linq to XML generates xpath&lt;br /&gt;   - What is the implications??&lt;br /&gt;          Perfomance?&lt;br /&gt;          Can’t bind to query&lt;br /&gt;   - Can use Linq to query database&lt;br /&gt; - Dynamic Language Runtime&lt;br /&gt;   - Duck typing&lt;br /&gt;   - If it looks like a duck and walks like a duck it must be a duck&lt;br /&gt;   - Dynamic controls – late binding – will figure it out at runtime&lt;br /&gt; - All I want to do is bind data&lt;br /&gt;   - Use datatable and bind to grid&lt;br /&gt; - Third party controls&lt;br /&gt;   - Telerik, DevExpress, Infragistics&lt;br /&gt;   - Issues with upgrading&lt;br /&gt;   - If you stick with Microsoft… fewer issues with upgrades&lt;br /&gt;   - Tedie.net?? controls did not catch up going from 1.1 to 2.0&lt;br /&gt;   - If you subclass from the telerik control you have a chance of changing the root classes!&lt;br /&gt; - Reporting&lt;br /&gt;   - Information Builders – Old hold over from mainframe days&lt;br /&gt;   - You can generate pdf off of report viewer control -&amp;gt; REPORT VIEWER JUNKIES??? (Alan)&lt;br /&gt;   - Reporting services&lt;br /&gt;   - Dane Prairie – WIN2PDF, low cost&lt;br /&gt;   - Component One, Data Dynamics, Dev Express&lt;br /&gt; - POST ON BLOG… INSTRUCTIONS FOR SUBCLASSING! (Alan)&lt;br /&gt; - Client side sorting on client.&lt;br /&gt;   - AJAX&lt;br /&gt;          Some controls using JSON which is terse key/value pair&lt;br /&gt;          Wally McLure has book&lt;br /&gt;          &lt;a href="http://www.wrox.com/WileyCDA/WroxTitle/productCd-047178544X.html"&gt;http://www.wrox.com/WileyCDA/WroxTitle/productCd-047178544X.html&lt;/a&gt;&lt;br /&gt;          &lt;a href="http://www.wrox.com/WileyCDA/WroxTitle/productCd-0470112832.html"&gt;http://www.wrox.com/WileyCDA/WroxTitle/productCd-0470112832.html&lt;/a&gt;&lt;br /&gt;          Web developer tool to monitor traffic.&lt;br /&gt;          &lt;a href="http://projects.nikhilk.net/Projects/WebDevHelper.aspx"&gt;http://projects.nikhilk.net/Projects/WebDevHelper.aspx&lt;/a&gt; (the site was down when I tested this link, don’t know what is up)&lt;br /&gt;   - Infragistics has client side control&lt;br /&gt;   - Infragistics allows filtering by column on &lt;br /&gt; - Template columns&lt;br /&gt;   - Build a filter&lt;br /&gt;   - Post back to the server and re-query&lt;br /&gt;   - May lose changes&lt;/p&gt;
&lt;p mce_keep="true"&gt;Initial Topic ideas by Shawn &amp;amp; Alan&lt;/p&gt;
&lt;p mce_keep="true"&gt;BOF26 - Binding GridView, DropDownList, etc. with CRUD&lt;br /&gt;Friday, June 8 10:45 AM - 12:00 PM, S331 A &lt;/p&gt;
&lt;p mce_keep="true"&gt;Moderator: Dan Wygant&lt;br /&gt;Join in a discussion of binding with ASP.NET controls such as GridView, DropDownList and DetailView and others. Share in the discussion of techniques using automatic code generation, using the List&amp;lt;&amp;gt; generic to bind data in a form to data in a database, and using other techniques that have worked well and not so well. We Birds of a Feather can help each other by promoting discussions of how to bind into templates for highly customized views of the data with nearly zero code, providing for GUIs.&lt;/p&gt;
&lt;p mce_keep="true"&gt;1) Out of the box databinding&lt;br /&gt;   a. SqlDataSouce (sql right in the ASPX)&lt;br /&gt;   b. Typed DataSets against the ObjectDataSource&lt;br /&gt;2) Business Objects against the ObjectDataSouce&lt;br /&gt;   a. Collection&amp;lt;T&amp;gt; vs. List&amp;lt;T&amp;gt; vs. BindingList&amp;lt;T&amp;gt;&lt;br /&gt;      i. Using Collection&amp;lt;T&amp;gt; vs. List&amp;lt;T&amp;gt; (&lt;a href="http://blogs.msdn.com/fxcop/archive/2006/04/27/585476.aspx"&gt;http://blogs.msdn.com/fxcop/archive/2006/04/27/585476.aspx&lt;/a&gt;) The first reason is that List&amp;lt;T&amp;gt; is designed for speed and for use as an internal implementation detail, whereas Collection&amp;lt;T&amp;gt; is designed for extensibility.&lt;br /&gt;      ii. Collection&amp;lt;T&amp;gt; provides 4 overridable methods; ClearItems, InsertItem, RemoveItem and SetItem, which allow a derived class to be notified when a collection has been modified. In contrast, List&amp;lt;T&amp;gt; provides none. The second reason why you shouldn’t expose List&amp;lt;T&amp;gt;, is because it exposes too many members, many of which are not relevant in most situations. In contrast, Collection&amp;lt;T&amp;gt; exposes only a small number.&lt;br /&gt;   b. Binding Attributes (Decorations) – DataObjectMethodAttribute (&lt;a href="http://msdn2.microsoft.com/en-us/library/system.componentmodel.dataobjectmethodattribute(VS.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/system.componentmodel.dataobjectmethodattribute(VS.80).aspx&lt;/a&gt;)&lt;br /&gt;   c. ORM tools&lt;br /&gt;      i. Framework&lt;br /&gt;         1. SubSonic&lt;br /&gt;         2. Mere Mortals&lt;br /&gt;         3. CSLA&lt;br /&gt;         4. Software Factories (from P&amp;amp;P)&lt;br /&gt;         5. nHibernate&lt;br /&gt;         6. IdeaBlade DevForce&lt;br /&gt;         7. ORM.NET&lt;br /&gt;         8. Genome ORM&lt;br /&gt;         9. Deklarit&lt;br /&gt;         10. LLBLGen&lt;br /&gt;         11. Ruby&lt;br /&gt;      ii. CodeGen&lt;br /&gt;         1. CodeSmith&lt;br /&gt;         2. MyGeneration&lt;br /&gt;   d. LINQ&lt;br /&gt;      i. LINQ to SQL&lt;br /&gt;      ii. LINQ to Entities&lt;br /&gt;      iii. LINQ to XML&lt;br /&gt;      iv. BLINK (&lt;a href="http://www.asp.net/sandbox/app_blinq.aspx?tabid=62"&gt;http://www.asp.net/sandbox/app_blinq.aspx?tabid=62&lt;/a&gt;)&lt;br /&gt;         1. Blinq is a tool for generating ASP.NET websites for displaying, creating, and manipulating data based on database schema. Just point Blinq at a SQL database and it will create a website with pages that display sorted and paged data, allow you to update or delete records, create new records, and follow relationships between tables in your database. You don't need to write SQL queries to use Blinq; LINQ will generate optimized queries for you that request just the data you want to show. Blinq uses the May LINQ Community Tech Preview to access data. The code Blinq creates is simple and easy to customize to fit your needs. Everything in the website Blinq creates is meant as a starting point for a website that meets your needs perfectly, so have fun customizing the pages, experimenting with the code, and making it yours!&lt;br /&gt;   e. Entity Data Model - EDM - &lt;a href="http://msdn2.microsoft.com/en-us/library/aa697428(VS.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa697428(VS.80).aspx&lt;/a&gt;&lt;br /&gt;3) Implications of AJAX?&lt;br /&gt;   a. Server Side (i.e. sending html) vs. Client Side (i.e. Sending the Business Objects) &lt;br /&gt;4) Third Party Controls&lt;br /&gt;   a. DevExpress&lt;br /&gt;   b. Telerik&lt;br /&gt;   c. Infragistics&lt;br /&gt;   d. FarPoint&lt;br /&gt;   e. Component One&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/193.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/06/09/notes-from-the-teched-2007-birds-of-a-feather-i.aspx</guid>
            <pubDate>Sat, 09 Jun 2007 18:39:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/193.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/06/09/notes-from-the-teched-2007-birds-of-a-feather-i.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/193.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/193.aspx</trackback:ping>
        </item>
    </channel>
</rss>
