<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" 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:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Kevin Castle .Net</title>
    <link>http://www.kevincastle.net/</link>
    <description>Musings on .NET and Team Foundation Server</description>
    <language>en-us</language>
    <copyright>Kevin Castle</copyright>
    <lastBuildDate>Fri, 30 Jan 2009 05:34:58 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>kcastle2@gmail.com</managingEditor>
    <webMaster>kcastle2@gmail.com</webMaster>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/KevinCastleDotNet" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <trackback:ping>http://www.kevincastle.net/Trackback.aspx?guid=620df8d4-22b7-4c3f-ae0c-0397c9008e14</trackback:ping>
      <pingback:server>http://www.kevincastle.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.kevincastle.net/PermaLink,guid,620df8d4-22b7-4c3f-ae0c-0397c9008e14.aspx</pingback:target>
      <dc:creator>Kevin Castle</dc:creator>
      <wfw:comment>http://www.kevincastle.net/CommentView,guid,620df8d4-22b7-4c3f-ae0c-0397c9008e14.aspx</wfw:comment>
      <wfw:commentRss>http://www.kevincastle.net/SyndicationService.asmx/GetEntryCommentsRss?guid=620df8d4-22b7-4c3f-ae0c-0397c9008e14</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One of the most frustrating things that I've found in developing/debugging in IE is
that you can only view the page source which was initially rendered with the first
page load. This was acceptable a couple of years ago, but is really a huge limitation
utilizing AJAX (and I'm not just referring to UpdatePanel's).
</p>
        <p>
Of course you can <a href="http://www.chapter31.com/2006/12/04/viewing-ajax-generated-source-code/">view
generated source with Firefox</a> but what are you supposed to do when debugging any
newly inserted client side script and/or viewing dynamically added markup? After searching
around I found that you can simply copy and past the following script into the browsers
address bar and it will open a new window with the pages currently generated source.
</p>
        <p>
javascript:void(window.open("javascript:document.open(\"text/plain\");document.write(opener.document.body.parentNode.outerHTML)"))
</p>
        <p>
          <a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/ViewingGeneratedSourceinIE7_C804/image_6.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/ViewingGeneratedSourceinIE7_C804/image_thumb_2.png" width="498" border="0" />
          </a>
        </p>
        <p>
You can also add this to your IE favorites or add it to your Links toolbar so that
its always one click away.
</p>
        <p>
          <a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/ViewingGeneratedSourceinIE7_C804/image_2.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="66" alt="image" src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/ViewingGeneratedSourceinIE7_C804/image_thumb.png" width="184" border="0" />
          </a>
        </p>
        <p>
I cannot tell you how much this saved me this last week when I was using eval() to
dynamically add script elements to the page's header. 
</p>
        <p>
          <a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/ViewingGeneratedSourceinIE7_C804/image_8.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="128" alt="image" src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/ViewingGeneratedSourceinIE7_C804/image_thumb_3.png" width="244" border="0" />
          </a>
        </p>
        <img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=620df8d4-22b7-4c3f-ae0c-0397c9008e14" />
      </body>
      <title>Viewing Generated Source in IE7</title>
      <guid isPermaLink="false">http://www.kevincastle.net/PermaLink,guid,620df8d4-22b7-4c3f-ae0c-0397c9008e14.aspx</guid>
      <link>http://feedproxy.google.com/~r/KevinCastleDotNet/~3/2X-XaAc0z7c/ViewingGeneratedSourceInIE7.aspx</link>
      <pubDate>Fri, 30 Jan 2009 05:34:58 GMT</pubDate>
      <description>&lt;p&gt;
One of the most frustrating things that I've found in developing/debugging in IE is
that you can only view the page source which was initially rendered with the first
page load. This was acceptable a couple of years ago, but is really a huge limitation
utilizing AJAX (and I'm not just referring to UpdatePanel's).
&lt;/p&gt;
&lt;p&gt;
Of course you can &lt;a href="http://www.chapter31.com/2006/12/04/viewing-ajax-generated-source-code/"&gt;view
generated source with Firefox&lt;/a&gt; but what are you supposed to do when debugging any
newly inserted client side script and/or viewing dynamically added markup? After searching
around I found that you can simply copy and past the following script into the browsers
address bar and it will open a new window with the pages currently generated source.
&lt;/p&gt;
&lt;p&gt;
javascript:void(window.open("javascript:document.open(\"text/plain\");document.write(opener.document.body.parentNode.outerHTML)"))
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/ViewingGeneratedSourceinIE7_C804/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="25" alt="image" src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/ViewingGeneratedSourceinIE7_C804/image_thumb_2.png" width="498" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
You can also add this to your IE favorites or add it to your Links toolbar so that
its always one click away.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/ViewingGeneratedSourceinIE7_C804/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="66" alt="image" src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/ViewingGeneratedSourceinIE7_C804/image_thumb.png" width="184" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
I cannot tell you how much this saved me this last week when I was using eval() to
dynamically add script elements to the page's header. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/ViewingGeneratedSourceinIE7_C804/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="128" alt="image" src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/ViewingGeneratedSourceinIE7_C804/image_thumb_3.png" width="244" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=620df8d4-22b7-4c3f-ae0c-0397c9008e14" /&gt;</description>
      <comments>http://www.kevincastle.net/CommentView,guid,620df8d4-22b7-4c3f-ae0c-0397c9008e14.aspx</comments>
    <feedburner:origLink>http://www.kevincastle.net/ViewingGeneratedSourceInIE7.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.kevincastle.net/Trackback.aspx?guid=40789d03-2836-4db4-a5bd-4a950fd20baf</trackback:ping>
      <pingback:server>http://www.kevincastle.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.kevincastle.net/PermaLink,guid,40789d03-2836-4db4-a5bd-4a950fd20baf.aspx</pingback:target>
      <dc:creator>Kevin Castle</dc:creator>
      <wfw:comment>http://www.kevincastle.net/CommentView,guid,40789d03-2836-4db4-a5bd-4a950fd20baf.aspx</wfw:comment>
      <wfw:commentRss>http://www.kevincastle.net/SyndicationService.asmx/GetEntryCommentsRss?guid=40789d03-2836-4db4-a5bd-4a950fd20baf</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I recently lost my home server and was forced to re-install the base OS. Among a number
of problems that I was having was that I needed to find a free utility which could
both RIP CDs to an ISO or burn an existing ISO onto a disk. Usually I can just mount
the ISO's but in the case where I needed to do a clean install on a server, I was
forced to boot off of a win2k3 installation CD. 
</p>
        <p>
Anyway I was super happy to find this little utility which met all my needs. You can
download the vista version here : <a title="http://isorecorder.alexfeinman.com/Vista.htm" href="http://isorecorder.alexfeinman.com/Vista.htm">http://isorecorder.alexfeinman.com/Vista.htm</a> .
Also an overview of how to use (with screenshots) can be found here : <a title="http://www.petri.co.il/how_to_write_iso_files_to_cd.htm" href="http://www.petri.co.il/how_to_write_iso_files_to_cd.htm">http://www.petri.co.il/how_to_write_iso_files_to_cd.htm</a> .
</p>
        <img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=40789d03-2836-4db4-a5bd-4a950fd20baf" />
      </body>
      <title>Must Have ISO Recorder Utility</title>
      <guid isPermaLink="false">http://www.kevincastle.net/PermaLink,guid,40789d03-2836-4db4-a5bd-4a950fd20baf.aspx</guid>
      <link>http://feedproxy.google.com/~r/KevinCastleDotNet/~3/gAsCv8SS72o/MustHaveISORecorderUtility.aspx</link>
      <pubDate>Wed, 31 Dec 2008 07:23:20 GMT</pubDate>
      <description>&lt;p&gt;
I recently lost my home server and was forced to re-install the base OS. Among a number
of problems that I was having was that I needed to find a free utility which could
both RIP CDs to an ISO or burn an existing ISO onto a disk. Usually I can just mount
the ISO's but in the case where I needed to do a clean install on a server, I was
forced to boot off of a win2k3 installation CD. 
&lt;/p&gt;
&lt;p&gt;
Anyway I was super happy to find this little utility which met all my needs. You can
download the vista version here : &lt;a title="http://isorecorder.alexfeinman.com/Vista.htm" href="http://isorecorder.alexfeinman.com/Vista.htm"&gt;http://isorecorder.alexfeinman.com/Vista.htm&lt;/a&gt; .
Also an overview of how to use (with screenshots) can be found here : &lt;a title="http://www.petri.co.il/how_to_write_iso_files_to_cd.htm" href="http://www.petri.co.il/how_to_write_iso_files_to_cd.htm"&gt;http://www.petri.co.il/how_to_write_iso_files_to_cd.htm&lt;/a&gt; .
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=40789d03-2836-4db4-a5bd-4a950fd20baf" /&gt;</description>
      <comments>http://www.kevincastle.net/CommentView,guid,40789d03-2836-4db4-a5bd-4a950fd20baf.aspx</comments>
      <category>Development Tools;Vista</category>
    <feedburner:origLink>http://www.kevincastle.net/MustHaveISORecorderUtility.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.kevincastle.net/Trackback.aspx?guid=d9c83853-70bb-4ee6-b99e-7ddf97105b0c</trackback:ping>
      <pingback:server>http://www.kevincastle.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.kevincastle.net/PermaLink,guid,d9c83853-70bb-4ee6-b99e-7ddf97105b0c.aspx</pingback:target>
      <dc:creator>Kevin Castle</dc:creator>
      <wfw:comment>http://www.kevincastle.net/CommentView,guid,d9c83853-70bb-4ee6-b99e-7ddf97105b0c.aspx</wfw:comment>
      <wfw:commentRss>http://www.kevincastle.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d9c83853-70bb-4ee6-b99e-7ddf97105b0c</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A couple of days ago I was working converting one of our grids from using server-side
databinding to pure client-side AJAX databinding. I ran into a very interesting issue/feature
which I was not aware of : you cannot set the onclick action for an element with javascript,
using a straight forward approach.
</p>
        <p>
A sample way to do this on the server (for a button) would be :
</p>
        <pre>btnTest.OnClientClick = <span style="color: maroon">"alert('Something Here');
return false;"</span>;</pre>
        <p>
The following simply does not work (when you are setting on the client):
</p>
        <p>
$get('clientIdHere').onclick = alert('message');
</p>
        <p>
Instead you will need to do something like this (Thanks to <a href="http://www.chovy.com/web-development/javascript-dynamically-change-onclick-event/">this
post</a> I was able to find this solution):
</p>
        <pre>element.onclick = <span style="color: blue">function</span>() {your_func_with_param(params)}</pre>
        <p>
If you use <a href="http://jquery.com/">jQuery</a> (<a href="http://weblogs.asp.net/scottgu/archive/2008/02/08/vs-2008-web-development-hot-fix-roll-up-available.aspx">which
seems to be picking up steam in the .Net community</a>) then you might write something
like this :
</p>
        <pre>$(<span style="color: maroon">'#'</span> + elementClientId).bind(<span style="color: maroon">'click'</span>, <span style="color: blue">function</span>() </pre>
        <pre>{ alert(<span style="color: maroon">'display something here'</span>); } );</pre>
        <p>
One last example as to how you can use jQuery to set onclick events in JavaScript
would be an real world example that we have in our project where we are doing client
side databinding with <a href="http://www.telerik.com/products/aspnet-ajax/grid.aspx">telerik's
radGrid</a> and are attempting to set client side events for Edit and Delete columns.
(do not ever attempt to do this - <a href="http://telerik.com">telerik</a> controls
are terrible for real world applications are most of the functionality client side
functionality just simply doesn't work, I will post more on this).
</p>
        <p>
Here is an example as to how you would set an image's onclick event, on each rowdatabound
event, so that we can edit a grid item in a popup window.
</p>
        <pre>$(<span style="color: maroon">'#'</span> + args.get_item().get_cell(<span style="color: maroon">"EditColumn"</span>).firstChild.id).bind(<span style="color: maroon">'click'</span>, </pre>
        <pre>   { <span style="color: maroon">'editUrl'</span>: args.get_dataItem().EncryptedEditUrl
}, <span style="color: blue">function</span>(<span style="color: blue">event</span>)
{ ShowPopupWindow(<span style="color: blue">event</span>.data[<span style="color: maroon">'editUrl'</span>], <span style="color: maroon">'EditSomething'</span>, <span style="color: maroon">'RefreshGrid()'</span>, <span style="color: maroon">360</span>, <span style="color: maroon">380</span>, <span style="color: maroon">true</span>);
});</pre>
        <p>
Take note on how you need to build a JSON object and pass it to the new function in
order for this to work properly. <a href="http://ocdevelopers.net/blogs/girikalluri/">Giri
Kalluri</a> is the one who pointed this solution out to me.
</p>
        <img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=d9c83853-70bb-4ee6-b99e-7ddf97105b0c" />
      </body>
      <title>How to set onclick events using Javascript</title>
      <guid isPermaLink="false">http://www.kevincastle.net/PermaLink,guid,d9c83853-70bb-4ee6-b99e-7ddf97105b0c.aspx</guid>
      <link>http://feedproxy.google.com/~r/KevinCastleDotNet/~3/3ttZFoRMq2o/HowToSetOnclickEventsUsingJavascript.aspx</link>
      <pubDate>Thu, 11 Dec 2008 04:30:53 GMT</pubDate>
      <description>&lt;p&gt;
A couple of days ago I was working converting one of our grids from using server-side
databinding to pure client-side AJAX databinding. I ran into a very interesting issue/feature
which I was not aware of : you cannot set the onclick action for an element with javascript,
using a straight forward approach.
&lt;/p&gt;
&lt;p&gt;
A sample way to do this on the server (for a button) would be :
&lt;/p&gt;
&lt;pre&gt;btnTest.OnClientClick = &lt;span style="color: maroon"&gt;"alert('Something Here');
return false;"&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
The following simply does not work (when you are setting on the client):
&lt;/p&gt;
&lt;p&gt;
$get('clientIdHere').onclick = alert('message');
&lt;/p&gt;
&lt;p&gt;
Instead you will need to do something like this (Thanks to &lt;a href="http://www.chovy.com/web-development/javascript-dynamically-change-onclick-event/"&gt;this
post&lt;/a&gt; I was able to find this solution):
&lt;/p&gt;
&lt;pre&gt;element.onclick = &lt;span style="color: blue"&gt;function&lt;/span&gt;() {your_func_with_param(params)}&lt;/pre&gt;
&lt;p&gt;
If you use &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; (&lt;a href="http://weblogs.asp.net/scottgu/archive/2008/02/08/vs-2008-web-development-hot-fix-roll-up-available.aspx"&gt;which
seems to be picking up steam in the .Net community&lt;/a&gt;) then you might write something
like this :
&lt;/p&gt;
&lt;pre&gt;$(&lt;span style="color: maroon"&gt;'#'&lt;/span&gt; + elementClientId).bind(&lt;span style="color: maroon"&gt;'click'&lt;/span&gt;, &lt;span style="color: blue"&gt;function&lt;/span&gt;() &lt;/pre&gt;
&lt;pre&gt;{ alert(&lt;span style="color: maroon"&gt;'display something here'&lt;/span&gt;); } );&lt;/pre&gt;
&lt;p&gt;
One last example as to how you can use jQuery to set onclick events in JavaScript
would be an real world example that we have in our project where we are doing client
side databinding with &lt;a href="http://www.telerik.com/products/aspnet-ajax/grid.aspx"&gt;telerik's
radGrid&lt;/a&gt; and are attempting to set client side events for Edit and Delete columns.
(do not ever attempt to do this - &lt;a href="http://telerik.com"&gt;telerik&lt;/a&gt; controls
are terrible for real world applications are most of the functionality client side
functionality just simply doesn't work, I will post more on this).
&lt;/p&gt;
&lt;p&gt;
Here is an example as to how you would set an image's onclick event, on each rowdatabound
event, so that we can edit a grid item in a popup window.
&lt;/p&gt;
&lt;pre&gt;$(&lt;span style="color: maroon"&gt;'#'&lt;/span&gt; + args.get_item().get_cell(&lt;span style="color: maroon"&gt;"EditColumn"&lt;/span&gt;).firstChild.id).bind(&lt;span style="color: maroon"&gt;'click'&lt;/span&gt;, &lt;/pre&gt;
&lt;pre&gt;   { &lt;span style="color: maroon"&gt;'editUrl'&lt;/span&gt;: args.get_dataItem().EncryptedEditUrl
}, &lt;span style="color: blue"&gt;function&lt;/span&gt;(&lt;span style="color: blue"&gt;event&lt;/span&gt;)
{ ShowPopupWindow(&lt;span style="color: blue"&gt;event&lt;/span&gt;.data[&lt;span style="color: maroon"&gt;'editUrl'&lt;/span&gt;], &lt;span style="color: maroon"&gt;'EditSomething'&lt;/span&gt;, &lt;span style="color: maroon"&gt;'RefreshGrid()'&lt;/span&gt;, &lt;span style="color: maroon"&gt;360&lt;/span&gt;, &lt;span style="color: maroon"&gt;380&lt;/span&gt;, &lt;span style="color: maroon"&gt;true&lt;/span&gt;);
});&lt;/pre&gt;
&lt;p&gt;
Take note on how you need to build a JSON object and pass it to the new function in
order for this to work properly. &lt;a href="http://ocdevelopers.net/blogs/girikalluri/"&gt;Giri
Kalluri&lt;/a&gt; is the one who pointed this solution out to me.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=d9c83853-70bb-4ee6-b99e-7ddf97105b0c" /&gt;</description>
      <comments>http://www.kevincastle.net/CommentView,guid,d9c83853-70bb-4ee6-b99e-7ddf97105b0c.aspx</comments>
      <category>ASP.Net;Browsers;JavaScript</category>
    <feedburner:origLink>http://www.kevincastle.net/HowToSetOnclickEventsUsingJavascript.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.kevincastle.net/Trackback.aspx?guid=c0ec711e-52a9-4415-8173-38335c5eb71a</trackback:ping>
      <pingback:server>http://www.kevincastle.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.kevincastle.net/PermaLink,guid,c0ec711e-52a9-4415-8173-38335c5eb71a.aspx</pingback:target>
      <dc:creator>Kevin Castle</dc:creator>
      <wfw:comment>http://www.kevincastle.net/CommentView,guid,c0ec711e-52a9-4415-8173-38335c5eb71a.aspx</wfw:comment>
      <wfw:commentRss>http://www.kevincastle.net/SyndicationService.asmx/GetEntryCommentsRss?guid=c0ec711e-52a9-4415-8173-38335c5eb71a</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've been working on the same web project for over 2 1/2 years now... Its been a great
experience because I was able to start the foundation of the project and have watched
it grow from an idea, to a simple 2-tier <a href="http://www.asp.net/">ASP.Net</a> web
app, and now to a multi-tier application which utilizes a wonderful service architecture
and has numerous external integration points. I've worked with great people along
the way and we still have an impeccable team but there is one thing looming on the
horizon which we cannot fend off. Its the J-word. Not my beloved <a href="http://msdn.microsoft.com/en-us/vjsharp/default.aspx">J#</a> but
JavaScript.
</p>
        <p>
When the project started, <a href="http://www.asp.net/">ASP.Net 2.0</a> was the latest
and great and with <a href="http://www.asp.net/ajax/">Atlas</a> looming on the horizon
we designed the application with the expectation that the <a href="http://asp.net/ajax/documentation/live/overview/UpdatePanelOverview.aspx">UpdatePanel</a> would
AJAXify the user's experience so that they felt like they were working with a rich
client. Well it was great for a while but once we started stacking up more features
in smaller content areas (which is another issue all-together) we started realizing
the the standard UpdatePanel callbacks were not cutting it. Plus with sites like <a href="http://flickr.com/photos/kevinandmelissa/">flickr</a>, <a href="http://facebook.com">facebook</a>,
etc.  it makes it much more difficult to please your users with traditional postbacks
(even if they are wrapped in <a href="http://asp.net/ajax/documentation/live/overview/UpdatePanelOverview.aspx">UpdatePanel</a> AJAX
calls). We had previously evaluated our <a href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx">WCF</a> service
to see if the issue was SQL roundtrips, other service dependencies, and all that we
found was a very well performing infrastructure which should only yield a great web
application for its frontend. The only left to change was the web application tier
itself, so we began to scrutinize where we could squeeze a few more seconds with each
user click.
</p>
        <p>
 
</p>
        <p>
What we realized a few weeks ago is that we were going to need to embrace JavaScript
to make true AJAX calls...which meant that we were going to:
</p>
        <p>
1. Bind our grids using full client side databinding - For this we would be making
PageMethod AJAX calls or Webservice AJAX calls. We planned on using the latest <a href="http://www.telerik.com/products/aspnet-ajax/grid.aspx">Telerik
RadGrid</a> for our grid control. (Using the Telerik Grid control has been a nightmare
thus far but ill post on that @ a later time)
</p>
        <p>
2. Use the <a href="http://www.telerik.com/products/aspnet-ajax/window.aspx">Telerik
RadWindow</a> control for our popups -  In the past we were using &lt;Div&gt;'s
to hide and show content within the context of an update panel. It looked great but
the extra 1-2 second(s) of lag time added up to a poor user experience.
</p>
        <p>
3. Focus on the overall user's experience by trying to eliminate mouse-clicks with
a new set of navigation controls. The first one which we are building is a <a href="http://flickr.com">flickr</a> style
control which when you hover over, will dynamically build a context menu so that users
can navigate to their immediate need. (Since our app is a CRM the contact names will
contain this functionality)
</p>
        <p>
 
</p>
        <p>
Overall this is our current approach. We are in the middle of our first <a href="http://www.scrumalliance.org/articles/39-glossary-of-scrum-terms#1118">sprint</a> meant
to tackle the performance improvements so we're hopeful that a lot of positives will
come out of this. More posts will follow documenting our experiences...
</p>
        <img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=c0ec711e-52a9-4415-8173-38335c5eb71a" />
      </body>
      <title>Web Application Performance - How long can an ASP.NET project avoid JavaScript?</title>
      <guid isPermaLink="false">http://www.kevincastle.net/PermaLink,guid,c0ec711e-52a9-4415-8173-38335c5eb71a.aspx</guid>
      <link>http://feedproxy.google.com/~r/KevinCastleDotNet/~3/fXQ5ez22i0U/WebApplicationPerformanceHowLongCanAnASPNETProjectAvoidJavaScript.aspx</link>
      <pubDate>Tue, 02 Dec 2008 03:59:39 GMT</pubDate>
      <description>&lt;p&gt;
I've been working on the same web project for over 2 1/2 years now... Its been a great
experience because I was able to start the foundation of the project and have watched
it grow from an idea, to a simple 2-tier &lt;a href="http://www.asp.net/"&gt;ASP.Net&lt;/a&gt; web
app, and now to a multi-tier application which utilizes a wonderful service architecture
and has numerous external integration points. I've worked with great people along
the way and we still have an impeccable team but there is one thing looming on the
horizon which we cannot fend off. Its the J-word. Not my beloved &lt;a href="http://msdn.microsoft.com/en-us/vjsharp/default.aspx"&gt;J#&lt;/a&gt; but
JavaScript.
&lt;/p&gt;
&lt;p&gt;
When the project started, &lt;a href="http://www.asp.net/"&gt;ASP.Net 2.0&lt;/a&gt; was the latest
and great and with &lt;a href="http://www.asp.net/ajax/"&gt;Atlas&lt;/a&gt; looming on the horizon
we designed the application with the expectation that the &lt;a href="http://asp.net/ajax/documentation/live/overview/UpdatePanelOverview.aspx"&gt;UpdatePanel&lt;/a&gt; would
AJAXify the user's experience so that they felt like they were working with a rich
client. Well it was great for a while but once we started stacking up more features
in smaller content areas (which is another issue all-together) we started realizing
the the standard UpdatePanel callbacks were not cutting it. Plus with sites like &lt;a href="http://flickr.com/photos/kevinandmelissa/"&gt;flickr&lt;/a&gt;, &lt;a href="http://facebook.com"&gt;facebook&lt;/a&gt;,
etc.&amp;nbsp; it makes it much more difficult to please your users with traditional postbacks
(even if they are wrapped in &lt;a href="http://asp.net/ajax/documentation/live/overview/UpdatePanelOverview.aspx"&gt;UpdatePanel&lt;/a&gt; AJAX
calls). We had previously evaluated our &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx"&gt;WCF&lt;/a&gt; service
to see if the issue was SQL roundtrips, other service dependencies, and all that we
found was a very well performing infrastructure which should only yield a great web
application for its frontend. The only left to change was the web application tier
itself, so we began to scrutinize where we could squeeze a few more seconds with each
user click.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
What we realized a few weeks ago is that we were going to need to embrace JavaScript
to make true AJAX calls...which meant that we were going to:
&lt;/p&gt;
&lt;p&gt;
1. Bind our grids using full client side databinding - For this we would be making
PageMethod AJAX calls or Webservice AJAX calls. We planned on using the latest &lt;a href="http://www.telerik.com/products/aspnet-ajax/grid.aspx"&gt;Telerik
RadGrid&lt;/a&gt; for our grid control. (Using the Telerik Grid control has been a nightmare
thus far but ill post on that @ a later time)
&lt;/p&gt;
&lt;p&gt;
2. Use the &lt;a href="http://www.telerik.com/products/aspnet-ajax/window.aspx"&gt;Telerik
RadWindow&lt;/a&gt; control for our popups -&amp;nbsp; In the past we were using &amp;lt;Div&amp;gt;'s
to hide and show content within the context of an update panel. It looked great but
the extra 1-2 second(s) of lag time added up to a poor user experience.
&lt;/p&gt;
&lt;p&gt;
3. Focus on the overall user's experience by trying to eliminate mouse-clicks with
a new set of navigation controls. The first one which we are building is a &lt;a href="http://flickr.com"&gt;flickr&lt;/a&gt; style
control which when you hover over, will dynamically build a context menu so that users
can navigate to their immediate need. (Since our app is a CRM the contact names will
contain this functionality)
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Overall this is our current approach. We are in the middle of our first &lt;a href="http://www.scrumalliance.org/articles/39-glossary-of-scrum-terms#1118"&gt;sprint&lt;/a&gt; meant
to tackle the performance improvements so we're hopeful that a lot of positives will
come out of this. More posts will follow documenting our experiences...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=c0ec711e-52a9-4415-8173-38335c5eb71a" /&gt;</description>
      <comments>http://www.kevincastle.net/CommentView,guid,c0ec711e-52a9-4415-8173-38335c5eb71a.aspx</comments>
      <category>ASP.Net;Ajax;JavaScript</category>
    <feedburner:origLink>http://www.kevincastle.net/WebApplicationPerformanceHowLongCanAnASPNETProjectAvoidJavaScript.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.kevincastle.net/Trackback.aspx?guid=892e73ef-2b3c-4588-8883-cf0026ea94b2</trackback:ping>
      <pingback:server>http://www.kevincastle.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.kevincastle.net/PermaLink,guid,892e73ef-2b3c-4588-8883-cf0026ea94b2.aspx</pingback:target>
      <dc:creator>Kevin Castle</dc:creator>
      <wfw:comment>http://www.kevincastle.net/CommentView,guid,892e73ef-2b3c-4588-8883-cf0026ea94b2.aspx</wfw:comment>
      <wfw:commentRss>http://www.kevincastle.net/SyndicationService.asmx/GetEntryCommentsRss?guid=892e73ef-2b3c-4588-8883-cf0026ea94b2</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My wife and I recently took a 1 month trip to Europe. We had been planning this ever
since we got married (about 2 1/2 years ago) but work has been so busy that I was
never really able to find the time. We planned to be gone for 3 weeks and in the last
days leading up the trip we added an extra week. The first 2 weeks we're planned out
but after that we just used our rail pass to go wherever sounded the most interesting. 
</p>
        <p>
          <strong>Our Itinerary</strong>
        </p>
        <ul>
          <li>
            <a href="http://flickr.com/photos/kevinandmelissa/sets/72157608909585755/">London</a>
          </li>
          <li>
            <a href="http://flickr.com/photos/kevinandmelissa/sets/72157608909634567/">Paris</a>
          </li>
          <li>
            <a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911291802/">Versailles</a>
          </li>
          <li>
            <a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911354740/">Florence</a>
          </li>
          <li>
            <a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911386166/">Tuscan
Towns</a>
          </li>
          <li>
            <a href="http://flickr.com/photos/kevinandmelissa/sets/72157608909776841/">Cinque
Terre</a>
          </li>
          <li>
            <a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911447644/">Rome</a>
          </li>
          <li>
            <a href="http://flickr.com/photos/kevinandmelissa/sets/72157608909865531/">Amalfi
Coast</a>
          </li>
          <li>
            <a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911494820/">Pompeii</a>
          </li>
          <li>
            <a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911081380/">Venice</a>
          </li>
          <li>
            <a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911121558/">Switzerland
(Murren, Gimmelwald, Latterbrunnen, and Interlaken)</a>
          </li>
          <li>
            <a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911185972/">Germany
(Rothenburg)</a>
          </li>
          <li>
            <a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911529332/">Amsterdam</a>
          </li>
          <li>
            <a href="http://flickr.com/photos/kevinandmelissa/sets/72157608909996955/">Belgium
(Brugges)</a>
          </li>
        </ul>
        <p>
 
</p>
        <p>
          <strong>My Humble Recommendations when Traveling in Europe</strong>
        </p>
        <ol>
          <li>
Make all of your foreign purchases with an <a href="http://americanexpress.com/">American
Express</a>. Although <a href="http://visa.com">Visa</a> and <a href="http://mastercard.com">Mastercard</a> are
taken all over Europe, there is a 3% conversion charge on all foreign purchases. American
Express only charges 1% so you'll save 2 percent on all of your credit card purchases
which can add up. Also, if you get the <a href="https://www143.americanexpress.com/cards/home.do?pmccode=77#CARDS/77/0/0/-1">American
Express Blue Card</a> you can get 1.5% cashback on all of your purchases (after you
spend 5K) so then you can foreign charge expenses all together. 
</li>
          <li>
Try to book your hotels through <a href="http://expedia.com">expedia</a>  if
you cannot find a good deal on a hostel or a <a href="http://en.wikipedia.org/wiki/Pensione">pensione</a>.
This works out especially well when there is a currency conversion which is not working
in your favor. We were able to save thousands of dollars by booking a few hotels on
expedia. I'm not sure how they do it but here is an example : London conversion rate
2.1 Pound to 1 USD. Hotel Room 275 Pounds = 577.50 USD. In London we were able to
book a room @ a holiday in for only 125USD which saved us about 450 a night. In Amsterdam
we stayed for 3 nights and were saving almost 500 dollars a night on our room. I'm
not suggesting that its always best to use expedia but if its a big city, and the
dollar is not that strong (ex. like it was about a month ago), then check out expedia
before committing to anything. (As far as hostels go...DO NOT stay at any hostels
near the train station in Rome) 
</li>
          <li>
Read up on the history before you go. We read <a href="http://www.amazon.com/Rick-Steves-Europe-101-Traveler/dp/1566915163/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1227672000&amp;sr=8-1">Rick
Steve's Europe 101</a>, <a href="http://www.amazon.com/Rick-Steves-Europe-Through-Back/dp/1566918537/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1227672061&amp;sr=1-1">Rick
Steve's Europe through the Backdoor</a>, and <a href="http://www.amazon.com/Rick-Steves-Best-Europe-2008/dp/1566918529/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1227672095&amp;sr=1-2">Rick
Steve's Best of Europe</a>. The 101 book was absolutely amazing. It covered all of
the basics of history + art. Had it not been for this I would have had little to no
appreciation for most of the art we saw in the museums. Definitely bring the Best
of Europe book on your trip and instead of carrying the book around just tear out
the section which pertains to your current location and put it in your back pocket. 
</li>
          <li>
Get a good camera and read up on photo basics. We got 2 cameras before we went: A <a href="http://www.amazon.com/Canon-PowerShot-G9-Digital-Stabilized/dp/B000V1VG5G/ref=sr_1_1?ie=UTF8&amp;s=electronics&amp;qid=1227671935&amp;sr=1-1">Canon
G9</a> and a <a href="http://www.amazon.com/Canon-Digital-Camera-18-55mm-3-5-5-6/dp/B0012YA85A/ref=pd_bbs_sr_1?ie=UTF8&amp;s=electronics&amp;qid=1227671862&amp;sr=8-1">Canon
XSI SLR</a>. Both took amazing pictures which we'll enjoy forever. (We went to Chicago
earlier this year and were pretty dissapointed with some of our pics so we decided
that it was worth the extra money to upgrade cameras) 
</li>
          <li>
Talk to the locals. One of the biggest surprises that I had on the trip was how friendly
everyone was to us. People were more than willing to point you in the right direction
if you looked confused, and they were also very eager to understand more about the
US (specifically the upcoming election and our perceptions of W). The people there
really made the trip for me, on one of our last nights in Brugges we met a local older
man, who took it upon himself to walk us through the city, give us a brief historical
tour with his own personal context, invited us to dinner with his friend, and treated
us to the best beer and wine that we've had to date. 
</li>
          <li>
Talk to other people. We had such a good time meeting other Americans abroad. It was
really inspiring to see travelers of all different ages and walks of life. It definitely
helped us gain perspective on the world. 
</li>
          <li>
Eat on great meal in each city. Although we tried to cut costs as much as possible,
we did treat ourselves to a really nice meal in each of the major places that we visited.
Going out to a local gourmet meal can permanently imprint a positive outlook on your
visit. 
</li>
          <li>
Drink local beer and wine. The beer was so amazing. Luckily there is a store near
my house which imports beer from all over the world, so ive been able to drink some
of my favorites here too. 
</li>
          <li>
Share your pictures on <a href="http://flickr.com/photos/kevinandmelissa/collections/72157608790600908/">flickr</a>.
You can see our <a href="http://flickr.com/photos/kevinandmelissa/collections/72157608790600908/">Europe
2008 collection</a> and <a href="http://flickr.com/photos/kevinandmelissa/sets/">sets</a> on <a href="http://flickr.com/photos/kevinandmelissa/">our
flickr account</a>. They're all uploaded but not completely commented.</li>
        </ol>
        <p>
 
</p>
        <p>
          <strong>Final Comments</strong>
        </p>
        <p>
Of all of the things which I've done in my life, I truly believe that this was the
most enriching experience that my wife and I have shared. I cannot think of any better
way to spend a month of vacation time and a ton of money. I can't wait to go back
sometime soon....
</p>
        <p align="center">
          <a href="http://flickr.com/photos/kevinandmelissa/collections/72157608790600908/">
            <img src="http://farm4.static.flickr.com/3197/3020664435_97c4223379_m.jpg" />
          </a>
        </p>
        <img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=892e73ef-2b3c-4588-8883-cf0026ea94b2" />
      </body>
      <title>Europe Trip 2008</title>
      <guid isPermaLink="false">http://www.kevincastle.net/PermaLink,guid,892e73ef-2b3c-4588-8883-cf0026ea94b2.aspx</guid>
      <link>http://feedproxy.google.com/~r/KevinCastleDotNet/~3/lAydCeNd0NY/EuropeTrip2008.aspx</link>
      <pubDate>Wed, 26 Nov 2008 06:28:48 GMT</pubDate>
      <description>&lt;p&gt;
My wife and I recently took a 1 month trip to Europe. We had been planning this ever
since we got married (about 2 1/2 years ago) but work has been so busy that I was
never really able to find the time. We planned to be gone for 3 weeks and in the last
days leading up the trip we added an extra week. The first 2 weeks we're planned out
but after that we just used our rail pass to go wherever sounded the most interesting. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Our Itinerary&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://flickr.com/photos/kevinandmelissa/sets/72157608909585755/"&gt;London&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://flickr.com/photos/kevinandmelissa/sets/72157608909634567/"&gt;Paris&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911291802/"&gt;Versailles&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911354740/"&gt;Florence&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911386166/"&gt;Tuscan
Towns&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://flickr.com/photos/kevinandmelissa/sets/72157608909776841/"&gt;Cinque
Terre&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911447644/"&gt;Rome&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://flickr.com/photos/kevinandmelissa/sets/72157608909865531/"&gt;Amalfi
Coast&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911494820/"&gt;Pompeii&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911081380/"&gt;Venice&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911121558/"&gt;Switzerland
(Murren, Gimmelwald, Latterbrunnen, and Interlaken)&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911185972/"&gt;Germany
(Rothenburg)&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://flickr.com/photos/kevinandmelissa/sets/72157608911529332/"&gt;Amsterdam&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://flickr.com/photos/kevinandmelissa/sets/72157608909996955/"&gt;Belgium
(Brugges)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;My Humble Recommendations when Traveling in Europe&lt;/strong&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Make all of your foreign purchases with an &lt;a href="http://americanexpress.com/"&gt;American
Express&lt;/a&gt;. Although &lt;a href="http://visa.com"&gt;Visa&lt;/a&gt; and &lt;a href="http://mastercard.com"&gt;Mastercard&lt;/a&gt; are
taken all over Europe, there is a 3% conversion charge on all foreign purchases. American
Express only charges 1% so you'll save 2 percent on all of your credit card purchases
which can add up. Also, if you get the &lt;a href="https://www143.americanexpress.com/cards/home.do?pmccode=77#CARDS/77/0/0/-1"&gt;American
Express Blue Card&lt;/a&gt; you can get 1.5% cashback on all of your purchases (after you
spend 5K) so then you can foreign charge expenses all together. 
&lt;li&gt;
Try to book your hotels through &lt;a href="http://expedia.com"&gt;expedia&lt;/a&gt;&amp;nbsp; if
you cannot find a good deal on a hostel or a &lt;a href="http://en.wikipedia.org/wiki/Pensione"&gt;pensione&lt;/a&gt;.
This works out especially well when there is a currency conversion which is not working
in your favor. We were able to save thousands of dollars by booking a few hotels on
expedia. I'm not sure how they do it but here is an example : London conversion rate
2.1 Pound to 1 USD. Hotel Room 275 Pounds = 577.50 USD. In London we were able to
book a room @ a holiday in for only 125USD which saved us about 450 a night. In Amsterdam
we stayed for 3 nights and were saving almost 500 dollars a night on our room. I'm
not suggesting that its always best to use expedia but if its a big city, and the
dollar is not that strong (ex. like it was about a month ago), then check out expedia
before committing to anything. (As far as hostels go...DO NOT stay at any hostels
near the train station in Rome) 
&lt;li&gt;
Read up on the history before you go. We read &lt;a href="http://www.amazon.com/Rick-Steves-Europe-101-Traveler/dp/1566915163/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1227672000&amp;amp;sr=8-1"&gt;Rick
Steve's Europe 101&lt;/a&gt;, &lt;a href="http://www.amazon.com/Rick-Steves-Europe-Through-Back/dp/1566918537/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1227672061&amp;amp;sr=1-1"&gt;Rick
Steve's Europe through the Backdoor&lt;/a&gt;, and &lt;a href="http://www.amazon.com/Rick-Steves-Best-Europe-2008/dp/1566918529/ref=sr_1_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1227672095&amp;amp;sr=1-2"&gt;Rick
Steve's Best of Europe&lt;/a&gt;. The 101 book was absolutely amazing. It covered all of
the basics of history + art. Had it not been for this I would have had little to no
appreciation for most of the art we saw in the museums. Definitely bring the Best
of Europe book on your trip and instead of carrying the book around just tear out
the section which pertains to your current location and put it in your back pocket. 
&lt;li&gt;
Get a good camera and read up on photo basics. We got 2 cameras before we went: A &lt;a href="http://www.amazon.com/Canon-PowerShot-G9-Digital-Stabilized/dp/B000V1VG5G/ref=sr_1_1?ie=UTF8&amp;amp;s=electronics&amp;amp;qid=1227671935&amp;amp;sr=1-1"&gt;Canon
G9&lt;/a&gt; and a &lt;a href="http://www.amazon.com/Canon-Digital-Camera-18-55mm-3-5-5-6/dp/B0012YA85A/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=electronics&amp;amp;qid=1227671862&amp;amp;sr=8-1"&gt;Canon
XSI SLR&lt;/a&gt;. Both took amazing pictures which we'll enjoy forever. (We went to Chicago
earlier this year and were pretty dissapointed with some of our pics so we decided
that it was worth the extra money to upgrade cameras) 
&lt;li&gt;
Talk to the locals. One of the biggest surprises that I had on the trip was how friendly
everyone was to us. People were more than willing to point you in the right direction
if you looked confused, and they were also very eager to understand more about the
US (specifically the upcoming election and our perceptions of W). The people there
really made the trip for me, on one of our last nights in Brugges we met a local older
man, who took it upon himself to walk us through the city, give us a brief historical
tour with his own personal context, invited us to dinner with his friend, and treated
us to the best beer and wine that we've had to date. 
&lt;li&gt;
Talk to other people. We had such a good time meeting other Americans abroad. It was
really inspiring to see travelers of all different ages and walks of life. It definitely
helped us gain perspective on the world. 
&lt;li&gt;
Eat on great meal in each city. Although we tried to cut costs as much as possible,
we did treat ourselves to a really nice meal in each of the major places that we visited.
Going out to a local gourmet meal can permanently imprint a positive outlook on your
visit. 
&lt;li&gt;
Drink local beer and wine. The beer was so amazing. Luckily there is a store near
my house which imports beer from all over the world, so ive been able to drink some
of my favorites here too. 
&lt;li&gt;
Share your pictures on &lt;a href="http://flickr.com/photos/kevinandmelissa/collections/72157608790600908/"&gt;flickr&lt;/a&gt;.
You can see our &lt;a href="http://flickr.com/photos/kevinandmelissa/collections/72157608790600908/"&gt;Europe
2008 collection&lt;/a&gt; and &lt;a href="http://flickr.com/photos/kevinandmelissa/sets/"&gt;sets&lt;/a&gt; on &lt;a href="http://flickr.com/photos/kevinandmelissa/"&gt;our
flickr account&lt;/a&gt;. They're all uploaded but not completely commented.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Final Comments&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Of all of the things which I've done in my life, I truly believe that this was the
most enriching experience that my wife and I have shared. I cannot think of any better
way to spend a month of vacation time and a ton of money. I can't wait to go back
sometime soon....
&lt;/p&gt;
&lt;p align=center&gt;
&lt;a href="http://flickr.com/photos/kevinandmelissa/collections/72157608790600908/"&gt;&lt;img src="http://farm4.static.flickr.com/3197/3020664435_97c4223379_m.jpg"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=892e73ef-2b3c-4588-8883-cf0026ea94b2" /&gt;</description>
      <comments>http://www.kevincastle.net/CommentView,guid,892e73ef-2b3c-4588-8883-cf0026ea94b2.aspx</comments>
      <category>Personal</category>
    <feedburner:origLink>http://www.kevincastle.net/EuropeTrip2008.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.kevincastle.net/Trackback.aspx?guid=b92b6979-1c36-41e0-9a6e-4a030bd482ea</trackback:ping>
      <pingback:server>http://www.kevincastle.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.kevincastle.net/PermaLink,guid,b92b6979-1c36-41e0-9a6e-4a030bd482ea.aspx</pingback:target>
      <dc:creator>Kevin Castle</dc:creator>
      <wfw:comment>http://www.kevincastle.net/CommentView,guid,b92b6979-1c36-41e0-9a6e-4a030bd482ea.aspx</wfw:comment>
      <wfw:commentRss>http://www.kevincastle.net/SyndicationService.asmx/GetEntryCommentsRss?guid=b92b6979-1c36-41e0-9a6e-4a030bd482ea</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Wow its been a long time since this blog has seen an update. The project that ive
been working on has demanded much more time ... like 2 years of my dedicated attention.
Im vowing @ this time to start posting on this blog again. Im not sure if anyone is
even subscribed to this anymore but what will come in the next few days are more posts
on WCF, AJAX, ASP.NET and probably less of TFS releated topics.
</p>
        <img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=b92b6979-1c36-41e0-9a6e-4a030bd482ea" />
      </body>
      <title>Its been way too long since Ive posted</title>
      <guid isPermaLink="false">http://www.kevincastle.net/PermaLink,guid,b92b6979-1c36-41e0-9a6e-4a030bd482ea.aspx</guid>
      <link>http://feedproxy.google.com/~r/KevinCastleDotNet/~3/RablxFIeS0U/ItsBeenWayTooLongSinceIvePosted.aspx</link>
      <pubDate>Mon, 24 Nov 2008 06:09:48 GMT</pubDate>
      <description>&lt;p&gt;
Wow its been a long time since this blog has seen an update. The project that ive
been working on has demanded much more time ... like 2 years of my dedicated attention.
Im vowing @ this time to start posting on this blog again. Im not sure if anyone is
even subscribed to this anymore but what will come in the next few days are more posts
on WCF, AJAX, ASP.NET and probably less of TFS releated topics.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=b92b6979-1c36-41e0-9a6e-4a030bd482ea" /&gt;</description>
      <comments>http://www.kevincastle.net/CommentView,guid,b92b6979-1c36-41e0-9a6e-4a030bd482ea.aspx</comments>
    <feedburner:origLink>http://www.kevincastle.net/ItsBeenWayTooLongSinceIvePosted.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.kevincastle.net/Trackback.aspx?guid=0ed07022-a50d-4fdf-bb00-4f7aff93628e</trackback:ping>
      <pingback:server>http://www.kevincastle.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.kevincastle.net/PermaLink,guid,0ed07022-a50d-4fdf-bb00-4f7aff93628e.aspx</pingback:target>
      <dc:creator>Kevin Castle</dc:creator>
      <wfw:comment>http://www.kevincastle.net/CommentView,guid,0ed07022-a50d-4fdf-bb00-4f7aff93628e.aspx</wfw:comment>
      <wfw:commentRss>http://www.kevincastle.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0ed07022-a50d-4fdf-bb00-4f7aff93628e</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
About 3 months ago I had a need to do some in-memory sorting on a generic list
of objects which were being bound to a GridView control. Due to the fact that we were
not working with standard ADO.NET objects and that LINQ has not been fully released,
we decided to get clever and come up with a simple sorting method which could handle
the case where the a list of objects could be sorted by any one of the fields which
was clicked on the GridView control. Note: For the sake of simplicity, I created a
dumbed down version of both the object and the sorting method, such that all properties
were strings.
</p>
        <p>
For weeks I had heard <a href="http://sashasydoruk.com" target="_blank">Sasha</a> talk
about how neat anonymous methods were in .NET 2.0, so we sat down and wrote out
this nice little SortBy() function. 1st we enumerated through the generic list. 2nd
we took the passed propertyname and did a compare between the properties in the two
different customer objects. 3rd we used the SortDirection to determine how we would
return the compare results. The result, a great little method which is capable of
sorting a generic collection with only the objects propertyname and the sortdirection
supplied.
</p>
        <p>
 
</p>
        <pre>
          <span style="COLOR: blue">public</span>
          <span style="COLOR: blue">class</span> CustomerList
: List&lt;Customer&gt; { <span style="COLOR: gray">/// &lt;summary&gt;</span><span style="COLOR: gray">///
Sorts the CustomerList using Generics, Anonymous Methods, and Reflection </span><span style="COLOR: gray">///
&lt;/summary&gt;</span><span style="COLOR: gray">/// &lt;param name="propertyName"&gt;Property
Name to sort the List with&lt;/param&gt;</span><span style="COLOR: gray">/// &lt;param
name="sortDirection"&gt;Direction to sort the List&lt;/param&gt;</span><span style="COLOR: blue">public</span><span style="COLOR: blue">void</span> SortBy(<span style="COLOR: blue">string</span> propertyName,
SortDirection sortDirection) { <span style="COLOR: blue">this</span>.Sort ( <span style="COLOR: green">//Anonymous
method used sort the base generic list.</span><span style="COLOR: blue">delegate</span>(Customer
item1, Customer item2) { <span style="COLOR: green">//Use reflection to get the Properties</span> PropertyInfo
prop1 = item1.GetType().GetProperty(propertyName); PropertyInfo prop2 = item2.GetType().GetProperty(propertyName); <span style="COLOR: blue">if</span> (prop1
== <span style="COLOR: blue">null</span> || prop2 == <span style="COLOR: blue">null</span>)
{ <span style="COLOR: blue">throw</span><span style="COLOR: blue">new</span> ArgumentException(<span style="COLOR: maroon">"Invalid
property name: "</span> + propertyName + <span style="COLOR: maroon">" specified."</span>);
} <span style="COLOR: green">//Get the property values from each of the objects</span><span style="COLOR: blue">string</span> value1
= (<span style="COLOR: blue">string</span>)prop1.GetValue(item1, <span style="COLOR: blue">null</span>); <span style="COLOR: blue">string</span> value2
= (<span style="COLOR: blue">string</span>)prop2.GetValue(item2, <span style="COLOR: blue">null</span>); <span style="COLOR: blue">int</span> compareVal
= Comparer.Default.Compare(value1, value2); <span style="COLOR: blue">if</span> (sortDirection
== SortDirection.Ascending) <span style="COLOR: blue">return</span> compareVal; <span style="COLOR: blue">else</span><span style="COLOR: blue">return</span> compareVal
* -<span style="COLOR: maroon">1</span>; <span style="COLOR: green">//return the negated
value</span> } ); } } <span style="COLOR: blue">public</span><span style="COLOR: blue">class</span> Customer
{ <span style="COLOR: blue">private</span><font color="#0000ff">string</font> _id; <span style="COLOR: blue">private</span><span style="COLOR: blue">string</span> _firstName; <span style="COLOR: blue">private</span><span style="COLOR: blue">string</span> _lastName; <span style="COLOR: blue">private</span><font color="#0000ff">string</font> _age; <span style="COLOR: blue">public</span><font color="#0000ff">string</font> ID
{ <span style="COLOR: blue">get</span> { <span style="COLOR: blue">return</span> _id;
} <span style="COLOR: blue">set</span> { _id = value; } } <span style="COLOR: blue">public</span><span style="COLOR: blue">string</span> FirstName
{ <span style="COLOR: blue">get</span> { <span style="COLOR: blue">return</span> _firstName;
} <span style="COLOR: blue">set</span> { _firstName = value; } } <span style="COLOR: blue">public</span><span style="COLOR: blue">string</span> LastName
{ <span style="COLOR: blue">get</span> { <span style="COLOR: blue">return</span> _lastName;
} <span style="COLOR: blue">set</span> { _lastName = value; } } <span style="COLOR: blue">public</span><font color="#0000ff">string</font> Age
{ <span style="COLOR: blue">get</span> { <span style="COLOR: blue">return</span> _age;
} <span style="COLOR: blue">set</span> { _age = value; } } } 
<br /><br /><a href="http://www.dotnetkicks.com/kick/?url=http://www.kevincastle.net/SortingGenericListsWithAnonymousMethodsAndReflection.aspx"><img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://www.kevincastle.net/SortingGenericListsWithAnonymousMethodsAndReflection.aspx" border="0" /></a></pre>
        <img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=0ed07022-a50d-4fdf-bb00-4f7aff93628e" />
      </body>
      <title>Sorting Generic Lists With Anonymous Methods and Reflection</title>
      <guid isPermaLink="false">http://www.kevincastle.net/PermaLink,guid,0ed07022-a50d-4fdf-bb00-4f7aff93628e.aspx</guid>
      <link>http://feedproxy.google.com/~r/KevinCastleDotNet/~3/_G9Z6YEyFEc/SortingGenericListsWithAnonymousMethodsAndReflection.aspx</link>
      <pubDate>Wed, 21 Mar 2007 22:38:41 GMT</pubDate>
      <description>&lt;p&gt;
About&amp;nbsp;3 months ago I had a need to do some in-memory sorting on a generic list
of objects which were being bound to a GridView control. Due to the fact that we were
not working with standard ADO.NET objects and that LINQ has not been fully released,
we decided to get clever and come up with a simple sorting method which could handle
the case where the a list of objects could be sorted by any one of the fields which
was clicked on the GridView control. Note: For the sake of simplicity, I created a
dumbed down version of both the object and the sorting method, such that all properties
were strings.
&lt;/p&gt;
&lt;p&gt;
For weeks I had heard &lt;a href="http://sashasydoruk.com" target=_blank&gt;Sasha&lt;/a&gt; talk
about how neat anonymous methods were in .NET 2.0,&amp;nbsp;so we sat down and wrote out
this nice little SortBy() function. 1st we enumerated through the generic list. 2nd
we took the passed propertyname and did a compare between the properties in the two
different customer objects. 3rd we used the SortDirection to determine how we would
return the compare results. The result, a great little method which is capable of
sorting a generic collection with only the objects propertyname and the sortdirection
supplied.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;pre&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; CustomerList
: List&amp;lt;Customer&amp;gt; { &lt;span style="COLOR: gray"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt; &lt;span style="COLOR: gray"&gt;///
Sorts the CustomerList using Generics, Anonymous Methods, and Reflection &lt;/span&gt; &lt;span style="COLOR: gray"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt; &lt;span style="COLOR: gray"&gt;/// &amp;lt;param name="propertyName"&amp;gt;Property
Name to sort the List with&amp;lt;/param&amp;gt;&lt;/span&gt; &lt;span style="COLOR: gray"&gt;/// &amp;lt;param
name="sortDirection"&amp;gt;Direction to sort the List&amp;lt;/param&amp;gt;&lt;/span&gt; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; SortBy(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; propertyName,
SortDirection sortDirection) { &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.Sort ( &lt;span style="COLOR: green"&gt;//Anonymous
method used sort the base generic list.&lt;/span&gt; &lt;span style="COLOR: blue"&gt;delegate&lt;/span&gt;(Customer
item1, Customer item2) { &lt;span style="COLOR: green"&gt;//Use reflection to get the Properties&lt;/span&gt; PropertyInfo
prop1 = item1.GetType().GetProperty(propertyName); PropertyInfo prop2 = item2.GetType().GetProperty(propertyName); &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (prop1
== &lt;span style="COLOR: blue"&gt;null&lt;/span&gt; || prop2 == &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)
{ &lt;span style="COLOR: blue"&gt;throw&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; ArgumentException(&lt;span style="COLOR: maroon"&gt;"Invalid
property name: "&lt;/span&gt; + propertyName + &lt;span style="COLOR: maroon"&gt;" specified."&lt;/span&gt;);
} &lt;span style="COLOR: green"&gt;//Get the property values from each of the objects&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; value1
= (&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;)prop1.GetValue(item1, &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;); &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; value2
= (&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;)prop2.GetValue(item2, &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;); &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; compareVal
= Comparer.Default.Compare(value1, value2); &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (sortDirection
== SortDirection.Ascending) &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; compareVal; &lt;span style="COLOR: blue"&gt;else&lt;/span&gt; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; compareVal
* -&lt;span style="COLOR: maroon"&gt;1&lt;/span&gt;; &lt;span style="COLOR: green"&gt;//return the negated
value&lt;/span&gt; } ); } } &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; Customer
{ &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;font color=#0000ff&gt;string&lt;/font&gt; _id; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; _firstName; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; _lastName; &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;font color=#0000ff&gt;string&lt;/font&gt; _age; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;font color=#0000ff&gt;string&lt;/font&gt; ID
{ &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _id;
} &lt;span style="COLOR: blue"&gt;set&lt;/span&gt; { _id = value; } } &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; FirstName
{ &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _firstName;
} &lt;span style="COLOR: blue"&gt;set&lt;/span&gt; { _firstName = value; } } &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; LastName
{ &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _lastName;
} &lt;span style="COLOR: blue"&gt;set&lt;/span&gt; { _lastName = value; } } &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;font color=#0000ff&gt;string&lt;/font&gt; Age
{ &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _age;
} &lt;span style="COLOR: blue"&gt;set&lt;/span&gt; { _age = value; } } } 
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http://www.kevincastle.net/SortingGenericListsWithAnonymousMethodsAndReflection.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://www.kevincastle.net/SortingGenericListsWithAnonymousMethodsAndReflection.aspx" border=0&gt;&lt;/a&gt; &lt;/pre&gt;
&lt;img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=0ed07022-a50d-4fdf-bb00-4f7aff93628e" /&gt;</description>
      <comments>http://www.kevincastle.net/CommentView,guid,0ed07022-a50d-4fdf-bb00-4f7aff93628e.aspx</comments>
      <category>.Net 2.0</category>
    <feedburner:origLink>http://www.kevincastle.net/SortingGenericListsWithAnonymousMethodsAndReflection.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.kevincastle.net/Trackback.aspx?guid=f7156076-f48c-4313-8485-a56830466631</trackback:ping>
      <pingback:server>http://www.kevincastle.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.kevincastle.net/PermaLink,guid,f7156076-f48c-4313-8485-a56830466631.aspx</pingback:target>
      <dc:creator>Kevin Castle</dc:creator>
      <wfw:comment>http://www.kevincastle.net/CommentView,guid,f7156076-f48c-4313-8485-a56830466631.aspx</wfw:comment>
      <wfw:commentRss>http://www.kevincastle.net/SyndicationService.asmx/GetEntryCommentsRss?guid=f7156076-f48c-4313-8485-a56830466631</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Old news...but very cool if you didnt already know....Team Foundation Server Power
Tools v1.2 was released. 
</p>
        <blockquote>
          <p>
The Microsoft Visual Studio 2005 Team Foundation Server Power Tool (formerly known
as Power Toys) is a set of enhancements, tools and command-line utilities that improve
the Team Foundation Server user experience. This release includes two new command-line
tools for the developer and three non-command line tools: a process template editor,
a set of custom check-in policies, and a test tools build task: 
</p>
          <ul>
            <li>
              <a href="http://msdn2.microsoft.com/en-us/teamsystem/aa718351.aspx#tfpt">Team Foundation
Server Power Tool Commands (tfpt.exe)</a> - A command-line tool with enhanced functionality
for Team Foundation Version Control with graphical user interfaces for some commands. 
</li>
            <li>
              <a href="http://msdn2.microsoft.com/en-us/teamsystem/aa718351.aspx#pte">Process Template
Editor</a> - A tool integrated with Visual Studio for authoring custom work item types
and some of the associated process template components. 
</li>
            <li>
              <a href="http://msdn2.microsoft.com/en-us/teamsystem/aa718351.aspx#cipp">Check-In
Policy Pack</a> - A set of handy check-in policies to address needs customers have
expressed. 
</li>
            <li>
              <a href="http://msdn2.microsoft.com/en-us/teamsystem/aa718351.aspx#bttt">Test Tools
Build Task</a> - A tool that allows running unit tests by simply specifying the DLLs,
or by specifying a file name pattern in TfsBuild.proj, instead of using .vsmdi files
to specify tests to run.</li>
          </ul>
        </blockquote>
        <p>
I was a little bummed that the check-in policy pack didn't have any of the policies
which I had requested (laughs)(especially since I <a href="http://www.kevincastle.net/CheckInPoliciesFeedbackRequest.aspx" target="_blank">posted</a> on
sending all of your comments). With that aside I couldnt have been happier with this
release of the Process Template Editor. The integration with visual studio, the form
control, and the validations were a great upgrade in this release. Note: You must
first install the <a href="http://go.microsoft.com/?linkid=6270225" target="_blank">Domain-Specific
Language Tools for Visual Studio 2005</a> in order for the Process Template Editor
to appear in the Team Menu.
</p>
        <p>
Here are a few screenshots of some of the process template editor features:
</p>
        <p>
          <a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/NewPowertoolsforTeamFoundationServer_12708/image%7B0%7D%5B17%5D.png" atomicselection="true">
            <img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="213" src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/NewPowertoolsforTeamFoundationServer_12708/image%7B0%7D_thumb%5B7%5D.png" width="286" border="0" />
          </a>
        </p>
        <p>
Screen - Editing the Process Template
</p>
        <p>
          <a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/NewPowertoolsforTeamFoundationServer_12708/image%7B0%7D%5B15%5D.png" atomicselection="true">
            <img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="222" src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/NewPowertoolsforTeamFoundationServer_12708/image%7B0%7D_thumb%5B5%5D.png" width="284" border="0" />
          </a>
        </p>
        <p>
Screen - Editing a work item type
</p>
        <p>
          <a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/NewPowertoolsforTeamFoundationServer_12708/image%7B0%7D%5B14%5D.png" atomicselection="true">
            <img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="252" src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/NewPowertoolsforTeamFoundationServer_12708/image%7B0%7D_thumb%5B4%5D.png" width="282" border="0" />
          </a>
        </p>
        <p>
Screen - Previewing the work item control
</p>
        <p>
          <a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/NewPowertoolsforTeamFoundationServer_12708/image%7B0%7D%5B20%5D.png" atomicselection="true">
            <img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="170" src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/NewPowertoolsforTeamFoundationServer_12708/image%7B0%7D_thumb%5B8%5D.png" width="284" border="0" />
          </a>
        </p>
        <p>
Screen - Work Item workflow
</p>
        <p>
In the end, I couldn't be happier because this release came at the perfect time for
me. I am steadily working on my Master's Project and alot my project will require
me to customize the MSF for Agile process template, work items, and reports. Currently,
my tentative title is "Customizing Team Foundation Server Process Templates for Software
Quality Improvements". I know its quite a mouthfull, but I figured it would be a great
way to learn the ins-and-outs of TFS and how to apply some of my <a href="http://www.fullerton.edu/ecs/mse/" target="_blank">MSE
Master's</a> knowledge to Microsoft's latest and greatest.
</p>
        <img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=f7156076-f48c-4313-8485-a56830466631" />
      </body>
      <title>Team Foundation Server Power Tools v1.2 Released</title>
      <guid isPermaLink="false">http://www.kevincastle.net/PermaLink,guid,f7156076-f48c-4313-8485-a56830466631.aspx</guid>
      <link>http://feedproxy.google.com/~r/KevinCastleDotNet/~3/vhhl9vWnYVc/TeamFoundationServerPowerToolsV12Released.aspx</link>
      <pubDate>Wed, 21 Mar 2007 04:13:57 GMT</pubDate>
      <description>&lt;p&gt;
Old news...but very cool if you didnt already know....Team Foundation Server Power
Tools v1.2 was released. 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
The Microsoft Visual Studio 2005 Team Foundation Server Power Tool (formerly known
as Power Toys) is a set of enhancements, tools and command-line utilities that improve
the Team Foundation Server user experience. This release includes two new command-line
tools for the developer and three non-command line tools: a process template editor,
a set of custom check-in policies, and a test tools build task: 
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://msdn2.microsoft.com/en-us/teamsystem/aa718351.aspx#tfpt"&gt;Team Foundation
Server Power Tool Commands (tfpt.exe)&lt;/a&gt; - A command-line tool with enhanced functionality
for Team Foundation Version Control with graphical user interfaces for some commands. 
&lt;li&gt;
&lt;a href="http://msdn2.microsoft.com/en-us/teamsystem/aa718351.aspx#pte"&gt;Process Template
Editor&lt;/a&gt; - A tool integrated with Visual Studio for authoring custom work item types
and some of the associated process template components. 
&lt;li&gt;
&lt;a href="http://msdn2.microsoft.com/en-us/teamsystem/aa718351.aspx#cipp"&gt;Check-In
Policy Pack&lt;/a&gt; - A set of handy check-in policies to address needs customers have
expressed. 
&lt;li&gt;
&lt;a href="http://msdn2.microsoft.com/en-us/teamsystem/aa718351.aspx#bttt"&gt;Test Tools
Build Task&lt;/a&gt; - A tool that allows running unit tests by simply specifying the DLLs,
or by specifying a file name pattern in TfsBuild.proj, instead of using .vsmdi files
to specify tests to run.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I was a little bummed that the check-in policy pack didn't have any of the policies
which I had requested (laughs)(especially since I &lt;a href="http://www.kevincastle.net/CheckInPoliciesFeedbackRequest.aspx" target=_blank&gt;posted&lt;/a&gt; on
sending all of your comments). With that aside I couldnt have been happier with this
release of the Process Template Editor. The integration with visual studio, the form
control, and the validations were a great upgrade in this release. Note: You must
first install the &lt;a href="http://go.microsoft.com/?linkid=6270225" target=_blank&gt;Domain-Specific
Language Tools for Visual Studio 2005&lt;/a&gt; in order for the Process Template Editor
to appear in the Team Menu.
&lt;/p&gt;
&lt;p&gt;
Here are a few screenshots of some of the process template editor features:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/NewPowertoolsforTeamFoundationServer_12708/image%7B0%7D%5B17%5D.png" atomicselection="true"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=213 src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/NewPowertoolsforTeamFoundationServer_12708/image%7B0%7D_thumb%5B7%5D.png" width=286 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Screen&amp;nbsp;- Editing the Process Template
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/NewPowertoolsforTeamFoundationServer_12708/image%7B0%7D%5B15%5D.png" atomicselection="true"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=222 src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/NewPowertoolsforTeamFoundationServer_12708/image%7B0%7D_thumb%5B5%5D.png" width=284 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Screen - Editing a work item type
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/NewPowertoolsforTeamFoundationServer_12708/image%7B0%7D%5B14%5D.png" atomicselection="true"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=252 src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/NewPowertoolsforTeamFoundationServer_12708/image%7B0%7D_thumb%5B4%5D.png" width=282 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Screen - Previewing the work item control
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/NewPowertoolsforTeamFoundationServer_12708/image%7B0%7D%5B20%5D.png" atomicselection="true"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=170 src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/NewPowertoolsforTeamFoundationServer_12708/image%7B0%7D_thumb%5B8%5D.png" width=284 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Screen - Work Item workflow
&lt;/p&gt;
&lt;p&gt;
In the end, I couldn't be happier because this release came at the perfect time for
me. I am steadily working on my Master's Project and alot my project will require
me to customize the MSF for Agile process template, work items, and reports. Currently,
my tentative title is "Customizing Team Foundation Server Process Templates for Software
Quality Improvements". I know its quite a mouthfull, but I figured it would be a great
way to learn the ins-and-outs of TFS and how to apply some of my &lt;a href="http://www.fullerton.edu/ecs/mse/" target=_blank&gt;MSE
Master's&lt;/a&gt; knowledge to Microsoft's latest and greatest.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=f7156076-f48c-4313-8485-a56830466631" /&gt;</description>
      <comments>http://www.kevincastle.net/CommentView,guid,f7156076-f48c-4313-8485-a56830466631.aspx</comments>
      <category>Team Foundation Server;Visual Studio 2005;MSE Project</category>
    <feedburner:origLink>http://www.kevincastle.net/TeamFoundationServerPowerToolsV12Released.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.kevincastle.net/Trackback.aspx?guid=e426435b-2083-4cb8-a2f2-c75b22e1a508</trackback:ping>
      <pingback:server>http://www.kevincastle.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.kevincastle.net/PermaLink,guid,e426435b-2083-4cb8-a2f2-c75b22e1a508.aspx</pingback:target>
      <dc:creator>Kevin Castle</dc:creator>
      <wfw:comment>http://www.kevincastle.net/CommentView,guid,e426435b-2083-4cb8-a2f2-c75b22e1a508.aspx</wfw:comment>
      <wfw:commentRss>http://www.kevincastle.net/SyndicationService.asmx/GetEntryCommentsRss?guid=e426435b-2083-4cb8-a2f2-c75b22e1a508</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
After installing <a href="http://www.kevincastle.net/CategoryView,category,Team%2BFoundation%2BServer.aspx" target="_blank">Team
Foundation Server</a> and <a href="http://www.kevincastle.net/CategoryView,category,Team%2BFoundation%2BBuild.aspx" target="_blank">Team
Foundation Build</a>, I came across a problem where I would successfully execute a
Build on the project, however the build would not appear in the Build Report. 
</p>
        <p>
          <a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/TFSBuildsNotShowingUpInReports_139BE/image012.png" atomicselection="true">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="163" src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/TFSBuildsNotShowingUpInReports_139BE/image0_thumb4.png" width="464" border="0" />
          </a> 
</p>
        <p>
I opened up the Builds database on the TFS Server to see whether not the builds had
been recognized. I found that the builds were being stored but that they were not
being pulled over into the reports.
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/TFSBuildsNotShowingUpInReports_139BE/image011.png" atomicselection="true">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="63" src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/TFSBuildsNotShowingUpInReports_139BE/image0_thumb3.png" width="465" border="0" />
          </a>
        </p>
        <p>
This issue is a result of the fact that the reports in TFS are pulled from the data
warehouse and the not the Builds Database. In order to decrease the latency between
your builds showing up in your Build reports (along with any other TFS changes not
showing up in your reports....ex. closing out a bunch of work items and having it
reflect on your "Remaining Work" reports) you can change the rate at which the datawarehouse
is updated.
</p>
        <p>
The warehouse is updated on a timer so in order to improve the turn around for your
reports (or more importantly if you need to pull some reports from some data which
has not been updated in the warehouse) then you can modify the update interval by
calling this webservice.
</p>
        <p>
          <strong>Changing the Interval Setting</strong>
        </p>
        <p>
In Internet Explorer, open the following URL: 
</p>
        <p>
http://&lt;tfsserver&gt;:8080/Warehouse/v1.0/warehousecontroller.asmx?op=ChangeSetting 
</p>
        <p>
where &lt;tfsserver&gt; represents the name of the Team Foundation Server. A page
that contains two boxes labeled settingID and newValue opens. 
</p>
        <p>
In the box labeled settingID, type RunIntervalSeconds. 
</p>
        <p>
In the box labeled newValue, type the new interval time in seconds. 
</p>
        <p>
Click Invoke to change the setting. 
</p>
        <p>
Security 
</p>
        <p>
To perform this procedure, you must be a member of the Administrators group on the
Team Foundation application-tier server. For more information, see Team Foundation
Server Permissions. 
</p>
        <p>
  
</p>
        <p>
          <strong>Manually Kick Off the DataWarehouse Update</strong>
        </p>
        <p>
1. Go to http://localhost:8080/Warehouse/warehousecontroller.asmx using a browser
on the app tier. 
</p>
        <p>
2. Click the ‘Run’ link. 
</p>
        <p>
3. Press the ‘Invoke’ button. 
</p>
        <p>
This will trigger a refresh of the reports. 
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/TFSBuildsNotShowingUpInReports_139BE/image06.png" atomicselection="true">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="411" src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/TFSBuildsNotShowingUpInReports_139BE/image0_thumb2.png" width="466" border="0" />
          </a>
        </p>
        <img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=e426435b-2083-4cb8-a2f2-c75b22e1a508" />
      </body>
      <title>TFS Builds Not Showing Up In Reports</title>
      <guid isPermaLink="false">http://www.kevincastle.net/PermaLink,guid,e426435b-2083-4cb8-a2f2-c75b22e1a508.aspx</guid>
      <link>http://feedproxy.google.com/~r/KevinCastleDotNet/~3/D07fZmNQnIw/TFSBuildsNotShowingUpInReports.aspx</link>
      <pubDate>Fri, 19 Jan 2007 16:12:57 GMT</pubDate>
      <description>&lt;p&gt;
After installing &lt;a href="http://www.kevincastle.net/CategoryView,category,Team%2BFoundation%2BServer.aspx" target="_blank"&gt;Team
Foundation Server&lt;/a&gt; and &lt;a href="http://www.kevincastle.net/CategoryView,category,Team%2BFoundation%2BBuild.aspx" target="_blank"&gt;Team
Foundation Build&lt;/a&gt;, I came across a problem where I would successfully execute a
Build on the project, however the build would not appear in the Build Report. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/TFSBuildsNotShowingUpInReports_139BE/image012.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="163" src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/TFSBuildsNotShowingUpInReports_139BE/image0_thumb4.png" width="464" border="0"&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
I opened up the Builds database on the TFS Server to see whether not the builds had
been recognized. I found that the builds were being stored but that they were not
being pulled over into the reports.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/TFSBuildsNotShowingUpInReports_139BE/image011.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="63" src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/TFSBuildsNotShowingUpInReports_139BE/image0_thumb3.png" width="465" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
This issue is a result of the fact that the reports in TFS are pulled from the data
warehouse and the not the Builds Database. In order to decrease the latency between
your builds showing up in your Build reports (along with any other TFS changes not
showing up in your reports....ex. closing out a bunch of work items and having it
reflect on your "Remaining Work" reports) you can change the rate at which the datawarehouse
is updated.
&lt;/p&gt;
&lt;p&gt;
The warehouse is updated on a timer so in order to improve the turn around for your
reports (or more importantly if you need to pull some reports from some data which
has not been updated in the warehouse) then you can modify the update interval by
calling this webservice.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Changing the Interval Setting&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
In Internet Explorer, open the following URL: 
&lt;p&gt;
http://&amp;lt;tfsserver&amp;gt;:8080/Warehouse/v1.0/warehousecontroller.asmx?op=ChangeSetting 
&lt;p&gt;
where &amp;lt;tfsserver&amp;gt; represents the name of the Team Foundation Server. A page
that contains two boxes labeled settingID and newValue opens. 
&lt;p&gt;
In the box labeled settingID, type RunIntervalSeconds. 
&lt;p&gt;
In the box labeled newValue, type the new interval time in seconds. 
&lt;p&gt;
Click Invoke to change the setting. 
&lt;p&gt;
Security 
&lt;p&gt;
To perform this procedure, you must be a member of the Administrators group on the
Team Foundation application-tier server. For more information, see Team Foundation
Server Permissions. 
&lt;p&gt;
&amp;nbsp; 
&lt;p&gt;
&lt;strong&gt;Manually Kick Off the DataWarehouse Update&lt;/strong&gt; 
&lt;p&gt;
1. Go to http://localhost:8080/Warehouse/warehousecontroller.asmx using a browser
on the app tier. 
&lt;p&gt;
2. Click the ‘Run’ link. 
&lt;p&gt;
3. Press the ‘Invoke’ button. 
&lt;p&gt;
This will trigger a refresh of the reports. 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.kevincastle.net/content/binary/WindowsLiveWriter/TFSBuildsNotShowingUpInReports_139BE/image06.png" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="411" src="http://www.kevincastle.net/content/binary/WindowsLiveWriter/TFSBuildsNotShowingUpInReports_139BE/image0_thumb2.png" width="466" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=e426435b-2083-4cb8-a2f2-c75b22e1a508" /&gt;</description>
      <comments>http://www.kevincastle.net/CommentView,guid,e426435b-2083-4cb8-a2f2-c75b22e1a508.aspx</comments>
      <category>Team Foundation Build;Team Foundation Server</category>
    <feedburner:origLink>http://www.kevincastle.net/TFSBuildsNotShowingUpInReports.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.kevincastle.net/Trackback.aspx?guid=677a27b3-0b20-4d58-a588-939d2c726658</trackback:ping>
      <pingback:server>http://www.kevincastle.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.kevincastle.net/PermaLink,guid,677a27b3-0b20-4d58-a588-939d2c726658.aspx</pingback:target>
      <dc:creator>Kevin Castle</dc:creator>
      <wfw:comment>http://www.kevincastle.net/CommentView,guid,677a27b3-0b20-4d58-a588-939d2c726658.aspx</wfw:comment>
      <wfw:commentRss>http://www.kevincastle.net/SyndicationService.asmx/GetEntryCommentsRss?guid=677a27b3-0b20-4d58-a588-939d2c726658</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I meant to publish this document some time ago, but I haven't had much
time at all to post anything lately.
</p>
        <p>
This document was a result of early project research into what DAL and BLL code generation
tool that we should use. In sum the project was a <a href="http://en.wikipedia.org/wiki/Customer_relationship_management" target="_blank">CRM</a> web
application which was to be developed using the <a href="http://msdn2.microsoft.com/en-us/teamsystem/aa718801.aspx" target="_blank">MSF
Agile process</a>. The requirements were loosely defined and likely to change. Before
I had started at the company, a developer had already created a prototype site for
the project using the <a href="http://www.nettiers.com/" target="_blank">NetTiers</a> template
for <a href="http://www.codesmithtools.com/" target="_blank">CodeSmith</a>. Initially,
I was extremely impressed with the generated code but as I started needing more customization,
flexibility, and stability I decided to do a small comparison between <a href="http://www.nettiers.com/" target="_blank">NetTiers</a> and <a href="http://www.llblgen.com/" target="_blank">LLBLGen</a> to
see which product best served our project.
</p>
        <p>
This .doc file is the result of my findings:
</p>
        <p>
          <a title="http://kevincastle.net/blogFiles/Code%20Generation%20Product%20Comparison.doc" href="http://kevincastle.net/blogFiles/Code%20Generation%20Product%20Comparison.doc">Code
Generation Product Comparison.doc</a>
        </p>
        <p>
          <br />
In the end we decided to go with LLBLGen. Looking back  a few months ago I definitely
feel that this was the best decision that we could have made. Our company is so impressed
that a couple of our other projects have purchased licenses and are under development
as we speak.
</p>
        <p>
Biggest reasons why we chose LLBLGen over <a href="http://www.nettiers.com/" target="_blank">NetTiers</a>:
</p>
        <ol>
          <li>
            <a href="http://www.llblgen.com/" target="_blank">LLBLGen</a> is much more flexible
- We are capable of renaming entities, customizing property names, adding custom relationships,
creating typed lists, etc.</li>
          <li>
            <a href="http://www.llblgen.com/" target="_blank">LLBLGen</a> will probably be supported
much more strongly. Since <a href="http://www.nettiers.com/" target="_blank">NetTiers</a> is
an open source project we were concerned about building an important (costly) application
on something which would bear little to no responsibility on any vendors.</li>
          <li>
            <a href="http://www.nettiers.com/" target="_blank">NetTiers 2</a> was currently under
development when we were considering the decision. As we modified the database and
regenerated the project, we were running into both runtime and compiler errors.</li>
        </ol>
        <img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=677a27b3-0b20-4d58-a588-939d2c726658" />
      </body>
      <title>CodeSmith NetTiers and LLBLGen Comparison Doc</title>
      <guid isPermaLink="false">http://www.kevincastle.net/PermaLink,guid,677a27b3-0b20-4d58-a588-939d2c726658.aspx</guid>
      <link>http://feedproxy.google.com/~r/KevinCastleDotNet/~3/0PV-KjsJMyo/CodeSmithNetTiersAndLLBLGenComparisonDoc.aspx</link>
      <pubDate>Thu, 18 Jan 2007 16:34:08 GMT</pubDate>
      <description>&lt;p&gt;
I meant&amp;nbsp;to publish this document some time ago, but&amp;nbsp;I&amp;nbsp;haven't had much
time at all to post anything lately.
&lt;/p&gt;
&lt;p&gt;
This document was a result of early project research into what DAL and BLL code generation
tool that we should use. In sum the project was a &lt;a href="http://en.wikipedia.org/wiki/Customer_relationship_management" target="_blank"&gt;CRM&lt;/a&gt; web
application which was to be developed using the &lt;a href="http://msdn2.microsoft.com/en-us/teamsystem/aa718801.aspx" target="_blank"&gt;MSF
Agile process&lt;/a&gt;. The requirements were loosely defined and likely to change. Before
I had started at the company, a developer had already created a prototype site for
the project using the &lt;a href="http://www.nettiers.com/" target="_blank"&gt;NetTiers&lt;/a&gt; template
for &lt;a href="http://www.codesmithtools.com/" target="_blank"&gt;CodeSmith&lt;/a&gt;. Initially,
I was extremely impressed with the generated code but as I started needing more customization,
flexibility, and stability I decided to do a small comparison between &lt;a href="http://www.nettiers.com/" target="_blank"&gt;NetTiers&lt;/a&gt; and &lt;a href="http://www.llblgen.com/" target="_blank"&gt;LLBLGen&lt;/a&gt; to
see which product best served our project.
&lt;/p&gt;
&lt;p&gt;
This .doc file is the result of my findings:
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://kevincastle.net/blogFiles/Code%20Generation%20Product%20Comparison.doc" href="http://kevincastle.net/blogFiles/Code%20Generation%20Product%20Comparison.doc"&gt;Code
Generation Product Comparison.doc&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
In the end we decided to go with LLBLGen. Looking back&amp;nbsp; a few months ago I definitely
feel that this was the best decision that we could have made. Our company is so impressed
that a couple of our other projects have purchased licenses and are under development
as we speak.
&lt;/p&gt;
&lt;p&gt;
Biggest reasons why we chose LLBLGen over &lt;a href="http://www.nettiers.com/" target="_blank"&gt;NetTiers&lt;/a&gt;:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href="http://www.llblgen.com/" target="_blank"&gt;LLBLGen&lt;/a&gt; is much more flexible
- We are capable of renaming entities, customizing property names, adding custom relationships,
creating typed lists, etc.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.llblgen.com/" target="_blank"&gt;LLBLGen&lt;/a&gt; will probably be supported
much more strongly. Since &lt;a href="http://www.nettiers.com/" target="_blank"&gt;NetTiers&lt;/a&gt; is
an open source project we were concerned about building an important (costly) application
on something which would bear little to no responsibility on any vendors.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.nettiers.com/" target="_blank"&gt;NetTiers 2&lt;/a&gt; was currently under
development when we were considering the decision. As we modified the database and
regenerated the project, we were running into both runtime and compiler errors.&lt;/li&gt;
&lt;/ol&gt;
&lt;img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=677a27b3-0b20-4d58-a588-939d2c726658" /&gt;</description>
      <comments>http://www.kevincastle.net/CommentView,guid,677a27b3-0b20-4d58-a588-939d2c726658.aspx</comments>
      <category>Development Tools;LLBLGen Pro;ORM</category>
    <feedburner:origLink>http://www.kevincastle.net/CodeSmithNetTiersAndLLBLGenComparisonDoc.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.kevincastle.net/Trackback.aspx?guid=9e269ca6-6b6c-466f-800a-1b67621bd39e</trackback:ping>
      <pingback:server>http://www.kevincastle.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.kevincastle.net/PermaLink,guid,9e269ca6-6b6c-466f-800a-1b67621bd39e.aspx</pingback:target>
      <dc:creator>Kevin Castle</dc:creator>
      <wfw:comment>http://www.kevincastle.net/CommentView,guid,9e269ca6-6b6c-466f-800a-1b67621bd39e.aspx</wfw:comment>
      <wfw:commentRss>http://www.kevincastle.net/SyndicationService.asmx/GetEntryCommentsRss?guid=9e269ca6-6b6c-466f-800a-1b67621bd39e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <ol>
          <li>
The first .NET application that I ever wrote was in <a href="http://msdn2.microsoft.com/en-us/vjsharp/default.aspx" target="_blank">J#.Net</a>.
That being said, I still share some reverence for the old language. Well() not() that()
much() anymore(). 
</li>
          <li>
Up through my last year in college, I never had thought that I was going to work as
a programmer/software engineer. At that time, my true passion was philosophy...so
much in fact that my goal was to go back to grad school to become a philosophy professor. 
</li>
          <li>
I surfed competitively for many years (as an amatuer). I was featured in a few surfing
magazines, I finished equal 7ths in CA and in the top 20 at Nationals. 
</li>
          <li>
I dated my wife for almost 11 years before we got married. We started dating in Jr.
High and finally married a year after I graduated from <a href="http://sdsu.edu/" target="_blank">SDSU</a>. 
</li>
          <li>
Although I hate to reveal something this terrible...At one point in my life I
was seriously considered buying a mac. It was a sad day...but
to my defense I was a confused Linux user at that time...please don't judge me.</li>
        </ol>
        <p>
Although nobody really tagged me for this. I still thought it would be interesting...especially
since I need to get back into the swing of blogging. Currently, I'm working on a project
which has had way too much of an aggressive schedule and its starting to take its
toll on my time.
</p>
        <p>
Here are some more from much greater developers/bloggers than I : <a href="http://blogs.msdn.com/buckh/archive/2007/01/10/five-things-about-me.aspx" target="_blank">Buck
Hodges</a>, <a href="http://www.woodwardweb.com/personal/000317.html" target="_blank">Martin
Woodward</a>, <a href="http://blogs.msdn.com/robcaron/archive/2007/01/07/1433184.aspx" target="_blank">Rob
Caron</a>, <a href="http://blogs.counterpunchsoftware.com/" target="_blank">Eric Lee</a>, <a href="http://teamsystemrocks.com/blogs/mickey_gousset/archive/2007/01/12/1291.aspx" target="_blank">Mickey
Gousett</a>.
</p>
        <img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=9e269ca6-6b6c-466f-800a-1b67621bd39e" />
      </body>
      <title>5 Things You Didn't Know About Me (and probably didn't care to)</title>
      <guid isPermaLink="false">http://www.kevincastle.net/PermaLink,guid,9e269ca6-6b6c-466f-800a-1b67621bd39e.aspx</guid>
      <link>http://feedproxy.google.com/~r/KevinCastleDotNet/~3/J6A0_FpUpJ4/5ThingsYouDidntKnowAboutMeAndProbablyDidntCareTo.aspx</link>
      <pubDate>Thu, 18 Jan 2007 04:54:44 GMT</pubDate>
      <description>&lt;ol&gt;
&lt;li&gt;
The first .NET application that I ever wrote was in &lt;a href="http://msdn2.microsoft.com/en-us/vjsharp/default.aspx" target="_blank"&gt;J#.Net&lt;/a&gt;.
That being said, I still share some reverence for the old language. Well() not() that()
much() anymore(). 
&lt;/li&gt;
&lt;li&gt;
Up through my last year in college, I never had thought that I was going to work as
a programmer/software engineer. At that time, my true passion was philosophy...so
much in fact that my goal was to go back to grad school to become a philosophy professor. 
&lt;/li&gt;
&lt;li&gt;
I surfed competitively for many years (as an amatuer). I was featured in a few surfing
magazines,&amp;nbsp;I finished equal 7ths in CA and in the top 20 at Nationals. 
&lt;/li&gt;
&lt;li&gt;
I dated my wife for almost 11 years before we got married. We started dating in Jr.
High and finally married a year after I graduated from &lt;a href="http://sdsu.edu/" target="_blank"&gt;SDSU&lt;/a&gt;. 
&lt;/li&gt;
&lt;li&gt;
Although I hate to reveal something this terrible...At one point in my life&amp;nbsp;I
was&amp;nbsp;seriously considered buying a&amp;nbsp;mac. It&amp;nbsp;was a&amp;nbsp;sad day...but
to my defense&amp;nbsp;I was a confused Linux user at that time...please don't judge me.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Although nobody really tagged me for this. I still thought it would be interesting...especially
since I need to get back into the swing of blogging. Currently, I'm working on a project
which has had way too much of an aggressive schedule and its starting to take its
toll on my time.
&lt;/p&gt;
&lt;p&gt;
Here are some more from much greater developers/bloggers than I : &lt;a href="http://blogs.msdn.com/buckh/archive/2007/01/10/five-things-about-me.aspx" target="_blank"&gt;Buck
Hodges&lt;/a&gt;, &lt;a href="http://www.woodwardweb.com/personal/000317.html" target="_blank"&gt;Martin
Woodward&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/robcaron/archive/2007/01/07/1433184.aspx" target="_blank"&gt;Rob
Caron&lt;/a&gt;, &lt;a href="http://blogs.counterpunchsoftware.com/" target="_blank"&gt;Eric Lee&lt;/a&gt;, &lt;a href="http://teamsystemrocks.com/blogs/mickey_gousset/archive/2007/01/12/1291.aspx" target="_blank"&gt;Mickey
Gousett&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=9e269ca6-6b6c-466f-800a-1b67621bd39e" /&gt;</description>
      <comments>http://www.kevincastle.net/CommentView,guid,9e269ca6-6b6c-466f-800a-1b67621bd39e.aspx</comments>
    <feedburner:origLink>http://www.kevincastle.net/5ThingsYouDidntKnowAboutMeAndProbablyDidntCareTo.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.kevincastle.net/Trackback.aspx?guid=d4083403-6cdb-49ad-bfc9-e66a6c32fb4a</trackback:ping>
      <pingback:server>http://www.kevincastle.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.kevincastle.net/PermaLink,guid,d4083403-6cdb-49ad-bfc9-e66a6c32fb4a.aspx</pingback:target>
      <dc:creator>Kevin Castle</dc:creator>
      <wfw:comment>http://www.kevincastle.net/CommentView,guid,d4083403-6cdb-49ad-bfc9-e66a6c32fb4a.aspx</wfw:comment>
      <wfw:commentRss>http://www.kevincastle.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d4083403-6cdb-49ad-bfc9-e66a6c32fb4a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Flickr has decided to <a href="http://blog.flickr.com/flickrblog/2006/12/ho_ho_ho_flickr.html" target="_blank">give
the gift of additional bandwidth</a>. Free accounts can now upload 100mb a month (previously
20mb) and Pro accounts now have unlimited bandwidth (previously 2gb a month). 
</p>
        <img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=d4083403-6cdb-49ad-bfc9-e66a6c32fb4a" />
      </body>
      <title>Flickr Gives the Gift of Bandwidth</title>
      <guid isPermaLink="false">http://www.kevincastle.net/PermaLink,guid,d4083403-6cdb-49ad-bfc9-e66a6c32fb4a.aspx</guid>
      <link>http://feedproxy.google.com/~r/KevinCastleDotNet/~3/9t6CPT3Jiv8/FlickrGivesTheGiftOfBandwidth.aspx</link>
      <pubDate>Fri, 29 Dec 2006 16:29:10 GMT</pubDate>
      <description>&lt;p&gt;
Flickr has decided to &lt;a href="http://blog.flickr.com/flickrblog/2006/12/ho_ho_ho_flickr.html" target="_blank"&gt;give
the gift of additional bandwidth&lt;/a&gt;. Free accounts can now upload 100mb a month (previously
20mb) and Pro accounts now have unlimited bandwidth (previously 2gb a month). 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.kevincastle.net/aggbug.ashx?id=d4083403-6cdb-49ad-bfc9-e66a6c32fb4a" /&gt;</description>
      <comments>http://www.kevincastle.net/CommentView,guid,d4083403-6cdb-49ad-bfc9-e66a6c32fb4a.aspx</comments>
      <category>General</category>
    <feedburner:origLink>http://www.kevincastle.net/FlickrGivesTheGiftOfBandwidth.aspx</feedburner:origLink></item>
  </channel>
</rss>
