<?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>.NET Ramblings - Brian Noyes' Blog</title>
    <link>http://www.softinsight.com/bnoyes/</link>
    <description>Occasional mutterings on .NET architecture and development</description>
    <language>en-us</language>
    <copyright>Brian Noyes</copyright>
    <lastBuildDate>Fri, 23 Jul 2010 00:59:18 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>brian@softinsight.com</managingEditor>
    <webMaster>brian@softinsight.com</webMaster>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=44767d05-4984-4c81-a54c-0718d1ed0001</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,44767d05-4984-4c81-a54c-0718d1ed0001.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,44767d05-4984-4c81-a54c-0718d1ed0001.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=44767d05-4984-4c81-a54c-0718d1ed0001</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I was recently interviewed on the Silverlight TV show hosted by John Papa and the
episode went live today.
</p>
        <p>
          <a title="http://channel9.msdn.com/shows/SilverlightTV/Understanding-the-Value-of-Prism-Silverlight-TV-37/" href="http://channel9.msdn.com/shows/SilverlightTV/Understanding-the-Value-of-Prism-Silverlight-TV-37/">http://channel9.msdn.com/shows/SilverlightTV/Understanding-the-Value-of-Prism-Silverlight-TV-37/</a>
        </p>
        <p>
In the interview, we discuss some of the motivations for adopting Prism:
</p>
        <ul>
          <li>
Managing large projects</li>
          <li>
Distributed teams</li>
          <li>
Packaging functionality for different deployments per customer</li>
          <li>
Separation of concerns for maintainability</li>
          <li>
Testability</li>
          <li>
Extensibility</li>
        </ul>
        <p>
I quickly walk through the features and how they manifest themselves in your solutions.
I also discuss a little of what the team is working on in Prism 4 – specifically the
MVVM pattern and using MEF for modularity.
</p>
        <p>
Check it out and let me know what you think!
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=44767d05-4984-4c81-a54c-0718d1ed0001" />
      </body>
      <title>Silverlight TV: Understanding the Value of Prism</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,44767d05-4984-4c81-a54c-0718d1ed0001.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2010/07/23/SilverlightTVUnderstandingTheValueOfPrism.aspx</link>
      <pubDate>Fri, 23 Jul 2010 00:59:18 GMT</pubDate>
      <description>&lt;p&gt;
I was recently interviewed on the Silverlight TV show hosted by John Papa and the
episode went live today.
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://channel9.msdn.com/shows/SilverlightTV/Understanding-the-Value-of-Prism-Silverlight-TV-37/" href="http://channel9.msdn.com/shows/SilverlightTV/Understanding-the-Value-of-Prism-Silverlight-TV-37/"&gt;http://channel9.msdn.com/shows/SilverlightTV/Understanding-the-Value-of-Prism-Silverlight-TV-37/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
In the interview, we discuss some of the motivations for adopting Prism:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Managing large projects&lt;/li&gt;
&lt;li&gt;
Distributed teams&lt;/li&gt;
&lt;li&gt;
Packaging functionality for different deployments per customer&lt;/li&gt;
&lt;li&gt;
Separation of concerns for maintainability&lt;/li&gt;
&lt;li&gt;
Testability&lt;/li&gt;
&lt;li&gt;
Extensibility&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I quickly walk through the features and how they manifest themselves in your solutions.
I also discuss a little of what the team is working on in Prism 4 – specifically the
MVVM pattern and using MEF for modularity.
&lt;/p&gt;
&lt;p&gt;
Check it out and let me know what you think!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=44767d05-4984-4c81-a54c-0718d1ed0001" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,44767d05-4984-4c81-a54c-0718d1ed0001.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=550da06c-4c9c-45e0-8dc1-63e4c9b20f33</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,550da06c-4c9c-45e0-8dc1-63e4c9b20f33.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,550da06c-4c9c-45e0-8dc1-63e4c9b20f33.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=550da06c-4c9c-45e0-8dc1-63e4c9b20f33</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Last night I spoke to a great crowd at a joint meeting of the San Diego Connected
Systems and Architecture SIGs. I talked about WCF RIA Services and focused on the
internals of what is going on with deferred execution queries, metadata for entities,
and the services under the covers, as well as exposing OData, SOAP, and JSON endpoints
and consuming them.
</p>
        <p>
Here are the <a href="http://www.softinsight.com/downloads/INETA/WCFRIAServicesInsideOut.pdf" target="_blank">slides</a> and <a href="http://www.softinsight.com/downloads/INETA/WCFRIAServicesInsideOut.zip" target="_blank">demos</a>.
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=550da06c-4c9c-45e0-8dc1-63e4c9b20f33" />
      </body>
      <title>San Diego Connected Systems/Architect SIG &amp;ndash; Slides and Demos</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,550da06c-4c9c-45e0-8dc1-63e4c9b20f33.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2010/07/15/SanDiegoConnectedSystemsArchitectSIGNdashSlidesAndDemos.aspx</link>
      <pubDate>Thu, 15 Jul 2010 02:18:29 GMT</pubDate>
      <description>&lt;p&gt;
Last night I spoke to a great crowd at a joint meeting of the San Diego Connected
Systems and Architecture SIGs. I talked about WCF RIA Services and focused on the
internals of what is going on with deferred execution queries, metadata for entities,
and the services under the covers, as well as exposing OData, SOAP, and JSON endpoints
and consuming them.
&lt;/p&gt;
&lt;p&gt;
Here are the &lt;a href="http://www.softinsight.com/downloads/INETA/WCFRIAServicesInsideOut.pdf" target="_blank"&gt;slides&lt;/a&gt; and &lt;a href="http://www.softinsight.com/downloads/INETA/WCFRIAServicesInsideOut.zip" target="_blank"&gt;demos&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=550da06c-4c9c-45e0-8dc1-63e4c9b20f33" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,550da06c-4c9c-45e0-8dc1-63e4c9b20f33.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=f942ed82-4a9a-4ca9-80d3-e79f63837822</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,f942ed82-4a9a-4ca9-80d3-e79f63837822.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,f942ed82-4a9a-4ca9-80d3-e79f63837822.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=f942ed82-4a9a-4ca9-80d3-e79f63837822</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I gave a talk on Monday evening at the Los Angeles .NET Users Group on WCF RIA Services,
MVVM, and MEF. I was insanely ambitious thinking I could cover all those in one talk,
but it was a fun talk nonetheless. It was a very interactive crowd with a lot of great
questions about Silverlight in general, RIA Services, Entity Framework and other broader
technology topics.
</p>
        <p>
Here are the <a href="http://www.softinsight.com/downloads/INETA/BuildLooselyCoupledSilverlightBusinessApplications.pdf">slides</a> and <a href="http://www.softinsight.com/downloads/INETA/RIAServicesMVVMMEFDEmos.zip" target="_blank">demos</a>.
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=f942ed82-4a9a-4ca9-80d3-e79f63837822" />
      </body>
      <title>Los Angeles .NET Users Group Slides and Demos</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,f942ed82-4a9a-4ca9-80d3-e79f63837822.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2010/07/15/LosAngelesNETUsersGroupSlidesAndDemos.aspx</link>
      <pubDate>Thu, 15 Jul 2010 02:10:03 GMT</pubDate>
      <description>&lt;p&gt;
I gave a talk on Monday evening at the Los Angeles .NET Users Group on WCF RIA Services,
MVVM, and MEF. I was insanely ambitious thinking I could cover all those in one talk,
but it was a fun talk nonetheless. It was a very interactive crowd with a lot of great
questions about Silverlight in general, RIA Services, Entity Framework and other broader
technology topics.
&lt;/p&gt;
&lt;p&gt;
Here are the &lt;a href="http://www.softinsight.com/downloads/INETA/BuildLooselyCoupledSilverlightBusinessApplications.pdf"&gt;slides&lt;/a&gt; and &lt;a href="http://www.softinsight.com/downloads/INETA/RIAServicesMVVMMEFDEmos.zip" target="_blank"&gt;demos&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=f942ed82-4a9a-4ca9-80d3-e79f63837822" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,f942ed82-4a9a-4ca9-80d3-e79f63837822.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=c3fd37cd-e96a-42a2-aac2-fea9939f994f</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,c3fd37cd-e96a-42a2-aac2-fea9939f994f.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,c3fd37cd-e96a-42a2-aac2-fea9939f994f.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=c3fd37cd-e96a-42a2-aac2-fea9939f994f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In conjunction with the <a href="http://www.silverlightshow.net/items/WCF-RIA-Services-Part-1-Getting-Started.aspx" target="_blank">10
part series on WCF RIA Services</a> in am part way through writing for the Silverlight
Show, I also did a short interview with them about RIA Services, Silverlight in general,
and my background. You can find that interview here: <a title="http://www.silverlightshow.net/items/SilverlightShow-Interview-Featured-Article-Author-Brian-Noyes.aspx" href="http://www.silverlightshow.net/items/SilverlightShow-Interview-Featured-Article-Author-Brian-Noyes.aspx">http://www.silverlightshow.net/items/SilverlightShow-Interview-Featured-Article-Author-Brian-Noyes.aspx</a></p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=c3fd37cd-e96a-42a2-aac2-fea9939f994f" />
      </body>
      <title>Interview on the Silverlight Show</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,c3fd37cd-e96a-42a2-aac2-fea9939f994f.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2010/07/11/InterviewOnTheSilverlightShow.aspx</link>
      <pubDate>Sun, 11 Jul 2010 14:32:28 GMT</pubDate>
      <description>&lt;p&gt;
In conjunction with the &lt;a href="http://www.silverlightshow.net/items/WCF-RIA-Services-Part-1-Getting-Started.aspx" target="_blank"&gt;10
part series on WCF RIA Services&lt;/a&gt; in am part way through writing for the Silverlight
Show, I also did a short interview with them about RIA Services, Silverlight in general,
and my background. You can find that interview here: &lt;a title="http://www.silverlightshow.net/items/SilverlightShow-Interview-Featured-Article-Author-Brian-Noyes.aspx" href="http://www.silverlightshow.net/items/SilverlightShow-Interview-Featured-Article-Author-Brian-Noyes.aspx"&gt;http://www.silverlightshow.net/items/SilverlightShow-Interview-Featured-Article-Author-Brian-Noyes.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=c3fd37cd-e96a-42a2-aac2-fea9939f994f" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,c3fd37cd-e96a-42a2-aac2-fea9939f994f.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=ae98eb98-7def-43af-bc53-8f41a0d28a30</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,ae98eb98-7def-43af-bc53-8f41a0d28a30.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,ae98eb98-7def-43af-bc53-8f41a0d28a30.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=ae98eb98-7def-43af-bc53-8f41a0d28a30</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Not too long ago I made the plunge and bought a MacBook Pro, the first Mac I have
ever owned. I did so for two reasons. First and foremost, I am starting to develop
applications for the iPhone and iPad (two devices I can’t live without), and developing
on a Mac is the only choice thanks to the closed platform and development tools approach
of Apple. Secondly, I thought it would be interesting to see what computer life is
like on the other side of the fence. I’ve heard so many stories of how great the Mac
is, I thought I would try to experience it first hand.
</p>
        <p>
So for the last month I have tried using my MacBook Pro as my primary machine – not
booting to Windows, but running Mac OS X and using Parallels to get to the Windows
apps I can’t live without. 
</p>
        <p>
After a month, I’m switching back to my Dell Latitude E6500 as my primary machine
and my MacBook Pro will just be used for reason #1 – developing for iPhone/iPad.
</p>
        <p>
When I tweeted (@briannoyes) that I was switching back, I got a lot of “why??” questions,
so I thought I would share my experience for others who are pondering a similar change.
</p>
        <p>
Some important caveats up front:
</p>
        <ul>
          <li>
I am first and foremost a Windows developer and software architect. That is my profession
and my passion and what I have been focusing on for almost two decades.</li>
          <li>
I have dozens of Windows applications that I used at least once a month and at least
20 or so that I use every week. While I realize there are many equivalent Mac programs
for many of those, I don’t want to have to buy all of those, and for many there is
not (i.e. Windows development tools).</li>
          <li>
I don’t just work on one machine and have no intention of switching all of my computing
to Apple. While I love my iPad and iPhone, I have a Windows 7 desktop machine in my
home office that I use when not traveling, and when traveling (75%+ of my time) I
often carry a second laptop for various reasons and that one would certainly be a
Windows machine.</li>
          <li>
From a performance perspective, my point of comparison and what I have switched back
to is a 6 month old Dell Latitude E6500 that is maxed out. My MacBook Pro has slightly
better hardware specs (i7 processor), but same 256 GB SSD drive and 8 GB memory.</li>
          <li>
I was afraid of using Boot Camp to boot to Windows directly because of witnessing
and hearing about numerous projection issues when running Windows through Boot Camp
on Mac Books. A significant majority of my professional work involves projecting (teaching,
consulting, presenting at conferences and user groups). I can’t travel with a machine
I can’t trust will project anywhere through any projector with no issues.</li>
          <li>
I’ve been using Office 2010 for a while, so that is my standard of comparison for
routine business tasks (email, writing, presentations, spreadsheets).</li>
        </ul>
        <p>
So what did I like:
</p>
        <ul>
          <li>
General user experience is very nice at the OS level. 
</li>
          <li>
iTunes runs much smoother on the Mac than on Windows</li>
          <li>
Parallels integration with the Mac OS is very smooth and seamless</li>
          <li>
Er… ummm… OK, nothing else jumping out that I found superior to anything I do on Windows
7.</li>
        </ul>
        <p>
What I did not like:
</p>
        <ul>
          <li>
Built in apps (email, calendar, etc.) had no where near the functionality or user
experience of Office 2010. Office 2008 for Mac is not as good either, and I still
have to co-exist with several Windows PCs. Worrying about file conversions and potential
data loss is just not worth it.</li>
          <li>
A lot of my Windows apps could not run from the shared Mac OS folders, so had to move
things onto the virtual C: drive a lot to get things to run, aggrevating file synchronization
issues and leading to duplicate files and drive usage.</li>
          <li>
Keyboard lacks many common keys that PC keyboards have (Del, Home, End, PgUp, PgDn,
etc). You have to use the Fn key to get other keys to do those things, and you have
to use the Fn key to get the function keys to act as function keys instead of volume,
etc shortcut keys. These keys are all way too important to me as a coder to have to
use the extra key to get to them, especially since I also work a lot on PCs and have
to switch my brain back and forth. Likewise the differences of what the Control, Alt/option,
and Command keys do in Mac vs Windows (in parallels) drive me bonkers trying to keep
straight. Many a wasted minute thinking I copied things to the clipboard and I didn’t
or getting things to select correctly.</li>
          <li>
Perf: even though the Mac had a better processor and equal memory / disk, everything
felt a lot more sluggish on it, and I’m not just talking about the Windows apps running
in Parallels. Copying files to external USB drives (which I had to do a lot for syncing
files between machines) was significantly slower than on PC.</li>
          <li>
File synchronization: I use Dropbox to sync files between my machines, but the difference
in file systems led to some oddities that that were annoying at best and could lead
to data loss if not closely managed. Syncing with external drives also took closer
attention than I wanted to give it. I don’t want to have to think at all about moving
files around, and from PC to PC I don’t.</li>
        </ul>
        <p>
So bottom line, I decided I can’t live on a Mac as my primary machine for the reasons
outlined above. I am convinced that if you only have to use one machine and are willing
to invest in getting all the apps you need as Mac apps, and can live 80% or more of
your computer life using Mac apps, then it is a nice platform. That is just not me,
so I am happily back in my comfort zone on all Windows 7 machines + a MacBook Pro
as an iPad/iPhone development box.
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=ae98eb98-7def-43af-bc53-8f41a0d28a30" />
      </body>
      <title>Windows to Mac transition &amp;ndash; Not for me</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,ae98eb98-7def-43af-bc53-8f41a0d28a30.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2010/07/08/WindowsToMacTransitionNdashNotForMe.aspx</link>
      <pubDate>Thu, 08 Jul 2010 16:55:03 GMT</pubDate>
      <description>&lt;p&gt;
Not too long ago I made the plunge and bought a MacBook Pro, the first Mac I have
ever owned. I did so for two reasons. First and foremost, I am starting to develop
applications for the iPhone and iPad (two devices I can’t live without), and developing
on a Mac is the only choice thanks to the closed platform and development tools approach
of Apple. Secondly, I thought it would be interesting to see what computer life is
like on the other side of the fence. I’ve heard so many stories of how great the Mac
is, I thought I would try to experience it first hand.
&lt;/p&gt;
&lt;p&gt;
So for the last month I have tried using my MacBook Pro as my primary machine – not
booting to Windows, but running Mac OS X and using Parallels to get to the Windows
apps I can’t live without. 
&lt;/p&gt;
&lt;p&gt;
After a month, I’m switching back to my Dell Latitude E6500 as my primary machine
and my MacBook Pro will just be used for reason #1 – developing for iPhone/iPad.
&lt;/p&gt;
&lt;p&gt;
When I tweeted (@briannoyes) that I was switching back, I got a lot of “why??” questions,
so I thought I would share my experience for others who are pondering a similar change.
&lt;/p&gt;
&lt;p&gt;
Some important caveats up front:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
I am first and foremost a Windows developer and software architect. That is my profession
and my passion and what I have been focusing on for almost two decades.&lt;/li&gt;
&lt;li&gt;
I have dozens of Windows applications that I used at least once a month and at least
20 or so that I use every week. While I realize there are many equivalent Mac programs
for many of those, I don’t want to have to buy all of those, and for many there is
not (i.e. Windows development tools).&lt;/li&gt;
&lt;li&gt;
I don’t just work on one machine and have no intention of switching all of my computing
to Apple. While I love my iPad and iPhone, I have a Windows 7 desktop machine in my
home office that I use when not traveling, and when traveling (75%+ of my time) I
often carry a second laptop for various reasons and that one would certainly be a
Windows machine.&lt;/li&gt;
&lt;li&gt;
From a performance perspective, my point of comparison and what I have switched back
to is a 6 month old Dell Latitude E6500 that is maxed out. My MacBook Pro has slightly
better hardware specs (i7 processor), but same 256 GB SSD drive and 8 GB memory.&lt;/li&gt;
&lt;li&gt;
I was afraid of using Boot Camp to boot to Windows directly because of witnessing
and hearing about numerous projection issues when running Windows through Boot Camp
on Mac Books. A significant majority of my professional work involves projecting (teaching,
consulting, presenting at conferences and user groups). I can’t travel with a machine
I can’t trust will project anywhere through any projector with no issues.&lt;/li&gt;
&lt;li&gt;
I’ve been using Office 2010 for a while, so that is my standard of comparison for
routine business tasks (email, writing, presentations, spreadsheets).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
So what did I like:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
General user experience is very nice at the OS level. 
&lt;/li&gt;
&lt;li&gt;
iTunes runs much smoother on the Mac than on Windows&lt;/li&gt;
&lt;li&gt;
Parallels integration with the Mac OS is very smooth and seamless&lt;/li&gt;
&lt;li&gt;
Er… ummm… OK, nothing else jumping out that I found superior to anything I do on Windows
7.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
What I did not like:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Built in apps (email, calendar, etc.) had no where near the functionality or user
experience of Office 2010. Office 2008 for Mac is not as good either, and I still
have to co-exist with several Windows PCs. Worrying about file conversions and potential
data loss is just not worth it.&lt;/li&gt;
&lt;li&gt;
A lot of my Windows apps could not run from the shared Mac OS folders, so had to move
things onto the virtual C: drive a lot to get things to run, aggrevating file synchronization
issues and leading to duplicate files and drive usage.&lt;/li&gt;
&lt;li&gt;
Keyboard lacks many common keys that PC keyboards have (Del, Home, End, PgUp, PgDn,
etc). You have to use the Fn key to get other keys to do those things, and you have
to use the Fn key to get the function keys to act as function keys instead of volume,
etc shortcut keys. These keys are all way too important to me as a coder to have to
use the extra key to get to them, especially since I also work a lot on PCs and have
to switch my brain back and forth. Likewise the differences of what the Control, Alt/option,
and Command keys do in Mac vs Windows (in parallels) drive me bonkers trying to keep
straight. Many a wasted minute thinking I copied things to the clipboard and I didn’t
or getting things to select correctly.&lt;/li&gt;
&lt;li&gt;
Perf: even though the Mac had a better processor and equal memory / disk, everything
felt a lot more sluggish on it, and I’m not just talking about the Windows apps running
in Parallels. Copying files to external USB drives (which I had to do a lot for syncing
files between machines) was significantly slower than on PC.&lt;/li&gt;
&lt;li&gt;
File synchronization: I use Dropbox to sync files between my machines, but the difference
in file systems led to some oddities that that were annoying at best and could lead
to data loss if not closely managed. Syncing with external drives also took closer
attention than I wanted to give it. I don’t want to have to think at all about moving
files around, and from PC to PC I don’t.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
So bottom line, I decided I can’t live on a Mac as my primary machine for the reasons
outlined above. I am convinced that if you only have to use one machine and are willing
to invest in getting all the apps you need as Mac apps, and can live 80% or more of
your computer life using Mac apps, then it is a nice platform. That is just not me,
so I am happily back in my comfort zone on all Windows 7 machines + a MacBook Pro
as an iPad/iPhone development box.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=ae98eb98-7def-43af-bc53-8f41a0d28a30" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,ae98eb98-7def-43af-bc53-8f41a0d28a30.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=dddf4af6-7dbe-4c14-9ae4-c0f14520bc6f</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,dddf4af6-7dbe-4c14-9ae4-c0f14520bc6f.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,dddf4af6-7dbe-4c14-9ae4-c0f14520bc6f.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=dddf4af6-7dbe-4c14-9ae4-c0f14520bc6f</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The third part of my series on WCF RIA Services went up a few days ago, you can check
it out here:
</p>
        <p>
          <a title="http://www.silverlightshow.net/items/WCF-RIA-Services-Part-3-Updating-Data.aspx" href="http://www.silverlightshow.net/items/WCF-RIA-Services-Part-3-Updating-Data.aspx">http://www.silverlightshow.net/items/WCF-RIA-Services-Part-3-Updating-Data.aspx</a>
        </p>
        <p>
This one starts off with a quick coverage of one important aspect of querying that
I did not have room for in Part 2 – expression trees and deferred execution, and what
they can do for you with RIA Services. I show how you can formulate a query on the
client side based on the expression tree returned by a query method and that is what
executes on the server side.
</p>
        <p>
Then I get into the way updating (insert, update, and delete really) works in RIA
Services. I discuss the way the domain context caches data and tracks its changes,
and then only sends the modified entities back in a batch when you call SubmitChanges
on the domain context. I also talk a little about the async API of the domain context,
which I then followed up on with this post:
</p>
        <p>
          <a title="http://www.softinsight.com/bnoyes/2010/06/29/QueryingWCFRIAServicesAndHandlingAsyncResults.aspx" href="http://www.softinsight.com/bnoyes/2010/06/29/QueryingWCFRIAServicesAndHandlingAsyncResults.aspx">http://www.softinsight.com/bnoyes/2010/06/29/QueryingWCFRIAServicesAndHandlingAsyncResults.aspx</a>
        </p>
        <p>
Enjoy!
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=dddf4af6-7dbe-4c14-9ae4-c0f14520bc6f" />
      </body>
      <title>WCF RIA Services Part 3 &amp;ndash; Updating Data</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,dddf4af6-7dbe-4c14-9ae4-c0f14520bc6f.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2010/07/05/WCFRIAServicesPart3NdashUpdatingData.aspx</link>
      <pubDate>Mon, 05 Jul 2010 19:23:02 GMT</pubDate>
      <description>&lt;p&gt;
The third part of my series on WCF RIA Services went up a few days ago, you can check
it out here:
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://www.silverlightshow.net/items/WCF-RIA-Services-Part-3-Updating-Data.aspx" href="http://www.silverlightshow.net/items/WCF-RIA-Services-Part-3-Updating-Data.aspx"&gt;http://www.silverlightshow.net/items/WCF-RIA-Services-Part-3-Updating-Data.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
This one starts off with a quick coverage of one important aspect of querying that
I did not have room for in Part 2 – expression trees and deferred execution, and what
they can do for you with RIA Services. I show how you can formulate a query on the
client side based on the expression tree returned by a query method and that is what
executes on the server side.
&lt;/p&gt;
&lt;p&gt;
Then I get into the way updating (insert, update, and delete really) works in RIA
Services. I discuss the way the domain context caches data and tracks its changes,
and then only sends the modified entities back in a batch when you call SubmitChanges
on the domain context. I also talk a little about the async API of the domain context,
which I then followed up on with this post:
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://www.softinsight.com/bnoyes/2010/06/29/QueryingWCFRIAServicesAndHandlingAsyncResults.aspx" href="http://www.softinsight.com/bnoyes/2010/06/29/QueryingWCFRIAServicesAndHandlingAsyncResults.aspx"&gt;http://www.softinsight.com/bnoyes/2010/06/29/QueryingWCFRIAServicesAndHandlingAsyncResults.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Enjoy!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=dddf4af6-7dbe-4c14-9ae4-c0f14520bc6f" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,dddf4af6-7dbe-4c14-9ae4-c0f14520bc6f.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=182d02e2-4e6f-408d-964a-e2a508803f03</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,182d02e2-4e6f-408d-964a-e2a508803f03.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,182d02e2-4e6f-408d-964a-e2a508803f03.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=182d02e2-4e6f-408d-964a-e2a508803f03</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I had a good question in the comments of <a href="http://www.silverlightshow.net/items/WCF-RIA-Services-Part-2-Querying-Data.aspx" target="_blank">Part
2</a> of my series on WCF RIA Services that I thought I would answer here so more
could find the information.
</p>
        <p>
To paraphrase the question: “How can I retrieve a set of entities into my client and
process them when the retrieval is complete?
</p>
        <p>
I didn’t go into detail on the latter part of this in the article because of space
limitations. But basically the answer is that you can be notified of the completion
of any async operation (Load and SubmitChanges primarily) that you call on a RIA Services
domain context. There are really two programming models, but I’ll just show one for
now as the other is very similar.
</p>
        <p>
When you call DomainContext.Load, RIA services executes the retrieval in the background
and the call is non-blocking to the calling thread. But often you need to get those
results, do some processing on them, and then move on to make another query or do
something else.
</p>
        <p>
An easy way to handle things is to use an overload of Load (and SubmitChanges) that
takes a callback delegate that will be called when the async work is complete. This
model is slightly different than the two other familiar async patterns in .NET: BeginXXX/EndXXX
method pairs and XXXAsync/XXXCompleted method/event.
</p>
        <p>
In the RIA Services async pattern, you can pass an Action&lt;XXX&gt; delegate to the
async method you are calling, and that target method will be executed when the async
operation is complete. It will pass you results and any error information if applicable.
</p>
        <p>
In the case of a Load call, the code would look something like this:
</p>
        <pre class="csharpcode">
          <span class="kwrd">private</span>
          <span class="kwrd">void</span> RetrieveAndProcessTasks()
{ TasksDomainContext context = <span class="kwrd">new</span> TasksDomainContext();
EntityQuery&lt;Task&gt; query = context.GetTasksQuery(); Action&lt;LoadOperation&lt;Task&gt;&gt;
completeProcessing = <span class="kwrd">delegate</span>(LoadOperation&lt;Task&gt;
loadOp) { <span class="kwrd">if</span> (!loadOp.HasError) { ProcessTasks(loadOp.Entities);
} <span class="kwrd">else</span> { LogAndNotify(loadOp.Error); } }; LoadOperation&lt;Task&gt;
loadOperation = context.Load(query.Where(t=&gt;t.EndDate &gt; DateTime.Now),completeProcessing,<span class="kwrd">null</span>);
} <span class="kwrd">private</span><span class="kwrd">void</span> ProcessTasks(IEnumerable&lt;Task&gt;
entities) { <span class="rem">// Do what you need to do</span> } <span class="kwrd">private</span><span class="kwrd">void</span> LogAndNotify(Exception
error) { <span class="rem">// Log the error and notify user if appropriate</span> }</pre>
        <style type="text/css">

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        <p>
Before calling Load on the domain context, you set up an Action&lt;LoadOperation&lt;T&gt;&gt;
delegate to point to a handling method with the signature void TargetMethod(LoadOperation&lt;T&gt;
op). In this example I do that with an anonymous method that checks whether there
are any errors, and if not hands off to a processing method the entities that were
returned. If there is an error, it hands off the Exception to a handling method as
well. 
</p>
        <p>
Then it is just a matter of calling Load and passing that delegate as a second argument
(the first is always the EntityQuery you want to execute), and a final argument that
is an arbitrary state object, similar to the Begin/End signatures of the original
.NET async pattern.
</p>
        <p>
Unfortunately there is no easy way to shield you entirely from the async nature of
service calls in Silverlight if you want to do something other than data bind to the
results immediately after the load occurs.
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=182d02e2-4e6f-408d-964a-e2a508803f03" />
      </body>
      <title>Querying WCF RIA Services and handling async results</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,182d02e2-4e6f-408d-964a-e2a508803f03.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2010/06/29/QueryingWCFRIAServicesAndHandlingAsyncResults.aspx</link>
      <pubDate>Tue, 29 Jun 2010 20:10:25 GMT</pubDate>
      <description>&lt;p&gt;
I had a good question in the comments of &lt;a href="http://www.silverlightshow.net/items/WCF-RIA-Services-Part-2-Querying-Data.aspx" target="_blank"&gt;Part
2&lt;/a&gt; of my series on WCF RIA Services that I thought I would answer here so more
could find the information.
&lt;/p&gt;
&lt;p&gt;
To paraphrase the question: “How can I retrieve a set of entities into my client and
process them when the retrieval is complete?
&lt;/p&gt;
&lt;p&gt;
I didn’t go into detail on the latter part of this in the article because of space
limitations. But basically the answer is that you can be notified of the completion
of any async operation (Load and SubmitChanges primarily) that you call on a RIA Services
domain context. There are really two programming models, but I’ll just show one for
now as the other is very similar.
&lt;/p&gt;
&lt;p&gt;
When you call DomainContext.Load, RIA services executes the retrieval in the background
and the call is non-blocking to the calling thread. But often you need to get those
results, do some processing on them, and then move on to make another query or do
something else.
&lt;/p&gt;
&lt;p&gt;
An easy way to handle things is to use an overload of Load (and SubmitChanges) that
takes a callback delegate that will be called when the async work is complete. This
model is slightly different than the two other familiar async patterns in .NET: BeginXXX/EndXXX
method pairs and XXXAsync/XXXCompleted method/event.
&lt;/p&gt;
&lt;p&gt;
In the RIA Services async pattern, you can pass an Action&amp;lt;XXX&amp;gt; delegate to the
async method you are calling, and that target method will be executed when the async
operation is complete. It will pass you results and any error information if applicable.
&lt;/p&gt;
&lt;p&gt;
In the case of a Load call, the code would look something like this:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RetrieveAndProcessTasks()
{ TasksDomainContext context = &lt;span class="kwrd"&gt;new&lt;/span&gt; TasksDomainContext();
EntityQuery&amp;lt;Task&amp;gt; query = context.GetTasksQuery(); Action&amp;lt;LoadOperation&amp;lt;Task&amp;gt;&amp;gt;
completeProcessing = &lt;span class="kwrd"&gt;delegate&lt;/span&gt;(LoadOperation&amp;lt;Task&amp;gt;
loadOp) { &lt;span class="kwrd"&gt;if&lt;/span&gt; (!loadOp.HasError) { ProcessTasks(loadOp.Entities);
} &lt;span class="kwrd"&gt;else&lt;/span&gt; { LogAndNotify(loadOp.Error); } }; LoadOperation&amp;lt;Task&amp;gt;
loadOperation = context.Load(query.Where(t=&amp;gt;t.EndDate &amp;gt; DateTime.Now),completeProcessing,&lt;span class="kwrd"&gt;null&lt;/span&gt;);
} &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ProcessTasks(IEnumerable&amp;lt;Task&amp;gt;
entities) { &lt;span class="rem"&gt;// Do what you need to do&lt;/span&gt; } &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; LogAndNotify(Exception
error) { &lt;span class="rem"&gt;// Log the error and notify user if appropriate&lt;/span&gt; }&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;p&gt;
Before calling Load on the domain context, you set up an Action&amp;lt;LoadOperation&amp;lt;T&amp;gt;&amp;gt;
delegate to point to a handling method with the signature void TargetMethod(LoadOperation&amp;lt;T&amp;gt;
op). In this example I do that with an anonymous method that checks whether there
are any errors, and if not hands off to a processing method the entities that were
returned. If there is an error, it hands off the Exception to a handling method as
well. 
&lt;/p&gt;
&lt;p&gt;
Then it is just a matter of calling Load and passing that delegate as a second argument
(the first is always the EntityQuery you want to execute), and a final argument that
is an arbitrary state object, similar to the Begin/End signatures of the original
.NET async pattern.
&lt;/p&gt;
&lt;p&gt;
Unfortunately there is no easy way to shield you entirely from the async nature of
service calls in Silverlight if you want to do something other than data bind to the
results immediately after the load occurs.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=182d02e2-4e6f-408d-964a-e2a508803f03" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,182d02e2-4e6f-408d-964a-e2a508803f03.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=04c85e3a-2d99-40cb-bef1-8549cdec94ea</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,04c85e3a-2d99-40cb-bef1-8549cdec94ea.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,04c85e3a-2d99-40cb-bef1-8549cdec94ea.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=04c85e3a-2d99-40cb-bef1-8549cdec94ea</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
AS I’ve mentioned in a previous post, I’m writing a 10(+?) part series on WCF RIA
Services on the Silverlight Show site. The second article is now available here:
</p>
        <p>
 <a title="http://www.silverlightshow.net/items/WCF-RIA-Services-Part-2-Querying-Data.aspx" href="http://www.silverlightshow.net/items/WCF-RIA-Services-Part-2-Querying-Data.aspx">http://www.silverlightshow.net/items/WCF-RIA-Services-Part-2-Querying-Data.aspx</a></p>
        <p>
This article shows goes into more depth on defining query methods in your domain service
and how to execute them programmatically on the client.
</p>
        <p>
So check it out!
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=04c85e3a-2d99-40cb-bef1-8549cdec94ea" />
      </body>
      <title>Part 2 of my WCF RIA Services article series is up &amp;ndash; Queryng Entities</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,04c85e3a-2d99-40cb-bef1-8549cdec94ea.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2010/06/25/Part2OfMyWCFRIAServicesArticleSeriesIsUpNdashQueryngEntities.aspx</link>
      <pubDate>Fri, 25 Jun 2010 17:39:37 GMT</pubDate>
      <description>&lt;p&gt;
AS I’ve mentioned in a previous post, I’m writing a 10(+?) part series on WCF RIA
Services on the Silverlight Show site. The second article is now available here:
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&lt;a title="http://www.silverlightshow.net/items/WCF-RIA-Services-Part-2-Querying-Data.aspx" href="http://www.silverlightshow.net/items/WCF-RIA-Services-Part-2-Querying-Data.aspx"&gt;http://www.silverlightshow.net/items/WCF-RIA-Services-Part-2-Querying-Data.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
This article shows goes into more depth on defining query methods in your domain service
and how to execute them programmatically on the client.
&lt;/p&gt;
&lt;p&gt;
So check it out!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=04c85e3a-2d99-40cb-bef1-8549cdec94ea" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,04c85e3a-2d99-40cb-bef1-8549cdec94ea.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=b586a0e6-bfa0-43a7-993f-286406c91815</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,b586a0e6-bfa0-43a7-993f-286406c91815.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,b586a0e6-bfa0-43a7-993f-286406c91815.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=b586a0e6-bfa0-43a7-993f-286406c91815</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I’ve published the first in a series of ten articles on WCF RIA Services over on the
SilverlightShow. This one just runs through the key concepts and a simple end to end
demo. Future articles will dive into the specifics of all the various capabilities
of WCF RIA Services. You can find the full article here:
</p>
        <p>
          <a title="http://www.silverlightshow.net/items/WCF-RIA-Services-Part-1-Getting-Started.aspx" href="http://www.silverlightshow.net/items/WCF-RIA-Services-Part-1-Getting-Started.aspx">http://www.silverlightshow.net/items/WCF-RIA-Services-Part-1-Getting-Started.aspx</a>
        </p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=b586a0e6-bfa0-43a7-993f-286406c91815" />
      </body>
      <title>WCF RIA Services Part 1 published</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,b586a0e6-bfa0-43a7-993f-286406c91815.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2010/06/12/WCFRIAServicesPart1Published.aspx</link>
      <pubDate>Sat, 12 Jun 2010 20:14:25 GMT</pubDate>
      <description>&lt;p&gt;
I’ve published the first in a series of ten articles on WCF RIA Services over on the
SilverlightShow. This one just runs through the key concepts and a simple end to end
demo. Future articles will dive into the specifics of all the various capabilities
of WCF RIA Services. You can find the full article here:
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://www.silverlightshow.net/items/WCF-RIA-Services-Part-1-Getting-Started.aspx" href="http://www.silverlightshow.net/items/WCF-RIA-Services-Part-1-Getting-Started.aspx"&gt;http://www.silverlightshow.net/items/WCF-RIA-Services-Part-1-Getting-Started.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=b586a0e6-bfa0-43a7-993f-286406c91815" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,b586a0e6-bfa0-43a7-993f-286406c91815.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=1beff063-0da3-41a5-bddb-0f02df8b40c9</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,1beff063-0da3-41a5-bddb-0f02df8b40c9.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,1beff063-0da3-41a5-bddb-0f02df8b40c9.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=1beff063-0da3-41a5-bddb-0f02df8b40c9</wfw:commentRss>
      <slash:comments>9</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I gave a talk today at the NOVA Code Camp on the MVVM pattern in WPF and Silverlight.
</p>
        <p>
Some of the key highlights and takeaways are:
</p>
        <ul>
          <li>
MVVM is based on the Presentation Model pattern</li>
          <li>
MVVM is all about separation of concerns and loose coupling</li>
          <li>
The ViewModel’s responsibility is to offer up state to the view in the way the view
wants to see it</li>
          <li>
The ViewModel contains and manipulates state</li>
          <li>
View.DataContext = ViewModel is the relationship between view and ViewModel</li>
          <li>
The View data binds properties on elements to properties on the ViewModel</li>
          <li>
The View elements fire commands via data bindings on command properties on the ViewModel
to manifest behavior in the ViewModel</li>
          <li>
Parent ViewModels can contain child ViewModels to allow the views to compose via DataTemplates</li>
          <li>
ViewModels can contain logic that manipulates the state including loading/updating
state, validating state, computing values, and other kinds of logic that is not readily
accessible in the model</li>
        </ul>
        <p>
A good source of info and examples on MVVM is the upcoming Prism 4 release, which
already has public drops that include the MVVM QuickStart and a future drop will contain
a more complicated MVVM Reference Implementation (bigger sample).
</p>
        <p>
You can grab the slides and demos here:   <a href="http://www.softinsight.com/downloads/CodeCamps/MVVMDemosJune2010.zip" target="_blank">Slides</a>    <a href="http://www.softinsight.com/downloads/CodeCamps/Separate Your Concerns with MVVM in WPF and Silverlight.pdf" target="_blank">Demos</a></p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=1beff063-0da3-41a5-bddb-0f02df8b40c9" />
      </body>
      <title>NOVA Code Camp: Separate Your Concerns with MVVM</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,1beff063-0da3-41a5-bddb-0f02df8b40c9.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2010/06/12/NOVACodeCampSeparateYourConcernsWithMVVM.aspx</link>
      <pubDate>Sat, 12 Jun 2010 20:05:12 GMT</pubDate>
      <description>&lt;p&gt;
I gave a talk today at the NOVA Code Camp on the MVVM pattern in WPF and Silverlight.
&lt;/p&gt;
&lt;p&gt;
Some of the key highlights and takeaways are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
MVVM is based on the Presentation Model pattern&lt;/li&gt;
&lt;li&gt;
MVVM is all about separation of concerns and loose coupling&lt;/li&gt;
&lt;li&gt;
The ViewModel’s responsibility is to offer up state to the view in the way the view
wants to see it&lt;/li&gt;
&lt;li&gt;
The ViewModel contains and manipulates state&lt;/li&gt;
&lt;li&gt;
View.DataContext = ViewModel is the relationship between view and ViewModel&lt;/li&gt;
&lt;li&gt;
The View data binds properties on elements to properties on the ViewModel&lt;/li&gt;
&lt;li&gt;
The View elements fire commands via data bindings on command properties on the ViewModel
to manifest behavior in the ViewModel&lt;/li&gt;
&lt;li&gt;
Parent ViewModels can contain child ViewModels to allow the views to compose via DataTemplates&lt;/li&gt;
&lt;li&gt;
ViewModels can contain logic that manipulates the state including loading/updating
state, validating state, computing values, and other kinds of logic that is not readily
accessible in the model&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
A good source of info and examples on MVVM is the upcoming Prism 4 release, which
already has public drops that include the MVVM QuickStart and a future drop will contain
a more complicated MVVM Reference Implementation (bigger sample).
&lt;/p&gt;
&lt;p&gt;
You can grab the slides and demos here:&amp;#160;&amp;#160; &lt;a href="http://www.softinsight.com/downloads/CodeCamps/MVVMDemosJune2010.zip" target="_blank"&gt;Slides&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://www.softinsight.com/downloads/CodeCamps/Separate Your Concerns with MVVM in WPF and Silverlight.pdf" target="_blank"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=1beff063-0da3-41a5-bddb-0f02df8b40c9" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,1beff063-0da3-41a5-bddb-0f02df8b40c9.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=0365a51d-a926-4b44-8a68-4e5834dd6310</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,0365a51d-a926-4b44-8a68-4e5834dd6310.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,0365a51d-a926-4b44-8a68-4e5834dd6310.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=0365a51d-a926-4b44-8a68-4e5834dd6310</wfw:commentRss>
      <slash:comments>19</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font color="#ff0000">UPDATE 6/5/2010: Added a couple more below on performance and
windowing based on discussion with Silverlight/WPF insiders.</font>
        </p>
        <p>
I’ve been hearing a lot of people talking about WPF lately as it if was a poor elderly
relative that is terminally ill. “Yeah, poor Fred, he always showed so much promise,
but never really amounted to anything. And now he is on his way out…”
</p>
        <p>
I think this perspective on WPF is rubbish, especially for the next couple years at
least. Images of Monty Python’s Bring Out Your Dead scene pop to mind, except WPF
is vibrant and ready for a marathon, not laying in a cart.
</p>
        <p>
Part of the problem is that as developers we tend to jump on the newest shiniest toy
on the playground and forget there are others that are just if not more capable.
</p>
        <p>
The main reason for people talking this way is Silverlight 4. First let me start by
saying I love Silverlight 4. The improvements made in this release are fantastic,
and do significantly close the gap in capabilities between WPF and Silverlight. And
for an awful lot of business and consumer applications out there, Silverlight 4 is
now good enough to build those apps using Silverlight instead of WPF. So I am not
in any way trying to bash Silverlight, just point out that it is not the only shiny
toy on the playground.
</p>
        <p>
The gap in capabilities is still there in substantial ways for certain scenarios that
you can’t easily write off by just saying you will build all your business desktop
applications in Silverlight now. At some point, maybe a couple more releases of Silverlight
away, there will be parity. In fact, by that point, I hope and think the technologies
will merge and for a lot of what you do you will just be using the same set of libraries
from the framework, and will choose from a range of deployment modes for your application
and its host. If that is the case, it doesn’t matter what you call it, it doesn’t
make WPF any less relevant today. We already have somewhere between 60-80% code equivalence
in WPF and Silverlight 4 depending on whether you focus on the core UI and supporting
code or the hosting code. 
</p>
        <p>
The main feature that people point to in SL4 that they try to say “See, we don’t need
to bother with WPF now” is Out-Of-Browser (OOB) elevated trust. The first important
point here is that it is “Elevated” not “Full”. You have the ability to do a lot of
things you couldn’t do before based on that elevated trust, but there are still a
lot of things you could be blocked from doing that would be no problem in a WPF application.
Additionally, for almost all the new things in Silverlight 4, you can look at the
corresponding capability in WPF and realize that Silveright is still the “challenged”
sibling. Even though these new features cover the 80% for most apps, that remaining
20% might be just the thing you need, and not having it could either cost you a lot
of time and money trying to compensate, or penalize your users because of the lack
of capability.
</p>
        <p>
Let me run through some of the key differences that make me hesitate to jump too quickly
to Silverlight 4 when choosing a client application technology.
</p>
        <p>
          <strong>File access:</strong>
        </p>
        <p>
WPF – Unlimited
</p>
        <p>
Silverlight – User profile special folders (My Documents, My Pictures, My Videos,
etc.)
</p>
        <p>
          <strong>Printing:</strong>
        </p>
        <p>
WPF – Many options, access to Print Dialog, control print queues, etc
</p>
        <p>
Silverlight – Print a UI element programmatically
</p>
        <p>
          <strong>Documents and editing:</strong>
        </p>
        <p>
WPF – Flow and fixed document, RichTextBox editing and integration with flow document
</p>
        <p>
Silverlight – RichTextArea control with most functionality of the WPF RichTextBox
</p>
        <p>
          <strong>Commands:</strong>
        </p>
        <p>
WPF – Support for raising commands on buttons, hyperlinks, menu items; input bindings
tied to commands for keyboard shortcuts; routed commands implementation in the box
</p>
        <p>
Silverlight – Support for raising commands on buttons, hyperlinks, context menu items,
no input bindings, no routed commands
</p>
        <p>
          <strong>Communications:</strong>
        </p>
        <p>
WPF – Full range of WCF capabilities, able to consume and host services of any kind,
full range of security options and other WS-* protocols, REST, low level communications
of many kinds
</p>
        <p>
Silverlight – Limited subset of WCF client capabilities, no ability to expose a service
from the client, unsecured TCP or HTTP protocols, duplex less capable than WPF clients
(polling HTTP or unsecured TCP only), some socket level capabilities, have to take
cross domain considerations into mind in most deployment scenarios.
</p>
        <p>
          <strong>Clipboard:</strong>
        </p>
        <p>
WPF – Any kind of serializable objects
</p>
        <p>
Silverlight – Text only
</p>
        <p>
          <strong>Drag Drop:</strong>
        </p>
        <p>
WPF – Any kind of object
</p>
        <p>
Silverlight – Files only
</p>
        <p>
          <strong>External devices:</strong>
        </p>
        <p>
WPF: Anything with a driver, COM, Win32, or communications protocol
</p>
        <p>
Silverlight: Webcam, camera, microphone, and devices with a COM API or compatible
communication protocol
</p>
        <p>
          <strong>Input:</strong>
        </p>
        <p>
WPF – Keyboard, mouse, pen, touch no real limitations
</p>
        <p>
Silverlight – Must be OOB elevated trust full screen to have full keyboard access
</p>
        <p>
          <strong>Performance (anecdotal, but consistent with what I have seen): </strong>
        </p>
        <p>
WPF – Better hardware acceleration because it can fully leverage the DirectX platform
</p>
        <p>
Silverlight – Hardware accelerated on Windows, but not as deeply as WPF
</p>
        <p>
          <strong>Windowing Control:</strong>
        </p>
        <p>
WPF – Party on. Open as many windows as you want, programmatically control size, position,
etc. anytime
</p>
        <p>
Silverlight OOB – limitations on when and where you can size/position windows, can’t
have multiple open non-modal windows
</p>
        <p>
The bottom line is that if your client application is mainly a front end for back
end data – Silverlight 4 is perfect and sufficient. But if your client application
needs deeper integration with the client machine and other things that reside client
side, it may be possible to get it done with SL4 elevated trust OOB, but it will likely
be more challenging and you may hit brick walls that kill your productivity or functionality.
You really need to do a good up front requirements analysis and if you have any significant
interaction with client machine resources, WPF is still going to make your life easier. 
</p>
        <p>
That being said, at the current time, WPF is the “Challenged” sibling in terms of
a couple of newer technologies. The WCF RIA Services capabilities for generating client
side code and having the DomainDataSource is very attractive for a broad range of
business application use cases. That will be coming in a future release for WPF, but
in the meantime, Silverlight has the leg up there. Additionally, MEF added some convenience
classes in Silverlight 4 that didn’t make it back into the main .NET Framework that
make certain composition scenarios a little easier and cleaner to code. But that is
less of a leg up than the RIA Services part.
</p>
        <p>
As developers and architects, we need to make good choices based on our requirements.
Not just jump on the latest greatest thing that everyone is talking about. If you
build on WPF today, you are not really going to be blocked from doing anything you
need to do. You might not get all the new shiny toys as quickly because WPF releases
with the Framework every few years, whereas Silverlight looks to be sticking to an
annual release cycle. But I don’t think any WPF apps are ever going to become stuck
in that technology. I think as Silverlight matures even further, we will get to a
place where you can just change deployment modes if you want a web based, cross-platform,
security context limited version of your app and it will be what we call a Silverlight
app today. If you want a deeply integrated version with the desktop you’ll choose
a deployment mode that matches what a WPF app is today.
</p>
        <p>
But if you are getting the feeling that you should avoid WPF because it might go away
or because Silverlight is the better platform, or that WPF code will become obsolete,
I think you are getting the wrong impressions and should rethink.
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=0365a51d-a926-4b44-8a68-4e5834dd6310" />
      </body>
      <title>WPF &amp;ndash; I&amp;rsquo;m Not Dead Yet!</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,0365a51d-a926-4b44-8a68-4e5834dd6310.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2010/06/06/WPFNdashIrsquomNotDeadYet.aspx</link>
      <pubDate>Sun, 06 Jun 2010 00:14:10 GMT</pubDate>
      <description>&lt;p&gt;
&lt;font color="#ff0000"&gt;UPDATE 6/5/2010: Added a couple more below on performance and
windowing based on discussion with Silverlight/WPF insiders.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
I’ve been hearing a lot of people talking about WPF lately as it if was a poor elderly
relative that is terminally ill. “Yeah, poor Fred, he always showed so much promise,
but never really amounted to anything. And now he is on his way out…”
&lt;/p&gt;
&lt;p&gt;
I think this perspective on WPF is rubbish, especially for the next couple years at
least. Images of Monty Python’s Bring Out Your Dead scene pop to mind, except WPF
is vibrant and ready for a marathon, not laying in a cart.
&lt;/p&gt;
&lt;p&gt;
Part of the problem is that as developers we tend to jump on the newest shiniest toy
on the playground and forget there are others that are just if not more capable.
&lt;/p&gt;
&lt;p&gt;
The main reason for people talking this way is Silverlight 4. First let me start by
saying I love Silverlight 4. The improvements made in this release are fantastic,
and do significantly close the gap in capabilities between WPF and Silverlight. And
for an awful lot of business and consumer applications out there, Silverlight 4 is
now good enough to build those apps using Silverlight instead of WPF. So I am not
in any way trying to bash Silverlight, just point out that it is not the only shiny
toy on the playground.
&lt;/p&gt;
&lt;p&gt;
The gap in capabilities is still there in substantial ways for certain scenarios that
you can’t easily write off by just saying you will build all your business desktop
applications in Silverlight now. At some point, maybe a couple more releases of Silverlight
away, there will be parity. In fact, by that point, I hope and think the technologies
will merge and for a lot of what you do you will just be using the same set of libraries
from the framework, and will choose from a range of deployment modes for your application
and its host. If that is the case, it doesn’t matter what you call it, it doesn’t
make WPF any less relevant today. We already have somewhere between 60-80% code equivalence
in WPF and Silverlight 4 depending on whether you focus on the core UI and supporting
code or the hosting code. 
&lt;/p&gt;
&lt;p&gt;
The main feature that people point to in SL4 that they try to say “See, we don’t need
to bother with WPF now” is Out-Of-Browser (OOB) elevated trust. The first important
point here is that it is “Elevated” not “Full”. You have the ability to do a lot of
things you couldn’t do before based on that elevated trust, but there are still a
lot of things you could be blocked from doing that would be no problem in a WPF application.
Additionally, for almost all the new things in Silverlight 4, you can look at the
corresponding capability in WPF and realize that Silveright is still the “challenged”
sibling. Even though these new features cover the 80% for most apps, that remaining
20% might be just the thing you need, and not having it could either cost you a lot
of time and money trying to compensate, or penalize your users because of the lack
of capability.
&lt;/p&gt;
&lt;p&gt;
Let me run through some of the key differences that make me hesitate to jump too quickly
to Silverlight 4 when choosing a client application technology.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;File access:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
WPF – Unlimited
&lt;/p&gt;
&lt;p&gt;
Silverlight – User profile special folders (My Documents, My Pictures, My Videos,
etc.)
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Printing:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
WPF – Many options, access to Print Dialog, control print queues, etc
&lt;/p&gt;
&lt;p&gt;
Silverlight – Print a UI element programmatically
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Documents and editing:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
WPF – Flow and fixed document, RichTextBox editing and integration with flow document
&lt;/p&gt;
&lt;p&gt;
Silverlight – RichTextArea control with most functionality of the WPF RichTextBox
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Commands:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
WPF – Support for raising commands on buttons, hyperlinks, menu items; input bindings
tied to commands for keyboard shortcuts; routed commands implementation in the box
&lt;/p&gt;
&lt;p&gt;
Silverlight – Support for raising commands on buttons, hyperlinks, context menu items,
no input bindings, no routed commands
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Communications:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
WPF – Full range of WCF capabilities, able to consume and host services of any kind,
full range of security options and other WS-* protocols, REST, low level communications
of many kinds
&lt;/p&gt;
&lt;p&gt;
Silverlight – Limited subset of WCF client capabilities, no ability to expose a service
from the client, unsecured TCP or HTTP protocols, duplex less capable than WPF clients
(polling HTTP or unsecured TCP only), some socket level capabilities, have to take
cross domain considerations into mind in most deployment scenarios.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Clipboard:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
WPF – Any kind of serializable objects
&lt;/p&gt;
&lt;p&gt;
Silverlight – Text only
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Drag Drop:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
WPF – Any kind of object
&lt;/p&gt;
&lt;p&gt;
Silverlight – Files only
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;External devices:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
WPF: Anything with a driver, COM, Win32, or communications protocol
&lt;/p&gt;
&lt;p&gt;
Silverlight: Webcam, camera, microphone, and devices with a COM API or compatible
communication protocol
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Input:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
WPF – Keyboard, mouse, pen, touch no real limitations
&lt;/p&gt;
&lt;p&gt;
Silverlight – Must be OOB elevated trust full screen to have full keyboard access
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Performance (anecdotal, but consistent with what I have seen): &lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
WPF – Better hardware acceleration because it can fully leverage the DirectX platform
&lt;/p&gt;
&lt;p&gt;
Silverlight – Hardware accelerated on Windows, but not as deeply as WPF
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Windowing Control:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
WPF – Party on. Open as many windows as you want, programmatically control size, position,
etc. anytime
&lt;/p&gt;
&lt;p&gt;
Silverlight OOB – limitations on when and where you can size/position windows, can’t
have multiple open non-modal windows
&lt;/p&gt;
&lt;p&gt;
The bottom line is that if your client application is mainly a front end for back
end data – Silverlight 4 is perfect and sufficient. But if your client application
needs deeper integration with the client machine and other things that reside client
side, it may be possible to get it done with SL4 elevated trust OOB, but it will likely
be more challenging and you may hit brick walls that kill your productivity or functionality.
You really need to do a good up front requirements analysis and if you have any significant
interaction with client machine resources, WPF is still going to make your life easier. 
&lt;/p&gt;
&lt;p&gt;
That being said, at the current time, WPF is the “Challenged” sibling in terms of
a couple of newer technologies. The WCF RIA Services capabilities for generating client
side code and having the DomainDataSource is very attractive for a broad range of
business application use cases. That will be coming in a future release for WPF, but
in the meantime, Silverlight has the leg up there. Additionally, MEF added some convenience
classes in Silverlight 4 that didn’t make it back into the main .NET Framework that
make certain composition scenarios a little easier and cleaner to code. But that is
less of a leg up than the RIA Services part.
&lt;/p&gt;
&lt;p&gt;
As developers and architects, we need to make good choices based on our requirements.
Not just jump on the latest greatest thing that everyone is talking about. If you
build on WPF today, you are not really going to be blocked from doing anything you
need to do. You might not get all the new shiny toys as quickly because WPF releases
with the Framework every few years, whereas Silverlight looks to be sticking to an
annual release cycle. But I don’t think any WPF apps are ever going to become stuck
in that technology. I think as Silverlight matures even further, we will get to a
place where you can just change deployment modes if you want a web based, cross-platform,
security context limited version of your app and it will be what we call a Silverlight
app today. If you want a deeply integrated version with the desktop you’ll choose
a deployment mode that matches what a WPF app is today.
&lt;/p&gt;
&lt;p&gt;
But if you are getting the feeling that you should avoid WPF because it might go away
or because Silverlight is the better platform, or that WPF code will become obsolete,
I think you are getting the wrong impressions and should rethink.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=0365a51d-a926-4b44-8a68-4e5834dd6310" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,0365a51d-a926-4b44-8a68-4e5834dd6310.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.softinsight.com/bnoyes/Trackback.aspx?guid=233f7676-dba1-4211-befe-3eeeac26b045</trackback:ping>
      <pingback:server>http://www.softinsight.com/bnoyes/pingback.aspx</pingback:server>
      <pingback:target>http://www.softinsight.com/bnoyes/PermaLink,guid,233f7676-dba1-4211-befe-3eeeac26b045.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.softinsight.com/bnoyes/CommentView,guid,233f7676-dba1-4211-befe-3eeeac26b045.aspx</wfw:comment>
      <wfw:commentRss>http://www.softinsight.com/bnoyes/SyndicationService.asmx/GetEntryCommentsRss?guid=233f7676-dba1-4211-befe-3eeeac26b045</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Yesterday I posted about Prism 2.2’s release and said there would be a Prism 4.0 first
drop soon. It happened sooner than I thought.
</p>
        <p>
You can go grab the drop bits here:
</p>
        <p>
          <a title="http://compositewpf.codeplex.com/releases/view/46407" href="http://compositewpf.codeplex.com/releases/view/46407">http://compositewpf.codeplex.com/releases/view/46407</a>
        </p>
        <p>
First a big thanks to the p&amp;p Prism team for continuing the trend of getting bits
out early and often to the community to drive the direction of what they produce.
They’ve only been working on this a short time, and these QuickStarts are a great
starting point that people can refer to already and provide feedback, as well as not
having to wait a few more months for the finished product to come out.
</p>
        <p>
The code that is in this drop is completely additive to what is in Prism 2.2, and
is more of a very early look at some of the guidance that will ship with Prism 4 when
it is done. Specifically, all that is there so far are two QuickStarts. One is an
MVVM QuickStart that demonstrates the use of the MVVM pattern in a standalone Silverlight
survey application that itself does not depend on Prism at all. The idea is to show
the use of MVVM in a couple of its simplest forms – one being a top level view (composite
view) that has its own view model that provides the state for the view, and the other
being several dynamically generated views (through data templates) that each have
their own instance of a view model supporting them.
</p>
        <p>
The ViewModel QuickStart is not meant to say this is the only way to get it done.
MVVM has many variations and flavors and ways of creating and relating the views and
view models. But this QuickStart is really to help those who are pretty new to the
pattern to see a running application that has one of the primary ways of structuring
MVVM for this scenario, as well as to see the nature of some of the responsibilities
and things that a ViewModel is supposed to do for a view. 
</p>
        <p>
          <a href="http://www.softinsight.com/bnoyes/content/binary/WindowsLiveWriter/Prism4.0Drop1isout_AEAF/6-3-2010%202-56-42%20PM_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="6-3-2010 2-56-42 PM" border="0" alt="6-3-2010 2-56-42 PM" src="http://www.softinsight.com/bnoyes/content/binary/WindowsLiveWriter/Prism4.0Drop1isout_AEAF/6-3-2010%202-56-42%20PM_thumb.png" width="529" height="411" />
          </a>
        </p>
        <p>
Some of the things the ViewModels in the QuickStart do that are normal responsibilities
of a ViewModel:
</p>
        <ul>
          <li>
Mapping of data from the model into the ViewModel properties so that it is readily
available to the view in the form the view needs it without having to couple the view
to the model itself or do conversions in the view to display the model data 
</li>
          <li>
Type or value conversions from the model to the view so the view doesn’t have to do
those conversions 
</li>
          <li>
Validation logic that is specific to the presentation (i.e. max input length exceeded)
and that does not or should not be part of the model 
</li>
          <li>
Exposing properties that are not part of the model themselves (i.e. character count
remaining based on current input) 
</li>
          <li>
Invoking validation logic that does reside on the model itself 
</li>
        </ul>
        <p>
Right now the code does not have as liberal of comments as it should be the time it
is done to explain some of the choices being made and why they are there in the ViewModel
classes. But realize this is just a first early drop to start sharing the work in
progress and get feedback.
</p>
        <p>
The second QuickStart that is in this drop is a modularity QuickStart that shows the
changing out MEF as the dependency injection container instead of using Unity. MEF
has its own programming model for indicating dependencies through imports and offering
up types through Export. What this QuickStart does is adds a MEFExtensions library
that is structured very much like the UnityExtensions library in Prism 2.2 and prior.
This library provides the Service Locator pattern-based bridge between the rest of
the Prism code and the particular dependency injection container you choose to use.
Prism remains container agnostic and allows you to choose from the built-in implementation
for Unity, now adding an implementation for MEF, or you can write your own Service
Locator bridge for other containers as well.
</p>
        <p>
What I like about what they have done is that the code for the core Prism parts of
your application look virtually identical to how they would look if you were (or are
already) using Unity.
</p>
        <p>
Instead of using the UnityBootstrapper base class for your own application Boostrapper,
if you want to use MEF, you’ll just change out and use MefBootstrapper. The base class
provides the same overrides (plus one new one for InitializeShell that gives you the
same two-phase construction option that you have for the container and modules as
well), so a lot of what you would normally put in your bootstrapper will look exactly
the same, modulo those things that touch the container directly. Instead of registering
and resolving types against the Unity container, you would be manipulating MEF catalogs
to add types that are not automatically discovered, and could SatisfyImports to get
instances of parts out of the container if they were going to be used directly in
the bootstrapper.
</p>
        <p>
The main differences in your module classes are that they will use MEF constructs
to indicate their dependencies and to export their type and or contract to the MEF
container. The QuickStart defines a strongly typed ModuleExport attribute for modules
so they can provide metadata about their name and dependencies:
</p>
        <p>
 
</p>
        <pre class="csharpcode">[ModuleExport(<span class="kwrd">typeof</span>(ModuleD))] <span class="kwrd">public</span><span class="kwrd">class</span> ModuleD
: IModule { <span class="kwrd">private</span> IModuleTracker moduleTracker; [ImportingConstructor] <span class="kwrd">public</span> ModuleD(IModuleTracker
moduleTracker) { <span class="kwrd">this</span>.moduleTracker = moduleTracker; ...
} <span class="kwrd">public</span><span class="kwrd">void</span> Initialize() { ...
} }</pre>
        <style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        <p>
 
</p>
        <p>
You can of course also use property imports with the Import attribute in lieu of or
in addition to ImportingConstructor, although I still favor constructor injection
so that the dependency is available in the constructor for use.
</p>
        <p>
For your Views, ViewModels, etc. they can just use standard MEF constructs, of which
there are many good examples out there.
</p>
        <p>
Here is a quick look at what the modularity QuickStart looks like:
</p>
        <p>
 
</p>
        <a href="http://www.softinsight.com/bnoyes/content/binary/WindowsLiveWriter/Prism4.0Drop1isout_AEAF/6-3-2010%202-51-46%20PM_2.png">
          <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="6-3-2010 2-51-46 PM" border="0" alt="6-3-2010 2-51-46 PM" src="http://www.softinsight.com/bnoyes/content/binary/WindowsLiveWriter/Prism4.0Drop1isout_AEAF/6-3-2010%202-51-46%20PM_thumb.png" width="458" height="344" />
        </a>
        <p>
It demonstrates loading of modules at startup, on-demand, based on references, directory
scan, and configuration all in one quickstart instead of in separate ones like existing
Prism QuickStarts. But it removes any other aspects of Prism such as regions and commands
from the mix. 
</p>
        <p>
Even though there is a Silverlight version in the drop, it doesn’t currently work,
so we will have to wait for the next drop to see what it looks like for XAP loading
as modules. But the code will be very similar.
</p>
        <p>
If you want to play with the bits and get in on the discussion and feedback, I’d encourage
you to jump into the discussion forum on the CodePlex site. I’m also working closely
with the team as an advisor, so you can also contact me directly (@briannoyes on twitter
for quick contact).
</p>
        <img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=233f7676-dba1-4211-befe-3eeeac26b045" />
      </body>
      <title>Prism 4.0 First Drop is on CodePlex</title>
      <guid isPermaLink="false">http://www.softinsight.com/bnoyes/PermaLink,guid,233f7676-dba1-4211-befe-3eeeac26b045.aspx</guid>
      <link>http://www.softinsight.com/bnoyes/2010/06/03/Prism40FirstDropIsOnCodePlex.aspx</link>
      <pubDate>Thu, 03 Jun 2010 19:29:01 GMT</pubDate>
      <description>&lt;p&gt;
Yesterday I posted about Prism 2.2’s release and said there would be a Prism 4.0 first
drop soon. It happened sooner than I thought.
&lt;/p&gt;
&lt;p&gt;
You can go grab the drop bits here:
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://compositewpf.codeplex.com/releases/view/46407" href="http://compositewpf.codeplex.com/releases/view/46407"&gt;http://compositewpf.codeplex.com/releases/view/46407&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
First a big thanks to the p&amp;amp;p Prism team for continuing the trend of getting bits
out early and often to the community to drive the direction of what they produce.
They’ve only been working on this a short time, and these QuickStarts are a great
starting point that people can refer to already and provide feedback, as well as not
having to wait a few more months for the finished product to come out.
&lt;/p&gt;
&lt;p&gt;
The code that is in this drop is completely additive to what is in Prism 2.2, and
is more of a very early look at some of the guidance that will ship with Prism 4 when
it is done. Specifically, all that is there so far are two QuickStarts. One is an
MVVM QuickStart that demonstrates the use of the MVVM pattern in a standalone Silverlight
survey application that itself does not depend on Prism at all. The idea is to show
the use of MVVM in a couple of its simplest forms – one being a top level view (composite
view) that has its own view model that provides the state for the view, and the other
being several dynamically generated views (through data templates) that each have
their own instance of a view model supporting them.
&lt;/p&gt;
&lt;p&gt;
The ViewModel QuickStart is not meant to say this is the only way to get it done.
MVVM has many variations and flavors and ways of creating and relating the views and
view models. But this QuickStart is really to help those who are pretty new to the
pattern to see a running application that has one of the primary ways of structuring
MVVM for this scenario, as well as to see the nature of some of the responsibilities
and things that a ViewModel is supposed to do for a view. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/bnoyes/content/binary/WindowsLiveWriter/Prism4.0Drop1isout_AEAF/6-3-2010%202-56-42%20PM_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="6-3-2010 2-56-42 PM" border="0" alt="6-3-2010 2-56-42 PM" src="http://www.softinsight.com/bnoyes/content/binary/WindowsLiveWriter/Prism4.0Drop1isout_AEAF/6-3-2010%202-56-42%20PM_thumb.png" width="529" height="411" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Some of the things the ViewModels in the QuickStart do that are normal responsibilities
of a ViewModel:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Mapping of data from the model into the ViewModel properties so that it is readily
available to the view in the form the view needs it without having to couple the view
to the model itself or do conversions in the view to display the model data 
&lt;/li&gt;
&lt;li&gt;
Type or value conversions from the model to the view so the view doesn’t have to do
those conversions 
&lt;/li&gt;
&lt;li&gt;
Validation logic that is specific to the presentation (i.e. max input length exceeded)
and that does not or should not be part of the model 
&lt;/li&gt;
&lt;li&gt;
Exposing properties that are not part of the model themselves (i.e. character count
remaining based on current input) 
&lt;/li&gt;
&lt;li&gt;
Invoking validation logic that does reside on the model itself 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Right now the code does not have as liberal of comments as it should be the time it
is done to explain some of the choices being made and why they are there in the ViewModel
classes. But realize this is just a first early drop to start sharing the work in
progress and get feedback.
&lt;/p&gt;
&lt;p&gt;
The second QuickStart that is in this drop is a modularity QuickStart that shows the
changing out MEF as the dependency injection container instead of using Unity. MEF
has its own programming model for indicating dependencies through imports and offering
up types through Export. What this QuickStart does is adds a MEFExtensions library
that is structured very much like the UnityExtensions library in Prism 2.2 and prior.
This library provides the Service Locator pattern-based bridge between the rest of
the Prism code and the particular dependency injection container you choose to use.
Prism remains container agnostic and allows you to choose from the built-in implementation
for Unity, now adding an implementation for MEF, or you can write your own Service
Locator bridge for other containers as well.
&lt;/p&gt;
&lt;p&gt;
What I like about what they have done is that the code for the core Prism parts of
your application look virtually identical to how they would look if you were (or are
already) using Unity.
&lt;/p&gt;
&lt;p&gt;
Instead of using the UnityBootstrapper base class for your own application Boostrapper,
if you want to use MEF, you’ll just change out and use MefBootstrapper. The base class
provides the same overrides (plus one new one for InitializeShell that gives you the
same two-phase construction option that you have for the container and modules as
well), so a lot of what you would normally put in your bootstrapper will look exactly
the same, modulo those things that touch the container directly. Instead of registering
and resolving types against the Unity container, you would be manipulating MEF catalogs
to add types that are not automatically discovered, and could SatisfyImports to get
instances of parts out of the container if they were going to be used directly in
the bootstrapper.
&lt;/p&gt;
&lt;p&gt;
The main differences in your module classes are that they will use MEF constructs
to indicate their dependencies and to export their type and or contract to the MEF
container. The QuickStart defines a strongly typed ModuleExport attribute for modules
so they can provide metadata about their name and dependencies:
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;[ModuleExport(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(ModuleD))] &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ModuleD
: IModule { &lt;span class="kwrd"&gt;private&lt;/span&gt; IModuleTracker moduleTracker; [ImportingConstructor] &lt;span class="kwrd"&gt;public&lt;/span&gt; ModuleD(IModuleTracker
moduleTracker) { &lt;span class="kwrd"&gt;this&lt;/span&gt;.moduleTracker = moduleTracker; ...
} &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Initialize() { ...
} }&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
You can of course also use property imports with the Import attribute in lieu of or
in addition to ImportingConstructor, although I still favor constructor injection
so that the dependency is available in the constructor for use.
&lt;/p&gt;
&lt;p&gt;
For your Views, ViewModels, etc. they can just use standard MEF constructs, of which
there are many good examples out there.
&lt;/p&gt;
&lt;p&gt;
Here is a quick look at what the modularity QuickStart looks like:
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;a href="http://www.softinsight.com/bnoyes/content/binary/WindowsLiveWriter/Prism4.0Drop1isout_AEAF/6-3-2010%202-51-46%20PM_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="6-3-2010 2-51-46 PM" border="0" alt="6-3-2010 2-51-46 PM" src="http://www.softinsight.com/bnoyes/content/binary/WindowsLiveWriter/Prism4.0Drop1isout_AEAF/6-3-2010%202-51-46%20PM_thumb.png" width="458" height="344" /&gt;&lt;/a&gt; 
&lt;p&gt;
It demonstrates loading of modules at startup, on-demand, based on references, directory
scan, and configuration all in one quickstart instead of in separate ones like existing
Prism QuickStarts. But it removes any other aspects of Prism such as regions and commands
from the mix. 
&lt;/p&gt;
&lt;p&gt;
Even though there is a Silverlight version in the drop, it doesn’t currently work,
so we will have to wait for the next drop to see what it looks like for XAP loading
as modules. But the code will be very similar.
&lt;/p&gt;
&lt;p&gt;
If you want to play with the bits and get in on the discussion and feedback, I’d encourage
you to jump into the discussion forum on the CodePlex site. I’m also working closely
with the team as an advisor, so you can also contact me directly (@briannoyes on twitter
for quick contact).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.softinsight.com/bnoyes/aggbug.ashx?id=233f7676-dba1-4211-befe-3eeeac26b045" /&gt;</description>
      <comments>http://www.softinsight.com/bnoyes/CommentView,guid,233f7676-dba1-4211-befe-3eeeac26b045.aspx</comments>
    </item>
  </channel>
</rss>