<?xml version="1.0" encoding="utf-8"?>
<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/" version="2.0">
  <channel>
    <title>Adam Salvo (z) - Technology|Review For Future Projects</title>
    <link>http://blog.salvoz.com/</link>
    <description>newtelligence powered</description>
    <language>en-us</language>
    <copyright>Adam Salvo</copyright>
    <lastBuildDate>Thu, 22 Jan 2009 20:51:24 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.2.8279.16125</generator>
    <managingEditor>adam@salvoz.com</managingEditor>
    <webMaster>adam@salvoz.com</webMaster>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=97321f89-506c-450b-a463-e1c4e6271bba</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,97321f89-506c-450b-a463-e1c4e6271bba.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,97321f89-506c-450b-a463-e1c4e6271bba.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=97321f89-506c-450b-a463-e1c4e6271bba</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
By way of <a href="http://twitter.com/shanselman" target="_blank">Scott</a> on twitter,
I discovered the <a href="http://code.google.com/apis/ajax/" target="_blank">Google
Ajax APIs</a> today (thanks to <a href="http://douglaspurdy.com/" target="_blank">Douglas
Purdy</a> for the original tweet). The <a href="http://code.google.com/apis/ajax/" target="_blank">playground</a> area
allows you to see all of the APIs in action. Taking a step back, you can view all
of the APIs that google provides by visiting this URL: <a href="http://code.google.com/more/">http://code.google.com/more/</a>. 
</p>
        <p>
  
</p>
        <p>
All you need to get started, is to sign up for a free API key, which you can do <a href="http://code.google.com/apis/ajaxsearch/signup.html" target="_blank">here</a>.
Then just add a script src tag to your page referencing your API key (<a href="http://www.google.com/jsapi?key=ABCDEFG">http://www.google.com/jsapi?key=<i>ABCDEFG
</i></a>) and you are good to go. I would recommend reading at least the <a href="http://code.google.com/apis/ajax/documentation/" target="_blank">Getting
Started</a> guide under documentation. In addition to the stuff you would expect,
like search and maps, they also have language translation and visualization (charts
and graphs) to name a few. They also provide up to date versions of common APIs like
JQuery, relieving you of the burden of managing these resources on your own. 
</p>
        <p>
  
</p>
        <p>
While I would certainly use the Google APIs for accessing Google content, I am a little
concerned over some of the other offerings. I would prefer to control when I update
my JQuery library for example (how do I know if there are any breaking changes)? <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=97321f89-506c-450b-a463-e1c4e6271bba" /><br /><hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</p>
      </body>
      <title>Google Ajax APIs</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,97321f89-506c-450b-a463-e1c4e6271bba.aspx</guid>
      <link>http://blog.salvoz.com/2009/01/22/GoogleAjaxAPIs.aspx</link>
      <pubDate>Thu, 22 Jan 2009 20:51:24 GMT</pubDate>
      <description>&lt;p&gt;
By way of &lt;a href="http://twitter.com/shanselman" target="_blank"&gt;Scott&lt;/a&gt; on twitter,
I discovered the &lt;a href="http://code.google.com/apis/ajax/" target="_blank"&gt;Google
Ajax APIs&lt;/a&gt; today (thanks to &lt;a href="http://douglaspurdy.com/" target="_blank"&gt;Douglas
Purdy&lt;/a&gt; for the original tweet). The &lt;a href="http://code.google.com/apis/ajax/" target="_blank"&gt;playground&lt;/a&gt; area
allows you to see all of the APIs in action. Taking a step back, you can view all
of the APIs that google provides by visiting this URL: &lt;a href="http://code.google.com/more/"&gt;http://code.google.com/more/&lt;/a&gt;. 
&lt;p&gt;
&amp;nbsp; 
&lt;p&gt;
All you need to get started, is to sign up for a free API key, which you can do &lt;a href="http://code.google.com/apis/ajaxsearch/signup.html" target="_blank"&gt;here&lt;/a&gt;.
Then just add a script src tag to your page referencing your API key (&lt;a href="http://www.google.com/jsapi?key=ABCDEFG"&gt;http://www.google.com/jsapi?key=&lt;i&gt;ABCDEFG
&lt;/a&gt;&gt;) and you are good to go. I would recommend reading at least the &lt;a href="http://code.google.com/apis/ajax/documentation/" target="_blank"&gt;Getting
Started&lt;/a&gt; guide under documentation. In addition to the stuff you would expect,
like search and maps, they also have language translation and visualization (charts
and graphs) to name a few. They also provide up to date versions of common APIs like
JQuery, relieving you of the burden of managing these resources on your own. 
&lt;p&gt;
&amp;nbsp; 
&lt;p&gt;
While I would certainly use the Google APIs for accessing Google content, I am a little
concerned over some of the other offerings. I would prefer to control when I update
my JQuery library for example (how do I know if there are any breaking changes)? &lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=97321f89-506c-450b-a463-e1c4e6271bba" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,97321f89-506c-450b-a463-e1c4e6271bba.aspx</comments>
      <category>Technology/Review For Future Projects</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=13f48d97-cdec-4bb7-bbc1-188ef38f66a8</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,13f48d97-cdec-4bb7-bbc1-188ef38f66a8.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,13f48d97-cdec-4bb7-bbc1-188ef38f66a8.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=13f48d97-cdec-4bb7-bbc1-188ef38f66a8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Scott just <a href="http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx">blogged
about T4</a>, the Text Template Transformation Toolkit. It’s a full blown template
driven code generation tool that uses the same syntax as Asp.Net. It’s lacking things
such as syntax highlighting and intellisense, but it’s free, and part of Visual Studio. 
</p>
        <p>
I feel with the recent press this tool is getting, it will become even more popular,
and some of the missing features added by the community. Scott has a whole list of
links on his post that provide good samples, as well as a link to a company that provides
a free and pay version of a plug-in to add some of the “missing” functionality. 
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=13f48d97-cdec-4bb7-bbc1-188ef38f66a8" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Code Generation in Visual Studio</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,13f48d97-cdec-4bb7-bbc1-188ef38f66a8.aspx</guid>
      <link>http://blog.salvoz.com/2008/10/14/CodeGenerationInVisualStudio.aspx</link>
      <pubDate>Tue, 14 Oct 2008 20:33:04 GMT</pubDate>
      <description>&lt;p&gt;
Scott just &lt;a href="http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx"&gt;blogged
about T4&lt;/a&gt;, the Text Template Transformation Toolkit. It’s a full blown template
driven code generation tool that uses the same syntax as Asp.Net. It’s lacking things
such as syntax highlighting and intellisense, but it’s free, and part of Visual Studio. 
&lt;/p&gt;
&lt;p&gt;
I feel with the recent press this tool is getting, it will become even more popular,
and some of the missing features added by the community. Scott has a whole list of
links on his post that provide good samples, as well as a link to a company that provides
a free and pay version of a plug-in to add some of the “missing” functionality. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=13f48d97-cdec-4bb7-bbc1-188ef38f66a8" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,13f48d97-cdec-4bb7-bbc1-188ef38f66a8.aspx</comments>
      <category>Technology/Programming</category>
      <category>Technology/Review For Future Projects</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=d00a2e5c-9b9e-498a-96ce-0ad86246d6e5</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,d00a2e5c-9b9e-498a-96ce-0ad86246d6e5.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,d00a2e5c-9b9e-498a-96ce-0ad86246d6e5.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=d00a2e5c-9b9e-498a-96ce-0ad86246d6e5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
Rob Conery, creator of SubSonic, and the ASP.Net MVC Store Front video series has
released an early prototype of a Visual Studio 2008 add-in called the SubSonic MVC
Scaffold Addin. Let me point out right away that there is no dependency on SubSonic
itself, rather this add-in uses Linq2Sql, although Rob says a SubSonic plug-in is
on the drawing board.
</p>
        <p>
Not to rehash his <a href="http://blog.wekeroad.com/blog/subsonic-mvc-scaffold-addin/">announcement</a>,
but basically this add-in takes a Linq2Sql class, and generates some views (view,
edit, list), and a controller based on the class. This is meant as a quick start kind
of thing, not a full fledged commercial web site generator. 
</p>
        <p>
        </p>
        <p>
I encourage you to visit his blog post and watch the video he has prepared, it does
an excellent job of showing you what the Scaffold does. Here are some of my take-away's:
</p>
        <ul>
          <li>
Uses pre-existing Linq2Sql generated classes 
</li>
          <li>
Creates wrapper objects around Linq2Sql classes</li>
          <li>
Creates MVC views (you can create your own template to use in this process)</li>
          <li>
Creates MVC controller</li>
          <li>
If you re-run the scaffold on a class you previously generated, no files are updated
(overwritten). You can delete individual files, and scaffold will generate them again. 
</li>
          <li>
Not everything works perfectly, you will/may need to go in and change some code. This
is to get you started with something quickly. 
</li>
          <li>
RESTful style URL 
</li>
        </ul>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=d00a2e5c-9b9e-498a-96ce-0ad86246d6e5" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>SubSonic MVC Scaffold Addin</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,d00a2e5c-9b9e-498a-96ce-0ad86246d6e5.aspx</guid>
      <link>http://blog.salvoz.com/2008/10/07/SubSonicMVCScaffoldAddin.aspx</link>
      <pubDate>Tue, 07 Oct 2008 21:37:11 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Rob Conery, creator of SubSonic, and the ASP.Net MVC Store Front video series has
released an early prototype of a Visual Studio 2008 add-in called the SubSonic MVC
Scaffold Addin. Let me point out right away that there is no dependency on SubSonic
itself, rather this add-in uses Linq2Sql, although Rob says a SubSonic plug-in is
on the drawing board.
&lt;/p&gt;
&lt;p&gt;
Not to rehash his &lt;a href="http://blog.wekeroad.com/blog/subsonic-mvc-scaffold-addin/"&gt;announcement&lt;/a&gt;,
but basically this add-in takes a Linq2Sql class, and generates some views (view,
edit, list), and a controller based on the class. This is meant as a quick start kind
of thing, not a full fledged commercial web site generator. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
I encourage you to visit his blog post and watch the video he has prepared, it does
an excellent job of showing you what the Scaffold does. Here are some of my take-away's:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Uses pre-existing Linq2Sql generated classes 
&lt;/li&gt;
&lt;li&gt;
Creates wrapper objects around Linq2Sql classes&lt;/li&gt;
&lt;li&gt;
Creates MVC views (you can create your own template to use in this process)&lt;/li&gt;
&lt;li&gt;
Creates MVC controller&lt;/li&gt;
&lt;li&gt;
If you re-run the scaffold on a class you previously generated, no files are updated
(overwritten). You can delete individual files, and scaffold will generate them again. 
&lt;/li&gt;
&lt;li&gt;
Not everything works perfectly, you will/may need to go in and change some code. This
is to get you started with something quickly. 
&lt;/li&gt;
&lt;li&gt;
RESTful style URL 
&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=d00a2e5c-9b9e-498a-96ce-0ad86246d6e5" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,d00a2e5c-9b9e-498a-96ce-0ad86246d6e5.aspx</comments>
      <category>Technology/Programming</category>
      <category>Technology/Review For Future Projects</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=ef57ab8a-0012-4717-b648-1d5ac8338904</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,ef57ab8a-0012-4717-b648-1d5ac8338904.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,ef57ab8a-0012-4717-b648-1d5ac8338904.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=ef57ab8a-0012-4717-b648-1d5ac8338904</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today, Jeff Atwood posted about a <a href="http://www.codinghorror.com/blog/archives/001166.html">deadlock</a> issue
he was having. He had a couple of ideas as to how to solve his issue, including the
nolock statement. What I found most interesting were the comments that followed. Here
is a summary:
</p>
        <ul>
          <li>
SQL Server sucks 
</li>
          <li>
NoLock is ok 
</li>
          <li>
NoLock is a hack 
</li>
          <li>
I can’t believe you don’t/didn’t know how to fix a dead lock</li>
        </ul>
        <p>
I can’t believe how critical people were of Jeff. I guess I was a little surprised
that the author of the great Coding Horror didn’t know the answer to something, but
that’s no reason to be critical of the guy. 
</p>
        <p>
A couple of the more decent links included:
</p>
        <ul>
          <li>
            <a title="http://weblogs.sqlteam.com/mladenp/archive/2008/07/18/Immediate-deadlock-notifications-without-changing-existing-code.aspx" href="http://weblogs.sqlteam.com/mladenp/archive/2008/07/18/Immediate-deadlock-notifications-without-changing-existing-code.aspx">http://weblogs.sqlteam.com/mladenp/archive/2008/07/18/Immediate-deadlock-notifications-without-changing-existing-code.aspx</a>
          </li>
          <li>
            <a title="http://developmenttips.blogspot.com/2008/08/cure-for-deadlocked-learning-to-use.html" href="http://developmenttips.blogspot.com/2008/08/cure-for-deadlocked-learning-to-use.html">http://developmenttips.blogspot.com/2008/08/cure-for-deadlocked-learning-to-use.html</a>
          </li>
        </ul>
        <p>
We have a couple of deadlock issues in our current database that I’d like to sit down
and fix, so these might come in handy. 
</p>
        <p>
Update: Someone who knows allot more about SQL posted a <a href="http://www.samsaffron.com/archive/2008/08/27/Deadlocked+">blog
entry</a> in response to Jeff’s original post. The author believes that using nolock
is never a good idea and goes on to give some advice on how to start solving deadlock
issues.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=ef57ab8a-0012-4717-b648-1d5ac8338904" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>SQL Deadlocks</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,ef57ab8a-0012-4717-b648-1d5ac8338904.aspx</guid>
      <link>http://blog.salvoz.com/2008/08/26/SQLDeadlocks.aspx</link>
      <pubDate>Tue, 26 Aug 2008 03:08:25 GMT</pubDate>
      <description>&lt;p&gt;
Today, Jeff Atwood posted about a &lt;a href="http://www.codinghorror.com/blog/archives/001166.html"&gt;deadlock&lt;/a&gt; issue
he was having. He had a couple of ideas as to how to solve his issue, including the
nolock statement. What I found most interesting were the comments that followed. Here
is a summary:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
SQL Server sucks 
&lt;li&gt;
NoLock is ok 
&lt;li&gt;
NoLock is a hack 
&lt;li&gt;
I can’t believe you don’t/didn’t know how to fix a dead lock&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I can’t believe how critical people were of Jeff. I guess I was a little surprised
that the author of the great Coding Horror didn’t know the answer to something, but
that’s no reason to be critical of the guy. 
&lt;/p&gt;
&lt;p&gt;
A couple of the more decent links included:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a title="http://weblogs.sqlteam.com/mladenp/archive/2008/07/18/Immediate-deadlock-notifications-without-changing-existing-code.aspx" href="http://weblogs.sqlteam.com/mladenp/archive/2008/07/18/Immediate-deadlock-notifications-without-changing-existing-code.aspx"&gt;http://weblogs.sqlteam.com/mladenp/archive/2008/07/18/Immediate-deadlock-notifications-without-changing-existing-code.aspx&lt;/a&gt; 
&lt;li&gt;
&lt;a title="http://developmenttips.blogspot.com/2008/08/cure-for-deadlocked-learning-to-use.html" href="http://developmenttips.blogspot.com/2008/08/cure-for-deadlocked-learning-to-use.html"&gt;http://developmenttips.blogspot.com/2008/08/cure-for-deadlocked-learning-to-use.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
We have a couple of deadlock issues in our current database that I’d like to sit down
and fix, so these might come in handy. 
&lt;/p&gt;
&lt;p&gt;
Update: Someone who knows allot more about SQL posted a &lt;a href="http://www.samsaffron.com/archive/2008/08/27/Deadlocked+"&gt;blog
entry&lt;/a&gt; in response to Jeff’s original post. The author believes that using nolock
is never a good idea and goes on to give some advice on how to start solving deadlock
issues.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=ef57ab8a-0012-4717-b648-1d5ac8338904" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,ef57ab8a-0012-4717-b648-1d5ac8338904.aspx</comments>
      <category>Technology/Review For Future Projects</category>
      <category>Technology/Sql</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=94b0ef79-8b69-414e-a82e-70a25a9fcb1e</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,94b0ef79-8b69-414e-a82e-70a25a9fcb1e.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,94b0ef79-8b69-414e-a82e-70a25a9fcb1e.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=94b0ef79-8b69-414e-a82e-70a25a9fcb1e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I’ve been looking at a couple of the new technologies that were released with .Net
3.5 SP1, mainly the Entity Framework (EF), and ADO.Net Data Services ADNS). I happen
to look at ADO.Net Data Services first, and it seemed to look pretty good on paper.
There was a reference to the Entity Framework in that Data Services uses the Entity
Model (EM) from EF to provide the data access layer.
</p>
        <p>
Last night I started searching for more information on the Entity Framework, and instead
of finding examples, best practices, etc, I found a battle waging between the Creators/Supports
of the Entity Framework and people practicing what I have come to know as Alt.Net. 
</p>
        <p>
I am using the term Alt.Net to refer to ideas and concepts such as Domain Driven Design
(DDD), Test Driven Development (TDD), Agile, Plain Old CLR Objects (POCO), Persistence
Ignorance (PI), and nHibernate (as there is allot of comparison made to the EF). I
should also note that the ideas and concepts listed are not entirely specific to .Net,
nor is this a complete list. Furthermore, you could be a practitioner of Alt.Net and
completely support EF.
</p>
        <p>
To get an idea of where the Alt.Net crowd is coming from you should start off by reading
the <a href="http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/">Vote
of No Confidence</a> on WuFoo. Then simply Google for Entity Framework and you will
see all sorts of competing opinions. F<a href="http://weblogs.asp.net/fbouma/">rans
Bouma</a>, creator of LLBLGen Pro, has a couple of posts (<a href="http://weblogs.asp.net/fbouma/archive/2008/08/20/quot-the-entity-data-model-is-much-bigger-than-just-an-orm-quot-stephen-forte.aspx">here</a>,
and <a href="http://weblogs.asp.net/fbouma/archive/2008/05/19/why-use-the-entity-framework-yeah-why-exactly.aspx">here</a>)
that I think show he is against the EF, but for slightly difference reasons then the
Alt.Net crowd. Here are some of the top Pros and Cons I’ve found.
</p>
        <p>
Pros:
</p>
        <ol>
          <li>
It’s support by Microsoft, and as such, will gather much momentum and community support</li>
          <li>
It’s good enough for X% (usually stated as greater then 50%) of software projects
out there.</li>
          <li>
GUI editor/mapper makes it easier to use then other ORM tools like nHibernate</li>
          <li>
EF is part of a larger push by Microsoft to provide technologies that focus on an
Entity Model (See Ado.Net Data Services)</li>
        </ol>
        <p>
Cons:
</p>
        <ol>
          <li>
No support for POCO’s and Persistent Ignorance</li>
          <li>
Hard (or impossible) to develop using a Domain Driven Design, or Test Driven Design
methodology</li>
          <li>
Single model/mapping file introduces merge conflicts in a source control environment</li>
          <li>
No additional functionality of products like nHibernate</li>
        </ol>
        <p>
I kind of see Pro #1 being the cornerstone to the argument. I feel that the Alt.Net
crowd knows that EF has a good chance to become the defacto standard, and that they
will be forced by their clients and employers to use it. As such, they are trying
to point out some of it’s short comings to Microsoft in hopes that if it does become
the defacto standard, that it won’t suck (to them) as much.
</p>
        <p>
The EF team has been very open with the community, and reading posts leading up to
the release of the EF, you can already see that the team was listening to the community.
They introduced something called IPOCO, which removed the requirement that Entity
classes implement a base class, and instead implement interfaces. This pleased some,
while it annoyed others, since it still breaks true Persistent Ignorance.  I
feel it’s a step in the right direction.
</p>
        <p>
There are other indications that V2 of the EF will introduce true Persistant Ignorance,
although the EF team usually talks about a performance hit (and it sounds like it
could be a big performance hit) if you want to go the POCO route. The reason for this
is the lack of the EntityKey field in a POCO object, which is used in subsequent operations
after an entity is retrieved from the framework.
</p>
        <p>
Overall, I find myself smack dab in the middle of the two camps. I’ve been trying
to explore and learn more about Alt.Net, while at the same time keeping up on the
latest from Microsoft. I’ve come up with the following guidelines for myself.
</p>
        <ol>
          <li>
Since EF is not support in Compact Framework, and I need to write business entities
for the Compact Framework, or one’s that can be used in both the Full and Compact
Frameworks, EF is out (so is nHibernate for that matter). 
</li>
          <li>
If I need to work on a new back end application that is going to be using SQL server
exclusively (there is support for other data stores in EF), then EF might not be a
bad way to go. 
</li>
          <li>
If I need to work on an existing back end application, I don’t think it’s worth the
time to switch to EF yet, as it’s still a V1 product. 
</li>
        </ol>
        <p>
In the near term, I see my self doing some CF programming, as well as some one-off
programming against our backend, which gives me a nice blend I guess. I’ll get to
play around with EF some, and keep exploring the ideas of Alt.Net.
</p>
        <p>
One final item I’d like to point out is the <a href="http://www.codeplex.com/efcontrib">Entity
Framework Contrib Project</a> on CodePlex. While it hasn’t had a release since before
RTM of the EF, it does provide some very interesting additions to the EF. The one
that interests me the most, might just in fact be the bridge between the EF and POCO
that everyone is looking for. Using <a href="http://www.postsharp.org">PostSharp</a>,
the IPOCO interfaces are implemented at compile time, thus keeping your entities persistent
Ignorant. The trade off is that you have to add some attributes to your code, but
at least you could add these conditionally, which would help with the CF/FF issues
I have. 
</p>
        <p>
Unfortunately the main contributor has taken a job and Microsoft on the SilverLight
team, and in response to the EF’s team to add POCO support, has lost some of his interest
in the project. I really like the post compile time option that the contrib project
uses, as it seems to address the performance hit that the EF team says their POCO
solution will have.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=94b0ef79-8b69-414e-a82e-70a25a9fcb1e" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Holy War - .Net Entity Framework</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,94b0ef79-8b69-414e-a82e-70a25a9fcb1e.aspx</guid>
      <link>http://blog.salvoz.com/2008/08/23/HolyWarNetEntityFramework.aspx</link>
      <pubDate>Sat, 23 Aug 2008 19:51:13 GMT</pubDate>
      <description>&lt;p&gt;
I’ve been looking at a couple of the new technologies that were released with .Net
3.5 SP1, mainly the Entity Framework (EF), and ADO.Net Data Services ADNS). I happen
to look at ADO.Net Data Services first, and it seemed to look pretty good on paper.
There was a reference to the Entity Framework in that Data Services uses the Entity
Model (EM) from EF to provide the data access layer.
&lt;/p&gt;
&lt;p&gt;
Last night I started searching for more information on the Entity Framework, and instead
of finding examples, best practices, etc, I found a battle waging between the Creators/Supports
of the Entity Framework and people practicing what I have come to know as Alt.Net. 
&lt;/p&gt;
&lt;p&gt;
I am using the term Alt.Net to refer to ideas and concepts such as Domain Driven Design
(DDD), Test Driven Development (TDD), Agile, Plain Old CLR Objects (POCO), Persistence
Ignorance (PI), and nHibernate (as there is allot of comparison made to the EF). I
should also note that the ideas and concepts listed are not entirely specific to .Net,
nor is this a complete list. Furthermore, you could be a practitioner of Alt.Net and
completely support EF.
&lt;/p&gt;
&lt;p&gt;
To get an idea of where the Alt.Net crowd is coming from you should start off by reading
the &lt;a href="http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/"&gt;Vote
of No Confidence&lt;/a&gt; on WuFoo. Then simply Google for Entity Framework and you will
see all sorts of competing opinions. F&lt;a href="http://weblogs.asp.net/fbouma/"&gt;rans
Bouma&lt;/a&gt;, creator of LLBLGen Pro, has a couple of posts (&lt;a href="http://weblogs.asp.net/fbouma/archive/2008/08/20/quot-the-entity-data-model-is-much-bigger-than-just-an-orm-quot-stephen-forte.aspx"&gt;here&lt;/a&gt;,
and &lt;a href="http://weblogs.asp.net/fbouma/archive/2008/05/19/why-use-the-entity-framework-yeah-why-exactly.aspx"&gt;here&lt;/a&gt;)
that I think show he is against the EF, but for slightly difference reasons then the
Alt.Net crowd. Here are some of the top Pros and Cons I’ve found.
&lt;/p&gt;
&lt;p&gt;
Pros:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
It’s support by Microsoft, and as such, will gather much momentum and community support&lt;/li&gt;
&lt;li&gt;
It’s good enough for X% (usually stated as greater then 50%) of software projects
out there.&lt;/li&gt;
&lt;li&gt;
GUI editor/mapper makes it easier to use then other ORM tools like nHibernate&lt;/li&gt;
&lt;li&gt;
EF is part of a larger push by Microsoft to provide technologies that focus on an
Entity Model (See Ado.Net Data Services)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Cons:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
No support for POCO’s and Persistent Ignorance&lt;/li&gt;
&lt;li&gt;
Hard (or impossible) to develop using a Domain Driven Design, or Test Driven Design
methodology&lt;/li&gt;
&lt;li&gt;
Single model/mapping file introduces merge conflicts in a source control environment&lt;/li&gt;
&lt;li&gt;
No additional functionality of products like nHibernate&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
I kind of see Pro #1 being the cornerstone to the argument. I feel that the Alt.Net
crowd knows that EF has a good chance to become the defacto standard, and that they
will be forced by their clients and employers to use it. As such, they are trying
to point out some of it’s short comings to Microsoft in hopes that if it does become
the defacto standard, that it won’t suck (to them) as much.
&lt;/p&gt;
&lt;p&gt;
The EF team has been very open with the community, and reading posts leading up to
the release of the EF, you can already see that the team was listening to the community.
They introduced something called IPOCO, which removed the requirement that Entity
classes implement a base class, and instead implement interfaces. This pleased some,
while it annoyed others, since it still breaks true Persistent Ignorance.&amp;nbsp; I
feel it’s a step in the right direction.
&lt;/p&gt;
&lt;p&gt;
There are other indications that V2 of the EF will introduce true Persistant Ignorance,
although the EF team usually talks about a performance hit (and it sounds like it
could be a big performance hit) if you want to go the POCO route. The reason for this
is the lack of the EntityKey field in a POCO object, which is used in subsequent operations
after an entity is retrieved from the framework.
&lt;/p&gt;
&lt;p&gt;
Overall, I find myself smack dab in the middle of the two camps. I’ve been trying
to explore and learn more about Alt.Net, while at the same time keeping up on the
latest from Microsoft. I’ve come up with the following guidelines for myself.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Since EF is not support in Compact Framework, and I need to write business entities
for the Compact Framework, or one’s that can be used in both the Full and Compact
Frameworks, EF is out (so is nHibernate for that matter). 
&lt;/li&gt;
&lt;li&gt;
If I need to work on a new back end application that is going to be using SQL server
exclusively (there is support for other data stores in EF), then EF might not be a
bad way to go. 
&lt;/li&gt;
&lt;li&gt;
If I need to work on an existing back end application, I don’t think it’s worth the
time to switch to EF yet, as it’s still a V1 product. 
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
In the near term, I see my self doing some CF programming, as well as some one-off
programming against our backend, which gives me a nice blend I guess. I’ll get to
play around with EF some, and keep exploring the ideas of Alt.Net.
&lt;/p&gt;
&lt;p&gt;
One final item I’d like to point out is the &lt;a href="http://www.codeplex.com/efcontrib"&gt;Entity
Framework Contrib Project&lt;/a&gt; on CodePlex. While it hasn’t had a release since before
RTM of the EF, it does provide some very interesting additions to the EF. The one
that interests me the most, might just in fact be the bridge between the EF and POCO
that everyone is looking for. Using &lt;a href="http://www.postsharp.org"&gt;PostSharp&lt;/a&gt;,
the IPOCO interfaces are implemented at compile time, thus keeping your entities persistent
Ignorant. The trade off is that you have to add some attributes to your code, but
at least you could add these conditionally, which would help with the CF/FF issues
I have. 
&lt;/p&gt;
&lt;p&gt;
Unfortunately the main contributor has taken a job and Microsoft on the SilverLight
team, and in response to the EF’s team to add POCO support, has lost some of his interest
in the project. I really like the post compile time option that the contrib project
uses, as it seems to address the performance hit that the EF team says their POCO
solution will have.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=94b0ef79-8b69-414e-a82e-70a25a9fcb1e" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,94b0ef79-8b69-414e-a82e-70a25a9fcb1e.aspx</comments>
      <category>Technology/Programming</category>
      <category>Technology/Review For Future Projects</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=abf6adcf-b02b-46e1-9d18-8df7af4a0f15</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,abf6adcf-b02b-46e1-9d18-8df7af4a0f15.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,abf6adcf-b02b-46e1-9d18-8df7af4a0f15.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=abf6adcf-b02b-46e1-9d18-8df7af4a0f15</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Just found a blog post by the <a href="http://blogs.msdn.com/sqlcat/default.aspx">Microsoft
SQL Server Development Customer Advisory Team</a>  entitled <a href="http://http://blogs.msdn.com/sqlcat/archive/2006/02/13/531339.aspx">How
can SQL Server 2005 help me evaluate and manage indexes?</a>. This post goes over
5 ways to analyze your index usage in SQL 2005. There looks to be some good technical
information on this blog, worthy of any DBA in training.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=abf6adcf-b02b-46e1-9d18-8df7af4a0f15" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Indexes in SQL 2005</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,abf6adcf-b02b-46e1-9d18-8df7af4a0f15.aspx</guid>
      <link>http://blog.salvoz.com/2008/07/19/IndexesInSQL2005.aspx</link>
      <pubDate>Sat, 19 Jul 2008 23:48:03 GMT</pubDate>
      <description>&lt;p&gt;
Just found a blog post by the &lt;a href="http://blogs.msdn.com/sqlcat/default.aspx"&gt;Microsoft
SQL Server Development Customer Advisory Team&lt;/a&gt;&amp;nbsp; entitled &lt;a href="http://http://blogs.msdn.com/sqlcat/archive/2006/02/13/531339.aspx"&gt;How
can SQL Server 2005 help me evaluate and manage indexes?&lt;/a&gt;. This post goes over
5 ways to analyze your index usage in SQL 2005. There looks to be some good technical
information on this blog, worthy of any DBA in training.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=abf6adcf-b02b-46e1-9d18-8df7af4a0f15" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,abf6adcf-b02b-46e1-9d18-8df7af4a0f15.aspx</comments>
      <category>Technology/Review For Future Projects</category>
      <category>Technology/Sql</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=2a1cf527-f746-4f3c-980d-a0be1758b8bf</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,2a1cf527-f746-4f3c-980d-a0be1758b8bf.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,2a1cf527-f746-4f3c-980d-a0be1758b8bf.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=2a1cf527-f746-4f3c-980d-a0be1758b8bf</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Found some new (and updated) remote help and IT tools today. The first tool, is a
new one (to me at least), which I found from an article on <a href="www.techrepublic.com">Tech
Republic</a>, and is called <a href="http://www.crossloop.com/">CrossLoop</a>. Cross
Loop is a remote desktop/vnc clone that allows you to view the desktop of another
PC. It is designed for remote helpdesk scenarios, as it requires a user at the remote
computer to initiate a connection. 
</p>
        <p>
The second and third tools are <a href="http://www.teamviewer.com/index.aspx">Team
Viewer</a> and <a href="http://www.uvnc.com">Ultra VNC</a>, both of which I have heard
of before, but have been updated. Team Viewer’s free offering has been expanded for
non-commercial use, while Ultra VNC has several plug-ins and add-ons which make it
suitable for a variety of scenarios.
</p>
        <p>
The add-ons for Ultra VNC that interest me the most are the Repeater and Nat2Nat,
both of which allow for connections to be made across firewalls. Digging thru the
Ultra VNC forums, I came across several posts talking about a solution (Ultra VNC
with various add-ons) that enables remote connections to be made using SSL on port
443 without the need to configure firewalls. The Ultra VNC repeater is licensed under
the BSD license, but I’m not sure on the other add-ons. The NatHelper server that
is used for the Nat2Nat looks like it might be hosted by Ultra VNC, as I didn’t see
any download links for it. 
</p>
        <p>
        </p>
        <p>
The final tool I came across today, was <a href="http://www.spiceworks.com">Spice
Works</a>, which was an add displayed on the Ultra VNC sight. SpiceWorks is a free
(supported by ads, and not open source) tool for IT professionals looking to manager
their network. <a href="http://www.pcmag.com/article2/0,2817,2271690,00.asp">Here</a> is
a review from PC Magazine (which also drops the names of a couple of open source network
monitoring tools). 
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=2a1cf527-f746-4f3c-980d-a0be1758b8bf" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Remote help and IT Tools</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,2a1cf527-f746-4f3c-980d-a0be1758b8bf.aspx</guid>
      <link>http://blog.salvoz.com/2008/06/17/RemoteHelpAndITTools.aspx</link>
      <pubDate>Tue, 17 Jun 2008 15:23:18 GMT</pubDate>
      <description>&lt;p&gt;
Found some new (and updated) remote help and IT tools today. The first tool, is a
new one (to me at least), which I found from an article on &lt;a href="www.techrepublic.com"&gt;Tech
Republic&lt;/a&gt;, and is called &lt;a href="http://www.crossloop.com/"&gt;CrossLoop&lt;/a&gt;. Cross
Loop is a remote desktop/vnc clone that allows you to view the desktop of another
PC. It is designed for remote helpdesk scenarios, as it requires a user at the remote
computer to initiate a connection. 
&lt;/p&gt;
&lt;p&gt;
The second and third tools are &lt;a href="http://www.teamviewer.com/index.aspx"&gt;Team
Viewer&lt;/a&gt; and &lt;a href="http://www.uvnc.com"&gt;Ultra VNC&lt;/a&gt;, both of which I have heard
of before, but have been updated. Team Viewer’s free offering has been expanded for
non-commercial use, while Ultra VNC has several plug-ins and add-ons which make it
suitable for a variety of scenarios.
&lt;/p&gt;
&lt;p&gt;
The add-ons for Ultra VNC that interest me the most are the Repeater and Nat2Nat,
both of which allow for connections to be made across firewalls. Digging thru the
Ultra VNC forums, I came across several posts talking about a solution (Ultra VNC
with various add-ons) that enables remote connections to be made using SSL on port
443 without the need to configure firewalls. The Ultra VNC repeater is licensed under
the BSD license, but I’m not sure on the other add-ons. The NatHelper server that
is used for the Nat2Nat looks like it might be hosted by Ultra VNC, as I didn’t see
any download links for it. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
The final tool I came across today, was &lt;a href="http://www.spiceworks.com"&gt;Spice
Works&lt;/a&gt;, which was an add displayed on the Ultra VNC sight. SpiceWorks is a free
(supported by ads, and not open source) tool for IT professionals looking to manager
their network. &lt;a href="http://www.pcmag.com/article2/0,2817,2271690,00.asp"&gt;Here&lt;/a&gt; is
a review from PC Magazine (which also drops the names of a couple of open source network
monitoring tools). 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=2a1cf527-f746-4f3c-980d-a0be1758b8bf" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,2a1cf527-f746-4f3c-980d-a0be1758b8bf.aspx</comments>
      <category>Technology/Review For Future Projects</category>
      <category>Technology/Tools</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=c75c2d56-e505-4e6e-a2dc-89307f1e5c27</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,c75c2d56-e505-4e6e-a2dc-89307f1e5c27.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,c75c2d56-e505-4e6e-a2dc-89307f1e5c27.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=c75c2d56-e505-4e6e-a2dc-89307f1e5c27</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Over the last couple of weeks I've been in the process of rebuilding my primary workstation
at home, installing server 2008, hyper-v, creating VM's, etc. I finally got around
to importing my RSS feed list and found plenty to catch up on. This post is basically
just a series of links to posts that I've missed over the past couple of weeks.
</p>
        <ul>
          <li>
            <a href="http://weblogs.asp.net/scottgu/archive/2008/04/16/asp-net-mvc-source-refresh-preview.aspx">Asp.Net
MVC Source Refresh</a> posted by ScottGu - The latest source code for the upcoming
MVC addition to Asp.Net has been posted on CodePlex. The official preview 3 release
is due in a couple of weeks and will provide a "hassle-free" installation. Scott points
out that the unit tests for the MVC project have been released, and that they are
using MSTest (no surprise there) and Moq, an open source mocking framework. 
</li>
          <li>
            <a href="http://www.hanselman.com/blog/HanselminutesPodcast109ASPNETDynamicDataWithScottHunter.aspx">Hanselminutes
109 Dynamic Data</a> - Scott interviews Scott Hunter, Sr Program Manager @ Microsoft
about the Asp.Net dynamic data project. The most important thing I took away from
this pod cast was that Dynamic Data is not a tool to create prototype web sites or
scafolding. This was just the first demo, and unfortunately it has left some negative
impressions.</li>
          <li>
            <a href="http://www.codinghorror.com/blog/archives/001107.html">Building a HTPC</a>
            <strong> </strong>posted
by Jeff - This is an amazing post showing how cheap you can build a kick ass HTPC
using the new AMD 780G platform. The 780G has a ATI HD3200 chipset which supports
HDCP and decoding of blu-ray. I may just look to sell my old AMD Operton 165 parts
to finance a HTPC running on the 780G platform. I decided to order the Kill-A-Watt
power meter recommended by Jeff as well to see how much it's costing me to run 3 folding
instances on my new box ;)</li>
          <li>
            <a title="Permanent Link to .NET Micro Framework vs. Microsoft Robotics Studio" href="http://dvanderboom.wordpress.com/2008/04/12/net-micro-framework-vs-microsoft-robotics-studio/">NET
Micro Framework vs. Microsoft Robotics Studio</a>, <a title="Permanent Link to Introduction to Port-Based Asynchronous Messaging" href="http://dvanderboom.wordpress.com/2008/04/21/introduction-to-port-based-asynchronous-messaging/">Introduction
to Port-Based Asynchronous Messaging</a>, <a title="Permanent Link to Phidgets Robotics Programming in C#" href="http://dvanderboom.wordpress.com/2008/04/21/phidgets-robotics-programming-in-c/">Phidgets
Robotics Programming in C#</a> posted by Dan Vanderboom - That's three posts from
Dan, all of which hit close to home. I've been working with the Phidgets RFID reader
for almost a year now and taking advantage of Robotics Studio on the Compact Framework
sounds vary promising.  
</li>
        </ul>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=c75c2d56-e505-4e6e-a2dc-89307f1e5c27" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>It's easy to get behind on blog reading</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,c75c2d56-e505-4e6e-a2dc-89307f1e5c27.aspx</guid>
      <link>http://blog.salvoz.com/2008/04/27/ItsEasyToGetBehindOnBlogReading.aspx</link>
      <pubDate>Sun, 27 Apr 2008 21:25:16 GMT</pubDate>
      <description>&lt;p&gt;
Over the last couple of weeks I've been in the process of rebuilding my primary workstation
at home, installing server 2008, hyper-v, creating VM's, etc. I finally got around
to importing my RSS feed list and found plenty to catch up on. This post is basically
just a series of links to posts that I've missed over the past couple of weeks.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://weblogs.asp.net/scottgu/archive/2008/04/16/asp-net-mvc-source-refresh-preview.aspx"&gt;Asp.Net
MVC Source Refresh&lt;/a&gt; posted by ScottGu - The latest source code for the upcoming
MVC addition to Asp.Net has been posted on CodePlex. The official preview 3 release
is due in a couple of weeks and will provide a "hassle-free" installation. Scott points
out that the unit tests for the MVC project have been released, and that they are
using MSTest (no surprise there) and Moq, an open source mocking framework. 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.hanselman.com/blog/HanselminutesPodcast109ASPNETDynamicDataWithScottHunter.aspx"&gt;Hanselminutes
109 Dynamic Data&lt;/a&gt; - Scott interviews Scott Hunter, Sr Program Manager @ Microsoft
about the Asp.Net dynamic data project. The most important thing I took away from
this pod cast was that Dynamic Data is not a tool to create prototype web sites or
scafolding. This was just the first demo, and unfortunately it has left some negative
impressions.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.codinghorror.com/blog/archives/001107.html"&gt;Building a HTPC&lt;/a&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;posted
by Jeff - This is an amazing post showing how cheap you can build a kick ass HTPC
using the new AMD 780G platform. The 780G has a ATI HD3200 chipset which supports
HDCP and decoding of blu-ray. I may just look to sell my old AMD Operton 165 parts
to finance a HTPC running on the 780G platform. I decided to order the Kill-A-Watt
power meter recommended by Jeff as well to see how much it's costing me to run 3 folding
instances on my new box ;)&lt;/li&gt;
&lt;li&gt;
&lt;a title="Permanent Link to .NET Micro Framework vs. Microsoft Robotics Studio" href="http://dvanderboom.wordpress.com/2008/04/12/net-micro-framework-vs-microsoft-robotics-studio/"&gt;NET
Micro Framework vs. Microsoft Robotics Studio&lt;/a&gt;, &lt;a title="Permanent Link to Introduction to Port-Based Asynchronous Messaging" href="http://dvanderboom.wordpress.com/2008/04/21/introduction-to-port-based-asynchronous-messaging/"&gt;Introduction
to Port-Based Asynchronous Messaging&lt;/a&gt;, &lt;a title="Permanent Link to Phidgets Robotics Programming in C#" href="http://dvanderboom.wordpress.com/2008/04/21/phidgets-robotics-programming-in-c/"&gt;Phidgets
Robotics Programming in C#&lt;/a&gt; posted by Dan Vanderboom - That's three posts from
Dan, all of which hit close to home. I've been working with the Phidgets RFID reader
for almost a year now and taking advantage of Robotics Studio on the Compact Framework
sounds vary promising.&amp;nbsp; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=c75c2d56-e505-4e6e-a2dc-89307f1e5c27" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,c75c2d56-e505-4e6e-a2dc-89307f1e5c27.aspx</comments>
      <category>Technology/Review For Future Projects</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=dfa97071-6c06-4fc4-91ff-858e1de3b5e8</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,dfa97071-6c06-4fc4-91ff-858e1de3b5e8.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,dfa97071-6c06-4fc4-91ff-858e1de3b5e8.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=dfa97071-6c06-4fc4-91ff-858e1de3b5e8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.computerzen.com">Scott</a> blogged about mutli-core builds using
MSBuild from the <a href="http://www.hanselman.com/blog/FasterBuildsWithMSBuildUsingParallelBuildsAndMulticoreCPUs.aspx">command
line</a>, as well as a "hack" from within <a href="http://www.hanselman.com/blog/HackParallelMSBuildsFromWithinTheVisualStudioIDE.aspx">Visual
Studio</a>. I followed the instructions as outlined in the 2nd post and it seems to
work for the most part. The solution I was trying it on was fairly small and contained
a mix of Compact (CF) and Full (FF) framework projects which seem to cause some issues. 
</p>
        <p>
As pointed out in the 2nd post, you are not going to see much advantage to multi-core
builds for small projects. I will probably revisit this when my project gets allot
larger, as well as look into build configurations and targets (custom MSBuild Files)
for my CF/FF project mix. 
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=dfa97071-6c06-4fc4-91ff-858e1de3b5e8" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Multi-core Builds</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,dfa97071-6c06-4fc4-91ff-858e1de3b5e8.aspx</guid>
      <link>http://blog.salvoz.com/2008/04/26/MulticoreBuilds.aspx</link>
      <pubDate>Sat, 26 Apr 2008 19:49:19 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.computerzen.com"&gt;Scott&lt;/a&gt; blogged about mutli-core builds using
MSBuild from the &lt;a href="http://www.hanselman.com/blog/FasterBuildsWithMSBuildUsingParallelBuildsAndMulticoreCPUs.aspx"&gt;command
line&lt;/a&gt;, as well as a "hack" from within &lt;a href="http://www.hanselman.com/blog/HackParallelMSBuildsFromWithinTheVisualStudioIDE.aspx"&gt;Visual
Studio&lt;/a&gt;. I followed the instructions as outlined in the 2nd post and it seems to
work for the most part. The solution I was trying it on was fairly small and contained
a mix of Compact (CF) and Full (FF) framework projects which seem to cause some issues. 
&lt;/p&gt;
&lt;p&gt;
As pointed out in the 2nd post, you are not going to see much advantage to multi-core
builds for small projects. I will probably revisit this when my project gets allot
larger, as well as look into build configurations and targets (custom MSBuild Files)
for my CF/FF project mix. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=dfa97071-6c06-4fc4-91ff-858e1de3b5e8" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,dfa97071-6c06-4fc4-91ff-858e1de3b5e8.aspx</comments>
      <category>Technology/Review For Future Projects</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=c654101a-84d3-40af-96e4-c3ea9d022781</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,c654101a-84d3-40af-96e4-c3ea9d022781.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,c654101a-84d3-40af-96e4-c3ea9d022781.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=c654101a-84d3-40af-96e4-c3ea9d022781</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Terminal services gateway is a new feature included in Windows Server 2008 under the
Terminal Services server role. It allows external client computers to connect to internal
resources, such as RDP clients without having to configure port forwarding at the
firewall. 
</p>
        <p>
A simple example of how I would RDP into a computer located behind a firewall without
using TS Gateway:
</p>
        <blockquote>
          <p>
Open up port 3389 on my firewall and forward it to a computer on my LAN. Then from
an external client, I would connect to the computer that I am port forwarding to,
and from there I could RDP into other computers as needed.
</p>
        </blockquote>
        <blockquote>
          <p>
If I wanted direct access to more then one computer on my LAN, I would have to configure
RDP on the "server" computer to listen on a port other then 3389, open that port on
my firewall, and port forward. 
</p>
        </blockquote>
        <p>
With TS Gateway, all I need to do is specify the resource and the TS Gateway address,
and I can connect (assuming you have setup TS Gateway, authorization lists for computers
and users, etc). The connection using RDP over HTTPS and the more common port 443. 
</p>
        <p>
So far the only downside to TS Gateway the extra overhead required in setting it up.
You must have a server running Windows Server 2008, a certificate for the HTTPS (TLS
1.0), as well as the following roles, RPC over HTTP, IIS 7.0, and Network Policy and
Access Services. If you don't have an externally trusted certification, you can create
your own, but then the public CA certificate used to sign your cert must be installed
on all client computers. If you have a domain, and only domain computers will be connecting,
this isn't too much of a problem.
</p>
        <ul>
          <li>
            <a href="http://technet2.microsoft.com/windowsserver2008/en/library/9da3742f-699d-4476-b050-c50aa14aaf081033.mspx?mfr=truehttp://technet2.microsoft.com/windowsserver2008/en/library/9da3742f-699d-4476-b050-c50aa14aaf081033.mspx?mfr=true">Technet
Article on Terminal Services Gateway</a>
          </li>
          <li>
            <a href="http://www.windowsecurity.com/articles/Configuring-Windows-Server-2008-Terminal-Services-Gateway-Part1.html">Configuring
Terminal Services Gateway - Part I</a>
          </li>
          <li>
            <a href="http://www.windowsecurity.com/articles/Configuring-Windows-Server-2008-Terminal-Services-Gateway-Part2.html">Configuring
Terminal Services Gateway - Part II</a>
          </li>
        </ul>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=c654101a-84d3-40af-96e4-c3ea9d022781" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Terminal Services Gateway</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,c654101a-84d3-40af-96e4-c3ea9d022781.aspx</guid>
      <link>http://blog.salvoz.com/2008/04/14/TerminalServicesGateway.aspx</link>
      <pubDate>Mon, 14 Apr 2008 18:32:59 GMT</pubDate>
      <description>&lt;p&gt;
Terminal services gateway is a new feature included in Windows Server 2008 under the
Terminal Services server role. It allows external client computers to connect to internal
resources, such as RDP clients without having to configure port forwarding at the
firewall. 
&lt;/p&gt;
&lt;p&gt;
A simple example of how I would RDP into a computer located behind a firewall without
using TS Gateway:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Open up port 3389 on my firewall and forward it to a computer on my LAN. Then from
an external client, I would connect to the computer that I am port forwarding to,
and from there I could RDP into other computers as needed.
&lt;/p&gt;
&lt;/blockquote&gt; &lt;blockquote&gt; 
&lt;p&gt;
If I wanted direct access to more then one computer on my LAN, I would have to configure
RDP on the "server" computer to listen on a port other then 3389, open that port on
my firewall, and port forward. 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
With TS Gateway, all I need to do is specify the resource and the TS Gateway address,
and I can connect (assuming you have setup TS Gateway, authorization lists for computers
and users, etc). The connection using RDP over HTTPS and the more common port 443. 
&lt;/p&gt;
&lt;p&gt;
So far the only downside to TS Gateway the extra overhead required in setting it up.
You must have a server running Windows Server 2008, a certificate for the HTTPS (TLS
1.0), as well as the following roles, RPC over HTTP, IIS 7.0, and Network Policy and
Access Services. If you don't have an externally trusted certification, you can create
your own, but then the public CA certificate used to sign your cert must be installed
on all client computers. If you have a domain, and only domain computers will be connecting,
this isn't too much of a problem.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://technet2.microsoft.com/windowsserver2008/en/library/9da3742f-699d-4476-b050-c50aa14aaf081033.mspx?mfr=truehttp://technet2.microsoft.com/windowsserver2008/en/library/9da3742f-699d-4476-b050-c50aa14aaf081033.mspx?mfr=true"&gt;Technet
Article on Terminal Services Gateway&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.windowsecurity.com/articles/Configuring-Windows-Server-2008-Terminal-Services-Gateway-Part1.html"&gt;Configuring
Terminal Services Gateway - Part I&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.windowsecurity.com/articles/Configuring-Windows-Server-2008-Terminal-Services-Gateway-Part2.html"&gt;Configuring
Terminal Services Gateway - Part II&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=c654101a-84d3-40af-96e4-c3ea9d022781" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,c654101a-84d3-40af-96e4-c3ea9d022781.aspx</comments>
      <category>Technology/Review For Future Projects</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=4ce79dac-ab0e-411e-9b6d-b8755f5f246b</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,4ce79dac-ab0e-411e-9b6d-b8755f5f246b.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,4ce79dac-ab0e-411e-9b6d-b8755f5f246b.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=4ce79dac-ab0e-411e-9b6d-b8755f5f246b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Both <a href="http://weblogs.asp.net/scottgu/archive/2008/03/18/iis-7-0-bit-rate-throttling-module-released.aspx">ScottGu</a> and <a href="http://www.hanselman.com/blog/SqueezingTheMostOutOfIIS7MediaBitRateThrottling.aspx">Scott</a> have
blogged about the IIS 7 Bit Throttling module for IIS, and it is available for download
on iis.net (see this <a href="http://blogs.iis.net/vsood/archive/2008/03/15/bit-rate-throttling-is-now-released.aspx">announcement</a> by
Vishal Sood). I had been looking past these announcements this past week and while
looking for Scott's article on <a href="http://www.hanselman.com/blog/TwitterTheUselessfulnessOfMicroblogging.aspx">Twitter</a>,
decided to read thru his write-up of bit throttling. 
</p>
        <p>
The bit throttling module for IIS is just one of the first of many (assumed) modules
to be released as add-ons for IIS. I think that you will also start to see community
(they are probably already out there) and commercial modules for IIS. The modularity
of IIS 7 is just starting to show off what it can do.
</p>
        <p>
So what can you do with the Bit Throttling module? In Scott's <a href="http://www.hanselman.com/blog/SqueezingTheMostOutOfIIS7MediaBitRateThrottling.aspx">post</a> he
shows off two demos. The first, shows what you get out of the box, and is similar
to ScottGu's <a href="http://weblogs.asp.net/scottgu/archive/2008/03/18/iis-7-0-bit-rate-throttling-module-released.aspx">post</a>.
You can select a file type and set two options, fast start and throttle rate, and
they differ slightly based on if you choose the Media or Data option.
</p>
        <blockquote>
          <p>
            <strong>Media</strong>
          </p>
          <ul>
            <li>
Fast Start (in seconds) - Download at full speed for the specified number of seconds</li>
            <li>
Throttle rate (as a percentage) - Download as a percentage of encoded bit rate</li>
          </ul>
        </blockquote>
        <blockquote>
          <p>
            <strong>Data</strong>
          </p>
          <ul>
            <li>
Fast Start (in kBytes) - Download at full speed for the specified number of kBytes</li>
            <li>
Throttle rate (in kbps) - download the remaining data at the specified speed</li>
          </ul>
        </blockquote>
        <p>
So you get allot of functionality out of the box. This is extremely useful if you
are streaming allot of video thru IIS, and want to manage your bandwidth better. The
real power of this module can be shown (very simply) in Scott's second example.
</p>
        <p>
Scott's second example extends the bit rate throttling thru custom code by implementing
an IHttpModule. Scott notes that he wrote this in notepad and just dropped the .cs
file into a App_Code folder where his media files were stored, how simple is that?
</p>
        <p>
The demo shows how you can simply look at a query string value and toggle bit rate
throttling. While simple, Scott goes on to explain how you could do a more complex
handler in which registered users, or paid subscribers could get faster downloads. 
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=4ce79dac-ab0e-411e-9b6d-b8755f5f246b" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>IIS 7 Bit Rate Throttling</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,4ce79dac-ab0e-411e-9b6d-b8755f5f246b.aspx</guid>
      <link>http://blog.salvoz.com/2008/03/22/IIS7BitRateThrottling.aspx</link>
      <pubDate>Sat, 22 Mar 2008 18:33:25 GMT</pubDate>
      <description>&lt;p&gt;
Both &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/03/18/iis-7-0-bit-rate-throttling-module-released.aspx"&gt;ScottGu&lt;/a&gt; and &lt;a href="http://www.hanselman.com/blog/SqueezingTheMostOutOfIIS7MediaBitRateThrottling.aspx"&gt;Scott&lt;/a&gt; have
blogged about the IIS 7 Bit Throttling module for IIS, and it is available for download
on iis.net (see this &lt;a href="http://blogs.iis.net/vsood/archive/2008/03/15/bit-rate-throttling-is-now-released.aspx"&gt;announcement&lt;/a&gt; by
Vishal Sood). I had been looking past these announcements this past week and while
looking for Scott's article on &lt;a href="http://www.hanselman.com/blog/TwitterTheUselessfulnessOfMicroblogging.aspx"&gt;Twitter&lt;/a&gt;,
decided to read thru his write-up of bit throttling. 
&lt;/p&gt;
&lt;p&gt;
The bit throttling module for IIS is just one of the first of many (assumed) modules
to be released as add-ons for IIS. I think that you will also start to see community
(they are probably already out there) and commercial modules for IIS. The modularity
of IIS 7 is just starting to show off what it can do.
&lt;/p&gt;
&lt;p&gt;
So what can you do with the Bit Throttling module? In Scott's &lt;a href="http://www.hanselman.com/blog/SqueezingTheMostOutOfIIS7MediaBitRateThrottling.aspx"&gt;post&lt;/a&gt; he
shows off two demos. The first, shows what you get out of the box, and is similar
to ScottGu's &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/03/18/iis-7-0-bit-rate-throttling-module-released.aspx"&gt;post&lt;/a&gt;.
You can select a file type and set two options, fast start and throttle rate, and
they differ slightly based on if you choose the Media or Data option.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;Media&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Fast Start (in seconds) - Download at full speed for the specified number of seconds&lt;/li&gt;
&lt;li&gt;
Throttle rate (as a percentage) - Download as a percentage of encoded bit rate&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt; &lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;Data&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Fast Start (in kBytes) - Download at full speed for the specified number of kBytes&lt;/li&gt;
&lt;li&gt;
Throttle rate (in kbps) - download the remaining data at the specified speed&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
So you get allot of functionality out of the box. This is extremely useful if you
are streaming allot of video thru IIS, and want to manage your bandwidth better. The
real power of this module can be shown (very simply) in Scott's second example.
&lt;/p&gt;
&lt;p&gt;
Scott's second example extends the bit rate throttling thru custom code by implementing
an IHttpModule. Scott notes that he wrote this in notepad and just dropped the .cs
file into a App_Code folder where his media files were stored, how simple is that?
&lt;/p&gt;
&lt;p&gt;
The demo shows how you can simply look at a query string value and toggle bit rate
throttling. While simple, Scott goes on to explain how you could do a more complex
handler in which registered users, or paid subscribers could get faster downloads. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=4ce79dac-ab0e-411e-9b6d-b8755f5f246b" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,4ce79dac-ab0e-411e-9b6d-b8755f5f246b.aspx</comments>
      <category>Technology/Review For Future Projects</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=065f279c-f3c9-4c44-bdab-5e36ec1182b3</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,065f279c-f3c9-4c44-bdab-5e36ec1182b3.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,065f279c-f3c9-4c44-bdab-5e36ec1182b3.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=065f279c-f3c9-4c44-bdab-5e36ec1182b3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Three items were the focus of my attention today. Well, rather 2, and the 3rd I just
saw over on daily tech and it got me very excited.
</p>
        <p>
          <strong>MSF for CMMI</strong>
        </p>
        <p>
I have been reviewing the process guidance for MSF for CMMI version 4.2 which ships
with TFS 2008. I plan on using this process as the foundation on my next software
development project. While out of the box it is a bit of an overkill for my team,
project and company, I prefer to start with more (process) and remove what I don't
need. I also feel that CMMI is a great compromise between management, who is used
too, and wants a more traditional software development approach, and the developers,
such as my self who are advocating a more agile process.
</p>
        <p>
The great thing about MSF for CMMI is that it is written around agile concepts, yet
still has processes in place for oversight. The process guidance, is written in HTML,
making it very easy to edit and customize it after the project is created to meet
your needs. There is a way to edit the template so that it generates the new project
to meet your needs, but I figure this way is easier for the first go around. 
</p>
        <p>
My plan is to make changes to the HTML as needed, and then create a new template.
In addition to tracking my changes, you can use a tool like <a href="http://winmerge.org/">WinMerge</a> to
compare your modified document library with a default one. You can access a document
library via <a href="http://www.endusersharepoint.com/?p=56">windows explorer</a> by
going to the document library and choosing open in explorer from the actions menu.
This creates a UNC path in the form of <a href="file://\\SharepointServer\Sites\SiteName\">\\SharepointServer\Sites\SiteName\</a>Process
Guidance, which you can supply to WinMerge.
</p>
        <p>
I have spent some time going over the default tasks that are created with a new CMMI
based project to see what workstreams and activities they relate to, and I think I
have a pretty good handle on the first two tracks. I plan on documenting this in a
future post.
</p>
        <p>
          <strong>Requirements</strong>
        </p>
        <p>
Oil and Water, Superman and Kryponite, Me and Requirements. I am having some difficulties
in creating a formal software requirements specification, using this <a href="http://www.amazon.com/Software-Requirements-Karl-E-Wiegers/dp/0735606315">book</a> as
a guide. It's not the books fault (although I wish it hand an end to end case study
of a project), but rather a differing of opinion on some of the definitions (which
that end to end case study might help with). 
</p>
        <ul>
          <li>
Where is the line between Use Cases and Functional Requirements? Use cases look a
lot like test plans to some people, and have a tendency to add test plan like information
to them, which I feel is incorrect. 
</li>
          <li>
Where is the line between systems and users in the use cases? 
</li>
          <li>
How much detail is the right amount of detail?</li>
        </ul>
        <p>
Similar to my quest to gain a better understanding in the use of TFS and the MSF for
CMMI, I'm going to have to put some time into researching (primarily looking for examples)
software requirements. In addition to the book, which we now have 6 copies of at work,
I found this <a href="http://www.stcsig.org/mgt/reference.htm">website</a> with some
additional templates, as well as fairly detailed <a href="http://www.techwr-l.com/techwhirl/magazine/writing/softwarerequirementspecs.html">article</a> on
writing requirements from the perspective of a technical writer. There appear to be
some good articles over at wikipedia as well, such as <a href="http://en.wikipedia.org/wiki/Requirements_analysis">Requirements
Analysis</a> and <a href="http://en.wikipedia.org/wiki/Use_case">Use Cases</a>, and <a href="http://en.wikipedia.org/wiki/Use_case_diagram">Use
Case Diagrams</a>. Someone today asked the question about how do all the use cases
get related, and I believe the answer is the use case diagram (at least one use for
a use case diagram), as illustrated in the example on Wikipedia. 
</p>
        <p>
I hope to be able to report back with some answers to my questions sometime in the
future.
</p>
        <p>
          <strong>NVidia Application Processor</strong>
        </p>
        <p>
Daily Tech had an <a href="http://www.dailytech.com/article.aspx?newsid=10650">article</a> on
the NVidia <a href="http://www.nvidia.com/object/io_1202741043286.html">APX 2500 application
processor</a> which is designed to add hi-def capabilities to mobile devices. The
article states that NVidia has been working with Microsoft, so once can assume (as
does the author of the article), that this is destined for a Windows Mobile application. 
</p>
        <p>
I've really been giving my HTC Mogul a <a href="http://blog.salvoz.com/2008/02/03/CookedROMsOnTheHTCMogulTitan6800Etc.aspx">work
out</a> and have always wanted a all in one device (video, mp3, phone, PDA, etc),
so I am very excited about this. Since I have a bias against Apple, I am not a fan
of the iPhone, although I can appreciate and respect what it is. This gives me some
hope that my next Windows Mobile phone will be a force to be rekon with. 
</p>
        <p>
In addition to smart phones, I can also see this making it's way to other embedded
systems, especially something like a mall kiosk. This brings me to the second reason
that I am excited, and that is, my current software project is all about embedded
systems running Windows CE. I have some future customer requirements that could take
advantage of the functionality provided by this chip.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=065f279c-f3c9-4c44-bdab-5e36ec1182b3" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>MSF for CMMI, Requirements, and NVidia Application Processor</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,065f279c-f3c9-4c44-bdab-5e36ec1182b3.aspx</guid>
      <link>http://blog.salvoz.com/2008/02/13/MSFForCMMIRequirementsAndNVidiaApplicationProcessor.aspx</link>
      <pubDate>Wed, 13 Feb 2008 05:14:14 GMT</pubDate>
      <description>&lt;p&gt;
Three items were the focus of my attention today. Well, rather 2, and the 3rd I just
saw over on daily tech and it got me very excited.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;MSF for CMMI&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I have been reviewing the process guidance for MSF for CMMI version 4.2 which ships
with TFS 2008. I plan on using this process as the foundation on my next software
development project. While out of the box it is a bit of an overkill for my team,
project and company, I prefer to start with more (process) and remove what I don't
need. I also feel that CMMI is a great compromise between management, who is used
too, and wants a more traditional software development approach, and the developers,
such as my self who are advocating a more agile process.
&lt;/p&gt;
&lt;p&gt;
The great thing about MSF for CMMI is that it is written around agile concepts, yet
still has processes in place for oversight. The process guidance, is written in HTML,
making it very easy to edit and customize it after the project is created to meet
your needs. There is a way to edit the template so that it generates the new project
to meet your needs, but I figure this way is easier for the first go around. 
&lt;/p&gt;
&lt;p&gt;
My plan is to make changes to the HTML as needed, and then create a new template.
In addition to tracking my changes, you can use a tool like &lt;a href="http://winmerge.org/"&gt;WinMerge&lt;/a&gt; to
compare your modified document library with a default one. You can access a document
library via &lt;a href="http://www.endusersharepoint.com/?p=56"&gt;windows explorer&lt;/a&gt; by
going to the document library and choosing open in explorer from the actions menu.
This creates a UNC path in the form of &lt;a href="file://\\SharepointServer\Sites\SiteName\"&gt;\\SharepointServer\Sites\SiteName\&lt;/a&gt;Process
Guidance, which you can supply to WinMerge.
&lt;/p&gt;
&lt;p&gt;
I have spent some time going over the default tasks that are created with a new CMMI
based project to see what workstreams and activities they relate to, and I think I
have a pretty good handle on the first two tracks. I plan on documenting this in a
future post.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Requirements&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Oil and Water, Superman and Kryponite, Me and Requirements. I am having some difficulties
in creating a formal software requirements specification, using this &lt;a href="http://www.amazon.com/Software-Requirements-Karl-E-Wiegers/dp/0735606315"&gt;book&lt;/a&gt; as
a guide. It's not the books fault (although I wish it hand an end to end case study
of a project), but rather a differing of opinion on some of the definitions (which
that end to end case study might help with). 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Where is the line between Use Cases and Functional Requirements? Use cases look a
lot like test plans to some people, and have a tendency to add test plan like information
to them, which I feel is incorrect. 
&lt;/li&gt;
&lt;li&gt;
Where is the line between systems and users in the use cases? 
&lt;/li&gt;
&lt;li&gt;
How much detail is the right amount of detail?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Similar to my quest to gain a better understanding in the use of TFS and the MSF for
CMMI, I'm going to have to put some time into researching (primarily looking for examples)
software requirements. In addition to the book, which we now have 6 copies of at work,
I found this &lt;a href="http://www.stcsig.org/mgt/reference.htm"&gt;website&lt;/a&gt; with some
additional templates, as well as fairly detailed &lt;a href="http://www.techwr-l.com/techwhirl/magazine/writing/softwarerequirementspecs.html"&gt;article&lt;/a&gt; on
writing requirements from the perspective of a technical writer. There appear to be
some good articles over at wikipedia as well, such as &lt;a href="http://en.wikipedia.org/wiki/Requirements_analysis"&gt;Requirements
Analysis&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Use_case"&gt;Use Cases&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/Use_case_diagram"&gt;Use
Case Diagrams&lt;/a&gt;. Someone today asked the question about how do all the use cases
get related, and I believe the answer is the use case diagram (at least one use for
a use case diagram), as illustrated in the example on Wikipedia. 
&lt;/p&gt;
&lt;p&gt;
I hope to be able to report back with some answers to my questions sometime in the
future.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;NVidia Application Processor&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Daily Tech had an &lt;a href="http://www.dailytech.com/article.aspx?newsid=10650"&gt;article&lt;/a&gt; on
the NVidia &lt;a href="http://www.nvidia.com/object/io_1202741043286.html"&gt;APX 2500 application
processor&lt;/a&gt; which is designed to add hi-def capabilities to mobile devices. The
article states that NVidia has been working with Microsoft, so once can assume (as
does the author of the article), that this is destined for a Windows Mobile application. 
&lt;/p&gt;
&lt;p&gt;
I've really been giving my HTC Mogul a &lt;a href="http://blog.salvoz.com/2008/02/03/CookedROMsOnTheHTCMogulTitan6800Etc.aspx"&gt;work
out&lt;/a&gt; and have always wanted a all in one device (video, mp3, phone, PDA, etc),
so I am very excited about this. Since I have a bias against Apple, I am not a fan
of the iPhone, although I can appreciate and respect what it is. This gives me some
hope that my next Windows Mobile phone will be a force to be rekon with. 
&lt;/p&gt;
&lt;p&gt;
In addition to smart phones, I can also see this making it's way to other embedded
systems, especially something like a mall kiosk. This brings me to the second reason
that I am excited, and that is, my current software project is all about embedded
systems running Windows CE. I have some future customer requirements that could take
advantage of the functionality provided by this chip.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=065f279c-f3c9-4c44-bdab-5e36ec1182b3" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,065f279c-f3c9-4c44-bdab-5e36ec1182b3.aspx</comments>
      <category>Technology/Programming</category>
      <category>Technology/Review For Future Projects</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=61d45a69-647e-4321-b6e9-d7590c5d10eb</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,61d45a69-647e-4321-b6e9-d7590c5d10eb.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,61d45a69-647e-4321-b6e9-d7590c5d10eb.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=61d45a69-647e-4321-b6e9-d7590c5d10eb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.hanselman.com/blog/">Scott Hanselman</a> today <a href="http://www.hanselman.com/blog/ASPNETWikiBeta.aspx">announced</a> the
Asp.Net <a href="http://wiki.asp.net/">Wiki</a> (Beta).
</p>
        <blockquote>
          <p>
"The idea is that folks spend a lot of time trolling the blogs, <strike>googling</strike> live-searching
for answers to common "How To" questions. There's piles of fantastic community-created
and MSFT-created content out there, but if it's not found by a search engine and the
right combination of keywords, it's often lost."
</p>
        </blockquote>
        <p>
I think it's a great idea and I hope to see other product groups at Microsoft follow
suit. Since it's linked off <a href="http://www.asp.net">http://www.asp.net</a>, and
a Microsoft entity, I see it quickly becoming the one stop shop for Asp.Net information.
</p>
        <p>
If you jump on and contribute to the wiki right now, you could be a top contributor,
at least for a couple of days. 
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=61d45a69-647e-4321-b6e9-d7590c5d10eb" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Asp.Net Wiki</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,61d45a69-647e-4321-b6e9-d7590c5d10eb.aspx</guid>
      <link>http://blog.salvoz.com/2008/02/08/AspNetWiki.aspx</link>
      <pubDate>Fri, 08 Feb 2008 23:34:45 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.hanselman.com/blog/"&gt;Scott Hanselman&lt;/a&gt; today &lt;a href="http://www.hanselman.com/blog/ASPNETWikiBeta.aspx"&gt;announced&lt;/a&gt; the
Asp.Net &lt;a href="http://wiki.asp.net/"&gt;Wiki&lt;/a&gt; (Beta).
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
"The idea is that folks spend a lot of time trolling the blogs, &lt;strike&gt;googling&lt;/strike&gt; live-searching
for answers to common "How To" questions. There's piles of fantastic community-created
and MSFT-created content out there, but if it's not found by a search engine and the
right combination of keywords, it's often lost."
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I think it's a great idea and I hope to see other product groups at Microsoft follow
suit. Since it's linked off &lt;a href="http://www.asp.net"&gt;http://www.asp.net&lt;/a&gt;, and
a Microsoft entity, I see it quickly becoming the one stop shop for Asp.Net information.
&lt;/p&gt;
&lt;p&gt;
If you jump on and contribute to the wiki right now, you could be a top contributor,
at least for a couple of days. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=61d45a69-647e-4321-b6e9-d7590c5d10eb" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,61d45a69-647e-4321-b6e9-d7590c5d10eb.aspx</comments>
      <category>Technology</category>
      <category>Technology/Programming</category>
      <category>Technology/Review For Future Projects</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=a62d6486-760b-4891-8acb-df58f6124226</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,a62d6486-760b-4891-8acb-df58f6124226.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,a62d6486-760b-4891-8acb-df58f6124226.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=a62d6486-760b-4891-8acb-df58f6124226</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Let this be my first post in my new Windows CE category. I have a feeling I will be
writing more stuff about WinCE in the coming months. I wanted to jot down some notes
from a couple of articles I read over at <a href="http://www.opennetcf.com/">OpenNetCF</a> for
future review. Most of the high level concepts I already knew, but it's nice to get
some details once in a while. 
</p>
        <p>
          <a href="http://community.opennetcf.com/articles/cf/archive/2007/09/21/improving-data-access-performance-with-data-caching.aspx">Data
Caching</a>
        </p>
        <ul>
          <li>
No performance gain in keeping the data connection open for the life of an application.</li>
          <li>
Cache reads are two orders of magnitude faster then a database read. As the article
points out, this is interesting due to the fact that the database, and cached data
were both stored in RAM. 
</li>
          <li>
Several of the reader comments were interesting</li>
          <ul>
            <li>
The first time a SqlCE Connection is opened, the database is loaded into shared memory</li>
            <li>
One option is to have a connection opened for the life of the application, but not
to use it, this is just to keep the engine loaded. Then open/close connections in
your DAL as you normally would. This was recommended by Steve Lasker, a member of
the SQL CE dev team. Steve also points out that reusing a command object and changing
the text code hurt more then help, as you can't take advantage of query plans. Reusing
a command object can sometimes help with the garbage collector. 
</li>
            <li>
Another reader provided a example where it looks like he is doing an index scan and
getting faster results then directly querying the database. It's hard to tell without
running the sample code.</li>
          </ul>
        </ul>
        <p>
          <a href="http://community.opennetcf.com/articles/cf/archive/2007/08/10/don-t-fear-the-garbage-collector.aspx">Garbage
Collector</a>
        </p>
        <ul>
          <li>
GC suspends all threads while it performs necessary actions, such as freeing and moving
memory. Frequent GC's can have an adverse affect on performance.</li>
          <li>
Remote performance monitor, which I <a href="http://blog.salvoz.com/2007/10/15/AnalyzingACompactFrameworkApplicationUsingRemotePerformanceMonitor.aspx">blogged
about</a> before, is a valuable tool. This article provides a good example of how
to interpret some of the numbers. 
</li>
          <li>
Don't fear the GC, and take the time to understand what the numbers in remote performance
monitor mean. 
</li>
        </ul>
        <p>
I'm also in search of a decent MVC and IoC framework for Windows CE. I'll probably
be posting more on this later. 
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=a62d6486-760b-4891-8acb-df58f6124226" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Windows CE</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,a62d6486-760b-4891-8acb-df58f6124226.aspx</guid>
      <link>http://blog.salvoz.com/2008/01/12/WindowsCE.aspx</link>
      <pubDate>Sat, 12 Jan 2008 21:25:34 GMT</pubDate>
      <description>&lt;p&gt;
Let this be my first post in my new Windows CE category. I have a feeling I will be
writing more stuff about WinCE in the coming months. I wanted to jot down some notes
from a couple of articles I read over at &lt;a href="http://www.opennetcf.com/"&gt;OpenNetCF&lt;/a&gt; for
future review. Most of the high level concepts I already knew, but it's nice to get
some details once in a while. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://community.opennetcf.com/articles/cf/archive/2007/09/21/improving-data-access-performance-with-data-caching.aspx"&gt;Data
Caching&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
No performance gain in keeping the data connection open for the life of an application.&lt;/li&gt;
&lt;li&gt;
Cache reads are two orders of magnitude faster then a database read. As the article
points out, this is interesting due to the fact that the database, and cached data
were both stored in RAM. 
&lt;/li&gt;
&lt;li&gt;
Several of the reader comments were interesting&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
The first time a SqlCE Connection is opened, the database is loaded into shared memory&lt;/li&gt;
&lt;li&gt;
One option is to have a connection opened for the life of the application, but not
to use it, this is just to keep the engine loaded. Then open/close connections in
your DAL as you normally would. This was recommended by Steve Lasker, a member of
the SQL CE dev team. Steve also points out that reusing a command object and changing
the text code hurt more then help, as you can't take advantage of query plans. Reusing
a command object can sometimes help with the garbage collector. 
&lt;/li&gt;
&lt;li&gt;
Another reader provided a example where it looks like he is doing an index scan and
getting faster results then directly querying the database. It's hard to tell without
running the sample code.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="http://community.opennetcf.com/articles/cf/archive/2007/08/10/don-t-fear-the-garbage-collector.aspx"&gt;Garbage
Collector&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
GC suspends all threads while it performs necessary actions, such as freeing and moving
memory. Frequent GC's can have an adverse affect on performance.&lt;/li&gt;
&lt;li&gt;
Remote performance monitor, which I &lt;a href="http://blog.salvoz.com/2007/10/15/AnalyzingACompactFrameworkApplicationUsingRemotePerformanceMonitor.aspx"&gt;blogged
about&lt;/a&gt; before, is a valuable tool. This article provides a good example of how
to interpret some of the numbers. 
&lt;/li&gt;
&lt;li&gt;
Don't fear the GC, and take the time to understand what the numbers in remote performance
monitor mean. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I'm also in search of a decent MVC and IoC framework for Windows CE. I'll probably
be posting more on this later. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=a62d6486-760b-4891-8acb-df58f6124226" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,a62d6486-760b-4891-8acb-df58f6124226.aspx</comments>
      <category>Technology/Review For Future Projects</category>
      <category>Technology/WinCE</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=cb26059c-074a-47ca-9fd6-bace1b0d2f12</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,cb26059c-074a-47ca-9fd6-bace1b0d2f12.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,cb26059c-074a-47ca-9fd6-bace1b0d2f12.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=cb26059c-074a-47ca-9fd6-bace1b0d2f12</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today's task, a somewhat detailed code analysis of one of our Windows CE projects.
In addition to reviewing from a lead architect point of view (design and implementation),
I also needed to take a look at general coding practices. For this I turned to the
Code Analysis tool in Visual Studio, and <a href="http://www.ndepend.com/">NDepend</a>.
</p>
        <p>
I had remembered reading about <a href="http://www.ndepend.com/">NDepend</a> on <a href="http://www.hanselman.com/blog/ExitingTheZoneOfPainStaticAnalysisWithNDepend.aspx">Scott's
blog</a>, and went back there to re-read his post. I highly recommend it, as it's
a great quick start and introduction to <a href="http://www.ndepend.com/">NDepend</a>.
Scott also has a pod cast available, and the the NDepend web site has links to several
video tutorials showing how to use it. 
</p>
        <p>
One thing I found lacking, was there were no support forums on the NDepend web site.
I had a couple of issues getting my Compact Framework application to be property recognized
by NDepend. The main issue, was NDepend was trying to use the full framework version
of System.Data instead of the Compact Framework version. I noticed that there was
an option when selecting assemblies to resolved missing ones (well, some it let me,
others it didn't), and figured the resolved location was stored in the project configuration
file. So I opened it up in note pad and sure enough, there were all the directory
paths.
</p>
        <p>
I removed all of the paths that were added by default, and added my own paths to my
project. I also added paths to the SQL CE 3.5 directory, as well as the location of
the compact framework dlls (See update below). Unfortunately I still had issues with
NDpend detecting multiple dlls (System.Data and System.Windows.Forms) with the same
name. I decided to remove the path statements for everything except my project. This
resulted in warning about not being able to resolve dependencies, but the analysis
completed. 
</p>
        <p>
There is allot of information presented, almost to the point of information overload.
I highly recommend printing out and reviewing the NDepend <a href="http://www.hanselman.com/blog/content/binary/NDepend%20metrics%20placemats%201.1.pdf">placemat</a> as
a quick reference. I concentrated primarily on the metrics, which use NDepend's Code
Query Language to identify possible problems. I found myself viewing all of the queries
to figure out what they were looking at. The documentation of the queries is excellent,
and each one includes a link to the NDepend web site which defines the metric is pretty
good detail. 
</p>
        <p>
I am quite impressed with the amount of information that NDepend gave me about my
project. There were/are a few usability issues, but they can be overcome. I hope that
I can continue to find time to make use of this excellent tool. I spent some time
watching the video tutorials, and they were very helpful. I've been trying to get
a side project started at home to try out all the tools, techniques, patterns, etc
that I don't have time for at work, and this will definitely find it's way onto my
to do list. I think it will be very interesting to use this from the beginning and
see how the different metrics change as I build out my project.
</p>
        <p>
          <strong>Update:</strong>
        </p>
        <ul>
          <li>
1/2/2008 - After watching the videos, I discovered that when you are setting up your
project in VisualNDepend, there is a screen that lest you add/remove directories in
the application. This is much easier then editing the project file manually like I
was initially doing. 
</li>
        </ul>
        <p>
          <strong>Other Links:</strong>
        </p>
        <ul>
          <li>
            <a href="http://www.amazon.com/Principles-Patterns-Practices-Robert-Martin/dp/0131857258/">Agile
Principles, Patterns, and Practices in C# by Robert C. Martin</a> - This book was
referenced on the NDepend web site when talking about metrics on assemblies. 
</li>
          <li>
NDepend <a href="http://www.ndepend.com/GettingStarted.aspx">Getting Started</a> page,
which links to video tutorials and additional references at the bottom.</li>
        </ul>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=cb26059c-074a-47ca-9fd6-bace1b0d2f12" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>NDepend</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,cb26059c-074a-47ca-9fd6-bace1b0d2f12.aspx</guid>
      <link>http://blog.salvoz.com/2008/01/01/NDepend.aspx</link>
      <pubDate>Tue, 01 Jan 2008 18:01:14 GMT</pubDate>
      <description>&lt;p&gt;
Today's task, a somewhat detailed code analysis of one of our Windows CE projects.
In addition to reviewing from a lead architect point of view (design and implementation),
I also needed to take a look at general coding practices. For this I turned to the
Code Analysis tool in Visual Studio, and &lt;a href="http://www.ndepend.com/"&gt;NDepend&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
I had remembered reading about &lt;a href="http://www.ndepend.com/"&gt;NDepend&lt;/a&gt; on &lt;a href="http://www.hanselman.com/blog/ExitingTheZoneOfPainStaticAnalysisWithNDepend.aspx"&gt;Scott's
blog&lt;/a&gt;, and went back there to re-read his post. I highly recommend it, as it's
a great quick start and introduction to &lt;a href="http://www.ndepend.com/"&gt;NDepend&lt;/a&gt;.
Scott also has a pod cast available, and the the NDepend web site has links to several
video tutorials showing how to use it. 
&lt;/p&gt;
&lt;p&gt;
One thing I found lacking, was there were no support forums on the NDepend web site.
I had a couple of issues getting my Compact Framework application to be property recognized
by NDepend. The main issue, was NDepend was trying to use the full framework version
of System.Data instead of the Compact Framework version. I noticed that there was
an option when selecting assemblies to resolved missing ones (well, some it let me,
others it didn't), and figured the resolved location was stored in the project configuration
file. So I opened it up in note pad and sure enough, there were all the directory
paths.
&lt;/p&gt;
&lt;p&gt;
I removed all of the paths that were added by default, and added my own paths to my
project. I also added paths to the SQL CE 3.5 directory, as well as the location of
the compact framework dlls (See update below). Unfortunately I still had issues with
NDpend detecting multiple dlls (System.Data and System.Windows.Forms) with the same
name. I decided to remove the path statements for everything except my project. This
resulted in warning about not being able to resolve dependencies, but the analysis
completed. 
&lt;/p&gt;
&lt;p&gt;
There is allot of information presented, almost to the point of information overload.
I highly recommend printing out and reviewing the NDepend &lt;a href="http://www.hanselman.com/blog/content/binary/NDepend%20metrics%20placemats%201.1.pdf"&gt;placemat&lt;/a&gt; as
a quick reference. I concentrated primarily on the metrics, which use NDepend's Code
Query Language to identify possible problems. I found myself viewing all of the queries
to figure out what they were looking at. The documentation of the queries is excellent,
and each one includes a link to the NDepend web site which defines the metric is pretty
good detail. 
&lt;/p&gt;
&lt;p&gt;
I am quite impressed with the amount of information that NDepend gave me about my
project. There were/are a few usability issues, but they can be overcome. I hope that
I can continue to find time to make use of this excellent tool. I spent some time
watching the video tutorials, and they were very helpful. I've been trying to get
a side project started at home to try out all the tools, techniques, patterns, etc
that I don't have time for at work, and this will definitely find it's way onto my
to do list. I think it will be very interesting to use this from the beginning and
see how the different metrics change as I build out my project.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Update:&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
1/2/2008 - After watching the videos, I discovered that when you are setting up your
project in VisualNDepend, there is a screen that lest you add/remove directories in
the application. This is much easier then editing the project file manually like I
was initially doing. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Other Links:&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.amazon.com/Principles-Patterns-Practices-Robert-Martin/dp/0131857258/"&gt;Agile
Principles, Patterns, and Practices in C# by Robert C. Martin&lt;/a&gt; - This book was
referenced on the NDepend web site when talking about metrics on assemblies. 
&lt;li&gt;
NDepend &lt;a href="http://www.ndepend.com/GettingStarted.aspx"&gt;Getting Started&lt;/a&gt; page,
which links to video tutorials and additional references at the bottom.&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=cb26059c-074a-47ca-9fd6-bace1b0d2f12" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,cb26059c-074a-47ca-9fd6-bace1b0d2f12.aspx</comments>
      <category>Technology/Programming</category>
      <category>Technology/Review For Future Projects</category>
      <category>Technology/Tools</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=2f9fd80d-d148-4427-ae86-bd4b78b1e58c</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,2f9fd80d-d148-4427-ae86-bd4b78b1e58c.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,2f9fd80d-d148-4427-ae86-bd4b78b1e58c.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=2f9fd80d-d148-4427-ae86-bd4b78b1e58c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Yesterday, a co-worker of mine passed on a link for the <a href="http://msdn2.microsoft.com/en-us/sync/bb821992.aspx">Microsoft
Sync Runtime</a>, suggesting that we may be able to leverage it in the future in order
to meet some requirements we have on our project. 
</p>
        <blockquote>
          <p>
Microsoft Sync Framework is a comprehensive synchronization platform that enables
collaboration and offline access for applications, services and devices. It features
technologies and tools that enable roaming, sharing, and taking data offline. Using
Microsoft Sync Framework, developers can build sync ecosystems that integrate any
application, with any data from any store using any protocol over any network.  
</p>
          <p>
 
</p>
        </blockquote>
        <p>
Reading thru the initial article, I was quite impressed, but it left out a key piece
of information, how does the sync runtime work over the Internet. Not just the internet,
but also any decent corporate network were clients do not have direct database access. 
</p>
        <p>
I made my way to an overview of the <a href="http://msdn2.microsoft.com/en-us/sync/bb887608.aspx">Sync
Services for ADO.Net</a>, which is what I would be most interested in (although syncing
file systems has an interesting appeal as well), and they clearly showed the Internet
cloud, but not really how the sync framework worked with it. I actually had to dig
into the <a href="http://msdn2.microsoft.com/en-us/library/bb726025(SQL.100).aspx">documentation</a>,
and finally found some details on how to get this to work on the Internet. If you
read towards the bottom of the <a href="http://msdn2.microsoft.com/en-us/library/bb726025(SQL.100).aspx">documentation</a>,
you can see that you implement a proxy on a middle tier. 
</p>
        <blockquote>
          <p>
On the middle tier, the service inherits from and exposes the same methods as <b>ServerSyncProvider</b> (the
abstract class from which <b>DbServerSyncProvider</b> inherits). The methods are then
executed by the application code over a direct connection to the server database.
The results are routed through the middle tier and back to the client. 
</p>
          <p>
 
</p>
        </blockquote>
        <p>
Basically the middle tier exposes the same interface that the client application would
normally use if it could connect directly to the database. There was a link which
gives a specific example of setting up a <a href="http://msdn2.microsoft.com/en-us/library/bb967236(SQL.100).aspx">n-Tier</a> environment
and provides a good start. However, I could not find exactly what I was looking for,
which was an example of using WCF as the transport mechanism. With WCF I could have
1 middle tier service with multiple end points configured, such as a Basic Http for
Internet, and TCP for intranet. WCF also adds support for encryption and authentication,
which I didn't see called out specifically in the sync runtime. 
</p>
        <p>
Other items of interest include, <a href="http://msdn2.microsoft.com/en-us/library/bb726006(SQL.100).aspx">how
to setup a database for different sync scenarios</a>, and <a href="http://msdn2.microsoft.com/en-us/library/bb902850(SQL.100).aspx">peer
to peer</a> synchronization. 
</p>
        <p>
All in all, the Sync runtime looks like a very promising framework for building disconnected
applications. It will require some re-architecting for existing solutions, specifically
the data store, but it might be worth it in the long run. I will be sure to post updates
if I get a chance to play around with it at all. It is defiantly something that would
save me some time on a side project I am hoping to start working on soon. 
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=2f9fd80d-d148-4427-ae86-bd4b78b1e58c" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Microsoft Sync Framework Runtime</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,2f9fd80d-d148-4427-ae86-bd4b78b1e58c.aspx</guid>
      <link>http://blog.salvoz.com/2007/12/29/MicrosoftSyncFrameworkRuntime.aspx</link>
      <pubDate>Sat, 29 Dec 2007 19:59:47 GMT</pubDate>
      <description>&lt;p&gt;
Yesterday, a co-worker of mine passed on a link for the &lt;a href="http://msdn2.microsoft.com/en-us/sync/bb821992.aspx"&gt;Microsoft
Sync Runtime&lt;/a&gt;, suggesting that we may be able to leverage it in the future in order
to meet some requirements we have on our project. 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Microsoft Sync Framework is a comprehensive synchronization platform that enables
collaboration and offline access for applications, services and devices. It features
technologies and tools that enable roaming, sharing, and taking data offline. Using
Microsoft Sync Framework, developers can build sync ecosystems that integrate any
application, with any data from any store using any protocol over any network.&amp;nbsp; 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Reading thru the initial article, I was quite impressed, but it left out a key piece
of information, how does the sync runtime work over the Internet. Not just the internet,
but also any decent corporate network were clients do not have direct database access. 
&lt;/p&gt;
&lt;p&gt;
I made my way to an overview of the &lt;a href="http://msdn2.microsoft.com/en-us/sync/bb887608.aspx"&gt;Sync
Services for ADO.Net&lt;/a&gt;, which is what I would be most interested in (although syncing
file systems has an interesting appeal as well), and they clearly showed the Internet
cloud, but not really how the sync framework worked with it. I actually had to dig
into the &lt;a href="http://msdn2.microsoft.com/en-us/library/bb726025(SQL.100).aspx"&gt;documentation&lt;/a&gt;,
and finally found some details on how to get this to work on the Internet. If you
read towards the bottom of the &lt;a href="http://msdn2.microsoft.com/en-us/library/bb726025(SQL.100).aspx"&gt;documentation&lt;/a&gt;,
you can see that you implement a proxy on a middle tier. 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
On the middle tier, the service inherits from and exposes the same methods as &lt;b&gt;ServerSyncProvider&lt;/b&gt; (the
abstract class from which &lt;b&gt;DbServerSyncProvider&lt;/b&gt; inherits). The methods are then
executed by the application code over a direct connection to the server database.
The results are routed through the middle tier and back to the client. 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Basically the middle tier exposes the same interface that the client application would
normally use if it could connect directly to the database. There was a link which
gives a specific example of setting up a &lt;a href="http://msdn2.microsoft.com/en-us/library/bb967236(SQL.100).aspx"&gt;n-Tier&lt;/a&gt; environment
and provides a good start. However, I could not find exactly what I was looking for,
which was an example of using WCF as the transport mechanism. With WCF I could have
1 middle tier service with multiple end points configured, such as a Basic Http for
Internet, and TCP for intranet. WCF also adds support for encryption and authentication,
which I didn't see called out specifically in the sync runtime. 
&lt;/p&gt;
&lt;p&gt;
Other items of interest include, &lt;a href="http://msdn2.microsoft.com/en-us/library/bb726006(SQL.100).aspx"&gt;how
to setup a database for different sync scenarios&lt;/a&gt;, and &lt;a href="http://msdn2.microsoft.com/en-us/library/bb902850(SQL.100).aspx"&gt;peer
to peer&lt;/a&gt; synchronization. 
&lt;/p&gt;
&lt;p&gt;
All in all, the Sync runtime looks like a very promising framework for building disconnected
applications. It will require some re-architecting for existing solutions, specifically
the data store, but it might be worth it in the long run. I will be sure to post updates
if I get a chance to play around with it at all. It is defiantly something that would
save me some time on a side project I am hoping to start working on soon. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=2f9fd80d-d148-4427-ae86-bd4b78b1e58c" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,2f9fd80d-d148-4427-ae86-bd4b78b1e58c.aspx</comments>
      <category>Technology/Review For Future Projects</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=f2fce55a-1082-4d9b-9507-e3debdb91fd1</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,f2fce55a-1082-4d9b-9507-e3debdb91fd1.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,f2fce55a-1082-4d9b-9507-e3debdb91fd1.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=f2fce55a-1082-4d9b-9507-e3debdb91fd1</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Stumbled across <a href="http://labs.live.com/volta/">Volta</a> by accident today.
Volta is a prototype developer tool developed by Microsoft Labs. 
</p>
        <p>
What I got from the FAQ was that You to develop an entire application from the perspective
of the client, as a single Tier, using out of the box tools like Visual Studio 2008.
You then add declarations to your code which Volta will use to refractor your code
(as a 2nd phase of compilation) into multiple tiers, targeting java script enabled
browsers (IE and Fire Fox are supported), and traditional Windows Forms. Volta actually
takes the default compiled MSIL, scans for the Volta declarations you added, and generates
new MSIL which will run on your various Tiers.
</p>
        <p>
I think it sounds like pretty exciting stuff (or I wouldn't have blogged it). However,
I have a few questions/comments/thoughts.
</p>
        <ol>
          <li>
Volta is currently a CTP, and is referred to at least once as experimental. I would
not want to develop any production code unless Volta was going to be actively developed. 
</li>
          <li>
What options exist for tweaking the generated application, specifically on the client
pieces. You always need to tweak something on the generated stuff, and then those
tweaks are usually lost when you re-generate.</li>
          <li>
How would Volta work with something like CSLA, which I use allot. CSLA provides a
mechanism for running as 2 or 3 tier with a configuration file change. 
</li>
          <li>
You can still do more with a WinForms application then a Web Application, even with
things like java script and Ajax and Silver Light. Technologies like WPF add another
layer of complexity as well. As with other things in the land of programming, it sounds
like you would have to give up some performance and features you get with targeting
a specific client environment, in exchange for a single code base. 
</li>
        </ol>
        <blockquote>
          <p>
If everyone else is using existing programming methodologies, targeting specific environments,
reusing code where possible, they are going to have a better looking and performing
application IMO. In the end, the customer doesn't care if you don't have to do as
much work, they only care how the application looks and performs. You would have to
save enough money by using Volta, that you could pass that savings onto the customer.
I'm not sure how you could justify this for internal customers. 
</p>
        </blockquote>
        <p>
I have a backlog of technologies to take a look at, so I probably won't get to Volta
any time soon. That might be a good thing, as by waiting, I will either give it more
time to develop, or get dropped.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=f2fce55a-1082-4d9b-9507-e3debdb91fd1" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Microsoft Labs - Volta</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,f2fce55a-1082-4d9b-9507-e3debdb91fd1.aspx</guid>
      <link>http://blog.salvoz.com/2007/12/17/MicrosoftLabsVolta.aspx</link>
      <pubDate>Mon, 17 Dec 2007 15:14:58 GMT</pubDate>
      <description>&lt;p&gt;
Stumbled across &lt;a href="http://labs.live.com/volta/"&gt;Volta&lt;/a&gt; by accident today.
Volta is a prototype developer tool developed by Microsoft Labs. 
&lt;/p&gt;
&lt;p&gt;
What I got from the FAQ was that You to develop an entire application from the perspective
of the client, as a single Tier, using out of the box tools like Visual Studio 2008.
You then add declarations to your code which Volta will use to refractor your code
(as a 2nd phase of compilation) into multiple tiers, targeting java script enabled
browsers (IE and Fire Fox are supported), and traditional Windows Forms. Volta actually
takes the default compiled MSIL, scans for the Volta declarations you added, and generates
new MSIL which will run on your various Tiers.
&lt;/p&gt;
&lt;p&gt;
I think it sounds like pretty exciting stuff (or I wouldn't have blogged it). However,
I have a few questions/comments/thoughts.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Volta is currently a CTP, and is referred to at least once as experimental. I would
not want to develop any production code unless Volta was going to be actively developed. 
&lt;/li&gt;
&lt;li&gt;
What options exist for tweaking the generated application, specifically on the client
pieces. You always need to tweak something on the generated stuff, and then those
tweaks are usually lost when you re-generate.&lt;/li&gt;
&lt;li&gt;
How would Volta work with something like CSLA, which I use allot. CSLA provides a
mechanism for running as 2 or 3 tier with a configuration file change. 
&lt;/li&gt;
&lt;li&gt;
You can still do more with a WinForms application then a Web Application, even with
things like java script and Ajax and Silver Light. Technologies like WPF add another
layer of complexity as well. As with other things in the land of programming, it sounds
like you would have to give up some performance and features you get with targeting
a specific client environment, in exchange for a single code base. 
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt; 
&lt;p&gt;
If everyone else is using existing programming methodologies, targeting specific environments,
reusing code where possible, they are going to have a better looking and performing
application IMO. In the end, the customer doesn't care if you don't have to do as
much work, they only care how the application looks and performs. You would have to
save enough money by using Volta, that you could pass that savings onto the customer.
I'm not sure how you could justify this for internal customers. 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I have a backlog of technologies to take a look at, so I probably won't get to Volta
any time soon. That might be a good thing, as by waiting, I will either give it more
time to develop, or get dropped.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=f2fce55a-1082-4d9b-9507-e3debdb91fd1" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,f2fce55a-1082-4d9b-9507-e3debdb91fd1.aspx</comments>
      <category>Technology/Review For Future Projects</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=66636aa8-4039-4f83-bc30-f4e80e15a17e</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,66636aa8-4039-4f83-bc30-f4e80e15a17e.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,66636aa8-4039-4f83-bc30-f4e80e15a17e.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=66636aa8-4039-4f83-bc30-f4e80e15a17e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In a recent email from MSDN Flash, I first learned of the new Parallel Extensions
to the .Net Framework 3.5. This is an out of band release that is currently available
as a <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e848dc1d-5be3-4941-8705-024bc7f180ba&amp;displaylang=en">CTP
on Microsoft Downloads</a>.
</p>
        <p>
The description in the MSDN Flash newsletter has me pretty excited about what this
offers.
</p>
        <blockquote>
          <p>
[Parallel Extensions] is a managed programming model for data parallelism, task parallelism,
and coordination on parallel hardware unified by a common work scheduler.
</p>
          <p>
...
</p>
          <p>
Parallel Extensions provides library-based support for introducing concurrency into
applications written in with any .NET language, including but not limited to C# and
Visual Basic. 
</p>
        </blockquote>
        <p>
It is specifically designed to take advantage of multi-core processors (among other
things), which is important due to the recent (last 2 years) shift in the industry
from raw clock speed to multi-core.
</p>
        <blockquote>
          <p>
The computational power of multi-core processors, new programming models and platforms,
and advanced research in usability all promise to change the way people interact with
computers.
</p>
        </blockquote>
        <p>
While excited, I do have some reservations. Encapsulating the lower level knowledge
needed to take advantage of multiple cores will speed up development, but it will
reduce the number of programmers who know how that lower level stuff needs to be written.
The concepts used to take advantage of multi-cores, should be very similar to those
required to take advantage of multi-threading, which is more "widely available" on
the compact framework (although I am seeing more and more embedded computers with
Core 2 Duo's). If this framework is only available for the full framework, the pool
of skilled workers available for the compact framework could diminish (even more so). 
</p>
        <p>
I actually have more of a need to take advantage of multi-threading, and parallel
processing in compact framework applications. As far as asp.net applications, I would
like to see if this is something that would be recommended for them. Long running
processes that would take advantage of this new framework, are usually best left outside
the asp.net application. Speaking of long running processes, that is the 3rd area
I work in, and in a traditional environment, would love to take advantage of this.
However, the applications I am writing are all running on VMWare ESX, and IT has it
set so that each VM only has a single CPU, and puts the burden of scheduling the 8
physical cores on ESX itself.
</p>
        <p>
This will probably end up being something I try to work into personal projects. Unfortunately,
I do not have the time to play with the CTP at this moment, but it is something I
defiantly want to look into in the future. 
</p>
        <p>
          <strong>Additional Information:</strong>
        </p>
        <ul>
          <li>
            <a href="http://msdn2.microsoft.com/en-us/concurrency/default.aspx">MSDN Developer
Center</a>
          </li>
        </ul>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=66636aa8-4039-4f83-bc30-f4e80e15a17e" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Parallel Extensions</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,66636aa8-4039-4f83-bc30-f4e80e15a17e.aspx</guid>
      <link>http://blog.salvoz.com/2007/12/04/ParallelExtensions.aspx</link>
      <pubDate>Tue, 04 Dec 2007 16:12:27 GMT</pubDate>
      <description>&lt;p&gt;
In a recent email from MSDN Flash, I first learned of the new Parallel Extensions
to the .Net Framework 3.5. This is an out of band release that is currently available
as a &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e848dc1d-5be3-4941-8705-024bc7f180ba&amp;amp;displaylang=en"&gt;CTP
on Microsoft Downloads&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The description in the MSDN Flash newsletter has me pretty excited about what this
offers.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
[Parallel Extensions] is a managed programming model for data parallelism, task parallelism,
and coordination on parallel hardware unified by a common work scheduler.
&lt;/p&gt;
&lt;p&gt;
...
&lt;/p&gt;
&lt;p&gt;
Parallel Extensions provides library-based support for introducing concurrency into
applications written in with any .NET language, including but not limited to C# and
Visual Basic. 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
It is specifically designed to take advantage of multi-core processors (among other
things), which is important due to the recent (last 2 years) shift in the industry
from raw clock speed to multi-core.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
The computational power of multi-core processors, new programming models and platforms,
and advanced research in usability all promise to change the way people interact with
computers.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
While excited, I do have some reservations. Encapsulating the lower level knowledge
needed to take advantage of multiple cores will speed up development, but it will
reduce the number of programmers who know how that lower level stuff needs to be written.
The concepts used to take advantage of multi-cores, should be very similar to those
required to take advantage of multi-threading, which is more "widely available" on
the compact framework (although I am seeing more and more embedded computers with
Core 2 Duo's). If this framework is only available for the full framework, the pool
of skilled workers available for the compact framework could diminish (even more so). 
&lt;/p&gt;
&lt;p&gt;
I actually have more of a need to take advantage of multi-threading, and parallel
processing in compact framework applications. As far as asp.net applications, I would
like to see if this is something that would be recommended for them. Long running
processes that would take advantage of this new framework, are usually best left outside
the asp.net application. Speaking of long running processes, that is the 3rd area
I work in, and in a traditional environment, would love to take advantage of this.
However, the applications I am writing are all running on VMWare ESX, and IT has it
set so that each VM only has a single CPU, and puts the burden of scheduling the 8
physical cores on ESX itself.
&lt;/p&gt;
&lt;p&gt;
This will probably end up being something I try to work into personal projects. Unfortunately,
I do not have the time to play with the CTP at this moment, but it is something I
defiantly want to look into in the future. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Additional Information:&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://msdn2.microsoft.com/en-us/concurrency/default.aspx"&gt;MSDN Developer
Center&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=66636aa8-4039-4f83-bc30-f4e80e15a17e" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,66636aa8-4039-4f83-bc30-f4e80e15a17e.aspx</comments>
      <category>Technology/Programming</category>
      <category>Technology/Review For Future Projects</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=5097f379-94f5-47de-919d-9b8809c78ae1</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,5097f379-94f5-47de-919d-9b8809c78ae1.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,5097f379-94f5-47de-919d-9b8809c78ae1.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=5097f379-94f5-47de-919d-9b8809c78ae1</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
While looking to download BizTalk 2006 R2 off MSDN, I came across Software Licensing
and Protection Online Server (SLP Services), and an offer for MSDN subscribers for
free use for 1 year. This was the first time I've heard of SLP Services, so I wanted
to check it out, the home page is here: <a title="http://www.microsoft.com/SLPS/Default.aspx" href="http://www.microsoft.com/SLPS/Default.aspx">http://www.microsoft.com/SLPS/Default.aspx</a>. 
<br /><br />
Key features include:
</p>
        <ul>
          <li>
Code Protection (Advanced Obfuscation?) 
</li>
          <li>
License Enforcement thru activation and client side enforcement. 
</li>
          <li>
1 code base, "unlimited" configurations. Create trial software, add-on packages, timed
demos, etc.</li>
        </ul>
        <p>
SLP Services is either a Microsoft hosted, or server based product that can be used
to protect, license and distribute your software. In the hosted model, Microsoft runs
the service, and you pay them a fee. In the server model, you install the server onto
your network and host it yourself. It might also be possible to resell SLP services,
but I have not read the licensing to know that for sure. This <a href="http://blogs.msdn.com/slps/archive/2007/09/11/part-2-3-shipping-continued.aspx">blog
post</a><strong> </strong>indicates that reselling the SLP Service is an intened
use. In addition to the traditional use for licensing, the SLP Services web site also
talks about benefits of using the technology in the enterprise, for in house applications,
which include monitoring application use, and controller who can use a specific application,
or feature. The <a href="http://www.microsoft.com/SLPS/downloads.aspx">Downloads</a> page,
for information on downloading a trial version of the code protection tool and
documentation for online and offline products.
</p>
        <p>
The basic version you get thru MSDN allows you to do the following
</p>
        <ul>
          <li>
1 licensed product 
</li>
          <li>
100 Commercial Activations (i.e. Customers who <em>purchase</em> a license) 
</li>
          <li>
1000 non-commercial activations (activations that were not purchased) 
</li>
          <li>
1 basic permutation, which allows you to "create" 5 products from a single code base. 
</li>
        </ul>
        <p>
The more expensive licenses of SLP Services allow for more activations, permutations
and you get statistics and an API for license creation. Check out the <a href="http://www.microsoft.com/SLPS/how-to-buy.aspx">How
to Buy</a> page for details. Regular retail pricing for the basic hosted version
(after your free year and for non MSDN subscribers) is $500/yr, which as I already
mention, includes 100 commercial activations. Additional activations cost $1000 for
1000.
</p>
        <p>
I really, really like the concept, but once again feel like Microsoft could be doing
a better job at making this more accessible to smaller ISV's and independent contractors
(in the same way I disagree with some of the pricing for VSTS and TFS). Granted these
are retail prices, but but the point of entry for someone hoping to make $9.95 on
a product, and who could really benefit from something like this, is a little high.
I'd like to see a starter edition that gives you the 1000 non-commercial activations
but includes no commercial activations, however, you could purchase them at $1/each.
This way you could develop your code using the technology and then once you start
selling, start paying for the service. I think that Microsoft is trying to avoid giving
away the code protection for free so that they do not directly compete with other
companies offering a similar product, which if that is the case, should offer a limited
functionality version with the starter edition, again to get people started. 
</p>
        <table cellspacing="0" cellpadding="2" width="440" border="0" unselectable="on">
          <tbody>
            <tr>
              <td valign="top" width="141">
Software Cost</td>
              <td valign="top" width="297">
Number of Copies to Break Even to cover $500/yr</td>
            </tr>
            <tr>
              <td valign="top" width="142">
$9.95</td>
              <td valign="top" width="297">
51</td>
            </tr>
            <tr>
              <td valign="top" width="143">
$19.95</td>
              <td valign="top" width="297">
26</td>
            </tr>
            <tr>
              <td valign="top" width="143">
$29.95</td>
              <td valign="top" width="297">
17</td>
            </tr>
            <tr>
              <td valign="top" width="143">
$39.95</td>
              <td valign="top" width="297">
13</td>
            </tr>
            <tr>
              <td valign="top" width="143">
$49.95</td>
              <td valign="top" width="297">
11</td>
            </tr>
            <tr>
              <td valign="top" width="143">
$59.95</td>
              <td valign="top" width="297">
9</td>
            </tr>
            <tr>
              <td valign="top" width="143">
$69.95</td>
              <td valign="top" width="297">
8</td>
            </tr>
            <tr>
              <td valign="top" width="143">
$79.95</td>
              <td valign="top" width="297">
7</td>
            </tr>
            <tr>
              <td valign="top" width="143">
$89.95</td>
              <td valign="top" width="297">
6</td>
            </tr>
            <tr>
              <td valign="top" width="143">
$99.95</td>
              <td valign="top" width="297">
5</td>
            </tr>
            <tr>
              <td valign="top" width="143">
 </td>
              <td valign="top" width="297">
 </td>
            </tr>
          </tbody>
        </table>
        <p>
 
</p>
        <p>
UPDATE: Someone from MS responded to a <a href="http://forums.microsoft.com/MSDN/showpost.aspx?postid=2329422&amp;siteid=1">post</a> I
made on the MSDN forums, confirming that, as a MSDN subscriber, as long as you renew
each year, you have access to the basic version. This does make this a little more
attractive, as a MSDN professional subscription is a good deal IMO.
</p>
        <p>
I fully expect to see new hosted solutions start to popup that are based on SLP Services,
that include e-commerce capabilities, and charge per copy based on purchase price. 
</p>
        <p>
In addition to the price, which may or may not be a detractor to you, there is one
other issue. Since this is a Microsoft product, you are going to have allot of talented
individuals looking to crack it. It will be interesting to see if a "universal" crack
could be developed, and how MS will respond. 
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=5097f379-94f5-47de-919d-9b8809c78ae1" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Software Licensing and Protection Online Service Basic</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,5097f379-94f5-47de-919d-9b8809c78ae1.aspx</guid>
      <link>http://blog.salvoz.com/2007/10/20/SoftwareLicensingAndProtectionOnlineServiceBasic.aspx</link>
      <pubDate>Sat, 20 Oct 2007 04:21:58 GMT</pubDate>
      <description>&lt;p&gt;
While looking to download BizTalk 2006 R2 off MSDN, I came across Software Licensing
and Protection Online Server (SLP Services), and an offer for MSDN subscribers for
free use for 1 year. This was the first time I've heard of SLP Services, so I wanted
to check it out, the home page is here: &lt;a title="http://www.microsoft.com/SLPS/Default.aspx" href="http://www.microsoft.com/SLPS/Default.aspx"&gt;http://www.microsoft.com/SLPS/Default.aspx&lt;/a&gt;. 
&lt;br&gt;
&lt;br&gt;
Key features include:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Code Protection (Advanced Obfuscation?) 
&lt;li&gt;
License Enforcement thru activation and client side enforcement. 
&lt;li&gt;
1 code base, "unlimited" configurations. Create trial software, add-on packages, timed
demos, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
SLP Services is either a Microsoft hosted, or server based product that can be used
to protect, license and distribute your software. In the hosted model, Microsoft runs
the service, and you pay them a fee. In the server model, you install the server onto
your network and host it yourself. It might also be possible to resell SLP services,
but I have not read the licensing to know that for sure. This &lt;a href="http://blogs.msdn.com/slps/archive/2007/09/11/part-2-3-shipping-continued.aspx"&gt;blog
post&lt;/a&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;indicates that reselling the SLP Service is an intened
use. In addition to the traditional use for licensing, the SLP Services web site also
talks about benefits of using the technology in the enterprise, for in house applications,
which include monitoring application use, and controller who can use a specific application,
or feature. The&amp;nbsp;&lt;a href="http://www.microsoft.com/SLPS/downloads.aspx"&gt;Downloads&lt;/a&gt;&amp;nbsp;page,
for information on downloading&amp;nbsp;a trial version of the code protection tool and
documentation for online and offline products.
&lt;/p&gt;
&lt;p&gt;
The basic version you get thru MSDN allows you to do the following
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
1 licensed product 
&lt;li&gt;
100 Commercial Activations (i.e. Customers who &lt;em&gt;purchase&lt;/em&gt; a license) 
&lt;li&gt;
1000 non-commercial activations (activations that were not purchased) 
&lt;li&gt;
1 basic permutation, which allows you to "create" 5 products from a single code base. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The more expensive licenses of SLP Services allow for more activations, permutations
and you get statistics and an API for license creation. Check out the &lt;a href="http://www.microsoft.com/SLPS/how-to-buy.aspx"&gt;How
to Buy&lt;/a&gt;&amp;nbsp;page for details. Regular retail pricing for the basic hosted version
(after your free year and for non MSDN subscribers) is $500/yr, which as I already
mention, includes 100 commercial activations. Additional activations cost $1000 for
1000.
&lt;/p&gt;
&lt;p&gt;
I really, really like the concept, but once again feel like Microsoft could be doing
a better job at making this more accessible to smaller ISV's and independent contractors
(in the same way I disagree with some of the pricing for VSTS and TFS). Granted these
are retail prices, but but the point of entry for someone hoping to make $9.95 on
a product, and who could really benefit from something like this, is a little high.
I'd like to see a starter edition that gives you the 1000 non-commercial activations
but includes no commercial activations, however, you could purchase them at&amp;nbsp;$1/each.
This way you could develop your code using the technology and then once you start
selling, start paying for the service. I think that Microsoft is trying to avoid giving
away the code protection for free so that they do not directly compete with other
companies offering a similar product, which if that is the case, should offer a limited
functionality version with the starter edition, again to get people started. 
&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="440" border="0" unselectable="on"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="141"&gt;
Software Cost&lt;/td&gt;
&lt;td valign="top" width="297"&gt;
Number of Copies to Break Even to cover $500/yr&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="142"&gt;
$9.95&lt;/td&gt;
&lt;td valign="top" width="297"&gt;
51&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="143"&gt;
$19.95&lt;/td&gt;
&lt;td valign="top" width="297"&gt;
26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="143"&gt;
$29.95&lt;/td&gt;
&lt;td valign="top" width="297"&gt;
17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="143"&gt;
$39.95&lt;/td&gt;
&lt;td valign="top" width="297"&gt;
13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="143"&gt;
$49.95&lt;/td&gt;
&lt;td valign="top" width="297"&gt;
11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="143"&gt;
$59.95&lt;/td&gt;
&lt;td valign="top" width="297"&gt;
9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="143"&gt;
$69.95&lt;/td&gt;
&lt;td valign="top" width="297"&gt;
8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="143"&gt;
$79.95&lt;/td&gt;
&lt;td valign="top" width="297"&gt;
7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="143"&gt;
$89.95&lt;/td&gt;
&lt;td valign="top" width="297"&gt;
6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="143"&gt;
$99.95&lt;/td&gt;
&lt;td valign="top" width="297"&gt;
5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="143"&gt;
&amp;nbsp;&lt;/td&gt;
&lt;td valign="top" width="297"&gt;
&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
UPDATE: Someone from MS responded to a &lt;a href="http://forums.microsoft.com/MSDN/showpost.aspx?postid=2329422&amp;amp;siteid=1"&gt;post&lt;/a&gt;&amp;nbsp;I
made on the MSDN forums, confirming that, as a MSDN subscriber, as long as you renew
each year, you have access to the basic version. This does make this a little more
attractive, as a MSDN professional subscription is a good deal IMO.
&lt;/p&gt;
&lt;p&gt;
I fully expect to see new hosted solutions start to popup that are based on SLP Services,
that include e-commerce capabilities, and charge per copy based on purchase price. 
&lt;/p&gt;
&lt;p&gt;
In addition to the price, which may or may not be a detractor to you, there is one
other issue. Since this is a Microsoft product, you are going to have allot of talented
individuals looking to crack it. It will be interesting to see if a "universal" crack
could be developed, and how MS will respond. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=5097f379-94f5-47de-919d-9b8809c78ae1" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,5097f379-94f5-47de-919d-9b8809c78ae1.aspx</comments>
      <category>Technology/Programming</category>
      <category>Technology/Review For Future Projects</category>
      <category>Technology/Tools</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=03d4c933-e2a7-4ad3-b51e-35543cea0389</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,03d4c933-e2a7-4ad3-b51e-35543cea0389.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,03d4c933-e2a7-4ad3-b51e-35543cea0389.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=03d4c933-e2a7-4ad3-b51e-35543cea0389</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm not even sure what led me to start playing around with the new Linq to SQL (formerly
called DLinq) DAL in VS2008B2, but I'm glad I did. I discovered some very
fascinating functionality that I believe will really shake up the way most developers
approach the DAL. I see some similarities  between Linq to SQL and other OR/M
plugins (tools, methodologies) out there, but since this is Microsoft's approach,
I anticipate it will catch on en mass. I don't believe Microsoft is trying to make
the other methods obsolete, but that they are delivering a product demanded by their
customers. One of the problems with the current OR/M scene, is that there are so many
options to choose from, that you never know if you've made the right choice. While
Linq to SQL, may have some deficiencies, it will give developers, and their managers
a little piece of mind when breaking from the traditional DAL mold. I can only hope
that Linq to SQL does not disappoint, even after taking into consideration it's a
Gen 1 product. Issues such as performance, extendibility, and plugability (into
one's code or way of doing things) are some things that I want to explore
(as with any tool such as Linq to SQL). 
</p>
        <p>
I used this <a href="http://www.ftponline.com/vsm/2007_07/magazine/features/rjennings/">article</a> to
help jump start my foray into Linq to SQL (let's just call it L2S from here on). Being
away from WinForms for so long, I've missed out on some of the data binding features
available, and was surprised to see how easy it was to get up and going with a grid
and details form. I remember seeing the videos when VS 2005 was coming out, but never
had a need to play around with it until now. I've also never had good luck with drag
and drop data binding, as it assumes to much, I'm hoping that there are plenty of
hooks available to help customize the data binding experience, but any fault with
data binding should not be confused with L2S as they are 2 separate features (actually
data binding is a feature, and L2S is a feature of VS 2008, and part of the .Net Framework
3.5).
</p>
        <p>
In a couple of minutes, I was able to generate a data class using the new visual OR/M
tool in VS2008, create a binding source, drag/drop elements from the binding source
onto my form, and create a functional application. Functional should not
be confused with enterprise level, nor was I expecting it to be. If I could create
something like that in 2 minutes using drag and drop, my value ($$$$) as a developer
would be on the decline. Allow me to recap some of my steps I took to create a functional
application.
</p>
        <ol>
          <li>
Create a new Winforms 3.5 
</li>
          <li>
Right click on the new project and select add new item, choose Linq To SQL Classses. 
<ol><li>
This will create a new .dbml file. It will open a design surface where you can drag/drop
tables, views and stored procedures. This creates a DataContext class.</li></ol></li>
          <li>
Create a new database connection, or open an existing connection on your Server Explorer
Window 
</li>
          <li>
Drag tables from the database from the Server Explorer to the design surface of your
DataContext class. 
</li>
          <li>
From the top menu bar, choose Data/Add new data source, or, show the data sources
window, and choose the add new data source option 
<ol><li>
Create a project data source 
</li><li>
Here is where it starts to get tricky. Select an object to make a data source for.
It will depend on what you are trying to accomplish and your database schema. The
schema I was using, relies heavily on extended tables, and it took me a couple of
tries to pick the object that made the most sense. It's possible that I will have
to go back and create a different object down the road as I get more into this.</li></ol></li>
          <li>
If you haven't already opened the Data Source window, do so now. Select some elements
from your data source, and drag/drop them onto the default Form1. I chose a grid to
list a collection of objects, and then their details below. A BindingNavigator was
added for me automatically. If you didn't get one, or need to add one later, just
drag one onto the form from the tool box, and set it's BindingSource property to the
bind source you created in step 5. 
</li>
          <li>
Open the code view of Form1 
</li>
          <li>
Add a private member variable: DataClasses1DataContext test; 
</li>
          <li>
Under the form's constructor, do the following</li>
        </ol>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">public</span> Form1()</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span> InitializeComponent();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span> test
= <span style="color: #0000ff">new</span> DataClasses1DataContext();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 5:</span>
              <span style="color: #0000ff">if</span>(test.DatabaseExists()
== <span style="color: #0000ff">false</span>) <span style="color: #008000">//Not required,
just testing feature found thru intellisense</span></pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 6:</span> test.CreateDatabase();</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 7:</span> x_t_personBindingSource.DataSource
= test.x_t_persons;</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 8:</span> }</pre>
          </div>
        </div>
        <li>
Jump back to the Form, and add a button to your binding navigator for saving. Double
click on the new button to have the event handler code generated and add the following:</li>
        <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
          <div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 1:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">void</span> saveToolStripButton_Click(<span style="color: #0000ff">object</span> sender,
EventArgs e)</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 2:</span> {</pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none">
              <span style="color: #606060"> 3:</span> test.SubmitChanges(); <span style="color: #008000">//Need
to add exception handling and pre-save validation</span></pre>
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span style="color: #606060"> 4:</span> }</pre>
          </div>
        </div>
        <li>
Build and Debug.</li>
        <p>
A connection string is automatically added to your App.Config file for you. You
can test out the CreateDatabase feature by changing the connection string to
a non-existent database. You should be able to add/edit/delete records in your
database, using this simple application we just created. The DataContext class, is
the top level class in the hierarchy used to work with your database. It controls
the connection to the database, and, as you've seen, has support for creating and
deleting the database. The create database feature reminds me of a similar feature
in the Castle's <a href="http://www.castleproject.org/activerecord/index.html">Active
Record</a> project. Just take a look via object explorer or intelli-sense, all
of the methods available to you. I've listed the ones that caught my attention below. 
</p>
        <ul>
          <li>
Create/Delete Database</li>
          <li>
Deferred Loading Enabled: Implies that L2S uses deferred loading for many to one relationships</li>
          <li>
ExecuteCommand: Direct execution of a command.</li>
          <li>
ExecuteQuerey: Returns IEnumerable or &lt;T&gt; based on a provided query.</li>
          <li>
GetChangeSet: Returns changes tracked by the DataContext</li>
          <li>
Transaction: Set a transaction object to support transactions</li>
        </ul>
        <p>
          <strong>Validation - </strong>Check out ScottGu's <a href="http://weblogs.asp.net/scottgu/archive/2007/07/11/linq-to-sql-part-4-updating-our-database.aspx">part
4</a> on L2S
</p>
        <ul>
          <li>
Schema Validation - Linq is supposed to check for obvious schema issues, such as null
values. However, the exception I got when I tried to insert a null value, came from
SQL, not Linq. Also I was adding items on a grid, and added 2 items in a row. Their
Id fields were both set to 0, and when I went to save, I got a Linq exception saying
I couldn't have duplicate keys. Setting the ID values to something different, allowed
me to get to the database at least, so I need to look into this more.</li>
          <li>
Property and Submit Validation - Create a partial class, then a partial method
that implements validation when a property is changed. If you type partial in the
code view window, you will get a list of partial methods you can implement. You
have access to 2 methods for each property, OnChanging and OnChanged. You also get
access to a OnValidate method. If there is an error, you throw an exception. This
works OK, but doesn't provide the nicest feedback available. However, for anything
less then an enterprise application, this may be OK, especially in a proof of concept,
or highly iterative application, where you can add better a better user experience
later. </li>
          <li>
Insert/Update/Delete Validation - Same scheme as property and submit validation, but
you can have validation in response to an Insert, Update or Delete.</li>
          <li>
ChangeSet: Starting with Beta2, you can get access to all of the changes in the DataContext.
One possible use, is to inherit the DataContextClass, and override the SubmitChanges
method, checking the ChangeSet and performing validation.</li>
          <li>
My Take on validation: 
</li>
          <ul>
            <li>
There is some work that needs to be done with validation. I could see an edition to
the Enterprise Library designed specifically for L2S. 
</li>
            <li>
My own idea would be to create a class to track validation errors.</li>
            <ul>
              <li>
New custom exception called validation error. 
</li>
              <li>
A collection of validation errors, including error text, and the property that is
invalid</li>
              <li>
Starting to sound allot like CSLA</li>
            </ul>
          </ul>
        </ul>
        <p>
          <strong>Other things I noticed</strong>
        </p>
        <ul>
          <ul>
            <li>
You can manually create classes in the Design Surface, as well as edit the auto generated
ones</li>
            <ul>
              <li>
Control nullable, access modifier, and inheritance modifier.</li>
            </ul>
            <li>
There is an inheritance property you can set on the design surface, allowing you
to indicate which objects inherit from another. This looks very promising for some
of the schemas I work with.  </li>
          </ul>
        </ul>
        <p>
          <strong>What's Next?</strong>
        </p>
        <p>
I'm going to read over ScottGu's 7 part series on L2S to get some good ideas on what
I can do with L2S, and see how it can fit into future and existing projects. I am
really excited to see how people start to integrate L2S with their existing projects
and frameworks. Of particular interest would be using CSLA and L2S.
</p>
        <p>
          <strong>Additional Resources</strong>
        </p>
        <ul>
          <li>
            <a href="http://www.ftponline.com/vsm/2007_07/magazine/features/rjennings/">First
article I found, which I used to setup my example above</a>
          </li>
          <li>
ScottGu has a 7 part series on L2S. Here is a link to <a href="http://weblogs.asp.net/scottgu/archive/2007/07/11/linq-to-sql-part-4-updating-our-database.aspx">part
4</a> which I found when Googling for Validation Ideas.</li>
        </ul>
        <p>
          <strong>Note:</strong> First post where I've had formatted HTML for source code. I'm
using the <a href="http://gallery.live.com/liveItemDetail.aspx?li=d4409446-af7f-42ec-aa20-78aa5bac4748&amp;bt=9&amp;pl=8">Code
Snippet Plugin</a> for Windows Live Writer.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=03d4c933-e2a7-4ad3-b51e-35543cea0389" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Linq to SQL</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,03d4c933-e2a7-4ad3-b51e-35543cea0389.aspx</guid>
      <link>http://blog.salvoz.com/2007/10/07/LinqToSQL.aspx</link>
      <pubDate>Sun, 07 Oct 2007 22:02:14 GMT</pubDate>
      <description>&lt;p&gt;
I'm not even sure what led me to start playing around with the new Linq to SQL&amp;nbsp;(formerly
called DLinq)&amp;nbsp;DAL&amp;nbsp;in VS2008B2, but I'm glad I did. I discovered some very
fascinating functionality that I believe will really shake up the way most developers
approach the DAL. I see some similarities&amp;nbsp; between Linq to SQL and other OR/M
plugins (tools, methodologies) out there, but since this is Microsoft's approach,
I anticipate it will catch on en mass. I don't believe Microsoft is trying to make
the other methods obsolete, but that they are delivering a product demanded by their
customers. One of the problems with the current OR/M scene, is that there are so many
options to choose from, that you never know if you've made the right choice. While
Linq to SQL, may have some deficiencies, it will give developers, and their managers
a little piece of mind when breaking from the traditional DAL mold. I can only hope
that Linq to SQL does not disappoint, even after taking into consideration it's a
Gen 1 product. Issues such as performance, extendibility,&amp;nbsp;and plugability (into
one's code or way of doing things)&amp;nbsp;are&amp;nbsp;some things that I want to explore
(as with any tool such as Linq to SQL). 
&lt;/p&gt;
&lt;p&gt;
I used this &lt;a href="http://www.ftponline.com/vsm/2007_07/magazine/features/rjennings/"&gt;article&lt;/a&gt;&amp;nbsp;to
help jump start my foray into Linq to SQL (let's just call it L2S from here on). Being
away from WinForms for so long, I've missed out on some of the data binding features
available, and was surprised to see how easy it was to get up and going with a grid
and details form. I remember seeing the videos when VS 2005 was coming out, but never
had a need to play around with it until now. I've also never had good luck with drag
and drop data binding, as it assumes to much, I'm hoping that there are plenty of
hooks available to help customize the data binding experience, but any fault with
data binding should not be confused with L2S as they are 2 separate features (actually
data binding is a feature, and L2S is a feature of VS 2008, and part of the .Net Framework
3.5).
&lt;/p&gt;
&lt;p&gt;
In a couple of minutes, I was able to generate a data class using the new visual OR/M
tool in VS2008, create a binding source, drag/drop elements from the binding source
onto my form, and create&amp;nbsp;a functional application. Functional should&amp;nbsp;not
be confused with enterprise level, nor was I expecting it to be. If I could create
something like that in 2 minutes using drag and drop,&amp;nbsp;my value ($$$$) as a developer
would be on the decline. Allow me to recap some of my steps I took to create a functional
application.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Create a new Winforms 3.5 
&lt;li&gt;
Right click on the new project and select add new item, choose Linq To SQL Classses. 
&lt;ol&gt;
&lt;li&gt;
This will create a new .dbml file. It will open a design surface where you can drag/drop
tables, views and stored procedures. This creates a DataContext class.&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;
Create a new database connection, or open an existing connection on your Server Explorer
Window 
&lt;li&gt;
Drag tables from the database from the Server Explorer to the design surface of your
DataContext class. 
&lt;li&gt;
From the top menu bar, choose Data/Add new data source, or, show the data sources
window, and choose the add new data source option 
&lt;ol&gt;
&lt;li&gt;
Create a project data source 
&lt;li&gt;
Here is where it starts to get tricky. Select an object to make a data source for.
It will depend on what you are trying to accomplish and your database schema. The
schema I was using, relies heavily on extended tables, and it took me a couple of
tries to pick the object that made the most sense. It's possible that I will have
to go back and create a different object down the road as I get more into this.&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;
If you haven't already opened the Data Source window, do so now. Select some elements
from your data source, and drag/drop them onto the default Form1. I chose a grid to
list a collection of objects, and then their details below. A BindingNavigator was
added for me automatically. If you didn't get one, or need to add one later, just
drag one onto the form from the tool box, and set it's BindingSource property to the
bind source you created in step 5. 
&lt;li&gt;
Open the code view of Form1 
&lt;li&gt;
Add a private member variable: DataClasses1DataContext test; 
&lt;li&gt;
Under the form's constructor, do the following&lt;/li&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Form1()&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; InitializeComponent();&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; test
= &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; DataClasses1DataContext();&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(test.DatabaseExists()
== &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;) &lt;span style="color: #008000"&gt;//Not required,
just testing feature found thru intellisense&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 6:&lt;/span&gt; test.CreateDatabase();&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 7:&lt;/span&gt; x_t_personBindingSource.DataSource
= test.x_t_persons;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 8:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;li&gt;
Jump back to the Form, and add a button to your binding navigator for saving. Double
click on the new button to have the event handler code generated and add the following:&lt;/li&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; saveToolStripButton_Click(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender,
EventArgs e)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 3:&lt;/span&gt; test.SubmitChanges(); &lt;span style="color: #008000"&gt;//Need
to add exception handling and pre-save validation&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt; 4:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;li&gt;
Build and Debug.&lt;/li&gt;&gt;
&lt;p&gt;
A connection string is automatically added&amp;nbsp;to your App.Config file for you. You
can test out the CreateDatabase feature by changing the&amp;nbsp;connection string to
a non-existent database. You should be able to add/edit/delete&amp;nbsp;records in&amp;nbsp;your
database, using this simple application we just created. The DataContext class, is
the top level class in the hierarchy used to work with your database. It controls
the connection to the database, and, as you've seen, has support for creating and
deleting the database. The create database feature reminds me of a similar feature
in the Castle's &lt;a href="http://www.castleproject.org/activerecord/index.html"&gt;Active
Record&lt;/a&gt;&amp;nbsp;project. Just take a look via object explorer or intelli-sense, all
of the methods available to you. I've listed the ones that caught my attention below.&amp;nbsp;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Create/Delete Database&lt;/li&gt;
&lt;li&gt;
Deferred Loading Enabled: Implies that L2S uses deferred loading for many to one relationships&lt;/li&gt;
&lt;li&gt;
ExecuteCommand: Direct execution of a command.&lt;/li&gt;
&lt;li&gt;
ExecuteQuerey: Returns IEnumerable or &amp;lt;T&amp;gt; based on a provided query.&lt;/li&gt;
&lt;li&gt;
GetChangeSet: Returns changes tracked by the DataContext&lt;/li&gt;
&lt;li&gt;
Transaction: Set a transaction object to support transactions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Validation - &lt;/strong&gt;Check out ScottGu's &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/07/11/linq-to-sql-part-4-updating-our-database.aspx"&gt;part
4&lt;/a&gt; on L2S
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Schema Validation - Linq is supposed to check for obvious schema issues, such as null
values. However, the exception I got when I tried to insert a null value, came from
SQL, not Linq. Also I was adding items on a grid, and added 2 items in a row. Their
Id fields were both set to 0, and when I went to save, I got a Linq exception saying
I couldn't have duplicate keys. Setting the ID values to something different, allowed
me to get to the database at least, so I need to look into this more.&lt;/li&gt;
&lt;li&gt;
Property and&amp;nbsp;Submit Validation - Create a partial class, then a partial method
that implements validation when a property is changed. If you type partial in the
code view window, you will get&amp;nbsp;a list of partial methods you can implement. You
have access to 2 methods for each property, OnChanging and OnChanged. You also get
access to a OnValidate method. If there is an error, you throw an exception. This
works OK, but doesn't provide the nicest feedback available. However, for anything
less then an enterprise application, this may be OK, especially in a proof of concept,
or highly iterative application, where you can add better a better user experience
later.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
Insert/Update/Delete Validation - Same scheme as property and submit validation, but
you can have validation in response to an Insert, Update or Delete.&lt;/li&gt;
&lt;li&gt;
ChangeSet: Starting with Beta2, you can get access to all of the changes in the DataContext.
One possible use, is to&amp;nbsp;inherit the DataContextClass, and override the SubmitChanges
method, checking the ChangeSet and performing validation.&lt;/li&gt;
&lt;li&gt;
My Take on validation: 
&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
There is some work that needs to be done with validation. I could see an edition to
the Enterprise Library designed specifically for L2S. 
&lt;/li&gt;
&lt;li&gt;
My own idea would be to create a class to track validation errors.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
New custom exception called validation error. 
&lt;/li&gt;
&lt;li&gt;
A collection of validation errors, including error text, and the property that is
invalid&lt;/li&gt;
&lt;li&gt;
Starting to sound allot like CSLA&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Other things I noticed&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;
You can manually create classes in the Design Surface, as well as edit the auto generated
ones&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
Control nullable, access modifier, and inheritance modifier.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
There is an inheritance property you can set on the design surface, allowing&amp;nbsp;you
to indicate which objects inherit from another. This looks very promising for some
of the schemas&amp;nbsp;I work with. &amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;What's Next?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I'm going to read over ScottGu's 7 part series on L2S to get some good ideas on what
I can do with L2S, and see how it can fit into future and existing projects. I am
really excited to see how people start to integrate L2S with their existing projects
and frameworks. Of particular interest would be using CSLA and L2S.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Additional Resources&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.ftponline.com/vsm/2007_07/magazine/features/rjennings/"&gt;First
article I found, which I used to setup my example above&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
ScottGu has a 7 part series on L2S. Here is a link to &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/07/11/linq-to-sql-part-4-updating-our-database.aspx"&gt;part
4&lt;/a&gt; which I found when Googling for Validation Ideas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Note:&lt;/strong&gt; First post where I've had formatted HTML for source code. I'm
using the &lt;a href="http://gallery.live.com/liveItemDetail.aspx?li=d4409446-af7f-42ec-aa20-78aa5bac4748&amp;amp;bt=9&amp;amp;pl=8"&gt;Code
Snippet Plugin&lt;/a&gt;&amp;nbsp;for Windows Live Writer.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=03d4c933-e2a7-4ad3-b51e-35543cea0389" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,03d4c933-e2a7-4ad3-b51e-35543cea0389.aspx</comments>
      <category>Technology/Programming</category>
      <category>Technology/Review For Future Projects</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=0f0ba4a7-aa7c-469b-b4a5-38a21aca1243</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,0f0ba4a7-aa7c-469b-b4a5-38a21aca1243.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,0f0ba4a7-aa7c-469b-b4a5-38a21aca1243.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=0f0ba4a7-aa7c-469b-b4a5-38a21aca1243</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.codeplex.com/polymon/Thread/List.aspx">PolyMon</a> is an
open source agentless monitoring application written in the .Net Framework, and available,
with source on <a href="http://www.codeplex.com">CodePlex</a>. It is designed as a
client/service/server architecture, consisting of a WinForms management application,
Windows Service monitoring engine, and uses SQL 2005 for it's data store. I have written
about Polymon before in my post about <a href="http://blog.salvoz.com/2007/09/12/NetworkApplicationMonitoring.aspx">Network
Monitoring</a>, so you should check that out for some more details. I will re-iterate
the available monitors here.
</p>
        <ul>
          <li>
CPU 
</li>
          <li>
Disk 
</li>
          <li>
File (Age and Counts) 
</li>
          <li>
Windows Performance Counters 
</li>
          <li>
Ping 
</li>
          <li>
PowerShell Scripting 
</li>
          <li>
SQL Monitor<em> via Stored Procedures</em></li>
          <li>
SNMP 
</li>
          <li>
TCP Port 
</li>
          <li>
URL 
</li>
          <li>
Windows Service Monitor 
</li>
          <li>
WMI Monitor</li>
        </ul>
        <p>
I set this up at home, with limited success, and at work (to monitor dev and test
instances) with better success. The only difference between the 2 installs is I'm
using integrated authentication at home, and SQL authentication at work. I've noticed
some other issues with domain authentication at home, so I feel that it's an AD issue
at this point, and not a problem with Polymon, although there may be the opportunity
for more robust error logging in Polymon if this turns out to be the case.
</p>
        <p>
I setup Ping and SQL monitors based on our production monitoring system at work, and
only had to monitor the SQL monitors slightly to support Polymon, which requires two
output parameters defined in the stored procedures. I wanted to setup the WMI and
Powershell monitors in place of some of the custom SQL monitors, but didn't have the
time. I've added some links at the bottom to BizTalk Powershell resources for future
reference.
</p>
        <p>
          <strong>Pros:</strong>
        </p>
        <ul>
          <li>
Free and Open Source</li>
          <li>
Actively Developed with a road map that makes sense</li>
          <li>
Extensible without modifying the core application</li>
          <li>
Little need to extend given the excellent coverage provided by the default monitors,
especially PowerShell</li>
          <li>
Runs on SQL 2005, so you get all of the benefits of SQL 2005, plus you could write
custom reports in Reporting Services and have those emailed.</li>
          <li>
Monitor not just uptime, but other stats as well. For example, response times are
logged, and the SQL monitor supports returning 
</li>
        </ul>
        <p>
          <strong>Cons:</strong> 
</p>
        <ul>
          <li>
Monitoring Engine is not multi-threaded - If you had 61 monitors set to run every
minute, and they all took 1 second, you would start to see lag. This is a know limitation
and can be worked around by not having that many monitors set to run that often. It
is on the development roadmap for the project, and is going to be addressed in two
ways. The first is to multi-thread the monitor engine, which will allow scale-up.
However, any good developer would know that just multi-threading is not the end all
solution, and you could run into additional limitations as a result of running multiple
threads. Therefore, the second part is to allow monitoring engines installed on separate
computers, to run off the same database, effectively adding scale-out capabilities.
Another possible benefit to this, is it would allow you to install the service on
the servers you want to monitor and not have to deal with as much security. However,
this would be the same as a monitoring application that requires an agent.</li>
          <li>
Database can grow large very quickly, which can also slow performance. You need to
use some common sense, set appropriate retention policy, and possibly re-index to
meet your individual needs. 
</li>
          <li>
No web interface. I actually like the WinForm application, but can also see were a
web app would have it's advantages. There is a plan to replace the WinForm application
with a Web Application. I'd like to see both, but can understand limited resources. 
</li>
          <li>
No Operator Groups - Operators are defined individually. However, if you have a distribution
list setup, it makes it a little easier.</li>
          <li>
Only Email Alerts</li>
          <li>
No email of reports that I can see, however, this could be considered a Pro, as you
could use SQL Reporting Services to make your own reports</li>
          <li>
Remote connections for monitors represent administrative and security considerations.
For example, you need port 1433 open to make remote sql connections, WMI does not
look very administrator friendly for remote connections, and the same would apply
to WMI thru power shell. This is a limitation of the technologies themselves, and
not Polymon, but worth pointing out.</li>
        </ul>
        <p>
          <strong>Links</strong>
        </p>
        <ul>
          <li>
            <a title="http://www.biztalkgurus.com/blogs/biztalksyn/archive/tags/Powershell/default.aspx" href="http://www.biztalkgurus.com/blogs/biztalksyn/archive/tags/Powershell/default.aspx">http://www.biztalkgurus.com/blogs/biztalksyn/archive/tags/Powershell/default.aspx</a>
          </li>
          <li>
          </li>
        </ul>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=0f0ba4a7-aa7c-469b-b4a5-38a21aca1243" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>PolyMon</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,0f0ba4a7-aa7c-469b-b4a5-38a21aca1243.aspx</guid>
      <link>http://blog.salvoz.com/2007/10/06/PolyMon.aspx</link>
      <pubDate>Sat, 06 Oct 2007 22:12:22 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.codeplex.com/polymon/Thread/List.aspx"&gt;PolyMon&lt;/a&gt;&amp;nbsp;is an
open source agentless monitoring application written in the .Net Framework, and available,
with source on &lt;a href="http://www.codeplex.com"&gt;CodePlex&lt;/a&gt;. It is designed as a
client/service/server architecture, consisting of a WinForms management application,
Windows Service monitoring engine, and uses SQL 2005 for it's data store. I have written
about Polymon before in my post about &lt;a href="http://blog.salvoz.com/2007/09/12/NetworkApplicationMonitoring.aspx"&gt;Network
Monitoring&lt;/a&gt;, so you should check that out for some more details. I will re-iterate
the available monitors here.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
CPU 
&lt;li&gt;
Disk 
&lt;li&gt;
File (Age and Counts) 
&lt;li&gt;
Windows Performance Counters 
&lt;li&gt;
Ping 
&lt;li&gt;
PowerShell Scripting 
&lt;li&gt;
SQL Monitor&lt;em&gt; via Stored Procedures&lt;/em&gt; 
&lt;li&gt;
SNMP 
&lt;li&gt;
TCP Port 
&lt;li&gt;
URL 
&lt;li&gt;
Windows Service Monitor 
&lt;li&gt;
WMI Monitor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I set this up at home, with limited success, and at work (to monitor dev and test
instances) with better success. The only difference between the 2 installs is I'm
using integrated authentication at home, and SQL authentication at work. I've noticed
some other issues with domain authentication at home, so I feel that it's an AD issue
at this point, and not a problem with Polymon, although there may be the opportunity
for more robust error logging in Polymon if this turns out to be the case.
&lt;/p&gt;
&lt;p&gt;
I setup Ping and SQL monitors based on our production monitoring system at work, and
only had to monitor the SQL monitors slightly to support Polymon, which requires two
output parameters defined in the stored procedures. I wanted to setup the WMI and
Powershell monitors in place of some of the custom SQL monitors, but didn't have the
time. I've added some links at the bottom to BizTalk Powershell resources for future
reference.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Pros:&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Free and Open Source&lt;/li&gt;
&lt;li&gt;
Actively Developed with a road map that makes sense&lt;/li&gt;
&lt;li&gt;
Extensible without modifying the core application&lt;/li&gt;
&lt;li&gt;
Little need to extend given the excellent coverage provided by the default monitors,
especially PowerShell&lt;/li&gt;
&lt;li&gt;
Runs on SQL 2005, so you get all of the benefits of SQL 2005, plus you could write
custom reports in Reporting Services and have those emailed.&lt;/li&gt;
&lt;li&gt;
Monitor not just uptime, but other stats as well. For example, response times are
logged, and the SQL monitor supports returning 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Cons:&lt;/strong&gt;&amp;nbsp;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Monitoring Engine is not multi-threaded - If you had 61 monitors set to run every
minute, and they all took 1 second, you would start to see lag. This is a know limitation
and can be worked around by not having that many monitors set to run that often. It
is on the development roadmap for the project, and is going to be addressed in two
ways. The first is to multi-thread the monitor engine, which will allow scale-up.
However, any good developer would know that just multi-threading is not the end all
solution, and you could run into additional limitations as a result of running multiple
threads. Therefore, the second part is to allow monitoring engines installed on separate
computers, to run off the same database, effectively adding scale-out capabilities.
Another possible benefit to this, is it would allow you to install the service on
the servers you want to monitor and not have to deal with as much security. However,
this would be the same as a monitoring application that requires an agent.&lt;/li&gt;
&lt;li&gt;
Database can grow large very quickly, which can also slow performance. You need to
use some common sense, set appropriate retention policy, and possibly re-index to
meet your individual needs. 
&lt;/li&gt;
&lt;li&gt;
No web interface. I actually like the WinForm application, but can also see were a
web app would have it's advantages. There is a plan to replace the WinForm application
with a Web Application. I'd like to see both, but can understand limited resources. 
&lt;/li&gt;
&lt;li&gt;
No Operator Groups - Operators are defined individually. However, if you have a distribution
list setup, it makes it a little easier.&lt;/li&gt;
&lt;li&gt;
Only Email Alerts&lt;/li&gt;
&lt;li&gt;
No email of reports that I can see, however, this could be considered a Pro, as you
could use SQL Reporting Services to make your own reports&lt;/li&gt;
&lt;li&gt;
Remote connections for monitors represent administrative and security considerations.
For example, you need port 1433 open to make remote sql connections, WMI does not
look very administrator friendly for remote connections, and the same would apply
to WMI thru power shell. This is a limitation of the technologies themselves, and
not Polymon, but worth pointing out.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Links&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a title="http://www.biztalkgurus.com/blogs/biztalksyn/archive/tags/Powershell/default.aspx" href="http://www.biztalkgurus.com/blogs/biztalksyn/archive/tags/Powershell/default.aspx"&gt;http://www.biztalkgurus.com/blogs/biztalksyn/archive/tags/Powershell/default.aspx&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=0f0ba4a7-aa7c-469b-b4a5-38a21aca1243" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,0f0ba4a7-aa7c-469b-b4a5-38a21aca1243.aspx</comments>
      <category>Technology/Review For Future Projects</category>
      <category>Technology/Tools</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=76f489fc-0488-42cd-9ce7-2a8f5b914637</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,76f489fc-0488-42cd-9ce7-2a8f5b914637.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,76f489fc-0488-42cd-9ce7-2a8f5b914637.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=76f489fc-0488-42cd-9ce7-2a8f5b914637</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Just a quick post about a project called <a href="http://www.rifidi.org/">Rifidi</a>,
an open source project developed by Pramari and the University of Arkansas. Rifidi
allows you to simulate how RFID would affect your processes using a graphical interface.
I've only had the chance to do a quick once over of the web site, but it defiantly
looks interesting. While I don't know if it will have an immediate impact on my <a href="http://www.tersosolutions.com">current
project</a>, it may in the future. 
</p>
        <p>
Almost more interesting, is in the programming behind the simulation, and the fact
that it is open source. Pramari is characterized as a "world leader in open source
RFID software" in the press release, so I will defiantly be checking out their web
site to see what they offer. 
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=76f489fc-0488-42cd-9ce7-2a8f5b914637" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Open Source RFID simulation</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,76f489fc-0488-42cd-9ce7-2a8f5b914637.aspx</guid>
      <link>http://blog.salvoz.com/2007/10/04/OpenSourceRFIDSimulation.aspx</link>
      <pubDate>Thu, 04 Oct 2007 19:12:38 GMT</pubDate>
      <description>&lt;p&gt;
Just a quick post about a project called &lt;a href="http://www.rifidi.org/"&gt;Rifidi&lt;/a&gt;,
an open source project developed by Pramari and the University of Arkansas. Rifidi
allows you to simulate how RFID would affect your processes using a graphical interface.
I've only had the chance to do a quick once over of the web site, but it defiantly
looks interesting. While I don't know if it will have an immediate impact on my &lt;a href="http://www.tersosolutions.com"&gt;current
project&lt;/a&gt;, it may in the future. 
&lt;/p&gt;
&lt;p&gt;
Almost more interesting, is in the programming behind the simulation, and the fact
that it is open source. Pramari is characterized as a "world leader in open source
RFID software" in the press release, so I will defiantly be checking out their web
site to see what they offer. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=76f489fc-0488-42cd-9ce7-2a8f5b914637" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,76f489fc-0488-42cd-9ce7-2a8f5b914637.aspx</comments>
      <category>Technology/Review For Future Projects</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=dff032fa-fe2e-4397-aae6-8afb827ded9c</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,dff032fa-fe2e-4397-aae6-8afb827ded9c.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,dff032fa-fe2e-4397-aae6-8afb827ded9c.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=dff032fa-fe2e-4397-aae6-8afb827ded9c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In an email from "Microsoft For Partners" today, I was alerted to a new site called <a href="http://phizzpop.visitmix.com/">PhizzPop</a>.
From the email "We created Phizzpop.com to support Web and Design Agencies with training
and resources, facilitate collaboration, and showcase great work." A quick look at
the site shows that it has samples of work that other people have done, as well as
articles on designing web sites for Web 2.0. 
</p>
        <p>
I would like to go back and review the site more thoroughly, but for now, I'm just
adding to a list of potential Silverlight and Web 2.0 design resources. It will be
interesting to see how much the site grows in the next 4-6 months, especially with
respect to independent contractors and designers posting portfolios. As technologies
like Silverlight and flash (UI portion of Web 2.0) start to infiltrate the enterprise
web application space, the need for hiring or contracting a designer will become
a reality.  
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=dff032fa-fe2e-4397-aae6-8afb827ded9c" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>PhizzPop</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,dff032fa-fe2e-4397-aae6-8afb827ded9c.aspx</guid>
      <link>http://blog.salvoz.com/2007/10/02/PhizzPop.aspx</link>
      <pubDate>Tue, 02 Oct 2007 16:43:32 GMT</pubDate>
      <description>&lt;p&gt;
In an email from "Microsoft For Partners" today, I was alerted to a new site called &lt;a href="http://phizzpop.visitmix.com/"&gt;PhizzPop&lt;/a&gt;.
From the email "We created Phizzpop.com to support Web and Design Agencies with training
and resources, facilitate collaboration, and showcase great work." A quick look at
the site shows that it has samples of work that other people have done, as well as
articles on designing web sites for Web 2.0. 
&lt;/p&gt;
&lt;p&gt;
I would like to go back and review the site more thoroughly, but for now, I'm just
adding to a list of potential Silverlight and Web 2.0 design resources. It will be
interesting to see how much the site grows in the next 4-6 months, especially&amp;nbsp;with
respect to independent contractors and designers posting portfolios. As technologies
like Silverlight and flash (UI portion of Web 2.0)&amp;nbsp;start to infiltrate the enterprise
web application space, the need for hiring or contracting a designer will&amp;nbsp;become
a reality. &amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=dff032fa-fe2e-4397-aae6-8afb827ded9c" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,dff032fa-fe2e-4397-aae6-8afb827ded9c.aspx</comments>
      <category>Technology/Review For Future Projects</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=99ec25b1-aaab-403a-bf32-c9b93526cdd5</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,99ec25b1-aaab-403a-bf32-c9b93526cdd5.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,99ec25b1-aaab-403a-bf32-c9b93526cdd5.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=99ec25b1-aaab-403a-bf32-c9b93526cdd5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
When markup won't do, why not markdown? [<a href="http://www.hanselman.com/blog/">Scott</a>] recently
wrote about <a href="http://www.jottit.com/">JottIt</a> and <a href="http://www.aspnetresources.com/blog/markdown_announced.aspx">MarkDown</a>.
JottIt is a simple way to create a web page. The content is rendered using Markdown,
and feels allot like a Wiki. Upon creation of your first site (just go to JottIt and
type something in the big empty text box), you are redirected to a URL like <a title="http://jottit.com/d4b8y/" href="http://jottit.com/d4b8y/">http://jottit.com/d4b8y/</a>.
You do have the ability to create a sub domain with a more meaningful URL.
</p>
        <p>
Markdown is a way to support rich text, without using a rich text editor, which is
how allot of Wiki's work, I just never knew there was a formal definition. The markdown
that I have linked to, is a .Net port, and compiled into a .net assembly. Not requiring
a cumbersome rich text control, and removing HTML formatting from user controlled
text are two big reasons to consider MarkDown. The syntax as extremely easy, and rates
high on Scott's WAF.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=99ec25b1-aaab-403a-bf32-c9b93526cdd5" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Markdown</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,99ec25b1-aaab-403a-bf32-c9b93526cdd5.aspx</guid>
      <link>http://blog.salvoz.com/2007/09/19/Markdown.aspx</link>
      <pubDate>Wed, 19 Sep 2007 18:15:48 GMT</pubDate>
      <description>&lt;p&gt;
When markup won't do, why not markdown? [&lt;a href="http://www.hanselman.com/blog/"&gt;Scott&lt;/a&gt;]&amp;nbsp;recently
wrote&amp;nbsp;about &lt;a href="http://www.jottit.com/"&gt;JottIt&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.aspnetresources.com/blog/markdown_announced.aspx"&gt;MarkDown&lt;/a&gt;.
JottIt is a simple way to create a web page. The content is rendered using Markdown,
and feels allot like a Wiki. Upon creation of your first site (just go to JottIt and
type something in the big empty text box), you are redirected to a URL like &lt;a title="http://jottit.com/d4b8y/" href="http://jottit.com/d4b8y/"&gt;http://jottit.com/d4b8y/&lt;/a&gt;.
You do have the ability to create a sub domain with a more meaningful URL.
&lt;/p&gt;
&lt;p&gt;
Markdown is a way to support rich text, without using a rich text editor, which is
how allot of Wiki's work, I just never knew there was a formal definition. The markdown
that I have linked to, is a .Net port, and compiled into a .net assembly. Not requiring
a cumbersome rich text control, and removing HTML formatting from user controlled
text are two big reasons to consider MarkDown. The syntax as extremely easy, and rates
high on Scott's WAF.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=99ec25b1-aaab-403a-bf32-c9b93526cdd5" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,99ec25b1-aaab-403a-bf32-c9b93526cdd5.aspx</comments>
      <category>Technology/Programming</category>
      <category>Technology/Review For Future Projects</category>
    </item>
  </channel>
</rss>