<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>John Smith's Blog</title>
        <link>http://geekswithblogs.net/onefloridacoder/Default.aspx</link>
        <description>Keeping the fun machine running one nickel at a time</description>
        <language>en-US</language>
        <copyright>onefloridacoder</copyright>
        <managingEditor>onefloridacoder@live.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>John Smith's Blog</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/onefloridacoder/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Patterns and Practices Summit 2010 (Monday &amp;amp; Tuesday)</title>
            <category>.net</category>
            <link>http://geekswithblogs.net/onefloridacoder/archive/2010/10/24/patterns-and-practices-summit-2010-monday-amp-tuesday.aspx</link>
            <description>&lt;p&gt;I had the opportunity to return to the Patterns and Practices Summit this year for the second time.  The first time was in 2008, and they managed to plus that experience this year.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;All of the technology was on track, and par, for what Microsoft has been pushing toward us  - 2010 being a huge year for major releases as well as out of band stuff.  The presenters did an awesome job presenting and here are/were my favorites for this year.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Monday&lt;/strong&gt; &lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/PatternsandPracticesSummit2010_A2D2/azurethumb_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="azurethumb" border="0" alt="azurethumb" src="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/PatternsandPracticesSummit2010_A2D2/azurethumb_thumb.png" width="133" height="159" /&gt;&lt;/a&gt;&lt;strong&gt;(Workshops)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt; Azure (@ScottDensmore, Eugenio Pace (think Pa-ch`ay) and how they covered the different ways the cloud can be used (SQL, Storage, and Apps).   I had a block on how all of this stuff actually locked arms, and now its clear how to position (and build) a solution with all that Azure offers.&lt;/p&gt;  &lt;p&gt;The HOLs on Monday drove a lot of value to understanding the platform and also built a base for the Azure talks during the rest of the week.  There was a fair amount of Claims-Based Identity baked into this talk as well.  Something that can help any with authentication, on the dev and app fabrics&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;That was Monday, deep-dive on Azure.  The other two HOLs given that day were on Enterprise Library 5.0 and Patterns for Loose Coupling aka Prism.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Tuesday (MishMash Day : Craftsmanship, DI/IoC, Users’ Needs, Parallel Programming, Arch Katas)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Keynote from “Uncle” Bob Martin:&lt;/strong&gt; Bob just basically told us how poor process and coding were helping us to write code that sucked.  And basically his charge was that it didn’t have to.  Bob is a big proponent of using tests (using whatever kind of xDD) to start the documentation process early.  Some of his talked is echoed from “Clean Code”, but most of it was a alarm that we should be thinking more about what we are building not so much on how we’re going to build it.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Hammet Verissimo &amp;amp; Michael Puleio: DI / IoC&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Dependency Injection and Inversion of Control are two patterns.  Start there.  Using these patterns along with other frameworks is not DI and/or IoC.  I thought I was very clear on these two topics since we used them a lot already, but they helped clarify more so of why we use them.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;David Platt “The Quadrant of Ubiquity”&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Imagine a square divided into four equal parts.  The left axis “X” is used to determine how deep the user will use the application;  the “Y” axis will determine how much the user will use the application.  This helps define where to put which features for an application.  As an example, think about two very different apps, WinZip and Word.  How much deeper do you go into each app for features?  How much do you use each feature.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Ade Miller - Parallel Programming&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;It’s not as easy as just using the PLinq extensions to access one of the other cores on your desktop or application server.  It take a bit more thought.  The idea is to not think of everything as a nail b/c you have a giant freakin’ hammer like parallelism to work with.  Ade explained there are other ways to use the Parallel library to affect data and task parallelism, and Aggregation, Futures, and Pipelines.  Great, deep talk on this.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Ted Neward - Architectural Katas&lt;/p&gt;  &lt;p&gt;The whole group was split up into teams of 4-6 tablemates to solve a problem and determine an architecture for a random problem that was handed off to each team.  Our table had a World of Webcraft game to build; others were public/private school administion software, and an internet ice cream selling site.  When we finished with our high-level architectures we discussed (and defended) them to the rest of the group.  Not one of the teams considered how the solution would have been tested.  That was my takeaway, as it was for others. So busy figuring out what to build we had already forgotten how to test it.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/onefloridacoder/aggbug/142421.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>onefloridacoder</dc:creator>
            <guid>http://geekswithblogs.net/onefloridacoder/archive/2010/10/24/patterns-and-practices-summit-2010-monday-amp-tuesday.aspx</guid>
            <pubDate>Sun, 24 Oct 2010 16:19:56 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/onefloridacoder/comments/142421.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/onefloridacoder/archive/2010/10/24/patterns-and-practices-summit-2010-monday-amp-tuesday.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/onefloridacoder/comments/commentRss/142421.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Team Foundation Server (Basic) Installation : TF254043</title>
            <link>http://geekswithblogs.net/onefloridacoder/archive/2010/08/23/team-foundation-server-basic-installation--tf254043.aspx</link>
            <description>&lt;p&gt;A few weeks ago my local TFS server stopped responding to Visual Studio because of this error: “TFS Service not available: HTTP Error 503”.  So this morning while I was waiting for the kids to finish getting ready for school I uninstalled (yes, I lost my existing repository) and started with scorched earth.&lt;/p&gt;  &lt;p&gt;I received a new error during this installation: TF254043. Here’s a link to a post that fixes a few problems if you are upgrading, using SQL R2, or just can’t get Basic to run the verifications before it configures itself.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://social.msdn.microsoft.com/Forums/en/tfssetup/thread/f6ad3e84-a9b0-46ca-bf3b-f8a1640d0e53" href="http://social.msdn.microsoft.com/Forums/en/tfssetup/thread/f6ad3e84-a9b0-46ca-bf3b-f8a1640d0e53"&gt;http://social.msdn.microsoft.com/Forums/en/tfssetup/thread/f6ad3e84-a9b0-46ca-bf3b-f8a1640d0e53&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In my particular case my SQL Server instance was my machine name.  So instead of MyMachineName\(local) which tested fine, I just needed to use MyMachineName without any slashes following my machine name.&lt;/p&gt;  &lt;p&gt;Even after the reinstall, it still failed on the original error HTTP 503, so it has to be related to auth or the local service account, still digging.  &lt;/p&gt;  &lt;p&gt;In the mean time I’m going to explore Team City’s offer for hosting a free repository/service for now.  My local .NET User Group is also looking for a repo for some community work and it would be nice to get CI working so other folks could jump in and help with a decentralized repository.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/onefloridacoder/aggbug/141461.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>onefloridacoder</dc:creator>
            <guid>http://geekswithblogs.net/onefloridacoder/archive/2010/08/23/team-foundation-server-basic-installation--tf254043.aspx</guid>
            <pubDate>Tue, 24 Aug 2010 11:41:48 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/onefloridacoder/comments/141461.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/onefloridacoder/archive/2010/08/23/team-foundation-server-basic-installation--tf254043.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/onefloridacoder/comments/commentRss/141461.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Setting up for the Orlando Code Retreat</title>
            <link>http://geekswithblogs.net/onefloridacoder/archive/2010/08/16/setting-up-for-the-orlando-code-retreat.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/c8f698a357b6_11D2E/codetreat.org_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="codetreat.org" border="0" alt="codetreat.org" src="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/c8f698a357b6_11D2E/codetreat.org_thumb.png" width="74" height="244" /&gt;&lt;/a&gt; This month I had the opportunity to help Corey Haines host a &lt;a href="http://www.coderetreat.com/how-it-works.html" target="_blank"&gt;code retreat&lt;/a&gt; here in Orlando.  We had a great turn out and everyone seemed to have a great time.  I was thinking it might help someone else out if I documented what I did to set this one up here in Orlando.  Once you decide to host, or help host one here’s what you might want to consider about a month or so before Corey even show’s up. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Get Permission and Help&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I decided to host mine where I worked and went straight to my VP to ensure I could use all of the resources I had in mind.  I asked the VPs assistant to order a bunch of extension cords and surge protectors and we ended up with 4 extension cords and four (fairly large) surge protectors to work with.  And with the surge protectors and extensions cords, everyone seemed to be able to feed their machines a good diet of power through out the day.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Location, Location, Location&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I chose a room that had a lot access to power (outlets), elbow room, and desktop space for seating 40-45 people.    The location of the outlets and the number of outlets helped as well because once Corey arrived on site the seating arrangement changed that fit the format much better.  You have to think about power outlets for all laptops showing up even though folks are pairing around one and leaving the other one idling.  Some folks won’t have a laptop, there were three that arrived with only a (paper) notebook which is fine.  &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Equipment&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I used  four extension cords and four (fairly large) surge protectors with six outlets within them.  We did have some of the Apple power adapters making “T”s in the outlets in the parts of the room where extension cords could not reach which helped.  There were a lot of cords on the floor and thankfully no one tripped on them, but I did provide some black grip tape to secure cords to the floor if needed.&lt;/p&gt;  &lt;p&gt;The room came with an overhead projector and screen that dropped out of the ceiling.  If you don’t have that kind of setup, see if you can borrow or rent a projector.  Corey keeps the Game of Life wiki (mentioned below) and something like twitterfall running on his MPB during the event as a billboard for folks in the room.  Seems like  small detail but it’s a huge help.  &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Wiki&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Corey likes to use a projector to keep the &lt;a href="http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life" target="_blank"&gt;Game of Life wiki&lt;/a&gt; displayed so folks don’t have to switch back and forth between their IDE and the wiki while they work.  He also uses it to walk the group through the problem we are working on at the beginning of the day.  And also at each 45 minute pit stop throughout the day to reiterate principles and problems we may or may not be thinking about.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;“No Pizza!”  (Lunch)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Corey really doesn’t have any constraints for the events, but one is no pizza for lunch.  He recommended wraps and they did work well for lunch.  I browsed some of the other coderetreat photos on-line to see what and how much was being served so that helped as well with gauging the amount of food.  The only thing we had that needed forks was the salad, so think along those lines if you are working from a menu.   &lt;/p&gt;  &lt;p&gt;Another recommendation Corey makes is to use a local business which is not tied to a national chain. I found &lt;a href="http://www.louoforlando.com/" target="_blank"&gt;an excellent caterer&lt;/a&gt; in the Orlando community and he was able to put out some vegan options which was a great accommodation.  The caterer also shared with me that he has a lot of requests for vegan, so it’s not that far out of the ordinary to find one that can provide vegan options.  As far as I know, everyone had enough to eat and we had food left over and a few folks had seconds.   &lt;/p&gt;  &lt;p&gt;So for wraps we had Caesar Salad, Ham &amp;amp; Cheese, Tuna, and a vegan offering for a wrap as well. For sides and dessert we have salad with Sicilian pasta salad, vegan pasta salad,  watermelon skewers, and German apple cake.   There were vegan variations on the salad dressings as well.  Corey invited 40 and I ordered food for a few vegan attendees and 45 other folks. This was just in case some folks were hungrier than others or members from my team came by.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Soft Drinks (Lunch)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;For drinks you’ll need something in the neighborhood of: six 12-packs of soda ( Code, Diet Coke, Root Beer, and Sprite); two cases of bottled-water; 40# of ice; and three medium to large coolers to hold it all.  I kept the soda and ice refrigerated during the morning so the soda would cool down quickly and I wouldn’t run out of ice during the day.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Breakfast&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://twitter.com/caike" target="_blank"&gt;@Caike&lt;/a&gt; from &lt;a href="http://orlandodojo.org/about/" target="_blank"&gt;OrlandoCodingDojo&lt;/a&gt; purchased breakfast and that consisted of coffee and bagels for ~40 people.  The coffee came in six cartons with spouts from a local doughnut shop that sells it by the carton if needed.  The doughnut shop also provided the cream cheese, napkins, coffee cups, and lids, and pink, blue, yellow, and white sugar packets.  So there’s less cost involved if the shop is already providing the condiments and containers.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Sponsors&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Whomever decides to fund this event might need an invoice for services, caterers, or receipts from miscellaneous purchases.  Just make sure folks hang on to their receipts while they are making purchases, or invoices are being requested where appropriate.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A/C and Facilities Support&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I had to make a special request to have the area we were in cooled (you might need heat where you are) for the event.  This took a long time to get approved because of the approval chain so if you are up against that as well, ask *really* early so it happens and check back often so no one forgets.  I re-requested four times during the 1.5 months this was being planned.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Cleanup&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I missed on this one, but ensure you have enough garbage bags to clean-up for 45 after breakfast and lunch.  I didn’t have access to get replacement trash bags, but there were a few garbage containers and recyclable container that help split up the refuse.  Next time I would probably keep changing out the bags and make a trip to the dumpster out back after the first iteration after breakfast and the first iteration after lunch.  This way at the end of the day there’s a few less trips to the dumpster that need to be made.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Leftovers&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If you are in an area where you can share your food after the attendees have eaten try to give the food away just after the chow lines start to die down.  This will also help with the clean-up as well at the end of the day.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Side Notes&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We had a few folks that lingered at the Agile 2010 conference that were flying home that day as well as others the flew in just from out of state for the event.  It might be helpful to have a few phone numbers on hand for a dependable cab company in case folks need to get around after the event.  Also, if folks are staying in town after the coderetreat try to have a new numbers on hand for local, clean, and moderately priced hotels or motels they can stay in if needed.  &lt;/p&gt;  &lt;p&gt;For an idea of what was discussed here take a look at &lt;a href="http://vimeo.com/14166504" target="_blank"&gt;Caike’s video&lt;/a&gt; he produced from the event.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;HTH.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/onefloridacoder/aggbug/141343.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>onefloridacoder</dc:creator>
            <guid>http://geekswithblogs.net/onefloridacoder/archive/2010/08/16/setting-up-for-the-orlando-code-retreat.aspx</guid>
            <pubDate>Tue, 17 Aug 2010 00:19:04 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/onefloridacoder/comments/141343.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/onefloridacoder/archive/2010/08/16/setting-up-for-the-orlando-code-retreat.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/onefloridacoder/comments/commentRss/141343.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Agile Games 2010 : Juega en Orlando, FL</title>
            <category>agile</category>
            <category>orlando</category>
            <link>http://geekswithblogs.net/onefloridacoder/archive/2010/08/07/agile-games-2010--juega-en-orlando-fl.aspx</link>
            <description>&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/AgileGames2010JuegaenOrlandoFL_14D35/image_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="right" src="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/AgileGames2010JuegaenOrlandoFL_14D35/image_thumb.png" width="244" height="106" /&gt;&lt;/a&gt;   &lt;p&gt;I was poking around all of the content that is tied to this year’s Agile conference, and also browsing and  selecting the sessions I want to attend next week when I realized that many of the speakers and sessions are using games to get their points across.  This does reinforce the collaboration and feedback tenets quickly when you’re playing a game - “Hey you can’t roll, it’s not your turn!” or my favorite - “Every time you are the banker you end up winning!”.  We are watching and responding, and this was probably something we all learned first – like when we were kids growing up.&lt;/p&gt;  &lt;p&gt;My point here is that every piece of advice I end up sharing with someone related to taking a certain approach or trying to bend the curve of failure for an upcoming production launch comes directly from a point of failure, or as I tell my leader – pain, “I remember this because it was really painful.”&lt;/p&gt;  &lt;p&gt;This week has been slightly tougher than the rest since there were strategically placed microscopes (think about the pretzel and M&amp;amp;M commercial) and the communication just really sucked, not the quantity but the quality.  The coding tasks seemed simple but the overhead of the what the leadership was selling screwed everything up in my mind.  Take-a-breath, count-to-10.  This week is over.&lt;/p&gt;  &lt;p&gt;Now I’m looking at the Agile conference like it’s elementary school recess or something, “hey, let’s play a game to see if we can learn, practice, and explore.”  It’s requiring a little mind bending for me this weekend.  &lt;/p&gt;  &lt;p&gt;I only have more painful experience from a project that tried to run as Agile/Scrum and failed in the eyes of the Product Owner and their constituents, but it actually worked as it was designed to by pointing out the flaws in different design artifacts that were done earlier before the development tasks started.  This is in the back my mind while I’m looking at this session catalog.  I can tell I’m really bruised or just still a total uber-noob – or maybe both. &lt;/p&gt;  &lt;p&gt;At any rate, I’m totally ready to hear folks share some of their experiences on how clients and peers use(d) their wisdom and knowledge to deliver solid solutions.  And  how people practice lean, XP, Kanban, and craftsmanship just to name a few.&lt;/p&gt;  &lt;p&gt;Let The Games Begin!&lt;/p&gt; &lt;img src="http://geekswithblogs.net/onefloridacoder/aggbug/141241.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>onefloridacoder</dc:creator>
            <guid>http://geekswithblogs.net/onefloridacoder/archive/2010/08/07/agile-games-2010--juega-en-orlando-fl.aspx</guid>
            <pubDate>Sun, 08 Aug 2010 03:43:51 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/onefloridacoder/comments/141241.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/onefloridacoder/archive/2010/08/07/agile-games-2010--juega-en-orlando-fl.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/onefloridacoder/comments/commentRss/141241.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Rendering My Fault Message</title>
            <link>http://geekswithblogs.net/onefloridacoder/archive/2010/06/17/rendering-my-fault-message.aspx</link>
            <description>&lt;p&gt;My coworkers setup  a nice way to get the fault messages from our service layer all the way back to the client’s service proxy layer.  This is what I needed to work on this afternoon.  Through a series of trials and errors I finally figured this out.&lt;/p&gt;  &lt;p&gt;The confusion was how I was looking at the exception in the quick watch viewer.  It appeared as though the EventArgs from the service call had somehow magically been cast back to FaultException(), not FaultException&amp;lt;T&amp;gt;.  &lt;/p&gt;  &lt;p&gt;I drilled into the EventArgs object with the quick watch and I copied this code to figure out where the Fault message was hiding.  Further, when I copied this quick watch code into the IDE I got squigglies.  Poop.&lt;/p&gt;  &lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'Courier New', courier, monospace; background-color: #f4f4f4; text-align: left"&gt;   &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; ((System&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum2" style="color: #606060"&gt;   2:&lt;/span&gt;   .ServiceModel&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum3" style="color: #606060"&gt;   3:&lt;/span&gt;   .FaultException&amp;lt;UnhandledExceptionFault&amp;gt;)(((System.Exception)(e.Result)).InnerException)).Detail.FaultMessage&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;font color="#e7e7e7"&gt;&lt;/font&gt;

&lt;p&gt;I wont bore you with the details but here’s how it turned out.   &lt;/p&gt;

&lt;p&gt;EventArgs which I’m calling “e” is not the result such as some collection of items you’re expecting.  It’s actually a FaultException, or in my case FaultException&amp;lt;T&amp;gt;.  Below is the calling code and the callback to handle the expected response or the fault from the completed event.&lt;/p&gt;

&lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'Courier New', courier, monospace; background-color: #f4f4f4; text-align: left"&gt;
  &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; BeginRetrieveItems(Action&amp;lt;ObservableCollection&amp;lt;Model.Widget&amp;gt;&amp;gt; FindItemsCompleteCallback, Model.WidgetLocation location)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum2" style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum3" style="color: #606060"&gt;   3:&lt;/span&gt;     var proxy = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MyServiceContractClient();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum4" style="color: #606060"&gt;   4:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum5" style="color: #606060"&gt;   5:&lt;/span&gt;     proxy.RetrieveWidgetsCompleted += (s, e) =&amp;gt; FindWidgetsCompleteCallback(FindWidgetsCompleted(e));&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum6" style="color: #606060"&gt;   6:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum7" style="color: #606060"&gt;   7:&lt;/span&gt;     RetrieveWidgetsRequest request = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RetrieveWidgetsRequest { location.Id };&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum8" style="color: #606060"&gt;   8:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum9" style="color: #606060"&gt;   9:&lt;/span&gt;     proxy.RetrieveWidgetsAsync(request);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum10" style="color: #606060"&gt;  10:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum11" style="color: #606060"&gt;  11:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum12" style="color: #606060"&gt;  12:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; ObservableCollection&amp;lt;Model.Widget&amp;gt; FindItemsCompleted(RetrieveWidgetsCompletedEventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum13" style="color: #606060"&gt;  13:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum14" style="color: #606060"&gt;  14:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (e.Error &lt;span style="color: #0000ff"&gt;is&lt;/span&gt; FaultException&amp;lt;UnhandledExceptionFault&amp;gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum15" style="color: #606060"&gt;  15:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum16" style="color: #606060"&gt;  16:&lt;/span&gt;         var fault = (FaultException&amp;lt;UnhandledExceptionFault&amp;gt;)e.Error;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum17" style="color: #606060"&gt;  17:&lt;/span&gt;         var faultDetailMessage = fault.Detail.FaultMessage;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum18" style="color: #606060"&gt;  18:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum19" style="color: #606060"&gt;  19:&lt;/span&gt;         UIMessageControlDuJour.Show(faultDetailMessage);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum20" style="color: #606060"&gt;  20:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ObservableCollection&amp;lt;BinInventoryItemCountInfo&amp;gt;();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum21" style="color: #606060"&gt;  21:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum22" style="color: #606060"&gt;  22:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum23" style="color: #606060"&gt;  23:&lt;/span&gt;     var widgets = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ObservableCollection&amp;lt;Model.Widget&amp;gt;();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum24" style="color: #606060"&gt;  24:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum25" style="color: #606060"&gt;  25:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (e.Result.Widgets != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum26" style="color: #606060"&gt;  26:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum27" style="color: #606060"&gt;  27:&lt;/span&gt;         e.Result.Widgets.ToList().ForEach(w =&amp;gt; widgets.Add(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.WidgetMapper.Map(w)));&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum28" style="color: #606060"&gt;  28:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum29" style="color: #606060"&gt;  29:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum30" style="color: #606060"&gt;  30:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; widgets;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum31" style="color: #606060"&gt;  31:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt; &lt;img src="http://geekswithblogs.net/onefloridacoder/aggbug/140476.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>onefloridacoder</dc:creator>
            <guid>http://geekswithblogs.net/onefloridacoder/archive/2010/06/17/rendering-my-fault-message.aspx</guid>
            <pubDate>Thu, 17 Jun 2010 20:06:04 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/onefloridacoder/comments/140476.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/onefloridacoder/archive/2010/06/17/rendering-my-fault-message.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/onefloridacoder/comments/commentRss/140476.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Green (Screen) Computing</title>
            <category>legacy</category>
            <category>Silverlight</category>
            <category>c#</category>
            <category>xaml</category>
            <link>http://geekswithblogs.net/onefloridacoder/archive/2010/06/04/green-screen-computing.aspx</link>
            <description>&lt;p&gt;I recently was given an assignment to create a UX where a user could use the up and down arrow keys, as well as the tab and enter keys to move through a Silverlight datagrid that is going be used as part of a high throughput data entry UI.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px" id="scid:8747F07C-CDE8-481f-B0DF-C6CFD074BF67:e8c92dd2-f930-4dbb-b9df-e352834152d6" class="wlWriterEditableSmartContent"&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/GreenComputing_11C21/green.screen-8x6.png" title="" rel="thumbnail"&gt;&lt;img border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/GreenComputing_11C21/green.screen_18.png" width="335" height="207" /&gt;&lt;/a&gt;&lt;/div&gt; And to be honest, I’ve not trapped key codes since I coded JavaScript a few years ago.  Although the frameworks I’m using made it easy, it wasn’t without some trial and error.  &lt;p&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The other thing that bothered me was that the customer tossed this into the use case as they were delivering the use case.  Fine.  I’ll take a whack at anything and beat up myself and beg (I’m not beyond begging for help) the community for help to get something done if I have to.&lt;/p&gt;  &lt;p&gt;It wasn’t as bad as I thought and I thought I would hopefully save someone a few keystrokes if you wanted to build a green screen for your customer.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Here’s the ValueConverter to handle changing the strings to decimals and then back again.  The value is a nullable valuetype so there are few extra steps to take.  Usually the “ConvertBack()” method doesn’t get addressed but in this case we have two-way binding and the converter needs to ensure that if the user doesn’t enter a value it will remain null when the value is reapplied to the model object’s setter.  &lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.78%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; height: 210px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Windows.Data;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Globalization;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; NullableDecimalToStringConverter : IValueConverter&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt; Convert(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;, Type targetType, &lt;span style="color: #0000ff"&gt;object&lt;/span&gt; parameter, System.Globalization.CultureInfo culture)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!(((&lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt;?)&lt;span style="color: #0000ff"&gt;value&lt;/span&gt;).HasValue))&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt;?)&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!(&lt;span style="color: #0000ff"&gt;value&lt;/span&gt; &lt;span style="color: #0000ff"&gt;is&lt;/span&gt; &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt;))&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ArgumentException(&lt;span style="color: #006080"&gt;"The value must be of type decimal"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt;  18:&lt;/span&gt;         NumberFormatInfo nfi = culture.NumberFormat;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt;  19:&lt;/span&gt;         nfi.NumberDecimalDigits = 4;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt;  20:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum21"&gt;  21:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; ((&lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt;)&lt;span style="color: #0000ff"&gt;value&lt;/span&gt;).ToString(&lt;span style="color: #006080"&gt;"N"&lt;/span&gt;, nfi);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum22"&gt;  22:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum23"&gt;  23:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum24"&gt;  24:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt; ConvertBack(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;, Type targetType, &lt;span style="color: #0000ff"&gt;object&lt;/span&gt; parameter, System.Globalization.CultureInfo culture)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum25"&gt;  25:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum26"&gt;  26:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; nullableDecimal;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum27"&gt;  27:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt;.TryParse(&lt;span style="color: #0000ff"&gt;value&lt;/span&gt;.ToString(), &lt;span style="color: #0000ff"&gt;out&lt;/span&gt; nullableDecimal);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum28"&gt;  28:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum29"&gt;  29:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; nullableDecimal == 0 ? &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; : nullableDecimal.ToString();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum30"&gt;  30:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum31"&gt;  31:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;           &lt;p&gt;&lt;/p&gt;

&lt;p&gt;The ConvertBack() method uses TryParse to create a value from the incoming string so if the parse fails, we get a null value back, which is what we would expect.  But while I was testing I realized that if the user types something like “2..4” instead of “2.4”, TryParse will fail and still return a null.  The user is getting “puuu-lenty” of eye-candy to ensure they know how many values are affected in this particular view.&lt;/p&gt;

&lt;p&gt; Here’s the XAML code.   This is the simple part, we just have a DataGrid with one column here that’s bound to the the appropriate ViewModel property with the Converter referenced as well. &lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;data:DataGridTextColumn&lt;/span&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: #ff0000"&gt;Header&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="On-Hand"&lt;/span&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: #ff0000"&gt;Binding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="{Binding Quantity, &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;               Mode=TwoWay, &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;               Converter={StaticResource DecimalToStringConverter}}" &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color: #ff0000"&gt;IsReadOnly&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="False"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Nothing too magical here.  Just some XAML to hook things up.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Here’s the code behind that’s handling the DataGridKeyup event.  These are wired to a local/private method but could be converted to something the ViewModel could use, but I just need to get this working for now.&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.25%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; height: 60px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100.33%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; height: 31px; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Wire up happens in the constructor&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.PicDataGrid.KeyUp += (s, e) =&amp;gt; &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.HandleKeyUp(e);&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.61%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; height: 210px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #008000"&gt;// DataGrid.BeginEdit fires when DataGrid.KeyUp fires.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; HandleKeyUp(KeyEventArgs args)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;      &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (args.Key == Key.Down || &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;          args.Key == Key.Up || &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;          args.Key == Key.Tab || &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;          args.Key == Key.Enter )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;      {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;          &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.PicDataGrid.BeginEdit();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;      }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;And that’s it.  The ValueConverter was the biggest problem starting out because I was using an existing converter that didn’t take nullable value types into account.   Once the converter was passing back the appropriate value (null, “#.####”) the grid cell(s) and the model objects started working as I needed them to.&lt;/p&gt;

&lt;p&gt; HTH.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/onefloridacoder/aggbug/140228.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>onefloridacoder</dc:creator>
            <guid>http://geekswithblogs.net/onefloridacoder/archive/2010/06/04/green-screen-computing.aspx</guid>
            <pubDate>Fri, 04 Jun 2010 13:32:25 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/onefloridacoder/comments/140228.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/onefloridacoder/archive/2010/06/04/green-screen-computing.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/onefloridacoder/comments/commentRss/140228.aspx</wfw:commentRss>
        </item>
        <item>
            <title>My First Iteration Zero</title>
            <link>http://geekswithblogs.net/onefloridacoder/archive/2010/04/29/my-first-iteration-zero.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/MyFirstIterationZero_12BF2/IterationZero_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IterationZero" border="0" alt="IterationZero" src="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/MyFirstIterationZero_12BF2/IterationZero_thumb.jpg" width="107" height="80" /&gt;&lt;/a&gt; I recently watched a web cast that covered the idea of planning from the concept stage to the product backlog.  It was the first content I had seen related to Iteration Zero and it made a lot of sense from a planning and engagement perspective where the customer is concerned.  It illuminated some of the problems I’ve experienced with getting a large project of the ground.  &lt;/p&gt;  &lt;p&gt;The idea behind this is to just figure out get everyone to understand what needs to be constructed and to build the initial feature set from a *very* high level.  Once that happens other parts of the high level construction start to take place.  &lt;/p&gt;  &lt;p&gt;You end up with a feature list that describes what the business wants the system to do, and what it potentially may (or may not) interact with.  Low tech tools are used to create UI mockups that can be used as a starting point for some of the key UI pieces.&lt;/p&gt;  &lt;p&gt;Toward the end of the webcast they speaker introduced something that was new to me.  He referred to it as an executable skeleton or the steel thread.  The idea with this part of the webcast was to describe walking through the different mocked layers of the application.  Not all layers and collaborators are involved at this stage since it’s Iteration Zero, and each layer is either hard-coded or completely mocked to provide a 35K foot view of how the different layers layers work together.  So imagine two actors on each side of a layer diagram and the flow goes down from the upper left side down through a a consumer, thorough a service layer and then back up the service layer to the destination/actor.&lt;/p&gt;  &lt;p&gt;I would imagine much could be discussed moving through new/planned or existing/legacy layers, or a little of both to see what’s implied by the current high-level design.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/MyFirstIterationZero_12BF2/RocketKit_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="RocketKit" border="0" alt="RocketKit" align="right" src="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/MyFirstIterationZero_12BF2/RocketKit_thumb.jpg" width="130" height="320" /&gt;&lt;/a&gt;One part of the web cast has the business and design team creating the product box (think of your favorite cereal or toy box) with all of the features and even pictures laid out on the outside of the box.  The notion here is that if you handed this box to someone and told them your system was inside they would have an understanding of what the system would be able to do, or the features it could provide.    &lt;/p&gt;  &lt;p&gt;One of the interesting parts of the webcast was where the speaker described that he worked with a couple of groups in the same room and each group came up with a different product box – the point is that each group had a different idea of what the system was supposed to do.  At this point of the project I thought that to be valuable considering my experience has been that historically this has taken longer than a week to realize that the business unit and design teams see the high level solution differently.  Once my box is finished I plan on moving to the next stage of solution definition which is to plan the UI for this small application using Excel, to map out the UI elements.  &lt;/p&gt;  &lt;p&gt;I’m my own customer so it feels like cheating, but taking these slow deliberate steps have already provided a few learning opportunities.  &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;So I resist the urge to load all of my user stories into my newly installed VS2010  TFS project and try to reduce or add to, the number of user stories and/or refine the high level estimates I’ve come up with so far.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/onefloridacoder/aggbug/139599.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>onefloridacoder</dc:creator>
            <guid>http://geekswithblogs.net/onefloridacoder/archive/2010/04/29/my-first-iteration-zero.aspx</guid>
            <pubDate>Fri, 30 Apr 2010 01:20:13 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/onefloridacoder/comments/139599.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/onefloridacoder/archive/2010/04/29/my-first-iteration-zero.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/onefloridacoder/comments/commentRss/139599.aspx</wfw:commentRss>
        </item>
        <item>
            <title>BFCM &amp;ndash; Big Fat Check Mark</title>
            <link>http://geekswithblogs.net/onefloridacoder/archive/2010/04/29/bfcm-ndash-big-fat-check-mark.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/BFCMBigFatCheckMark_11C51/image_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="image" border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/BFCMBigFatCheckMark_11C51/image_thumb.png" width="401" height="99" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;I was installing TFS on my local laptop last week and just got around to setting up my initial collection using the TFS Console tool and “Bang!”  I received a message that told me that my local database didn’t have the full-text search option installed.  I remember the option in a (long) list of options and didn’t remember fiddling with it.   Whatever the reason, if you are installing TFS Basic on your box, make sure you have that little check ticked, or you won’t get the big fat one pictured above.  I installed SQL 2008 Developer edition which worked well for what I needed so far, and just needed to run the “Add Feature” option instead of the “Repair” option.&lt;/p&gt;  &lt;p&gt;HTH&lt;/p&gt; &lt;img src="http://geekswithblogs.net/onefloridacoder/aggbug/139598.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>onefloridacoder</dc:creator>
            <guid>http://geekswithblogs.net/onefloridacoder/archive/2010/04/29/bfcm-ndash-big-fat-check-mark.aspx</guid>
            <pubDate>Fri, 30 Apr 2010 00:13:30 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/onefloridacoder/comments/139598.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/onefloridacoder/archive/2010/04/29/bfcm-ndash-big-fat-check-mark.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/onefloridacoder/comments/commentRss/139598.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Starting Spring Lineup</title>
            <category>VisualStudio</category>
            <link>http://geekswithblogs.net/onefloridacoder/archive/2010/04/24/starting-spring-lineup.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/StartingSpringLineup_B2D5/iStock_BarBQueXSmall_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="iStock_BarBQueXSmall" border="0" alt="iStock_BarBQueXSmall" src="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/StartingSpringLineup_B2D5/iStock_BarBQueXSmall_thumb.jpg" width="244" height="148" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;This morning I finished removing all VS2008 related frameworks and installed items related to VS2010 based on posts around the community.  Here’s what I started with on my dev laptop, the config for my laptop:  &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;HP Pavilion dv6  &lt;/li&gt;    &lt;li&gt;Win7 64-bit &lt;/li&gt;    &lt;li&gt;4Gb RAM&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Installed Developer Tools and Frameworks:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/sync/default.aspx" target="_blank"&gt;Sync 2.0 SDK&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://research.microsoft.com/en-us/projects/pex/downloads.aspx" target="_blank"&gt;Visual Studio 2010 Pex Power Tools&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://entlib.codeplex.com/" target="_blank"&gt;Enterprise Library 5.0&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/developer.aspx" target="_blank"&gt;SQL Server 2008 Developer Edition&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/ultimate" target="_blank"&gt;Visual Studio 2008 Ultimate&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=88484825-1B3C-4E8C-8B14-B05D025E1541&amp;amp;displaylang=en" target="_blank"&gt;Expression Blend 4 RC&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=2d531219-2c39-4c69-88ef-f5ae6ac18c9f" target="_blank"&gt;Team Foundation Server 2010&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://code.msdn.microsoft.com/TfsSdk/Release/ProjectReleases.aspx?ReleaseId=4188" target="_blank"&gt;Team Foundation Server 2010 SDK&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The only item I did not reinstall on top of VS2010 was ReSharper 4.5 only because I read mixed reviews on the dev experience.  At this point I really just want to get use to the new(er) IDEs without adding any confusion to my dev machine.  I’ll level off my desire for early adoption at Blend, EntLib 5.0, and Pex - I’m also interested in the Moles integration as well.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Something else I didn’t have to install &lt;a href="http://cid-39ad50927510874f.skydrive.live.com/embedicon.aspx/.Public/Exported-OFC-2010-04-24.vssettings" target="_blank"&gt;was my IDE theme&lt;/a&gt; which was left behind in my user folder was merged during installation – afterwards it was nice to see once the dust settled.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/onefloridacoder/aggbug/139492.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>onefloridacoder</dc:creator>
            <guid>http://geekswithblogs.net/onefloridacoder/archive/2010/04/24/starting-spring-lineup.aspx</guid>
            <pubDate>Sun, 25 Apr 2010 04:18:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/onefloridacoder/comments/139492.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/onefloridacoder/archive/2010/04/24/starting-spring-lineup.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/onefloridacoder/comments/commentRss/139492.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Complimentary Refills</title>
            <link>http://geekswithblogs.net/onefloridacoder/archive/2010/04/22/complimentary-refills.aspx</link>
            <description>&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/ComplimentaryRefills_1019C/Free%20Refills_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="Free Refills" border="0" alt="Free Refills" align="right" src="http://geekswithblogs.net/images/geekswithblogs_net/onefloridacoder/WindowsLiveWriter/ComplimentaryRefills_1019C/Free%20Refills_thumb.jpg" width="117" height="164" /&gt;&lt;/a&gt;  &lt;p&gt;My son and I were out to dinner and right after we sat down, he combs the menu to locate the soda  selection.  Then he looks up at me and says “Looks like we get free refills here, sweet!”  While we were sitting there I was thinking where that statement came from and I remember one time where he was helping to figure out the tip and saw that were we charged for six sodas, but there were only four of us at the table.  I would say that’s when this started for eateries he’s not familiar with.&lt;/p&gt;  &lt;p&gt;I was talking a friend of mine this week and this thought came to me, why can’t we manage expectations like my son – find out before the order is placed.  Find out what’s expected first then use the other bits of guidance to move forward.  But how many times have we all paid way to much for something we thought was free on a project – me, plenty.  This quote is going up in my work space, next to one I picked up from Corey Haines’ Software Craftsmanship talk at &lt;a href="http://openagile.ro/openagileromania-2009/" target="_blank"&gt;Open Agile Romania&lt;/a&gt; - “Work != Practice”.  So if anyone else has gotten burnt, maybe check the menu, it will be in the area where the customer will pick two from the list of “Price, Quality, or Speed”.  The refill policy should be listed just beneath that.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/onefloridacoder/aggbug/139458.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>onefloridacoder</dc:creator>
            <guid>http://geekswithblogs.net/onefloridacoder/archive/2010/04/22/complimentary-refills.aspx</guid>
            <pubDate>Thu, 22 Apr 2010 22:19:24 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/onefloridacoder/comments/139458.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/onefloridacoder/archive/2010/04/22/complimentary-refills.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/onefloridacoder/comments/commentRss/139458.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>
